Skip to main content
Glama
qinisolabs

localecheck

by qinisolabs

localecheck

Locale-correctness tools for AI agents. Agents are systematically wrong about everyday non-US data — they read 03/04 as March 4 in the UK, apply today's VAT rate to a historical invoice, format €1,234.50 for a German reader, and miss bank holidays in delivery dates. localecheck gives them verified answers and flags impossible inputs instead of guessing.

Coverage: UK + USA (v1), expanding. Free, no API key.

Packages

Package

Install

Use

TypeScript (primary)

packages/localecheck-ts

npx -y localecheck (live on npm)

MCP server and importable library

Python

packages/localecheck-python

from source (PyPI release coming soon)

MCP server, importable library, REST API

Both wrap the same authoritative libraries (libphonenumber, CLDR/Intl, date-holidays) and share the same hand-curated tax data.

Related MCP server: mcp-europe-business

What it does

parse_date · validate_phone · format_currency · tax_rate (VAT/sales-tax by date) · is_holiday / next_holiday · parse_address

Quick start (in an AI app)

{ "mcpServers": { "localecheck": { "command": "npx", "args": ["-y", "localecheck"] } } }

Then ask naturally — the agent picks the tool: "A UK invoice dated 1 June 2009 — what VAT rate?"15%.

Repo map

  • packages/localecheck-ts — primary TypeScript package (MCP + library)

  • packages/localecheck-python — Python package + FastAPI REST API

  • eval/ — benchmark harness: how often raw LLMs get this wrong

  • benchmark.html — shareable results page · BUSINESS_MODEL.md — strategy · PUBLISH.md — release steps · LOCAL_TEST.md — test before publishing

Status & caveats

UK VAT history is reliable for the modern era (standard rate). US state sales-tax values are 2025 state base rates (local taxes add on top) — verify against an authoritative feed before live invoicing. Addresses parse + extract a valid postcode/ZIP but don't verify deliverability.

Code: Apache-2.0. Curated tax data: see BUSINESS_MODEL.md.

Available Tools

7 tools
format_currencyA

Format a money amount the way a reader in a given locale expects (symbol position, decimal/thousands separators). USE THIS whenever you show a price/total to a user or put one in an email, invoice, or report. e.g. 1234.5 GBP en-GB -> '£1,234.50'.

ParametersJSON Schema
NameRequiredDescriptionDefault
amountYes
currencyNoGBP
localeNo

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so the description carries full burden. It explains that formatting respects locale for symbol position and separators, with an example. However, it does not disclose edge cases like negative amounts or large numbers, or the exact return type (string implied). Adequate but not thorough.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences plus an example. No wasted words. Purpose and usage are front-loaded. Every sentence contributes meaningful guidance.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple 3-parameter tool with no output schema, the description is nearly complete. It covers purpose, usage guidance, behavioral details, and an example. Missing explicit return type but that is inferred from the example.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must add meaning. It explains how parameters (amount, currency, locale) affect output via the example and mention of locale rules. It adds value beyond the schema by illustrating behavior, though each parameter is not individually described.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool formats a money amount per locale expectations, with a specific verb ('format') and resource ('money amount'). The example and context distinguish it from sibling tools (holidays, address, date, tax, phone), which are unrelated.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says 'USE THIS whenever you show a price/total to a user or put one in an email, invoice, or report.' It defines when to use but does not mention alternatives or when not to use, though the context makes it clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

is_holidayA

Check whether a date (YYYY-MM-DD) is a public/bank holiday. USE THIS when computing business-day deadlines, delivery SLAs, or 'next working day'. GB defaults to England; pass subdiv 'SCT'/'WLS'/'NIR' or a US state code. Country is GB or US.

ParametersJSON Schema
NameRequiredDescriptionDefault
dateYes
countryNoGB
subdivNo

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It discloses that GB defaults to England and passes subdiv codes for UK nations or US states. However, it does not specify the return type (likely boolean) or behavior for invalid dates, unsupported countries, or error cases. This is adequate but lacks depth.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, front-loaded with the core function and format, followed by usage guidelines and parameter details. Every sentence adds value with no wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema and 3 parameters, the description covers usage context and parameter semantics well. It mentions subdivisions for GB and US but does not explicitly state that only GB and US are supported, nor does it describe the return value. This is still complete enough for a simple check tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has 0% description coverage, so the description compensates well. It explains the date format, country default (GB), and provides examples for subdiv (SCT, WLS, NIR, US state code). It adds meaning beyond the schema but could be more precise by noting that only GB and US are supported.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool checks if a date is a public/bank holiday, specifies the date format YYYY-MM-DD, and mentions use cases like business-day deadlines and delivery SLAs. It distinguishes from siblings like next_holiday by focusing on checking a specific date.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly says 'USE THIS when computing business-day deadlines, delivery SLAs, or next working day', providing clear context. It also gives examples of subdivisions (SCT, WLS, NIR, US state code) but does not explicitly mention when not to use it or directly name alternatives like next_holiday.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

