MCP server for OathScore — real-time world state and API quality ratings for trading agents
OathScore MCP exhibits significant structural and definitional gaps. While tool names follow verb conventions (get_*, check_*), descriptions lack the depth and specificity needed for robust LLM tool selection. Critical issues: (1) Most tools return JSON-stringified responses (json.dumps) rather than structured objects, forcing LLMs to parse unstructured text. (2) Parameter descriptions are absent or minimal, the `apis` parameter in compare_apis has only 'Comma-separated API names to compare' with no validation constraints, format guidance, or examples of valid API names. (3) Output schemas are completely undocumented, LLMs cannot plan downstream operations or know what fields to extract. (4) Error handling is implicit (via raise_for_status) with no recovery guidance. (5) No pagination support despite tools returning potentially large result sets. (6) No tool annotations (readOnlyHint, etc.) despite all tools being read-only. The server functions as a thin proxy to an external API without the abstraction, validation, or agent-friendly structuring that production tool definitions require.
Check OathScore service health and data freshness.
Compare quality scores of two or more APIs side-by-side. Pass comma-separated names, e.g. 'polygon,twelvedata'.
Get active degradation alerts for monitored APIs. Shows uptime drops, high latency, and schema changes.
Get economic event countdowns: next event, today remaining, week high-impact count, days until FOMC and CPI.
Get open/close status for CME, NYSE, NASDAQ, LSE, EUREX, TSE, HKEX with next transition times.
Get current world state: exchange status, volatility (VIX/VVIX/SKEW/term structure), economic event countdowns, and data health. One call replaces 4-6 separate API calls.
Tools return JSON-stringified responses (json.dumps) instead of structured objects. LLMs must parse unstructured text, which is error-prone and wastes tokens. All 8 tools affected.
Output schemas are completely undocumented. Tool descriptions do not specify what fields the response contains, their types, or their meaning. LLMs cannot plan multi-step workflows or extract specific data.
Parameter descriptions lack validation constraints and format guidance. Example: `apis` parameter in compare_apis says 'Comma-separated API names' but does not list valid API names, format rules (uppercase/lowercase), or what happens if an invalid name is passed.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 46 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 45 | - | v1 |
Get OathScore quality rating for a specific API. Available APIs: alphavantage, polygon, finnhub, twelvedata, eodhd, fmp, fred, coingecko, alpaca, yfinance. Returns composite score (0-100), letter grade, and component breakdown.
Get current volatility readings: VIX, VIX9D, VIX3M, VVIX, SKEW, and term structure (contango/backwardation/flat).
Error handling is implicit (httpx raise_for_status) with no recovery guidance. If an API call fails, the LLM receives an HTTP error with no actionable next step. No categorization of errors as retryable, user-fixable, or fatal.
No tool annotations despite all tools being read-only. Missing readOnlyHint annotation that would inform agents and clients of tool safety characteristics.
No pagination support. Tools like get_now, get_alerts, and compare_apis may return large result sets with no limit parameter or cursor support. LLMs cannot control response size, risking context window exhaustion.
Tool descriptions do not explain when to call each tool or how they differ. For example, get_now, get_exchanges, get_volatility, and get_events all fetch from /now endpoint but descriptions do not clarify that get_now is the comprehensive call that replaces the others, creating ambiguity in tool selection.