MCP-powered stock risk, volatility, and trend analysis with real-time financial data
Server has 5 tools with basic schemas and descriptions, but significant gaps limit production readiness. All tools have input schemas with type definitions and descriptions present, meeting minimum requirements. However, descriptions are generic (avg ~80 chars, below 194-char baseline), lack WHEN/WHY context, and omit error recovery guidance. No output schemas documented. Tools lack error classification (retryable vs fatal). Parameter descriptions are minimal, e.g., 'Stock ticker symbol' repeats across tools without explaining valid formats or constraints. No tool annotations (readOnlyHint, idempotentHint). Error responses return generic status/message without actionable recovery steps. Tools are well-named (verb_noun pattern) and single-responsibility, but composition lacks chaining IDs in responses, e.g., get_current_price returns symbol but no timestamp or data_source for downstream tools.
Fetches the current stock price for a given ticker symbol
Fetches fundamental financial metrics for a given ticker symbol including market cap, revenue, margins, and ratios
Fetches historical stock price data for a given ticker symbol with configurable period and interval
Predicts stock price trend (up, down, or sideways) based on 6-month historical data using moving average crossover method
Predicts stock volatility and risk level based on 3-month historical price data using standard deviation of daily returns
Output schemas not documented. LLMs cannot plan downstream calls or extract required fields. Tools return structured objects (status, symbol, company, data) but no formal schema definition visible in code.
Error responses lack recovery guidance. All tools return {status: error, message: generic_text} without actionable next steps. E.g., 'Ticker not supported' does not suggest search_tickers() or list_supported_symbols().
Parameter descriptions are minimal and generic. 'Stock ticker symbol (e.g., AAPL, MSFT, TSLA)' repeats across tools. No format constraints, valid range, or dependency hints. Rubric baseline: 72 chars avg; these are ~50 chars with no actionable detail.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 54 | 2026-07-28+ | v2 |
Tool descriptions lack WHEN/WHY context. 'Fetches the current stock price' does not explain when to use this vs get_historical_data, what prerequisites exist, or what the LLM should do with the result. Rubric baseline: 194 chars; these are ~80 chars.
No tool annotations (readOnlyHint, idempotentHint). All tools are read-only and idempotent, but this is not declared. LLMs cannot infer retry safety or side-effect profile without explicit hints.