MCP server for a logistics platform providing tools for driver management, vehicle operations, and database queries. Part of a multi-module Spring Boot application with an agent component and REST API.
Server has 5 tools with explicit schemas and descriptions. Naming follows verb_noun pattern (createDriver, linkDriverVehicle, deleteDriver, renderChart, renderTable). Descriptions are detailed and context-rich (100-300 chars), exceeding baseline averages. However, critical gaps exist: no output schemas documented for any tool, missing error handling guidance, no tool annotations (readOnlyHint/destructiveHint), and parameter descriptions lack format constraints (e.g., UUID format stated but no validation guidance). Tools are well-composed (single responsibility) and include dependency hints ('consult executeQuery first'). Security concern: deleteDriver lacks confirmation pattern despite being destructive. Baseline: 194 chars avg description (these are 150-280), 4 params avg (these range 1-5), 100% A+ tools have output schemas (this server has 0%).
Cadastra um novo motorista. E-mail deve ser único — se já existir, a operação é recusada. Obrigatórios: name, email, birthday, city, state. Se o usuário não informou todos, PERGUNTE os que faltam antes de chamar — não invente valor nem use "N/A". Exemplo: name="João Silva", email="[email protected]", birthday="1990-05-10", city="Campinas", state="SP".
Exclui um motorista da plataforma. Operação irreversível. Obrigatório: id (UUID) — vem de uma consulta executeQuery anterior pelo nome ou e-mail; NUNCA invente um UUID e nunca chame esta tool sem ter buscado o id antes. Um motorista com rotas não pode ser excluído: a operação é recusada e a mensagem diz quantas rotas existem. Os vínculos dele com veículos são desfeitos junto (os veículos continuam na frota). Exemplo: id="3fa85f64-5717-4562-b3fc-2c963f66afa6".
Vincula um veículo a um motorista (relação N:N via driver_vehicle). Falha se o vínculo já existir. Obrigatórios: driverId, vehicleId — os ids vêm de uma consulta executeQuery anterior; se não souber, consulte antes em vez de inventar um UUID.
Desenha um gráfico com o resultado da última consulta que você fez por executeQuery. Você não envia os dados: informa quais colunas do resultado usar, e o gráfico é montado a partir das linhas que o banco devolveu. Consulte primeiro com executeQuery, depois chame esta tool com os nomes de coluna exatamente como aparecem no resultado (ex.: city, falhas). Cada resposta desenha no máximo uma visualização. Escolha o chartType mais adequado: - bar: comparação entre categorias - line: evolução ao longo do tempo ou sequência - pie: proporção de um todo (até ~6 categorias) - doughnut: igual ao pie, estilo diferente
No output schemas documented for any tool. LLMs cannot plan downstream calls or extract required fields (e.g., what does createDriver return? A driver_id? Full driver object?). Baseline: 100% of A+ tools document return types.
deleteDriver lacks confirmation or dry-run pattern despite being destructive and irreversible. Agents can accidentally delete drivers without a safety gate. Description warns against inventing UUIDs but does not offer a confirm_delete step.
Parameter descriptions lack actionable format constraints. 'birthday' states 'ISO yyyy-MM-dd' but no validation guidance. 'state' says '2 letras' (Portuguese) but no enum or pattern. LLMs cannot self-correct invalid input without explicit constraints.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 52 | 2026-07-28+ | v2 |
Desenha uma tabela com o resultado da última consulta que você fez por executeQuery. Você não envia os dados: informa quais colunas do resultado mostrar, na ordem desejada, e a tabela é montada a partir das linhas que o banco devolveu. Use os nomes de coluna exatamente como aparecem no resultado (ex.: name, city, falhas). Cada resposta desenha no máximo uma visualização.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint) present. renderChart and renderTable are read-only; deleteDriver is destructive; linkDriverVehicle is idempotent (fails if link exists). Annotations enable agents to reason about safety and retry logic.
Error handling lacks recovery guidance. deleteDriver states 'operação é recusada' (operation refused) if driver has routes, but does not tell the LLM what to do next (e.g., 'Delete routes first' or 'Call listDriverRoutes to see dependencies'). Baseline: error responses must guide next steps.