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.
| 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 | — |
csv_to_qbo | Convert a transaction CSV into a .qbo / OFX bank-feed file that QuickBooks and similar accounting software import d | csv, url, account_id, bank_id, currency | $0.004 |
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 |
fix_csv_encoding | Detect the real encoding of a CSV (GB18030, Shift-JIS, Windows-1252…), repair mojibake (UTF-8 that was read as Lati | url, text | $0.002 |
read_xlsx | Read an Excel .xlsx workbook (by URL) into rows — every sheet, or one you name. Returns cell values (not formula te | url, sheet, keep_formulas, max_rows, inline, preview_rows | $0.003 |
write_xlsx | Build an Excel .xlsx file from rows (CSV text or JSON arrays), optionally several sheets at once. Numbers are writt | sheets, url, text, sheet_name | $0.004 |
match_transactions | Match bank statement lines to ledger/invoice entries when there is NO shared key — by amount, date window, referenc | url_a, text_a, url_b, text_b, sheet_a, sheet_b, date_window_days, fee_tolerance, max_group_size | $0.008 |
dedupe_entities | Find 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_table | CSV (text or URL) → GitHub-flavoured Markdown table. | csv, url | $0.002 |
csv_to_chart | CSV (first column = labels, second = values) → chart PNG in one call. | csv, url, type | $0.003 |
csv_to_json | CSV (text or URL) → JSON array of objects (first row = keys). Returns a .json file. | csv, url | $0.001 |
json_to_csv | JSON 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)
| 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.