mcp-nfe-br
Model Context Protocol (MCP) server for Brazilian Electronic Invoicing (NF-e / NFC-e, modelo 55/65, schema 4.00). Provides CPF/CNPJ validation tools, with NF-e/NFC-e generation and SEFAZ integration planned.
README
mcp-nfe-br 🇧🇷
<!-- mcp-name: io.github.cmendezs/mcp-nfe-br -->
Introdução
mcp-nfe-br é um servidor MCP (Model Context Protocol) que fornece ferramentas para a emissão e validação de documentos fiscais eletrônicos brasileiros: NF-e (modelo 55) e NFC-e (modelo 65), conforme o leiaute XML versão 4.00 da SEFAZ. Este servidor faz parte da família mcp-einvoicing-* / mcp-*-*, construída sobre mcp-einvoicing-core, que fornece o modelo de dados base, utilitários HTTP/OAuth2, e a infraestrutura comum de servidores MCP.
Status atual (v0.2.0): fase 1 do roadmap — validação de CPF/CNPJ, geração de XML NF-e/NFC-e (não assinado) e validação contra o XSD oficial (PL_010d, variante sem assinatura). Assinatura digital ICP-Brasil e integração com os webservices da SEFAZ estão planejadas para versões futuras — os documentos gerados são não assinados e não são transmitidos à SEFAZ por este servidor. NFS-e (nota fiscal de serviços) e CT-e (conhecimento de transporte) são fases posteriores, fora do escopo desta versão.
English summary
mcp-nfe-br is an MCP (Model Context Protocol) server providing tools for Brazilian electronic fiscal documents: NF-e (modelo 55) and NFC-e (modelo 65), per SEFAZ XML schema 4.00. It is part of the mcp-*-* family built on mcp-einvoicing-core.
Current status (v0.2.0): Phase 1 of the roadmap — CPF/CNPJ tax-ID validation, unsigned NF-e/NFC-e XML generation, and XSD validation against the official PL_010d schema (unsigned variant). ICP-Brasil digital signing and SEFAZ webservice submission are planned for future releases — generated documents are unsigned and are not transmitted to SEFAZ by this server. NFS-e and CT-e are later phases, out of scope for this version.
Instalação
Requisitos
- Python ≥ 3.11
mcp-einvoicing-core(instalado automaticamente como dependência)
Usando uv (recomendado)
uv add mcp-nfe-br
Usando pip
pip install mcp-nfe-br
A partir do código-fonte
git clone https://github.com/cmendezs/mcp-nfe-br.git
cd mcp-nfe-br
uv sync --all-extras
Configuração
Adicione o servidor à configuração do seu cliente MCP. Para o Claude Desktop, edite claude_desktop_config.json:
{
"mcpServers": {
"nfe-br": {
"command": "uvx",
"args": ["mcp-nfe-br"]
}
}
}
Para uma instalação local de desenvolvimento:
{
"mcpServers": {
"nfe-br": {
"command": "uv",
"args": ["run", "mcp-nfe-br"],
"cwd": "/path/to/mcp-nfe-br"
}
}
}
Variáveis de ambiente
| Variável | Descrição | Padrão |
|---|---|---|
SEFAZ_ENV |
Ambiente SEFAZ: producao ou homologacao |
homologacao |
LOG_LEVEL |
Nível de log: DEBUG, INFO, WARNING, ERROR |
INFO |
Ferramentas disponíveis
br__validate_cpf
Valida um CPF (Cadastro de Pessoas Físicas) — número de identificação fiscal de pessoa física, conforme o algoritmo módulo 11 da Receita Federal.
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
cpf |
string |
sim | CPF com ou sem separadores ./- |
Retorna um TaxIdValidationResult com valid=True e o valor limpo (11 dígitos) em caso de sucesso, ou valid=False com mensagem de erro em português.
br__validate_cnpj
Valida um CNPJ (Cadastro Nacional da Pessoa Jurídica) — número de identificação fiscal de pessoa jurídica. Aceita tanto o formato numérico tradicional (14 dígitos) quanto o formato alfanumérico introduzido pela NT 2026.004 (PL_010d), com vigência em homologação a partir de 2026-06-01 e em produção a partir de 2026-07-01.
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
cnpj |
string |
sim | CNPJ com ou sem separadores .///- |
Retorna um TaxIdValidationResult com valid=True e o valor limpo (14 caracteres) em caso de sucesso, ou valid=False com mensagem de erro em português.
⚠️ [Unverified]: o algoritmo de dígito verificador para o formato alfanumérico do CNPJ foi implementado com base em fontes secundárias, pois a fonte primária ("NT Conjunta DFe 2025.001") ainda não está disponível localmente. Veja
context-library/countries/br.mdpara detalhes.
br__generate_nfe
Gera um documento NF-e/NFC-e 4.00 não assinado (<NFe><infNFe>…</infNFe></NFe>) a partir de um objeto BRInvoice.
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
invoice |
object |
sim | Documento BRInvoice (modelo 55 ou 65, grupos ide/emit/dest/det/total/transp/pag) |
Retorna {"xml": ..., "chave_acesso": ..., "warnings": [...]}. Os avisos em português lembram que o documento não está assinado (ICP-Brasil) e não foi transmitido à SEFAZ — ambas as etapas ficam a cargo de um processo separado.
Cobertura da fase 1 para os grupos de tributos por item:
| Tributo | Códigos suportados | Comportamento |
|---|---|---|
| ICMS | CST 00 (regime normal) ou CSOSN 102 (Simples Nacional) |
outros códigos geram DocumentGenerationError |
| PIS/COFINS | CST 01/02 (alíquota) ou 04-09 (não tributado) |
grupo omitido se pis_cst/cofins_cst forem None |
| IPI | CST 00/49/50/99 (tributado) ou outro (não tributado) |
grupo omitido se ipi_cst for None |
[NEED: IBS/CBS/Imposto Seletivo — Grupo UB/W03 (NT 2025.002-RTC) ainda não modelado, ver context-library/countries/br.md "Known gaps"].
br__validate_nfe_xml
Valida um XML NF-e/NFC-e 4.00 contra o XSD oficial PL_010d (variante local "sem assinatura" — veja nota abaixo).
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
xml_content |
string |
não* | XML como string |
xml_base64 |
string |
não* | XML codificado em base64 |
* Exatamente um de xml_content/xml_base64 deve ser informado.
Retorna {"valid": bool, "errors": [...], "metadata": {"schema_version": ...}}.
[Inference]: o XSD oficial (
nfe_v4.00.xsd/leiauteNFe_v4.00.xsd, PL_010d) exige<ds:Signature>como filho obrigatório de<NFe>. Como a fase 1 gera documentos não assinados, esta ferramenta valida contra uma cópia derivada local (nfe_v4.00_unsigned.xsd) onde<ds:Signature>passou a ser opcional (minOccurs="0"). A validação de documentos assinados (fase futura) deve usar o XSD oficial sem modificações.
br__build_access_key
Monta uma chave de acesso (chNFe, 44 caracteres) com dígito verificador módulo 11, a partir dos componentes cUF, dhEmi, CNPJ do emitente, modelo, série e número do documento.
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
c_uf |
string |
sim | Código IBGE da UF (2 dígitos) |
dh_emi |
string |
sim | Data/hora de emissão (ISO 8601) |
cnpj |
string |
sim | CNPJ do emitente (numérico ou alfanumérico PL_010d) |
modelo |
string |
sim | 55 (NF-e) ou 65 (NFC-e) |
serie |
string |
sim | Série do documento |
nnf |
string |
sim | Número do documento |
tp_emis |
string |
não | Forma de emissão (padrão "1") |
c_nf |
string |
não | Código numérico aleatório (cNF, 8 dígitos); gerado automaticamente se omitido |
Retorna {"chave_acesso": ..., "cnf": ...}.
Arquitetura
mcp-nfe-br/
├── src/
│ └── mcp_nfe_br/
│ ├── __init__.py
│ ├── server.py # ponto de entrada MCP e registro de ferramentas
│ ├── models/
│ │ ├── __init__.py
│ │ └── invoice.py # BRInvoice, BRInvoiceLine, NFeModelo, TipoOperacao
│ ├── standards/
│ │ ├── __init__.py
│ │ └── nfe_generator.py # NFeGenerator — gera NF-e/NFC-e 4.00 não assinada
│ ├── validators/
│ │ ├── __init__.py
│ │ └── nfe_xsd.py # NFeXSDValidator — valida contra XSD PL_010d (variante sem assinatura)
│ ├── schemas/nfe/ # XSDs bundled (oficiais + variantes "_unsigned")
│ ├── tools/
│ │ ├── __init__.py
│ │ ├── validation.py # br__validate_cpf, br__validate_cnpj
│ │ └── generation.py # br__generate_nfe, br__validate_nfe_xml, br__build_access_key
│ └── utils/
│ ├── __init__.py
│ ├── document_ids.py # validate_cpf, validate_cnpj
│ └── access_key.py # build_access_key, access_key_check_digit
├── tests/
│ ├── conftest.py
│ ├── fixtures/
│ ├── test_tools/
│ │ ├── test_validation.py
│ │ └── test_generation.py
│ ├── test_standards/
│ │ └── test_nfe_generator.py
│ ├── test_validators/
│ │ └── test_nfe_xsd.py
│ └── test_utils/
│ └── test_access_key.py
├── specs/nfe/ # material normativo (XSDs, MOC, Notas Técnicas — não publicado)
├── audit/
│ ├── audit_vs_core.py
│ └── report.json
├── .github/workflows/publish.yml
├── pyproject.toml
├── RELEASE.md
└── LICENSE
Relação com mcp-einvoicing-core
mcp-einvoicing-core fornece:
- Modelos Pydantic base para faturas, partes, itens e resultados de validação (
InvoiceDocument,InvoiceLineItem,TaxIdValidationResult) - Infraestrutura comum de servidor MCP (
EInvoicingMCPServer) - Cliente HTTP/OAuth2, cache de tokens, logging estruturado, hierarquia de exceções
mcp-nfe-br adiciona a lógica específica do Brasil:
BRInvoice(extensão deInvoiceDocument— NF-e/NFC-e não tem ascendência EN 16931)- Campos de Grupo I (NCM, CFOP, ICMS/IPI/PIS/COFINS) em
BRInvoiceLine - Validação de CPF/CNPJ (incluindo o CNPJ alfanumérico da NT 2026.004)
Contribuindo
Contribuições são bem-vindas. Abra uma issue para discutir mudanças significativas antes de enviar um pull request.
git clone https://github.com/cmendezs/mcp-nfe-br.git
cd mcp-nfe-br
uv sync --all-extras
uv run pytest
uv run ruff check src/mcp_nfe_br tests audit
uv run mypy src/mcp_nfe_br
Outros servidores MCP de faturamento eletrônico
| País | Servidor |
|---|---|
| 🌍 Global | mcp-einvoicing-core |
| 🇧🇪 Bélgica | mcp-einvoicing-be |
| 🇧🇷 Brasil | mcp-nfe-br |
| 🇫🇷 França | mcp-facture-electronique-fr |
| 🇩🇪 Alemanha | mcp-einvoicing-de |
| 🇮🇹 Itália | mcp-fattura-elettronica-it |
| 🇵🇱 Polônia | mcp-ksef-pl |
| 🇪🇸 Espanha | mcp-facturacion-electronica-es |
Licença
Este projeto está licenciado sob Apache 2.0 — veja LICENSE para detalhes.
Changelog
Veja RELEASE.md para o histórico completo de versões.
推荐服务器
Baidu Map
百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。
Playwright MCP Server
一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。
Magic Component Platform (MCP)
一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。
Audiense Insights MCP Server
通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。
VeyraX
一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。
graphlit-mcp-server
模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。
Kagi MCP Server
一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。
e2b-mcp-server
使用 MCP 通过 e2b 运行代码。
Neon MCP Server
用于与 Neon 管理 API 和数据库交互的 MCP 服务器
Exa MCP Server
模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。