Multi-step stock news and price research agent with MCP tools for ticker information, news-to-price correlation, and headline summarization
This MCP server exhibits significant gaps in tool definition quality. While tool names follow action-verb conventions (ticker_info, news_vs_price, summarize_news), descriptions are present but generic. Input schemas are visible and properly typed, but output schemas are entirely absent from the code. The server lacks proper error handling patterns, parameter descriptions are minimal, and there is no evidence of idempotence handling or pagination support. Tools operate on a narrow domain (stock ticker data) with no composition patterns evident. The definitions are functional but fall short of production baseline expectations.
Return markdown table mapping news to nearest close
LLM summary for a headline (1–2 sentences)
Return price summary for a ticker (MCP shape: plain JSON)
No output schemas documented. Tools return 'plain JSON' and 'markdown table' but the structure is not formally specified. LLMs cannot plan downstream operations without knowing output field names and types.
Parameter descriptions are minimal or absent. 'days' is described as 'Number of days to look back' but no mention of valid range (e.g., 1 - 365), defaults, or constraints. LLMs may pass invalid values like 0, -10, or 10000.
Tool descriptions are under 100 characters and lack context on WHEN to use each tool vs alternatives. 'Return price summary for a ticker' does not explain when to call this vs news_vs_price, or what data structure is returned.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | D | 50 | <=2025-11-25 | v2 |
| 2026-03-09 | F | 32 | - | v1 |
No error handling patterns documented. Code calls run_tool() with no visible try/catch or error classification. If yfinance fails (market closed, invalid ticker, rate-limited), there is no guidance for LLM recovery.
Idempotence not addressed. If an LLM retries summarize_news with the same headline, the tool will call the LLM again (double charge, wasted tokens). No caching or deduplication visible.
Tools do not support pagination or result limits. If news_vs_price returns 1000+ rows, the entire markdown table enters the context, bloating tokens and risking context exhaustion. No limit parameter visible.
Parameter naming could be more explicit. 'ticker' is clear, but 'days' lacks a suffix indicating it's a count. Better: 'lookback_days' or 'days_back'. LLMs may confuse it with a date parameter.