Visao geral

O servidor fala JSON-RPC 2.0 sobre HTTP (transporte Streamable HTTP): o cliente faz um POST para o endpoint MCP com o corpo JSON-RPC. Os metodos de protocolo suportados sao initialize, tools/list, tools/call e ping.

ItemValor
Endpointhttps://estoquenfe.optago.app.br/api/v1/mcp
TransporteStreamable HTTP (POST JSON-RPC 2.0)
AutenticacaoBearer JWT no header Authorization
Ferramentaslistar_documentos, obter_xml, obter_pdf, manifestar

Como conectar

Qualquer cliente MCP que suporte servidor HTTP remoto com header de autenticacao consegue se conectar. O token vai no header Authorization.

Claude Code (CLI)
claude mcp add --transport http estoque-nfe "https://estoquenfe.optago.app.br/api/v1/mcp" \
  --header "Authorization: Bearer <token>"
Config JSON (clientes que usam mcpServers)
{
  "mcpServers": {
    "estoque-nfe": {
      "type":    "http",
      "url":     "https://estoquenfe.optago.app.br/api/v1/mcp",
      "headers": {
        "Authorization": "Bearer <token>"
      }
    }
  }
}
Troque <token> pelo access token JWT do SSO Optago. O mesmo token da API REST vale aqui.

Autenticacao

Toda requisicao ao endpoint MCP exige o header Authorization: Bearer <token>. Sem token valido, o servidor responde 401 antes de qualquer metodo. O token precisa ter acesso ativo ao estoque-nfe; o escopo por empresa e aplicado em cada chamada de ferramenta pelo CNPJ informado.

A ferramenta manifestar exige papel de gestor na empresa. Operadores recebem erro de permissao no resultado da ferramenta.
Rate limit: 120 requisicoes por minuto por usuario (600/min por IP). O endpoint MCP compartilha o mesmo limite da API REST; ao exceder, responde 429 com Retry-After.

listar_documentos

Lista os documentos fiscais capturados da SEFAZ para uma empresa, com filtros opcionais e paginacao.

Argumentos
CampoTipoDescricao
cnpjstringobrigatorio CNPJ da empresa, apenas digitos.
manifestacao_statusstringopcional pendente, enviada, expirado.
xml_disponivelstringopcional nao_verificado, disponivel, indisponivel.
data_de / data_atestringopcional Periodo de emissao (YYYY-MM-DD).
page / per_pageintegeropcional Paginacao (per_page maximo 200).

obter_xml

Retorna o XML completo autorizado (procNFe) de uma NF-e pela chave de acesso. O conteudo volta como texto no resultado da ferramenta.

Argumentos
CampoTipoDescricao
cnpjstringobrigatorio CNPJ da empresa.
chave_acessostringobrigatorio Chave da NF-e (44 digitos).

obter_pdf

Gera o DANFE em PDF de uma NF-e pela chave de acesso. Retorna um recurso embutido (resource) com mimeType: application/pdf e o conteudo em base64.

Argumentos
CampoTipoDescricao
cnpjstringobrigatorio CNPJ da empresa.
chave_acessostringobrigatorio Chave da NF-e (44 digitos).

manifestar

Registra a manifestacao do destinatario. Requer papel de gestor na empresa.

Argumentos
CampoTipoDescricao
cnpjstringobrigatorio CNPJ da empresa.
chave_acessostringobrigatorio Chave da NF-e (44 digitos).
tipostringobrigatorio ciencia, confirmacao, desconhecimento, operacao_nao_realizada.
justificativastringcondicional Obrigatoria para operacao_nao_realizada (minimo 15 caracteres).

Exemplos JSON-RPC

Para depurar sem um cliente MCP, da pra chamar o endpoint direto com curl.

Listar as ferramentas
curl -X POST "https://estoquenfe.optago.app.br/api/v1/mcp" \
  -H "Authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'
Chamar listar_documentos
curl -X POST "https://estoquenfe.optago.app.br/api/v1/mcp" \
  -H "Authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"listar_documentos","arguments":{"cnpj":"12345678000190","per_page":10}}}'
Resposta (tools/call)
{
  "jsonrpc": "2.0",
  "id": 2,
  "result": {
    "content": [
      { "type": "text", "text": "{ ...documentos e pager em JSON... }" }
    ],
    "isError": false
  }
}
Erros de negocio (sem acesso, documento inexistente, XML indisponivel) voltam dentro do resultado com isError: true, nao como erro de protocolo JSON-RPC. Erros de protocolo (metodo inexistente, JSON invalido) usam o campo error padrao do JSON-RPC.