localecheck
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) |
| MCP server and importable library | |
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 APIeval/— benchmark harness: how often raw LLMs get this wrongbenchmark.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 toolsformat_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'.
| Name | Required | Description | Default |
|---|---|---|---|
| amount | Yes | ||
| currency | No | GBP | |
| locale | No |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| date | Yes | ||
| country | No | GB | |
| subdiv | No |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| country | No | GB | |
| after | No | ||
| subdiv | No |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| input | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| input | Yes | ||
| locale | No | en-GB |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| country | No | GB | |
| date | No | ||
| state | No |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| number | Yes | ||
| region | No | GB |
TDQS
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.
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.
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.
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.
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.
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.
7 tool updates
v1.0.0- First observed
format_currency - First observed
is_holiday - First observed
next_holiday - First observed
parse_address - First observed
parse_date - First observed
tax_rate - First observed
validate_phone
TDQS
Scored across 7 tools
Each tool targets a distinct locale-related function (currency, holiday, address, date, tax, phone) with no overlap.
All tool names follow a consistent verb_noun pattern in snake_case, making the set predictable.
Seven tools is well-scoped for a locale utility server, covering formatting, validation, and lookups without being excessive or too few.
Covers key locale operations (currency, dates, addresses, phones, holidays, taxes) but lacks timezone or unit conversion, which are minor gaps.
Maintenance
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
Address validation & geocoding for AI agents: 240+ countries, UK PAF, free US/CA enrichment
EU/UK VAT compliance for AI agents: number validation, rate lookups, reverse-charge checks.
Utility data for AI agents: IBAN, EU holidays, VAT rates, time zones, ECB FX. Pay per call.
Validate EU, UK, AU VAT numbers for AI agents. EU ViDA e-invoicing compliance.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenancePublic holiday data for 30+ countries. Check holidays, working days, and full calendars via AI assistants like Claude and Cursor.MIT
- FlicenseAqualityDmaintenanceEuropean 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-
- AlicenseAqualityDmaintenanceVerified 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.419Apache 2.0

Qinisoofficial
AlicenseAqualityCmaintenanceThe 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.561Apache 2.0