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.
Recommended Servers
playwright-mcp
A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.
Magic Component Platform (MCP)
An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.
Audiense Insights MCP Server
Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.
VeyraX MCP
Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.
graphlit-mcp-server
The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.
Kagi MCP Server
An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.
E2B
Using MCP to run code via e2b.
Neon Database
MCP server for interacting with Neon Management API and databases
Qdrant Server
This repository is an example of how to create a MCP server for Qdrant, a vector search engine.
Exa Search
A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.