MCP server for AI agents — real-time FX rates, crypto quotes, and cross-border payment routing
fx-mcp has 10 well-named tools with clear descriptions (avg 85 chars, all >20 chars). All tools use Zod schemas with typed parameters and descriptions. However, output schemas are not formally documented, responses are text-only (no structured JSON fields returned). Error handling is minimal (basic try-catch with error messages). No parameter constraints (enums, ranges) despite many accepting free-form strings (currency codes, token symbols). Missing idempotency hints, permission gates, and audit logging. Tools are read-only and well-composed, but lack production-grade robustness.
Compare total cost of sending money via Wise, bank transfer, or crypto
Get all FX rates for a base currency (166 currencies via Open Exchange Rates)
Get a crypto swap quote for token pairs (uses CoinGecko spot prices)
Get current ECB Main Refinancing Rate
Get current Ethereum gas prices (slow, standard, fast)
Get current Crypto Fear & Greed Index
Get real-time FX rate from ECB and Wise for a currency pair
Output schemas not documented. Tools return text-only responses (no structured JSON fields). LLMs cannot extract typed data for downstream tool chaining or structured reasoning.
No input validation or enum constraints. Currency codes (from/to) and token symbols accept free-form strings. LLMs will hallucinate invalid codes (e.g. 'USDA' instead of 'USD'). No guidance on valid values.
Error handling is minimal. Catch blocks return raw error messages without recovery guidance. No categorization of retryable vs fatal errors. LLMs cannot determine next steps on failure.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 52 | 2026-07-28+ | v2 |
Get historical FX rates for a currency pair (up to 90 days)
Get current DeFi yields for stablecoins (USDC, USDT, DAI, EURC)
List all supported fiat currencies and crypto tokens
No pagination support. list_supported_pairs and get_all_fx_rates (166 currencies) return unbounded results. Large responses waste tokens and risk context window exhaustion.
No tool annotations (readOnlyHint, idempotentHint). All tools are read-only and safe to retry, but this is not declared. Clients cannot optimize caching or retry logic.