Servidor MCP - Captura SEFAZ
Servidor MCP (Model Context Protocol) que expoe as operacoes de Captura SEFAZ como ferramentas para agentes de IA. Mesma autenticacao e mesmo escopo por empresa da API REST: cada ferramenta so acessa empresas as quais o usuario do token tem permissao.
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.
| Item | Valor |
|---|---|
| Endpoint | https://estoquenfe.optago.app.br/api/v1/mcp |
| Transporte | Streamable HTTP (POST JSON-RPC 2.0) |
| Autenticacao | Bearer JWT no header Authorization |
| Ferramentas | listar_documentos, obter_xml, obter_pdf, manifestar |
Qualquer cliente MCP que suporte servidor HTTP remoto com header de autenticacao consegue se conectar. O token vai no header Authorization.
claude mcp add --transport http estoque-nfe "https://estoquenfe.optago.app.br/api/v1/mcp" \
--header "Authorization: Bearer <token>"
{
"mcpServers": {
"estoque-nfe": {
"type": "http",
"url": "https://estoquenfe.optago.app.br/api/v1/mcp",
"headers": {
"Authorization": "Bearer <token>"
}
}
}
}
<token> pelo access token JWT do SSO Optago. O mesmo token da API REST vale aqui.
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.
manifestar exige papel de gestor na empresa. Operadores recebem erro de permissao no resultado da ferramenta.
429 com Retry-After.
Lista os documentos fiscais capturados da SEFAZ para uma empresa, com filtros opcionais e paginacao.
| Campo | Tipo | Descricao |
|---|---|---|
| cnpj | string | obrigatorio CNPJ da empresa, apenas digitos. |
| manifestacao_status | string | opcional pendente, enviada, expirado. |
| xml_disponivel | string | opcional nao_verificado, disponivel, indisponivel. |
| data_de / data_ate | string | opcional Periodo de emissao (YYYY-MM-DD). |
| page / per_page | integer | opcional Paginacao (per_page maximo 200). |
Retorna o XML completo autorizado (procNFe) de uma NF-e pela chave de acesso. O conteudo volta como texto no resultado da ferramenta.
| Campo | Tipo | Descricao |
|---|---|---|
| cnpj | string | obrigatorio CNPJ da empresa. |
| chave_acesso | string | obrigatorio Chave da NF-e (44 digitos). |
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.
| Campo | Tipo | Descricao |
|---|---|---|
| cnpj | string | obrigatorio CNPJ da empresa. |
| chave_acesso | string | obrigatorio Chave da NF-e (44 digitos). |
Registra a manifestacao do destinatario. Requer papel de gestor na empresa.
| Campo | Tipo | Descricao |
|---|---|---|
| cnpj | string | obrigatorio CNPJ da empresa. |
| chave_acesso | string | obrigatorio Chave da NF-e (44 digitos). |
| tipo | string | obrigatorio ciencia, confirmacao, desconhecimento, operacao_nao_realizada. |
| justificativa | string | condicional Obrigatoria para operacao_nao_realizada (minimo 15 caracteres). |
Para depurar sem um cliente MCP, da pra chamar o endpoint direto com curl.
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"}'
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}}}'
{
"jsonrpc": "2.0",
"id": 2,
"result": {
"content": [
{ "type": "text", "text": "{ ...documentos e pager em JSON... }" }
],
"isError": false
}
}
isError: true, nao como erro de protocolo JSON-RPC. Erros de protocolo (metodo inexistente, JSON invalido) usam o campo error padrao do JSON-RPC.