Tanod Util

dev.tanod/util · v0.1.0 · finance-and-payments

Tanod Util is healthy: it completed an MCP handshake in 874 ms and exposes 34 tools. It scores 65/100.

Developer utilities: encode, hash, HMAC, IDs, JSON, data conversion, cron, time zones, QR codes.

Endpoint: https://tanod.dev/mcp/util (streamable-http)

No repository listed · Website · JSON · Add to my inventory

Score 65/100

health22.5 / 25
authEase15 / 15
toolQuality15 / 15
maintenance7 / 15
adoption0 / 10
usage0 / 10
security5 / 10

Scoring v0.3, computed 2026-10-15T08:45:32.990Z.

Health history

Checked (UTC)StatusLatencyError
2026-10-14T23:35:33.175ZHealthy874

Tools (34)

text_encodeutilpeek: Encode or decode text: base64, hex, URL, punycode, JWT decode, ... Returns the text encoded or decoded with `codec`: base64, base64url, base32, hex, url (percent), html (entities), quoted_printable, rot13, punycode, idna or jwt. Decoders are strict (bad input is a 422 decode_failed); bytes
hash_textutilpeek: Hash text or bytes: sha256, keccak256, blake2b, md5, crc32, ... Returns hex digests of the text (as UTF-8) or base64 bytes you send: md5, sha1, sha256, sha512, sha3_256, blake2b (64-byte), keccak256 (Ethereum's Keccak-256, not sha3_256) and crc32. md5 and sha1 are for checksums, not securi
hmac_sign_verifyutilpeek: Sign or verify an HMAC, including GitHub, Stripe and Slack webhook signatures. Returns the HMAC of a message under a shared key (sign), or whether a signature matches it in constant time (verify); handles GitHub (`sha256=` prefix accepted), Stripe `v1` (of `{t}.{raw body}`) and Slack `v0`
generate_idsutilpeek: Generate UUIDs or ULIDs. Returns 1-100 new identifiers: random UUID v4, time-ordered UUID v7 (RFC 9562) or ULIDs, optionally strictly increasing within the response (v7 and ULID; per response on purpose, so one caller cannot predict another's next ID). Input: optional `kind`, `version`, `c
generate_randomutilpeek: Generate cryptographically strong random numbers, bytes, UUIDs, dice rolls, picks and shuffles. Returns values from the OS CSPRNG (Python `secrets`): integers (uniform, inclusive range), floats in [min, max), 1-1,024 random bytes (hex or base64), UUID v4, dice rolls such as 3d6 or 2d10+3 w
validate_jsonutilpeek: Validate JSON against a JSON Schema. Returns whether a JSON value is valid against a JSON Schema (draft from $schema, default 2020-12; 2019-09, 7, 6, 4 and 3 recognised), with up to 100 errors (instance path, schema path, message, validator) and the formats checked. Remote $ref documents a
convert_datautilpeek: Convert data between JSON, YAML, CSV, TOML and XML. Returns the document converted from json, yaml, csv, toml or xml to json, yaml, csv or toml. YAML uses libyaml's restricted loader (alias bombs refused); XML with DTDs or entities is a 422 xml_forbidden; lossy conversions are a 422 (not_t
validate_identifierutilpeek: check the format and check digits of an identifier. Input: `kind` and `value`. Returns `valid`, `reason` (invalid_checksum, invalid_length, invalid_format, ... when not valid), `compact`, `formatted` and a kind-specific `detail` (an IBAN's country and bank code, an ISBN's ISBN-10/13 forms,
parse_phone_numberutilpeek: parse and format a phone number. Input: `number`. Returns `valid`, `possible`, `e164`, `international`, `national`, `rfc3966`, `country_calling_code`, `region`, `type` (mobile, fixed_line, toll_free, ...), `carrier`, `location` and `timezones`. A string that is not a phone number, or a nat
lookup_phone_prefixutilpeek: Look up a phone number prefix: country, line type and original network, with ambiguity. Returns look up a phone number prefix (0917, +63917, 0063917): country, line type, original network, time zones and E.164 prefix, with `ambiguous` and `candidates` when it spans networks; `list` + `regi
parse_user_agentutilpeek: parse a User-Agent string. Input: `user_agent`. Returns `browser`, `os` (family and version parts) and `device` (family, brand, model), `is_bot` with `bot_reason`, and `is_mobile`. A User-Agent is self-reported and easy to fake; `is_bot` is a heuristic (declared crawlers, HTTP libraries, h
parse_urlutilpeek: parse a URL. Input: `url`. Returns `scheme`, `host`, `port`, `effective_port`, `is_ip`, `host_ascii` / `host_unicode` (IDNA), `host_scripts` and `mixed_script_label` (homograph hints), `public_suffix`, `registrable_domain`, `subdomain` (and the ICANN-only `icann_*` view), `path`, `path_seg
cron_next_runsutilpeek: the next run times of a cron expression. Input: `expression`, optional `count`, `timezone` and `start`. Returns the normalized `expression`, `timezone`, `start`, `runs` and `exhausted`. Standard 5-field cron (minute hour day-of-month month day-of-week) or a macro (@daily, @hourly, ...); no
convert_timeutilpeek: convert one instant between time zones. Input: `to_tz`, optional `time` and `from_tz`. Returns `utc`, `unix`, the `input` view (with `ambiguous` / `nonexistent`) and one `conversions` row per zone {timezone, time, date, weekday, utc_offset, abbreviation, dst}. Zones come from the pinned IA
get_public_holidaysutilpeek: public holidays of a country for a year. Input: `country`, `year`, optional `subdivision` and `language`. Returns `holidays` rows with `count`, `source` and `note`. An unsupported country, subdivision, language or year is a 422 naming the supported values (not charged). Typically under 0.1
count_or_add_business_daysutilpeek: Count business days between two dates or add working days, skipping public holidays. Returns the business days between two dates (mode count; both ends included by default, like NETWORKDAYS) or the date N business days after or before a date (mode add, like WORKDAY), skipping weekends (con
convert_unitsutilpeek: Convert units of measurement: length, weight, temperature, volume, pressure, energy, data size. Returns a value converted between two units of one category, with the exact factor: length, mass, temperature (with offsets), volume (US and imperial), area, speed, pressure, energy, power, data
convert_color_check_contrastutilpeek: Convert a color between hex, RGB, HSL and OKLCH and check WCAG contrast. Returns a CSS color (hex, rgb(), hsl() or a CSS name) as hex, rgb, hsl, hsv, naive cmyk, OKLCH and WCAG relative luminance; with a `background`, the WCAG 2.x contrast ratio and AA / AAA pass or fail for normal and lar
check_wcag_contrastutilpeek: Check the WCAG contrast between a text color and a background color. Returns the WCAG 2.x contrast ratio of a `foreground` and a `background` CSS color, with AA / AAA pass or fail for normal text, large text and UI components (unrounded: #777 on white is 4.48:1 and fails AA). Input: `foreg
geocodeutilpeek: offline geocoding over the GeoNames cities15000 table. Input: either `place` alone or `lat` and `lon` together. `place` matches cities of 15,000+ people offline ("City" or "City, CC" with an ISO country code or a US state code); no match is a 404 place_not_found (not charged). Cities only
make_qr_codeutilpeek: make a QR code image. Input: `data`, optional `format`, `scale`, `error` and `border`. Returns `svg` (text) or `data_base64` (PNG), or with `output` "url" a 24 h download link, plus `version`, `modules`, `width_px`, `height_px` and `bytes`. Data too long for a QR code at the chosen level i
make_barcodeutilpeek: make a 1-D barcode image. Input: `data`, optional `type`, `format` and `text`. Returns `svg` (text, with width_mm/height_mm) or `data_base64` (PNG, with width_px/height_px; `output` "url": a 24 h link), plus `encoded` and `bytes`. A supplied check digit (ean13, ean8, upca, isbn13) must be
read_qr_barcodeimagepeek: Read every QR code and barcode in an image. Returns every code found: `type` (QR, EAN-13, EAN-8, UPC-A, UPC-E, Code128, Code39), decoded `text`, `kind` (url, wifi, vcard, payment_emv, ...), corner `points`, `bbox`; a QR holding an EMVCo payment payload (PIX, QR Ph, SGQR, PromptPay; starts
peppol_lookuputilpeek: Check whether a company is registered on the Peppol e-invoicing network. Returns whether a Peppol participant ID (such as 0192:983887457) is registered on the Peppol e-invoicing network, from its SML DNS record; if so, its SMP URL and the document types the SMP lists (BIS Billing 3.0 invoi
lint_x402_listingutilpeek: Lint an x402 listing, or check a seller's Bazaar coverage. Returns mode lint: a listing (PaymentRequired object or an endpoint's live 402) checked against CDP rules: problems, score, suggested description. Mode coverage (host or openapi_url): a seller's paid routes marked listed, missing o
build_ics_eventutilpeek: Build an iCalendar file from JSON events. Returns 1-50 events (summary, start, end or duration, IANA timezone, all-day, location, description, url, organizer, attendees, rrule, uid) turned into RFC 5545 VCALENDAR text: CRLF lines folded at 75 octets, text escaped (commas, semicolons, backs
parse_icsutilpeek: Parse an iCalendar file into JSON events. Returns iCalendar text (Google, Outlook, Apple, up to 1 MB) unfolded and read into events: summary, start and end as ISO 8601 with offset, all-day flag, location, description, organizer, attendees, rrule, exdates, uid, status. Windows zone names ar
expand_rruleutilpeek: Expand an iCalendar RRULE into dates. Returns an RFC 5545 RRULE and a start expanded into its occurrence list with python-dateutil in an IANA time zone: wall-clock times keep across DST changes. Up to 1,000 occurrences, an optional [from, to] window, extra until and exdates. Returns ISO 86
decode_jwtutilpeek: Decode a JWT without verifying it. Returns a compact JWT split into its header and payload JSON, with alg, typ, kid, whether a signature is present, and the standard claims: iat, nbf and exp as ISO 8601 UTC, plus expired and not_yet_valid against the server clock. Decoding does not verify
verify_jwtutilpeek: Verify a JWT signature and claims. Returns valid true or false for a JWT checked with PyJWT against one key (HMAC secret, PEM public key or JWK Set), with a reason: bad signature, expired, wrong audience or issuer, algorithm not allowed. Algorithm none is refused; the key type fixes the al
decode_lightning_invoicechainpeek: Decode a Lightning invoice: amount, payee, payment hash and expiry. Returns a Lightning invoice's network, amount (msat, sat, BTC), creation time, expiry and expired flag, payee public key recovered from the signature, payment hash, description or hash, route hints and feature bits. Input
decode_nostr_idchainpeek: Decode a Nostr npub, nprofile, note, nevent or naddr to hex; resolve NIP-05. Returns a Nostr NIP-19 identifier decoded to hex (public key or event id) and its TLV fields (relays, author, kind), or a NIP-05 name@domain resolved to a public key and relays, optionally checked against a key.
get_gpu_pricesutilpeek: Cloud GPU prices: cheapest H100, A100, L4 per GPU-hour on AWS, Azure and Google Cloud. Returns cheapest cloud GPU list prices per GPU-hour on AWS, Azure and Google Cloud, on-demand and spot, by chip, GPU memory, region and price ceiling; optionally the month a purchase beats renting the ch
upload_file_get_linkutilpeek: Upload a file and get a download link that expires in 24 hours. Returns stores a file you upload for up to 24 hours and returns a public download link (url, expires_at, bytes, sha256, content_type). Input: `filename` and `content_base64`, optional `ttl_hours`. Over HTTP the file may also b