MCP server for the FXMacroData API — macroeconomic indicators, release calendars, COT, commodities, and forex for AI agents.
FXMacroData server has 8 well-named tools with consistent verb_noun patterns (ping, data_catalogue, release_calendar, forex, indicator_query, market_sessions, cot_data, commodities). All tools have descriptions (avg ~120 chars, within 10-1024 range). However, input schemas are incomplete: most parameters lack explicit type definitions in the visible code (only inferred from function signatures). Parameter descriptions are present but minimal (10-30 chars). Output schemas are not documented. Error handling exists but is generic (JSON error wrapper without recovery guidance). No tool annotations (readOnlyHint, etc.). Composition is sound, each tool has one responsibility, and naming enables chaining (e.g., data_catalogue → indicator_query). Security: API key injected via environment variable (good), but no rate limiting or input validation visible.
Get commodity price time series. Supported indicators: gold, silver, platinum.
Get CFTC Commitment of Traders (COT) weekly positioning data for a currency's FX futures contract. Supported: AUD, CAD, CHF, EUR, GBP, JPY, NZD, USD.
List available macroeconomic indicators for a currency. Supported currencies include: AUD, BRL, CAD, CHF, CNY, DKK, EUR, GBP, JPY, NZD, PLN, SEK, SGD, USD.
Get FX spot rates for a currency pair with optional technical indicators. The indicators parameter accepts a comma-separated list of technical indicator slugs (e.g. 'sma_20,ema_50,rsi_14,bbands_20,atr_14,macd').
Get macroeconomic indicator time series for a currency. Returns announcement dates, values, and prior readings. Use data_catalogue to discover valid currency + indicator slugs.
Get the current FX market-session timetable and overlap windows, or request a snapshot for a specific UTC timestamp. Covers Sydney, Tokyo, London, and New York sessions.
Input schemas lack explicit JSON Schema type definitions. Parameters are inferred from Python function signatures (e.g., 'currency: str') but not formally declared in tool registration. This prevents clients from validating inputs before sending and forces LLMs to guess parameter types.
Output schemas are not documented. Tools return JSON strings (via json.dumps) but the structure of returned objects is not specified. LLMs cannot plan downstream calls or extract fields reliably without knowing the response schema.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 58 | 2026-07-28+ | v2 |
Verify that the FXMacroData API is reachable.
Get upcoming macroeconomic release dates for a currency, with optional indicator filter.
Error handling is generic. _handle_error() returns a JSON wrapper with 'error' and optional 'help' fields, but does not categorize errors as retryable, user-fixable, or fatal. LLMs cannot determine whether to retry, ask the user, or abort.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). All tools are read-only (correct), but this is not declared in the tool definition. Clients cannot infer safety properties without explicit annotations.
Parameter descriptions are minimal (10-30 chars). E.g., 'currency' is described as 'Currency code' without format guidance. 'indicators' in forex is described as 'Optional comma-separated technical indicator slugs' but does not list valid slugs or constraints. Descriptions should be 50-200 chars and include examples or enums.