A full-stack web application for stock screening and fundamental analysis with AI-powered assistant capabilities. Backend provides REST APIs for company quotes, screening, and indicators; frontend is a Next.js application with server-side rendering.
Three tools with solid naming (verb_noun pattern) and comprehensive descriptions (150-250 chars each). All tools have input schemas with type definitions and parameter descriptions. However, output schemas are not explicitly documented in the source code, only inferred from implementation. Parameter constraints (e.g., debt_window_years range 2-10) are documented in descriptions but not enforced in JSON Schema. Error handling is minimal; tools return {"error": "..."} dicts but lack recovery guidance or categorization. No tool annotations (readOnlyHint, etc.) despite all three being read-only operations.
Fetch detailed fundamental data for a single company: valuation metrics (P/E, P/FCF, PEG), leverage ratios, liquidity, and earnings/cash flow growth rates. Returns comprehensive financial snapshot.
List all available screening indicators with their definitions, direction (lower/higher is better), and usage notes. Serves as the authoritative catalogue for screen_companies filter options.
Screen companies using filterable indicators (P/E ratios, debt metrics, valuation ratios) with optional sorting. Returns up to 50 companies matching the specified criteria.
Output schemas not documented. Tools return complex nested objects (e.g., get_fundamentals returns company_snapshot with 20+ fields) but LLMs cannot see the structure. Forces agents to guess field names and types.
No tool annotations. All three tools are read-only (Risk: READ_ONLY noted in source) but lack readOnlyHint in schema. Agents cannot distinguish safe tools from destructive ones without explicit hints.
Error responses lack recovery guidance. Tools return {"error": "..."} but do not categorize errors (retryable vs user-fixable) or suggest next steps. E.g., invalid ticker returns error but does not suggest calling list_available_indicators.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 59 | 2026-07-28+ | v2 |
Parameter constraints not enforced in JSON Schema. debt_window_years documented as 'integer from 2 to 10' in description but no minimum/maximum in schema. LLMs may pass invalid values; validation happens at runtime.
screen_companies filters parameter is under-specified. Accepts arbitrary object with min/max bounds but no schema for individual filter properties. LLMs cannot discover valid filter keys without calling list_available_indicators first.