Koskamo

Duo Data Utilities MCP

Provides 33 independent pay-per-call HTTP GET endpoints for validating IBANs, ISINs, VAT IDs, and barcodes, converting timezones, generating slugs, and parsing URLs. The MCP server allows agents to access these deterministic data utilities via Streamable HTTP, with tool listing being free and tool calls charged via x402 protocol.

Endpoint and access

No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.

Duo Data Utilities MCP logo, by Duo LeadsVendor evidenceStreamable HTTPNo sign-inEndpoint checked 2026-11-06Operated by Duo Leads
MCP endpoint (Streamable HTTP)
https://api.duoleads.com/mcp
Vendor documentation

What its tools do

33 tools, grouped by the hints the server advertises. Hints are self-declared, not verified behavior.

33 of 33 have a description · 33 of 33 declare behavior hints · 33 of 33 with parameters document them all

Checks and signals

Each line is separate evidence, not a trust score.

  • Passed Endpoint answered the live check ·
  • Passed Official MCP Registry namespace is tied to api.duoleads.com ·
  • Passed Endpoint is on the registry namespace domain ·
  • Availability 1 of 1 checks passed in 30 days

What you can do with it

  • Validate IBANs and generate IBANs from country and bank details
  • Check VAT, tax ID, and national ID checksums for multiple countries
  • Convert timezones and calculate business days with holidays
  • Generate URL slugs and parse canonical domains

Source and maintenance

Vendor evidenceRegistry 1.0.4
Maintenance checked

Protocol and capabilities

Server
Duo Data Utilities 1.0.0
MCP protocol negotiated in check
2025-11-25
Tools
33 advertised
Resources
Not advertised
Resource templates
Not advertised
Prompts
Not advertised
Server-advertised capabilities
{
  "tools": {
    "listChanged": true
  }
}

Server-provided instructions

Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.

Small exact data utilities for agents: IBAN, VAT and tax ID, ISIN, barcode, timezone, geo, hashing, chain and number tools. tools/list is free; each tools/call costs $0.05 in USDC on Base, paid with x402 v2. Call a tool without payment to get its PaymentRequired, then repeat the call with the signed payment in _meta["x402/payment"] (any x402 MCP client such as @x402/mcp does this); bad arguments are answered free.

Tools

33 advertised

vat_tax_id_validate — VAT, tax ID and national ID validator: 23 countries, checksum only (VAT formats BE, DE, FR, IT, PL, AT, CH, IE)
Advertised by the server during the last successful anonymous check.
Advertised read-only

VAT, tax ID and national ID validator: check a national identity, tax or company registration number against its country's official checksum rule. Covers 23 countries including NL BSN, ES NIF/NIE/CIF, IT codice fiscale, FR SIREN/SIRET, DE Steuer-ID, BE/PL/CZ national numbers, SE/NO/DK/FI personal numbers, BR CPF/CNPJ, AU ABN/TFN, UK NINo, IE PPS, US NPI/EIN. Structure and check digit only, no registry lookup; the number is never stored (logs keep only its length and character types). Price: $0.05 per successful call, paid over x402 (USDC on Base).

vat_tax_id_validate input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "country",
    "kind",
    "value"
  ],
  "properties": {
    "kind": {
      "type": "string",
      "description": "Identifier type for that country, e.g. bsn, nif, cf, cpf. Accepted: an identifier kind supported for the country."
    },
    "value": {
      "type": "string",
      "description": "The identifier. Separators (space . - /) are stripped before checking. Accepted: at most 64 characters."
    },
    "country": {
      "type": "string",
      "description": "ISO 3166-1 alpha-2 country code, case-insensitive. One of the 23 supported countries; the United Kingdom is accepted as UK or GB (the response echoes what you sent). Accepted: one of the 23 supported ISO 3166-1 alpha-2 codes."
    }
  }
}
vat_tax_id_validate annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true
}
gtin_barcode_validate — GTIN barcode validator: EAN-13, UPC-A (GTIN-12), GTIN-8/14, GLN and SSCC check digits
Advertised by the server during the last successful anonymous check.
Advertised read-only

GTIN barcode validator: validate and convert GS1 identifiers: GTIN-8, GTIN-12 (UPC-A), GTIN-13 (EAN-13), GTIN-14, GLN and SSCC. Returns the check-digit verdict, the computed correct check digit, the GTIN-14 form with its indicator digit, and conversion between GTIN-8, -12, -13 and -14. No company-prefix split is returned: GS1's prefix-length table is no longer public data. Also computes a missing check digit from a partial code. Structure only, no product database. Price: $0.05 per successful call, paid over x402 (USDC on Base).

gtin_barcode_validate input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "value"
  ],
  "properties": {
    "op": {
      "enum": [
        "validate",
        "checkdigit",
        "convert"
      ],
      "type": "string",
      "description": "validate (default), checkdigit (compute the missing final digit) or convert. Accepted: validate, checkdigit, convert."
    },
    "to": {
      "enum": [
        "gtin8",
        "gtin12",
        "gtin13",
        "gtin14"
      ],
      "type": "string",
      "description": "Target format. Required when op=convert. Accepted: gtin8, gtin12, gtin13, gtin14."
    },
    "value": {
      "type": "string",
      "description": "GS1 code, digits with optional spaces or hyphens. For op=checkdigit, omit the final digit. Accepted: 8, 12, 13, 14 or 18 digits."
    }
  }
}
gtin_barcode_validate annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true
}
isin_cusip_sedol_validate — ISIN validator plus CUSIP, SEDOL and FIGI check-digit validation; builds an ISIN from an NSIN
Advertised by the server during the last successful anonymous check.
Advertised read-only

ISIN validator plus CUSIP, SEDOL and FIGI check digits: validate the check digit of a financial security identifier (ISIN per ISO 6166). Returns the verdict, the computed correct check character, and for an ISIN the issuing country prefix and the embedded NSIN. Also builds an ISIN from a country code plus a 9-character NSIN. Format and checksum only, no security master lookup. Price: $0.05 per successful call, paid over x402 (USDC on Base).

isin_cusip_sedol_validate input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "properties": {
    "op": {
      "enum": [
        "validate",
        "build-isin"
      ],
      "type": "string",
      "description": "validate (default) or build-isin. Accepted: validate, build-isin."
    },
    "nsin": {
      "type": "string",
      "description": "Exactly 9 alphanumeric characters. Required when op=build-isin. Accepted: exactly 9 alphanumeric characters."
    },
    "value": {
      "type": "string",
      "description": "ISIN, CUSIP, SEDOL or FIGI to validate. Required when op=validate. Accepted: an alphanumeric security identifier of at most 24 characters."
    },
    "country": {
      "type": "string",
      "description": "ISO 3166-1 alpha-2 code or XS. Required when op=build-isin. Accepted: at most 16 characters."
    }
  }
}
isin_cusip_sedol_validate annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true
}
iban_validate — IBAN validator: length, mod-97 check digits, bank/branch/account breakdown (89 countries)
Advertised by the server during the last successful anonymous check.
Advertised read-only

