cnpj-mcp
Integrates with Hugging Face to query Parquet files containing CNPJ data, enabling searches for companies, partners, addresses, and corporate relationships without a local database.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@cnpj-mcpquem são os sócios da empresa com CNPJ 33.000.167/0001-01?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
cnpj-mcp
Servidor MCP de CNPJ sem base local, sem conta e sem serviço pago.
Ferramenta | Fonte |
| API Minha Receita (reservas: OpenCNPJ, CNPJá Open) |
| API Minha Receita (UF, CNAE, município, natureza jurídica) |
| API pública do Diário de Justiça Eletrônico Nacional (CNJ) |
| arquivos Parquet publicados (ver abaixo) |
| arquivos Parquet |
| arquivos Parquet |
| arquivos Parquet |
|
|
Como funciona a parte "sem base local"
gerar-dados.mjs baixa os dados abertos de CNPJ da Receita Federal e gera cinco arquivos Parquet,
cada um ordenado pela coluna de busca (nome do sócio, CNPJ, documento do sócio, razão social, CEP).
Os arquivos ficam publicados na internet (Hugging Face). O MCP consulta com DuckDB por requisições
parciais: numa busca por nome exato, lê cerca de 1 MB de um arquivo de centenas de MB.
Os modos contem (trecho no meio do nome) usam índices só de nomes (pessoas, nomes_empresas)
com blocos grandes, para gastar poucos pedidos: o Hugging Face limita cada IP a 3.000 pedidos a cada
5 minutos.
Tempos medidos pela internet em 16/10/2026, numa mesma sessão (o primeiro uso de cada arquivo baixa o índice dele, de 5 a 7 s):
Consulta | Tempo |
Sócio pelo nome exato, empresas do sócio, sócios em comum | 1 a 6 s |
Rede societária, 2 níveis (~90 nós) | ~10 s |
Rede societária, 3 níveis (~165 nós) | ~15 s |
Sócio por trecho do nome | ~10 s na primeira vez, ~3 s depois |
Empresa por trecho do nome | ~30 s |
Ficha do CNPJ, DJEN | menos de 1 s |
Telefone e e-mail não entram nos arquivos (minimização de dado pessoal); estão na ficha do CNPJ.
Related MCP server: cnpj-br
Usar
git clone https://github.com/leorochasf/cnpj-mcp && cd cnpj-mcp && npm install
claude mcp add cnpj --scope user -- node /caminho/para/cnpj-mcp/index.jsPor padrão o MCP lê os arquivos publicados no Hugging Face (CNPJ_DADOS muda a origem).
CNPJ_DADOS também aceita uma pasta local com os .parquet (por exemplo saida/2026-10).
Atualização mensal
.github/workflows/atualizar-dados.yml roda todo dia 20: se a Receita publicou um mês novo, gera
os arquivos e envia ao Hugging Face. Configure no repositório do GitHub o secret HF_TOKEN
(token de escrita) e a variável HF_DATASET (ex.: usuario/cnpj-receita).
Para gerar à mão: node gerar-dados.mjs [AAAA-MM] → saida/AAAA-MM/.
Limites que importam
O CPF de sócio vem mascarado pela Receita (
***123456**). Nome + esse trecho separa homônimos quase sempre, mas não com certeza absoluta.O DJEN é buscado pelo nome da parte: homônimos aparecem. A API aceita cerca de 20 consultas por minuto.
As APIs públicas são mantidas por terceiros e podem ficar lentas ou fora do ar.
municipios-ibge.jsoné a lista de municípios do IBGE salva em 15/10/2026.
Dados pessoais
Os arquivos trazem nomes de sócios publicados pela Receita Federal. São dados públicos, mas a LGPD continua aplicável. Lei 13.709/2018, art. 7º, § 3º: "O tratamento de dados pessoais cujo acesso é público deve considerar a finalidade, a boa-fé e o interesse público que justificaram sua disponibilização." Não tente reidentificar CPFs.
Licença
Código sob a GNU Affero General Public License v3.0 (LICENSE). Os dados são da Receita Federal.
Available Tools
10 toolsbuscar_empresa_por_nomeA
Procura empresas pela razão social (modo contem também procura no nome fantasia da matriz). Devolve CNPJ da matriz, situação, município, natureza jurídica, porte e capital. Modos: prefixo (padrão, rápido), exato e contem. Evite contem: lê ~1 GB na primeira vez da sessão (cerca de 1 min pela internet); use-o só quando o começo do nome não for conhecido.
| Name | Required | Description | Default |
|---|---|---|---|
| uf | No | ||
| modo | No | ||
| texto | Yes | Razão social ou trecho dela | |
| limite | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden and does well: it lists returned fields (CNPJ, situação, município, natureza jurídica, porte, capital) and warns that 'contem' reads ~1 GB on first use in a session, taking about 1 minute over the internet. It does not mention pagination, rate limits, or auth, but the performance warning is unusually valuable.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with purpose, then return fields, then modes, then the critical 'contem' warning. Every sentence earns its place, and the structure mirrors the agent's decision order without any redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no annotations, no output schema, and low schema coverage, the description is quite complete: it covers purpose, return values, mode behavior, default, and a key performance caveat. The main gap is the absence of any mention of 'uf' and 'limite', which leaves optional filtering and result-count behavior entirely to the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is low (25%), so the description must compensate. It explains the 'texto' meaning (razão social or trecho) and fully details the 'modo' enum values, default, and trade-offs, but it completely omits the optional 'uf' and 'limite' parameters, leaving half the schema without added meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb (Procura) and resource (empresas) qualified by 'pela razão social', making the tool's purpose immediately clear. It also distinguishes the 'contem' mode's broader scope (including trade name of the headquarters), which helps separate it from a generic filter search.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives strong guidance for mode selection: 'prefixo' is default and fast, 'exato' exists, and 'contem' should be avoided unless the beginning of the name is unknown, with a concrete performance cost. However, it gives no guidance on when to use this tool versus siblings like buscar_empresas_por_filtro or consultar_cnpj, leaving tool-level selection implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
buscar_empresas_por_filtroB
Lista estabelecimentos por UF, CNAE, município e/ou natureza jurídica (API Minha Receita, sem chave). Informe ao menos um filtro. Paginado: repita a chamada com o "cursor" devolvido para a próxima página.
| Name | Required | Description | Default |
|---|---|---|---|
| uf | No | Siglas de UF, ex. ["GO"] | |
| cnae | No | CNAE (7 dígitos), procurado no principal e nos secundários | |
| cursor | No | Cursor devolvido pela página anterior | |
| limite | No | Itens por página (padrão 20) | |
| municipio | No | Nome do município (exige uf) ou código IBGE | |
| cnae_fiscal | No | CNAE (7 dígitos), só como atividade principal | |
| natureza_juridica | No | Código da natureza jurídica, ex. "2062" |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does disclose two behavioral traits: the no-key public API source and the cursor-based pagination contract. It omits how multiple filters combine (AND/OR), rate or result limits, and the return shape, so it is adequate but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences with no filler, and the critical constraint ('Informe ao menos um filtro') is front-loaded before the pagination detail. Structure is efficient, only losing a point for packing source attribution into the purpose sentence.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 7-parameter, no-annotation, no-output-schema search tool, the description covers the required-filter rule and pagination, which are the two highest-risk behaviors. It leaves the response format and multi-filter combination semantics undocumented, so it is minimally sufficient rather than complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents all seven parameters, and the description merely echoes the filter fields. It notably does not disambiguate the subtle cnae vs cnae_fiscal distinction present in the schema, so no value is added beyond structured data. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Lista) and resource (estabelecimentos) and enumerates the four filter dimensions (UF, CNAE, município, natureza jurídica), plus names the data source. It is clear what the tool returns, though it never names a sibling like buscar_empresa_por_nome or empresas_no_endereco, so the agent must infer differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Informe ao menos um filtro' gives an explicit minimum-input constraint, and the pagination sentence prescribes the repeat-with-cursor workflow. However, it never states when to prefer this tool over the many sibling search tools, nor any exclusions, so usage is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
buscar_socioA
Procura pessoas (ou empresas) no quadro societário pelo NOME. Agrupa homônimos por CPF mascarado e mostra faixa etária, quantas empresas e em quais UFs/municípios aparecem. Use antes de empresas_do_socio. Modos: exato (padrão, ~1-5 s), prefixo (começa com; idem) e contem (trecho em qualquer posição; baixa ~130 MB na primeira vez da sessão, de 10 a 30 s; não lista municípios).
| Name | Required | Description | Default |
|---|---|---|---|
| uf | No | Só sócios de empresas com matriz nesta UF | |
| cpf | No | CPF completo ou os 6 dígitos do meio, para separar homônimos | |
| modo | No | ||
| nome | Yes | Nome do sócio | |
| limite | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so well: it discloses output composition (homônimos agrupados por CPF mascarado, faixa etária, contagem de empresas, UFs/municípios), per-mode latency, a first-call ~130 MB download for 'contem', and the caveat that 'contem' omits municípios. This is exactly the cost/behavior context an agent needs before choosing a mode.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four dense sentences, front-loaded with the core action, then output shape, then workflow routing, then mode trade-offs. No filler; every clause carries information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no annotations and no output schema, the description compensates by describing both behavior and returned fields, which is enough to invoke the tool correctly. Minor gaps remain (the purpose/behavior of 'limite' and any default value) but nothing critical is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 60%; 'modo' has no schema description but the description fully explains its three values with performance implications, adding real meaning beyond the enum list. 'uf' and 'cpf' are already documented in the schema, and 'limite' remains unexplained in both places, keeping this below a 5.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (procura) and resource (pessoas/empresas no quadro societário) scoped to name lookup, and clearly separates itself from the sibling buscar_empresa_por_nome by operating on sócios rather than empresas. An agent can distinguish it from every sibling without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes the workflow with 'Use antes de empresas_do_socio', giving clear sequencing context and naming the follow-up tool. It does not state when NOT to use it versus alternatives like buscar_empresa_por_nome, so it falls short of a full when/when-not treatment.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
consultar_cnpjA
Ficha completa de um CNPJ (razão social, situação, endereço, contatos, CNAEs, Simples/MEI, quadro de sócios). APIs públicas gratuitas com dados da Receita Federal: Minha Receita, com OpenCNPJ e CNPJá como reserva. A resposta indica a fonte usada.
| Name | Required | Description | Default |
|---|---|---|---|
| cnpj | Yes | CNPJ com ou sem máscara (14 dígitos) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full burden. It usefully discloses the data provenance (Minha Receita primary, OpenCNPJ and CNPJá as fallback) and that the response flags the source used, which is real behavioral value. It does not, however, cover rate limits, caching, or what happens on an unknown/invalid CNPJ, which matters for a tool aggregating free public APIs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Compact and front-loaded: the returned payload is described first, then the source/fallback behavior. Every clause earns its place and there is no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description compensates by enumerating returned fields and noting the source indicator. That covers the essentials for a single-parameter lookup tool; only error/failure semantics are missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the single parameter already documents that masked or unmasked 14-digit input is accepted. The description adds no format, validation, or normalization detail beyond the schema, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a concrete verb+resource ('Ficha completa de um CNPJ') and enumerates the returned fields (razão social, situação, endereço, CNAEs, Simples/MEI, sócios), so the agent knows exactly what it gets. It is implicitly distinct from siblings like buscar_empresa_por_nome or socios_em_comum, but it never names an alternative, so differentiation is left to the agent.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: the tool takes a CNPJ, so an agent infers it should be used when a CNPJ is in hand and name/socio/address lookups should use the other tools. There is no explicit when-to-use statement, no prerequisite (e.g. valid CNPJ required), and no named alternative for the case where the agent lacks a CNPJ.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
empresas_do_socioA
Lista as empresas em que uma pessoa ou empresa figura como sócia, com situação e município. Informe o nome exato (como aparece em buscar_socio) e, de preferência, o CPF para excluir homônimos; ou só o CNPJ, para ver de quais empresas uma pessoa jurídica é sócia.
| Name | Required | Description | Default |
|---|---|---|---|
| cpf | No | CPF completo ou os 6 dígitos do meio | |
| cnpj | No | CNPJ do sócio pessoa jurídica (14 dígitos) | |
| nome | No | Nome exato do sócio |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden. It implies a read-only listing and explains the homonym-disambiguation behavior, which is useful, but says nothing about result limits, pagination, or what happens when multiple partners match the name.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two dense sentences, no filler, with the purpose stated first and the input guidance second. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and no annotations, the description does reasonable work by naming the returned attributes and the input disambiguation strategy. It falls short only on volume/limit behavior and failure modes for ambiguous names.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is already 100%, so the baseline is 3, but the description adds real value: it explains why CPF is preferred (excluir homônimos) and that CNPJ alone returns the companies where a legal entity is a partner, clarifying the semantics of each parameter's combination.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Lista as empresas em que... figura como sócia') and even names the fields returned (situação, município). It is clearly distinguishable from siblings like buscar_socio or consultar_cnpj because it returns the reverse relationship (companies for a given partner).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives conditional input guidance: use the exact name as returned by buscar_socio, preferably plus CPF to disambiguate homonyms, or only CNPJ to list a legal entity's participations. It references the sibling buscar_socio as the source of the name, but does not state when not to use this tool versus the other sibling lookups.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
empresas_no_enderecoC
Estabelecimentos (matrizes e filiais) registrados num CEP, com filtro opcional por número e logradouro. Útil para achar empresas de fachada ou grupos no mesmo endereço.
| Name | Required | Description | Default |
|---|---|---|---|
| cep | Yes | CEP com 8 dígitos | |
| limite | No | ||
| numero | No | Número do imóvel | |
| logradouro | No | Trecho do nome da rua | |
| somente_ativas | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden, and it does not disclose the default value or effect of somente_ativas (i.e. whether inactive registrations are returned), pagination behavior, or result-size limits. For a listing tool with zero annotation coverage and no output schema, this is a notable gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences, purpose first and use case second, with no filler. It is appropriately sized for a five-parameter lookup tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With five parameters, 60% schema coverage, no annotations and no output schema, the description leaves the agent guessing about default filtering, result limits and matching behavior. It covers purpose and motivation but not the operational details needed to invoke the tool confidently.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 60%. The description restates numero and logradouro, which the schema already documents, and adds no format or matching semantics (e.g. partial vs exact matching for logradouro). The limite and somente_ativas parameters are unexplained in both the schema and the description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: establishments (headquarters and branches) registered at a given CEP, plus the optional narrowing filters. It is clearly distinguishable from a generic filter search such as buscar_empresas_por_filtro, though it never names that sibling explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The second sentence gives a real use case (finding shell companies or corporate groups sharing an address), which implies when the tool is valuable. However, there is no explicit when-not guidance and no routing to alternatives like consultar_cnpj or buscar_empresas_por_filtro.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
info_baseC
Mostra de que mês da Receita são os arquivos consultados, onde estão e quantas linhas têm.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. 'Mostra' implies a passive read, but nothing states freshness, caching, whether it triggers a data load, or permissions. For a zero-annotation tool the disclosure is thin.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence listing three return facts with no filler. Efficient, though the phrasing is slightly tangled.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no annotations and no output schema, the description is the only source of information, and it only partially specifies the return shape (month, location, row count). It omits any explanation of what 'consultados' means or what triggers the data set.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes no parameters (0 required, 0 optional), so there is nothing for the description to disambiguate. The baseline for a parameterless tool is 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states the tool reveals metadata about loaded Receita files: which month, where they are, and how many rows. That is a concrete output description, but the resource is ambiguous ('arquivos consultados' – which files, from which dataset?) and it offers no differentiation from the ten sibling tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no indication of when to call this tool, what precedes it, or how it relates to alternatives like consultar_cnpj or buscar_empresas_por_filtro. Usage must be entirely inferred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
processos_djenA
Busca comunicações processuais (intimações, citações, distribuições) no Diário de Justiça Eletrônico Nacional (DJEN/CNJ) pelo nome da parte, agrupadas por processo. Com cnpj e incluir_socios=true, procura também pelos nomes dos sócios atuais (até 8). A busca é pelo NOME: pode trazer homônimos — confira as partes. A API pública aceita cerca de 20 consultas por minuto.
| Name | Required | Description | Default |
|---|---|---|---|
| cnpj | No | CNPJ: usa a razão social como nome | |
| nome | No | Nome da parte (pessoa ou empresa) | |
| data_fim | No | AAAA-MM-DD | |
| tribunal | No | Sigla, ex. TJGO, TRF1, TRT18 | |
| nome_exato | No | true (padrão): só comunicações em que a parte tem exatamente esse nome | |
| data_inicio | No | AAAA-MM-DD (data de disponibilização) | |
| incluir_socios | No | Com cnpj: buscar também cada sócio | |
| max_comunicacoes | No | Teto por nome (padrão 100) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden and delivers two valuable disclosures: that matching is by NAME and may return homônimos (a real correctness caveat), and the ~20 queries/minute rate limit. It stops short of auth requirements, empty-result behavior, or pagination, leaving some behavioral gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four tight sentences with zero padding: purpose first, then the cnpj/sócios behavior, then the homonym caveat, then the rate limit. Front-loaded and each sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 8-parameter, no-output-schema, no-annotation search tool, the description covers the key behavioral caveats (name matching, homonyms, rate limit) and the main parameter interaction. It omits how nome and cnpj combine when both are absent/present and return-value shape, minor gaps for a list/search tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds meaning beyond the schema by explaining the cnpj + incluir_socios=true interaction (searches current partners, up to 8) and reinforcing the name-based matching semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Busca), resource (comunicações processuais: intimações, citações, distribuições) and source (DJEN/CNJ), plus the scope (by party name, grouped by process). This is clearly distinct from the CNPJ/company-oriented siblings, so an agent can select it without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete usage context: it documents the cnpj + incluir_socios=true path to search partner names. However, it never names an alternative tool or states when NOT to use this one, so the routing guidance is clear but not exhaustive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rede_societariaA
Monta o grafo de vínculos societários a partir de uma empresa (cnpj) ou de uma pessoa (nome + cpf): empresas, sócios, empresas desses sócios, e assim por diante até a profundidade pedida. Sócios pessoa física são identificados por nome + CPF mascarado.
| Name | Required | Description | Default |
|---|---|---|---|
| cpf | No | CPF da pessoa de partida (recomendado para evitar homônimos) | |
| cnpj | No | CNPJ de partida | |
| nome | No | Nome exato da pessoa de partida | |
| max_nos | No | Teto de nós no grafo (padrão 150) | |
| profundidade | No | Saltos a partir da origem (padrão 2) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It usefully discloses the recursive traversal behavior and the privacy-relevant detail that individuals are keyed by name + masked CPF. It stays silent on permissions, rate/cost limits, and whether the graph generation is bounded in runtime — a meaningful gap for a potentially large recursive query.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no waste, and the core capability plus its recursion is front-loaded before the identification detail. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and no annotations, the description should carry more of the return/payload story. It describes the graph's composition but not its shape, size limits at the payload level, or behavior on ambiguous names, leaving gaps for an agent that must reason about results.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents cpf, cnpj, nome, max_nos (cap, default 150) and profundidade (1-3, default 2). The description adds no format or syntax detail beyond what the schema states, which is the expected baseline when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: it builds ('Monta') the corporate-link graph ('grafo de vínculos societários'), and spells out the traversal semantics — companies, partners, partners' companies, recursively to the requested depth. This recursive scope implicitly distinguishes it from single-hop siblings like empresas_do_socio or socios_em_comum, though no sibling is named explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description tells the agent the two valid entry modes (company via cnpj, person via nome + cpf) and notes cpf is recommended to disambiguate homônimos. It does not, however, say when to prefer this tool over the several graph-adjacent siblings, nor any exclusions or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
socios_em_comumA
Cruza o quadro societário de várias empresas e aponta os sócios que aparecem em mais de uma (mesmo nome e mesmo documento mascarado).
| Name | Required | Description | Default |
|---|---|---|---|
| cnpjs | Yes | CNPJs (14 dígitos) ou CNPJs básicos (8 dígitos) | |
| min_empresas | No | Mínimo de empresas em que o sócio aparece (padrão 2) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It discloses the matching logic (same name + same masked document) and that results are limited to partners appearing in more than one company. However, it doesn't mention performance limits (max 50 CNPJs), whether results are paginated, or what the output includes beyond partner identities.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence that front-loads the core operation and adds the key matching criterion without waste. It is appropriately sized for the tool's complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter analytical tool with full schema coverage and no output schema, the description is nearly complete. It explains the cross-referencing logic and matching criterion. Minor gaps remain around output format and performance constraints, but nothing critical for correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, with both parameters fully described including formats and default values. The description adds no parameter-specific detail beyond what the schema already provides. Baseline 3 is appropriate when schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (cruza) and resource (quadro societário de várias empresas) and precisely what it returns: sócios appearing in more than one company. This is distinguishable from siblings like buscar_socio or empresas_do_socio, which operate on a single entity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies a multi-company comparison scenario and clarifies the matching criterion (same name and same masked document), which is useful context. It does not explicitly name alternatives or state when not to use it, but the cross-referencing purpose is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
10 tool updates
v0.3.0- First observed
buscar_empresa_por_nome - First observed
buscar_empresas_por_filtro - First observed
buscar_socio - First observed
consultar_cnpj - First observed
empresas_do_socio - First observed
empresas_no_endereco - First observed
info_base - First observed
processos_djen - First observed
rede_societaria - First observed
socios_em_comum
TDQS
Scored across 10 tools
Most tools target distinct query types: single CNPJ record, name search, UF/CNAE filter listing, address listing, partner search, and partner network. Mild overlap exists between buscar_empresas_por_filtro and buscar_empresa_por_nome (both list companies) and between socios_em_comum and rede_societaria (both about partner links), but descriptions clarify the boundaries.
All names are snake_case and in Portuguese, which is consistent. However, verb usage is mixed: buscar_socio / buscar_empresa_por_nome / buscar_empresas_por_filtro and consultar_cnpj are verb-first, while empresas_no_endereco, socios_em_comum, rede_societaria, processos_djen, and info_base are noun-first.
Ten tools is well-scoped for a CNPJ/company-data domain, with each tool covering a distinct query mode (lookup, search, network, processes). No obvious redundancy or padding.
The surface covers forward and reverse lookups (CNPJ by ID, company by name, companies by filter/address, partner by name, companies of a partner), network analysis, and data provenance via info_base. Minor gaps like batch lookup or export/aggregation helpers exist but core investigative workflows are covered.
Maintenance
Related MCP Connectors
Brazilian company and person data by CNPJ/CPF: registry, partners, tax status, sanctions, lawsuits.
Free Brazilian CNPJ lookup (legal name, status, partners) + lawsuit discovery. Public data, no login
Bulk CNPJ lookup and enrichment with official Brazilian company registry data.
Brazilian company data, CNPJ/CPF validation and KYB risk score. Pay per call via x402 (USDC).
Related MCP Servers
AlicenseNot gradedqualityCmaintenanceMCP server for querying Brazilian CNPJ company data, including partner graphs, address/contact joins, CNAE statistics, and national/annual overviews.MIT- AlicenseNot gradedqualityBmaintenanceBrazilian company-registry lookup via Receita Federal, allowing AI agents to query CNPJ data.14 npmMIT
- AlicenseNot gradedqualityCmaintenanceProvides a single read-only tool to fetch extended Brazilian company registration data from a CNPJ number, including basic details. Works over HTTP MCP with any client.MIT
- AlicenseNot gradedqualityCmaintenanceEnables querying the Brazilian Federal Transparency Portal for sanctions (CEIS, CNEP, CEPIM), politically exposed persons (PEP), and federal expenses received by a CPF/CNPJ, supporting due diligence and compliance.MIT