Skip to Content
API de integração — v1
Servidor MCP

Servidor MCP

Conecte seu assistente de IA (ChatGPT, Claude, Cursor…) à sua conta do Conttrole e emita notas fiscais conversando: “emita uma NFS-e de R$ 500 para o cliente X”. O assistente cria, emite, consulta, cancela e gera CC-e — falando direto com a sua conta via Model Context Protocol .

🔗 Servidor remoto, hospedado: https://mcp.conttrole.io — nada para instalar. Conecte por OAuth (login no navegador, sem manusear chave).

Conectar (OAuth — recomendado)

Ao conectar, o cliente de IA abre o login do Conttrole no navegador, você escolhe a empresa e autoriza as permissões. Pronto — sem chave, sem configuração de arquivo.

ChatGPT

Em Configurações → Conectores (modo desenvolvedor / planos com suporte a MCP), adicione um conector com a URL:

https://mcp.conttrole.io

Claude (claude.ai e Claude Desktop)

Em Configurações → Conectores → Adicionar conector personalizado, informe a URL:

https://mcp.conttrole.io

Cursor

No ~/.cursor/mcp.json (ou Settings → MCP):

{ "mcpServers": { "conttrole": { "url": "https://mcp.conttrole.io" } } }

Claude Code (CLI)

claude mcp add --transport http conttrole https://mcp.conttrole.io

Em todos, na primeira conexão o cliente abre o fluxo de login + autorização.

Autenticação por chave (alternativa)

Prefere não usar OAuth? Os clientes que permitem header customizado podem autenticar com uma chave de API (ck_live_...):

Authorization: Bearer ck_live_xxxxxxxxxxxx

Os escopos da chave valem aqui — uma ferramenta só funciona se a chave (ou a autorização OAuth) tiver o escopo correspondente (ex.: documents:write).

Ferramentas disponíveis

FerramentaO que faz
list_fiscal_documentsLista documentos (filtra por status/tipo).
get_fiscal_documentDetalha um documento pelo id.
create_fiscal_documentCria um documento; emit=true já emite.
emit_fiscal_documentDispara a emissão (assíncrona).
cancel_fiscal_documentCancela um documento autorizado (com justificativa).
correct_fiscal_documentEmite uma Carta de Correção (CC-e).
get_fiscal_document_xmlBaixa o XML autorizado.
list_tax_rulesLista as regras tributárias.
list_products / get_productLista / detalha produtos, com a tributação própria de cada um.
create_product / update_productCadastra / altera um produto e a tributação dele (exige products:write). O id vai em productId no item da nota.
list_webhooks / create_webhookGerencia webhooks.
list_finance_titlesLista parcelas a receber/pagar (vencidas, a vencer, faixas de atraso).
get_finance_summaryTotais em aberto e aging de um lado.
get_finance_titleFicha de um título, com o histórico de baixas.
create_finance_titleLança uma conta a receber ou a pagar.
settle_finance_installmentDá baixa numa parcela.
list_overdue_receivablesContas vencidas, na ordem de cobrança.
top_delinquent_clientsQuem mais deve, agrupado por cliente.
cashflow_projectionProjeção de caixa por vencimento.
list_received_documentsNotas RECEBIDAS (emitidas contra o CNPJ pelos fornecedores); pending=true = fila de manifestação.
get_received_document / get_received_document_xmlDetalha / baixa o XML de uma nota recebida.
manifest_received_documentManifesta a nota perante a SEFAZ (Ciência, Confirmação, Desconhecimento, Operação não realizada).
sync_received_documents / get_received_documents_distributionBusca notas novas agora / estado da busca (e quando a SEFAZ permite a próxima).
get_received_documents_export_linkDownload em lote: todas as notas recebidas de um mês num ZIP. Devolve um link (15 min) para abrir no navegador — no modo contador, também da carteira inteira (portfolio: true) ou de várias empresas (companyIds).
get_accounting_officeModo contador: o escritório e os escopos da chave.
list_portfolio_companiesModo contador: as empresas-cliente com vínculo ativo.
list_closing_eligible_companiesModo contador: quem tem nota no mês.
request_fiscal_closingsModo contador: pede o fechamento do mês (um ZIP por empresa).
list_fiscal_closings / get_fiscal_closing_downloadModo contador: acompanha os fechamentos / link de download do ZIP.

