{
  "markdown": "# FabTally Utility Belt — MCP server\n\nThe deterministic micro-utilities AI agents call constantly, as an MCP server (stdio + streamable-HTTP)\n**and** a pay-per-call HTTP API. One reliable bundle instead of thirteen flaky npm deps.\n\n- **Free tools** return real results with no wallet: `convert`, `text`, `hash`, `encode`, `id`, `regex`.\n- **Paid tools** ($0.001/call, x402 · USDC on Base): `timezone`, `cron`, `rrule`, `currency`, `diff`,\n  `jsonschema`, `datemath`. With no payment a paid tool returns the decoded **x402 402 challenge**\n  (price / network / asset / payTo) so an agent can pay and retry with `x_payment`. Humans can instead\n  prepay by card and use an `X-FabTally-Key` credit key against the HTTP API.\n\nThis server holds **no private key**. It fronts `https://belt.fabtally.com`. Every utility is a pure,\ndeterministic function with strict input validation; **bad input → 400, never charged**; nothing is stored.\n\n## Tools\n\n| Tool | Tier | What it does |\n|---|---|---|\n| `convert` | free | Unit conversion (length/mass/temperature/volume/data/time/area/speed/angle/pressure/energy). |\n| `text` | free | slugify · case-convert (camel/pascal/snake/kebab/constant/…) · `{{template}}` fill. |\n| `hash` | free | sha256/sha512/sha384/sha1/md5/sha3-256/keccak256/ripemd160, optional HMAC, hex/base64 out. |\n| `encode` | free | base64 / base64url / hex / url / html encode & decode. |\n| `id` | free | uuid v4/v7, ULID, nanoid, random hex/base64url/int (count up to 1000). |\n| `regex` | free | test/match/extract/replace with catastrophic-backtracking protection (killable worker + timeout). |\n| `timezone` | $0.001 | Instant → IANA zone with historically-correct DST; offsets, abbreviations, DST flags. |\n| `cron` | $0.001 | Cron expression → next N run times + plain-English description. |\n| `rrule` | $0.001 | iCal RRULE (RFC 5545) → next N occurrences. |\n| `currency` | $0.001 | Live currency conversion at reference/mid-market rates (keyless ECB feed, cached). |\n| `diff` | $0.001 | Text diff: unified patch + structured op-list + add/remove/hunk stats. |\n| `jsonschema` | $0.001 | Validate against JSON Schema (draft 2020-12) and explain every error in plain English. |\n| `datemath` | $0.001 | Add/subtract ISO-8601 durations, diff into chosen units, business-day add/diff. |\n\n## Install / run\n\n### stdio (Claude Desktop, Cursor, any MCP client)\n\n```jsonc\n// claude_desktop_config.json\n{\n  \"mcpServers\": {\n    \"fabtally-belt\": { \"command\": \"npx\", \"args\": [\"-y\", \"fabtally-belt-mcp\"] }\n  }\n}\n```\n\nOr clone and run: `node index.js` (speaks MCP over stdio).\n\n### streamable-HTTP (remote)\n\nHosted: `https://belt.fabtally.com/mcp`. Or self-host: `MCP_HTTP_PORT=8108 node http.js`.\n\n### Config\n\n- `FABTALLY_BELT_BASE` — API base (default `https://belt.fabtally.com`).\n\n## Paying for paid tools\n\nA paid tool with no `x_payment` returns:\n\n```json\n{ \"payment_required\": true, \"http_status\": 402,\n  \"challenge\": { \"x402Version\": 2, \"accepts\": [ { \"scheme\": \"exact\", \"network\": \"eip155:8453\",\n    \"amount\": \"1000\", \"asset\": \"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913\", \"payTo\": \"0x…\" } ] } }\n```\n\nBuild an x402 payment authorization (EIP-3009 `transferWithAuthorization` to `payTo`) for the `accepts`\nentry and call the tool again with the token in `x_payment`. `amount` is atomic USDC (1000 = $0.001).\n\n## Guarantees\n\nDeterministic. Stateless — no PII or request data stored. Receive-only wallet (no custody). Currency\nfigures are reference/mid-market rates for informational use, not a dealable quote. MIT licensed.\n",
  "bytes": 3522,
  "sha": "09ccf03e1c30cc6cf5f3542eb7b68f25be33cffb8318a686bb0bd2e821ead9ab",
  "repo_slug": "zvmzaretsky/fabtally-belt-mcp",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_io_github_zvmzaretsky_utility_belt_9903665f/readme"
}