Skip to main content
Glama
MCP NFS-e

MCP NFS-e

by batilieri

MCP NFS-e (ISSWeb / Fiorilli)

Servidor MCP (Model Context Protocol) para buscar, baixar, consultar e (em breve) emitir Notas Fiscais de Serviço eletrônicas (NFS-e) em prefeituras que usam o sistema ISSWeb da Fiorilli — padrão nacional (com IBS/CBS).

Multiempresa: cada empresa/escritório configura o próprio login e senha e passa a buscar e baixar suas notas de forma segura e prática. Feito para escritórios de contabilidade gerenciarem vários clientes. Pode ser acionado por IA (Claude) ou por scripts. Padrão: Ariquemes/RO — adaptável a outras cidades que usem o mesmo sistema.

Estado atual

Recurso

Status

Buscar/listar NFS-e por período (portal)

✅ Pronto e testado

Baixar XML + DANFSe (PDF) de uma nota ou de um período inteiro

✅ Pronto e testado

Consultar dados completos por chave de acesso (WebService)

✅ Pronto e testado

Buscar empresa por CNPJ

✅ Pronto e testado

Multi-cliente (vários clientes, cada um com seu login)

✅ Pronto

Emitir (lançar) NFS-e

🚧 Em construção — modo PREVIEW, nunca salva

🔒 Segurança: tudo é somente leitura. A emissão está sendo construída em modo preview (preenche os campos mas não salva no portal); o salvar real exigirá dupla trava (NFSE_PERMITIR_EMISSAO=true + confirmar: true).

Related MCP server: Prefeitura MT Cuiabá: NFS-e

Como funciona

  • Portal (Playwright): faz login com usuário/senha e usa a tela de pesquisa para listar as notas de um período e baixar o XML de cada uma e a DANFSe (PDF).

  • WebService Nacional: consulta aberta (sem login) pela chave de acesso — devolve o XML completo no layout nacional.

Instalação

npm install
npx playwright install chromium

Configuração

1 empresa — .env

Copie .env.example para .env:

NFSE_USUARIO=seu_usuario_do_portal
NFSE_SENHA=sua_senha_do_portal
NFSE_CNPJ=00000000000000
NFSE_INSCRICAO_MUNICIPAL=

Vários clientes — clientes.json (contabilidade)

Copie clientes.example.json para clientes.json (fica fora do Git):

{
  "cliente_a": { "nome": "Empresa A",  "usuario": "...", "senha": "...", "cnpj": "...", "im": "..." },
  "cliente_b": { "nome": "Empresa B",  "usuario": "...", "senha": "...", "cnpj": "...", "im": "..." }
}

Depois é só passar empresa: "cliente_a" nas ferramentas.

Ferramentas MCP

Ferramenta

O que faz

nfse_buscar_notas

Lista as NFS-e de um período (portal)

nfse_baixar_nota

Baixa XML + DANFSe (PDF) de uma nota

nfse_baixar_periodo

Baixa o XML (e opcionalmente a DANFSe) de todas as notas do período

nfse_consultar_por_chave

Dados completos da nota pela chave (WebService)

nfse_obter_xml

XML bruto (layout nacional) pela chave

nfse_consultar_por_numero / nfse_consultar_por_id_dps

Consultas alternativas (WebService)

nfse_consultar_cnpj

Dados cadastrais de uma empresa por CNPJ

nfse_listar_empresas

Lista os clientes do clientes.json

nfse_status

Testa a conexão com o WebService

Todas as ferramentas de portal aceitam empresa (multi-cliente, opcional).

Teste rápido (sem MCP)

# Listar notas de um período (precisa de login/senha no .env):
node scripts/pesquisar-teste.js 01/08/2026 31/08/2026

# Baixar XML + DANFSe de uma nota:
node scripts/baixar-teste.js 5 2026-08-01 2026-08-31

# Consultar pela chave (WebService, sem login):
node scripts/testar-conexao.js 11000231268076089000103000000000000526085425791624

Uso como MCP

Claude Desktop — claude_desktop_config.json

{
  "mcpServers": {
    "nfse": {
      "command": "node",
      "args": ["CAMINHO_DO_PROJETO/src/index.js"],
      "env": { "NFSE_USUARIO": "usuario", "NFSE_SENHA": "senha" }
    }
  }
}

Claude Code (CLI)

claude mcp add nfse --env NFSE_USUARIO=usuario --env NFSE_SENHA=senha -- node "CAMINHO_DO_PROJETO\src\index.js"

Segurança

  • Credenciais ficam no .env/clientes.json de cada instalação — nunca vão para o Git.

  • Tudo é read-only; a emissão fica travada (preview) até liberação explícita.

  • Ferramenta não oficial, sem vínculo com a Prefeitura ou com a Fiorilli.

Estrutura

