Brazil CNPJ company registry
Measured conclusion: Deep-tested. L2 outcome: tools_ok.
Brazil's open CNPJ registry: filter and count companies by sector, place, size, MEI, partners.
| Author | io.github.bnovarini |
|---|---|
| Access | remote |
| Publisher key required | No |
| Measured state | Deep-tested |
| L1 liveness | alive |
| L1 latency | 86 ms |
| Last measured | 2026-10-26 |
Add to your agent
Copy this into your MCP client config:
{
"mcpServers": {
"Brazil CNPJ company registry": {
"url": "https://cnpj-mcp.fly.dev/mcp",
"transport": "streamable-http"
}
}
}
Measured tools (8)
dataset_infoWhat data is loaded: source, snapshot month, row counts, field meanings and caveats. Call first if unsure what the tools cover.
Hints: read-only not declared · destructive not declared · idempotent not declared · open-world not declared
search_companiesFind 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; 3-256 characters and uf required), 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). A whatsapp_business block appears only when a WhatsApp Business account was found on one of the registered phones (display name, account type, name_match score, checked_at); phones are checked in the background after a query shows them, so a result can appear on a later call, and its absence says nothing about whether the number is on WhatsApp. 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.
Parameters:
ufcepmeicnaelimit— integerporteoffset— integersimplesorder_by— stringsituacaoclosed_tomunicipioopened_tocnae_secaocapital_maxcapital_minclosed_frommatriz_only— booleanopened_frompartner_namename_containsinclude_contacts— booleanmunicipio_codigoinclude_secondary— booleanmin_contact_scorenatureza_juridica
Hints: read-only not declared · destructive not declared · idempotent not declared · open-world not declared
count_companiesCount 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; 3-256 characters and uf required), 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.
Parameters:
ufcepmeicnaeunit— stringlimit— integerorder— stringportemetric— stringsimplesgroup_bysituacaoclosed_tomunicipioopened_tocnae_secaocapital_maxcapital_minclosed_frommatriz_only— booleanopened_frompartner_namename_containsmunicipio_codigoinclude_secondary— booleannatureza_juridica
Hints: read-only not declared · destructive not declared · idempotent not declared · open-world not declared
get_companyOne 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.
Parameters:
cnpj(required) — string
Hints: read-only not declared · destructive not declared · idempotent not declared · open-world not declared
list_partnersPartners (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.
Parameters:
cnpj(required) — string
Hints: read-only not declared · destructive not declared · idempotent not declared · open-world not declared
search_partnersFind 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 (uf required). 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.
Parameters:
name(required) — stringuflimit— integeroffset— integercontains— booleancpf_middle
Hints: read-only not declared · destructive not declared · idempotent not declared · open-world not declared
companies_at_addressEstablishments 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.
Parameters:
ufceplimit— integernumerooffset— integersituacaomunicipiologradouro_contains
Hints: read-only not declared · destructive not declared · idempotent not declared · open-world not declared
lookup_codesLook 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.
Parameters:
kind(required) — stringtext(required) — stringlimit— integer
Hints: read-only not declared · destructive not declared · idempotent not declared · open-world not declared
Measured by MCPYP probing. Untested fields are omitted, never estimated. Listing is always free; MCPYP never proxies calls or stores user tokens.