A powerful server providing advanced stock market analysis and insights
Server has 4 tools with basic verb-noun naming (get_*, analyze_*). All tools have descriptions (10-50 chars, below baseline 194 chars). Input schemas present with type definitions but parameter descriptions are minimal or missing. No output schemas documented. Error handling returns error dicts but lacks recovery guidance. No tool annotations (readOnlyHint, destructiveHint). Descriptions are too terse to guide LLM selection effectively. Missing parameter constraints (e.g., period enum validation). No pagination support despite potential for large result sets.
Analyze stock risk metrics and potential returns.
Analyze stock trend using technical indicators.
Get historical data for a stock.
Get basic information about a stock.
Descriptions are too short (10-50 chars vs baseline 194 chars). LLMs cannot distinguish when to use analyze_stock_trend vs analyze_stock_risk without more context.
No output schemas documented. Callers cannot predict response structure (e.g., does get_stock_info return a flat dict or nested objects?). Breaks downstream tool chaining.
Parameter 'period' in get_stock_history accepts free-form strings with fallback to '1mo'. Should declare as enum: ['1d', '5d', '1mo', '3mo', '6mo', '1y', '2y', '5y', '10y', 'ytd', 'max'] to prevent hallucinated values.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 41 | <=2025-11-25 | v2 |
Error responses lack recovery guidance. E.g., 'Error in get_stock_info: ...' tells LLM nothing about whether to retry, ask user, or abandon. No error classification (retryable vs fatal).
No tool annotations (readOnlyHint). All tools are read-only but this is not declared in schema, forcing LLM to infer safety from descriptions.