DeepSeek Harness Plugin

mario03690/dsh-netcafe

Stars ★ 2 Downloads (30d) 326 Category Tools & Capabilities Added 2026-08-23 npm dsh-netcafe

Hosted tool server over MCP: invoice and bank-statement extraction with in-code arithmetic checks, ledger reconciliation in integer cents, PDF and table conversion, SQL dialect transpiling, and mainland-China reachability probes run from a China Mobile network vantage point.

Install

# from npm (prebuilt)

dsh plugin --profile web add dsh-netcafe

# from GitHub (first run asks for allowBuilds approval — follow the hint, retry)

dsh plugin --profile web add github:mario03690/dsh-netcafe

Any plugin you install runs third-party code with your own permissions — it can read your files, use your credentials, and reach the network, and tool approvals don’t sandbox it. GitHub-sourced plugins also run build scripts at install time — pnpm blocks those until you allow them, so an install can stop with ERR_PNPM_GIT_DEP_PREPARE_NOT_ALLOWED or ERR_PNPM_IGNORED_BUILDS; dsh prints the exact key to add under allowBuilds in your profile’s pnpm-workspace.yaml, and the install works on the next run. Allowing a build is a trust decision: only install sources you trust, and pin a commit (github:owner/repo#sha).

README

A DeepSeek Harness bundle that adds AI NetCafé's hosted outcome tools to your dsh profile in one install.

It is a thin configuration layer — it ships no tool code of its own. All it does is insert one pre-configured @deepseek-ai/dsh-mcp-client row pointing at a remote MCP server, so you don't have to hand-write the YAML. If you'd rather write those six lines yourself, the config is documented here and you don't need this package.

What you get

Tools register as mcp__netcafe__<name>. Start with what_can_you_do — describe your task in any language and it returns exactly which tools here do it, with ready-to-run calls (deterministic, free, never rate-limited). The main endpoint exposes the curated core set; a few worth naming:

Tool What it does
extract_invoices A batch of up to 20 invoices → one ledger-ready table. Every row is checked in code — net + tax must equal gross — and the batch total is re-added independently, so a row the model misread is flagged with the exact difference instead of quietly landing in your books. Mixed currencies get no batch total on purpose: adding them would be an accounting error.
extract_statement Bank/credit statement PDF → structured transactions, with an arithmetic reconciliation check (opening + credits − debits = closing). If it doesn't balance, it says so and points at the row where the running total first breaks, instead of handing you clean-looking wrong data.
extract_tables Tables out of PDFs, with schema alignment — give it a target column set and heterogeneous documents come back on the same columns. Rows it isn't sure about are flagged, not guessed.
transpile_sql SQL between dialects (mysql, postgres, bigquery, snowflake, clickhouse, doris, starrocks, …). Deterministic — a real parser, not a model — so the same input always gives the same output, and syntax errors come back with line and column.
create_task (watch_reachability) Subscribe a URL to daily China-reachability checks for 30 days — notified only on state change. Pair it with the live README badge: ![China](https://ainetcafe.com/badge/china/<host>), refreshed daily. Weekly public report: https://ainetcafe.com/lab/china-weekly
china_reachability Whether a URL is reachable from a real mainland-China network vantage point, with latency, HTTP status and the IP that China's DNS resolves to. The server genuinely sits on a China Mobile backbone; this is not a guess from an overseas VPS.
check_resume Whether an ATS can actually parse a résumé (text extractable, contacts findable, multi-column layouts, tables). Rule-based and reproducible — same file, same score tomorrow.
remember / recall Cross-session memory. Keyed to your AllRouter key or an anonymous workspace token, so a later session — or a different machine — picks up where you left off.
create_task Hand a recurring job to a hosted runner (watch a page, re-run a question on a schedule). It runs on our servers and notifies you only when the result actually changes, so nothing has to stay open on your side.

Full list: https://ainetcafe.com/tools

Or install just one pack

Each pack is also a standalone repo — install exactly one capability set, pay the context cost of nothing else: dsh-china-facts · dsh-watch · dsh-memory · dsh-docflow · dsh-tables · dsh-imagegen (image gen, free trial) · dsh-adversarial-review · dsh-product-planning · dsh-code-review

One dsh profile rarely needs both spreadsheet cleanup and the Chinese lunar calendar, and every tool description costs tokens on every session. So the same tools are also served as four focused endpoints — pick one and you only pay the context cost of what you actually use.

Pack Endpoint What it is
Tables /mcp/table Reconciliation that refuses to guess. Match a bank statement against a ledger with no shared reference — one invoice paid in instalments, one payment covering several invoices. Ambiguous splits are reported, never forced. Reads and writes real .xlsx (dates restored, leading zeros kept). Also: entity dedupe, table diff, messy-CSV cleanup.
Dev kit /mcp/dev JSON↔YAML, validate JSON, line diff, regex test, JWT decode, SQL dialect transpile, timezone and unit conversion.
Doc flow /mcp/docs Markdown → PDF / Word / PowerPoint / EPUB / HTML, and PDFs merged, split, rotated, watermarked.
China facts /mcp/cn Mainland reachability from a real China backbone, statutory holidays including make-up workdays, offline ID and mobile-number validation, lunar calendar.

Making a one-off check permanent

Every tool above is a single call and free. What is not free is having something keep running after your session ends — re-checking a page, re-running a reconciliation each month, watching whether an endpoint is still reachable from mainland China — and telling you only when the answer changes.

create_task(kind="reachability", input="https://your-api.com")

That needs a workspace token (?w=ws_... on the MCP URL). The difference is not the capability; it is who keeps it alive between your sessions.

To use one instead of the full catalogue, comment out the mcp-netcafe row in cordis.patch.yml and uncomment the pack you want — the rows are already there.

All four are listed in the official MCP registry as com.ainetcafe/netcafe-tables, -devkit, -docflow and -china.

Nothing in these four packs calls a language model or a third-party API. They compute locally on our own servers, so results are deterministic and repeatable, and they cannot break because someone else changed their API. Anything involving counts or money returns its own arithmetic proof — and says so plainly when the numbers do not reconcile, instead of handing back a table nobody can check.

What's in this pack

34 tools, read from the live endpoint on 2026-08-22 — this table is generated, not hand-written, so it cannot drift away from what tools/list actually returns. The Arguments column is what the tool genuinely reads; it comes from the tool's own declared input schema.

Tool What it does Arguments Price / call
what_can_you_do Describe a task in plain language (any language) and get back exactly which tools on this server do it, with ready- task
list_apps List the open-source AI applications hosted and ready to run at AI NetCafé (ainetcafe.com). Each one normally requi category
get_app Full details of one hosted application: what it does, how to use it, measured benchmark scores, source repository, slug
ask_model Send a prompt to one specific large language model and get the answer plus its exact cost in USD. Useful when you w prompt, model, system, max_tokens
compare_models Run one prompt across multiple LLMs in parallel and return every answer side by side with its real measured cost an prompt, models, system
list_models List every model callable through AI NetCafé with its input/output price per million tokens, so you can pick by cos tier
remember Persist a durable memory: an architecture decision, a stable user preference, a verified bug fix, or an important d content, kind, project
recall Retrieve previously stored memories, optionally filtered by search query and/or project. Call at the start of work query, project, limit
web_search Search the live web through a self-hosted SearXNG meta-search (aggregates dozens of engines, no tracking). Returns query, max_results
fetch_page Fetch any public URL and return LLM-ready clean Markdown (rendered via Crawl4AI, handles JS pages). Use after web_s url
model_costs What one call actually costs on each model, measured. Vendors publish per-million-token list prices, but a call's c days
ai_visibility Audit a URL for AI visibility: which AI crawlers robots.txt actually allows (parsed per user-agent group, not keywo url $0.003
pdf_to_markdown Convert a PDF (or a scanned page image) into clean Markdown that keeps headings, lists and tables, and puts multi-c url $0.02
extract_tables Extract tables from a PDF into structured rows (JSON + CSV). Pass fields to force a fixed set of columns — that ali url, fields $0.02
extract_statement Turn a bank statement or transaction PDF into a clean transaction table (JSON + CSV), then cross-check it: opening url $0.03
json_yaml Converts JSON to YAML or YAML to JSON. It works out which one you gave it, so you do not have to say. A parse failu text, to $0.001
validate_json Checks that text parses as JSON, and optionally that required keys are present with the right top-level types. Retu text, schema $0.001
diff_text Returns which lines were added and which were removed, with line numbers — computed with a longest-common-subsequen a, b $0.002
jwt_decode Decodes the header and payload of a JWT and reports issued-at / expiry as readable timestamps plus seconds remainin token $0.001
regex_test Runs a regular expression against sample text and returns every match with its position and capture groups (named g pattern, text, flags $0.001
diff_tables Matches rows across two CSVs on a key column and reports three things: keys only in A, keys only in B, and keys in url_a, url_b, text_a, text_b, key $0.003
clean_table Tidies a spreadsheet export: removes duplicate rows, trims whitespace (half-width and full-width — Chinese exports url, text, ops, keep, split_column, split_by $0.003
merge_tables Combines up to 20 CSVs into a single table. Headers do not have to match: columns are unioned and a file missing a urls, texts $0.004
reconcile_ledger Reconciles two sets of records — your books against a bank, platform, or supplier statement. Matches rows on a key url_a, url_b, text_a, text_b, key, amount $0.006
extract_invoices Give it up to 20 invoice URLs (PDF or page images) and get back one table ready to post: number, date, seller, buye urls $0.05
create_task Create a task that runs on a schedule in our cloud — you do not keep anything running. It only notifies you when th kind, input, interval_seconds, notify_url
list_tasks Show the scheduled tasks on this workspace, when each runs next, how many times it has run and what it has cost so — (no arguments)
get_task_runs Recent runs of one scheduled task: what it returned, whether the result changed, and what each run cost. task_id, limit
delete_task Stop and remove a scheduled task and its run history. task_id
transpile_sql Convert a SQL statement from one dialect to another — mysql, postgres, sqlite, tsql, oracle, snowflake, bigquery, r sql, read, write $0.001
china_reachability Fetch a URL from a real mainland-China network egress and report HTTP status, latency and China DNS resolution. Ans url $0.003
render_diagram Turn diagram-as-code into an image: Mermaid, PlantUML, Graphviz/DOT, C4, Excalidraw and 20+ more (self-hosted Kroki source, type, format
check_job Get the status or result of a job started by deep_research, translate_pdf, or make_slides. Poll every 15-30 seconds job_id
build_app Turn one plain-language description into a LIVE single-page web tool: code is generated, deployed to managed hostin description, name, visibility, refine

in the price column means the tool is not metered per call (session/trial-gated instead). Failed calls are never charged. Check it yourself:

curl -s -X POST https://ainetcafe.com/mcp -H 'content-type: application/json' \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'

Install

dsh plugin --profile <your-profile> add dsh-netcafe

@deepseek-ai/dsh-mcp-client is a peer dependency — it ships with dsh, so in a normal install you already have it. If your profile doesn't, add it explicitly:

dsh plugin --profile <your-profile> add @deepseek-ai/dsh-mcp-client

Uninstall

dsh plugin --profile <your-profile> remove dsh-netcafe

That removes the bundle's layer; no state is left behind on your machine. Anything you stored with remember lives on the server against your key — call forget first if you want it gone.

Supported versions

  • Built against @deepseek-ai/dsh-mcp-client@0.0.1-rc.1; dsh v0.1 developer preview (released 2026-08-13, Cordis v4) uses the same MCP client config shape, which is the only surface this bundle touches. If a later preview changes it, open an issue — same-day fix.
  • dsh is in developer preview and its maintainers explicitly warn about compatibility-breaking changes. This bundle deliberately depends only on the MCP client's config shape — the narrowest surface available — but if dsh renames or restructures that plugin, this will break until updated. Open an issue and it'll be fixed.
  • The MCP server itself speaks protocol 2025-06-18 over Streamable HTTP and is versioned independently of dsh.

Cost, quota and privacy

  • Free anonymous quota, no signup. Every response reports the exact USD it cost.
  • When the free quota runs out, the response tells you how to continue — either an AllRouter key in an Authorization header (billed to you at direct token rates), or a per-call x402 payment. Nothing silently fails.
  • Documents you send are processed in memory and not retained. Memory you store with remember is kept against your key until you forget it.
  • The URL in the bundled config carries ?s=dsh-plugin. That is a channel tag so we can tell which distribution path actually gets used — it identifies the path, not you. Drop it by writing your own config row if you'd rather not send it.

Disclosure

Built and maintained by the people who run ainetcafe.com — this is our own service, not a neutral third-party integration. The tools have a free tier and paid usage beyond it.

License

MIT

Compatibility & permissions (at a glance)

Signal This plugin
Runtime dsh v0.1 developer preview (2026-08-13, Cordis v4). Touches only the MCP client config shape — the narrowest surface available. Verified against a live endpoint on 2026-08-17.
What runs locally Nothing. Ships one cordis.patch.yml row; there is no tool code, no build step and no lifecycle script in this package.
Filesystem access None.
Shell / process access None.
Network access Outbound HTTPS to ainetcafe.com only, from the MCP client that dsh already ships.
Credentials None required. No signup, no API key for the free tier. An optional AllRouter key, if you supply one, is sent by dsh as a request header and is never stored by us.
Data retention Documents and prompts are processed in memory and not retained.
Dependencies One peer dependency: @deepseek-ai/dsh-mcp-client (ships with dsh).
License MIT (see LICENSE).
Publisher The team that runs ainetcafe.com — our own hosted service, free tier plus paid usage. Issues get a same-day reply.

A directory listing is not a security review. Read cordis.patch.yml — it is short enough to read in full in under a minute.

Content from the project README on GitHub ↗

Links

More in this category

View the whole category →

Community comments

Comments are public GitHub Discussions. Loading them connects to GitHub and Giscus; a GitHub account is required to post.