PDF-first stock screener and research packet generator — automate screening with MCP-ready data tools in measured market workloads.
Two tools with identical schemas and parameter structures. Both have basic descriptions (50-60 chars) that state WHAT but lack WHEN/WHY context. Schemas are present and properly typed, but descriptions fall short of production baseline (194 chars avg). Parameter descriptions are minimal (10-20 chars). No error handling guidance, no output schema documentation, no idempotency hints despite WRITE risk classification. Tool names are verb-noun but generic ('run_report', 'run_data'), 'run' is discouraged per patterns. No distinction between the two tools' use cases in descriptions.
Generate structured data artifacts from equity screening without PDF
Generate a PDF report from equity screening data
Tool names start with generic verb 'run' instead of action-specific verbs. 'run_report' and 'run_data' do not clearly distinguish intent. Recommend 'generate_pdf_report' and 'generate_screening_data' to match pattern:tool naming conventions.
Tool descriptions are 50-60 characters, below the 194-char production baseline. Missing WHEN/WHY context. 'Generate a PDF report from equity screening data' does not explain when to call run_report vs run_data, what prerequisites exist, or what the output enables. Expand to 150-250 chars with use-case guidance.
Parameter descriptions are 10-20 characters (e.g., 'Execution mode: offline or live'). Production baseline is 72 chars. LLMs cannot infer when to use 'offline' vs 'live' mode, what 'fail_on_provider_error' does, or how 'as_of' affects results. Expand each parameter description with examples and constraints.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 49 | 2026-07-28+ | v2 |
Output schema not documented. Both tools return dict[str, object] with fields like 'run_id', 'output_dir', 'pdf_path', 'manifest_path', 'warnings'. LLMs need explicit field descriptions to plan downstream calls. Document return type with field types and meanings per pattern:tool.
No error handling guidance. Tools raise ValueError for invalid mode or missing input_path, but LLMs receive no recovery hints. Add error classification (retryable vs user-fixable) and actionable messages per pattern:recovery-guide.