IBAN validator: validate an IBAN's length for its country, permitted character classes per field, and the ISO 7064 mod-97-10 check digits. Returns the verdict with a specific failure reason, the electronic and print formats, and the decomposed bank code, branch code and account number according to that country's registered layout. Covers the 89 countries of the SWIFT IBAN registry. Structure and checksum only, it does not confirm the account exists. Price: $0.05 per successful call, paid over x402 (USDC on Base).

iban_validate input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "iban"
  ],
  "properties": {
    "iban": {
      "type": "string",
      "description": "The IBAN. Spaces and non-breaking spaces are stripped; lowercase is accepted and uppercased. Accepted: an IBAN of at most 64 characters."
    }
  }
}
iban_validate annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true
}
iban_generate — IBAN generator: build an IBAN from country and BBAN or bank/branch/account, computing check digits
Advertised by the server during the last successful anonymous check.
Advertised read-only

IBAN generator: construct an IBAN from a country code and the domestic account parts, computing the ISO 7064 mod-97-10 check digits. Takes a single BBAN string or named parts (bank code, branch code, account number); digit fields are left-padded with zeros to the country's registered widths. Returns the IBAN in electronic and print formats with its bank, branch and account parts. Covers the 89 SWIFT registry countries. Named parts work only where they span the whole BBAN; else pass the BBAN. Price: $0.05 per successful call, paid over x402 (USDC on Base).

iban_generate input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "country"
  ],
  "properties": {
    "bank": {
      "type": "string",
      "description": "Bank code. Requires account. Accepted: a bank code of at most 16 characters."
    },
    "bban": {
      "type": "string",
      "description": "The whole domestic account number (BBAN), alphanumeric. Use this or bank plus account. Accepted: an alphanumeric BBAN of at most 34 characters."
    },
    "branch": {
      "type": "string",
      "description": "Branch code, for countries whose layout has a branch field. Accepted: a branch code of at most 16 characters."
    },
    "account": {
      "type": "string",
      "description": "Account number. Requires bank. Accepted: an account number of at most 32 characters."
    },
    "country": {
      "type": "string",
      "description": "ISO 3166-1 alpha-2 country code in the SWIFT IBAN registry, case-insensitive. Accepted: an ISO 3166-1 alpha-2 code in the IBAN registry."
    }
  }
}
iban_generate annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true
}
timezone_convert — Timezone converter: instant to local time in an IANA time zone and back, with UTC offset and DST state
Advertised by the server during the last successful anonymous check.
Advertised read-only

Timezone converter: convert an instant to wall-clock time in a named IANA time zone, or a wall-clock time in a zone back to an instant. Returns the local date and time, the UTC offset in ±HH:MM and seconds, the zone abbreviation, whether DST is in effect, the ISO week date, and the day of year. Handles the ambiguous and skipped local times at DST boundaries explicitly rather than guessing. Price: $0.05 per successful call, paid over x402 (USDC on Base).

timezone_convert input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "zone"
  ],
  "properties": {
    "zone": {
      "type": "string",
      "description": "IANA time zone id, e.g. Europe/Amsterdam. Accepted: an IANA time zone id, e.g. Europe/Amsterdam."
    },
    "local": {
      "type": "string",
      "description": "Wall-clock time YYYY-MM-DDTHH:MM[:SS] in zone, converted back to an instant. Mutually exclusive with instant. Accepted: YYYY-MM-DDTHH:MM[:SS]."
    },
    "instant": {
      "type": "string",
      "description": "RFC 3339 timestamp or integer Unix seconds/milliseconds. Defaults to now. Mutually exclusive with local. Accepted: RFC 3339 timestamp or integer epoch."
    },
    "ambiguous": {
      "enum": [
        "earlier",
        "later",
        "reject"
      ],
      "type": "string",
      "description": "Only with local: which instant a repeated local time maps to. Default earlier. Accepted: earlier, later, reject."
    }
  }
}
timezone_convert annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true
}
dst_transitions — DST transitions: next daylight-saving time changes for an IANA time zone
Advertised by the server during the last successful anonymous check.
Advertised read-only

DST transitions: list the daylight-saving time changes for an IANA time zone over a date range: the exact instant of each shift, the offset before and after, and whether local clocks jump forward or back. Returns the current offset and DST state, and the next transition from a given instant. Zones without DST return an empty transition list rather than an error. Price: $0.05 per successful call, paid over x402 (USDC on Base).

dst_transitions input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "zone"
  ],
  "properties": {
    "from": {
      "type": "string",
      "description": "Start of the range: RFC 3339 or YYYY-MM-DD. Default now. Accepted: RFC 3339 timestamp or YYYY-MM-DD."
    },
    "zone": {
      "type": "string",
      "description": "IANA time zone id. Accepted: an IANA time zone id, e.g. Europe/Amsterdam."
    },
    "years": {
      "type": "string",
      "description": "Length of the range in years, 1-10. Default 2. Accepted: integer 1-10."
    }
  }
}
dst_transitions annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true
}
business_days_calculate — Business days calculator: add or count working days with your weekend mask and holiday list
Advertised by the server during the last successful anonymous check.
Advertised read-only

Business days calculator with a caller-supplied calendar: add or subtract N working days from a date, or count the working days between two dates. The weekend is a weekday mask (Friday-Saturday and Sunday-only weeks work) and holidays are an explicit date list, so nothing depends on a stale holiday table. Returns the result date, the day count and the skipped dates with reasons. The skipped list is capped at 1,000 entries (skipped_truncated flags it); skipped_total is always exact. Price: $0.05 per successful call, paid over x402 (USDC on Base).

business_days_calculate input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "from"
  ],
  "properties": {
    "op": {
      "enum": [
        "add",
        "count"
      ],
      "type": "string",
      "description": "add (default) N business days to from, or count business days between from and to. Accepted: add, count."
    },
    "to": {
      "type": "string",
      "description": "End date YYYY-MM-DD, may precede from. Required when op=count. Accepted: a calendar date as YYYY-MM-DD."
    },
    "days": {
      "type": "string",
      "description": "Business days to add, -3650 to 3650. Required when op=add. Accepted: integer between -3650 and 3650."
    },
    "from": {
      "type": "string",
      "description": "Start date, YYYY-MM-DD. Accepted: a calendar date as YYYY-MM-DD."
    },
    "weekend": {
      "type": "string",
      "description": "Comma-separated weekday names or ISO numbers. Default sat,sun. Empty string = no weekend. Accepted: comma-separated weekday names (mon..sun) or ISO numbers 1-7."
    },
    "holidays": {
      "type": "string",
      "description": "Comma-separated YYYY-MM-DD holiday dates. Accepted: comma-separated YYYY-MM-DD dates, at most 2048 characters."
    },
    "inclusive": {
      "enum": [
        "start",
        "both",
        "neither"
      ],
      "type": "string",
      "description": "For op=count: start (default, half-open [from, to)), both or neither. Accepted: start, both, neither."
    }
  }
}
business_days_calculate annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true
}
rrule_expand — RRULE expander: RFC 5545 recurrence rule to concrete occurrence dates
Advertised by the server during the last successful anonymous check.
Advertised read-only

