FabTally Utility Belt

io.github.zvmzaretskyPublished by GitHub account zvmzaretskyv1.0.0Updated Oct 24, 2026

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

The publisher's own server: Tally

VerifiedStreamable HTTPWeb executableDeveloper ToolsData & Analytics

Overview

AI-generated overview

A remote MCP server offering 13 deterministic utilities — unit conversion, hashing, encoding, IDs, regex, time zones, cron, RRULE, currency, diff, JSON Schema —

What you can do
Convert values between units across length, mass, temperature, volume, data, time, area, speed, angle, pressure and energy, and transform text with slugify, case conversion and template filling, plus encode or decode base64, hex, URL and HTML, and compute cryptographic digests with optional HMAC and multiple output encodings, and generate UUID, ULID, nanoid or random identifiers, and run regex test, match, extract or replace with backtracking protection, and work with dates and schedules: convert instants between IANA time zones, parse cron expressions, expand iCal RRULEs, add or subtract durations and business days, and compare texts with a unified diff, and validate data against JSON Schem
When to use it
Useful when an assistant needs small, exact, repeatable computations — unit or currency conversion, hashing and encoding, ID generation, regex work, time-zone and cron or recurrence math, text diffs and schema validation — without pulling in many separate libraries.
Requirements
Remote streamable-HTTP endpoint; no authentication, environment variables or headers are declared. The README also documents a local stdio option via npx and a self-hosted HTTP mode, plus an optional FABTALLY_BELT_BASE setting for the API base.
Before you install
Seven tools (timezone, cron, rrule, currency, diff, jsonschema, datemath) cost $0.001 per call, paid in USDC on Base via x402; without payment they return a 402 challenge, and settling requires an x402 payment authorization passed as x_payment. The server states it holds no private key and uses a receive-only wallet. Currency rates are informational, not dealable quotes. Inputs are sent to a third-party hosted service.

Installation

In SourceWeft

  1. Open FabTally Utility Belt in the dashboard and add it to a workspace.
  2. Enable the server for the chats that should use its tools.

Web executable via Streamable HTTP. Remote servers run from the web runtime once configured in a workspace.

Use with an agent

Paste this prompt into Claude Code, Codex, Cursor or another agent — or into SourceWeft chat. The agent reads this server's install guide, shows you its publisher, endpoint and sign-in, and adds it to your client once you agree. Keys never go into a command.

Read https://sourceweft.com/mcp/io.github.zvmzaretsky%2Futility-belt/install.md and connect the MCP server it describes to my client. Before changing any config, show me its publisher, endpoint and sign-in method and wait for my OK. Never put an API key in a command or in a file I would commit; ask me where it should come from.

Read the install guide the agent follows

Other MCP clients

Add this to your client's mcpServers config.

{
  "mcpServers": {
    "fabtally-utility-belt": {
      "type": "http",
      "url": "https://belt.fabtally.com/mcp"
    }
  }
}

README

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)

jsonc
// 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:

json
{ "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.

Source: README.md at commit 50dae27

Tools

13

convert

Unit conversion

FREE. Convert a value between units in the same dimension: length, mass, temperature, volume, data, time, area, speed, angle, pressure, energy. Deterministic. Args: value (number), from (unit), to (unit). e.g. {value:100, from:'c', to:'f'} or {value:1, from:'GiB', to:'MB'}. Different-dimension conversions 400.

Parameterstorequiredfromrequiredvaluerequired

text

Slugify / case-convert / template-fill

FREE. Text transforms. op='slugify' -> URL slug; op is one of camel|pascal|snake|kebab|constant|dot|path|title|sentence|upper|lower for case conversion; op='template' fills {{placeholders}} from `data`. Args: op, text (for slugify/case), or template + data (for template).

Parametersoprequireddatatextstricttemplateseparator

hash

Hash / HMAC

FREE. Compute a cryptographic digest: sha256, sha512, sha384, sha1, md5, sha3-256, keccak256, ripemd160. Optional HMAC via hmac_key. Output hex (default), base64, or base64url. keccak256 also returns a 0x-form (handy for Ethereum). Args: algorithm, text (+ input_encoding utf8|hex|base64, output_encoding, hmac_key).

Parameterstextrequiredhmac_keyalgorithmrequiredinput_encodingoutput_encoding

encode

Encode / decode (base64, hex, url, html)

FREE. Encode or decode text. op is one of base64-encode|base64-decode|base64url-encode|base64url-decode|hex-encode|hex-decode|url-encode|url-decode|html-encode|html-decode. Args: op, text.

Parametersoprequiredtextrequired

id

Generate IDs (uuid v4/v7, ULID, nanoid)

FREE. Generate identifiers. kind is one of uuidv4|uuidv7|ulid|nanoid|hex|base64url|int. count up to 1000. nanoid takes `size`; hex/base64url take `bytes`. Uses a CSPRNG. Args: kind, count.

Parameterskindsizebytescount

regex

Regex test / match / extract / replace (safe)

FREE. Run a regular expression against input with catastrophic-backtracking protection (it runs in a killable worker with a hard timeout, so a pathological pattern returns a 400 instead of hanging). op is test|match|extract|replace. Args: pattern, input, flags (gimsuy), op, replacement (for replace).

Parametersopflagsinputrequiredlimitpatternrequiredreplacement

timezone

Timezone / DST convert (paid $0.001)

PAID $0.001 (x402, USDC on Base). Convert an instant between IANA time zones with historically-correct DST. Returns converted datetime, UTC offsets, tz abbreviations, DST flags, and the offset difference. Args: datetime (ISO 8601 or epoch), from_zone, to_zone. Without payment returns the x402 challenge; pass x_payment to settle. Free teaser exists on the HTTP API at /v1/timezone/free.

Parametersto_zonerequireddatetimerequiredfrom_zonex_payment

cron

Cron -> next N runs + description (paid $0.001)

PAID $0.001. Parse a 5- or 6-field cron expression and return the next N run times plus a plain-English description. Args: expression, timezone (IANA, default UTC), count (default 5), from (ISO, optional). Without payment returns the x402 challenge; pass x_payment to settle.

Parametersfromcounttimezonex_paymentexpressionrequired

rrule

iCal RRULE -> next N occurrences (paid $0.001)

PAID $0.001. Expand an iCal RRULE (RFC 5545) recurrence into its next N occurrences. Args: rrule (e.g. 'FREQ=WEEKLY;BYDAY=MO,WE;COUNT=10'), after (ISO, default now), count (default 5), timezone. Tip: include DTSTART for anchored series. Without payment returns the x402 challenge; pass x_payment.

Parametersaftercountrrulerequiredtimezonex_payment

currency

Live currency convert (paid $0.001)

PAID $0.001. Convert an amount between currencies at reference/mid-market rates from a keyless public central-bank feed (ECB), cached. Informational, not a dealable quote. Args: amount, from, to (ISO-4217, e.g. USD, EUR, JPY). Without payment returns the x402 challenge; pass x_payment to settle.

Parameterstorequiredfromrequiredamountrequiredx_payment

diff

Text diff (unified + structured) (paid $0.001)

PAID $0.001. Diff two texts: a unified patch, a structured op-list (add/remove/equal), and add/remove/hunk stats. Args: a, b, mode (lines|words|chars, default lines), context (default 3), label_a, label_b. Without payment returns the x402 challenge; pass x_payment to settle.

Parametersarequiredbrequiredmodecontextlabel_alabel_bx_payment

jsonschema

JSON-Schema (2020-12) validate + explain (paid $0.001)

PAID $0.001. Validate a value against a JSON Schema (draft 2020-12) and explain every error in plain English (which property, what was wrong, allowed values). Args: schema (object), data (any). Without payment returns the x402 challenge; pass x_payment to settle.

Parametersdataschemarequiredx_payment

datemath

Date math: durations & business days (paid $0.001)

PAID $0.001. Calendar date math. op='add'/'subtract' an ISO-8601 duration (P1Y2M10DT2H30M) to a date; op='diff' two datetimes into chosen units; op='business-add' add business days (configurable weekend + holidays); op='business-diff' count business days between two dates. Without payment returns the x402 challenge; pass x_payment to settle.

Parametersoprequiredtodatedaysfromunitsweekenddurationholidaystimezonex_payment

Version history

1
  1. v1.0.0LatestSep 16, 2026

Score

100% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 daysRequired25 pts
  • Auth declaredRequired10 pts
  • Tools listedRequired15 pts
  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts

Other Tally integrations