MCP server deployed as Azure Functions that provides financial data retrieval tools via Alpha Vantage API
This server has several significant gaps in definition quality. All 5 tools follow consistent verb_noun naming (get_*), which is good. However, parameter descriptions are minimal (only 'The stock symbol to fetch data for.'), tool descriptions lack critical details about prerequisites, return types, and use-case context. No output schemas are documented, making it impossible for LLMs to know what fields to expect. No error handling guidance is provided. The server uses a custom schema abstraction (Tool, ToolProperty classes in src/tools.py) that is not visible in the source, making it difficult to verify if proper JSON Schema is being generated. The descriptions are generic and do not distinguish between when to use get_company_overview vs get_income_statement, they all reference 'company information' and 'financial data' without explaining the semantic difference or what use cases each solves.
This returns the annual and quarterly balance sheets for the company of interest, with normalized fields mapped to GAAP and IFRS taxonomies of the SEC. Data is generally refreshed on the same day a company reports its latest earnings and financials.
This returns the annual and quarterly cash flow for the company of interest, with normalized fields mapped to GAAP and IFRS taxonomies of the SEC. Data is generally refreshed on the same day a company reports its latest earnings and financials.
This returns the company information, financial ratios, and other key metrics for the equity specified. Data is generally refreshed on the same day a company reports its latest earnings and financials.
This returns the annual and quarterly earnings (EPS) for the company of interest. Quarterly data also includes analyst estimates and surprise metrics.
This returns the annual and quarterly income statements for the company of interest, with normalized fields mapped to GAAP and IFRS taxonomies of the SEC. Data is generally refreshed on the same day a company reports its latest earnings and financials.
No output schemas documented. Tools return raw API responses (dicts) with no guidance on field names, types, or expected structure. LLMs cannot reason about downstream tool chains or extract specific fields.
Descriptions are generic and do not differentiate use cases. All 5 tools have nearly identical descriptions ('This returns... Data is generally refreshed...'). LLMs cannot reason about when to use get_income_statement vs get_balance_sheet, both claim to return 'company information' without explaining the semantic distinction or which financial analysis goal each serves.
Parameter descriptions are minimal. The single parameter 'symbol' has a one-line description. No guidance on format (e.g., 'Uppercase ticker like AAPL, MSFT'), whether partial symbols are accepted, or what happens if the symbol is invalid or does not exist.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 37 | <=2025-11-25 | v2 |
| 2026-03-09 | F | 39 | - | v1 |
No error handling guidance. Error cases are caught and returned as {'Error': str(e)}, but there is no guidance for the LLM on how to recover. If the API returns 'Invalid API key' or 'Daily rate limit exceeded', the LLM does not know whether to retry, ask the user, or give up.
Tool composition and chaining unclear. A user might want 'company overview and income statement', should they call both tools separately, or is there a batch variant? No guidance on tool ordering (e.g., 'Use get_company_overview first to verify the company exists before calling get_income_statement'). This invites wasteful multi-call sequences.
API key exposed as environment variable with no rotation guidance or scoping. While not a tool parameter (good), the code does not document what permissions the Alpha Vantage API key grants or how to rotate it if compromised.