Odel
FabTally Utility Belt

FabTally Utility Belt

@zvmzaretskyJavaScriptMITUpdated 1mo ago

13 deterministic agent utilities: timezone, cron, RRULE, currency, regex, diff, hashing & more.

Server endpointStreamable HTTPNo authProbed

This is the third-party server itself — Odel doesn't run it. Hitting this URL directly talks straight to the upstream server with no auth or proxying. Connect through Odel to front it with managed auth.

FabTally Utility Belt — MCP server

The deterministic micro-utilities AI agents call constantly, as an MCP server (stdio + streamable-HTTP) and a pay-per-call HTTP API. One reliable bundle instead of thirteen flaky npm deps.

  • Free tools return real results with no wallet: convert, text, hash, encode, id, regex.
  • Paid tools ($0.001/call, x402 · USDC on Base): timezone, cron, rrule, currency, diff, jsonschema, datemath. With no payment a paid tool returns the decoded x402 402 challenge (price / network / asset / payTo) so an agent can pay and retry with x_payment. Humans can instead prepay by card and use an X-FabTally-Key credit key against the HTTP API.

This server holds no private key. It fronts https://belt.fabtally.com. Every utility is a pure, deterministic function with strict input validation; bad input → 400, never charged; nothing is stored.

Tools

ToolTierWhat it does
convertfreeUnit conversion (length/mass/temperature/volume/data/time/area/speed/angle/pressure/energy).
textfreeslugify · case-convert (camel/pascal/snake/kebab/constant/…) · {{template}} fill.
hashfreesha256/sha512/sha384/sha1/md5/sha3-256/keccak256/ripemd160, optional HMAC, hex/base64 out.
encodefreebase64 / base64url / hex / url / html encode & decode.
idfreeuuid v4/v7, ULID, nanoid, random hex/base64url/int (count up to 1000).
regexfreetest/match/extract/replace with catastrophic-backtracking protection (killable worker + timeout).
timezone$0.001Instant → IANA zone with historically-correct DST; offsets, abbreviations, DST flags.
cron$0.001Cron expression → next N run times + plain-English description.
rrule$0.001iCal RRULE (RFC 5545) → next N occurrences.
currency$0.001Live currency conversion at reference/mid-market rates (keyless ECB feed, cached).
diff$0.001Text diff: unified patch + structured op-list + add/remove/hunk stats.
jsonschema$0.001Validate against JSON Schema (draft 2020-12) and explain every error in plain English.
datemath$0.001Add/subtract ISO-8601 durations, diff into chosen units, business-day add/diff.

Install / run

stdio (Claude Desktop, Cursor, any MCP client)

// claude_desktop_config.json
{
  "mcpServers": {
    "fabtally-belt": { "command": "npx", "args": ["-y", "fabtally-belt-mcp"] }
  }
}

Or clone and run: node index.js (speaks MCP over stdio).

streamable-HTTP (remote)

Hosted: https://belt.fabtally.com/mcp. Or self-host: MCP_HTTP_PORT=8108 node http.js.

Config

  • FABTALLY_BELT_BASE — API base (default https://belt.fabtally.com).

Paying for paid tools

A paid tool with no x_payment returns:

{ "payment_required": true, "http_status": 402,
  "challenge": { "x402Version": 2, "accepts": [ { "scheme": "exact", "network": "eip155:8453",
    "amount": "1000", "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913", "payTo": "0x…" } ] } }

Build an x402 payment authorization (EIP-3009 transferWithAuthorization to payTo) for the accepts entry and call the tool again with the token in x_payment. amount is atomic USDC (1000 = $0.001).

Guarantees

Deterministic. Stateless — no PII or request data stored. Receive-only wallet (no custody). Currency figures are reference/mid-market rates for informational use, not a dealable quote. MIT licensed.