RRULE expander: expand an RFC 5545 recurrence rule into concrete occurrence timestamps. Accepts an RRULE string with DTSTART, an IANA time zone, and optional EXDATE and RDATE lists, and returns up to 200 occurrences as both local wall-clock times and UTC instants. Supports FREQ, INTERVAL, COUNT, UNTIL, BYDAY, BYMONTHDAY, BYMONTH, BYSETPOS and WKST. Occurrences moved by a DST gap carry gap: true. Rules needing over 50,000 candidate evaluations are rejected. Price: $0.05 per successful call, paid over x402 (USDC on Base).

rrule_expand input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "rrule",
    "dtstart",
    "zone"
  ],
  "properties": {
    "zone": {
      "type": "string",
      "description": "IANA time zone id. Accepted: an IANA time zone id, e.g. Europe/Amsterdam."
    },
    "after": {
      "type": "string",
      "description": "RFC 3339 instant; skip occurrences before it. Accepted: RFC 3339 timestamp."
    },
    "count": {
      "type": "string",
      "description": "Maximum occurrences to return, 1-200. Default 20. Accepted: integer 1-200."
    },
    "rdate": {
      "type": "string",
      "description": "Comma-separated local datetimes to add. Accepted: at most 1024 characters."
    },
    "rrule": {
      "type": "string",
      "description": "RFC 5545 RRULE, e.g. FREQ=MONTHLY;BYDAY=-1FR;COUNT=6. Accepted: at most 512 characters."
    },
    "exdate": {
      "type": "string",
      "description": "Comma-separated local datetimes to exclude. Accepted: at most 1024 characters."
    },
    "dtstart": {
      "type": "string",
      "description": "First occurrence, YYYY-MM-DDTHH:MM:SS local to zone. Accepted: YYYY-MM-DDTHH:MM:SS."
    }
  }
}
rrule_expand annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true
}
calendar_convert — Calendar converter: Gregorian to Hijri, Hebrew, Japanese era, Persian and more, plus Easter date
Advertised by the server during the last successful anonymous check.
Advertised read-only

Calendar converter: convert a Gregorian date to other calendar systems: Islamic (both the tabular civil calendar and the Umm al-Qura variant), Hebrew, Japanese imperial era, Republic of China, Buddhist and Persian. Also computes Easter Sunday for a year in both the Gregorian and Julian reckonings. Uses the calendar support built into the runtime, with the algorithm named in every response. Price: $0.05 per successful call, paid over x402 (USDC on Base).

calendar_convert input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "properties": {
    "op": {
      "enum": [
        "convert",
        "easter"
      ],
      "type": "string",
      "description": "convert (default) a Gregorian date, or easter for a year. Accepted: convert, easter."
    },
    "to": {
      "type": "string",
      "description": "Comma-separated calendar ids: islamic, islamic-umalqura, hebrew, japanese, roc, buddhist, persian. Default all. Accepted: islamic, islamic-umalqura, hebrew, japanese, roc, buddhist, persian."
    },
    "date": {
      "type": "string",
      "description": "Gregorian date YYYY-MM-DD. Required when op=convert. Accepted: a calendar date as YYYY-MM-DD."
    },
    "rite": {
      "enum": [
        "western",
        "eastern"
      ],
      "type": "string",
      "description": "Easter reckoning: western (default) or eastern. Accepted: western, eastern."
    },
    "year": {
      "type": "string",
      "description": "Year for op=easter, 326-9999. Accepted: integer 326-9999."
    }
  }
}
calendar_convert annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true
}
slug_generate — Slug generator: Unicode-aware URL slug with transliteration
Advertised by the server during the last successful anonymous check.
Advertised read-only

Slug generator: turn arbitrary text into a URL-safe slug. Decomposes accents, transliterates German umlauts, Scandinavian and Turkish letters, the ligatures that lose meaning under plain NFD, and Cyrillic (Russian, Ukrainian, Belarusian, Bulgarian, Serbian, Macedonian; language from lang or inferred from the letters). Lowercases, collapses separators, truncates on a word boundary. Returns the slug plus what was removed. Price: $0.05 per successful call, paid over x402 (USDC on Base).

slug_generate input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "text"
  ],
  "properties": {
    "max": {
      "type": "string",
      "description": "Maximum slug length 1-512, default 96. Truncates at the last complete word. Accepted: integer 1-512."
    },
    "case": {
      "enum": [
        "lower",
        "preserve",
        "upper"
      ],
      "type": "string",
      "description": "lower (default), preserve or upper. Accepted: lower, preserve, upper."
    },
    "lang": {
      "type": "string",
      "description": "ISO 639-1 code for locale-sensitive folding (de: ü->ue) and the Cyrillic table (ru, uk, be, bg, sr, mk). Default locale-neutral; for Cyrillic the language is then inferred from letters unique to Ukrainian, Belarusian, Serbian or Macedonian, else Russian BGN/PCGN letters with ISO 9 (accents folded) for the rest. Accepted: an ISO 639-1 language code."
    },
    "text": {
      "type": "string",
      "description": "Text to slugify, at most 2048 characters. Accepted: at most 2048 characters."
    },
    "separator": {
      "enum": [
        "-",
        "_",
        ".",
        ""
      ],
      "type": "string",
      "description": "Separator: - (default), _, . or empty. Accepted: -, _, . or empty."
    }
  }
}
slug_generate annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true
}
cyrillic_transliterate — Cyrillic transliteration to Latin (ISO 9:1995, BGN/PCGN Russian)
Advertised by the server during the last successful anonymous check.
Advertised read-only

Cyrillic transliteration to Latin using a named standard: ISO 9:1995 (one-to-one, with diacritics, covering the full standard: Russian, other Slavic, historic and non-Slavic Cyrillic letters) or BGN/PCGN, which is the Russian system only (Ukrainian, Serbian and other letters are passed through unmapped). Returns the transliteration, the source script, the standard, the mapped fraction and the unmapped characters. Other scripts are rejected with UNSUPPORTED_VALUE. Price: $0.05 per successful call, paid over x402 (USDC on Base).

cyrillic_transliterate input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "text"
  ],
  "properties": {
    "case": {
      "enum": [
        "preserve",
        "lower",
        "upper"
      ],
      "type": "string",
      "description": "preserve (default), lower or upper. Accepted: preserve, lower, upper."
    },
    "from": {
      "type": "string",
      "description": "Source script name (cyrillic), or auto (default). Accepted: cyrillic or auto."
    },
    "text": {
      "type": "string",
      "description": "Text to transliterate, at most 2048 characters. Accepted: at most 2048 characters."
    },
    "standard": {
      "type": "string",
      "description": "Romanisation standard: iso-9 (default; all ISO 9:1995 Cyrillic letters) or bgn-pcgn (BGN/PCGN Russian system, Russian letters only). Accepted: iso-9 or bgn-pcgn (Russian letters only) for cyrillic."
    }
  }
}
cyrillic_transliterate annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true
}
unicode_confusables_check — Unicode normalization (NFC/NFKC), script detection and homoglyph/confusable check
Advertised by the server during the last successful anonymous check.
Advertised read-only

