Stock analysis MCP server providing financial data, valuation analysis, and technical indicators for stocks
The server defines 3 stock analysis tools with clear action verbs and reasonable descriptions. However, significant gaps exist: parameter descriptions are minimal, output schemas are completely undocumented, error handling provides no recovery guidance, and the implementation returns raw string responses rather than structured JSON despite claiming json_response=True. Tools are read-only (low risk), but descriptions lack LLM-optimized clarity and parameter constraints. The codebase shows basic tool registration via FastMCP but lacks the structured output and error guidance patterns expected of production-grade tools.
獲取指定股票代號的最新價格資訊。 例如: 'AAPL', '2330.TW'
技術指標分析:MA50/MA200(均線)、RSI(14)、52週高低點。 例如: 'AAPL', '2330.TW'
估值分析:判斷股票目前是否被高估。 綜合多個指標:P/E 歷史百分位、Graham Number、Price Percentile、Forward/Trailing P/E 比較、PEG Ratio。 例如: 'AAPL', '2330.TW'
Output schemas completely undocumented. All three tools return unstructured string responses (e.g., 'AAPL 目前價格為 150.25 USD'), not structured JSON. LLMs cannot extract field data or chain tools. No return type documentation exists.
Parameter descriptions are trivial or missing. The 'ticker' parameter is documented identically across all three tools ('Stock ticker symbol (e.g., AAPL, 2330.TW)'), but no format constraints, length limits, or validation rules are specified. LLMs have no guidance on valid ticker formats or error cases.
Error handling provides no recovery guidance. All three tools catch exceptions and return strings like 'Unable to get X: {error}' without suggesting what the agent should do next (e.g., 'Try a different ticker symbol' or 'This ticker may not be available'). No error classification (retryable vs user-fixable).
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | D | 51 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 14 | - | v1 |
Tool descriptions are inadequate for LLM tool selection. 'get_valuation_analysis' description is a list of metrics ('P/E historical percentile, Graham Number, ...') without explaining WHEN to call it or WHAT problem it solves. Descriptions should answer: What? When? Why?
No pagination or result limits. 'get_valuation_analysis' can return very long multi-line string responses with nested metric breakdowns. If extended to multiple tickers, responses could exceed token budgets without any limit or pagination mechanism.