{"$schema":"https://wellknown.network/schemas/agent-record-v1.json","schemaVersion":"1","id":"ag_mpm3m86mctd9","handle":"tanod-util","url":"https://wellknown.network/agents/tanod-util","links":{"self":"https://wellknown.network/agents/tanod-util/record.json","html":"https://wellknown.network/agents/tanod-util","markdown":"https://wellknown.network/agents/tanod-util/record.md","api":"https://wellknown.network/api/v1/agents/tanod-util","status":"https://wellknown.network/api/v1/agents/tanod-util/status","claim":"https://wellknown.network/agents/tanod-util/claim","claimApi":"https://wellknown.network/api/v1/claims","claimDescriptor":"https://wellknown.network/agents/tanod-util/claim.json","badge":"https://wellknown.network/agents/tanod-util/badge.svg","openapi":"https://wellknown.network/openapi.json","history":"https://wellknown.network/api/v1/agents/tanod-util/history","tools":"https://wellknown.network/api/v1/agents/tanod-util/tools"},"ard":{"identifier":"urn:air:tanod.dev:server:tanod-util","type":"application/mcp-server-card+json"},"kind":"mcp_server","declared":{"name":"Developer Utilities & Validators (Tanod)","summary":"Cloud GPU prices per hour, plus developer helpers: hash, HMAC, JWT, IDs, JSON, cron, time zones.","description":"Cloud GPU prices per hour, plus developer helpers: hash, HMAC, JWT, IDs, JSON, cron, time zones.","publisher":{"name":"dev.tanod","url":null},"homepage":"https://tanod.dev","repository":null,"version":"0.1.2","license":null,"protocols":["mcp"],"tags":[],"pricing":null,"endpoints":[{"url":"https://tanod.dev/mcp/util","type":"mcp_streamable_http","auth":null,"probeable":true}],"skills":null,"tools":null,"extra":{"updatedAt":"2026-10-16T14:55:04.96114Z","publishedAt":"2026-10-16T14:55:04.96114Z","registryName":"dev.tanod/util"},"attribution":{"kind":"mcp_registry","name":"mcp_registry","summary":"mcp_registry","version":"mcp_registry","description":"mcp_registry","homepageUrl":"mcp_registry","publisherName":"mcp_registry"}},"derived":{"capabilities":[{"slug":"commerce.payments","name":"Payments","confidence":1,"provenance":"derived"},{"slug":"infra.cloud","name":"Cloud Platforms","confidence":1,"provenance":"derived"},{"slug":"geo.maps","name":"Maps & Places","confidence":1,"provenance":"derived"},{"slug":"automation.scheduling","name":"Scheduling & Cron","confidence":0.833,"provenance":"derived"},{"slug":"data.database","name":"Databases","confidence":0.525,"provenance":"derived"},{"slug":"documents.invoice-processing","name":"Invoice Processing","confidence":0.51,"provenance":"derived"},{"slug":"documents.conversion","name":"Document Conversion","confidence":0.51,"provenance":"derived"},{"slug":"dev.package-management","name":"Packages & Dependencies","confidence":0.51,"provenance":"derived"}],"categories":["automation","commerce","data","dev","documents","geo","infra"],"language":"fr"},"observed":{"status":"live","statusReason":"Responded 3h ago.","lastOkAt":"2026-10-22T11:35:04.438Z","lastProbedAt":"2026-10-22T11:35:04.438Z","statusComputedAt":"2026-10-22T11:38:20.075Z","reliability30d":{"probes":48,"successRate":1,"p50Ms":432,"basis":"service","measures":{"availability":"availability","latency":"response time","tools":"tool surface observed","summary":"Checks reached the service itself."},"checks":{"total":48,"ok":48,"authBoundaryOk":0,"serviceOk":48,"note":"Counted from the observation rows for the window, checks of the server only (HTTP, A2A card, MCP initialize). ok = authBoundaryOk + serviceOk. `probes` is the sum of daily rollups and includes registry checks, so it can differ from `total`."}},"latestObservations":[{"at":"2026-10-22T11:35:04.438Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":292,"error":null,"detail":{"tools":[{"name":"text_encode","description":"utilpeek: Encode or decode text: base64, hex, URL, punycode, JWT decode, ... For digests use hash_text; for a JWT's claims use decode_jwt. Returns the text enco"},{"name":"hash_text","description":"utilpeek: Hash text or bytes: sha256, keccak256, blake2b, md5, crc32, ... For a keyed HMAC use hmac_sign_verify. Returns hex digests of the text (as UTF-8) or b"},{"name":"hmac_sign_verify","description":"utilpeek: Sign or verify an HMAC, including GitHub, Stripe and Slack webhook signatures. For plain digests use hash_text; for JWTs use verify_jwt. Returns the H"},{"name":"generate_ids","description":"utilpeek: Generate UUIDs or ULIDs. For numbers, bytes and picks use generate_random. Returns 1-100 new identifiers: random UUID v4, time-ordered UUID v7 (RFC 95"},{"name":"generate_random","description":"utilpeek: Generate cryptographically strong random numbers, bytes, UUIDs, dice rolls, picks and shuffles. For UUIDs and ULIDs use generate_ids. Returns values f"},{"name":"validate_json","description":"utilpeek: Validate JSON against a JSON Schema. To pull JSON out of prose use extract_json_with_schema; to convert formats use convert_data. Returns whether a JS"},{"name":"convert_data","description":"utilpeek: Convert data between JSON, YAML, CSV, TOML and XML. To check JSON against a schema use validate_json. Returns the document converted from json, yaml, "},{"name":"validate_identifier","description":"utilpeek: check the format and check digits of an identifier. For a VIN's vehicle use decode_vin; for phone numbers use parse_phone_number. Returns `valid`, `re"},{"name":"parse_phone_number","description":"utilpeek: parse and format a phone number. For a prefix's country and network use lookup_phone_prefix. A string that is not a phone number, or a national form w"},{"name":"lookup_phone_prefix","description":"utilpeek: Look up a phone number prefix: country, line type and original network, with ambiguity. To parse a full number use parse_phone_number. Returns the cou"},{"name":"parse_user_agent","description":"utilpeek: parse a User-Agent string. For known x402 monitors and indexers with call rates use identify_x402_client. A User-Agent is self-reported and easy to fa"},{"name":"parse_url","description":"utilpeek: parse a URL. To fetch the page use render_page. The URL is parsed, never fetched. Public-suffix split from the Public Suffix List snapshot bundled wit"},{"name":"cron_next_runs","description":"utilpeek: the next run times of a cron expression. For iCalendar RRULEs use expand_rrule. Standard 5-field cron (minute hour day-of-month month day-of-week) or "},{"name":"convert_time","description":"utilpeek: convert one instant between time zones. For business days use count_or_add_business_days. Zones come from the pinned IANA tz database (tzdata package)"},{"name":"get_public_holidays","description":"utilpeek: public holidays of a country for a year. To count working days use count_or_add_business_days. An unsupported country, subdivision, language or year i"},{"name":"count_or_add_business_days","description":"utilpeek: Count business days between two dates or add working days, skipping public holidays. For the holiday list use get_public_holidays. Returns the busines"},{"name":"convert_units","description":"utilpeek: Convert units of measurement: length, weight, temperature, volume, pressure, energy, data size. For numbers in words use text_numbers. Returns a value"},{"name":"convert_color_check_contrast","description":"utilpeek: Convert a color between hex, RGB, HSL and OKLCH and check WCAG contrast. For contrast alone use check_wcag_contrast. Returns a CSS color (hex, rgb(), "},{"name":"check_wcag_contrast","description":"utilpeek: Check the WCAG contrast between a text color and a background color. To convert colour formats too use convert_color_check_contrast. Returns the WCAG "},{"name":"geocode","description":"utilpeek: offline geocoding over the GeoNames cities15000 table. For places of a kind nearby use find_places_nearby. Input: either `place` alone or `lat` and `l"},{"name":"make_qr_code","description":"utilpeek: make a QR code image. For 1-D barcodes use make_barcode; to read a code use read_qr_barcode. Returns `svg` (text) or `data_base64` (PNG), or with `out"},{"name":"make_barcode","description":"utilpeek: make a 1-D barcode image. For QR codes use make_qr_code; to find the product behind a number use lookup_barcode_product. Returns `svg` (text, with wid"},{"name":"read_qr_barcode","description":"imagepeek: Read every QR code and barcode in an image. To make a QR code use make_qr_code; for other text use ocr_image. Returns every code found: `type` (QR, E"},{"name":"peppol_lookup","description":"utilpeek: Check whether a company is registered on the Peppol e-invoicing network. For the legal entity use search_lei. Returns whether a Peppol participant ID "},{"name":"lint_x402_listing","description":"utilpeek: Lint an x402 listing, or check a seller's Bazaar coverage. For price position, preflight and demand too use x402_seller_report. Returns in mode lint t"},{"name":"build_ics_event","description":"utilpeek: Build an iCalendar file from JSON events. To read an .ics file use parse_ics. Returns RFC 5545 VCALENDAR text built from 1-50 events, CRLF lines folde"},{"name":"parse_ics","description":"utilpeek: Parse an iCalendar file into JSON events. To write one use build_ics_event. Returns iCalendar text (Google, Outlook, Apple, up to 1 MB) unfolded and r"},{"name":"expand_rrule","description":"utilpeek: Expand an iCalendar RRULE into dates. For cron use cron_next_runs; to build an event use build_ics_event. Returns an RFC 5545 RRULE and a start expand"},{"name":"decode_jwt","description":"utilpeek: Decode a JWT without verifying it. To check the signature use verify_jwt. Returns a compact JWT split into its header and payload JSON, with alg, typ,"},{"name":"verify_jwt","description":"utilpeek: Verify a JWT signature and claims. To read the claims without a key use decode_jwt. Returns valid true or false for a JWT checked with PyJWT against o"},{"name":"decode_lightning_invoice","description":"chainpeek: Decode a Lightning invoice: amount, payee, payment hash and expiry. For EVM calldata use decode_calldata; for Nostr ids use decode_nostr_id. Returns "},{"name":"decode_nostr_id","description":"chainpeek: Decode a Nostr npub, nprofile, note, nevent or naddr to hex; resolve NIP-05. For ENS names use resolve_ens. Returns a Nostr NIP-19 identifier decoded"},{"name":"get_gpu_prices","description":"utilpeek: GPU prices: cheapest H100, A100, L4 per GPU-hour on AWS, Azure, Google Cloud, Akash. Returns cheapest GPU prices per GPU-hour on AWS, Azure and Google"},{"name":"get_gpu_price_index","description":"utilpeek: GPU price index: daily H100, H200, A100 rental price per GPU-hour over time. Returns a GPU chip's daily rental price history: lowest and median on-dem"},{"name":"upload_file_get_link","description":"utilpeek: Upload a file and get a download link that expires in 24 hours. Returns a public download link to a file you upload, valid for `ttl_hours` (default 24"},{"name":"find_places_nearby","description":"utilpeek: Find places nearby: pharmacies, cafes, ATMs, shops and hospitals near a point, from OpenStreetMap. To resolve a city name use geocode. Returns places "},{"name":"lookup_barcode_product","description":"utilpeek: Look up the product behind a barcode in open product databases, with conflicts flagged. To make a barcode use make_barcode; to read every code in an i"},{"name":"render_mermaid","description":"pdfpeek: Render Mermaid diagram code to an SVG or PNG image. Returns Mermaid diagram code drawn as an SVG or PNG file in an offline sandboxed browser: `format` "}],"toolCount":38,"toolsHash":"0c33b833abfe8e1ac99687135fb3d4c06c0e488ad81aa2548805e767e0d43840","serverName":"tanod-util","capabilities":["prompts","resources","tools"],"serverVersion":"0.1.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-22T04:28:36.903Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":744,"error":null,"detail":{"tools":[{"name":"text_encode","description":"utilpeek: Encode or decode text: base64, hex, URL, punycode, JWT decode, ... For digests use hash_text; for a JWT's claims use decode_jwt. Returns the text enco"},{"name":"hash_text","description":"utilpeek: Hash text or bytes: sha256, keccak256, blake2b, md5, crc32, ... For a keyed HMAC use hmac_sign_verify. Returns hex digests of the text (as UTF-8) or b"},{"name":"hmac_sign_verify","description":"utilpeek: Sign or verify an HMAC, including GitHub, Stripe and Slack webhook signatures. For plain digests use hash_text; for JWTs use verify_jwt. Returns the H"},{"name":"generate_ids","description":"utilpeek: Generate UUIDs or ULIDs. For numbers, bytes and picks use generate_random. Returns 1-100 new identifiers: random UUID v4, time-ordered UUID v7 (RFC 95"},{"name":"generate_random","description":"utilpeek: Generate cryptographically strong random numbers, bytes, UUIDs, dice rolls, picks and shuffles. For UUIDs and ULIDs use generate_ids. Returns values f"},{"name":"validate_json","description":"utilpeek: Validate JSON against a JSON Schema. To pull JSON out of prose use extract_json_with_schema; to convert formats use convert_data. Returns whether a JS"},{"name":"convert_data","description":"utilpeek: Convert data between JSON, YAML, CSV, TOML and XML. To check JSON against a schema use validate_json. Returns the document converted from json, yaml, "},{"name":"validate_identifier","description":"utilpeek: check the format and check digits of an identifier. For a VIN's vehicle use decode_vin; for phone numbers use parse_phone_number. Returns `valid`, `re"},{"name":"parse_phone_number","description":"utilpeek: parse and format a phone number. For a prefix's country and network use lookup_phone_prefix. A string that is not a phone number, or a national form w"},{"name":"lookup_phone_prefix","description":"utilpeek: Look up a phone number prefix: country, line type and original network, with ambiguity. To parse a full number use parse_phone_number. Returns the cou"},{"name":"parse_user_agent","description":"utilpeek: parse a User-Agent string. For known x402 monitors and indexers with call rates use identify_x402_client. A User-Agent is self-reported and easy to fa"},{"name":"parse_url","description":"utilpeek: parse a URL. To fetch the page use render_page. The URL is parsed, never fetched. Public-suffix split from the Public Suffix List snapshot bundled wit"},{"name":"cron_next_runs","description":"utilpeek: the next run times of a cron expression. For iCalendar RRULEs use expand_rrule. Standard 5-field cron (minute hour day-of-month month day-of-week) or "},{"name":"convert_time","description":"utilpeek: convert one instant between time zones. For business days use count_or_add_business_days. Zones come from the pinned IANA tz database (tzdata package)"},{"name":"get_public_holidays","description":"utilpeek: public holidays of a country for a year. To count working days use count_or_add_business_days. An unsupported country, subdivision, language or year i"},{"name":"count_or_add_business_days","description":"utilpeek: Count business days between two dates or add working days, skipping public holidays. For the holiday list use get_public_holidays. Returns the busines"},{"name":"convert_units","description":"utilpeek: Convert units of measurement: length, weight, temperature, volume, pressure, energy, data size. For numbers in words use text_numbers. Returns a value"},{"name":"convert_color_check_contrast","description":"utilpeek: Convert a color between hex, RGB, HSL and OKLCH and check WCAG contrast. For contrast alone use check_wcag_contrast. Returns a CSS color (hex, rgb(), "},{"name":"check_wcag_contrast","description":"utilpeek: Check the WCAG contrast between a text color and a background color. To convert colour formats too use convert_color_check_contrast. Returns the WCAG "},{"name":"geocode","description":"utilpeek: offline geocoding over the GeoNames cities15000 table. For places of a kind nearby use find_places_nearby. Input: either `place` alone or `lat` and `l"},{"name":"make_qr_code","description":"utilpeek: make a QR code image. For 1-D barcodes use make_barcode; to read a code use read_qr_barcode. Returns `svg` (text) or `data_base64` (PNG), or with `out"},{"name":"make_barcode","description":"utilpeek: make a 1-D barcode image. For QR codes use make_qr_code; to find the product behind a number use lookup_barcode_product. Returns `svg` (text, with wid"},{"name":"read_qr_barcode","description":"imagepeek: Read every QR code and barcode in an image. To make a QR code use make_qr_code; for other text use ocr_image. Returns every code found: `type` (QR, E"},{"name":"peppol_lookup","description":"utilpeek: Check whether a company is registered on the Peppol e-invoicing network. For the legal entity use search_lei. Returns whether a Peppol participant ID "},{"name":"lint_x402_listing","description":"utilpeek: Lint an x402 listing, or check a seller's Bazaar coverage. For price position, preflight and demand too use x402_seller_report. Returns in mode lint t"},{"name":"build_ics_event","description":"utilpeek: Build an iCalendar file from JSON events. To read an .ics file use parse_ics. Returns RFC 5545 VCALENDAR text built from 1-50 events, CRLF lines folde"},{"name":"parse_ics","description":"utilpeek: Parse an iCalendar file into JSON events. To write one use build_ics_event. Returns iCalendar text (Google, Outlook, Apple, up to 1 MB) unfolded and r"},{"name":"expand_rrule","description":"utilpeek: Expand an iCalendar RRULE into dates. For cron use cron_next_runs; to build an event use build_ics_event. Returns an RFC 5545 RRULE and a start expand"},{"name":"decode_jwt","description":"utilpeek: Decode a JWT without verifying it. To check the signature use verify_jwt. Returns a compact JWT split into its header and payload JSON, with alg, typ,"},{"name":"verify_jwt","description":"utilpeek: Verify a JWT signature and claims. To read the claims without a key use decode_jwt. Returns valid true or false for a JWT checked with PyJWT against o"},{"name":"decode_lightning_invoice","description":"chainpeek: Decode a Lightning invoice: amount, payee, payment hash and expiry. For EVM calldata use decode_calldata; for Nostr ids use decode_nostr_id. Returns "},{"name":"decode_nostr_id","description":"chainpeek: Decode a Nostr npub, nprofile, note, nevent or naddr to hex; resolve NIP-05. For ENS names use resolve_ens. Returns a Nostr NIP-19 identifier decoded"},{"name":"get_gpu_prices","description":"utilpeek: GPU prices: cheapest H100, A100, L4 per GPU-hour on AWS, Azure, Google Cloud, Akash. Returns cheapest GPU prices per GPU-hour on AWS, Azure and Google"},{"name":"get_gpu_price_index","description":"utilpeek: GPU price index: daily H100, H200, A100 rental price per GPU-hour over time. Returns a GPU chip's daily rental price history: lowest and median on-dem"},{"name":"upload_file_get_link","description":"utilpeek: Upload a file and get a download link that expires in 24 hours. Returns a public download link to a file you upload, valid for `ttl_hours` (default 24"},{"name":"find_places_nearby","description":"utilpeek: Find places nearby: pharmacies, cafes, ATMs, shops and hospitals near a point, from OpenStreetMap. To resolve a city name use geocode. Returns places "},{"name":"lookup_barcode_product","description":"utilpeek: Look up the product behind a barcode in open product databases, with conflicts flagged. To make a barcode use make_barcode; to read every code in an i"},{"name":"render_mermaid","description":"pdfpeek: Render Mermaid diagram code to an SVG or PNG image. Returns Mermaid diagram code drawn as an SVG or PNG file in an offline sandboxed browser: `format` "}],"toolCount":38,"toolsHash":"0c33b833abfe8e1ac99687135fb3d4c06c0e488ad81aa2548805e767e0d43840","serverName":"tanod-util","capabilities":["prompts","resources","tools"],"serverVersion":"0.1.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-21T21:35:55.392Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":783,"error":null,"detail":{"tools":[{"name":"text_encode","description":"utilpeek: Encode or decode text: base64, hex, URL, punycode, JWT decode, ... For digests use hash_text; for a JWT's claims use decode_jwt. Returns the text enco"},{"name":"hash_text","description":"utilpeek: Hash text or bytes: sha256, keccak256, blake2b, md5, crc32, ... For a keyed HMAC use hmac_sign_verify. Returns hex digests of the text (as UTF-8) or b"},{"name":"hmac_sign_verify","description":"utilpeek: Sign or verify an HMAC, including GitHub, Stripe and Slack webhook signatures. For plain digests use hash_text; for JWTs use verify_jwt. Returns the H"},{"name":"generate_ids","description":"utilpeek: Generate UUIDs or ULIDs. For numbers, bytes and picks use generate_random. Returns 1-100 new identifiers: random UUID v4, time-ordered UUID v7 (RFC 95"},{"name":"generate_random","description":"utilpeek: Generate cryptographically strong random numbers, bytes, UUIDs, dice rolls, picks and shuffles. For UUIDs and ULIDs use generate_ids. Returns values f"},{"name":"validate_json","description":"utilpeek: Validate JSON against a JSON Schema. To pull JSON out of prose use extract_json_with_schema; to convert formats use convert_data. Returns whether a JS"},{"name":"convert_data","description":"utilpeek: Convert data between JSON, YAML, CSV, TOML and XML. To check JSON against a schema use validate_json. Returns the document converted from json, yaml, "},{"name":"validate_identifier","description":"utilpeek: check the format and check digits of an identifier. For a VIN's vehicle use decode_vin; for phone numbers use parse_phone_number. Returns `valid`, `re"},{"name":"parse_phone_number","description":"utilpeek: parse and format a phone number. For a prefix's country and network use lookup_phone_prefix. A string that is not a phone number, or a national form w"},{"name":"lookup_phone_prefix","description":"utilpeek: Look up a phone number prefix: country, line type and original network, with ambiguity. To parse a full number use parse_phone_number. Returns the cou"},{"name":"parse_user_agent","description":"utilpeek: parse a User-Agent string. For known x402 monitors and indexers with call rates use identify_x402_client. A User-Agent is self-reported and easy to fa"},{"name":"parse_url","description":"utilpeek: parse a URL. To fetch the page use render_page. The URL is parsed, never fetched. Public-suffix split from the Public Suffix List snapshot bundled wit"},{"name":"cron_next_runs","description":"utilpeek: the next run times of a cron expression. For iCalendar RRULEs use expand_rrule. Standard 5-field cron (minute hour day-of-month month day-of-week) or "},{"name":"convert_time","description":"utilpeek: convert one instant between time zones. For business days use count_or_add_business_days. Zones come from the pinned IANA tz database (tzdata package)"},{"name":"get_public_holidays","description":"utilpeek: public holidays of a country for a year. To count working days use count_or_add_business_days. An unsupported country, subdivision, language or year i"},{"name":"count_or_add_business_days","description":"utilpeek: Count business days between two dates or add working days, skipping public holidays. For the holiday list use get_public_holidays. Returns the busines"},{"name":"convert_units","description":"utilpeek: Convert units of measurement: length, weight, temperature, volume, pressure, energy, data size. For numbers in words use text_numbers. Returns a value"},{"name":"convert_color_check_contrast","description":"utilpeek: Convert a color between hex, RGB, HSL and OKLCH and check WCAG contrast. For contrast alone use check_wcag_contrast. Returns a CSS color (hex, rgb(), "},{"name":"check_wcag_contrast","description":"utilpeek: Check the WCAG contrast between a text color and a background color. To convert colour formats too use convert_color_check_contrast. Returns the WCAG "},{"name":"geocode","description":"utilpeek: offline geocoding over the GeoNames cities15000 table. For places of a kind nearby use find_places_nearby. Input: either `place` alone or `lat` and `l"},{"name":"make_qr_code","description":"utilpeek: make a QR code image. For 1-D barcodes use make_barcode; to read a code use read_qr_barcode. Returns `svg` (text) or `data_base64` (PNG), or with `out"},{"name":"make_barcode","description":"utilpeek: make a 1-D barcode image. For QR codes use make_qr_code; to find the product behind a number use lookup_barcode_product. Returns `svg` (text, with wid"},{"name":"read_qr_barcode","description":"imagepeek: Read every QR code and barcode in an image. To make a QR code use make_qr_code; for other text use ocr_image. Returns every code found: `type` (QR, E"},{"name":"peppol_lookup","description":"utilpeek: Check whether a company is registered on the Peppol e-invoicing network. For the legal entity use search_lei. Returns whether a Peppol participant ID "},{"name":"lint_x402_listing","description":"utilpeek: Lint an x402 listing, or check a seller's Bazaar coverage. For price position, preflight and demand too use x402_seller_report. Returns in mode lint t"},{"name":"build_ics_event","description":"utilpeek: Build an iCalendar file from JSON events. To read an .ics file use parse_ics. Returns RFC 5545 VCALENDAR text built from 1-50 events, CRLF lines folde"},{"name":"parse_ics","description":"utilpeek: Parse an iCalendar file into JSON events. To write one use build_ics_event. Returns iCalendar text (Google, Outlook, Apple, up to 1 MB) unfolded and r"},{"name":"expand_rrule","description":"utilpeek: Expand an iCalendar RRULE into dates. For cron use cron_next_runs; to build an event use build_ics_event. Returns an RFC 5545 RRULE and a start expand"},{"name":"decode_jwt","description":"utilpeek: Decode a JWT without verifying it. To check the signature use verify_jwt. Returns a compact JWT split into its header and payload JSON, with alg, typ,"},{"name":"verify_jwt","description":"utilpeek: Verify a JWT signature and claims. To read the claims without a key use decode_jwt. Returns valid true or false for a JWT checked with PyJWT against o"},{"name":"decode_lightning_invoice","description":"chainpeek: Decode a Lightning invoice: amount, payee, payment hash and expiry. For EVM calldata use decode_calldata; for Nostr ids use decode_nostr_id. Returns "},{"name":"decode_nostr_id","description":"chainpeek: Decode a Nostr npub, nprofile, note, nevent or naddr to hex; resolve NIP-05. For ENS names use resolve_ens. Returns a Nostr NIP-19 identifier decoded"},{"name":"get_gpu_prices","description":"utilpeek: GPU prices: cheapest H100, A100, L4 per GPU-hour on AWS, Azure, Google Cloud, Akash. Returns cheapest GPU prices per GPU-hour on AWS, Azure and Google"},{"name":"get_gpu_price_index","description":"utilpeek: GPU price index: daily H100, H200, A100 rental price per GPU-hour over time. Returns a GPU chip's daily rental price history: lowest and median on-dem"},{"name":"upload_file_get_link","description":"utilpeek: Upload a file and get a download link that expires in 24 hours. Returns a public download link to a file you upload, valid for `ttl_hours` (default 24"},{"name":"find_places_nearby","description":"utilpeek: Find places nearby: pharmacies, cafes, ATMs, shops and hospitals near a point, from OpenStreetMap. To resolve a city name use geocode. Returns places "},{"name":"lookup_barcode_product","description":"utilpeek: Look up the product behind a barcode in open product databases, with conflicts flagged. To make a barcode use make_barcode; to read every code in an i"},{"name":"render_mermaid","description":"pdfpeek: Render Mermaid diagram code to an SVG or PNG image. Returns Mermaid diagram code drawn as an SVG or PNG file in an offline sandboxed browser: `format` "}],"toolCount":38,"toolsHash":"0c33b833abfe8e1ac99687135fb3d4c06c0e488ad81aa2548805e767e0d43840","serverName":"tanod-util","capabilities":["prompts","resources","tools"],"serverVersion":"0.1.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-21T12:25:58.600Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":288,"error":null,"detail":{"tools":[{"name":"text_encode","description":"utilpeek: Encode or decode text: base64, hex, URL, punycode, JWT decode, ... For digests use hash_text; for a JWT's claims use decode_jwt. Returns the text enco"},{"name":"hash_text","description":"utilpeek: Hash text or bytes: sha256, keccak256, blake2b, md5, crc32, ... For a keyed HMAC use hmac_sign_verify. Returns hex digests of the text (as UTF-8) or b"},{"name":"hmac_sign_verify","description":"utilpeek: Sign or verify an HMAC, including GitHub, Stripe and Slack webhook signatures. For plain digests use hash_text; for JWTs use verify_jwt. Returns the H"},{"name":"generate_ids","description":"utilpeek: Generate UUIDs or ULIDs. For numbers, bytes and picks use generate_random. Returns 1-100 new identifiers: random UUID v4, time-ordered UUID v7 (RFC 95"},{"name":"generate_random","description":"utilpeek: Generate cryptographically strong random numbers, bytes, UUIDs, dice rolls, picks and shuffles. For UUIDs and ULIDs use generate_ids. Returns values f"},{"name":"validate_json","description":"utilpeek: Validate JSON against a JSON Schema. To pull JSON out of prose use extract_json_with_schema; to convert formats use convert_data. Returns whether a JS"},{"name":"convert_data","description":"utilpeek: Convert data between JSON, YAML, CSV, TOML and XML. To check JSON against a schema use validate_json. Returns the document converted from json, yaml, "},{"name":"validate_identifier","description":"utilpeek: check the format and check digits of an identifier. For a VIN's vehicle use decode_vin; for phone numbers use parse_phone_number. Returns `valid`, `re"},{"name":"parse_phone_number","description":"utilpeek: parse and format a phone number. For a prefix's country and network use lookup_phone_prefix. A string that is not a phone number, or a national form w"},{"name":"lookup_phone_prefix","description":"utilpeek: Look up a phone number prefix: country, line type and original network, with ambiguity. To parse a full number use parse_phone_number. Returns the cou"},{"name":"parse_user_agent","description":"utilpeek: parse a User-Agent string. For known x402 monitors and indexers with call rates use identify_x402_client. A User-Agent is self-reported and easy to fa"},{"name":"parse_url","description":"utilpeek: parse a URL. To fetch the page use render_page. The URL is parsed, never fetched. Public-suffix split from the Public Suffix List snapshot bundled wit"},{"name":"cron_next_runs","description":"utilpeek: the next run times of a cron expression. For iCalendar RRULEs use expand_rrule. Standard 5-field cron (minute hour day-of-month month day-of-week) or "},{"name":"convert_time","description":"utilpeek: convert one instant between time zones. For business days use count_or_add_business_days. Zones come from the pinned IANA tz database (tzdata package)"},{"name":"get_public_holidays","description":"utilpeek: public holidays of a country for a year. To count working days use count_or_add_business_days. An unsupported country, subdivision, language or year i"},{"name":"count_or_add_business_days","description":"utilpeek: Count business days between two dates or add working days, skipping public holidays. For the holiday list use get_public_holidays. Returns the busines"},{"name":"convert_units","description":"utilpeek: Convert units of measurement: length, weight, temperature, volume, pressure, energy, data size. For numbers in words use text_numbers. Returns a value"},{"name":"convert_color_check_contrast","description":"utilpeek: Convert a color between hex, RGB, HSL and OKLCH and check WCAG contrast. For contrast alone use check_wcag_contrast. Returns a CSS color (hex, rgb(), "},{"name":"check_wcag_contrast","description":"utilpeek: Check the WCAG contrast between a text color and a background color. To convert colour formats too use convert_color_check_contrast. Returns the WCAG "},{"name":"geocode","description":"utilpeek: offline geocoding over the GeoNames cities15000 table. For places of a kind nearby use find_places_nearby. Input: either `place` alone or `lat` and `l"},{"name":"make_qr_code","description":"utilpeek: make a QR code image. For 1-D barcodes use make_barcode; to read a code use read_qr_barcode. Returns `svg` (text) or `data_base64` (PNG), or with `out"},{"name":"make_barcode","description":"utilpeek: make a 1-D barcode image. For QR codes use make_qr_code; to find the product behind a number use lookup_barcode_product. Returns `svg` (text, with wid"},{"name":"read_qr_barcode","description":"imagepeek: Read every QR code and barcode in an image. To make a QR code use make_qr_code; for other text use ocr_image. Returns every code found: `type` (QR, E"},{"name":"peppol_lookup","description":"utilpeek: Check whether a company is registered on the Peppol e-invoicing network. For the legal entity use search_lei. Returns whether a Peppol participant ID "},{"name":"lint_x402_listing","description":"utilpeek: Lint an x402 listing, or check a seller's Bazaar coverage. For price position, preflight and demand too use x402_seller_report. Returns in mode lint t"},{"name":"build_ics_event","description":"utilpeek: Build an iCalendar file from JSON events. To read an .ics file use parse_ics. Returns RFC 5545 VCALENDAR text built from 1-50 events, CRLF lines folde"},{"name":"parse_ics","description":"utilpeek: Parse an iCalendar file into JSON events. To write one use build_ics_event. Returns iCalendar text (Google, Outlook, Apple, up to 1 MB) unfolded and r"},{"name":"expand_rrule","description":"utilpeek: Expand an iCalendar RRULE into dates. For cron use cron_next_runs; to build an event use build_ics_event. Returns an RFC 5545 RRULE and a start expand"},{"name":"decode_jwt","description":"utilpeek: Decode a JWT without verifying it. To check the signature use verify_jwt. Returns a compact JWT split into its header and payload JSON, with alg, typ,"},{"name":"verify_jwt","description":"utilpeek: Verify a JWT signature and claims. To read the claims without a key use decode_jwt. Returns valid true or false for a JWT checked with PyJWT against o"},{"name":"decode_lightning_invoice","description":"chainpeek: Decode a Lightning invoice: amount, payee, payment hash and expiry. For EVM calldata use decode_calldata; for Nostr ids use decode_nostr_id. Returns "},{"name":"decode_nostr_id","description":"chainpeek: Decode a Nostr npub, nprofile, note, nevent or naddr to hex; resolve NIP-05. For ENS names use resolve_ens. Returns a Nostr NIP-19 identifier decoded"},{"name":"get_gpu_prices","description":"utilpeek: GPU prices: cheapest H100, A100, L4 per GPU-hour on AWS, Azure, Google Cloud, Akash. Returns cheapest GPU prices per GPU-hour on AWS, Azure and Google"},{"name":"get_gpu_price_index","description":"utilpeek: GPU price index: daily H100, H200, A100 rental price per GPU-hour over time. Returns a GPU chip's daily rental price history: lowest and median on-dem"},{"name":"upload_file_get_link","description":"utilpeek: Upload a file and get a download link that expires in 24 hours. Returns a public download link to a file you upload, valid for `ttl_hours` (default 24"},{"name":"find_places_nearby","description":"utilpeek: Find places nearby: pharmacies, cafes, ATMs, shops and hospitals near a point, from OpenStreetMap. To resolve a city name use geocode. Returns places "},{"name":"lookup_barcode_product","description":"utilpeek: Look up the product behind a barcode in open product databases, with conflicts flagged. To make a barcode use make_barcode; to read every code in an i"},{"name":"render_mermaid","description":"pdfpeek: Render Mermaid diagram code to an SVG or PNG image. Returns Mermaid diagram code drawn as an SVG or PNG file in an offline sandboxed browser: `format` "}],"toolCount":38,"toolsHash":"0c33b833abfe8e1ac99687135fb3d4c06c0e488ad81aa2548805e767e0d43840","serverName":"tanod-util","capabilities":["prompts","resources","tools"],"serverVersion":"0.1.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-21T03:26:22.242Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":746,"error":null,"detail":{"tools":[{"name":"text_encode","description":"utilpeek: Encode or decode text: base64, hex, URL, punycode, JWT decode, ... For digests use hash_text; for a JWT's claims use decode_jwt. Returns the text enco"},{"name":"hash_text","description":"utilpeek: Hash text or bytes: sha256, keccak256, blake2b, md5, crc32, ... For a keyed HMAC use hmac_sign_verify. Returns hex digests of the text (as UTF-8) or b"},{"name":"hmac_sign_verify","description":"utilpeek: Sign or verify an HMAC, including GitHub, Stripe and Slack webhook signatures. For plain digests use hash_text; for JWTs use verify_jwt. Returns the H"},{"name":"generate_ids","description":"utilpeek: Generate UUIDs or ULIDs. For numbers, bytes and picks use generate_random. Returns 1-100 new identifiers: random UUID v4, time-ordered UUID v7 (RFC 95"},{"name":"generate_random","description":"utilpeek: Generate cryptographically strong random numbers, bytes, UUIDs, dice rolls, picks and shuffles. For UUIDs and ULIDs use generate_ids. Returns values f"},{"name":"validate_json","description":"utilpeek: Validate JSON against a JSON Schema. To pull JSON out of prose use extract_json_with_schema; to convert formats use convert_data. Returns whether a JS"},{"name":"convert_data","description":"utilpeek: Convert data between JSON, YAML, CSV, TOML and XML. To check JSON against a schema use validate_json. Returns the document converted from json, yaml, "},{"name":"validate_identifier","description":"utilpeek: check the format and check digits of an identifier. For a VIN's vehicle use decode_vin; for phone numbers use parse_phone_number. Returns `valid`, `re"},{"name":"parse_phone_number","description":"utilpeek: parse and format a phone number. For a prefix's country and network use lookup_phone_prefix. A string that is not a phone number, or a national form w"},{"name":"lookup_phone_prefix","description":"utilpeek: Look up a phone number prefix: country, line type and original network, with ambiguity. To parse a full number use parse_phone_number. Returns the cou"},{"name":"parse_user_agent","description":"utilpeek: parse a User-Agent string. For known x402 monitors and indexers with call rates use identify_x402_client. A User-Agent is self-reported and easy to fa"},{"name":"parse_url","description":"utilpeek: parse a URL. To fetch the page use render_page. The URL is parsed, never fetched. Public-suffix split from the Public Suffix List snapshot bundled wit"},{"name":"cron_next_runs","description":"utilpeek: the next run times of a cron expression. For iCalendar RRULEs use expand_rrule. Standard 5-field cron (minute hour day-of-month month day-of-week) or "},{"name":"convert_time","description":"utilpeek: convert one instant between time zones. For business days use count_or_add_business_days. Zones come from the pinned IANA tz database (tzdata package)"},{"name":"get_public_holidays","description":"utilpeek: public holidays of a country for a year. To count working days use count_or_add_business_days. An unsupported country, subdivision, language or year i"},{"name":"count_or_add_business_days","description":"utilpeek: Count business days between two dates or add working days, skipping public holidays. For the holiday list use get_public_holidays. Returns the busines"},{"name":"convert_units","description":"utilpeek: Convert units of measurement: length, weight, temperature, volume, pressure, energy, data size. For numbers in words use text_numbers. Returns a value"},{"name":"convert_color_check_contrast","description":"utilpeek: Convert a color between hex, RGB, HSL and OKLCH and check WCAG contrast. For contrast alone use check_wcag_contrast. Returns a CSS color (hex, rgb(), "},{"name":"check_wcag_contrast","description":"utilpeek: Check the WCAG contrast between a text color and a background color. To convert colour formats too use convert_color_check_contrast. Returns the WCAG "},{"name":"geocode","description":"utilpeek: offline geocoding over the GeoNames cities15000 table. For places of a kind nearby use find_places_nearby. Input: either `place` alone or `lat` and `l"},{"name":"make_qr_code","description":"utilpeek: make a QR code image. For 1-D barcodes use make_barcode; to read a code use read_qr_barcode. Returns `svg` (text) or `data_base64` (PNG), or with `out"},{"name":"make_barcode","description":"utilpeek: make a 1-D barcode image. For QR codes use make_qr_code; to find the product behind a number use lookup_barcode_product. Returns `svg` (text, with wid"},{"name":"read_qr_barcode","description":"imagepeek: Read every QR code and barcode in an image. To make a QR code use make_qr_code; for other text use ocr_image. Returns every code found: `type` (QR, E"},{"name":"peppol_lookup","description":"utilpeek: Check whether a company is registered on the Peppol e-invoicing network. For the legal entity use search_lei. Returns whether a Peppol participant ID "},{"name":"lint_x402_listing","description":"utilpeek: Lint an x402 listing, or check a seller's Bazaar coverage. For price position, preflight and demand too use x402_seller_report. Returns in mode lint t"},{"name":"build_ics_event","description":"utilpeek: Build an iCalendar file from JSON events. To read an .ics file use parse_ics. Returns RFC 5545 VCALENDAR text built from 1-50 events, CRLF lines folde"},{"name":"parse_ics","description":"utilpeek: Parse an iCalendar file into JSON events. To write one use build_ics_event. Returns iCalendar text (Google, Outlook, Apple, up to 1 MB) unfolded and r"},{"name":"expand_rrule","description":"utilpeek: Expand an iCalendar RRULE into dates. For cron use cron_next_runs; to build an event use build_ics_event. Returns an RFC 5545 RRULE and a start expand"},{"name":"decode_jwt","description":"utilpeek: Decode a JWT without verifying it. To check the signature use verify_jwt. Returns a compact JWT split into its header and payload JSON, with alg, typ,"},{"name":"verify_jwt","description":"utilpeek: Verify a JWT signature and claims. To read the claims without a key use decode_jwt. Returns valid true or false for a JWT checked with PyJWT against o"},{"name":"decode_lightning_invoice","description":"chainpeek: Decode a Lightning invoice: amount, payee, payment hash and expiry. For EVM calldata use decode_calldata; for Nostr ids use decode_nostr_id. Returns "},{"name":"decode_nostr_id","description":"chainpeek: Decode a Nostr npub, nprofile, note, nevent or naddr to hex; resolve NIP-05. For ENS names use resolve_ens. Returns a Nostr NIP-19 identifier decoded"},{"name":"get_gpu_prices","description":"utilpeek: GPU prices: cheapest H100, A100, L4 per GPU-hour on AWS, Azure, Google Cloud, Akash. Returns cheapest GPU prices per GPU-hour on AWS, Azure and Google"},{"name":"get_gpu_price_index","description":"utilpeek: GPU price index: daily H100, H200, A100 rental price per GPU-hour over time. Returns a GPU chip's daily rental price history: lowest and median on-dem"},{"name":"upload_file_get_link","description":"utilpeek: Upload a file and get a download link that expires in 24 hours. Returns a public download link to a file you upload, valid for `ttl_hours` (default 24"},{"name":"find_places_nearby","description":"utilpeek: Find places nearby: pharmacies, cafes, ATMs, shops and hospitals near a point, from OpenStreetMap. To resolve a city name use geocode. Returns places "},{"name":"lookup_barcode_product","description":"utilpeek: Look up the product behind a barcode in open product databases, with conflicts flagged. To make a barcode use make_barcode; to read every code in an i"},{"name":"render_mermaid","description":"pdfpeek: Render Mermaid diagram code to an SVG or PNG image. Returns Mermaid diagram code drawn as an SVG or PNG file in an offline sandboxed browser: `format` "}],"toolCount":38,"toolsHash":"0c33b833abfe8e1ac99687135fb3d4c06c0e488ad81aa2548805e767e0d43840","serverName":"tanod-util","capabilities":["prompts","resources","tools"],"serverVersion":"0.1.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-20T20:23:34.321Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":778,"error":null,"detail":{"tools":[{"name":"text_encode","description":"utilpeek: Encode or decode text: base64, hex, URL, punycode, JWT decode, ... For digests use hash_text; for a JWT's claims use decode_jwt. Returns the text enco"},{"name":"hash_text","description":"utilpeek: Hash text or bytes: sha256, keccak256, blake2b, md5, crc32, ... For a keyed HMAC use hmac_sign_verify. Returns hex digests of the text (as UTF-8) or b"},{"name":"hmac_sign_verify","description":"utilpeek: Sign or verify an HMAC, including GitHub, Stripe and Slack webhook signatures. For plain digests use hash_text; for JWTs use verify_jwt. Returns the H"},{"name":"generate_ids","description":"utilpeek: Generate UUIDs or ULIDs. For numbers, bytes and picks use generate_random. Returns 1-100 new identifiers: random UUID v4, time-ordered UUID v7 (RFC 95"},{"name":"generate_random","description":"utilpeek: Generate cryptographically strong random numbers, bytes, UUIDs, dice rolls, picks and shuffles. For UUIDs and ULIDs use generate_ids. Returns values f"},{"name":"validate_json","description":"utilpeek: Validate JSON against a JSON Schema. To pull JSON out of prose use extract_json_with_schema; to convert formats use convert_data. Returns whether a JS"},{"name":"convert_data","description":"utilpeek: Convert data between JSON, YAML, CSV, TOML and XML. To check JSON against a schema use validate_json. Returns the document converted from json, yaml, "},{"name":"validate_identifier","description":"utilpeek: check the format and check digits of an identifier. For a VIN's vehicle use decode_vin; for phone numbers use parse_phone_number. Returns `valid`, `re"},{"name":"parse_phone_number","description":"utilpeek: parse and format a phone number. For a prefix's country and network use lookup_phone_prefix. A string that is not a phone number, or a national form w"},{"name":"lookup_phone_prefix","description":"utilpeek: Look up a phone number prefix: country, line type and original network, with ambiguity. To parse a full number use parse_phone_number. Returns the cou"},{"name":"parse_user_agent","description":"utilpeek: parse a User-Agent string. For known x402 monitors and indexers with call rates use identify_x402_client. A User-Agent is self-reported and easy to fa"},{"name":"parse_url","description":"utilpeek: parse a URL. To fetch the page use render_page. The URL is parsed, never fetched. Public-suffix split from the Public Suffix List snapshot bundled wit"},{"name":"cron_next_runs","description":"utilpeek: the next run times of a cron expression. For iCalendar RRULEs use expand_rrule. Standard 5-field cron (minute hour day-of-month month day-of-week) or "},{"name":"convert_time","description":"utilpeek: convert one instant between time zones. For business days use count_or_add_business_days. Zones come from the pinned IANA tz database (tzdata package)"},{"name":"get_public_holidays","description":"utilpeek: public holidays of a country for a year. To count working days use count_or_add_business_days. An unsupported country, subdivision, language or year i"},{"name":"count_or_add_business_days","description":"utilpeek: Count business days between two dates or add working days, skipping public holidays. For the holiday list use get_public_holidays. Returns the busines"},{"name":"convert_units","description":"utilpeek: Convert units of measurement: length, weight, temperature, volume, pressure, energy, data size. For numbers in words use text_numbers. Returns a value"},{"name":"convert_color_check_contrast","description":"utilpeek: Convert a color between hex, RGB, HSL and OKLCH and check WCAG contrast. For contrast alone use check_wcag_contrast. Returns a CSS color (hex, rgb(), "},{"name":"check_wcag_contrast","description":"utilpeek: Check the WCAG contrast between a text color and a background color. To convert colour formats too use convert_color_check_contrast. Returns the WCAG "},{"name":"geocode","description":"utilpeek: offline geocoding over the GeoNames cities15000 table. For places of a kind nearby use find_places_nearby. Input: either `place` alone or `lat` and `l"},{"name":"make_qr_code","description":"utilpeek: make a QR code image. For 1-D barcodes use make_barcode; to read a code use read_qr_barcode. Returns `svg` (text) or `data_base64` (PNG), or with `out"},{"name":"make_barcode","description":"utilpeek: make a 1-D barcode image. For QR codes use make_qr_code; to find the product behind a number use lookup_barcode_product. Returns `svg` (text, with wid"},{"name":"read_qr_barcode","description":"imagepeek: Read every QR code and barcode in an image. To make a QR code use make_qr_code; for other text use ocr_image. Returns every code found: `type` (QR, E"},{"name":"peppol_lookup","description":"utilpeek: Check whether a company is registered on the Peppol e-invoicing network. For the legal entity use search_lei. Returns whether a Peppol participant ID "},{"name":"lint_x402_listing","description":"utilpeek: Lint an x402 listing, or check a seller's Bazaar coverage. For price position, preflight and demand too use x402_seller_report. Returns in mode lint t"},{"name":"build_ics_event","description":"utilpeek: Build an iCalendar file from JSON events. To read an .ics file use parse_ics. Returns RFC 5545 VCALENDAR text built from 1-50 events, CRLF lines folde"},{"name":"parse_ics","description":"utilpeek: Parse an iCalendar file into JSON events. To write one use build_ics_event. Returns iCalendar text (Google, Outlook, Apple, up to 1 MB) unfolded and r"},{"name":"expand_rrule","description":"utilpeek: Expand an iCalendar RRULE into dates. For cron use cron_next_runs; to build an event use build_ics_event. Returns an RFC 5545 RRULE and a start expand"},{"name":"decode_jwt","description":"utilpeek: Decode a JWT without verifying it. To check the signature use verify_jwt. Returns a compact JWT split into its header and payload JSON, with alg, typ,"},{"name":"verify_jwt","description":"utilpeek: Verify a JWT signature and claims. To read the claims without a key use decode_jwt. Returns valid true or false for a JWT checked with PyJWT against o"},{"name":"decode_lightning_invoice","description":"chainpeek: Decode a Lightning invoice: amount, payee, payment hash and expiry. For EVM calldata use decode_calldata; for Nostr ids use decode_nostr_id. Returns "},{"name":"decode_nostr_id","description":"chainpeek: Decode a Nostr npub, nprofile, note, nevent or naddr to hex; resolve NIP-05. For ENS names use resolve_ens. Returns a Nostr NIP-19 identifier decoded"},{"name":"get_gpu_prices","description":"utilpeek: GPU prices: cheapest H100, A100, L4 per GPU-hour on AWS, Azure, Google Cloud, Akash. Returns cheapest GPU prices per GPU-hour on AWS, Azure and Google"},{"name":"get_gpu_price_index","description":"utilpeek: GPU price index: daily H100, H200, A100 rental price per GPU-hour over time. Returns a GPU chip's daily rental price history: lowest and median on-dem"},{"name":"upload_file_get_link","description":"utilpeek: Upload a file and get a download link that expires in 24 hours. Returns a public download link to a file you upload, valid for `ttl_hours` (default 24"},{"name":"find_places_nearby","description":"utilpeek: Find places nearby: pharmacies, cafes, ATMs, shops and hospitals near a point, from OpenStreetMap. To resolve a city name use geocode. Returns places "},{"name":"lookup_barcode_product","description":"utilpeek: Look up the product behind a barcode in open product databases, with conflicts flagged. To make a barcode use make_barcode; to read every code in an i"},{"name":"render_mermaid","description":"pdfpeek: Render Mermaid diagram code to an SVG or PNG image. Returns Mermaid diagram code drawn as an SVG or PNG file in an offline sandboxed browser: `format` "}],"toolCount":38,"toolsHash":"0c33b833abfe8e1ac99687135fb3d4c06c0e488ad81aa2548805e767e0d43840","serverName":"tanod-util","capabilities":["prompts","resources","tools"],"serverVersion":"0.1.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-20T13:26:58.055Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":740,"error":null,"detail":{"tools":[{"name":"text_encode","description":"utilpeek: Encode or decode text: base64, hex, URL, punycode, JWT decode, ... For digests use hash_text; for a JWT's claims use decode_jwt. Returns the text enco"},{"name":"hash_text","description":"utilpeek: Hash text or bytes: sha256, keccak256, blake2b, md5, crc32, ... For a keyed HMAC use hmac_sign_verify. Returns hex digests of the text (as UTF-8) or b"},{"name":"hmac_sign_verify","description":"utilpeek: Sign or verify an HMAC, including GitHub, Stripe and Slack webhook signatures. For plain digests use hash_text; for JWTs use verify_jwt. Returns the H"},{"name":"generate_ids","description":"utilpeek: Generate UUIDs or ULIDs. For numbers, bytes and picks use generate_random. Returns 1-100 new identifiers: random UUID v4, time-ordered UUID v7 (RFC 95"},{"name":"generate_random","description":"utilpeek: Generate cryptographically strong random numbers, bytes, UUIDs, dice rolls, picks and shuffles. For UUIDs and ULIDs use generate_ids. Returns values f"},{"name":"validate_json","description":"utilpeek: Validate JSON against a JSON Schema. To pull JSON out of prose use extract_json_with_schema; to convert formats use convert_data. Returns whether a JS"},{"name":"convert_data","description":"utilpeek: Convert data between JSON, YAML, CSV, TOML and XML. To check JSON against a schema use validate_json. Returns the document converted from json, yaml, "},{"name":"validate_identifier","description":"utilpeek: check the format and check digits of an identifier. For a VIN's vehicle use decode_vin; for phone numbers use parse_phone_number. Returns `valid`, `re"},{"name":"parse_phone_number","description":"utilpeek: parse and format a phone number. For a prefix's country and network use lookup_phone_prefix. A string that is not a phone number, or a national form w"},{"name":"lookup_phone_prefix","description":"utilpeek: Look up a phone number prefix: country, line type and original network, with ambiguity. To parse a full number use parse_phone_number. Returns the cou"},{"name":"parse_user_agent","description":"utilpeek: parse a User-Agent string. For known x402 monitors and indexers with call rates use identify_x402_client. A User-Agent is self-reported and easy to fa"},{"name":"parse_url","description":"utilpeek: parse a URL. To fetch the page use render_page. The URL is parsed, never fetched. Public-suffix split from the Public Suffix List snapshot bundled wit"},{"name":"cron_next_runs","description":"utilpeek: the next run times of a cron expression. For iCalendar RRULEs use expand_rrule. Standard 5-field cron (minute hour day-of-month month day-of-week) or "},{"name":"convert_time","description":"utilpeek: convert one instant between time zones. For business days use count_or_add_business_days. Zones come from the pinned IANA tz database (tzdata package)"},{"name":"get_public_holidays","description":"utilpeek: public holidays of a country for a year. To count working days use count_or_add_business_days. An unsupported country, subdivision, language or year i"},{"name":"count_or_add_business_days","description":"utilpeek: Count business days between two dates or add working days, skipping public holidays. For the holiday list use get_public_holidays. Returns the busines"},{"name":"convert_units","description":"utilpeek: Convert units of measurement: length, weight, temperature, volume, pressure, energy, data size. For numbers in words use text_numbers. Returns a value"},{"name":"convert_color_check_contrast","description":"utilpeek: Convert a color between hex, RGB, HSL and OKLCH and check WCAG contrast. For contrast alone use check_wcag_contrast. Returns a CSS color (hex, rgb(), "},{"name":"check_wcag_contrast","description":"utilpeek: Check the WCAG contrast between a text color and a background color. To convert colour formats too use convert_color_check_contrast. Returns the WCAG "},{"name":"geocode","description":"utilpeek: offline geocoding over the GeoNames cities15000 table. For places of a kind nearby use find_places_nearby. Input: either `place` alone or `lat` and `l"},{"name":"make_qr_code","description":"utilpeek: make a QR code image. For 1-D barcodes use make_barcode; to read a code use read_qr_barcode. Returns `svg` (text) or `data_base64` (PNG), or with `out"},{"name":"make_barcode","description":"utilpeek: make a 1-D barcode image. For QR codes use make_qr_code; to find the product behind a number use lookup_barcode_product. Returns `svg` (text, with wid"},{"name":"read_qr_barcode","description":"imagepeek: Read every QR code and barcode in an image. To make a QR code use make_qr_code; for other text use ocr_image. Returns every code found: `type` (QR, E"},{"name":"peppol_lookup","description":"utilpeek: Check whether a company is registered on the Peppol e-invoicing network. For the legal entity use search_lei. Returns whether a Peppol participant ID "},{"name":"lint_x402_listing","description":"utilpeek: Lint an x402 listing, or check a seller's Bazaar coverage. For price position, preflight and demand too use x402_seller_report. Returns in mode lint t"},{"name":"build_ics_event","description":"utilpeek: Build an iCalendar file from JSON events. To read an .ics file use parse_ics. Returns RFC 5545 VCALENDAR text built from 1-50 events, CRLF lines folde"},{"name":"parse_ics","description":"utilpeek: Parse an iCalendar file into JSON events. To write one use build_ics_event. Returns iCalendar text (Google, Outlook, Apple, up to 1 MB) unfolded and r"},{"name":"expand_rrule","description":"utilpeek: Expand an iCalendar RRULE into dates. For cron use cron_next_runs; to build an event use build_ics_event. Returns an RFC 5545 RRULE and a start expand"},{"name":"decode_jwt","description":"utilpeek: Decode a JWT without verifying it. To check the signature use verify_jwt. Returns a compact JWT split into its header and payload JSON, with alg, typ,"},{"name":"verify_jwt","description":"utilpeek: Verify a JWT signature and claims. To read the claims without a key use decode_jwt. Returns valid true or false for a JWT checked with PyJWT against o"},{"name":"decode_lightning_invoice","description":"chainpeek: Decode a Lightning invoice: amount, payee, payment hash and expiry. For EVM calldata use decode_calldata; for Nostr ids use decode_nostr_id. Returns "},{"name":"decode_nostr_id","description":"chainpeek: Decode a Nostr npub, nprofile, note, nevent or naddr to hex; resolve NIP-05. For ENS names use resolve_ens. Returns a Nostr NIP-19 identifier decoded"},{"name":"get_gpu_prices","description":"utilpeek: GPU prices: cheapest H100, A100, L4 per GPU-hour on AWS, Azure, Google Cloud, Akash. Returns cheapest GPU prices per GPU-hour on AWS, Azure and Google"},{"name":"get_gpu_price_index","description":"utilpeek: GPU price index: daily H100, H200, A100 rental price per GPU-hour over time. Returns a GPU chip's daily rental price history: lowest and median on-dem"},{"name":"upload_file_get_link","description":"utilpeek: Upload a file and get a download link that expires in 24 hours. Returns a public download link to a file you upload, valid for `ttl_hours` (default 24"},{"name":"find_places_nearby","description":"utilpeek: Find places nearby: pharmacies, cafes, ATMs, shops and hospitals near a point, from OpenStreetMap. To resolve a city name use geocode. Returns places "},{"name":"lookup_barcode_product","description":"utilpeek: Look up the product behind a barcode in open product databases, with conflicts flagged. To make a barcode use make_barcode; to read every code in an i"},{"name":"render_mermaid","description":"pdfpeek: Render Mermaid diagram code to an SVG or PNG image. Returns Mermaid diagram code drawn as an SVG or PNG file in an offline sandboxed browser: `format` "}],"toolCount":38,"toolsHash":"0c33b833abfe8e1ac99687135fb3d4c06c0e488ad81aa2548805e767e0d43840","serverName":"tanod-util","capabilities":["prompts","resources","tools"],"serverVersion":"0.1.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-20T06:26:27.734Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":260,"error":null,"detail":{"tools":[{"name":"text_encode","description":"utilpeek: Encode or decode text: base64, hex, URL, punycode, JWT decode, ... For digests use hash_text; for a JWT's claims use decode_jwt. Returns the text enco"},{"name":"hash_text","description":"utilpeek: Hash text or bytes: sha256, keccak256, blake2b, md5, crc32, ... For a keyed HMAC use hmac_sign_verify. Returns hex digests of the text (as UTF-8) or b"},{"name":"hmac_sign_verify","description":"utilpeek: Sign or verify an HMAC, including GitHub, Stripe and Slack webhook signatures. For plain digests use hash_text; for JWTs use verify_jwt. Returns the H"},{"name":"generate_ids","description":"utilpeek: Generate UUIDs or ULIDs. For numbers, bytes and picks use generate_random. Returns 1-100 new identifiers: random UUID v4, time-ordered UUID v7 (RFC 95"},{"name":"generate_random","description":"utilpeek: Generate cryptographically strong random numbers, bytes, UUIDs, dice rolls, picks and shuffles. For UUIDs and ULIDs use generate_ids. Returns values f"},{"name":"validate_json","description":"utilpeek: Validate JSON against a JSON Schema. To pull JSON out of prose use extract_json_with_schema; to convert formats use convert_data. Returns whether a JS"},{"name":"convert_data","description":"utilpeek: Convert data between JSON, YAML, CSV, TOML and XML. To check JSON against a schema use validate_json. Returns the document converted from json, yaml, "},{"name":"validate_identifier","description":"utilpeek: check the format and check digits of an identifier. For a VIN's vehicle use decode_vin; for phone numbers use parse_phone_number. Returns `valid`, `re"},{"name":"parse_phone_number","description":"utilpeek: parse and format a phone number. For a prefix's country and network use lookup_phone_prefix. A string that is not a phone number, or a national form w"},{"name":"lookup_phone_prefix","description":"utilpeek: Look up a phone number prefix: country, line type and original network, with ambiguity. To parse a full number use parse_phone_number. Returns the cou"},{"name":"parse_user_agent","description":"utilpeek: parse a User-Agent string. For known x402 monitors and indexers with call rates use identify_x402_client. A User-Agent is self-reported and easy to fa"},{"name":"parse_url","description":"utilpeek: parse a URL. To fetch the page use render_page. The URL is parsed, never fetched. Public-suffix split from the Public Suffix List snapshot bundled wit"},{"name":"cron_next_runs","description":"utilpeek: the next run times of a cron expression. For iCalendar RRULEs use expand_rrule. Standard 5-field cron (minute hour day-of-month month day-of-week) or "},{"name":"convert_time","description":"utilpeek: convert one instant between time zones. For business days use count_or_add_business_days. Zones come from the pinned IANA tz database (tzdata package)"},{"name":"get_public_holidays","description":"utilpeek: public holidays of a country for a year. To count working days use count_or_add_business_days. An unsupported country, subdivision, language or year i"},{"name":"count_or_add_business_days","description":"utilpeek: Count business days between two dates or add working days, skipping public holidays. For the holiday list use get_public_holidays. Returns the busines"},{"name":"convert_units","description":"utilpeek: Convert units of measurement: length, weight, temperature, volume, pressure, energy, data size. For numbers in words use text_numbers. Returns a value"},{"name":"convert_color_check_contrast","description":"utilpeek: Convert a color between hex, RGB, HSL and OKLCH and check WCAG contrast. For contrast alone use check_wcag_contrast. Returns a CSS color (hex, rgb(), "},{"name":"check_wcag_contrast","description":"utilpeek: Check the WCAG contrast between a text color and a background color. To convert colour formats too use convert_color_check_contrast. Returns the WCAG "},{"name":"geocode","description":"utilpeek: offline geocoding over the GeoNames cities15000 table. For places of a kind nearby use find_places_nearby. Input: either `place` alone or `lat` and `l"},{"name":"make_qr_code","description":"utilpeek: make a QR code image. For 1-D barcodes use make_barcode; to read a code use read_qr_barcode. Returns `svg` (text) or `data_base64` (PNG), or with `out"},{"name":"make_barcode","description":"utilpeek: make a 1-D barcode image. For QR codes use make_qr_code; to find the product behind a number use lookup_barcode_product. Returns `svg` (text, with wid"},{"name":"read_qr_barcode","description":"imagepeek: Read every QR code and barcode in an image. To make a QR code use make_qr_code; for other text use ocr_image. Returns every code found: `type` (QR, E"},{"name":"peppol_lookup","description":"utilpeek: Check whether a company is registered on the Peppol e-invoicing network. For the legal entity use search_lei. Returns whether a Peppol participant ID "},{"name":"lint_x402_listing","description":"utilpeek: Lint an x402 listing, or check a seller's Bazaar coverage. For price position, preflight and demand too use x402_seller_report. Returns in mode lint t"},{"name":"build_ics_event","description":"utilpeek: Build an iCalendar file from JSON events. To read an .ics file use parse_ics. Returns RFC 5545 VCALENDAR text built from 1-50 events, CRLF lines folde"},{"name":"parse_ics","description":"utilpeek: Parse an iCalendar file into JSON events. To write one use build_ics_event. Returns iCalendar text (Google, Outlook, Apple, up to 1 MB) unfolded and r"},{"name":"expand_rrule","description":"utilpeek: Expand an iCalendar RRULE into dates. For cron use cron_next_runs; to build an event use build_ics_event. Returns an RFC 5545 RRULE and a start expand"},{"name":"decode_jwt","description":"utilpeek: Decode a JWT without verifying it. To check the signature use verify_jwt. Returns a compact JWT split into its header and payload JSON, with alg, typ,"},{"name":"verify_jwt","description":"utilpeek: Verify a JWT signature and claims. To read the claims without a key use decode_jwt. Returns valid true or false for a JWT checked with PyJWT against o"},{"name":"decode_lightning_invoice","description":"chainpeek: Decode a Lightning invoice: amount, payee, payment hash and expiry. For EVM calldata use decode_calldata; for Nostr ids use decode_nostr_id. Returns "},{"name":"decode_nostr_id","description":"chainpeek: Decode a Nostr npub, nprofile, note, nevent or naddr to hex; resolve NIP-05. For ENS names use resolve_ens. Returns a Nostr NIP-19 identifier decoded"},{"name":"get_gpu_prices","description":"utilpeek: GPU prices: cheapest H100, A100, L4 per GPU-hour on AWS, Azure, Google Cloud, Akash. Returns cheapest GPU prices per GPU-hour on AWS, Azure and Google"},{"name":"get_gpu_price_index","description":"utilpeek: GPU price index: daily H100, H200, A100 rental price per GPU-hour over time. Returns a GPU chip's daily rental price history: lowest and median on-dem"},{"name":"upload_file_get_link","description":"utilpeek: Upload a file and get a download link that expires in 24 hours. Returns a public download link to a file you upload, valid for `ttl_hours` (default 24"},{"name":"find_places_nearby","description":"utilpeek: Find places nearby: pharmacies, cafes, ATMs, shops and hospitals near a point, from OpenStreetMap. To resolve a city name use geocode. Returns places "},{"name":"lookup_barcode_product","description":"utilpeek: Look up the product behind a barcode in open product databases, with conflicts flagged. To make a barcode use make_barcode; to read every code in an i"},{"name":"render_mermaid","description":"pdfpeek: Render Mermaid diagram code to an SVG or PNG image. Returns Mermaid diagram code drawn as an SVG or PNG file in an offline sandboxed browser: `format` "}],"toolCount":38,"toolsHash":"0c33b833abfe8e1ac99687135fb3d4c06c0e488ad81aa2548805e767e0d43840","serverName":"tanod-util","capabilities":["prompts","resources","tools"],"serverVersion":"0.1.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-20T00:32:38.174Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":262,"error":null,"detail":{"tools":[{"name":"text_encode","description":"utilpeek: Encode or decode text: base64, hex, URL, punycode, JWT decode, ... For digests use hash_text; for a JWT's claims use decode_jwt. Returns the text enco"},{"name":"hash_text","description":"utilpeek: Hash text or bytes: sha256, keccak256, blake2b, md5, crc32, ... For a keyed HMAC use hmac_sign_verify. Returns hex digests of the text (as UTF-8) or b"},{"name":"hmac_sign_verify","description":"utilpeek: Sign or verify an HMAC, including GitHub, Stripe and Slack webhook signatures. For plain digests use hash_text; for JWTs use verify_jwt. Returns the H"},{"name":"generate_ids","description":"utilpeek: Generate UUIDs or ULIDs. For numbers, bytes and picks use generate_random. Returns 1-100 new identifiers: random UUID v4, time-ordered UUID v7 (RFC 95"},{"name":"generate_random","description":"utilpeek: Generate cryptographically strong random numbers, bytes, UUIDs, dice rolls, picks and shuffles. For UUIDs and ULIDs use generate_ids. Returns values f"},{"name":"validate_json","description":"utilpeek: Validate JSON against a JSON Schema. To pull JSON out of prose use extract_json_with_schema; to convert formats use convert_data. Returns whether a JS"},{"name":"convert_data","description":"utilpeek: Convert data between JSON, YAML, CSV, TOML and XML. To check JSON against a schema use validate_json. Returns the document converted from json, yaml, "},{"name":"validate_identifier","description":"utilpeek: check the format and check digits of an identifier. For a VIN's vehicle use decode_vin; for phone numbers use parse_phone_number. Returns `valid`, `re"},{"name":"parse_phone_number","description":"utilpeek: parse and format a phone number. For a prefix's country and network use lookup_phone_prefix. A string that is not a phone number, or a national form w"},{"name":"lookup_phone_prefix","description":"utilpeek: Look up a phone number prefix: country, line type and original network, with ambiguity. To parse a full number use parse_phone_number. Returns the cou"},{"name":"parse_user_agent","description":"utilpeek: parse a User-Agent string. For known x402 monitors and indexers with call rates use identify_x402_client. A User-Agent is self-reported and easy to fa"},{"name":"parse_url","description":"utilpeek: parse a URL. To fetch the page use render_page. The URL is parsed, never fetched. Public-suffix split from the Public Suffix List snapshot bundled wit"},{"name":"cron_next_runs","description":"utilpeek: the next run times of a cron expression. For iCalendar RRULEs use expand_rrule. Standard 5-field cron (minute hour day-of-month month day-of-week) or "},{"name":"convert_time","description":"utilpeek: convert one instant between time zones. For business days use count_or_add_business_days. Zones come from the pinned IANA tz database (tzdata package)"},{"name":"get_public_holidays","description":"utilpeek: public holidays of a country for a year. To count working days use count_or_add_business_days. An unsupported country, subdivision, language or year i"},{"name":"count_or_add_business_days","description":"utilpeek: Count business days between two dates or add working days, skipping public holidays. For the holiday list use get_public_holidays. Returns the busines"},{"name":"convert_units","description":"utilpeek: Convert units of measurement: length, weight, temperature, volume, pressure, energy, data size. For numbers in words use text_numbers. Returns a value"},{"name":"convert_color_check_contrast","description":"utilpeek: Convert a color between hex, RGB, HSL and OKLCH and check WCAG contrast. For contrast alone use check_wcag_contrast. Returns a CSS color (hex, rgb(), "},{"name":"check_wcag_contrast","description":"utilpeek: Check the WCAG contrast between a text color and a background color. To convert colour formats too use convert_color_check_contrast. Returns the WCAG "},{"name":"geocode","description":"utilpeek: offline geocoding over the GeoNames cities15000 table. For places of a kind nearby use find_places_nearby. Input: either `place` alone or `lat` and `l"},{"name":"make_qr_code","description":"utilpeek: make a QR code image. For 1-D barcodes use make_barcode; to read a code use read_qr_barcode. Returns `svg` (text) or `data_base64` (PNG), or with `out"},{"name":"make_barcode","description":"utilpeek: make a 1-D barcode image. For QR codes use make_qr_code; to find the product behind a number use lookup_barcode_product. Returns `svg` (text, with wid"},{"name":"read_qr_barcode","description":"imagepeek: Read every QR code and barcode in an image. To make a QR code use make_qr_code; for other text use ocr_image. Returns every code found: `type` (QR, E"},{"name":"peppol_lookup","description":"utilpeek: Check whether a company is registered on the Peppol e-invoicing network. For the legal entity use search_lei. Returns whether a Peppol participant ID "},{"name":"lint_x402_listing","description":"utilpeek: Lint an x402 listing, or check a seller's Bazaar coverage. For price position, preflight and demand too use x402_seller_report. Returns in mode lint t"},{"name":"build_ics_event","description":"utilpeek: Build an iCalendar file from JSON events. To read an .ics file use parse_ics. Returns RFC 5545 VCALENDAR text built from 1-50 events, CRLF lines folde"},{"name":"parse_ics","description":"utilpeek: Parse an iCalendar file into JSON events. To write one use build_ics_event. Returns iCalendar text (Google, Outlook, Apple, up to 1 MB) unfolded and r"},{"name":"expand_rrule","description":"utilpeek: Expand an iCalendar RRULE into dates. For cron use cron_next_runs; to build an event use build_ics_event. Returns an RFC 5545 RRULE and a start expand"},{"name":"decode_jwt","description":"utilpeek: Decode a JWT without verifying it. To check the signature use verify_jwt. Returns a compact JWT split into its header and payload JSON, with alg, typ,"},{"name":"verify_jwt","description":"utilpeek: Verify a JWT signature and claims. To read the claims without a key use decode_jwt. Returns valid true or false for a JWT checked with PyJWT against o"},{"name":"decode_lightning_invoice","description":"chainpeek: Decode a Lightning invoice: amount, payee, payment hash and expiry. For EVM calldata use decode_calldata; for Nostr ids use decode_nostr_id. Returns "},{"name":"decode_nostr_id","description":"chainpeek: Decode a Nostr npub, nprofile, note, nevent or naddr to hex; resolve NIP-05. For ENS names use resolve_ens. Returns a Nostr NIP-19 identifier decoded"},{"name":"get_gpu_prices","description":"utilpeek: GPU prices: cheapest H100, A100, L4 per GPU-hour on AWS, Azure, Google Cloud, Akash. Returns cheapest GPU prices per GPU-hour on AWS, Azure and Google"},{"name":"get_gpu_price_index","description":"utilpeek: GPU price index: daily H100, H200, A100 rental price per GPU-hour over time. Returns a GPU chip's daily rental price history: lowest and median on-dem"},{"name":"upload_file_get_link","description":"utilpeek: Upload a file and get a download link that expires in 24 hours. Returns a public download link to a file you upload, valid for `ttl_hours` (default 24"},{"name":"find_places_nearby","description":"utilpeek: Find places nearby: pharmacies, cafes, ATMs, shops and hospitals near a point, from OpenStreetMap. To resolve a city name use geocode. Returns places "},{"name":"lookup_barcode_product","description":"utilpeek: Look up the product behind a barcode in open product databases, with conflicts flagged. To make a barcode use make_barcode; to read every code in an i"},{"name":"render_mermaid","description":"pdfpeek: Render Mermaid diagram code to an SVG or PNG image. Returns Mermaid diagram code drawn as an SVG or PNG file in an offline sandboxed browser: `format` "}],"toolCount":38,"toolsHash":"0c33b833abfe8e1ac99687135fb3d4c06c0e488ad81aa2548805e767e0d43840","serverName":"tanod-util","capabilities":["prompts","resources","tools"],"serverVersion":"0.1.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-19T18:33:34.428Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":722,"error":null,"detail":{"tools":[{"name":"text_encode","description":"utilpeek: Encode or decode text: base64, hex, URL, punycode, JWT decode, ... For digests use hash_text; for a JWT's claims use decode_jwt. Returns the text enco"},{"name":"hash_text","description":"utilpeek: Hash text or bytes: sha256, keccak256, blake2b, md5, crc32, ... For a keyed HMAC use hmac_sign_verify. Returns hex digests of the text (as UTF-8) or b"},{"name":"hmac_sign_verify","description":"utilpeek: Sign or verify an HMAC, including GitHub, Stripe and Slack webhook signatures. For plain digests use hash_text; for JWTs use verify_jwt. Returns the H"},{"name":"generate_ids","description":"utilpeek: Generate UUIDs or ULIDs. For numbers, bytes and picks use generate_random. Returns 1-100 new identifiers: random UUID v4, time-ordered UUID v7 (RFC 95"},{"name":"generate_random","description":"utilpeek: Generate cryptographically strong random numbers, bytes, UUIDs, dice rolls, picks and shuffles. For UUIDs and ULIDs use generate_ids. Returns values f"},{"name":"validate_json","description":"utilpeek: Validate JSON against a JSON Schema. To pull JSON out of prose use extract_json_with_schema; to convert formats use convert_data. Returns whether a JS"},{"name":"convert_data","description":"utilpeek: Convert data between JSON, YAML, CSV, TOML and XML. To check JSON against a schema use validate_json. Returns the document converted from json, yaml, "},{"name":"validate_identifier","description":"utilpeek: check the format and check digits of an identifier. For a VIN's vehicle use decode_vin; for phone numbers use parse_phone_number. Returns `valid`, `re"},{"name":"parse_phone_number","description":"utilpeek: parse and format a phone number. For a prefix's country and network use lookup_phone_prefix. A string that is not a phone number, or a national form w"},{"name":"lookup_phone_prefix","description":"utilpeek: Look up a phone number prefix: country, line type and original network, with ambiguity. To parse a full number use parse_phone_number. Returns the cou"},{"name":"parse_user_agent","description":"utilpeek: parse a User-Agent string. For known x402 monitors and indexers with call rates use identify_x402_client. A User-Agent is self-reported and easy to fa"},{"name":"parse_url","description":"utilpeek: parse a URL. To fetch the page use render_page. The URL is parsed, never fetched. Public-suffix split from the Public Suffix List snapshot bundled wit"},{"name":"cron_next_runs","description":"utilpeek: the next run times of a cron expression. For iCalendar RRULEs use expand_rrule. Standard 5-field cron (minute hour day-of-month month day-of-week) or "},{"name":"convert_time","description":"utilpeek: convert one instant between time zones. For business days use count_or_add_business_days. Zones come from the pinned IANA tz database (tzdata package)"},{"name":"get_public_holidays","description":"utilpeek: public holidays of a country for a year. To count working days use count_or_add_business_days. An unsupported country, subdivision, language or year i"},{"name":"count_or_add_business_days","description":"utilpeek: Count business days between two dates or add working days, skipping public holidays. For the holiday list use get_public_holidays. Returns the busines"},{"name":"convert_units","description":"utilpeek: Convert units of measurement: length, weight, temperature, volume, pressure, energy, data size. For numbers in words use text_numbers. Returns a value"},{"name":"convert_color_check_contrast","description":"utilpeek: Convert a color between hex, RGB, HSL and OKLCH and check WCAG contrast. For contrast alone use check_wcag_contrast. Returns a CSS color (hex, rgb(), "},{"name":"check_wcag_contrast","description":"utilpeek: Check the WCAG contrast between a text color and a background color. To convert colour formats too use convert_color_check_contrast. Returns the WCAG "},{"name":"geocode","description":"utilpeek: offline geocoding over the GeoNames cities15000 table. For places of a kind nearby use find_places_nearby. Input: either `place` alone or `lat` and `l"},{"name":"make_qr_code","description":"utilpeek: make a QR code image. For 1-D barcodes use make_barcode; to read a code use read_qr_barcode. Returns `svg` (text) or `data_base64` (PNG), or with `out"},{"name":"make_barcode","description":"utilpeek: make a 1-D barcode image. For QR codes use make_qr_code; to find the product behind a number use lookup_barcode_product. Returns `svg` (text, with wid"},{"name":"read_qr_barcode","description":"imagepeek: Read every QR code and barcode in an image. To make a QR code use make_qr_code; for other text use ocr_image. Returns every code found: `type` (QR, E"},{"name":"peppol_lookup","description":"utilpeek: Check whether a company is registered on the Peppol e-invoicing network. For the legal entity use search_lei. Returns whether a Peppol participant ID "},{"name":"lint_x402_listing","description":"utilpeek: Lint an x402 listing, or check a seller's Bazaar coverage. For price position, preflight and demand too use x402_seller_report. Returns in mode lint t"},{"name":"build_ics_event","description":"utilpeek: Build an iCalendar file from JSON events. To read an .ics file use parse_ics. Returns RFC 5545 VCALENDAR text built from 1-50 events, CRLF lines folde"},{"name":"parse_ics","description":"utilpeek: Parse an iCalendar file into JSON events. To write one use build_ics_event. Returns iCalendar text (Google, Outlook, Apple, up to 1 MB) unfolded and r"},{"name":"expand_rrule","description":"utilpeek: Expand an iCalendar RRULE into dates. For cron use cron_next_runs; to build an event use build_ics_event. Returns an RFC 5545 RRULE and a start expand"},{"name":"decode_jwt","description":"utilpeek: Decode a JWT without verifying it. To check the signature use verify_jwt. Returns a compact JWT split into its header and payload JSON, with alg, typ,"},{"name":"verify_jwt","description":"utilpeek: Verify a JWT signature and claims. To read the claims without a key use decode_jwt. Returns valid true or false for a JWT checked with PyJWT against o"},{"name":"decode_lightning_invoice","description":"chainpeek: Decode a Lightning invoice: amount, payee, payment hash and expiry. For EVM calldata use decode_calldata; for Nostr ids use decode_nostr_id. Returns "},{"name":"decode_nostr_id","description":"chainpeek: Decode a Nostr npub, nprofile, note, nevent or naddr to hex; resolve NIP-05. For ENS names use resolve_ens. Returns a Nostr NIP-19 identifier decoded"},{"name":"get_gpu_prices","description":"utilpeek: GPU prices: cheapest H100, A100, L4 per GPU-hour on AWS, Azure, Google Cloud, Akash. Returns cheapest GPU prices per GPU-hour on AWS, Azure and Google"},{"name":"get_gpu_price_index","description":"utilpeek: GPU price index: daily H100, H200, A100 rental price per GPU-hour over time. Returns a GPU chip's daily rental price history: lowest and median on-dem"},{"name":"upload_file_get_link","description":"utilpeek: Upload a file and get a download link that expires in 24 hours. Returns a public download link to a file you upload, valid for `ttl_hours` (default 24"},{"name":"find_places_nearby","description":"utilpeek: Find places nearby: pharmacies, cafes, ATMs, shops and hospitals near a point, from OpenStreetMap. To resolve a city name use geocode. Returns places "},{"name":"lookup_barcode_product","description":"utilpeek: Look up the product behind a barcode in open product databases, with conflicts flagged. To make a barcode use make_barcode; to read every code in an i"},{"name":"render_mermaid","description":"pdfpeek: Render Mermaid diagram code to an SVG or PNG image. Returns Mermaid diagram code drawn as an SVG or PNG file in an offline sandboxed browser: `format` "}],"toolCount":38,"toolsHash":"0c33b833abfe8e1ac99687135fb3d4c06c0e488ad81aa2548805e767e0d43840","serverName":"tanod-util","capabilities":["prompts","resources","tools"],"serverVersion":"0.1.0","protocolVersion":"2025-06-18"}}],"tools":[{"name":"text_encode","description":"utilpeek: Encode or decode text: base64, hex, URL, punycode, JWT decode, ... For digests use hash_text; for a JWT's claims use decode_jwt. Returns the text enco"},{"name":"hash_text","description":"utilpeek: Hash text or bytes: sha256, keccak256, blake2b, md5, crc32, ... For a keyed HMAC use hmac_sign_verify. Returns hex digests of the text (as UTF-8) or b"},{"name":"hmac_sign_verify","description":"utilpeek: Sign or verify an HMAC, including GitHub, Stripe and Slack webhook signatures. For plain digests use hash_text; for JWTs use verify_jwt. Returns the H"},{"name":"generate_ids","description":"utilpeek: Generate UUIDs or ULIDs. For numbers, bytes and picks use generate_random. Returns 1-100 new identifiers: random UUID v4, time-ordered UUID v7 (RFC 95"},{"name":"generate_random","description":"utilpeek: Generate cryptographically strong random numbers, bytes, UUIDs, dice rolls, picks and shuffles. For UUIDs and ULIDs use generate_ids. Returns values f"},{"name":"validate_json","description":"utilpeek: Validate JSON against a JSON Schema. To pull JSON out of prose use extract_json_with_schema; to convert formats use convert_data. Returns whether a JS"},{"name":"convert_data","description":"utilpeek: Convert data between JSON, YAML, CSV, TOML and XML. To check JSON against a schema use validate_json. Returns the document converted from json, yaml, "},{"name":"validate_identifier","description":"utilpeek: check the format and check digits of an identifier. For a VIN's vehicle use decode_vin; for phone numbers use parse_phone_number. Returns `valid`, `re"},{"name":"parse_phone_number","description":"utilpeek: parse and format a phone number. For a prefix's country and network use lookup_phone_prefix. A string that is not a phone number, or a national form w"},{"name":"lookup_phone_prefix","description":"utilpeek: Look up a phone number prefix: country, line type and original network, with ambiguity. To parse a full number use parse_phone_number. Returns the cou"},{"name":"parse_user_agent","description":"utilpeek: parse a User-Agent string. For known x402 monitors and indexers with call rates use identify_x402_client. A User-Agent is self-reported and easy to fa"},{"name":"parse_url","description":"utilpeek: parse a URL. To fetch the page use render_page. The URL is parsed, never fetched. Public-suffix split from the Public Suffix List snapshot bundled wit"},{"name":"cron_next_runs","description":"utilpeek: the next run times of a cron expression. For iCalendar RRULEs use expand_rrule. Standard 5-field cron (minute hour day-of-month month day-of-week) or "},{"name":"convert_time","description":"utilpeek: convert one instant between time zones. For business days use count_or_add_business_days. Zones come from the pinned IANA tz database (tzdata package)"},{"name":"get_public_holidays","description":"utilpeek: public holidays of a country for a year. To count working days use count_or_add_business_days. An unsupported country, subdivision, language or year i"},{"name":"count_or_add_business_days","description":"utilpeek: Count business days between two dates or add working days, skipping public holidays. For the holiday list use get_public_holidays. Returns the busines"},{"name":"convert_units","description":"utilpeek: Convert units of measurement: length, weight, temperature, volume, pressure, energy, data size. For numbers in words use text_numbers. Returns a value"},{"name":"convert_color_check_contrast","description":"utilpeek: Convert a color between hex, RGB, HSL and OKLCH and check WCAG contrast. For contrast alone use check_wcag_contrast. Returns a CSS color (hex, rgb(), "},{"name":"check_wcag_contrast","description":"utilpeek: Check the WCAG contrast between a text color and a background color. To convert colour formats too use convert_color_check_contrast. Returns the WCAG "},{"name":"geocode","description":"utilpeek: offline geocoding over the GeoNames cities15000 table. For places of a kind nearby use find_places_nearby. Input: either `place` alone or `lat` and `l"},{"name":"make_qr_code","description":"utilpeek: make a QR code image. For 1-D barcodes use make_barcode; to read a code use read_qr_barcode. Returns `svg` (text) or `data_base64` (PNG), or with `out"},{"name":"make_barcode","description":"utilpeek: make a 1-D barcode image. For QR codes use make_qr_code; to find the product behind a number use lookup_barcode_product. Returns `svg` (text, with wid"},{"name":"read_qr_barcode","description":"imagepeek: Read every QR code and barcode in an image. To make a QR code use make_qr_code; for other text use ocr_image. Returns every code found: `type` (QR, E"},{"name":"peppol_lookup","description":"utilpeek: Check whether a company is registered on the Peppol e-invoicing network. For the legal entity use search_lei. Returns whether a Peppol participant ID "},{"name":"lint_x402_listing","description":"utilpeek: Lint an x402 listing, or check a seller's Bazaar coverage. For price position, preflight and demand too use x402_seller_report. Returns in mode lint t"},{"name":"build_ics_event","description":"utilpeek: Build an iCalendar file from JSON events. To read an .ics file use parse_ics. Returns RFC 5545 VCALENDAR text built from 1-50 events, CRLF lines folde"},{"name":"parse_ics","description":"utilpeek: Parse an iCalendar file into JSON events. To write one use build_ics_event. Returns iCalendar text (Google, Outlook, Apple, up to 1 MB) unfolded and r"},{"name":"expand_rrule","description":"utilpeek: Expand an iCalendar RRULE into dates. For cron use cron_next_runs; to build an event use build_ics_event. Returns an RFC 5545 RRULE and a start expand"},{"name":"decode_jwt","description":"utilpeek: Decode a JWT without verifying it. To check the signature use verify_jwt. Returns a compact JWT split into its header and payload JSON, with alg, typ,"},{"name":"verify_jwt","description":"utilpeek: Verify a JWT signature and claims. To read the claims without a key use decode_jwt. Returns valid true or false for a JWT checked with PyJWT against o"},{"name":"decode_lightning_invoice","description":"chainpeek: Decode a Lightning invoice: amount, payee, payment hash and expiry. For EVM calldata use decode_calldata; for Nostr ids use decode_nostr_id. Returns "},{"name":"decode_nostr_id","description":"chainpeek: Decode a Nostr npub, nprofile, note, nevent or naddr to hex; resolve NIP-05. For ENS names use resolve_ens. Returns a Nostr NIP-19 identifier decoded"},{"name":"get_gpu_prices","description":"utilpeek: GPU prices: cheapest H100, A100, L4 per GPU-hour on AWS, Azure, Google Cloud, Akash. Returns cheapest GPU prices per GPU-hour on AWS, Azure and Google"},{"name":"get_gpu_price_index","description":"utilpeek: GPU price index: daily H100, H200, A100 rental price per GPU-hour over time. Returns a GPU chip's daily rental price history: lowest and median on-dem"},{"name":"upload_file_get_link","description":"utilpeek: Upload a file and get a download link that expires in 24 hours. Returns a public download link to a file you upload, valid for `ttl_hours` (default 24"},{"name":"find_places_nearby","description":"utilpeek: Find places nearby: pharmacies, cafes, ATMs, shops and hospitals near a point, from OpenStreetMap. To resolve a city name use geocode. Returns places "},{"name":"lookup_barcode_product","description":"utilpeek: Look up the product behind a barcode in open product databases, with conflicts flagged. To make a barcode use make_barcode; to read every code in an i"},{"name":"render_mermaid","description":"pdfpeek: Render Mermaid diagram code to an SVG or PNG image. Returns Mermaid diagram code drawn as an SVG or PNG file in an offline sandboxed browser: `format` "}],"package":null,"toolSurface":{"id":"ts_txb2xrq2zgau","endpointId":"ep_yutxh4ku4w7z","hash":"0c33b833abfe8e1ac99687135fb3d4c06c0e488ad81aa2548805e767e0d43840","toolCount":38,"serverName":"tanod-util","serverVersion":"0.1.0","protocolVersion":"2025-06-18","firstSeenAt":"2026-10-17T14:22:20.092Z","lastSeenAt":"2026-10-22T11:35:04.443Z","observations":18,"toolNames":["text_encode","hash_text","hmac_sign_verify","generate_ids","generate_random","validate_json","convert_data","validate_identifier","parse_phone_number","lookup_phone_prefix","parse_user_agent","parse_url","cron_next_runs","convert_time","get_public_holidays","count_or_add_business_days","convert_units","convert_color_check_contrast","check_wcag_contrast","geocode","make_qr_code","make_barcode","read_qr_barcode","peppol_lookup","lint_x402_listing","build_ics_event","parse_ics","expand_rrule","decode_jwt","verify_jwt","decode_lightning_invoice","decode_nostr_id","get_gpu_prices","get_gpu_price_index","upload_file_get_link","find_places_nearby","lookup_barcode_product","render_mermaid"],"distinctSurfaces":14},"endpointFacts":[{"id":"ep_yutxh4ku4w7z","url":"https://tanod.dev/mcp/util","type":"mcp_streamable_http","factsCheckedAt":"2026-10-20T13:26:58.085Z","auth":{"observedAt":"2026-10-20T13:26:58.377Z","authRequired":false,"scheme":null,"resourceMetadata":null,"authorizationServer":null,"conformance":{"dpop":false,"rfc8414":false,"rfc9728":false,"pkceS256":false,"clientIdMetadataDocument":false,"dynamicClientRegistration":false}},"tls":{"observedAt":"2026-10-20T13:26:58.395Z","protocol":"TLSv1.3","chainValid":true,"chainError":null,"hostMatches":true,"subject":"tanod.dev","issuer":{"commonName":"YE1","organization":"Let's Encrypt"},"validFrom":"2026-10-06T15:23:54.000Z","validTo":"2027-01-04T15:23:53.000Z","daysToExpiry":74,"sanCount":2,"fingerprint256":"42:4E:C3:21:85:BF:3C:16:A2:A4:8A:B6:42:6C:B6:FD:E6:C5:58:F5:8B:E1:73:93:8B:FF:10:6E:25:A4:98:76"}}]},"verification":{"claimed":false,"claimedAt":null,"proofs":[]},"provenance":{"sources":[{"source":"mcp_registry","key":"dev.tanod/util","url":"https://registry.modelcontextprotocol.io/v0/servers/dev.tanod%2Futil","firstSeenAt":"2026-10-09T14:21:22.203Z","fetchedAt":"2026-10-22T06:18:31.947Z","normalizedAt":"2026-10-22T06:18:31.947Z"}]},"firstSeenAt":"2026-10-09T14:21:22.203Z","updatedAt":"2026-10-22T11:40:32.783Z"}