next_holidayA

Find the next public/bank holiday on or after a date (default today). USE THIS to answer 'when is the next holiday' or find the next working day. Country is GB or US; subdiv narrows to a UK nation or US state.

ParametersJSON Schema
NameRequiredDescriptionDefault
countryNoGB
afterNo
subdivNo

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description carries full burden. It discloses the behavior of finding the next holiday on/after a date with default today, and mentions country/subdivision options. But it does not specify output format (e.g., what is returned) or potential side effects. This is adequate but lacks some behavioral context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences that front-load the purpose and use case, then provide parameter details. No redundant information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, so description should explain return value. It does not mention what the tool returns (e.g., date, name, object). Given the complexity (3 optional parameters) and sibling tools, this omission makes it less complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so description must compensate. It explains 'country is GB or US' and 'subdiv narrows to a UK nation or US state', adding meaning. However, the 'after' parameter is only implied via 'on or after a date (default today)' without specifying format or constraints, leaving some ambiguity.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states 'Find the next public/bank holiday on or after a date' with verb 'find' and resource 'next public/bank holiday'. It implies differentiation from sibling 'is_holiday' by specifying use for 'next holiday' vs checking a specific date.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states 'USE THIS to answer when is the next holiday or find the next working day', providing clear context. However, it does not explicitly state when not to use it or mention alternatives like 'is_holiday'.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

parse_addressA

Extract structured {country, postcode, city} from a free-text UK or US address. USE THIS when onboarding a user, running a KYC/fraud check, or storing an address, instead of splitting the string yourself. Returns a confidence flag.

ParametersJSON Schema
NameRequiredDescriptionDefault
inputYes

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description carries full burden. Mentions returns a confidence flag, but does not disclose behavior for non-UK/US addresses, error handling, or performance. Adequate but leaves room for improvement.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences: first states purpose, second gives use cases and output. No wasted words, front-loaded with key information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter tool with no output schema and no annotations, the description covers purpose, use cases, and output (confidence flag). Missing details on confidence flag semantics and error behavior, but overall sufficient for an AI agent to use correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description adds critical meaning: 'free-text UK or US address'. This compensates well for the bare schema, though could specify input length or encoding.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states the verb 'Extract' and resource 'structured {country, postcode, city} from a free-text UK or US address'. Distinguishes from siblings like parse_date, format_currency, etc., which are unrelated.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly tells when to use: 'when onboarding a user, running a KYC/fraud check, or storing an address'. Advises against manual splitting. Although no explicit alternatives, siblings are unrelated, so guidance is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

parse_dateA

Convert a human-written date into ISO 8601 (YYYY-MM-DD). USE THIS whenever you need to interpret a date a person typed — especially ambiguous numeric dates like 03/04/2025, which mean different things in the UK (day-first) vs US (month-first) — before storing, scheduling, or acting on it. Pass locale 'en-GB' or 'en-US'. Returns valid:false for impossible dates.

ParametersJSON Schema
NameRequiredDescriptionDefault
inputYes
localeNoen-GB

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the burden. It discloses that the tool returns 'valid:false for impossible dates,' but does not describe the full return format or behavior on success (e.g., whether it returns the parsed ISO string). This is a minor gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three sentences with no waste. The first sentence states the core purpose, the second gives usage guidance, and the third provides a behavioral detail. It is front-loaded and efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given two parameters, no output schema, and no annotations, the description is largely complete. It covers purpose, usage, and a return indicator. However, it does not explicitly state the output format on success (implied by the first sentence) or any prerequisites.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must add meaning. It explains the 'input' parameter as a human-written date and 'locale' as 'en-GB' or 'en-US', with an example of ambiguity. It adds value beyond the schema, though it could explicitly state the default locale and optionality.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's action: 'Convert a human-written date into ISO 8601 (YYYY-MM-DD).' It specifies the input and output format, and the purpose is distinct from sibling tools like format_currency or parse_address.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly advises when to use ('USE THIS whenever you need to interpret a date a person typed') and highlights ambiguity with numeric dates, including locale sensitivity. It does not explicitly exclude usage scenarios, but the guidance is clear for the primary use case.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

tax_rateA

