API de CNPJ para agentes
Conecte Claude, Cursor, Windsurf ou um agente OpenAI à base de empresas do Brasil pelo MCP oficial: consultar, buscar, gerar filtro e ver uso.
Um agente que precisa saber se uma empresa existe, o que ela faz, onde está e como contatá-la resolve isso com quatro ferramentas MCP sobre a base da Receita Federal de agosto/2026: consultar_cnpj, buscar_empresas, gerar_filtro e ver_uso. A chave é a mesma da API REST, o custo em créditos é o mesmo, e consulta, busca e filtro trazem a data da base em meta.data_as_of.
O fluxo em três passos
-
Crie a chave e cole no cliente
Uma chave da conta, no header Authorization. Claude Code, Cursor e Windsurf conectam direto ao servidor remoto; Claude Desktop pela ponte mcp-remote.
claude mcp add --transport http cnpjia https://mcp.cnpj.ia.br \ --header "Authorization: Bearer $CNPJIA_KEY" -
Deixe o agente perguntar em português
gerar_filtro transforma a pergunta em filtros da busca; buscar_empresas pagina por cursor; consultar_cnpj traz o cadastro ou o perfil completo.
"Liste padarias ativas em Curitiba optantes do Simples e me diga quantas são." -
Controle o gasto pelo próprio agente
ver_uso devolve franquia, consumo e reset. A chave fica no cliente; o agente não compra créditos nem muda de plano.
ver_uso → credits_remaining, cycle_reset_at, rpm
Código pronto
O servidor é remoto e fala HTTP. A configuração muda por cliente; a chave fica sempre do lado do agente.
Claude Code
claude mcp add --transport http cnpjia https://mcp.cnpj.ia.br \
--header "Authorization: Bearer $CNPJIA_KEY"
Cursor
{
"mcpServers": {
"cnpjia": {
"url": "https://mcp.cnpj.ia.br",
"headers": { "Authorization": "Bearer cnpj_live_..." }
}
}
}
OpenAI
import os
from openai import OpenAI
client = OpenAI()
resp = client.responses.create(
model="gpt-5",
tools=[{
"type": "mcp",
"server_label": "cnpjia",
"server_url": "https://mcp.cnpj.ia.br",
"headers": {"Authorization": f"Bearer {os.environ['CNPJIA_KEY']}"},
"require_approval": "never",
}],
input="Quantas empresas de software ativas existem em Florianópolis?",
)
print(resp.output_text)
Claude Desktop não aceita servidor remoto com header no arquivo local de configuração; a ponte mcp-remote resolve. Windsurf usa serverUrl no lugar de url. Os quatro casos estão em Servidor MCP.
O que o agente passa a responder
- “Qual é a situação cadastral e o CNAE principal do CNPJ 00.000.000/0001-91?” →
consultar_cnpjembasic. - “Me dá o telefone e os sócios do Banco do Brasil.” →
consultar_cnpjemfull. - “Quantas empresas de software ativas existem em Florianópolis?” →
gerar_filtroe depoisbuscar_empresas; a primeira página já traz a contagem com teto emmeta.total_count_capped. - “Quantos créditos ainda tenho este mês?” →
ver_uso.
O agente decide o perfil a partir do pedido. Se quiser economizar, oriente no prompt do sistema a usar basic e só pedir full quando has_phone ou has_email vierem verdadeiros.
Campos mais usados
| Campo | Perfil | Descrição |
|---|---|---|
razao_social | basic | Nome empresarial registrado na Receita Federal. É o único nome sempre presente. |
situacao_cadastral.descricao | basic | Descrição da situação cadastral, traduzida do código pela tabela de domínio da Receita Federal. |
cnae_fiscal.descricao | basic | Nome da atividade econômica principal, traduzido do código pela tabela de CNAEs da Receita Federal. |
endereco.uf | basic | Sigla da unidade da federação do estabelecimento, campo da Receita Federal. |
has_phone | basic | Indica se a empresa tem pelo menos um telefone na base. Sinal derivado, calculado no processamento da Oportunidados. |
telefones[].numero | full | Número do telefone, sem DDD e sem pontuação, cadastrado na Receita Federal. |
email | full | Endereço de correio eletrônico do contribuinte, campo da Receita Federal. null quando a empresa não tem e-mail na base. |
meta.total_count_capped | meta | Contagem total da coorte com teto de exibição, em texto (por exemplo 10000+). Tem cache de 1 hora. |
Limites que o agente precisa respeitar
- O limite de requisições por minuto é da conta, somando agente e API REST. Um agente em loop chega a
rate_limited; a resposta trazRetry-Aftere o agente deve esperar. buscar_empresasestá nos planos pagos. No Free a ferramenta aparece emtools/list, mas respondeinsufficient_plancom um link para os planos, sem consumir crédito.- Chave revogada é recusada pela API na próxima chamada e pelo MCP em até 60 segundos.
Tier indicado
Starter é o plano indicado: o de menor mensalidade entre os que incluem a busca de empresas.
O Free não atende a este fluxo porque não inclui a busca de empresas.
- 15 mil créditos por mês
- 30 requisições por minuto
- R$ 0,0196 por consulta
full - R$ 0,0033 por empresa retornada na busca
Perguntas frequentes
Preciso de OAuth para conectar o agente?
Não. O servidor aceita a chave da conta no header Authorization: Bearer, a mesma da API REST. Não há fluxo OAuth nem token separado para o MCP.
Funciona com Claude Desktop, Cursor, Windsurf e agentes OpenAI?
Claude Code, Cursor e Windsurf conectam direto ao servidor remoto. Claude Desktop precisa da ponte mcp-remote, porque o arquivo local de configuração só aceita servidores locais. Agentes construídos com a Responses API da OpenAI usam a ferramenta mcp com server_url e headers.
O agente pode comprar créditos ou mudar meu plano?
Não. As ferramentas são consulta, busca, geração de filtro e leitura de uso. Compra de pacote e troca de plano acontecem no portal, por uma pessoa autenticada.
Quanto custa uma pergunta do agente?
O mesmo que a chamada HTTP equivalente: consultar em basic ou full, buscar por empresa retornada, gerar filtro por chamada, ver uso sem custo. Os pesos estão em /precos e o agente vê o saldo com ver_uso.
A busca funciona no plano Free?
Não. buscar_empresas está nos planos pagos; no Free ela responde insufficient_plan com um link para os planos, sem consumir crédito. Consulta, geração de filtro e uso funcionam no Free.
Os dados que o agente recebe são atuais?
São a foto mensal dos dados abertos da Receita Federal, com a data em meta.data_as_of de toda resposta de consulta e busca. Uma alteração cadastral feita hoje aparece na próxima carga mensal; o agente pode informar a data ao usuário.
Para continuar
Atualizado em