Unicode normalization and confusables check: apply NFC, NFD, NFKC or NFKD, report which forms a string is already in, list the scripts present (all Unicode scripts), and flag confusable and homoglyph characters — Cyrillic а in a Latin word, fullwidth or mathematical look-alikes, all-look-alike words — plus zero-width joiners, bidirectional overrides, invisible and blank characters. Returns per-character detail with code points, names and the ASCII character each imitates. Price: $0.05 per successful call, paid over x402 (USDC on Base).

unicode_confusables_check input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "text"
  ],
  "properties": {
    "form": {
      "enum": [
        "nfc",
        "nfd",
        "nfkc",
        "nfkd"
      ],
      "type": "string",
      "description": "Normalisation form to apply, default nfc. Accepted: nfc, nfd, nfkc or nfkd."
    },
    "text": {
      "type": "string",
      "description": "Text to analyse, at most 1024 characters. Accepted: at most 1024 characters."
    },
    "detail": {
      "enum": [
        "summary",
        "full"
      ],
      "type": "string",
      "description": "summary (default) or full per-code-point detail (capped at 256 entries). Accepted: summary, full."
    }
  }
}
unicode_confusables_check annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true
}
string_similarity — String similarity: Levenshtein, Jaro-Winkler distance and Soundex/Metaphone phonetic keys
Advertised by the server during the last successful anonymous check.
Advertised read-only

String similarity: compare two strings and return every standard measure in one call: Levenshtein and Damerau-Levenshtein edit distance, normalised similarity, Jaro and Jaro-Winkler, longest common subsequence, Dice coefficient on character bigrams, and the Soundex, Metaphone and NYSIIS phonetic keys of each string. Optional case folding, accent folding and whitespace normalisation before comparison. Price: $0.05 per successful call, paid over x402 (USDC on Base).

string_similarity input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "a",
    "b"
  ],
  "properties": {
    "a": {
      "type": "string",
      "description": "First string, at most 512 characters. Accepted: at most 512 characters."
    },
    "b": {
      "type": "string",
      "description": "Second string, at most 512 characters. Accepted: at most 512 characters."
    },
    "fold": {
      "type": "string",
      "description": "Comma-separated folds before comparing: case, accents, space, punct. Default case. Accepted: comma-separated subset of case, accents, space, punct."
    },
    "only": {
      "type": "string",
      "description": "Comma-separated measure names to compute: levenshtein, damerau_levenshtein, normalised_similarity, jaro, jaro_winkler, lcs_length, dice, phonetic (all three keys), soundex, metaphone, nysiis. Default all. Accepted: comma-separated subset of levenshtein, damerau_levenshtein, normalised_similarity, jaro, jaro_winkler, lcs_length, dice, phonetic, soundex, metaphone, nysiis."
    }
  }
}
string_similarity annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true
}
url_parse — URL parser: parse, canonicalize and extract the registrable domain (eTLD+1)
Advertised by the server during the last successful anonymous check.
Advertised read-only

URL parser: parse and canonicalise a URL, and extract its registrable domain using the Public Suffix List — the part an agent needs to decide whether two URLs belong to the same owner. Returns scheme, host, port, path, decoded query parameters and fragment, the public suffix, the registrable domain (eTLD+1), the subdomain, whether the suffix is ICANN or private, plus a canonical form with default port, dot-segments and percent-encoding normalised. unicode_host uses WHATWG/UTS 46 (non-strict). Price: $0.05 per successful call, paid over x402 (USDC on Base).

url_parse input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "url"
  ],
  "properties": {
    "url": {
      "type": "string",
      "description": "Absolute URL, or a bare hostname (https:// assumed). Accepted: an absolute URL, or a hostname."
    },
    "base": {
      "type": "string",
      "description": "Base URL to resolve url against as a relative reference. Accepted: an absolute URL."
    }
  }
}
url_parse annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true
}
punycode_convert — Punycode converter: IDN domain to ASCII and back, with IDNA2008 label validation
Advertised by the server during the last successful anonymous check.
Advertised read-only

Punycode converter: convert internationalised domain names between Unicode and ASCII punycode in either direction, label by label, and validate each label against IDNA2008: length, leading and trailing hyphens, the hyphen-hyphen rule at positions 3 and 4, disallowed code points and bidirectional rules. Returns both forms, the per-label breakdown and the first rule violated. Strict mode is IDNA2008 (UTS 46 non-transitional); it may reject names /v1/code/url displays. Price: $0.05 per successful call, paid over x402 (USDC on Base).

punycode_convert input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "domain"
  ],
  "properties": {
    "to": {
      "enum": [
        "ascii",
        "unicode",
        "both"
      ],
      "type": "string",
      "description": "ascii, unicode or both (default). Validated only: the response always carries both forms. Accepted: ascii, unicode, both."
    },
    "domain": {
      "type": "string",
      "description": "Domain name in Unicode or punycode form. Accepted: at most 512 characters."
    },
    "strict": {
      "enum": [
        "true",
        "false"
      ],
      "type": "string",
      "description": "true (default) applies IDNA2008 strictly; false uses UTS 46 transitional (IDNA2003-compatible) processing, which maps e.g. ß to ss; current browsers and /v1/code/url use non-transitional processing, so its output can differ from them. Accepted: true or false."
    }
  }
}
punycode_convert annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true
}
semver_compare — Semver parser: parse and compare versions, check range satisfaction
Advertised by the server during the last successful anonymous check.
Advertised read-only

Semver parser and comparator: parse a semantic version into major, minor, patch, prerelease and build parts; compare two versions by precedence including prerelease ordering; or test whether a version satisfies a range expression using caret, tilde, hyphen, x-ranges and comparator sets. Returns the parsed structure, the comparison result and the reason a range did not match. Price: $0.05 per successful call, paid over x402 (USDC on Base).

semver_compare input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "properties": {
    "a": {
      "type": "string",
      "description": "First version for op=compare. Accepted: at most 256 characters."
    },
    "b": {
      "type": "string",
      "description": "Second version for op=compare. Accepted: at most 256 characters."
    },
    "op": {
      "enum": [
        "parse",
        "compare",
        "satisfies",
        "sort"
      ],
      "type": "string",
      "description": "parse (default), compare, satisfies or sort. Accepted: parse, compare, satisfies, sort."
    },
    "range": {
      "type": "string",
      "description": "Range expression for op=satisfies, e.g. ^1.2.0. Accepted: at most 256 characters."
    },
    "version": {
      "type": "string",
      "description": "Version to parse (op=parse) or test (op=satisfies). Accepted: at most 256 characters."
    },
    "versions": {
      "type": "string",
      "description": "Comma-separated versions for op=sort, at most 100. Accepted: at most 100 versions."
    }
  }
}
semver_compare annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true
}
hash_generate — Hash generator: SHA-256, SHA-512, SHA-3, Keccak-256, BLAKE2 and HMAC digests
Advertised by the server during the last successful anonymous check.
Advertised read-only