src/
  index.js            servidor MCP (10 ferramentas)
  config.js           configuração multiempresa
  clientes.js         gestão multi-cliente (clientes.json)
  cnpj.js             busca de empresa por CNPJ
  soap-client.js      cliente SOAP + parser
  nacional.js         envelopes do WebService Nacional
  parse-nfse.js       XML nacional -> JSON limpo
  consultar.js        camada de consulta (WebService)
  portal/
    login.js          login no portal (Playwright)
    pesquisar.js      lista notas por período
    baixar.js         baixa XML + DANFSe (nota ou período)
scripts/
  pesquisar-teste.js  testa a listagem
  baixar-teste.js     testa o download de uma nota
  testar-conexao.js   testa a consulta (WebService)
  testar-mcp.js       smoke test do protocolo MCP
  inspecionar-portal.js  mapeia campos de uma tela do portal

Roadmap

  1. Emissão (preview → real): preencher a tela de emissão (tomador por CNPJ, serviço, valores) e salvar só com a dupla trava de segurança.

  2. Paginação no download em lote (períodos com muitas notas).

  3. Multicidade: catálogo de prefeituras ISSWeb/Fiorilli.

Available Tools

10 tools
nfse_baixar_notaBaixar XML de uma NFS-eA

Baixa o XML e a DANFSe (PDF) de uma nota (pelo numero). Precisa do periodo que contem a nota.

Inputs: numero (required), dataFinal (required), dataInicial (required), destino, +3 more.

nfse_baixar_periodoBaixar XML de todas as NFS-e de um periodoA

Baixa, em lote, o XML de todas as notas de um periodo para uma pasta. Ideal para escritorios de contabilidade fecharem a competencia de um cliente.

Inputs: dataFinal (required), dataInicial (required), destino, empresa, +2 more.

nfse_buscar_notasBuscar/listar NFS-e por periodo (portal)B

Lista as NFS-e emitidas num periodo, direto no portal da prefeitura (login/senha). Datas em AAAA-MM-DD ou dd/MM/aaaa. Filtro opcional por faixa de numero. Ideal para escritorios de contabilidade baixarem as notas de um cliente.

Inputs: dataFinal (required), dataInicial (required), empresa, numeroFinal, +2 more.

nfse_consultar_cnpjConsultar dados de empresa por CNPJA

Busca os dados cadastrais de uma empresa pelo CNPJ (razao social, endereco, etc.) em base publica. Util para preencher os dados do tomador antes da emissao.

Inputs: cnpj (required).

nfse_consultar_por_chaveConsultar NFS-e por chave de acessoA

Consulta uma NFS-e pela chave de acesso (50 digitos, aceita com ou sem espacos). Metodo mais confiavel. Retorna todos os dados da nota.

Inputs: chave (required).

nfse_consultar_por_id_dpsConsultar NFS-e por Id do DPSA

Consulta uma NFS-e pelo Id do DPS (ex.: "DPS1100023...").

Inputs: idDps (required).

nfse_consultar_por_numeroConsultar NFS-e por numero/serie (DPS)A

Consulta uma NFS-e pelo numero do DPS (e serie) do prestador configurado. Observacao: para notas emitidas pelo portal, prefira a consulta por chave.

Inputs: numero (required), serie.

nfse_listar_empresasListar empresas cadastradas (multi-cliente)A

Lista as empresas configuradas no clientes.json, sem expor as senhas.

Inputs: no named parameters.

nfse_obter_xmlObter XML da NFS-eA

Retorna o XML bruto (bloco NFSe, layout nacional) de uma nota pela chave de acesso.

Inputs: chave (required).

nfse_statusStatus / testar conexaoA

Mostra a configuracao e testa a conexao com o WebService Nacional de NFS-e de Ariquemes. A consulta e aberta (nao exige login nem certificado).

Inputs: no named parameters.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    A3.9/5.0

    Scored across 10 tools

    Disambiguation5/5

    Each tool serves a distinct purpose: status check, query by different identifiers (key, number, ID DPS), raw XML retrieval, CNPJ lookup, listing and downloading notes by period, and listing configured companies. Overlap is minimal and descriptions clarify differences, so an agent can readily select the correct tool.

    Naming Consistency4/5

    All tools follow a consistent `nfse_` prefix and snake_case, but the verb usage varies (consultar, obter, buscar, baixar, listar, status). While readable and predictable, there is slight inconsistency in how similar actions are named (e.g., consultar vs. buscar).

    Tool Count5/5

    With exactly 10 tools, the server is well-scoped for its purpose—covering status, queries, downloads, and configuration listing without redundancy. This is within the ideal 3–15 range and each tool earns its place.

    Completeness4/5

    The tool surface covers the core lifecycle of consulting and downloading NFS-e documents, including CNPJ lookup and bulk period downloads. The only notable gap is the lack of an emission (create) tool, but the server appears intentionally read-only for accounting use cases, so this is acceptable.

    Related MCP Connectors

    Related MCP Servers