MCP server exposing live stock market data to Claude Desktop and other MCP clients.
Server has 6 tools with complete input schemas and descriptions. Naming follows verb_noun convention (get_*, calc_*, compare_*). Descriptions are present but brief (10-80 chars), below the 50-200 char LLM-optimized baseline. All parameters have type definitions and descriptions. Output schemas are not documented, LLMs cannot predict response structure. Error handling returns structured ErrorResult JSON with code/message/details, which is good, but lacks recovery guidance (e.g., 'try search_users first'). No tool annotations (readOnlyHint, destructiveHint, idempotentHint). All tools are READ_ONLY, which is safe but unmarked in the schema.
Calculate technical indicators (RSI, MACD, SMA20/50/200).
Compare multiple stock symbols and return side-by-side metrics.
Get fundamental data (P/E, market cap, yield, sector).
Get historical OHLCV data for a given stock symbol.
Get recent news headlines, URLs, and timestamps for a stock symbol.
Get current price, change %, and volume for a given stock symbol.
Output schemas not documented. LLMs cannot predict response structure (fields, types, nesting). Agents must infer from examples or fail on unexpected formats.
Tool descriptions are too brief (10-80 chars vs. 50-200 char baseline). Lack context on WHEN to use each tool vs. similar ones. E.g., 'get_history' vs 'calc_indicators', when does the agent choose each?
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). All tools are READ_ONLY but this is not declared in the schema. Agents cannot distinguish safe tools from risky ones.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 57 | <=2025-11-25 | v2 |
Error messages lack recovery guidance. ErrorResult returns code and message but does not suggest next steps (e.g., 'Invalid symbol. Try search_symbols() for valid tickers').
No pagination support. Tools like get_news accept a 'limit' parameter but no offset/cursor. Large result sets could exhaust context window.