Medical decision tree and RAG (retrieval-augmented generation) MCP server for loan eligibility and medical classifications
Server has 4 tools with basic schemas and descriptions, but significant quality gaps. Tool names lack action verbs (hello, rag, decision_tree_lookup, enhanced_tree_lookup). Descriptions are present but generic (10-80 chars, below 194-char baseline). Parameter descriptions exist but lack detail on constraints, formats, and valid ranges. No output schemas documented. Error handling is minimal, no recovery guidance or categorization. The 'rag' tool exposes security concerns (header-based API key injection). Tools are READ_ONLY but lack idempotent/readonly annotations. Overall structure is functional but falls short of production quality.
Determines loan eligibility and outcome by checking against a set of financial rules.
Determines loan eligibility and outcome by checking against a set of financial rules with enhanced features.
Return a greeting.
Perform a retrieval-augmented generation (RAG) query.
Tool names lack action verbs. 'hello', 'rag', 'decision_tree_lookup', 'enhanced_tree_lookup' do not start with verbs (get_, create_, search_, etc.). LLMs infer intent from names, these are ambiguous.
No output schemas documented. Tools return JSON strings but LLMs cannot parse expected fields. decision_tree_lookup and enhanced_tree_lookup return unspecified decision/path structure.
Security: 'rag' tool accepts encrypted API key via HTTP header 'x-session-token'. Credentials should never be tool parameters or headers, use server-side secret injection. Current design risks key exposure in logs.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 47 | <=2025-11-25 | v2 |
Parameter descriptions lack constraints. 'credit_score' and 'income' in decision_tree_lookup have no min/max ranges. 'purpose' enum is documented but other params lack format/range guidance.
No error handling or recovery guidance. Tools do not return actionable error messages. 'No encrypted key provided' is a raw error, no guidance on what to do next.