MCP server for managing and querying customer data from a SQLite database
Three tools with basic definitions and schemas present. Tool names follow verb_noun convention (contar_*, buscar_*) but descriptions are minimal and lack actionable guidance for LLM selection. Input schemas are properly typed but lack constraints (enums, ranges). Output schemas are documented in code but return unstructured dict responses. No error handling guidance. Security: no secrets exposed, but no audit logging. Resources feature present but undocumented. Overall: serviceable for simple read-only queries but missing production-grade polish around error recovery, schema completeness, and discovery patterns.
Busca clientes pelo bairro.
Busca clientes pelo nome (busca parcial).
Conta o número total de clientes, opcionalmente filtrado por bairro.
Output schemas are implicit and unstructured. Functions return dicts with keys like 'total_clientes', 'clientes', 'termo_busca' but no formal schema documentation for LLM consumption. Tools returning lists (buscar_* results) lack pagination support (limit, offset, cursor) despite potentially returning many rows.
Descriptions lack WHEN-to-use guidance and actionable dependencies. 'Conta o número total de clientes, opcionalmente filtrado por bairro.' does not explain when to choose this vs. buscar_cliente_por_bairro + count, or how the bairro filter relates to the search tools. No hints about required setup (database must exist) or failure modes.
No error handling guidance. Functions return error dicts (e.g. {'erro': 'Nome não fornecido'}) but descriptions do not explain these error cases or what the LLM should do next. If database connection fails, tool raises an exception, no recovery path documented.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | C | 69 | 2026-07-28+ | v2 |
| 2026-03-09 | D | 53 | - | v1 |
Parameter 'bairro' in contar_clientes is optional but no default behavior is documented. Optional parameters invite LLMs to omit them when they are most relevant, requiring fallback discovery. Explicit guidance ('If bairro is omitted, returns total for all neighborhoods') needed.
Resource 'clientes://estatisticas' is defined but never described in the server docstring or in any discoverable metadata. No description of what it returns, when to call it, or how it complements the tools. Resources are undiscoverable without explicit annotation.
Search tools (buscar_cliente_por_nome, buscar_cliente_por_bairro) apply LIKE filters without case-sensitivity hints or escaping guidance. Description does not clarify: Is search case-insensitive? Does 'silva' match 'SILVA'? This impacts LLM expectations.