MCP server providing banking tools for customer information, order management, and inventory checking backed by SQLite database
The server defines 5 read-only banking tools with basic structure, but has significant gaps in parameter descriptions, output schema documentation, and error handling guidance. All tools are present and have descriptions, but lack the depth and completeness expected for production use. Tool names follow verb_noun convention well (get_*, check_*), but parameter documentation is sparse. Output types are visible in code but not formally documented in schemas. No error recovery guidance is provided. The codebase shows dual implementations (main.py with FastMCP and main_manual.py with manual registration), the evaluation focuses on main_manual.py as it explicitly shows tool schema registration.
Busca produtos bancários por nome e retorna disponibilidade comercial.
Retorna todos os IDs de cliente de acordo com o nome completo.
Busca dados cadastrais bancários de um cliente pelo identificador único.
Retorna os detalhes de uma solicitação bancária específica.
Retorna as solicitações bancárias de um cliente específico.
Output schemas are not documented. All 5 tools have inferred return types visible in code (string, list[str], dict) but no formal schema definitions provided in tool registration. LLMs cannot plan downstream operations without knowing the response structure.
Parameter descriptions are minimal. Only 'customer_id', 'order_id', 'product_name', 'customer_name' are described, but descriptions lack detail on format, constraints, or examples of valid values (e.g., does customer_id follow a pattern like 'CLI###'?).
Error handling does not guide recovery. Functions return bare strings like 'Cliente não encontrado' or 'Nenhum produto bancário encontrado.' without suggesting next steps. Per pattern:recovery-guide, errors should indicate whether to retry, call a discovery tool, or inform the user.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | C | 62 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 44 | - | v1 |
Tool descriptions are generic and lack context. All descriptions state WHAT the tool does but not WHEN to use it or how it differs from related tools. Most here are 50-150 chars and lack disambiguation.
Tool selection disambiguation is weak. Three tools query customers/orders (get_customer_info, get_customer_ids_by_name, get_orders_by_customer_id) but descriptions do not clearly distinguish when to use each. LLMs will struggle to pick the right one.
No pagination support. check_inventory and get_orders_by_customer_id can return multiple results but lack limit/offset/cursor parameters. If a customer has 500 orders or a product search returns 100 matches, responses will be large and blow context windows.
Response formatting is unstructured text for most tools. get_customer_info and get_order_details return newline-separated plaintext strings instead of structured JSON. This forces LLMs to parse freeform text rather than extract typed fields, increasing token cost and hallucination risk.