inpi-marcas-mcp-server
Click on "Install 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., "@inpi-marcas-mcp-serverpesquisar a marca "Aurora" no INPI e listar os pedidos vivos"
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.
inpi-marcas-mcp-server
Servidor MCP para a busca oficial de marcas do INPI
(pePI, busca.inpi.gov.br/pePI) — o mesmo sistema público que qualquer pessoa usa no
navegador, só que disponível como ferramenta para Claude e outros agentes de IA.
Cada usuário entra com o próprio login do pePI (gratuito, cadastro em gov.br/inpi/cadastro-no-e-inpi). Este servidor não guarda, expõe nem compartilha credencial nenhuma — cada instância roda local, autenticada como você.
Projeto independente, sem vínculo oficial com o INPI. Automatiza o mesmo formulário que existe no site público; não é um canal alternativo, não pula fila nem burla limite nenhum.
O que dá pra fazer
Ferramenta | Para quê |
| Achar um processo pelo número, GRU, protocolo ou inscrição internacional (Madri) |
| Buscar marca por texto, exata ou por radical |
| Busca booleana/fuzzy, filtro por apresentação, natureza e "Pedidos Vivos" |
| Levantar o portfólio de marcas de um titular (CNPJ/CPF ou nome) |
| Buscar marcas figurativas pelo Código de Viena |
| Paginar um resultado grande |
| Ficha completa: classes, titulares, procurador, datas, prioridade unionista, petições |
Related MCP server: SEI MCP Server
Instalação
git clone https://github.com/<seu-usuario>/inpi-marcas-mcp-server.git
cd inpi-marcas-mcp-server
npm install
npm run buildConfigure o login no claude_desktop_config.json (ou equivalente do seu cliente MCP):
{
"mcpServers": {
"inpi-marcas": {
"command": "node",
"args": ["/caminho/completo/para/inpi-marcas-mcp-server/dist/index.js"],
"env": {
"INPI_USERNAME": "seu_login_pepi",
"INPI_PASSWORD": "sua_senha_pepi"
}
}
}
}Veja .env.example se preferir rodar localmente com npm run dev durante o desenvolvimento.
Limites (os mesmos do pePI, não deste servidor)
O pePI é um sistema de governo sem API oficial nem SLA. Este servidor espaça as chamadas (~1 por segundo) para não martelar um serviço público além do que uma pessoa navegando manualmente faria. Não existe teto diário embutido aqui — o que existir é do lado do INPI. Se o layout do site mudar, os parsers podem quebrar; abra uma issue com o HTML que veio, sem incluir nenhuma credencial.
Configure um timeout generoso no seu cliente MCP. Medido sob carga: uma busca legítima
pode levar até ~70-90s pra voltar do pePI. O servidor já espera até 90s antes de desistir
(REQUEST_TIMEOUT_MS), mas o SDK do MCP tem o próprio timeout do lado do cliente
(padrão de 60s) — se ele for igual ou menor que o do servidor, o cliente desiste antes do
servidor ter chance de responder, mesmo quando o pePI ia responder com sucesso. Configure pelo
menos 120s por chamada ({ timeout: 120_000 } na opção RequestOptions do callTool, se você
estiver integrando via SDK TypeScript — veja test/e2e.mjs para um exemplo).
O que este servidor NÃO é
Ele só espelha a busca pública do pePI: dado que qualquer pessoa já acessa de graça, formatado para um agente de IA ler. Não faz jurimetria, não cruza fonte, não monitora colidência ao longo do tempo, não analisa risco. Quem quiser isso de forma pronta, sem precisar orquestrar ferramenta nenhuma, é o que o INCISO faz — plataforma de inteligência de marca construída em cima do acervo completo de RPIs do INPI, não só da busca ao vivo.
Fronteira jurídica: anterioridade × colidência
As ferramentas de busca fazem busca de anterioridade — mostram o que já está registrado
ou em processo, hoje, no pePI. Isso não é uma análise de colidência: colidência avalia
semelhança gráfica, fonética, ideológica e afinidade mercadológica entre sinais, conforme o
item 5.11 do Manual de Marcas do INPI,
e exige avaliação humana (idealmente de advogado especialista em PI). Toda resposta de busca
traz esse aviso, e structuredContent nunca inclui um veredito de "pode registrar" — só o dado
bruto do pePI, mais uma classificação auxiliar (ver abaixo).
Proveniência e situação operacional
Todo structuredContent (de busca ou de detalhe) traz um campo proveniencia — fonte,
urlConsulta e consultadoEm (ISO 8601) — pra dar rastreabilidade: de onde e quando aquele
dado específico veio, útil pra quem precisa auditar ou anexar a um parecer.
Cada resultado também traz situacaoOperacional — uma classificação (registro_vigente,
registro_extinto, pedido_em_andamento, pedido_arquivado, pedido_indeferido,
indeterminado) derivada por padrão de texto sobre o campo bruto situacao do pePI. Não é
exaustiva nem tem valor jurídico próprio — o pePI é sistema legado sem enum fechado de status,
então isso é conveniência de filtro, não fonte de verdade. O campo situacao bruto continua
disponível e é sempre a referência final.
Formato da resposta
Cada ferramenta devolve duas coisas na mesma chamada: um content em texto (Markdown,
pra ler direto) e um structuredContent com os mesmos dados em JSON (pra outro programa
processar). Isso é o padrão do protocolo MCP e não muda.
Além disso, toda ferramenta de busca e a de detalhe aceitam salvar_html: true — aí, além
do Markdown e do JSON, o servidor também escreve um relatório HTML autocontido (tabela, sem
depender de MCP nem de internet pra abrir) em ~/inpi-marcas-mcp-server/relatorios/ (ou em
INPI_HTML_DIR, se definido), e devolve o caminho do arquivo na resposta.
Cache local
Toda busca (exceto inpi_next_page, que depende da sessão do servidor do pePI) passa primeiro
por um cache em disco — ~/.cache/inpi-marcas-mcp-server/ por padrão, configurável em
INPI_CACHE_DIR. A mesma busca repetida dentro de INPI_CACHE_TTL_HORAS (padrão: 6h) volta
instantânea, sem chamada nenhuma ao pePI. Use forcar_atualizacao: true em qualquer ferramenta
pra ignorar o cache e ir direto ao pePI ao vivo. INPI_CACHE_TTL_HORAS=0 desliga o cache.
Isso existe pra não martelar um sistema de governo sem SLA com a mesma pergunta de novo — e pra deixar buscas repetidas (ex: um agente checando a mesma marca em turnos diferentes de uma conversa) instantâneas.
Desenvolvimento
npm run dev # roda com tsx, recarrega ao salvar
npm run build # compila pra dist/Testar com o MCP Inspector:
npx @modelcontextprotocol/inspector node dist/index.jsTeste de ponta a ponta de verdade — sobe o servidor compilado, conecta como um cliente MCP conectaria (stdio + JSON-RPC, não a lógica interna direto) e faz uma busca real contra o pePI:
INPI_USERNAME=seu_login INPI_PASSWORD=sua_senha npm run test:e2eFaz chamada de rede de verdade contra um sistema de governo sem SLA — se der timeout uma vez, rode de novo antes de abrir issue.
CI (.github/workflows/ci.yml) roda typecheck, build e npm audit a cada push/PR —
não roda test:e2e, porque isso exigiria uma credencial pessoal do pePI como secret de
CI pública, o que não faz sentido pedir de quem for contribuir. Rode npm run test:e2e
localmente com sua própria credencial antes de abrir um PR.
Segurança
Veja SECURITY.md para a postura de credenciais — resumo: a senha nunca sai do seu processo local, nunca é logada, nunca é gravada em disco (nem no cache, nem no relatório HTML).
Limitações conhecidas
Cobertura de teste é e2e ao vivo, não fixtures.
test/e2e.mjsprova as 7 ferramentas contra o pePI real, mas não tem um conjunto de HTMLs salvos (marca com/sem prioridade unionista, processo extinto, arquivado, indeferido, busca avançada em grade de cartões etc.) pra testar os parsers offline, rápido e sem depender do pePI estar de pé. Fica como próximo passo — vale mais que crescer superfície de ferramenta nova agora.Não fiz plano de migração pra um "novo portal" do INPI. Existe uma URL
servicos.busca.inpi.gov.brque parece ser uma interface nova do INPI, mas é uma SPA (JavaScript), não dá pra confirmar por fetch simples se é uma busca de marcas, se está em produção, ou se substitui o pePI. Não construí abstração de fonte em cima disso sem verificar — se alguém confirmar que é estável e substitui o pePI, abra uma issue com a evidência.
Licença
MIT — veja LICENSE. Use, modifique, redistribua. Só não venda como se fosse canal oficial do INPI, porque não é.
Available Tools
7 toolsinpi_get_process_detailVer detalhe completo de um processo de marcaARead-onlyIdempotent
Busca o detalhe completo de um processo de marca no pePI (INPI oficial): classes de Nice com especificação, todos os titulares, procurador/representante legal, datas de depósito/concessão/vigência, prioridade unionista e histórico de petições protocoladas.
Precisa do "cod_pedido" (CodPedido), que vem no campo "CodPedido (use em inpi_get_process_detail)" das ferramentas de busca — não é o número do processo público, é um ID interno do pePI.
| Name | Required | Description | Default |
|---|---|---|---|
| cod_pedido | Yes | CodPedido retornado por uma busca anterior | |
| salvar_html | No | true = também salva o resultado como um relatório HTML legível (tabela, sem depender de MCP) em disco e devolve o caminho do arquivo. | |
| forcar_atualizacao | No | Ignora o cache local (padrão 6h) e busca de novo no pePI ao vivo. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and openWorldHint, so the safety profile is covered. The description adds the scope of retrieved data, but the genuinely behavioral trait (6h local cache, forcar_atualizacao override) lives only in the schema parameter description, so the body adds limited behavioral context.
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?
Front-loaded with what the tool returns, then the critical identifier caveat. Slightly long in the field enumeration but every listed field is informative, 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 the returned data. Combined with the schema-level handling of salvar_html and forcar_atualizacao, an agent has everything needed to call this correctly.
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% (baseline 3), but the description earns extra credit by clarifying that cod_pedido is not the public process number but an internal pePI ID obtained from a prior search result — a distinction an agent would otherwise get wrong.
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 (busca o detalhe completo de um processo de marca) and enumerates the exact payload: classes de Nice, titulares, procurador, datas, prioridade unionista e histórico de petições. It also clearly positions itself as the detail-fetch that follows a search, distinguishing it from the inpi_search_* siblings.
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 establishes the precondition clearly: you must first run one of the search tools and take the CodPedido from their 'CodPedido (use em inpi_get_process_detail)' field. No explicit when-not or named sibling alternative, but the workflow dependency is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
inpi_next_pageBuscar próxima página de resultadosARead-onlyIdempotent
Avança para outra página de uma busca de marcas já realizada no pePI (INPI oficial). Use depois de qualquer uma das ferramentas de busca quando a resposta indicar que há mais páginas.
Não tem cache próprio: pagina a ÚLTIMA busca feita nesta sessão (o pePI guarda isso no servidor, não aqui). Se a busca anterior tiver vindo do cache local, esta ferramenta reenvia ela ao pePI ao vivo primeiro, automaticamente, pra não paginar a coisa errada.
| Name | Required | Description | Default |
|---|---|---|---|
| pagina | Yes | Número da página a buscar (2 = segunda página, etc) | |
| salvar_html | No | true = também salva o resultado como um relatório HTML legível (tabela, sem depender de MCP) em disco e devolve o caminho do arquivo. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations (which only cover read-only/idempotent/destructive/openWorld) by disclosing that there is no local cache, that it paginates the LAST search stored server-side, and that a cache-sourced prior search is automatically re-sent live first. These are exactly the stateful behaviors an agent must know to avoid paginating the wrong result set.
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?
Front-loaded with the action and the usage trigger before the caching detail. The cache paragraph is slightly long but every sentence carries distinct, decision-relevant information, so waste is minimal.
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 pagination tool with no output schema, the description supplies the trigger, the session-state model, and the cache-recovery behavior. Nothing an agent needs to call it correctly 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 description coverage is 100%, so both parameters (pagina, salvar_html) are already fully documented in the schema. The description adds only the pagination concept, not parameter-specific syntax, 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 specific verb (advances/paginates) and resource (another page of an already-performed trademark search) and clearly separates itself from the search siblings, which start searches rather than continue them. An agent can distinguish it from every sibling without opening a 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?
"Use after any of the search tools when the response indicates there are more pages" gives an explicit trigger condition and names the alternative tool category. The prerequisite (a prior search in this session) is stated, leaving nothing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
inpi_search_by_figurative_codeBuscar marcas figurativas por código de VienaARead-onlyIdempotent
Busca marcas figurativas/mistas no pePI (INPI oficial) pelo Código de Viena (a classificação internacional de elementos figurativos — ex: 27.05.01 para letras estilizadas). Use quando estiver checando colidência de logotipo/elemento gráfico, não de texto.
Cada campo (viena_1/2/3) é um código COMPLETO (grupo.divisão.seção). Preencher mais de um campo busca marcas que tenham TODOS os códigos ao mesmo tempo (AND), não é mais preciso — na dúvida, use só viena_1.
A Classificação de Viena completa está em https://www.gov.br/inpi — se não souber o código, descreva o elemento gráfico ao usuário e peça para consultar a tabela oficial antes de buscar.
| Name | Required | Description | Default |
|---|---|---|---|
| viena_1 | No | Primeiro código da Classificação de Viena (grupo.divisão.seção), ex: 27.05.01 | |
| viena_2 | No | Segundo código, ANDado com o primeiro (só use se precisar que a marca tenha os dois elementos) | |
| viena_3 | No | Terceiro código, ANDado com os outros dois | |
| classe_nice | No | Filtra pela Classificação de Nice, ex: 09, 42 | |
| salvar_html | No | true = também salva o resultado como um relatório HTML legível (tabela, sem depender de MCP) em disco e devolve o caminho do arquivo. | |
| forcar_atualizacao | No | Ignora o cache local (padrão 6h) e busca de novo no pePI ao vivo. | |
| resultados_por_pagina | No | Resultados por página. Valores aceitos pelo pePI: 20, 40, 60, 80, 100. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already fully cover the safety profile (readOnly, idempotent, non-destructive, openWorld), so the bar is lower. The description adds genuine behavioral context beyond that: multiple viena fields combine as an AND filter that narrows rather than refines, and it directs the agent to gather the code externally before calling.
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?
Purpose is front-loaded, followed by the AND-semantics caveat and the code-lookup prerequisite. It runs to three short paragraphs and every sentence carries weight, though slightly more text than strictly necessary for a search 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?
Purpose, usage, retrieval guidance and parameter interpretation are all covered, and pagination is handled by the resultados_por_pagina enum plus the inpi_next_page sibling. The one gap is that, with no output schema, the description never characterizes the shape of returned 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 coverage is 100%, so the baseline is 3 and the schema already documents each field. The description adds interpretive value by clarifying that viena_1/2/3 are complete codes, that stacking them is an intersection (not increased precision), and by pointing to the authoritative Vienna table.
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) and resource (marcas figurativas/mistas no pePI) qualified by the Vienna Code, and explicitly contrasts itself with text-based search ('não de texto'), which cleanly separates it from inpi_search_by_mark/mark_advanced.
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 states when to use it ('checando colidência de logotipo/elemento gráfico') and when not (text search), plus operational advice to use only viena_1 when unsure and to consult the official Vienna table before querying if the code is unknown.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
inpi_search_by_markBuscar marca por texto (exata ou radical)ARead-onlyIdempotent
Busca marcas no pePI (INPI oficial) pelo texto da marca, igual à aba "Marca" do site oficial. Suporta busca exata (o termo inteiro) ou por radical (o termo aparece em qualquer parte do nome). Pode filtrar por Classificação de Nice.
Use esta busca para descobrir se um nome já está registrado e quem são os titulares. Para busca mais avançada com apresentação, natureza ou operadores booleanos, use inpi_search_by_mark_advanced.
| Name | Required | Description | Default |
|---|---|---|---|
| marca | Yes | Texto da marca a buscar, ex: GOOGLE | |
| busca_exata | No | true = busca exata; false = busca por radical (contém o texto) | |
| classe_nice | No | Filtra pela Classificação de Nice, ex: 09, 42 | |
| salvar_html | No | true = também salva o resultado como um relatório HTML legível (tabela, sem depender de MCP) em disco e devolve o caminho do arquivo. | |
| forcar_atualizacao | No | Ignora o cache local (padrão 6h) e busca de novo no pePI ao vivo. | |
| resultados_por_pagina | No | Resultados por página. Valores aceitos pelo pePI: 20, 40, 60, 80, 100. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this as a safe, idempotent, non-destructive open-world read, so the safety bar is covered. The description adds useful behavioral context: the data source is official INPI/pePI and results mirror the official site's 'Marca' tab, which sets expectations about provenance and result parity. It does not cover caching, rate limits or pagination behavior in the prose (those live only in the schema).
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 paragraphs: the first front-loads purpose plus search-mode and filter semantics, the second handles when-to-use and routing to the sibling. Every sentence earns its place with 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 six parameters fully documented, complete annotations, and an explicit alternative-tool route, the definition is nearly self-sufficient. The main gap is that no output schema exists and the description only hints at return contents ('titulares'), leaving the result shape partly unspecified.
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 both the exact/radical toggle and the Nice classification filter are already fully documented in the schema. The description restates search-mode and filter semantics but adds no syntax or format detail beyond what the schema provides — 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 and resource ('Busca marcas no pePI ... pelo texto da marca') and names the distinguishing scope (exact vs radical, optional Nice filter). It explicitly distinguishes itself from the sibling inpi_search_by_mark_advanced, so an agent can tell the two apart without opening either 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 a concrete use case ('descobrir se um nome já está registrado e quem são os titulares') and names the alternative with the condition that selects it (advanced presentation/nature/boolean searches → inpi_search_by_mark_advanced). Nothing is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
inpi_search_by_mark_advancedBusca avançada de marca (booleana/fuzzy, apresentação, natureza)ARead-onlyIdempotent
Busca avançada de marcas no pePI (INPI oficial), igual à Pesquisa Avançada do site oficial. Permite operadores booleanos (AND/OR) ou busca fuzzy, filtrar por forma de apresentação (nominativa/mista/figurativa/tridimensional/posição), natureza (produto/serviço/coletiva/certificação) e restringir a "Pedidos Vivos" (só processos ainda ativos).
Use quando a busca básica (inpi_search_by_mark) for imprecisa demais ou quando precisar filtrar por apresentação/natureza específica — por exemplo, checar colidência só entre marcas mistas na mesma classe.
| Name | Required | Description | Default |
|---|---|---|---|
| marca | Yes | Texto da marca. Aceita operadores booleanos quando fuzzy=false, ex: GOOGLE AND CLOUD | |
| natureza | No | Natureza da marca | qualquer |
| busca_fuzzy | No | false = busca booleana (padrão do pePI); true = busca fuzzy/aproximada | |
| classe_nice | No | Filtra pela Classificação de Nice, ex: 09, 42 | |
| salvar_html | No | true = também salva o resultado como um relatório HTML legível (tabela, sem depender de MCP) em disco e devolve o caminho do arquivo. | |
| apresentacao | No | Forma de apresentação da marca | qualquer |
| forcar_atualizacao | No | Ignora o cache local (padrão 6h) e busca de novo no pePI ao vivo. | |
| apenas_pedidos_vivos | No | true = só processos ativos (Pedidos Vivos); false = inclui arquivados/extintos | |
| resultados_por_pagina | No | Resultados por página. Valores aceitos pelo pePI: 20, 40, 60, 80, 100. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/openWorld/idempotent/destructive=false, but the description adds real behavioral context beyond them: a 6h local cache, the forcar_atualizacao bypass, and that salvar_html writes a readable HTML report to disk and returns its path. It does not describe pagination or return shape, so it is strong but not exhaustive.
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 paragraphs with the capability summary front-loaded and the routing guidance second; the long parenthetical enumerations of apresentação/natureza are informative rather than wasteful. Slightly dense but no filler sentences.
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 9-parameter search tool with no output schema, the description covers what it searches, how to select it, cache/save behavior, and the live-data scope. Return-format details are the only meaningful omission, and those are minor for a search tool whose annotations establish it as a safe read.
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 each parameter is already well documented (boolean vs fuzzy, enums, Nice class, page sizes). The description's parameter mentions largely restate the schema rather than adding new syntax or format detail, so the baseline of 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 (Busca avançada) and resource (marcas no pePI/INPI), and explicitly positions itself as the advanced counterpart to the basic search. An agent can distinguish it from inpi_search_by_mark without opening either 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 names the sibling inpi_search_by_mark and the conditions that select this tool instead (basic search too imprecise, or need to filter by apresentação/natureza), including a concrete example of checking collision among mistas in one class. Nothing left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
inpi_search_by_ownerBuscar marcas por titular (CNPJ/CPF ou nome)ARead-onlyIdempotent
Lista as marcas registradas por um titular no pePI (INPI oficial), buscando por CNPJ/CPF ou por nome/razão social.
A busca por CNPJ/CPF é direta. A busca por nome é em DUAS ETAPAS, igual ao site oficial: primeiro devolve os nomes de titular parecidos com o termo (cada um com um número 'pos'), depois é preciso chamar de novo com esse 'pos' para ver as marcas do titular escolhido — não existe atalho, o próprio pePI funciona assim.
Útil para levantar o portfólio de marcas de uma empresa ou pessoa antes de uma due diligence de M&A, ou para conferir se um cliente já tem registros anteriores.
| Name | Required | Description | Default |
|---|---|---|---|
| pos | No | Quando a busca por nome retorna uma lista de titulares candidatos (nomes parecidos), refaça a chamada com o mesmo nome e este 'pos' para ver as marcas do titular escolhido. | |
| nome | No | Nome ou razão social do titular | |
| cnpj_cpf | No | CNPJ ou CPF do titular, só números ou formatado | |
| salvar_html | No | true = também salva o resultado como um relatório HTML legível (tabela, sem depender de MCP) em disco e devolve o caminho do arquivo. | |
| forcar_atualizacao | No | Ignora o cache local (padrão 6h) e busca de novo no pePI ao vivo. | |
| resultados_por_pagina | No | Resultados por página. Valores aceitos pelo pePI: 20, 40, 60, 80, 100. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, openWorld and non-destructive, so the safety profile is covered. The description adds meaningful behavior beyond them: the two-stage name search that must be re-invoked with a 'pos' value, plus the fact that the real pePI enforces this flow with no workaround. Minor gaps remain (e.g. no explicit discussion of pagination across the 6h cache beyond what the schema says).
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 short paragraphs, front-loaded with what the tool does, then the critical two-step caveat, then use cases. Every sentence contributes; only the due-diligence sentence is arguably optional color.
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?
There is no output schema, so the description must convey return behavior — and it does, describing the candidate-owner list with 'pos' numbers before detail retrieval. Together with the annotations this is enough to call the tool correctly, though a note on how results are paginated/limited would make it fully self-contained.
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 parameters are already documented. The description nonetheless adds real semantic value by explaining the stateful relationship between 'nome' and 'pos' across two calls, which is the most error-prone part of invocation and is only tersely captured in the schema field text.
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 lists registered trademarks belonging to an owner, retrievable by CNPJ/CPF or by name. The 'por titular' framing implicitly separates it from the name-based sibling searches, but no sibling is named explicitly, so the differentiation is inferred rather than stated.
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 clear operating context: CNPJ/CPF search is direct, while name search requires a two-step flow with no shortcut, and it names concrete scenarios (M&A due diligence, checking a client's prior registrations). It does not tell the agent when to prefer inpi_search_by_mark or inpi_get_process_detail instead, so routing is left implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
inpi_search_by_process_numberBuscar marca por número de processoARead-onlyIdempotent
Busca uma marca no pePI (INPI oficial) por número de processo, GRU, protocolo de petição ou inscrição internacional (Protocolo de Madri). Use exatamente um desses números — é a forma mais direta de achar um processo específico quando você já sabe o número.
Retorna o(s) processo(s) encontrado(s) com número, marca, situação, titular e classe. Para o detalhe completo (classes, titulares, datas, petições), use inpi_get_process_detail com o CodPedido retornado.
| Name | Required | Description | Default |
|---|---|---|---|
| numero_gru | No | Número da GRU (Guia de Recolhimento da União) | |
| salvar_html | No | true = também salva o resultado como um relatório HTML legível (tabela, sem depender de MCP) em disco e devolve o caminho do arquivo. | |
| numero_processo | No | Número do processo/pedido, ex: 821480880 | |
| numero_protocolo | No | Número do protocolo de petição | |
| forcar_atualizacao | No | Ignora o cache local (padrão 6h) e busca de novo no pePI ao vivo. | |
| numero_inscricao_internacional | No | Número da inscrição internacional (Protocolo de Madri) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/openWorld, so safety is covered; the description adds the returned field set (número, marca, situação, titular, classe) and the routing to the detail tool. It does not restate the 6h cache behavior (that lives in the schema), but the behavioral picture is otherwise clear.
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 paragraphs: the first front-loads what/when, the second the return shape and the follow-up tool. No filler sentences.
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?
Though there is no output schema, the description enumerates the returned fields and points to inpi_get_process_detail for full detail, which is exactly what an agent needs to act and chain calls.
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 baseline is 3, but the description adds real meaning beyond the schema by emphasizing that exactly one number type should be supplied — exclusivity that the flat schema does not express.
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) and resource (marca no pePI/INPI) plus the exact key types accepted (processo, GRU, protocolo, Madri). It clearly distinguishes itself from the sibling search tools by being the number-based lookup.
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 says when to use it ('quando você já sabe o número', 'a forma mais direta') and names the alternative for the follow-up need: inpi_get_process_detail with the returned CodPedido. It also warns to use exactly one of the number types.
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.
7 tool updates
v0.1.0- First observed
inpi_get_process_detail - First observed
inpi_next_page - First observed
inpi_search_by_figurative_code - First observed
inpi_search_by_mark - First observed
inpi_search_by_mark_advanced - First observed
inpi_search_by_owner - First observed
inpi_search_by_process_number
TDQS
Scored across 7 tools
Each tool targets a clearly distinct dimension: process number, mark text, advanced mark search, owner, figurative/Vienna code, pagination, and detail retrieval. The potential basic-vs-advanced overlap is explicitly resolved by descriptions telling the agent when to escalate to the advanced variant.
All tools use a consistent snake_case inpi_<verb>_<noun> pattern (inpi_search_by_X, inpi_get_process_detail, inpi_next_page). The convention is predictable and readable throughout.
Seven tools is well-scoped for a trademark search server, with each tool earning its place across the differing search dimensions plus pagination and detail lookup. No redundancy bloat.
The surface covers the key search entry points (process, mark, advanced, owner, figurative) plus pagination and full detail retrieval, forming a complete read-only search workflow. Minor gap: no helper for Vienna/Nice classification lookup, which is deferred to an external gov site.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Brazilian INPI trademark & patent lookup by name, process number or holder (CPF/CNPJ).
Monitors Brazilian trademarks at INPI and alerts on new RPI publications and deadlines.
Trademark search, monitoring and conflict research across 30+ registers, with provenance.
INPI: Marcas, official-source lookup. Platform-hosted, pay per query with prepaid credit.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceEnables LLMs to search and retrieve detailed information from the Turkish Patent and Trademark Office (TÜRKPATENT) database for trademarks, patents, and industrial designs. It provides comprehensive intellectual property research tools through the Model Context Protocol.45-
- FlicenseNot gradedqualityBmaintenanceBridges AI agents to the Brazilian SEI system, enabling listing processes, reading documents, searching, and downloading files via session cookies.2-
- AlicenseAqualityCmaintenanceExposes the BrasilAPI as MCP tools, enabling AI agents to query Brazilian public data such as CEP, CNPJ, DDD, IBGE, banks, PIX, FIPE, NCM, exchange rates, taxes, weather, CVM information, holidays, ISBN, domains, stock tickers, and TUSS.41Apache 2.0
- AlicenseNot gradedqualityCmaintenanceBrazilian company-registry lookup via Receita Federal, allowing AI agents to query CNPJ data.6MIT