Brazil CNPJ company registry
Brazil's open CNPJ registry: filter and count companies by sector, place, size, MEI, partners.
Should I use this
Quality & Safety
Findings (1)
- LOWin list_partners
Based on automated analysis of tool definitions and protocol compliance.
Context Cost
This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.
Install
One-Click Install
Add this to your `claude_desktop_config.json` file:
{
"mcpServers": {
"cnpj-mcp": {
"url": "https://cnpj-mcp.fly.dev/mcp"
}
}
}Remote endpoints
https://cnpj-mcp.fly.dev/mcpstreamable-httpWhat it can do
Tool inventory
Tools (8)
⚪dataset_info
What data is loaded: source, snapshot month, row counts, field meanings and caveats. Call first if unsure what the tools cover.
Input Schema
{
"type": "object",
"properties": {},
"title": "dataset_infoArguments"
}🟡search_companies(cnae, cnae_secao, include_secondary, uf, municipio, ...)
Find companies/establishments matching filters. Filters (all optional, combined with AND): cnae (CNAE code or prefix, e.g. '4711' or '47', list ok; add include_secondary to also match secondary activities), cnae_secao (letter A-U), uf, municipio (name as in Receita, accents ignored), municipio_codigo, situacao (ativa, baixada, suspensa, inapta, nula), matriz_only, porte (micro = ME, pequeno = EPP, demais, nao_informado), natureza_juridica (code prefix like '2062' or text like 'sociedade limitada'), capital_min/capital_max (BRL), opened_from/opened_to (data_inicio_atividade, YYYY-MM or YYYY-MM-DD), closed_from/closed_to (data da baixa), mei, simples (true/false), name_contains (razao social or nome fantasia), cep, partner_name (a partner's name contains this text). Returns up to 100 rows per page, ordered by opening date (newest first) unless order_by is capital_social or razao_social. Use count_companies for 'how many' questions. Set include_contacts to add email, phones, full address and a registry_contact_quality block (0-100 score of how likely the REGISTERED email/phone from Receita is a real direct contact, with the signals behind it; it says nothing about the website) and, when the company's own website was crawled, a separate website_contacts block (WhatsApp, phones, emails, social profiles found on its public pages, each with source_url). min_contact_score keeps only companies whose REGISTERED contact (the email and phones on the Receita record, not the website) scores at or above it. Pass an integer 0-100, or a tier name: 'high' = 85, 'medium' = 50, 'low' = 0 (e.g. min_contact_score=50 or 'medium' for medium and high). The filter is applied after the page is read, so a call scans at most 2000 candidates and returns pagination.next_offset to continue.
Input Schema
{
"type": "object",
"properties": {
"cnae": {
"anyOf": [
{
"items": {
"type": "string"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"title": "Cnae"
},
"cnae_secao": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Cnae Secao"
},
"include_secondary": {
"default": false,
"title": "Include Secondary",
"type": "boolean"
},
"uf": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Uf"
},
"municipio": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Municipio"
},
"municipio_codigo": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Municipio Codigo"
},
"situacao": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Situacao"
},
"matriz_only": {
"default": false,
"title": "Matriz Only",
"type": "boolean"
},
"porte": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Porte"
},
"natureza_juridica": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Natureza Juridica"
},
"capital_min": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"title": "Capital Min"
},
"capital_max": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"title": "Capital Max"
},
"opened_from": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Opened From"
},
"opened_to": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Opened To"
},
"closed_from": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Closed From"
},
"closed_to": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Closed To"
},
"mei": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"default": null,
"title": "Mei"
},
"simples": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"default": null,
"title": "Simples"
},
"name_contains": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Name Contains"
},
"cep": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Cep"
},
"partner_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Partner Name"
},
"order_by": {
"default": "data_inicio_atividade",
"title": "Order By",
"type": "string"
},
"include_contacts": {
"default": false,
"title": "Include Contacts",
"type": "boolean"
},
"min_contact_score": {
"anyOf": [
{
"type": "integer"
},
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Min Contact Score"
},
"limit": {
"default": 25,
"title": "Limit",
"type": "integer"
},
"offset": {
"default": 0,
"title": "Offset",
"type": "integer"
}
},
"title": "search_companiesArguments"
}🟡count_companies(group_by, unit, metric, cnae, cnae_secao, ...)
Count companies or establishments, optionally grouped by one or two fields. Filters (all optional, combined with AND): cnae (CNAE code or prefix, e.g. '4711' or '47', list ok; add include_secondary to also match secondary activities), cnae_secao (letter A-U), uf, municipio (name as in Receita, accents ignored), municipio_codigo, situacao (ativa, baixada, suspensa, inapta, nula), matriz_only, porte (micro = ME, pequeno = EPP, demais, nao_informado), natureza_juridica (code prefix like '2062' or text like 'sociedade limitada'), capital_min/capital_max (BRL), opened_from/opened_to (data_inicio_atividade, YYYY-MM or YYYY-MM-DD), closed_from/closed_to (data da baixa), mei, simples (true/false), name_contains (razao social or nome fantasia), cep, partner_name (a partner's name contains this text). group_by options: uf, municipio, cnae_principal, cnae_divisao, cnae_secao, natureza_juridica, porte, situacao, ano_abertura, mes_abertura, ano_baixa, mes_baixa, mei, simples, matriz_filial, motivo_situacao. unit='estabelecimentos' (default) counts every CNPJ incl. filiais; unit='empresas' counts companies (matriz only). metric='sum_capital' sums declared capital social (BRL, companies only). Examples: MEIs opened per month in a state, active agro companies per municipality, closures by year.
Input Schema
{
"type": "object",
"properties": {
"group_by": {
"anyOf": [
{
"items": {
"type": "string"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"title": "Group By"
},
"unit": {
"default": "estabelecimentos",
"title": "Unit",
"type": "string"
},
"metric": {
"default": "count",
"title": "Metric",
"type": "string"
},
"cnae": {
"anyOf": [
{
"items": {
"type": "string"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"title": "Cnae"
},
"cnae_secao": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Cnae Secao"
},
"include_secondary": {
"default": false,
"title": "Include Secondary",
"type": "boolean"
},
"uf": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Uf"
},
"municipio": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Municipio"
},
"municipio_codigo": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Municipio Codigo"
},
"situacao": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Situacao"
},
"matriz_only": {
"default": false,
"title": "Matriz Only",
"type": "boolean"
},
"porte": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Porte"
},
"natureza_juridica": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Natureza Juridica"
},
"capital_min": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"title": "Capital Min"
},
"capital_max": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"title": "Capital Max"
},
"opened_from": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Opened From"
},
"opened_to": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Opened To"
},
"closed_from": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Closed From"
},
"closed_to": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Closed To"
},
"mei": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"default": null,
"title": "Mei"
},
"simples": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"default": null,
"title": "Simples"
},
"name_contains": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Name Contains"
},
"cep": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Cep"
},
"partner_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Partner Name"
},
"order": {
"default": "count_desc",
"title": "Order",
"type": "string"
},
"limit": {
"default": 25,
"title": "Limit",
"type": "integer"
}
},
"title": "count_companiesArguments"
}Output Schema
{
"type": "object",
"properties": {
"result": {
"items": {
"additionalProperties": true,
"type": "object"
},
"title": "Result",
"type": "array"
}
},
"required": [
"result"
],
"title": "count_companiesOutput"
}🟢get_company(cnpj)
One company by CNPJ (14 digits, with or without punctuation; or the 8-digit root to get the matriz): registration, company data, Simples/MEI, address and contacts, secondary CNAEs, partners (with names), and how many establishments the company has.
Input Schema
{
"type": "object",
"properties": {
"cnpj": {
"title": "Cnpj",
"type": "string"
}
},
"required": [
"cnpj"
],
"title": "get_companyArguments"
}🟢list_partners(cnpj)
Partners (socios) of one company by CNPJ root or full CNPJ: names, type, role (qualificacao), entry date, age band. CPFs are masked by Receita. faixa_etaria: 1 = 0-12, 2 = 13-20, 3 = 21-30, 4 = 31-40, 5 = 41-50, 6 = 51-60, 7 = 61-70, 8 = 71-80, 9 = over 80, 0 = not applicable.
Input Schema
{
"type": "object",
"properties": {
"cnpj": {
"title": "Cnpj",
"type": "string"
}
},
"required": [
"cnpj"
],
"title": "list_partnersArguments"
}Output Schema
{
"type": "object",
"properties": {
"result": {
"items": {
"additionalProperties": true,
"type": "object"
},
"title": "Result",
"type": "array"
}
},
"required": [
"result"
],
"title": "list_partnersOutput"
}🟡search_partners(name, contains, cpf_middle, uf, limit, ...)
Find the companies a person or entity is a partner of, by name. Exact (accent-insensitive, case-insensitive) match on the partner name by default; set contains=true for a substring match. Optionally narrow with cpf_middle (the 6 digits Receita publishes, e.g. '240659') because the same name can belong to different people. Returns company name, status and role.
Input Schema
{
"type": "object",
"properties": {
"name": {
"title": "Name",
"type": "string"
},
"contains": {
"default": false,
"title": "Contains",
"type": "boolean"
},
"cpf_middle": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Cpf Middle"
},
"uf": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Uf"
},
"limit": {
"default": 25,
"title": "Limit",
"type": "integer"
},
"offset": {
"default": 0,
"title": "Offset",
"type": "integer"
}
},
"required": [
"name"
],
"title": "search_partnersArguments"
}🟢companies_at_address(cep, logradouro_contains, numero, municipio, uf, ...)
Establishments registered at one address, by CEP (8 digits), optionally narrowed by street text, number, municipio or uf. Use it to find companies sharing an address.
Input Schema
{
"type": "object",
"properties": {
"cep": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Cep"
},
"logradouro_contains": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Logradouro Contains"
},
"numero": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Numero"
},
"municipio": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Municipio"
},
"uf": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Uf"
},
"situacao": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": "ativa",
"title": "Situacao"
},
"limit": {
"default": 50,
"title": "Limit",
"type": "integer"
},
"offset": {
"default": 0,
"title": "Offset",
"type": "integer"
}
},
"title": "companies_at_addressArguments"
}Output Schema
{
"type": "object",
"properties": {
"result": {
"items": {
"additionalProperties": true,
"type": "object"
},
"title": "Result",
"type": "array"
}
},
"required": [
"result"
],
"title": "companies_at_addressOutput"
}🟢lookup_codes(kind, text, limit)
Look up Receita's code tables by text or code. kind: cnae (activity), natureza_juridica (legal form), municipio, motivo (reason for status), qualificacao (partner role), pais. Use it to find the CNAE code for a sector, or the municipio name Receita uses, before filtering.
Input Schema
{
"type": "object",
"properties": {
"kind": {
"title": "Kind",
"type": "string"
},
"text": {
"title": "Text",
"type": "string"
},
"limit": {
"default": 25,
"title": "Limit",
"type": "integer"
}
},
"required": [
"kind",
"text"
],
"title": "lookup_codesArguments"
}Output Schema
{
"type": "object",
"properties": {
"result": {
"items": {
"additionalProperties": true,
"type": "object"
},
"title": "Result",
"type": "array"
}
},
"required": [
"result"
],
"title": "lookup_codesOutput"
}Community
Evidence