Hash generator: compute a cryptographic digest of supplied data: SHA-256, SHA-384, SHA-512, SHA-1, SHA3-256, SHA3-512, Keccak-256, BLAKE2b-256 and BLAKE2b-512, plus HMAC with any of them. Input is UTF-8 text, base64 or hex bytes; output is hex, base64, base64url or base32. Returns the digest, the byte length of the input, and the exact algorithm identifier used. Price: $0.05 per successful call, paid over x402 (USDC on Base).

hash_generate input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "algo",
    "data"
  ],
  "properties": {
    "out": {
      "enum": [
        "hex",
        "base64",
        "base64url",
        "base32"
      ],
      "type": "string",
      "description": "Digest output encoding: hex (default), base64, base64url or base32. Accepted: hex, base64, base64url, base32."
    },
    "algo": {
      "enum": [
        "sha256",
        "sha384",
        "sha512",
        "sha1",
        "sha3-256",
        "sha3-512",
        "keccak256",
        "blake2b-256",
        "blake2b-512"
      ],
      "type": "string",
      "description": "Digest algorithm. Accepted: sha256, sha384, sha512, sha1, sha3-256, sha3-512, keccak256, blake2b-256, blake2b-512."
    },
    "data": {
      "type": "string",
      "description": "Input data, interpreted per encoding. At most 8192 characters. An empty value hashes the empty string. Accepted: at most 8192 characters."
    },
    "encoding": {
      "enum": [
        "utf8",
        "base64",
        "base64url",
        "hex"
      ],
      "type": "string",
      "description": "Encoding of data: utf8 (default), base64, base64url or hex. Accepted: utf8, base64, base64url, hex."
    },
    "hmac_key": {
      "type": "string",
      "description": "If present, computes HMAC with this key. Accepted: at most 512 characters."
    },
    "hmac_key_encoding": {
      "enum": [
        "utf8",
        "base64",
        "base64url",
        "hex"
      ],
      "type": "string",
      "description": "Encoding of hmac_key, as encoding. Accepted: utf8, base64, base64url, hex."
    }
  }
}
hash_generate annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true
}
jwt_decode — JWT decoder: header, claims and expiry state (no signature verification)
Advertised by the server during the last successful anonymous check.
Advertised read-only

JWT decoder: decode a JSON Web Token without verifying it: returns the header, the claims, the signature length and algorithm, and a computed view of the time claims — whether exp has passed, whether nbf is in the future, and the remaining lifetime in seconds against a supplied or current instant. Reports structural problems such as a missing part, invalid base64url or an alg of none. It does not and cannot verify the signature; do not use it to decide trust. Price: $0.05 per successful call, paid over x402 (USDC on Base).

jwt_decode input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "token"
  ],
  "properties": {
    "at": {
      "type": "string",
      "description": "Instant to evaluate exp/nbf against: RFC 3339 or epoch seconds. Default now. Accepted: RFC 3339 timestamp or integer epoch."
    },
    "token": {
      "type": "string",
      "description": "The JWT to decode (not verified). At most 8192 characters. Accepted: at most 8192 characters."
    }
  }
}
jwt_decode annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true
}
geohash_encode_decode — Geohash encoder and decoder with neighbour cells
Advertised by the server during the last successful anonymous check.
Advertised read-only

Geohash encoder and decoder: encode a WGS-84 latitude and longitude to a geohash at a chosen precision, or decode a geohash back to its bounding box, centre point and error bounds in metres. Encoding also returns the eight neighbouring cells, which is what a caller needs to do proximity search over a geohash-indexed store without a spatial database. Price: $0.05 per successful call, paid over x402 (USDC on Base).

geohash_encode_decode input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "properties": {
    "op": {
      "enum": [
        "encode",
        "decode"
      ],
      "type": "string",
      "description": "encode (default): lat/lon to geohash. decode: geohash to bounding box. Accepted: encode, decode."
    },
    "lat": {
      "type": "string",
      "description": "WGS-84 latitude, -90 to 90. Required when op=encode. Accepted: a number between -90 and 90."
    },
    "lon": {
      "type": "string",
      "description": "WGS-84 longitude, -180 to 180. Required when op=encode. Accepted: a number between -180 and 180."
    },
    "geohash": {
      "type": "string",
      "description": "Geohash to decode, 1-12 characters. Required when op=decode. Accepted: base32 geohash alphabet, excluding a, i, l and o."
    },
    "precision": {
      "type": "string",
      "description": "Geohash length 1-12, default 9 (about 4.8 m). Accepted: integer 1-12."
    }
  }
}
geohash_encode_decode annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true
}
plus_code_encode_decode — Plus code (Open Location Code) encoder and decoder
Advertised by the server during the last successful anonymous check.
Advertised read-only

Plus code (Open Location Code) encoder and decoder: encode coordinates as a plus code at a chosen length, or decode a full code back to its bounding box and centre. Also shortens a full code against a reference coordinate and recovers a shortened code given a reference, which is how plus codes are normally exchanged in text. Returns code length, precision in metres and validity. Price: $0.05 per successful call, paid over x402 (USDC on Base).

plus_code_encode_decode input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "properties": {
    "op": {
      "enum": [
        "encode",
        "decode",
        "shorten",
        "recover"
      ],
      "type": "string",
      "description": "encode (default), decode, shorten or recover. Accepted: encode, decode, shorten, recover."
    },
    "lat": {
      "type": "string",
      "description": "Latitude for op=encode. Accepted: a number between -90 and 90."
    },
    "lon": {
      "type": "string",
      "description": "Longitude for op=encode. Accepted: a number between -180 and 180."
    },
    "code": {
      "type": "string",
      "description": "Plus code for decode, shorten or recover. Accepted: at most 20 characters."
    },
    "length": {
      "type": "string",
      "description": "Integer code length for op=encode: one of 2,4,6,8,10 (default),11,12,13,14,15. Other integers in 2-15 are 400 UNSUPPORTED_VALUE. Accepted: one of 2,4,6,8,10,11,12,13,14,15."
    },
    "ref_lat": {
      "type": "string",
      "description": "Reference latitude for op=shorten/recover. Accepted: a number between -90 and 90."
    },
    "ref_lon": {
      "type": "string",
      "description": "Reference longitude for op=shorten/recover. Accepted: a number between -180 and 180."
    }
  }
}
plus_code_encode_decode annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true
}
point_in_polygon — Point in polygon check, plus bounding box, centroid and area for GeoJSON
Advertised by the server during the last successful anonymous check.
Advertised read-only

Point in polygon check and GeoJSON geometry: point-in-polygon with correct hole handling, bounding box, centroid, signed area in square metres, perimeter length, and ring winding order for a geometry supplied in the request. Accepts Polygon and MultiPolygon, and a GeoJSON Feature wrapping either. Area and length are geodesic on the WGS-84 ellipsoid, correct at any latitude; containment is planar in lon/lat. Price: $0.05 per successful call, paid over x402 (USDC on Base).

