A fully-featured FRED MCP server for accessing economic data from the Federal Reserve Economic Data (FRED) API.
Scoring was not performed
No output schema documentation. Tools return dict with 'data' field containing raw API response, but no documented structure for downstream tool consumption. LLMs cannot infer what fields are present or how to extract values for subsequent calls.
Parameter descriptions are minimal (10-30 characters vs. 72-char baseline). E.g., 'sort_order' described as just 'Sort order (default: asc)' without explaining what field is being sorted or implications. Descriptions like 'Realtime start date (optional)' lack context on FRED realtime semantics.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 23 | 2026-07-28+ | v2 |
| 2026-03-09 | D | 55 | - | v1 |
Error handling returns raw BaseFredAPIError exceptions without structured recovery guidance. E.g., {'error': e} provides no actionable next step for the LLM. Should return specific error codes, constraints violated, and suggested recovery (e.g., 'Series ID not found. Try FREDSeriesSearch() to find valid IDs.').
Similar tool names create LLM confusion. FREDSeriesSearchTags (tags for a series search) vs FREDSeriesTags (tags for a series) vs FREDSeriesSearchRelatedTags (related tags for series search) are semantically close. Descriptions lack guidance on when to use each. LLM may conflate them.
Tool descriptions omit WHEN to call each tool. E.g., 'Get the FRED tags for a series' doesn't explain: Is this for discovery? Filtering? LLM cannot prioritize this against FREDSeriesSearch without more context.
No pagination result limits enforced in response. FREDSeriesObservations and FREDSeriesSearch accept limit and offset but implementation does not cap max results. Default limit=100000 for observations will produce massive responses that exhaust context windows.
Enum constraints present in schema but parameter descriptions don't repeat the valid values. E.g., 'units' schema shows enum but description says 'Unit of measurement (default: lin)' without listing all 9 valid options. LLMs may not parse JSON Schema enum fields reliably.