Financial Coach MCP server that retrieves and analyzes monthly bank statements to provide actionable financial advice
Single tool with acceptable definition quality. Tool name starts with verb 'get' (good convention). Description is 108 chars, well within the 10-1024 range for A+ tools. Input parameter has explicit type (string) and detailed description including regex constraint. Output schema is documented with nested structure and field descriptions. However, the parameter description exceeds typical conciseness and contains regex pattern information that should also be validated server-side. No explicit error handling guidance for malformed yearMonthCode values. The tool is READ_ONLY (appropriate), but lacks explicit idempotency marking via tool annotations.
Retrieves the monthly bank statement for a specified year and month code.
Tool lacks annotated risk hints (readonly, destructive, idempotent) despite MCP 2026-07-28 support for tool annotations. The tool is READ_ONLY but this is not declared via toolAnnotations in the registration.
Parameter 'yearMonthCode' description mixes regex pattern and format guidance ('YYYYMmm format (e.g., 2023M01), matching regex /^\\d{4}M\\d{2}$/'), this is a constraint that should be validated and enforced server-side with a clear error message, not left to the LLM to enforce. Descriptions should focus on the semantic meaning, not regex syntax.
No documented error handling or recovery guidance. If yearMonthCode validation fails, the error message 'Error: {message}' is returned without context on why it failed or what the user should try next. Per pattern:recovery-guide, errors should guide the agent toward recovery steps.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | C | 61 | 2025-06-18+ | v2 |
| 2026-03-09 | D | 50 | - | v1 |
Output schema field 'institution.accountType' is returned but has no description in the schema. The outputSchema defines a complex nested structure (balance, transactions with institution info) but lacks clarity on what values accountType can contain (e.g., 'checking', 'savings', 'credit') or when fields may be null/absent.