point_in_polygon input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "geometry"
  ],
  "properties": {
    "lat": {
      "type": "string",
      "description": "Point latitude; with lon, runs the containment test. Accepted: a number between -90 and 90."
    },
    "lon": {
      "type": "string",
      "description": "Point longitude; with lat, runs the containment test. Accepted: a number between -180 and 180."
    },
    "ops": {
      "type": "string",
      "description": "Comma-separated subset of contains,bbox,centroid,area,perimeter,winding. Default all. Accepted: comma-separated subset of contains, bbox, centroid, area, perimeter, winding."
    },
    "geometry": {
      "type": "string",
      "description": "URL-encoded GeoJSON Polygon, MultiPolygon or a Feature wrapping one. At most 3072 characters and 2000 coordinate pairs. Accepted: valid GeoJSON."
    }
  }
}
point_in_polygon annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true
}
geo_distance — Distance calculator: geodesic distance, bearing and destination point on WGS-84
Advertised by the server during the last successful anonymous check.
Advertised read-only

Distance calculator: distance and direction between WGS-84 coordinates: geodesic distance by Vincenty with a haversine fallback, initial and final bearing, the midpoint, and the destination point reached from a start point on a given bearing and distance. Also computes the cumulative length of a supplied coordinate path. Results in metres, kilometres, nautical miles and miles. Price: $0.05 per successful call, paid over x402 (USDC on Base).

geo_distance input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "properties": {
    "op": {
      "enum": [
        "distance",
        "destination",
        "midpoint",
        "path"
      ],
      "type": "string",
      "description": "distance (default), destination, midpoint or path. Accepted: distance, destination, midpoint, path."
    },
    "lat1": {
      "type": "string",
      "description": "Start latitude. Accepted: a number between -90 and 90."
    },
    "lat2": {
      "type": "string",
      "description": "End latitude. Accepted: a number between -90 and 90."
    },
    "lon1": {
      "type": "string",
      "description": "Start longitude. Accepted: a number between -180 and 180."
    },
    "lon2": {
      "type": "string",
      "description": "End longitude. Accepted: a number between -180 and 180."
    },
    "path": {
      "type": "string",
      "description": "Comma-separated lat,lon pairs for op=path, at most 200 points. Accepted: comma-separated lat,lon pairs, at most 200 points."
    },
    "method": {
      "enum": [
        "vincenty",
        "haversine"
      ],
      "type": "string",
      "description": "vincenty (default, WGS-84) or haversine. Accepted: vincenty, haversine."
    },
    "bearing": {
      "type": "string",
      "description": "Initial bearing in degrees for op=destination. Accepted: number 0-360."
    },
    "distance_m": {
      "type": "string",
      "description": "Distance in metres for op=destination, 0 to 1e9 (about 25 Earth circumferences); larger values are 400 INVALID_PARAM. Accepted: a number between 0 and 1e9 (metres)."
    }
  }
}
geo_distance annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true
}
crypto_address_validate — Crypto address validator: detect the blockchain and verify the checksum (EVM, Bitcoin, Solana and more)
Advertised by the server during the last successful anonymous check.
Advertised read-only

Crypto address validator: identify which blockchain an address belongs to and validate its encoding: EVM EIP-55 checksum, Bitcoin base58check and bech32/bech32m with witness version, Solana base58 and on-curve check, Cosmos bech32 with its HRP, Tron, XRP, Litecoin, Dogecoin, Cardano, Polkadot SS58 and Algorand. Returns every chain the address is valid for (ambiguous when several match), the checksummed form for EVM addresses, and the reason a check failed, including unrecognised_format. Price: $0.05 per successful call, paid over x402 (USDC on Base).

crypto_address_validate input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "address"
  ],
  "properties": {
    "expect": {
      "enum": [
        "evm",
        "bitcoin",
        "solana",
        "cosmos",
        "tron",
        "xrp",
        "cardano",
        "polkadot",
        "algorand",
        "litecoin",
        "dogecoin"
      ],
      "type": "string",
      "description": "Restrict the check to one chain id. Accepted: evm, bitcoin, solana, cosmos, tron, xrp, cardano, polkadot, algorand, litecoin, dogecoin."
    },
    "address": {
      "type": "string",
      "description": "Address to identify and validate. Accepted: at most 128 characters."
    },
    "chain_id": {
      "type": "string",
      "description": "EVM chain id; enables EIP-1191 chain-salted checksum validation. Accepted: a positive integer chain id."
    }
  }
}
crypto_address_validate annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true
}
solidity_function_selector — Solidity function selector: Keccak-256, 4-byte selector and event topic from a signature
Advertised by the server during the last successful anonymous check.
Advertised read-only

Solidity function selector and event topic: compute the Keccak-256 hash of a function or event signature and derive the 4-byte selector and the 32-byte topic. Normalises the signature first — strips parameter names, expands uint to uint256 and the other aliases, flattens tuples — so a signature copied from source code produces the same selector as the canonical form. Also hashes arbitrary text or hex bytes with Keccak-256. Price: $0.05 per successful call, paid over x402 (USDC on Base).

solidity_function_selector input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "properties": {
    "data": {
      "type": "string",
      "description": "Alternative to signature: raw data to Keccak-256 hash. Accepted: at most 8192 characters."
    },
    "kind": {
      "enum": [
        "function",
        "event",
        "error"
      ],
      "type": "string",
      "description": "function (default), event or error. Accepted: function, event, error."
    },
    "encoding": {
      "enum": [
        "utf8",
        "hex"
      ],
      "type": "string",
      "description": "Encoding of data: utf8 (default) or hex. Accepted: utf8, hex."
    },
    "signature": {
      "type": "string",
      "description": "Solidity function, event or error signature, e.g. transfer(address to, uint amount). Accepted: at most 1024 characters."
    }
  }
}
solidity_function_selector annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true
}
nuts_region_lookup — NUTS region lookup: EU statistical region codes, names and hierarchy
Advertised by the server during the last successful anonymous check.
Advertised read-only

NUTS region lookup (EU statistical regions): resolve a NUTS code to its name, country and level, walk up to its parents or down to its children, or search regions by name. Covers all four levels (country, major region, basic region, small region) for the 27 member states and 12 further reporting countries, from the NUTS 2024 classification. Returns the Latin-script and local-language names plus the urbanisation, coastal and mountain typologies. Price: $0.05 per successful call, paid over x402 (USDC on Base).

nuts_region_lookup input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "properties": {
    "code": {
      "type": "string",
      "description": "NUTS code, 2-5 characters, case-insensitive (level-3 codes may contain letters, e.g. NL32B). A GR or GB prefix is accepted for EL or UK. Accepted: 2 to 5 characters matching ^[A-Z]{2}[0-9A-Z]{0,3}$."
    },
    "name": {
      "type": "string",
      "description": "Substring search on region names, case- and accent-insensitive. Up to 25 matches. Accepted: at most 128 characters."
    },
    "level": {
      "type": "string",
      "description": "Restrict a name search to one level, 0-3. Accepted: integer 0-3."
    },
    "country": {
      "type": "string",
      "description": "ISO 3166-1 alpha-2 country filter (UK/GB and EL/GR both accepted). Accepted: an ISO 3166-1 alpha-2 code."
    },
    "include": {
      "type": "string",
      "description": "Comma-separated: parents, children, typology. Default parents,typology. Accepted: comma-separated subset of parents, children, typology."
    }
  }
}
nuts_region_lookup annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true
}
airport_lookup — Airport lookup by IATA or ICAO code: name, coordinates, elevation, time zone; nearest airports
Advertised by the server during the last successful anonymous check.
Advertised read-only