Look up the correct consumption-tax rate. USE THIS before calculating VAT or sales tax on an invoice or quote — never recall the rate from memory, it is DATE-SENSITIVE. GB returns the UK standard VAT rate that applied on the given date (handles historical/temporary changes). US has no national VAT (returns 0); pass a state code like 'CA' for the state base sales-tax rate. Always pass the invoice date for GB.

ParametersJSON Schema
NameRequiredDescriptionDefault
countryNoGB
dateNo
stateNo

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Discloses that the tool is date-sensitive, handles historical/temporary changes, and explains US behavior (returns 0 without state code). With no annotations, the description effectively conveys key behavioral traits beyond the schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise (4 sentences) with no redundant information. It front-loads the primary purpose, then adds key details about date-sensitivity and US handling.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers usage for both GB and US, parameter guidance, and date-sensitive nature. However, it does not describe the output format (e.g., numeric rate, currency symbol), which could be inferred but is not explicit.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Despite 0% schema coverage, the description explains each parameter: country defaults to GB, date is the invoice date, state is for US. It provides context for when to use each, compensating for the lack of schema descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Look up the correct consumption-tax rate' and specifies it's for VAT/sales tax. It distinguishes from sibling tools (none cover tax rates) by providing precise use-case and geographic variations.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says 'USE THIS before calculating VAT or sales tax on an invoice or quote — never recall the rate from memory', giving clear when-to-use advice. It does not mention alternatives, but no sibling tool provides tax rates, so the guidance is sufficient.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

validate_phoneA

Validate a phone number and normalise it to E.164 (e.g. +442079460958). USE THIS before saving a phone number, dialling, or sending an SMS, instead of trusting raw input. Pass region 'GB' or 'US'. Returns valid:false if the number is not real for that region.

ParametersJSON Schema
NameRequiredDescriptionDefault
numberYes
regionNoGB

TDQS

A4.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description bears full burden. It discloses normalization to E.164 and returns valid:false for invalid numbers, but does not explicitly describe the return structure for valid numbers (e.g., whether it returns the normalized number or a full object). Lacks some completeness.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with immediate clarity: first sentence defines purpose, second gives usage and return info. No unnecessary words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple validation tool with no output schema, the description covers essential aspects: purpose, usage, parameters, and basic behavior. Slightly incomplete on return value details but generally adequate.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description adds meaning by specifying that 'number' is the raw input and 'region' should be 'GB' or 'US' with default 'GB'. Adds useful context beyond the schema alone.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool validates and normalizes phone numbers to E.164 format, with an example. It effectively distinguishes from siblings by being the only phone validation tool.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly advises using this tool before saving, dialling, or sending SMS, and instructs to pass region 'GB' or 'US'. Provides strong usage guidance without ambiguity.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 7 tool updatesv1.0.0
    • First observedformat_currency
    • First observedis_holiday
    • First observednext_holiday
    • First observedparse_address
    • First observedparse_date
    • First observedtax_rate
    • First observedvalidate_phone

TDQS

A4.3/5.0

Scored across 7 tools

Disambiguation5/5

Each tool targets a distinct locale-related function (currency, holiday, address, date, tax, phone) with no overlap.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern in snake_case, making the set predictable.

Tool Count5/5

Seven tools is well-scoped for a locale utility server, covering formatting, validation, and lookups without being excessive or too few.

Completeness4/5

Covers key locale operations (currency, dates, addresses, phones, holidays, taxes) but lacks timezone or unit conversion, which are minor gaps.

Maintenance

ActivityStale
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    Public holiday data for 30+ countries. Check holidays, working days, and full calendars via AI assistants like Claude and Cursor.
    MIT
  • F
    license
    A
    quality
    D
    maintenance
    European business compliance suite for AI agents — 28 tools covering tax ID validation (PT, ES, FR, DE, IT, UK, NL), IBAN verification, EU VAT rates, invoice requirements, e-invoicing rules, payment terms, labor calendar helpers, VAT breakdown calculations and invoice schema validation for 18+ European countries.
    28
    -
  • A
    license
    A
    quality
    D
    maintenance
    Verified validation of structured identifiers — IBAN, payment cards, ISBN-13 and VIN — for AI agents. Runs the real checksum algorithms (mod-97, Luhn, mod-10, ISO 3779) instead of letting the model guess, and returns structured results with clear errors.
    4
    19
    Apache 2.0
  • A
    license
    A
    quality
    C
    maintenance
    The deterministic fact-verification layer for AI agents. Validates the structured facts an agent emits — IBANs, payment cards, VAT and national tax IDs, crypto and bank addresses, domains, emails, phone numbers, securities and academic identifiers, plus dates, currencies and holidays — against checksums and curated authoritative data, not guesses.
    56
    1
    Apache 2.0