Frontier LLMs confidently produce plausible-but-wrong answers for everyday non-US data — dates, tax rates, currency, phone numbers, holidays, addresses. They rarely signal the error, so it surfaces downstream as a missed flight, a rejected invoice, or a failed KYC check. localecheck measures the gap and fills it.
Each category is scored against an authoritative source (libphonenumber, Unicode CLDR, python-holidays, and curated tax records). “Error” means the model disagreed with the verified answer.
| Category | What breaks | Error rate* | |
|---|---|---|---|
| Currency formatting | US-style format applied to other locales | ~40–65% | |
| Date parsing | Reads DD/MM as MM/DD; guesses impossible dates | ~30–45% | |
| VAT by date | Applies today’s rate to historical / temporary periods | ~25–40% | |
| Address parsing | Mis-splits non-US postcode/city ordering | ~25–35% | |
| Public holidays | Misses regional bank holidays; over-calls famous ones | ~10–20% | |
| Phone validation | Fails to reject invalid numbers | ~5–15% |
*Ranges are illustrative pending a real-model run. Phone is near-solved by existing libraries; tax-by-date and currency formatting are the highest-value gaps.
03/04 — user is in London (en-GB)2009-06-011234.5 EURThe benchmark is open source. Point it at any model and it regenerates a report:
pip install -r requirements.txt && python generate_dataset.py
export ANTHROPIC_API_KEY=… && python run_eval.py --provider anthropic
It writes a per-category error table and the full list of failures. Run it against each new model release to see whether the gap is closing or durable.
localecheck is an MCP server (and TypeScript library) that returns verified answers and flags impossible inputs instead of guessing. Add it to Claude Desktop, Cursor, or any MCP client with npx -y localecheck — it's live on npm and listed in the official MCP Registry.