Skip to main content
Glama

MCP Compras.gov.br

compras_catmat_buscar

Read-onlyIdempotent

Busca itens CATMAT.

⚠️ Não existe busca por substring nesta API. O contrato do /modulo-material/4_consultarItemMaterial oferece descricaoItem, que é match exato: descricaoItem='CADEIRA' devolve zero registros, embora o catálogo tenha milhares de itens começando por "CADEIRA ESCRITÓRIO...". Não é um filtro degradado — é um filtro de igualdade, e o termo livre que o usuário digita quase nunca casa com a descrição inteira do item.

Por isso o termo não é enviado ao upstream: mandá-lo faria a chamada retornar o universo inteiro (~340 mil itens) sem nenhum aviso. Ele é usado para ordenar e marcar os resultados do recorte estrutural, e a filtragem real vem de codigo_grupo, codigo_classe e codigo_pdm.

Workflow recomendado:

  1. compras_catmat_listar_grupos() → escolher o grupo (ex.: 71=Mobiliários).

  2. compras_catmat_listar_classes(codigo_grupo=71) → a classe (ex.: 7110).

  3. compras_catmat_listar_pdms(codigo_classe=7110) → o PDM do material.

  4. compras_catmat_buscar(termo='cadeira', codigo_pdm=...).

Esta tool emite _aviso_filtro no payload quando o recorte informado é largo demais para ser útil.

Cache 24h por (termo + filtros + página).

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
termoYesTermo de busca textual (descrição do material/serviço). Aceita fragmento — a API faz match parcial. Ex.: 'cadeira ergonomica'.
paginaNoPágina (1-based).
codigo_pdmNoFiltro estrutural por PDM (Padrão Descritivo de Material). É o recorte mais preciso do CATMAT: agrupa as variações de um mesmo material. Obtenha o código em `compras_catmat_listar_pdms`.
codigo_grupoNoFiltro estrutural por grupo CATMAT (1-99). **FORTEMENTE RECOMENDADO** porque o filtro textual upstream está quebrado (veja docstring). Obtenha o código em `compras_catmat_listar_grupos`.
codigo_classeNoFiltro estrutural por classe CATMAT (4 dígitos). Use em conjunto com `codigo_grupo` para focar a busca.
tamanho_paginaNoRegistros por página.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault

No arguments

Schema Changelog

Changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. First observed

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description goes well beyond the readOnly/idempotent annotations: it discloses that termo is deliberately not sent to the upstream endpoint (sending it would return ~340k items), that the tool emits _aviso_filtro when the structural cut is too broad, and that results are cached for 24h. However, the input schema's termo description ('Aceita fragmento — a API faz match parcial') directly contradicts the main description's 'Não existe busca por substring nesta API', giving the agent two opposing models of the tool's core behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Every sentence earns its place: the critical warning is front-loaded, the explanation of why termo is not sent upstream prevents a costly mistake, and the workflow and cache notes are compact and actionable. Though long (~230 words), the length is justified by the counter-intuitive behavior it must convey, and the emoji/bold formatting makes the warning stand out.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given rich annotations, 100% schema coverage, and an existing output schema, the description covers all essentials and even adds payload-level behavior (_aviso_filtro) and cache semantics. It falls just short of complete because the conflicting termo semantics between the schema and the description are never reconciled, which could mislead an agent at invocation time.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 100% schema coverage the baseline is 3, but the description adds decisive meaning beyond the schema: termo's real role (ordering/marking, not filtering) is only explained here, and it reinforces codigo_pdm as the most precise cut and codigo_grupo as strongly recommended. The gain is offset by the schema's contradictory claim that termo does partial matching, which muddies the semantics of the only required parameter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The opening line 'Busca itens CATMAT' states a specific verb and resource, and the body sharpens the purpose: this tool searches the CATMAT catalog using structural filters (codigo_grupo, codigo_classe, codigo_pdm), with termo used only for ordering/marking results. The workflow explicitly names sibling tools (compras_catmat_listar_grupos, compras_catmat_listar_classes, compras_catmat_listar_pdms), distinguishing it from neighboring catalog tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The 'Workflow recomendado' section gives an explicit 4-step sequence that names the sibling tools and lands on this tool, telling the agent exactly when to call it. It also marks codigo_grupo as FORTEMENTE RECOMENDADO because the upstream text filter is broken, and states what NOT to expect (no substring search, termo never sent upstream), leaving no ambiguity about when this tool is appropriate.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

TDQS

A3.6/5.0
Disambiguation3/5

Most tools target distinct resources, and descriptions are extremely detailed, often explicitly warning about look-alikes. However, there is real overlap between composite and single-purpose tools (e.g., compras_checar_sancoes_fornecedor vs compras_perfil_fornecedor_completo vs compras_sancao_*), and similar-looking pairs like compras_contratos_consultar vs compras_contrato_comprasnet_consultar or compras_arp_listar vs compras_pncp_atas_listar require careful reading. With 100 tools, an agent will still face meaningful selection ambiguity.

Naming Consistency3/5

The dominant pattern is snake_case with a compras_ prefix, but the order and style vary: some are domain-first (compras_catmat_buscar), some are verb-first (compras_buscar_contratacoes_similares), and some are bare entity names with no verb (compras_sancao_ceis, compras_pncp_modalidades). The many listar/consultar/buscar variants are readable, but the convention is not predictable enough for a 100-tool surface.

Tool Count1/5

100 tools is an extreme count for any MCP server, regardless of domain breadth. Even if each tool has a legitimate upstream endpoint, this volume will heavily tax context windows and make reliable tool selection harder. Many tools could be consolidated into parameterized families (e.g., contratos, sancoes, pncp resources).

Completeness4/5

The server covers the Brazilian procurement domain remarkably well: catalogs, ARPs, 14.133 contracts, legacy regime, price research, suppliers, sanctions, PGC/PCA, PNCP, and Comprasnet contract subresources. Minor gaps remain, such as listing a supplier's full contract history without specifying an órgão, and some upstream limitations are only papered over with client-side workarounds.