ai-netcafe
v1.6.0
Published
Zero-dependency client + framework-neutral tools for AI agents: Excel/xlsx read-write, bank reconciliation without shared keys, entity dedupe with tax-ID checksums, US HS/HTS codes, diagrams, web search reachable from mainland China. Anonymous free quota,
Maintainers
Readme
ai-netcafe
Deterministic tools for AI agents, hosted and ready — callable from code in one import. Anonymous free quota, no signup. Reachable from mainland China.
npm i ai-netcafe # library
npx ai-netcafe # or: zero-install MCP launcher for Claude/Cursor/etc.As a library
import { NetCafe } from 'ai-netcafe';
const nc = new NetCafe(); // anonymous free quota
// const nc = new NetCafe({ key: 'sk-...' }); // your AllRouter key = unlimited
// Reconcile a bank statement against a ledger — NO shared reference key needed.
// Handles 1:N instalments, N:1 combined payments; never force-matches.
const r = await nc.reconcile(bankCsv, ledgerCsv);
console.log(r.counts, r.arithmetic_check); // every result carries its own proof
await nc.readXlsx('https://example.com/report.xlsx'); // dates as YYYY-MM-DD, leading zeros survive
await nc.writeXlsx({ csvText: 'sku,qty\n007,3\n' }); // real numbers sum in Excel; "007" stays text
await nc.diffTables(csvA, csvB, 'invoice_no'); // the VLOOKUP job, with self-check
await nc.dedupe(supplierCsv); // same company, different names — evidence, never auto-merge
await nc.hsLookup('0409000000'); // US HTS: natural honey (keep leading zeros!)
await nc.diagram('graph TD; A-->B'); // → hosted SVG URL, embeddable in MarkdownWith Vercel AI SDK
import { tool, jsonSchema } from 'ai';
import { toolSpecs } from 'ai-netcafe';
const tools = Object.fromEntries(toolSpecs().map((s) =>
[s.name, tool({ description: s.description, parameters: jsonSchema(s.parameters), execute: s.execute })]));
// generateText({ model, tools, ... })With LangChain.js
import { DynamicStructuredTool } from '@langchain/core/tools';
import { toolSpecs } from 'ai-netcafe';
const tools = toolSpecs().map((s) => new DynamicStructuredTool({
name: s.name, description: s.description, schema: s.parameters,
func: async (a) => JSON.stringify(await s.execute(a)) }));Why these tools
They are deterministic — no model call inside, so results are repeatable, and every count/money result carries an arithmetic self-check computed in code. If the numbers don't reconcile, the response says so instead of handing back a table nobody can verify.
Out of free quota? The error tells the agent exactly how to continue (pair_url) —
your own AllRouter key unlocks the same endpoint with no code change.
Docs & 40+ more tools: https://ainetcafe.com/mcp.html
