biterp
MCP Server

Tratamento de Erros

Como o MCP Server do bitERP reporta erros para agentes de IA.

O MCP Server distingue dois tipos de erro, conforme a especificação do protocolo:

Protocol Errors

Erros de estrutura JSON-RPC, tratados automaticamente pelo SDK:

{
    "jsonrpc": "2.0",
    "error": {
        "code": -32602,
        "message": "Unknown tool: invalid_tool_name"
    },
    "id": 1
}

Esses erros indicam problemas no formato da mensagem, não na lógica de negócio.

Tool Execution Errors

Erros de negócio retornados no resultado da tool com isError: true. O agente de IA recebe feedback acionável e pode se auto-corrigir:

{
    "content": [
        {
            "type": "text",
            "text": "{\"error\":true,\"type\":\"PermissionError\",\"message\":\"You do not have permission to perform this action\"}"
        }
    ],
    "isError": true
}

Tipos de erro de negócio

TipoDescriçãoAção esperada do agente
PermissionErrorSem permissão para a operaçãoInformar o usuário sobre a restrição
NotFoundErrorRecurso não encontradoTentar com outro ID ou informar o usuário
ConflictErrorConflito (ex: duplicata)Verificar dados e ajustar
ValidationErrorDados inválidosCorrigir parâmetros e tentar novamente
ErrorErro interno genéricoReportar erro ao usuário

Exemplos de cenários

Permissão negada

O usuário member tenta deletar um produto sem permissão products:delete:

Agente: Vou excluir o produto "Notebook Dell"
→ delete_product({ tenant_id: "...", id: "..." })
← PermissionError: You do not have permission to perform this action
Agente: Você não tem permissão para excluir produtos.
        Peça ao administrador para conceder essa permissão.

Recurso não encontrado

O agente tenta buscar um produto com ID inválido:

Agente: Buscando o produto...
→ get_product({ tenant_id: "...", id: "id-invalido" })
← NotFoundError: Product not found
Agente: Não encontrei um produto com esse ID.
        Pode verificar o ID correto?

Tenant inválido

O agente passa um tenant_id que o usuário não tem acesso:

→ list_products({ tenant_id: "tenant-sem-acesso" })
← Error: Membership not found or inactive
Agente: Não foi possível acessar essa empresa.
        Vamos verificar suas empresas disponíveis.
→ list_tenants()

Boas práticas para integradores

  1. Sempre verifique isError: Se true, o conteúdo contém uma mensagem de erro, não dados
  2. Use o campo type: Permite tratar cada tipo de erro de forma específica
  3. Erros são acionáveis: O agente deve usar a mensagem para se auto-corrigir quando possível

On this page