As oito de financeiro exigem o escopo finance:read/finance:write e o módulo Financeiro contratado — ver Escopos. Elas são as mesmas leituras que o assistente dentro do app executa, sobre o mesmo cálculo: o número que o ChatGPT responde é o número que a tela mostra.

Notas recebidas e o modo contador

As ferramentas de notas recebidas exigem o escopo received-documents:read (e received-documents:write para manifestar), que não vêm na “chave sem escopos”. Manifestar não tem desfazer — a descrição da ferramenta pede ao agente que confirme com você antes de recusar uma nota.

Escritórios de contabilidade usam a chave do escritório (ok_live_..., criada no Painel do Contador → Configurações) no lugar da chave da empresa. Com ela funcionam as ferramentas marcadas como modo contador e as de notas recebidas com companyId — a empresa da carteira. Sem companyId, as de notas recebidas usam a empresa da chave, e por isso só funcionam com a chave de uma empresa. O servidor remoto por OAuth autoriza uma empresa por vez; para o modo contador, configure a chave do escritório no header Authorization.

Exemplo: “Quais clientes da carteira têm nota para manifestar?” — o agente chama list_portfolio_companies e, para cada empresa, list_received_documents com companyId e pending: true.

Exemplo: “Me manda as notas recebidas de agosto de todos os clientes” — o agente chama get_received_documents_export_link com portfolio: true e devolve o link do ZIP (uma pasta por empresa). O link vale 15 minutos e deixa de funcionar na hora se a chave for revogada ou a empresa sair da carteira.

O que cabe em create_fiscal_document

Além dos itens, ela aceita pagamento (payments), parcelamento (duplicates), transporte e frete (transport), desconto da nota (discountValue), cliente inline (client, cria ou reusa o cliente junto da nota), finalidade e documentos referenciados (fiscalPurpose, references, isDevolution), local de entrega e retirada (places), pedido de compra e, na NFS-e, competência, município da prestação, dedução em valor, obra e substituição. No item entram os acessórios (freightValue, insuranceValue, otherValue, discountValue), os impostos, os parâmetros de ICMS-ST, a desoneração e os lotes.

O total da nota não é o total dos itens. Frete, seguro e outras despesas somam, e o desconto abate. É esse valor que a soma de duplicates precisa fechar exatamente — diferença de um centavo é recusada.

O que não está no schema da ferramenta entra por extra, um objeto que é repassado à API como está: é por ali que vão os grupos raros (ajustes de IBS/CBS, ICMS-ST retido anteriormente, notas de crédito/débito da RTC, comExt da NFS-e e o intermediador). A referência completa dos campos está no OpenAPI .

Exemplo

“Crie uma NFS-e para o cliente cli_123 com um item de consultoria de R$ 500 e já emita.”

O agente chama create_fiscal_document (emit=true), recebe o runId e acompanha o status com get_fiscal_document.

Servidor local (avançado)

Quem usa Claude Desktop, Cursor ou Claude Code e prefere rodar o servidor na própria máquina (stdio) pode usar o pacote @conttrole/mcp:

{ "mcpServers": { "conttrole": { "command": "npx", "args": ["-y", "@conttrole/mcp"], "env": { "CONTTROLE_API_KEY": "ck_live_xxxxxxxx" } } } }

Ele expõe as mesmas ferramentas do servidor remoto, com os mesmos campos — inclusive produtos, financeiro, notas recebidas e o modo contador (com a chave do escritório, ok_live_..., em CONTTROLE_API_KEY). Até set/2026 ele tinha 11 das 23, e nada dizia isso: quem o instalava ficava sem produtos nem financeiro.

Para a maioria dos casos, o servidor remoto acima é mais simples (sem instalar nada, com OAuth) e funciona também na web (ChatGPT, claude.ai).

Last updated on