Number & currency formatting MCP. Keyless, offline: format a number as localized currency, a plain/grouped number, a percentage, or a compact form (1.2K / 3.4M), using the platform Intl.NumberFormat. No API, no key.
Two well-named tools with complete input schemas and clear descriptions. Both tools follow verb_noun naming (format_currency, format_number) and have descriptions in the 100-200 char range, which is appropriate. Input schemas are properly typed with required fields declared. However, output schemas are not documented, LLMs cannot predict what fields to expect from responses. Error handling returns a generic error object with a hint, but lacks structured guidance for recovery. No parameter enums despite constrained inputs (style, currency codes). Missing descriptions for optional parameters (locale defaults to 'en-US' but this is buried in the description text, not formalized). Tools are read-only and offline, which is good for security, but no explicit documentation of this constraint in the schema.
Format a number as localized currency (keyless, offline). E.g. amount 1234.5, currency "EUR", locale "de-DE" -> "1.234,50 €". `currency` is an ISO 4217 code.
Format a number with grouping, fixed decimals, as a percentage, or in compact notation (keyless, offline). style = "decimal" (default), "percent", or "compact".
Output schemas not documented. LLMs cannot predict response structure (fields, types, presence of 'error' vs 'formatted'). Both tools return objects with 'formatted' field on success and 'error'/'hint' on failure, but this is not declared in tool definitions.
Parameter 'style' in format_number accepts free-form strings ('decimal', 'percent', 'compact') but is not declared as an enum. LLMs may hallucinate invalid values like 'scientific' or 'exponential'. Should use enum constraint.
Parameter 'currency' in format_currency lacks enum constraint for ISO 4217 codes. Description mentions 'ISO 4217 code' but does not enumerate valid values. LLMs may pass invalid codes like 'USDA' or 'BITCOIN'.
Optional parameter 'locale' defaults to 'en-US' but this default is only mentioned in the description text, not formalized in the schema (no 'default' field). LLMs cannot reliably infer defaults from prose.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 60 | 2026-07-28+ | v2 |
Error handling returns a generic error object with a hint, but does not categorize errors as retryable, user-fixable, or fatal. LLMs cannot determine whether to retry, ask the user, or give up.