Yahoo Finance MCP has 4 well-named tools with complete input schemas and solid descriptions. Naming follows verb_noun convention (history, oscillator, trend, volume). All tools have clear, substantive descriptions (100-250+ chars) explaining what they return and when to use them. Input schemas are fully specified with types, enums, and descriptions. However, output schemas are NOT documented, the code returns raw JSON but provides no schema definition for what fields clients should expect. Error handling is minimal (generic try-catch). No tool annotations (readOnlyHint, destructiveHint, idempotentHint) despite all tools being READ_ONLY. Security is solid (no credentials as params, read-only operations). The server prioritizes analytical financial data with good semantic clarity (e.g., the 'adjust' parameter explanation in history tool is exemplary). Main gaps: missing output schema documentation, no error recovery guidance, no tool annotations.
Get OHLCV price history for a symbol.
Daily momentum oscillators for a symbol. Returns RSI(14) and Stochastic %K(14)/%D(3), plus a current put_call_ratio snapshot aggregated across all listed expirations (volume_based, oi_based) — null for tickers without listed options (non-US equities, indexes, crypto). Uses daily bars; warmup data is fetched automatically.
Daily trend-following indicators for a symbol. Returns SMA(20,50,200), EMA(20,50,200), MACD(12,26,9), and ADX(14)/DMI. Uses daily bars; warmup data is fetched automatically.
Daily volume moving averages for a symbol. Returns raw volume and SMA(5,10,20,50), plus a current short-interest snapshot (shares_short, pct_of_float, days_to_cover, prior_month) when available — null for tickers that don't report it (non-US equities, ETFs, crypto). Uses daily bars; warmup data is fetched automatically.
Output schemas not documented. Tools return complex structured results (OHLCV bars, indicators, snapshots) but no JSON schema is provided describing the response format. LLMs cannot reliably parse or chain outputs without schema documentation.
No tool annotations. All tools are READ_ONLY (financial data queries), but the tool definitions lack readOnlyHint=true. Annotations enable agents to reason about idempotency, side effects, and retry safety.
Error handling lacks recovery guidance. catch blocks return generic error messages (e.g., 'Invalid input') without suggesting next steps. Per pattern:recovery-guide, errors should guide the agent: 'Symbol not found. Try searching available tickers with list_tickers()' (if such a tool existed).
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | B | 72 | <=2025-11-25 | v2 |
| 2026-03-09 | F | 48 | - | v1 |
Tool names lack specificity. 'oscillator', 'trend', 'volume' are nouns rather than verb_noun patterns. More precise names (e.g., 'get_momentum_indicators', 'get_trend_indicators', 'get_volume_indicators') would clarify intent for LLMs.