MCP server providing currency exchange rate data with support for latest rates, historical rates, and available currencies
Three tools are present with basic descriptions and visible schemas via FastMCP decorators. However, descriptions are generic and fall short of LLM-optimization standards (rubric baseline: 194 chars average, p90=392). Parameter descriptions are largely absent or minimal. Schemas are inferred from function signatures rather than explicitly documented. No parameter constraints (enums, ranges, patterns) are declared. Error handling is not visible in the source. Output structure is minimally documented ('returns dict with "currencies" or "data" key'). Tool names follow verb_noun pattern correctly, but parameter guidance is weak, agents will struggle to know valid currency codes, date formats, or whether symbols should be ISO codes. The composition is reasonable (three distinct, independent tools), but the definitions lack the rigor expected for A-grade tools.
Fetch the list of all supported currencies
Fetch historical exchange rates for a given date and optional currencies.
Fetch the latest exchange rates for a given base and optional target currencies.
Parameter descriptions are missing or insufficient. 'base' and 'symbols' parameters have minimal guidance. LLMs cannot infer that 'base' expects ISO 4217 currency codes (e.g. 'EUR', 'USD') or whether 'symbols' array expects the same format. No constraints (e.g. length, format, valid examples) are documented.
Output schema is not explicitly documented. Tools return {'currencies': <list>} and {'data': <dict>}, but the structure of the inner data is not described. LLMs cannot plan downstream operations or extract fields with confidence.
Date format for 'date' and 'end_date' parameters is not specified. No guidance on whether to use ISO 8601 ('2024-01-15'), locale-specific ('Jan 15, 2024'), or other formats. LLMs will guess and frequently produce invalid dates.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | D | 50 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 37 | - | v1 |
No error handling or recovery guidance is visible. If an invalid currency code is passed, what error is returned? Can the agent retry, or should it call get_available_currencies first? No recovery paths are documented.
Descriptions are below the rubric baseline of 194 chars and lack LLM-optimized structure (what, when, prerequisites). 'Fetch the latest exchange rates...' is functional but does not answer: When should this be called instead of get_historical_rates? What does the LLM need to know about rate freshness or availability?
No pagination or result limit is documented. If get_available_currencies returns hundreds of currencies, there is no indication of count, limit, or pagination support. Large unstructured responses waste tokens and invite context exhaustion.