dsh-tables

August 22, 2026 · View on GitHub

Messy CSV in, checkable table out: dedupe, merge, reshape, diff two tables on a key, reconcile ledgers in integer cents — every count/money result carries an in-code arithmetic proof.

What & why

If the numbers don't reconcile the response says so instead of returning a plausible-looking table. reconcile_ledger compares in integer cents, so 0.1+0.2 never invents a phantom difference. Nothing here calls a model: same input, same output, every time. Cheap rather than free — these are metered at $0.002–$0.008 per call (see the table below), inside the free anonymous quota until you exceed it.

Every set ships what_can_you_do — describe a task in any language, get the exact tool + a ready-to-run call.

What's in this pack

15 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.

ToolWhat it doesArgumentsPrice / call
what_can_you_doDescribe a task in plain language (any language) and get back exactly which tools on this server do it, with ready-task
csv_to_qboConvert a transaction CSV into a .qbo / OFX bank-feed file that QuickBooks and similar accounting software import dcsv, url, account_id, bank_id, currency$0.004
diff_tablesMatches rows across two CSVs on a key column and reports three things: keys only in A, keys only in B, and keys inurl_a, url_b, text_a, text_b, key$0.003
clean_tableTidies a spreadsheet export: removes duplicate rows, trims whitespace (half-width and full-width — Chinese exportsurl, text, ops, keep, split_column, split_by$0.003
merge_tablesCombines up to 20 CSVs into a single table. Headers do not have to match: columns are unioned and a file missing aurls, texts$0.004
reconcile_ledgerReconciles two sets of records — your books against a bank, platform, or supplier statement. Matches rows on a keyurl_a, url_b, text_a, text_b, key, amount$0.006
fix_csv_encodingDetect the real encoding of a CSV (GB18030, Shift-JIS, Windows-1252…), repair mojibake (UTF-8 that was read as Latiurl, text$0.002
read_xlsxRead an Excel .xlsx workbook (by URL) into rows — every sheet, or one you name. Returns cell values (not formula teurl, sheet, keep_formulas, max_rows, inline, preview_rows$0.003
write_xlsxBuild an Excel .xlsx file from rows (CSV text or JSON arrays), optionally several sheets at once. Numbers are writtsheets, url, text, sheet_name$0.004
match_transactionsMatch bank statement lines to ledger/invoice entries when there is NO shared key — by amount, date window, referencurl_a, text_a, url_b, text_b, sheet_a, sheet_b, date_window_days, fee_tolerance, max_group_size$0.008
dedupe_entitiesFind records in a supplier/customer/store list that are probably the SAME entity under different names — "北京星辰科技有限公url, text, sheet, name, tax_id, phone, domain, address, bank, name_threshold$0.006
csv_to_md_tableCSV (text or URL) → GitHub-flavoured Markdown table.csv, url$0.002
csv_to_chartCSV (first column = labels, second = values) → chart PNG in one call.csv, url, type$0.003
csv_to_jsonCSV (text or URL) → JSON array of objects (first row = keys). Returns a .json file.csv, url$0.001
json_to_csvJSON array of objects → CSV file. Flattens keys, quotes fields containing commas.json$0.001

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/table -H 'content-type: application/json' \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'

Install

dsh plugin --profile <your-profile> add github:mario03690/dsh-tables

Thin config layer only (one @deepseek-ai/dsh-mcp-client row, shipped as cordis.patch.yml) — no tool code runs on your machine. Built against the MCP client config shape of the dsh v0.1 developer preview (2026-08-13); if a later preview changes it, open an issue for a same-day fix.

Cost, quota, privacy

Free anonymous quota, no signup; every response reports its exact USD cost; failed calls are not charged. Documents are processed in memory and not retained. The config URL carries ?s=dsh-table — a channel tag identifying the install path, not you.

Disclosure: built and run by the team behind ainetcafe.com — our own service, free tier plus paid usage. Full bundle (everything at once): dsh-netcafe. MIT.

Compatibility & permissions (at a glance)

SignalThis plugin
Runtimedsh 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 locallyNothing. Ships one cordis.patch.yml row; there is no tool code, no build step and no lifecycle script in this package.
Filesystem accessNone.
Shell / process accessNone.
Network accessOutbound HTTPS to ainetcafe.com only, from the MCP client that dsh already ships.
CredentialsNone 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 retentionDocuments and prompts are processed in memory and not retained.
DependenciesOne peer dependency: @deepseek-ai/dsh-mcp-client (ships with dsh).
LicenseMIT (see LICENSE).
PublisherThe 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.