Airport lookup by IATA or ICAO code: get the airport's name, city, country, ISO 3166-2 region code, WGS-84 coordinates, elevation and IANA time zone, or find the nearest airports to a coordinate within a radius. Covers every airport worldwide that holds a three-letter IATA code and scheduled service. Returns the code type that matched and the distance in kilometres for proximity results. Price: $0.05 per successful call, paid over x402 (USDC on Base).

airport_lookup input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "properties": {
    "code": {
      "type": "string",
      "description": "3-letter IATA or 4-letter ICAO code, case-insensitive. Accepted: a 3-letter IATA or 4-letter ICAO code."
    },
    "near": {
      "type": "string",
      "description": "lat,lon to search around. Accepted: lat,lon."
    },
    "limit": {
      "type": "string",
      "description": "Maximum results 1-25, default 5. Only with near. Accepted: integer 1-25."
    },
    "country": {
      "type": "string",
      "description": "ISO 3166-1 alpha-2 filter. Accepted: an ISO 3166-1 alpha-2 code."
    },
    "radius_km": {
      "type": "string",
      "description": "Search radius in km, 1-1000, default 100. Only with near. Accepted: number 1-1000."
    }
  }
}
airport_lookup annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true
}
currency_lookup — Currency lookup: ISO 4217 codes, names, minor units and cash rounding
Advertised by the server during the last successful anonymous check.
Advertised read-only

Currency lookup by ISO 4217 alphabetic or numeric code: the official English name, minor-unit exponent, fund flag, the smallest cash denomination where it differs from the minor unit, the territories that use it, and historic codes on request. Returns the correct rounding increment for cash amounts, which is what a caller needs to render or settle a price. This route returns currency facts only and never an exchange rate. Price: $0.05 per successful call, paid over x402 (USDC on Base).

currency_lookup input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "properties": {
    "code": {
      "type": "string",
      "description": "ISO 4217 alpha-3 or 3-digit numeric code. Accepted: a 3-letter alphabetic or 3-digit numeric ISO 4217 code."
    },
    "country": {
      "type": "string",
      "description": "ISO 3166-1 alpha-2; returns the currencies in use there. Accepted: an ISO 3166-1 alpha-2 code."
    },
    "include": {
      "type": "string",
      "description": "Comma-separated: territories, historic. Default none. Accepted: comma-separated subset of territories, historic."
    }
  }
}
currency_lookup annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true
}
country_lookup — Country lookup: ISO 3166 codes, currency, TLD, UN region and ISO 3166-2 subdivisions
Advertised by the server during the last successful anonymous check.
Advertised read-only

Country lookup: find a country or territory by ISO 3166-1 alpha-2, alpha-3 or numeric code, or by name, and get the other codes, the official and common English names, the UN M49 region and sub-region, the currencies in use, the country-code TLD, and optionally the full ISO 3166-2 subdivision list with each subdivision's type. Also resolves an ISO 3166-2 subdivision code such as NL-NH directly. Names are matched case- and accent-insensitively. Price: $0.05 per successful call, paid over x402 (USDC on Base).

country_lookup input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "properties": {
    "code": {
      "type": "string",
      "description": "ISO 3166-1 alpha-2, alpha-3 or numeric code, or an ISO 3166-2 subdivision code such as NL-NH. Accepted: ISO 3166-1 alpha-2/alpha-3/numeric, or an ISO 3166-2 subdivision code."
    },
    "name": {
      "type": "string",
      "description": "Substring search on country names, case- and accent-insensitive. Accepted: at most 128 characters."
    },
    "include": {
      "type": "string",
      "description": "Comma-separated: subdivisions, m49, currency, tld. Default m49,currency,tld. Accepted: comma-separated subset of subdivisions, m49, currency, tld."
    }
  }
}
country_lookup annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true
}
base_convert — Base converter: integers between number bases 2 to 36 (hex, binary, octal)
Advertised by the server during the last successful anonymous check.
Advertised read-only

Base converter: convert an integer between any two numeric bases from 2 to 36 (hex, binary, octal and more), with arbitrary precision so values far beyond 2^53 are exact. Accepts an optional sign and common prefixes (0x, 0b, 0o), validates every digit against the source base, and returns the value in the target base, in decimal, and as its bit length and digit count. Price: $0.05 per successful call, paid over x402 (USDC on Base).

base_convert input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "value"
  ],
  "properties": {
    "to": {
      "type": "string",
      "description": "Target base 2-36, default 10. Accepted: integer 2-36."
    },
    "case": {
      "enum": [
        "lower",
        "upper"
      ],
      "type": "string",
      "description": "Digit case for bases above 10: lower (default) or upper. Accepted: lower, upper."
    },
    "from": {
      "type": "string",
      "description": "Source base 2-36, or auto (default) to read a 0x/0b/0o prefix. Accepted: integer 2-36, or 'auto'."
    },
    "value": {
      "type": "string",
      "description": "Integer to convert; optional sign and 0x/0b/0o prefix. Accepted: at most 1024 characters."
    },
    "prefix": {
      "enum": [
        "true",
        "false"
      ],
      "type": "string",
      "description": "Emit 0x/0b/0o where conventional. Default false. Accepted: true or false."
    }
  }
}
base_convert annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true
}
number_to_words — Number to words in 12 languages, with ordinal and currency forms
Advertised by the server during the last successful anonymous check.
Advertised read-only

Number to words: spell a number out in English, Dutch, German, French, Spanish, Italian, Portuguese, Polish, Russian, Turkish, Swedish or Japanese, in cardinal, ordinal or currency form. Currency form agrees the number with the currency noun and gives real minor-unit names for 19 currencies (EUR, USD, GBP, CHF, SEK, NOK, DKK, PLN, RUB, TRY, CNY, INR, BRL, MXN, CAD, AUD, NZD, CZK, HUF); any other ISO 4217 code uses a fraction such as 56/100. Values up to 10^15. Price: $0.05 per successful call, paid over x402 (USDC on Base).

number_to_words input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "value"
  ],
  "properties": {
    "case": {
      "enum": [
        "lower",
        "sentence",
        "title"
      ],
      "type": "string",
      "description": "lower (default), sentence or title. Accepted: lower, sentence, title."
    },
    "form": {
      "enum": [
        "cardinal",
        "ordinal",
        "currency",
        "year"
      ],
      "type": "string",
      "description": "cardinal (default), ordinal, currency or year. Accepted: cardinal, ordinal, currency, year."
    },
    "lang": {
      "enum": [
        "en",
        "nl",
        "de",
        "fr",
        "es",
        "it",
        "pt",
        "pl",
        "ru",
        "tr",
        "sv",
        "ja"
      ],
      "type": "string",
      "description": "Language, ISO 639-1. Default en. Accepted: en, nl, de, fr, es, it, pt, pl, ru, tr, sv, ja."
    },
    "value": {
      "type": "string",
      "description": "Integer or decimal number, absolute value below 1e15, e.g. 1234 or 1234.56. Accepted: an integer or decimal number, absolute value below 1e15, e.g. 1234."
    },
    "currency": {
      "type": "string",
      "description": "ISO 4217 code. Required when form=currency, rejected otherwise. Accepted: an ISO 4217 alpha-3 code."
    }
  }
}
number_to_words annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true
}
statistics_calculate — Statistics calculator: mean, median, standard deviation, quartiles and percentiles
Advertised by the server during the last successful anonymous check.
Advertised read-only

Statistics calculator for a numeric array in one call: count, sum, mean, median, mode, variance and standard deviation honouring ddof (default 1, the sample form; 0 gives the population form) plus always-population *_population fields, min, max, range, the quartiles and interquartile range, skewness, kurtosis, and any requested percentiles. Percentiles use a named interpolation method so the result is reproducible rather than implementation-defined. Price: $0.05 per successful call, paid over x402 (USDC on Base).

statistics_calculate input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "values"
  ],
  "properties": {
    "ddof": {
      "type": "string",
      "description": "Delta degrees of freedom for variance/stdev: 1 (default, sample, n-1) or 0 (population, n). The *_population fields are always population. Accepted: integer 0-1."
    },
    "method": {
      "enum": [
        "linear",
        "nearest",
        "lower",
        "higher",
        "midpoint"
      ],
      "type": "string",
      "description": "Percentile interpolation (NumPy/R names): linear (default), nearest, lower, higher, midpoint. Accepted: linear, nearest, lower, higher, midpoint."
    },
    "values": {
      "type": "string",
      "description": "Comma-separated finite numbers, at most 500 values. Accepted: comma-separated finite numbers."
    },
    "percentiles": {
      "type": "string",
      "description": "Comma-separated percentiles 0-100, at most 20. Default 25,50,75. Accepted: numbers between 0 and 100."
    }
  }
}
statistics_calculate annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true
}
money_split — Money split: allocate an amount into shares with no rounding loss
Advertised by the server during the last successful anonymous check.
Advertised read-only

Money split: split a money amount into shares without losing or inventing a cent. Divide evenly into N parts, or by a list of ratios, and the remainder is distributed one minor unit at a time by a named, deterministic rule — largest-remainder, first-wins or last-wins — so the parts always sum exactly to the original. Uses the ISO 4217 minor-unit exponent of the currency, so zero- and three-decimal currencies work (JPY 0, KWD 3); metals and XXX are rejected. Price: $0.05 per successful call, paid over x402 (USDC on Base).

money_split input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "amount",
    "currency"
  ],
  "properties": {
    "rule": {
      "enum": [
        "largest-remainder",
        "first",
        "last",
        "round-robin"
      ],
      "type": "string",
      "description": "Remainder rule: largest-remainder (default), first, last or round-robin. Accepted: largest-remainder, first, last, round-robin."
    },
    "parts": {
      "type": "string",
      "description": "Number of equal parts, 1-1000. One of parts or ratios. Accepted: integer 1-1000."
    },
    "amount": {
      "type": "string",
      "description": "Decimal amount, absolute value below 1e12. Accepted: a decimal amount with absolute value below 1e12."
    },
    "ratios": {
      "type": "string",
      "description": "Comma-separated non-negative ratios, at most 1000, each with at most 15 integer digits and 15 decimal places. One of parts or ratios. Accepted: comma-separated non-negative numbers, at most 1000."
    },
    "currency": {
      "type": "string",
      "description": "ISO 4217 alpha-3 code. Accepted: an ISO 4217 alpha-3 code."
    }
  }
}
money_split annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true
}

Prompts

Not advertised

No prompt definitions available.

Resources

Not advertised

No resource definitions available.

90-day uptime

A lightweight connection check about every six hours, sampled on hosts with many listings. It shows the server answered, not that its tools work.

Too few checks for a percentage yet (1 of 1 answered).

  1. 2026-11-06: 1 of 1 checks answered

30-day availability

Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.

Successful checks
1 of 1 (100%)
Average latency
723 ms
95th percentile latency
723 ms

Maintenance history

Public check and source-refresh events. Editorial and ownership records remain private.

  • · probe · passed · 723 ms · metadata changed · 33 tool(s)

Connect from your client

Each snippet registers the same endpoint; pick the client you use.

This server is operated by the named third party. Listing and endpoint checks are not an endorsement or a security audit. Review the operator's permissions, terms, and data handling before connecting. How listings are checked and corrected.

Claude Code

Run this once in a terminal. It registers the remote server. Use --scope project to write .mcp.json for the repo.
Claude Code configuration
claude mcp add --transport http duo-data-utilities-mcp https://api.duoleads.com/mcp

Codex

Run this once. Codex stores MCP servers in ~/.codex/config.toml (or .codex/config.toml in a trusted project).
Codex configuration
codex mcp add duo-data-utilities-mcp --url https://api.duoleads.com/mcp

Cursor

Merge this server into .cursor/mcp.json in your project, then enable duo-data-utilities-mcp in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "duo-data-utilities-mcp": {
      "url": "https://api.duoleads.com/mcp"
    }
  }
}

Cline

Merge this into cline_mcp_settings.json (Cline → MCP Servers → Configure).
Cline configuration
{
  "mcpServers": {
    "duo-data-utilities-mcp": {
      "type": "streamableHttp",
      "url": "https://api.duoleads.com/mcp",
      "disabled": false
    }
  }
}

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start duo-data-utilities-mcp and inspect its tools.
VS Code configuration
{
  "servers": {
    "duo-data-utilities-mcp": {
      "type": "http",
      "url": "https://api.duoleads.com/mcp"
    }
  }
}

Gemini CLI

Run this once. It writes .gemini/settings.json in the current project; pass --scope user for ~/.gemini/settings.json.
Gemini CLI configuration
gemini mcp add --transport http duo-data-utilities-mcp https://api.duoleads.com/mcp

Claude Desktop

Open Claude Settings > Connectors > Add custom connector, enter this server URL and enable it for the conversation. This is a manual remote-connector handoff, not a desktop JSON configuration.
Claude Desktop configuration
https://api.duoleads.com/mcp

Windsurf

Merge this into ~/.codeium/windsurf/mcp_config.json, then refresh MCP in Cascade. Windsurf remote servers use serverUrl, not url.
Windsurf configuration
{
  "mcpServers": {
    "duo-data-utilities-mcp": {
      "serverUrl": "https://api.duoleads.com/mcp"
    }
  }
}

Let your agent find its tools

Find servers like Duo Data Utilities MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.

Do you run Duo Data Utilities MCP?

Prove ownership with a DNS record, a well-known file, or your Official MCP Registry entry, and your edits publish immediately. Proofs are re-checked weekly; admins can still hide or remove a listing.

Claim this listing