MCP Compras.gov.br
Server Details
Preços, atas, contratos e sanções das APIs públicas de compras do governo brasileiro
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP
- URL
- Repository
- opedrosoares/MCP_Compras
- GitHub Stars
- 2
- Server Listing
- MCP Compras.gov.br
Available Tools
100 toolscompras_aggregate_contratacoes_por_periodoARead-onlyIdempotentInspect
Série temporal de contratações no PNCP por bucket.
Modo count (recomendado para tendência): 1 chamada por bucket
lendo apenas totalRegistros. Janelas grandes (até 5 anos) são viáveis.
Modo valor_*: varre todas as páginas de cada bucket para somar.
Mais lento; limita-se a MAX_PAGES_PER_BUCKET=25 páginas (× 500 itens =
12.500 registros máx por bucket). Sinaliza truncado=true quando bate
o teto.
Concurrency interna: 4 calls simultâneas. Cache 30 min.
| Name | Required | Description | Default |
|---|---|---|---|
| uf | No | UF opcional. | |
| esfera | No | Filtro de esfera (federal/estadual/municipal/distrital). Só tem efeito no modo 'valor_*' (precisa varrer páginas). | |
| metrica | No | Métrica a calcular: 'count' (rápido, 1 call por bucket), 'valor_estimado' ou 'valor_homologado' (paginado, mais lento). Use 'count' para tendência pura; só ative valores quando necessário. | count |
| data_final | Yes | Data final da janela de agregação (YYYY-MM-DD). | |
| data_inicial | Yes | Data inicial da janela de agregação (YYYY-MM-DD). | |
| granularidade | No | Tamanho de cada bucket da série: 'dia', 'semana', 'mes' ou 'ano'. | mes |
| codigo_modalidade | Yes | Modalidade PNCP a agregar. Comuns: 6=Pregão Eletrônico, 8=Dispensa, 9=Inexigibilidade, 4=Concorrência Eletrônica. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the tool as read-only, idempotent, and non-destructive. The description additionally discloses important runtime behavior: count mode reads only totalRegistros, value modes scan pages, the 25-page/12,500-record cap, truncado=true signaling, internal concurrency of 4 calls, and a 30-minute cache. This is excellent transparency beyond the annotations.
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 compact and well-structured with bolded mode headings. Every sentence carries useful information: mode semantics, performance characteristics, limits, truncation behavior, concurrency, and cache. There is no filler or repetition of schema content.
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?
The output schema and annotations already cover return values and safety semantics, so the description only needs to cover behavior and limits, which it does thoroughly. The main gap is the lack of explicit routing guidance against similar aggregation/indicator siblings, but this is minor for a tool with this much structured support.
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 each parameter, establishing a baseline of 3. The description adds value by explaining what the 'metrica' modes actually do mechanically and by documenting the truncation ceiling and page-scan behavior, which is not fully captured in the schema.
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 opening line clearly states the tool produces a time series of PNCP contracting data grouped into buckets, which is a specific verb+resource pairing. It is clearly an aggregation tool and distinct from the many single-record/list lookup siblings, though it never names a 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 description gives strong within-tool guidance: use 'count' for trends, only enable value modes when necessary, and notes that the 'esfera' filter only matters in value mode. It does not explicitly compare against siblings like compras_comparar_periodos_contratacoes, but the context is clear enough for an agent to decide when this aggregation is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compras_arp_adesoes_itemARead-onlyIdempotentInspect
Lista adesões (caronas) já realizadas a uma ARP.
Endpoint Dados Abertos /modulo-arp/5_consultarAdesoesItem. Mostra
quem aderiu e com que quantidade — indica nível de demanda e quanto
ainda resta no limite legal de adesões.
Cache 15 min.
| Name | Required | Description | Default |
|---|---|---|---|
| pagina | No | Página de resultados (1-based). Padrão 1. | |
| numero_ata | Yes | Número simples da ata (ex.: '00001/2024'). | |
| numero_item | Yes | Número do item dentro da ata. | |
| tamanho_pagina | No | Quantidade de registros por página. Padrão 50, máximo 500. | |
| unidade_gerenciadora | Yes | Código da UASG gerenciadora da ata. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only, idempotent, non-destructive, and open-world traits. The description adds value beyond those by disclosing the underlying endpoint path, the 15-minute cache behavior, and the semantic content of the response in terms of demand and legal limits.
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 compact and front-loaded: the core purpose appears in the first sentence, followed by endpoint traceability, use-case interpretation, and cache behavior. Every sentence earns its place without 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?
The tool has full schema documentation, a clear output schema, and annotations covering safety profile. The description adds the remaining context an agent needs: what the tool returns, why that matters, and a cache freshness caveat. Nothing essential 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 the description does not need to repeat parameter meanings. It correctly leaves parameter details to the schema and only adds domain-level context about ARP adhesions, which is useful but not required for parameter understanding.
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 and resource: 'Lista adesões (caronas) já realizadas a uma ARP'. It clarifies the output ('quem aderiu e com que quantidade') and distinguishes its focus from sibling tools like saldo_item or unidades_item by emphasizing demand and remaining legal adhesion limits.
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 makes the use context clear: use when you need to see which entities adhered to an ARP and in what quantities, and to assess demand level or remaining adhesion capacity. It does not explicitly mention alternatives or exclusions, but the intended scenario is well implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compras_arp_buscar_por_objetoARead-onlyIdempotentInspect
Busca ARPs vigentes cujo objeto contém uma palavra-chave.
Resolve a limitação do endpoint /modulo-arp/1.2_consultarARP_FimVigencia,
que não aceita filtro por texto: pagina internamente até max_paginas_varridas
e filtra client-side por presença de palavra_chave (case-insensitive,
com normalização de acentos). Curto-circuita quando atinge max_resultados.
O servidor faz o trabalho que antes era pedido ao LLM — sem isso, o
roteiro oportunidades_carona_arp esbarrava em 169k ARPs vigentes e
339 páginas. Achado da bateria A v0.3.5.
Limitação conhecida: o schema upstream de ARP não traz UF no
item — só nomeOrgao e nomeUnidadeGerenciadora. Para filtrar por
UF, cruze os matches com compras_uasg_consultar usando
codigoUnidadeGerenciadora e compare unidade.uf. Não tentamos esse
cruzamento aqui para manter a tool barata e previsível.
Output: { "resultado": [], "total_examinadas": int, "matches": int, "paginas_varridas": int, "curto_circuitou": bool, "_filtro_objeto": {...} }
Cache 15 min por (palavra_chave + janela + caps).
| Name | Required | Description | Default |
|---|---|---|---|
| palavra_chave | Yes | Termo a procurar no campo `objetoCompra` das ARPs (case-insensitive, com normalização básica de acentos). Exemplos: 'notebook', 'uniformes', 'limpeza'. | |
| max_resultados | No | Quantos matches no máximo retornar (curto-circuita a varredura). | |
| max_paginas_varridas | No | Quantas páginas do upstream serão varridas para encontrar matches (proteção de latência). Default 10 × 500 itens = até 5.000 ARPs examinadas. Cap em 50. | |
| data_vigencia_final_max | Yes | Limite máximo do fim de vigência (YYYY-MM-DD). | |
| data_vigencia_final_min | Yes | Limite mínimo do fim de vigência (YYYY-MM-DD). Tipicamente hoje para 'apenas vigentes'. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, idempotent, and open-world; the description adds substantial behavior beyond them: internal pagination up to max_paginas_varridas, client-side filtering, short-circuit at max_resultados, accent-normalized case-insensitive matching, and a 15-minute cache keyed by (palavra_chave + janela + caps). The bounded pagination honestly signals that the search is capped and not exhaustive, consistent with openWorldHint. No contradiction with annotations.
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 in the first sentence, followed by mechanism, rationale, known limitation, and output shape in a clearly partitioned structure. The internal provenance note ('Achado da bateria A v0.3.5') adds no value for an agent, and the 169k/339-page anecdote, while illustrative of latency motivations, is slightly longer than strictly necessary.
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?
Complete for the tool's complexity level: it defines the output object inline, discloses the bounded-search behavior, the caching semantics, and the missing-UF limitation with a concrete remediation path. Nothing an agent needs to invoke it correctly or interpret results properly is absent.
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 well-documented individual parameters, so the baseline is 3. The description adds meaning by explaining how the parameters interact — page scanning up to max_paginas_varridas, short-circuiting when max_resultados is reached, and the cache key spanning keyword+window+caps — which the schema does not convey. Not a 5 because the schema already carries most per-parameter 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+resource+scope: searches current ARPs whose `objeto` contains a keyword, with case-insensitive and accent-normalized matching. It references the exact upstream endpoint it builds upon and explicitly calls out the scenario it was created for (oportunidades_carona_arp), clearly distinguishing it from siblings like compras_arp_por_fim_vigencia and compras_arp_consultar.
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?
Explains why the tool exists — the upstream endpoint /modulo-arp/1.2_consultarARP_FimVigencia does not accept text filters — and when it applies (keyword search in `objeto`). It also gives an explicit when-not: for UF filtering it instructs crossing matches with compras_uasg_consultar via codigoUnidadeGerenciadora, naming the exact alternative and the reason.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compras_arp_consultarARead-onlyIdempotentInspect
Consulta uma ARP específica pelo identificador PNCP.
Endpoint Dados Abertos /modulo-arp/1.1_consultarARP_Id. Devolve o
cabeçalho completo da ata (vigência, modalidade, gerenciadora, valores).
Quando o numero_controle_pncp_ata vem no formato de compra (sem
o sufixo -NNNNNN que numera a ata), a tool detecta e devolve
diagnóstico explícito em vez de propagar encontrada=false silencioso.
Cache 15 min.
| Name | Required | Description | Default |
|---|---|---|---|
| numero_controle_pncp_ata | Yes | Identificador PNCP da **ata** (formato `cnpj14-1-sequencial/ano-NNNNNN`, onde NNNNNN numera a ata dentro da compra — compras SRP multi-fornecedor geram várias atas). Exemplo: `00394452000103-1-004729/2024-000006`. Retornado em `compras_arp_por_fim_vigencia` no campo `numeroControlePncpAta`. NÃO confundir com `numeroControlePncpCompra` (formato sem o sufixo). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and non-destructive. The description adds valuable behavioral context: it detects compra-format IDs and returns an explicit diagnostic, and it mentions a 15-minute cache. These are beyond what annotations provide, enhancing transparency about the tool's behavior in edge cases.
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 concise and well-structured. It front-loads the main purpose, then provides the endpoint, return content, a special behavior note, and cache info. Every sentence adds value without redundancy. It's appropriately sized for a single-parameter 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?
The description covers the essential aspects: what it does, what it returns (header fields), and a specific edge case. Given the tool has an output schema (not shown but referenced), the description doesn't need to detail return structure. It lacks explicit error handling beyond the format issue, but that's minor. Overall, it's complete enough for an agent to call it 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%, and the schema already provides a detailed description of the parameter, including format, example, and a warning about confusion with compra ID. The description adds a bit about the diagnostic behavior, but that is more behavioral than parameter semantics. Since the schema does the heavy lifting, a baseline of 3 is appropriate.
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 clearly states the tool's purpose: 'Consulta uma ARP específica pelo identificador PNCP.' It specifies the exact resource (a specific ARP) and the identifier format, and it mentions the endpoint and return content. This distinguishes it from sibling tools like compras_arp_listar (which lists many) and compras_arp_por_fim_vigencia (which filters by date).
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 when to use this tool: when you have a specific ARP identifier. It also provides a clear usage warning: if the identifier is in compra format (without the '-NNNNNN' suffix), the tool returns a diagnostic instead of a silent false. This is a practical guideline. However, it does not explicitly mention alternatives or when not to use it, though the specificity is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compras_arp_itens_listarARead-onlyIdempotentInspect
Lista itens de ARPs na janela de vigência informada.
Endpoint Dados Abertos /modulo-arp/2_consultarARPItem. O upstream
exige dataVigenciaInicialMin/Max (janela ≤365 dias). Use filtros
opcionais para localizar atas com um item específico.
Cache 15 min.
| Name | Required | Description | Default |
|---|---|---|---|
| pagina | No | Página de resultados (1-based). Padrão 1. | |
| tipo_item | No | Tipo do item: 'M' (material) ou 'S' (serviço). | |
| codigo_item | No | Filtra por código CATMAT ou CATSER. | |
| ni_fornecedor | No | CPF/CNPJ do fornecedor (apenas dígitos). | |
| tamanho_pagina | No | Quantidade de registros por página. Padrão 50, máximo 500. | |
| data_vigencia_inicial_max | Yes | Data máxima de início de vigência (YYYY-MM-DD). | |
| data_vigencia_inicial_min | Yes | Data mínima de início de vigência (YYYY-MM-DD). | |
| codigo_unidade_gerenciadora | No | UASG gerenciadora (opcional). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and non-destructive. The description adds valuable behavioral context: the upstream endpoint, the ≤365-day window constraint, and a 15-minute cache, none of which appear in annotations. It does not over-promise or contradict annotations.
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, dense sentences front-load the core purpose and then provide endpoint, constraint, filter tip, and cache details without repetition. Each sentence adds distinct useful 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?
Given the existing output schema and annotations, the description covers the essential operational facts: required window, max 365 days, optional filters, and cache behavior. It does not discuss pagination limits or authentication, but these are visible in the schema/annotations and are not critical gaps.
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 covers 100% of parameters, but the description goes beyond it by warning that the upstream requires the date-range pair and that the window cannot exceed 365 days—a constraint absent from the schema. It also gives the optional filters a purpose ('localizar atas com um item específico').
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 action and resource: listing ARP items within a supplied validity window, and identifies the exact upstream endpoint. It does not, however, explicitly differentiate itself from sibling tools such as compras_arp_listar or compras_arp_consultar, relying on the tool name to imply the item-level scope.
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 provides clear context for when the tool applies—list ARP items in a date window—and even offers a filter tip for finding atas with a specific item. But it never names alternative tools or conditions under which another sibling should be preferred, so usage guidance remains implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compras_arp_listarARead-onlyIdempotentInspect
Lista Atas de Registro de Preço (ARPs) por janela de início de vigência.
Endpoint Dados Abertos /modulo-arp/1_consultarARP. O upstream exige
janela dataVigenciaInicialMin/Max (≤ 365 dias). Para listar atas
próximas do vencimento, use compras_arp_por_fim_vigencia.
Cache 15 min.
| Name | Required | Description | Default |
|---|---|---|---|
| pagina | No | Página de resultados (1-based). Padrão 1. | |
| tamanho_pagina | No | Quantidade de registros por página. Padrão 50, máximo 500. | |
| codigo_modalidade_compra | No | Filtra por modalidade da compra que originou a ata. | |
| data_vigencia_inicial_max | Yes | Data MÁXIMA do início da vigência da ata (YYYY-MM-DD). Obrigatório. Janela max ≤ 365 dias a partir de data_vigencia_inicial_min. | |
| data_vigencia_inicial_min | Yes | Data MÍNIMA do início da vigência da ata (YYYY-MM-DD). Obrigatório. A janela entre min e max deve ser de no máximo 365 dias. | |
| numero_ata_registro_preco | No | Filtra por número da ata (ex.: '00001/2024'). | |
| codigo_unidade_gerenciadora | No | Filtra ARPs pela UASG gerenciadora (5-6 dígitos). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and non-destructive behavior. The description adds meaningful context beyond those: the upstream open-data endpoint, the 365-day window constraint, and the 15-minute cache. This is useful supplementary behavioral information without contradicting annotations.
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 compact and front-loaded: purpose, endpoint, constraint, alternative, and cache are each communicated in tight, purposeful sentences. There is no filler or redundant restatement of schema details.
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 that there is a rich output schema and annotations already cover safety and idempotency, the description provides all essential context for correct invocation: what it lists, the upstream constraint, the sibling alternative, and caching behavior. 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 description coverage is 100%, and each parameter is already well-documented in the input schema. The description reinforces the 365-day window rule but does not add substantial new parameter-level meaning, so the baseline score of 3 is appropriate.
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 starts with a specific verb and resource: 'Lista Atas de Registro de Preço (ARPs) por janela de início de vigência.' It clearly defines what the tool does and explicitly distinguishes it from the sibling compras_arp_por_fim_vigencia.
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 explicit guidance: the upstream requires a date window of at most 365 days, and it names the exact alternative to use for ARPs near expiration ('Para listar atas próximas do vencimento, use compras_arp_por_fim_vigencia'). This is clear when-to-use and when-not-to-use direction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compras_arp_por_fim_vigenciaARead-onlyIdempotentInspect
Lista ARPs cuja vigência termina dentro do intervalo informado.
Endpoint Dados Abertos /modulo-arp/1.2_consultarARP_FimVigencia.
Permite ao gestor identificar atas próximas do vencimento.
Cache 15 min.
| Name | Required | Description | Default |
|---|---|---|---|
| pagina | No | Página de resultados (1-based). Padrão 1. | |
| tamanho_pagina | No | Quantidade de registros por página. Padrão 50, máximo 500. | |
| data_vigencia_final_max | Yes | Data MÁXIMA de fim de vigência (YYYY-MM-DD). Obrigatório. | |
| data_vigencia_final_min | Yes | Data MÍNIMA de fim de vigência (YYYY-MM-DD). Obrigatório. Janela max ≤ 365 dias. | |
| codigo_unidade_gerenciadora | No | UASG gerenciadora (opcional). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, and non-destructive behavior. The description adds meaningful behavioral context beyond annotations: the specific open-data endpoint path and the 15-minute cache, which alerts agents to potential data staleness.
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 sentences, each earning its place: the main functionality, the endpoint reference, and the cache behavior. No fluff or repetition of schema details.
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 a rich output schema, complete parameter descriptions, and safety annotations, the description covers the remaining essentials: purpose, endpoint, cache, and use case. It is adequately complete for an agent to invoke correctly, though it could optionally mention the 365-day window or pagination, both already present in 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?
The input schema has 100% parameter description coverage, so the schema fully explains each parameter. The description's 'intervalo informado' phrase loosely reinforces the date-range parameters but adds no additional semantic value beyond the schema.
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 opens with a specific verb and resource: 'Lista ARPs' whose vigência ends within a given interval. This clearly differentiates it from siblings like compras_arp_listar or compras_arp_consultar by focusing on the end-of-vigency date range criterion.
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 provides a clear use context: 'Permite ao gestor identificar atas próximas do vencimento.' This tells the agent when this tool is relevant, though it does not explicitly state exclusions or name alternative sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compras_arp_saldo_itemARead-onlyIdempotentInspect
Devolve o saldo (quantidade ainda disponível) por item da ARP.
Endpoint Dados Abertos /modulo-arp/4_consultarEmpenhosSaldoItem.
Crítico para adesão: a ata pode estar vigente mas com saldo
zerado. Sem saldo, não há como aderir.
Estrutura do payload: o upstream retorna 1 linha por
(numeroItem, unidade, tipo) — onde tipo pode ser GERENCIADORA,
PARTICIPANTE etc. O mesmo numeroItem aparece várias vezes quando
há múltiplas unidades alocadas (carona ou rateio). Não é
duplicação — são alocações distintas dentro da mesma ata.
Para evitar confusão (achado bateria A v0.3.5), além do resultado
cru, anexamos resumo_por_item: dicionário agregando por
numeroItem com soma das quantidades registradas/empenhadas e
saldo total — pronto para decisão de adesão.
Cache 15 min (saldo muda ao longo do dia).
| Name | Required | Description | Default |
|---|---|---|---|
| pagina | No | Página de resultados (1-based). Padrão 1. | |
| numero_ata | Yes | Número simples da ata (ex.: '00001/2024'). | |
| tamanho_pagina | No | Quantidade de registros por página. Padrão 50, máximo 500. | |
| unidade_gerenciadora | Yes | Código da UASG gerenciadora da ata. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, the description discloses useful behavior: the upstream returns one row per (numeroItem, unidade, tipo), repeated numeroItem values are not duplicates, a `resumo_por_item` aggregation is attached to avoid ambiguity, and there is a 15-minute cache because balance changes throughout the day.
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 well-structured, front-loaded with the main purpose, and uses tight sections for complexity, risk context, payload shape, aggregation, and cache behavior. It slightly overshoots with an internal provenance note ('achado bateria A v0.3.5') that carries little value for an agent selecting the 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?
For a read-only, idempotent query tool, this is complete: it covers when the result matters, what the payload looks like, why repeated rows should not be treated as errors, what aggregated summary is available, and how current the data is. The output schema exists, so return-value structure does not need to be fully repeated here.
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 parameter documentation already explains `numero_ata`, `unidade_gerenciadora`, `pagina`, and `tamanho_pagina`. The description adds no parameter-specific semantics beyond what the schema already provides, making the baseline 3 appropriate.
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 clearly states the verb and resource: it returns the remaining balance (`saldo`) per ARP item, and even defines `saldo` as 'quantidade ainda disponível'. The resulting concept ('saldo por item') is distinct enough to set it apart from sibling tools such as `compras_arp_itens_listar` and `compras_arp_unidades_item`.
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 a strong when-to-use signal: the tool is described as critical for adhesion decisions because the ata may be valid but the balance zero. It does not, however, name alternative tools or explicitly say when not to use this one, so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compras_arp_unidades_itemARead-onlyIdempotentInspect
Lista UGs participantes (potenciais caronas) de um item da ARP.
Endpoint Dados Abertos /modulo-arp/3_consultarUnidadesItem. Determina
quais unidades podem usar a ata como carona (adesão).
Cache 15 min.
| Name | Required | Description | Default |
|---|---|---|---|
| pagina | No | Página de resultados (1-based). Padrão 1. | |
| numero_ata | Yes | Número simples da ata (ex.: '00001/2024'). Distinto do `numeroControlePncpAta` — use o campo retornado em `compras_arp_listar` ou `compras_arp_itens_listar`. | |
| numero_item | Yes | Número do item dentro da ata. | |
| tamanho_pagina | No | Quantidade de registros por página. Padrão 50, máximo 500. | |
| unidade_gerenciadora | Yes | Código da UASG gerenciadora da ata. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the read-only, idempotent, non-destructive profile. The description adds useful behavioral context by naming the underlying Dados Abertos endpoint and the 15-minute cache, which is meaningful beyond the annotations. It does not contradict annotations.
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 three short sentences with zero filler. The core purpose is front-loaded in the first sentence, followed by the endpoint reference and a brief cache note. Every 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 a simple listing tool, the description is complete: it states the resource scope, the endpoint, caching behavior, and the semantic distinction from actual adesões. The output schema exists, annotations cover safety, and the input schema fully documents parameters, so nothing needed 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?
The description itself does not elaborate on parameters, but schema description coverage is 100%, including the disambiguation note for numero_ata versus numeroControlePncpAta. Per the baseline rule, a fully covered schema makes 3 appropriate even without parameter-specific info in 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?
The description uses a specific verb+resource combination: 'Lista UGs participantes (potenciais caronas) de um item da ARP.' It clearly defines the returned entities as potential carona units, which distinguishes it from the related sibling compras_arp_adesoes_item. The added explanation 'quais unidades podem usar a ata como carona (adesão)' reinforces the precise scope.
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 clearly implies when to use the tool: to determine which UGs are eligible to use an ARP item as carona/adesão. It does not explicitly name alternatives or exclusions, but the phrase 'potenciais caronas' provides enough contextual contrast with actual adesão tools. A direct reference to compras_arp_adesoes_item would make it a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compras_buscar_contratacoes_similaresARead-onlyIdempotentInspect
Federa Dados Abertos + PNCP buscando contratações similares.
Composição: consulta os itens de contratações 14.133 no Dados Abertos
(/modulo-contratacoes/2_, filtrando por codItemCatalogo e só itens com
resultado) + publicações PNCP do período, deduplica pelo número de controle
PNCP e devolve os max_resultados mais recentes. Insumo para mapear
benchmarks de outros órgãos.
O recorte por CATMAT/CATSER vale para a perna Dados Abertos. A perna PNCP é
best-effort por modalidade e não aceita filtro por item de catálogo — por
isso amostra_dados_abertos e amostra_pncp vêm separadas no payload.
Atenção latência: chama o PNCP em 3 modalidades (Pregão, Dispensa, Concorrência) em paralelo. Cada chamada PNCP costuma levar 30-60s — o tempo total da composta tende a 60-90s quando o cache está frio. Com Redis configurado as chamadas seguintes voltam em <1s.
| Name | Required | Description | Default |
|---|---|---|---|
| uf | No | Filtro opcional por UF. | |
| codigo_catmat | No | Código CATMAT do item. Mutuamente exclusivo com codigo_catser. | |
| codigo_catser | No | Código CATSER do serviço. Mutuamente exclusivo com codigo_catmat. | |
| periodo_meses | No | Janela de busca em meses contados de hoje para trás. | |
| max_resultados | No | Máximo de contratações similares a retornar (deduplicadas). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/idempotent/destructive annotations, the description discloses substantial behavioral detail: the composite data-source flow, deduplication by PNCP control number, the split response payload, and the 60–90s latency on cold cache with expected <1s with Redis. This gives the agent realistic expectations for execution time and response shape.
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 dense but well-structured, starting with the one-line purpose, then composition, limitations, and latency warning. Every paragraph earns its place, and formatting with bold emphasizes the key caveat sections without unnecessary 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?
Given the complexity of the federated operation, the description covers data sources, filtering boundaries, internal logic, latency, and output payload indications. With an output schema present and annotations marking the operation as safe and idempotent, nothing essential is missing for an agent to invoke the tool 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%, so the baseline is 3, but the description adds meaningful parameter semantics: max_resultados controls the most recent deduplicated results, and codigo_catmat/codigo_catser only filter the Dados Abertos leg while PNCP runs best-effort by modality. This adds value beyond the schema's field descriptions.
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 opens with a clear statement that the tool federates Dados Abertos and PNCP to find similar contratações, which is a specific verb and resource. It further clarifies the composition by mentioning item-level querying, PNCP deduplication, and returning the most recent max_resultados, making it easily distinguishable from 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?
The description states the intended use case ('Insumo para mapear benchmarks de outros órgãos') and gives important limitations, such as PNCP not accepting catalog-item filters and CATMAT/CATSER only applying to the Dados Abertos side. It does not explicitly name alternative tools or exclusion conditions, but the context is clear enough for an agent to decide when to call it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compras_catmat_buscarARead-onlyIdempotentInspect
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:
compras_catmat_listar_grupos()→ escolher o grupo (ex.: 71=Mobiliários).compras_catmat_listar_classes(codigo_grupo=71)→ a classe (ex.: 7110).compras_catmat_listar_pdms(codigo_classe=7110)→ o PDM do material.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).
| Name | Required | Description | Default |
|---|---|---|---|
| termo | Yes | Termo de busca textual (descrição do material/serviço). Aceita fragmento — a API faz match parcial. Ex.: 'cadeira ergonomica'. | |
| pagina | No | Página (1-based). | |
| codigo_pdm | No | Filtro 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_grupo | No | Filtro 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_classe | No | Filtro estrutural por classe CATMAT (4 dígitos). Use em conjunto com `codigo_grupo` para focar a busca. | |
| tamanho_pagina | No | Registros por página. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
compras_catmat_consultarARead-onlyIdempotentInspect
Consulta detalhes de um item CATMAT específico pelo código.
Devolve nome do item, PDM, grupo, classe, características, NCM e unidades de fornecimento. Útil para confirmar o código antes de fazer pesquisa de preços ou listar contratações similares.
Cache de 24h.
| Name | Required | Description | Default |
|---|---|---|---|
| codigo_item | Yes | Código numérico do item no CATMAT (Catálogo de Materiais). Inteiro de 4 a 8 dígitos. Exemplo: 460789. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description adds useful behavioral context beyond the schema by disclosing the 24h cache, and it does not contradict the annotations.
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 compact and front-loaded with the core action, followed by the returned data, a practical use case, and the cache note. Every sentence earns its place and there is no 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?
With only one parameter, a fully covered input schema, an output schema, and annotations covering safety, the description provides all necessary context: what it does, what it returns, when to use it, and the 24h cache behavior. Nothing essential 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 the input schema fully documents the codigo_item parameter, including type, length, and example. The description only says 'pelo código', adding no semantic value beyond the schema; baseline 3 is appropriate.
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 opens with a specific verb and resource: consult details of a specific CATMAT item by code. It then enumerates the returned fields (nome, PDM, grupo, classe, características, NCM, unidades), which clearly distinguishes this lookup tool from sibling tools like compras_catmat_buscar or listar_classes.
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 gives an explicit use case: confirm the item code before searching prices or listing similar contracts. It does not name alternatives or state when not to use the tool, but the context is clear enough for an agent to select it appropriately.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compras_catmat_listar_classesARead-onlyIdempotentInspect
Lista as classes do CATMAT, opcionalmente filtradas por grupo.
Classes são o segundo nível da hierarquia (ex.: dentro do grupo 71 Mobiliário, a classe 7110 é "Mobiliário de escritório").
Cache de 24h.
| Name | Required | Description | Default |
|---|---|---|---|
| pagina | No | Página de resultados (1-based). Padrão 1. | |
| codigo_grupo | No | Restringe a classes pertencentes a este grupo CATMAT. Se omitido, lista classes de todos os grupos. | |
| tamanho_pagina | No | Quantidade de registros por página. Padrão 50, máximo 500. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint=false. The description adds useful behavioral context beyond annotations, notably the 'Cache de 24h' behavior and the hierarchical relationship of classes to groups. There is no contradiction with annotations.
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 compact and front-loaded: the first sentence states the action and optional filter, the second adds hierarchy context with an example, and the third notes caching. Every sentence earns its place without 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?
For a simple read-only list tool with three optional, fully documented parameters and an output schema, the description is complete. It explains the data hierarchy, optional filtering, and caching, so an agent has enough context to invoke it 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 description coverage is 100%, so the schema already documents all three parameters. The description adds context about the group filter and hierarchy but does not meaningfully extend parameter semantics beyond what the schema provides.
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+resource: 'Lista as classes do CATMAT', with an optional group filter. It also places classes in the hierarchy with a concrete example, which clearly distinguishes it from sibling tools like compras_catmat_listar_grupos.
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 conveys that this tool is for listing CATMAT classes, optionally filtered by group, and clarifies the hierarchy level. However, it does not explicitly say when to prefer it over alternatives such as compras_catser_listar_classes or compras_catmat_listar_grupos; usage is implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compras_catmat_listar_gruposARead-onlyIdempotentInspect
Lista os grupos do CATMAT (Catálogo de Materiais).
Grupos são o nível mais alto da hierarquia CATMAT (ex.: 10=ARMAMENTO, 11=MATERIAIS BÉLICOS NUCLEARES). Use esta tool para enquadrar a contratação no grupo correto antes de descer para classes/PDM/itens.
Cache de 24h: os grupos mudam muito raramente. Total atual ~79 grupos.
| Name | Required | Description | Default |
|---|---|---|---|
| pagina | No | Página de resultados (1-based). Padrão 1. | |
| tamanho_pagina | No | Quantidade de registros por página. Padrão 50, máximo 500. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, idempotent, and non-destructive behavior. The description adds useful behavioral context about caching (24h) and the total number of groups (~79), which helps the agent manage expectations about data freshness and scale. No contradictions with annotations.
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 concise and well-structured: a clear listing statement, hierarchy context, usage guidance, and a caching note. All sentences add value without 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?
For a simple two-parameter list endpoint with a complete input schema and output schema, the contextual information provided (hierarchy, usage, cache, total count) is sufficient for an agent to invoke it correctly. No missing essential details.
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 input schema fully documents both parameters (pagina, tamanho_pagina) with descriptions. The tool description does not add additional parameter details, so the baseline score of 3 is appropriate.
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 clearly states that the tool lists CATMAT groups, defines them as the highest hierarchy level, and provides examples. It also distinguishes this from sibling tools by mentioning descent to classes/PDMs/items.
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 gives explicit guidance: use this tool to frame contracting in the correct group before descending to classes/PDMs/items. It also notes that groups change rarely and caching is appropriate, helping the agent decide when to call this vs. other catalog tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compras_catmat_listar_pdmsARead-onlyIdempotentInspect
Lista os PDMs (Padrão Descritivo de Material) do CATMAT.
Endpoint /modulo-material/3_consultarPdmMaterial. É o terceiro nível da
hierarquia do catálogo: grupo → classe → PDM → item.
O PDM é o que dá nome à família do material ("CADEIRA ESCRITÓRIO", "MICROCOMPUTADOR"), enquanto o item é uma variação específica dela. Como a API não faz busca por substring, descer até o PDM é a forma prática de localizar o material certo antes de pedir os itens.
Uma classe devolve suas dezenas de PDMs nomeados em uma chamada — a
classe 7110 (Mobiliário de escritório) tem 98 PDMs. A alternativa seria
varrer milhares de itens e deduplicar codigoPdm client-side.
Isto é navegação hierárquica, não busca: o endpoint não tem filtro
textual. Combine com compras_catmat_listar_grupos e
compras_catmat_listar_classes para descer a hierarquia, e depois passe o
codigo_pdm para compras_catmat_buscar.
Cache 24h.
| Name | Required | Description | Default |
|---|---|---|---|
| pagina | No | Página de resultados (1-based). Padrão 1. | |
| codigo_pdm | No | Código de um PDM específico. | |
| codigo_grupo | No | Código do grupo CATMAT (2 dígitos) para listar seus PDMs. | |
| apenas_ativos | No | Se `true`, só PDMs com status ativo no catálogo. | |
| codigo_classe | No | Código da classe CATMAT (4 dígitos). É o recorte mais útil: uma classe devolve suas dezenas de PDMs em uma única chamada. | |
| tamanho_pagina | No | Quantidade de registros por página. Padrão 50, máximo 500. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, openWorldHint=true, and destructiveHint=false, so the safety profile is covered. The description adds valuable behavior beyond annotations: the endpoint has no textual filter, one class call returns dozens of named PDMs, and results are cached for 24h. No contradiction with the annotations exists.
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 the core action, then builds context in tight, purposeful paragraphs: endpoint, hierarchy role, example, limitation, sibling routing, and cache. Every sentence earns its place by aiding tool selection, parameter choice, or understanding behavior, with no 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 zero required parameters, 100% schema coverage, a present output schema, and comprehensive annotations, the description supplies all remaining context needed: the endpoint, hierarchy position, no-substring-search limitation, recommended sibling workflow, example scale, and cache behavior. An agent can invoke and integrate this tool correctly without guessing.
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 all six optional parameters are already documented. The description adds meaningful extra context, especially for codigo_classe, highlighting it as 'o recorte mais útil' and giving a concrete example (class 7110 has 98 PDMs), which helps the agent choose effective parameters before calling.
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 opens with the specific action and resource ('Lista os PDMs do CATMAT') and immediately establishes the catalog position: grupo → classe → PDM → item. It clearly distinguishes this from search tools by stating 'Isto é navegação hierárquica, não busca', so an agent can tell it apart from compras_catmat_buscar and related 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?
The description explicitly explains when to use this tool: to descend the hierarchy and locate material families before requesting items, because the API does not support substring search. It names the alternative approach (scanning thousands of items and deduplicating client-side), and gives a concrete workflow: combine with compras_catmat_listar_grupos and compras_catmat_listar_classes, then pass codigo_pdm to compras_catmat_buscar.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compras_catser_consultarARead-onlyIdempotentInspect
Consulta detalhes de um item CATSER pelo código.
Devolve nome do serviço, descrição, seção/divisão/grupo/classe e unidades de medida. Use para confirmar o código antes de pesquisar preços ou contratações similares.
Cache de 24h.
| Name | Required | Description | Default |
|---|---|---|---|
| codigo_item | Yes | Código numérico do item no CATSER (Catálogo de Serviços). Inteiro de 4 a 6 dígitos. Exemplo: 27332. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false. The description adds useful behavioral context beyond that: a 24-hour cache and the specific catalog data returned. No contradiction with annotations.
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 compact and front-loaded: purpose first, then return fields, then use case, then cache behavior. Every sentence earns its place with no redundant 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?
For a straightforward read-only lookup with one documented parameter, an output schema, and complete annotations, the description covers everything needed: what it returns, why to use it, and the caching caveat. There are no material gaps.
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 input schema already describes codigo_item as a 4-6 digit integer with an example, giving 100% schema description coverage. The description only refers to 'pelo código' and does not add new parameter meaning beyond what the schema already provides, 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?
The description opens with a specific verb+resource statement: 'Consulta detalhes de um item CATSER pelo código.' It further specifies the exact fields returned (nome do serviço, descrição, seção/divisão/grupo/classe, unidades de medida) and names the intended pre-price-search workflow, which helps distinguish it from sibling list/catalog 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?
The description explicitly states when to use it: 'Use para confirmar o código antes de pesquisar preços ou contratações similares.' This gives clear contextual guidance pointing toward related workflows, though it does not explicitly name sibling alternatives or state when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compras_catser_listar_classesARead-onlyIdempotentInspect
Lista as classes CATSER, opcionalmente filtradas por grupo.
Cache de 24h.
| Name | Required | Description | Default |
|---|---|---|---|
| pagina | No | Página de resultados (1-based). Padrão 1. | |
| codigo_grupo | No | Restringe a classes do grupo CATSER informado. | |
| tamanho_pagina | No | Quantidade de registros por página. Padrão 50, máximo 500. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint, and non-destructive behavior. The description adds a meaningful 24-hour cache trait, informing the agent that results may be stale, and clarifies the optional group filter scope.
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 short sentences: the first states the action and optional filter, the second provides the cache behavior. No filler or repetition of schema details.
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?
The description, combined with rich annotations and a full input/output schema, covers the essential behavior of this simple list tool. It notes the only non-obvious operational detail (24h cache) and the optional filter, so an agent can invoke it correctly. It does not discuss when to prefer this over sibling listing tools, but that gap is captured in the usage_guidelines dimension.
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 all three parameters (pagina, codigo_grupo, tamanho_pagina) are fully documented in the schema. The description only reinforces the optional group filter captured by codigo_grupo, adding no syntax or format details beyond the schema.
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 uses the specific verb 'Lista' with the resource 'classes CATSER' and an optional group filter, making the operation unambiguous. It naturally distinguishes from siblings like compras_catser_listar_secoes (sections), compras_catser_consultar (single consult), and compras_catmat_listar_classes (CATMAT classes) through the resource term and verb.
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 the tool is for listing CATSER classes and can optionally be narrowed by group, but it provides no explicit when-to-use guidance or mention of alternatives. An agent must infer from the tool name and sibling list which tool to choose.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compras_catser_listar_secoesARead-onlyIdempotentInspect
Lista as seções do CATSER (Catálogo de Serviços).
Seções são o nível mais alto da hierarquia CATSER (baseada no CPC ONU). Use para enquadrar a contratação de serviços em uma seção antes de descer para divisões/grupos/classes/itens.
Cache de 24h.
| Name | Required | Description | Default |
|---|---|---|---|
| pagina | No | Página de resultados (1-based). Padrão 1. | |
| tamanho_pagina | No | Quantidade de registros por página. Padrão 50, máximo 500. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and non-destructive behavior. The description adds beyond those by disclosing 'Cache de 24h', a meaningful behavioral trait. It also provides conceptual context about hierarchy placement, enhancing transparency.
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 compact and front-loaded with the main purpose. The three components (what, when, cache) each earn their place. No filler or 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?
For a simple paginated list tool, the description covers what it lists, where it fits in the hierarchy, when to use it, and caching behavior. Parameters are fully documented in the schema, and an output schema exists, so return details are not needed.
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%, with both parameters documented (defaults, max page size). The description adds no parameter-specific information, but it is not required to because the schema already handles it. Baseline 3 is appropriate.
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 ('Lista') and resource ('seções do CATSER'), and clarifies that these are the highest level of the CATSER hierarchy. This distinguishes it conceptually from sibling tools like compras_catser_listar_classes even without naming them.
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 explicitly says when to use this tool: 'Use para enquadrar a contratação de serviços em uma seção antes de descer para divisões/grupos/classes/itens.' This gives clear context, though it does not name alternative tools or state when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compras_checar_sancoes_fornecedorARead-onlyIdempotentInspect
Consolida sanções de um fornecedor (CEIS + CNEP + CEPIM + leniência + impedimentos).
Composição: chama em paralelo as listas do Portal da Transparência e os impedimentos do Comprasnet. Retorna um veredito booleano + lista consolidada de sanções ativas.
Levanta ComprasAuthError se TRANSPARENCIA_API_KEY não estiver configurada.
Sempre use antes de homologar pregões/contratos. Cache 10 min.
| Name | Required | Description | Default |
|---|---|---|---|
| cnpj | Yes | CNPJ do fornecedor (14 dígitos, com ou sem pontuação). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already carry readOnly/idempotent/destructive hints, and the description adds genuine context on top: it aggregates via parallel calls to Portal da Transparência and Comprasnet, raises ComprasAuthError when TRANSPARENCIA_API_KEY is unset, and has a 10-minute cache. It does not speculate on partial-failure behavior when one of the parallel sources fails, which would have made it a 5.
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 core purpose followed by composition, error behavior, usage directive, and cache — each sentence earns its place. There is mild redundancy between 'CEIS + CNEP + CEPIM + leniência + impedimentos' in the first line and the parallel-composition sentence, but the text overall is appropriately compact.
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 1-parameter tool with 100% schema coverage, a rich output schema, and informative annotations, the description covers the main operational context: sources, return shape (verdict + consolidated list), auth prerequisite, cache, and when to call it. A minor gap is the unspecified behavior when one of the parallel upstream systems is unavailable.
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% — the schema already describes cnpj as 'CNPJ do fornecedor (14 dígitos, com ou sem pontuação)'. The description adds no further parameter-level detail, so the baseline of 3 applies since the schema carries the full semantic load.
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 opens with a specific verb + resource ('Consolida sanções de um fornecedor') and enumerates the exact sources aggregated (CEIS, CNEP, CEPIM, leniência, impedimentos). This clearly distinguishes it from the sibling sancao_* tools (compras_sancao_ceis, compras_sancao_cnep, etc.), which fetch single lists, whereas this one consolidates them.
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?
Provides an explicit usage directive: 'Sempre use antes de homologar pregões/contratos', which tells the agent when to invoke it. However, it stops short of naming the per-source alternatives as lower-cost options for when only one list is needed, so some exclusion guidance is missing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compras_comparar_periodos_contratacoesARead-onlyIdempotentInspect
Compara dois períodos lado a lado para a mesma modalidade.
Wrapper sobre compras_aggregate_contratacoes_por_periodo chamado duas
vezes (granularidade='ano' implícita — soma todo o período em 1 bucket).
Retorna totais de A e B + delta absoluto + delta percentual.
Caso de uso típico: "Houve antecipação de licitações em Jun/2024 (ano eleitoral) comparado a Jun/2025?" Ou "As dispensas em Dez/2024 foram maiores que Dez/2023 no mesmo órgão?".
| Name | Required | Description | Default |
|---|---|---|---|
| uf | No | UF opcional. | |
| esfera | No | Esfera federativa. Requer métrica de valor (modo paginado). | |
| label_a | No | Rótulo amigável do período A (ex.: 'Jun/2024'). | Periodo A |
| label_b | No | Rótulo amigável do período B (ex.: 'Jun/2025'). | Periodo B |
| metrica | No | Métrica a comparar: 'count' (rápido) ou 'valor_estimado' / 'valor_homologado' (paginado). | count |
| periodo_a_fim | Yes | Data final do período A (YYYY-MM-DD). | |
| periodo_b_fim | Yes | Data final do período B (YYYY-MM-DD). | |
| periodo_a_inicio | Yes | Data inicial do período A (YYYY-MM-DD). | |
| periodo_b_inicio | Yes | Data inicial do período B (YYYY-MM-DD). | |
| codigo_modalidade | Yes | Modalidade PNCP a comparar. Comuns: 6=Pregão Eletrônico, 8=Dispensa, 4=Concorrência Eletrônica. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnly, idempotent, non-destructive behavior. The description adds useful behavioral detail: it aggregates totals per period into a single bucket and returns totals plus absolute and percentage deltas. No side effects or destructive actions are mentioned, and none contradict the annotations.
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 compact and well structured: a one-sentence summary, a brief implementation note, a statement of the return shape, and two illustrative examples. There is no fluff or redundant repetition of schema 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?
Given the high schema coverage and the existence of an output schema, the description sufficiently complements the schema by clarifying that the tool compares two periods and returns aggregate deltas. It could mention output details or pagination behavior more explicitly, but those are largely covered by the schema and annotations, so it is reasonably 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?
The input schema already describes every parameter, including formats, enums, defaults, and special requirements such as esfera requiring a value metric. The description does not add significant extra parameter semantics beyond the schema-provided details, so a baseline score of 3 is appropriate.
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 clearly states the tool's purpose: comparing two periods side by side for the same modality. It identifies the underlying aggregate call, explains that it wraps it twice, and gives concrete typical questions, which makes the intended use unmistakable.
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 explains that this is a wrapper over compras_aggregate_contratacoes_por_periodo and provides typical use cases, so when to use it is fairly clear. It does not explicitly name alternative sibling tools or state a condition for choosing one over another, but the wrapper framing and examples convey the intended context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compras_contratacoes_14133_consultarARead-onlyIdempotentInspect
Consulta uma contratação 14.133 pelo identificador.
Endpoint /modulo-contratacoes/1.1_consultarContratacoes_PNCP_14133_Id.
Devolve detalhes completos: objeto, valor estimado, modalidade,
instrumento convocatório, status no PNCP.
Aceita os dois identificadores do PNCP. Use tipo_identificador='idCompra'
com o campo idCompra das listagens, ou 'numeroControlePNCPCompra' com o
número de controle que aparece no edital (ex.: 10673078000120-1-000021/2025).
Cache 15 min.
| Name | Required | Description | Default |
|---|---|---|---|
| id_contratacao | Yes | Identificador da contratação. Aceita dois formatos, conforme `tipo_identificador`: o `idCompra` (17 dígitos, campo `idCompra` das listagens, ex.: '15813206001272025') ou o número de controle PNCP (alfanumérico com barra, campo `numeroControlePNCP`, ex.: '10673078000120-1-000021/2025' — é o número que aparece no edital). | |
| tipo_identificador | No | Qual identificador está sendo passado em `id_contratacao`: 'idCompra' (padrão) ou 'numeroControlePNCPCompra'. O upstream rejeita qualquer outro valor com HTTP 500. | idCompra |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare read-only and idempotent behavior, and the description adds the cache trait ('Cache 15 min.') and specifies the returned fields. It does not mention error responses or rate limits, but the overall behavior is transparent enough given the annotations.
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 concise and well-structured: it starts with the purpose, then lists the response contents, explains the identifier options, and ends with the cache note. Every sentence adds useful information without fluff.
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?
The description is self-contained and covers the tool's purpose, identifier variants, returned details, and caching. It does not explicitly state error handling (e.g., 404 when identifier not found), but the parameter description mentions upstream HTTP 500 behavior for invalid tipo_identificador, which provides some context.
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 input schema already provides highly detailed descriptions for both parameters, including examples and the enum constraint, so the coverage is 100%. The description repeats some of that information but adds little new semantic detail beyond reinforcing the identifier formats and cache behavior.
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 clearly states the tool's purpose: 'Consulta uma contratação 14.133 pelo identificador.' It specifies the resource type (contratação 14.133), the action (consultar), and the key input (identifier). It also lists the returned details (objeto, valor estimado, modalidade, instrumento convocatório, status), distinguishing it from listing or item-based 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?
The description provides explicit guidance for choosing between the two identifier formats ('Use tipo_identificador='idCompra'...' or 'numeroControlePNCPCompra'...'), which is helpful. However, it does not explain when to use this consult tool instead of alternative sibling tools like listar or itens_listar, leaving the selection implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compras_contratacoes_14133_itens_listarARead-onlyIdempotentInspect
Lista itens de contratações 14.133 incluídos no período.
Endpoint /modulo-contratacoes/2_consultarItensContratacoes_PNCP_14133.
Uso principal — pesquisa de preço por item. Com cod_item_catalogo
(CATMAT/CATSER) cada linha traz, junto, quantidade,
valorUnitarioEstimado, valorUnitarioResultado, valorTotalResultado,
nomeFornecedor e unidadeMedida — ou seja, estimado versus homologado
por item, insumo direto do mapa de preços do ETP.
Higiene da amostra: passe tem_resultado=True (ou situacao_item='2',
Homologado) antes de calcular média ou mediana. Item deserto, fracassado ou
cancelado não é preço praticado.
Sem nenhum filtro além das datas, a resposta é "tudo que o Brasil incluiu no PNCP nessa janela" — quase sempre grande demais para ser útil.
Cache 15 min.
| Name | Required | Description | Default |
|---|---|---|---|
| pagina | No | Página de resultados (1-based). Padrão 1. | |
| cnpj_orgao | No | CNPJ do órgão comprador (14 dígitos, com ou sem pontuação). | |
| codigo_uasg | No | Código da UASG compradora (6 dígitos). | |
| codigo_grupo | No | Código do grupo do catálogo. Recorte por família quando o código exato do item ainda não é conhecido. | |
| codigo_classe | No | Código da classe do catálogo. Vem nulo em boa parte dos serviços — nesses casos use `codigo_grupo`. | |
| situacao_item | No | Situação do item da compra. '2' = Homologado, '4' = Cancelado. Filtre por '2' antes de calcular qualquer estatística de preço. | |
| tem_resultado | No | Se `true`, só itens que tiveram vencedor — filtro aplicado pelo upstream. Use para pesquisa de preço: item deserto ou fracassado não é preço praticado e não pode entrar na média do ETP. Se `false`, o recorte é feito aqui, client-side, sobre a página trazida: o upstream grava `temResultado: null` (não `false`) nos itens sem vencedor, então mandar `temResultado=false` para ele devolveria zero registros sempre. | |
| tamanho_pagina | No | Quantidade de registros por página. Padrão 50, máximo 500. | |
| cod_item_catalogo | No | Código do item no catálogo (CATMAT para material, CATSER para serviço). É o filtro que transforma esta tool em pesquisa de preço: devolve, na mesma linha, quantidade, valor unitário estimado e valor unitário homologado do item. | |
| cnpj_cpf_fornecedor | No | CNPJ ou CPF do fornecedor vencedor do item (só dígitos). | |
| data_final_inclusao | Yes | Data final de inclusão dos itens no PNCP (YYYY-MM-DD). | |
| material_ou_servico | No | 'M' para material, 'S' para serviço. | |
| data_inicial_inclusao | Yes | Data inicial de inclusão dos itens no PNCP (YYYY-MM-DD). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, so the bar is lower, and the description adds substantial value beyond them: the 15-minute cache, the upstream quirk that `temResultado: null` (not `false`) is recorded for items without a winner, and the scale warning that an unfiltered query returns 'tudo que o Brasil incluiu no PNCP nessa janela.' These behavioral traits meaningfully shape how an agent calls the tool and interprets results.
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 efficiently structured with bold section headers (Uso principal, Higiene da amostra) that make it scannable. Every sentence earns its place: purpose, endpoint, primary use, sample hygiene, scale warning, and cache duration are all non-redundant, and the scale warning is strategically placed after the usage guidance that mitigates it.
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 13-parameter tool with a full output schema and rich annotations, the description covers everything an agent needs to invoke it correctly: primary use case, which filters to combine, what to avoid, a subtle upstream behavior (temResultado null), and data freshness. Return values are already documented via the output schema, so their absence from the description is not a gap.
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?
With 100% schema description coverage, the baseline is 3, and the tool description pushes beyond it by explaining parameter interplay: `cod_item_catalogo` is the filter that 'transforma esta tool em pesquisa de preço' and, used together with `tem_resultado`/`situacao_item`, yields the estimated-versus-homologated price rows for the ETP map. It also reinforces which filters to combine for statistically valid samples, adding strategic meaning the individual schema entries do not.
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 opening sentence, 'Lista itens de contratações 14.133 incluídos no período,' states a specific verb (Lista), resource (itens de contratações 14.133), and temporal scope. The 'Uso principal — pesquisa de preço por item' paragraph further defines its identity as the item-level price-research tool, which implicitly sets it apart from sibling item/result/contract lister tools. The purpose statement is unambiguous and actionable.
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 gives clear context for when to use the tool — price research by item via `cod_item_catalogo`, with explicit sample-hygiene instructions ('passe `tem_resultado=True` (ou `situacao_item='2'`) antes de calcular média ou mediana') and a strong warning against using it with only date filters ('quase sempre grande demais para ser útil'). However, it never names sibling alternatives (e.g., compras_pesquisar_preco_material or compras_contratacoes_14133_resultados_listar) nor states explicit when-not-to-use conditions, so routing decisions are left partly to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compras_contratacoes_14133_itens_por_contratacaoBRead-onlyIdempotentInspect
Lista itens de uma contratação 14.133 específica.
Endpoint /modulo-contratacoes/2.1_consultarItensContratacoes_PNCP_14133_Id.
Aceita idCompra ou número de controle PNCP, conforme tipo_identificador.
| Name | Required | Description | Default |
|---|---|---|---|
| pagina | No | Página de resultados (1-based). Padrão 1. | |
| id_contratacao | Yes | Identificador da contratação. Aceita dois formatos, conforme `tipo_identificador`: o `idCompra` (17 dígitos, campo `idCompra` das listagens, ex.: '15813206001272025') ou o número de controle PNCP (alfanumérico com barra, campo `numeroControlePNCP`, ex.: '10673078000120-1-000021/2025' — é o número que aparece no edital). | |
| tamanho_pagina | No | Quantidade de registros por página. Padrão 50, máximo 500. | |
| tipo_identificador | No | Qual identificador está sendo passado em `id_contratacao`: 'idCompra' (padrão) ou 'numeroControlePNCPCompra'. O upstream rejeita qualquer outro valor com HTTP 500. | idCompra |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds the endpoint and the fact that either idCompra or PNCP control number is accepted. It does not disclose auth requirements, rate limits, pagination edge behavior, or response structure, but the annotations lower the burden here.
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 two concise sentences with no filler. The main purpose is front-loaded, and the identifier-format note adds useful invocation detail. Every 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?
The rich schema, detailed parameter descriptions, output schema, and annotations mean the agent has enough to invoke the tool correctly. The main gap is the absence of explicit routing guidance among the many similar item-listing siblings. Apart from that, no critical calling information 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%, and the input schema already provides detailed explanations for all four parameters, including format examples and default values. The description largely restates what the schema says about accepted identifiers. It adds the endpoint but little parameter meaning beyond the schema, so the baseline 3 is appropriate.
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 clear verb and resource: 'Lista itens de uma contratação 14.133 específica.' The word 'específica' helps distinguish it from broader listing siblings, and the endpoint is named. However, it does not explicitly contrast itself with sibling tools like compras_contratacoes_14133_itens_listar, so differentiation is implied 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?
The description gives no guidance on when to use this tool versus alternatives such as compras_contratacoes_14133_itens_listar or compras_pncp_contratacao_itens. It only explains identifier formats, which is parameter context rather than usage direction. There are no exclusions, prerequisites, or alternative routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compras_contratacoes_14133_listarARead-onlyIdempotentInspect
Lista contratações da Lei 14.133 publicadas no PNCP (via Dados Abertos).
Endpoint /modulo-contratacoes/1_consultarContratacoes_PNCP_14133.
Cobre pregões eletrônicos, dispensas, inexigibilidades e demais
modalidades da Nova Lei de Licitações no governo federal.
Atenção semântica: o filtro codigo_modalidade_dados_abertos usa a
tabela de modalidade do SIASG/Dados Abertos, NÃO o cheat sheet PNCP de
compras_pncp_modalidades. Os payloads retornam ambos os campos
(codigoModalidade do Dados Abertos e modalidadeIdPncp do PNCP) — use
modalidadeNome para o nome amigável.
Cache 15 min.
| Name | Required | Description | Default |
|---|---|---|---|
| uf | No | Sigla da UF da unidade compradora (2 letras, ex.: 'SP', 'MS'). | |
| pagina | No | Página (1-based). | |
| cnpj_orgao | No | CNPJ do órgão (14 dígitos, com ou sem pontuação). | |
| codigo_uasg | No | Código UASG do órgão licitante. | |
| amparo_legal | No | Código do amparo legal no PNCP (campo `amparoLegalCodigoPncp`). Ex.: 18 = Lei 14.133/2021, Art. 75, I (dispensa por valor). | |
| tamanho_pagina | No | Registros por página. | |
| codigo_orgao_pncp | No | Código do órgão **no espaço de códigos interno do PNCP** — é o campo `codigoOrgao` que vem no payload desta mesma tool, e só ele. **Não é o código SIASG** de `compras_orgao_listar`/`compras_orgao_consultar`: os dois espaços não coincidem (a UFSC é 26246 no SIASG e 86135 aqui) e passar o código SIASG devolve zero registros ou, quando o número existe nos dois, as contratações de OUTRO órgão. Para recortar por órgão partindo do que você conhece, use `cnpj_orgao` (CNPJ) ou `codigo_uasg`. | |
| codigo_ibge_municipio | No | Código IBGE do município da unidade compradora (7 dígitos). | |
| data_final_publicacao | No | Data final de publicação (YYYY-MM-DD). | |
| data_inicial_publicacao | No | Data inicial de publicação (YYYY-MM-DD). | |
| codigo_modalidade_dados_abertos | No | Código de modalidade na tabela do **Dados Abertos / SIASG** (NÃO é o cheat sheet do PNCP). Equivalências confirmadas em 2026-05 por sweep empírico do endpoint: 3 = Concorrência Eletrônica (PNCP=4) 5 = Pregão Eletrônico (PNCP=6) 6 = Dispensa (PNCP=8) 7 = Inexigibilidade (PNCP=9) Demais códigos (1,2,4,8-13) retornam vazio neste endpoint. Para consultar usando o cheat sheet PNCP nativo, use `compras_pncp_contratacoes_publicacao`. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and idempotentHint=true, and the description adds operational facts beyond those: the exact endpoint, 15-minute cache, and the response behavior of returning both codigoModalidade and modalidadeIdPncp. This gives the agent useful expectations without contradicting the annotations.
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 compact and front-loaded with the primary purpose. The endpoint line, coverage statement, semantic warning, and cache note all earn their place; there is no filler or redundant restating of the tool name.
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 complex 11-parameter read-only list tool with an output schema, the description is complete: it identifies the data source, legal scope, cache behavior, a critical semantic pitfall, and the relevant alternative tool. No essential selection or invocation information 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%, and the schema already contains detailed per-parameter guidance, including the modalidade equivalences and the codigo_orgao_pncp warning. The free-text description repeats the modalidade semantic warning but adds little new parameter-level meaning beyond what the schema provides, 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?
The description states a specific verb and resource: 'Lista contratações da Lei 14.133 publicadas no PNCP (via Dados Abertos)', and adds concrete scope details about endpoint and modalities. It also indirectly distinguishes itself from PNCP-native siblings by emphasizing the Dados Abertos source.
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 gives clear context about what the tool covers and explicitly routes to an alternative for PNCP cheat-sheet modalidade queries: 'Para consultar usando o cheat sheet PNCP nativo, use compras_pncp_contratacoes_publicacao'. It does not enumerate exclusions against other sibling list/consult tools, but the main confusion point is addressed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compras_contratacoes_14133_resultados_listarARead-onlyIdempotentInspect
Lista resultados (homologações) de itens 14.133 no período.
Endpoint /modulo-contratacoes/3_consultarResultadoItensContratacoes_PNCP_14133.
Devolve fornecedor vencedor, valor adjudicado e quantitativo homologado —
fonte primária de preço praticado para o ETP.
Due diligence de fornecedor: ni_fornecedor (CNPJ/CPF) levanta tudo que
um fornecedor ganhou na janela.
Auditoria por materialidade: valor_total_min monta a fila de
homologações acima de um patamar — combine com uma janela curta, já que o
filtro de data é obrigatório.
Para recortar por item de catálogo, use
compras_contratacoes_14133_itens_listar(cod_item_catalogo=...): esta rota
não oferece filtro por CATMAT/CATSER.
Cache 15 min.
| Name | Required | Description | Default |
|---|---|---|---|
| pagina | No | Página de resultados (1-based). Padrão 1. | |
| cnpj_orgao | No | CNPJ do órgão comprador (14 dígitos, com ou sem pontuação). | |
| codigo_uasg | No | Código da UASG compradora (6 dígitos). | |
| ni_fornecedor | No | Número de identificação do fornecedor vencedor (CNPJ ou CPF, só dígitos). Use para levantar tudo que um fornecedor ganhou no período. | |
| tamanho_pagina | No | Quantidade de registros por página. Padrão 50, máximo 500. | |
| valor_total_max | No | Valor total homologado máximo (R$). | |
| valor_total_min | No | Valor total homologado mínimo (R$). Combinado com a janela de datas, monta fila de auditoria por materialidade. | |
| porte_fornecedor | No | Código do porte do fornecedor (ex.: 1=ME, 2=EPP, 3=Demais). Preenchimento irregular na origem — trate ausência como desconhecido. | |
| situacao_resultado | No | Código da situação do resultado. 1 = Informado. Use para descartar resultado cancelado antes de calcular média ou mediana de preço. | |
| valor_unitario_max | No | Valor unitário homologado máximo (R$). | |
| valor_unitario_min | No | Valor unitário homologado mínimo (R$). | |
| data_final_resultado | Yes | Data final do resultado/homologação (YYYY-MM-DD). | |
| data_inicial_resultado | Yes | Data inicial do resultado/homologação (YYYY-MM-DD). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnly, idempotent, openWorld, and non-destructive hints. The description adds a 15-minute cache and a capability boundary (no CATMAT/CATSER filter), going slightly beyond the annotation baseline without contradicting it.
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?
Every sentence is informative: purpose, returned fields, two usage patterns, sibling alternative, and cache. No redundant or fluff content; the structure uses short paragraphs and bold labels for scannability.
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?
The description covers purpose, key filters, limitations, and cache, while the input schema handles pagination and parameter details. It does not describe the response shape, but an output schema is indicated as present, so this is adequate.
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?
Although the schema already covers all parameters, the description adds actionable semantics: ni_fornecedor for everything a supplier won, valor_total_min for audit queues, porte_fornecedor irregularity, and situacao_resultado 1 meaning 'Informado' to discard canceled results.
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?
Description opens with 'Lista resultados (homologações) de itens 14.133 no período', naming the verb, resource, and temporal scope. It also states the returned data (winner, awarded value, quantity) and explicitly distinguishes this route from the catalog-item sibling by noting it has no CATMAT/CATSER filter.
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 concrete use cases: supplier due diligence via ni_fornecedor and materiality audit via valor_total_min with a short date window. It also explicitly directs catalog-item filtering to compras_contratacoes_14133_itens_listar and notes the required date filter.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compras_contratacoes_14133_resultados_por_contratacaoARead-onlyIdempotentInspect
Lista resultados (homologações) de uma contratação 14.133 específica.
Endpoint /modulo-contratacoes/3.1_consultarResultadoItensContratacoes....
Aceita idCompra ou número de controle PNCP, conforme tipo_identificador.
| Name | Required | Description | Default |
|---|---|---|---|
| pagina | No | Página de resultados (1-based). Padrão 1. | |
| id_contratacao | Yes | Identificador da contratação. Aceita dois formatos, conforme `tipo_identificador`: o `idCompra` (17 dígitos, campo `idCompra` das listagens, ex.: '15813206001272025') ou o número de controle PNCP (alfanumérico com barra, campo `numeroControlePNCP`, ex.: '10673078000120-1-000021/2025' — é o número que aparece no edital). | |
| tamanho_pagina | No | Quantidade de registros por página. Padrão 50, máximo 500. | |
| tipo_identificador | No | Qual identificador está sendo passado em `id_contratacao`: 'idCompra' (padrão) ou 'numeroControlePNCPCompra'. O upstream rejeita qualquer outro valor com HTTP 500. | idCompra |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
As annotations já cobrem o perfil de segurança (readOnlyHint=true, idempotentHint=true, destructiveHint=false), então a descrição não precisa repetir que é uma operação somente-leitura. Ela adiciona pouco além do endpoint e da flexibilidade de identificadores; não detalha paginação, comportamento de resposta ou limites. Isso é aceitável, mas mínimo.
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 descrição é compacta, com o propósito na primeira frase e esforço mínimo para transmitir o escopo. O trecho do endpoint truncado agrega pouco valor e poderia ser removido, mas no geral a densidade de informação é boa e bem organizada.
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?
Com schema completo, annotations fortes e output schema presente, a descrição fornece o essencial para o agente selecionar e invocar a ferramenta corretamente. A principal lacuna é a ausência de orientação explícita de escolha entre os siblings de resultados/listagem, mas o escopo 'específica' mitiga o problema.
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?
A cobertura do schema é 100% e as descrições de id_contratacao e tipo_identificador já são detalhadas, com exemplos de idCompra e PNCP. A frase final da descrição apenas reapresenta essa informação, sem adicionar semântica nova. Aplica-se o baseline 3 para schema com alta cobertura.
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?
A descrição abre com verbo e recurso claros: 'Lista resultados (homologações) de uma contratação 14.133 específica'. O termo 'específica' ajuda a diferenciar de ferramentas de listagem ampla, e o foco em 'resultados' o distingue de ferramentas de itens, mas não nomeia ou contrasta explicitamente com o sibling similar compras_contratacoes_14133_resultados_listar.
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?
A descrição indica o contexto de uso — uma contratação 14.133 específica — e que aceita idCompra ou PNCP, o que sugere usá-la quando já se tem um identificador da contratação. Porém, não há orientação explícita de quando NÃO usar, nem alternativas citadas entre os muitos siblings de listagem/resultados.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compras_contrato_comprasnet_consultarARead-onlyIdempotentInspect
Consulta detalhe completo de um contrato no Comprasnet (/api/contrato/id/{id}).
Devolve contrato com sub-recursos embutidos. CPFs mascarados por LGPD. Cache 15 min.
| Name | Required | Description | Default |
|---|---|---|---|
| id_contrato | Yes | ID interno do contrato no Comprasnet (pode ser diferente do id no Dados Abertos). Obtenha em `compras_contrato_comprasnet_por_uasg`. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only, open-world, idempotent, and non-destructive behavior. The description adds non-obvious context beyond annotations: embedded sub-resources, LGPD-masked CPFs, and a 15-minute cache.
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 three short, front-loaded sentences with no filler: operation, returned content, privacy note, and cache. Every sentence adds value.
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 one required parameter, a full schema description, rich annotations, and an output schema present, the description covers the remaining behavioral facts an agent needs, including LGPD masking, cache behavior, and embedded sub-resources. Nothing essential 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%, and the id_contrato schema description already explains that it is the internal Comprasnet ID, may differ from the Dados Abertos ID, and should be obtained from compras_contrato_comprasnet_por_uasg. The tool description itself adds no further parameter semantics, 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?
The description states the exact operation: 'Consulta detalhe completo de um contrato no Comprasnet' and identifies the endpoint. The phrase 'sub-recursos embutidos' helps distinguish it from the many sibling sub-resource tools, though it does not explicitly name an alternative, so it stops short of a 5.
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 when to use it (when full contract detail is needed), and the schema usefully tells the agent to obtain the id from compras_contrato_comprasnet_por_uasg. However, it gives no explicit conditions for preferring this tool over the many contract-related siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compras_contrato_comprasnet_por_uasgARead-onlyIdempotentInspect
Lista contratos de uma UASG no Comprasnet.
Atenção: o upstream /api/contrato/ug/{uasg} não suporta paginação —
devolve a lista completa em uma resposta única (pode passar de 1 MB). Esta
tool fatia o resultado client-side conforme pagina + tamanho_pagina para
evitar inundar o LLM.
Cache 15 min do payload completo; fatiamento por chamada é barato.
| Name | Required | Description | Default |
|---|---|---|---|
| ativos | No | Se True (padrão), lista apenas contratos ativos. Set False para incluir inativos via /api/contrato/inativo/ug/{uasg}. | |
| pagina | No | Página de resultados (1-based). Padrão 1. | |
| codigo_uasg | Yes | Código UASG (5-6 dígitos). | |
| tamanho_pagina | No | Quantidade de registros por página. Padrão 50, máximo 500. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint and idempotentHint annotations, the description discloses that the upstream endpoint does not support pagination, that the tool slices results client-side, and that caching lasts 15 minutes. These are valuable behavioral details not covered by annotations.
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 concise and well-structured: a clear one-sentence purpose followed by an attention note about pagination and a cache note. No unnecessary words.
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?
The description, combined with the output schema (which exists per context signals), provides sufficient information for an agent to invoke the tool correctly. Pagination behavior and caching are explained, and the output format is presumably covered by 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?
The input schema descriptions fully cover all four parameters, and the tool description adds context for pagina and tamanho_pagina by explaining the upstream limitation and the client-side slicing rationale. This adds usability beyond the schema alone.
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 clearly states the tool's function: listing contracts for a UASG in Comprasnet. It specifically mentions the UASG scope and the pagination behavior, making its purpose unambiguous and distinct from other contract-listing 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?
The description explains the tool's internal behavior (client-side pagination, caching) but does not explicitly state when to choose this tool over similar siblings like compras_contratos_listar. The usage context is inferable from the name and description, but explicit guidance is missing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compras_contrato_cronogramaARead-onlyIdempotentInspect
Lista cronograma financeiro (/api/contrato/{id}/cronograma).
Paginação client-side — alguns contratos têm 200+ entradas mensais. Cache 15 min.
| Name | Required | Description | Default |
|---|---|---|---|
| pagina | No | Página de resultados (1-based). Padrão 1. | |
| id_contrato | Yes | ID do contrato no Comprasnet. | |
| tamanho_pagina | No | Quantidade de registros por página. Padrão 50, máximo 500. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (read-only, idempotent, non-destructive), the description adds behavioral context about pagination handling and caching, which informs the caller about expected performance and data freshness. No contradictions with annotations.
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 concise, consisting of two short sentences. It contains no redundant or irrelevant information, and all statements add value.
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 simple listing operation with a fully documented input schema and output schema, the description provides sufficient context (endpoint, pagination behavior, caching) to call the tool correctly. It does not omit critical information.
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% (all parameters have descriptions). The tool description adds meaning by explaining that pagination is client-side and that some contracts have many entries, which clarifies why the 'pagina' and 'tamanho_pagina' parameters exist and how they should be used.
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 clearly states the action (Lista = Lists) and the resource (cronograma financeiro) with an explicit endpoint, making it easy to distinguish from sibling tools. The verb and resource are specific and unambiguous.
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 provides some usage context (client-side pagination, 15-minute cache) but does not explicitly mention when to use this tool over alternatives or when not to use it. The guidance is implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compras_contrato_empenhosARead-onlyIdempotentInspect
Lista empenhos do contrato (/api/contrato/{id}/empenhos).
Paginação client-side. Cache 15 min.
| Name | Required | Description | Default |
|---|---|---|---|
| pagina | No | Página de resultados (1-based). Padrão 1. | |
| id_contrato | Yes | ID do contrato no Comprasnet. | |
| tamanho_pagina | No | Quantidade de registros por página. Padrão 50, máximo 500. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint, covering the safety profile. The description adds meaningful behavioral context beyond annotations: pagination is client-side and responses are cached for 15 minutes, which helps an agent set expectations about data freshness and pagination handling.
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 extremely concise with two short sentences, and the core purpose is front-loaded in the first sentence. The endpoint, pagination behavior, and cache duration are all useful and non-redundant with the schema.
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 simple list operation with rich annotations, a full output schema, and complete parameter documentation in the schema, the description covers the essential operational details: endpoint, resource, pagination style, and cache behavior. 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 description coverage is 100%, so the schema already documents all three parameters. The description adds value by noting 'Paginação client-side', which clarifies that pagina and tamanho_pagina are applied client-side rather than server-side, supplementing the schema definitions.
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 and resource: 'Lista empenhos do contrato', and includes the endpoint path '/api/contrato/{id}/empenhos' to remove ambiguity. This clearly distinguishes it from sibling contract-related tools that deal with faturas, garantias, cronograma, or publicações.
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 clearly indicates this tool is for listing contract empenhos, with the contract ID as the key input and client-side pagination behavior. It does not explicitly compare against alternatives or state exclusions, but the resource-specific endpoint and context signal make the intended use evident.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compras_contrato_faturasARead-onlyIdempotentInspect
Lista NFs/faturas (/api/contrato/{id}/faturas).
Paginação client-side. Cache 15 min. Atenção LGPD: o campo
infcomplementar (texto livre) pode conter nome de servidor + matrícula
SIAPE não estruturados — o mascaramento LGPD só cobre CPFs em campos
nominais (cpf, niResponsavel, etc.).
| Name | Required | Description | Default |
|---|---|---|---|
| pagina | No | Página de resultados (1-based). Padrão 1. | |
| id_contrato | Yes | ID do contrato no Comprasnet. | |
| tamanho_pagina | No | Quantidade de registros por página. Padrão 50, máximo 500. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/idempotent/destructive annotations, it discloses client-side pagination behavior, a 15-minute cache, and a specific LGPD limitation: `infcomplementar` may contain unstructured server names and SIAPE numbers that masking does not cover. These are exactly the behavioral and data-sensitivity traits an agent needs before invoking or interpreting results.
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, front-loaded sentences: purpose and endpoint first, then behavior, then a necessary privacy caveat. No redundant restatement of schema or annotations; every 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 a simple read-only list operation with an output schema and rich annotations, the description covers purpose, endpoint, pagination model, cache freshness, and a data-protection caveat. Nothing an agent needs to invoke or interpret the result correctly appears to be 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%, so the schema already documents `id_contrato`, `pagina`, and `tamanho_pagina`. The description adds the key semantic that pagination is client-side, which changes how an agent should interpret `pagina` and `tamanho_pagina`, and it flags the sensitive `infcomplementar` field relevant to interpreting returned data.
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?
Description opens with 'Lista NFs/faturas' and the exact endpoint `/api/contrato/{id}/faturas`, giving a specific verb and resource. This clearly distinguishes it from sibling contract-subresource tools like `compras_contrato_empenhos` or `compras_contrato_garantias`, even though no sibling is named.
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 stated purpose 'Lista NFs/faturas' gives clear context for when to call it: whenever invoices/NFS for a contract are needed. It does not explicitly name alternatives or state when not to use it, but among the many contract-related siblings the resource term is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compras_contrato_garantiasARead-onlyIdempotentInspect
Lista garantias contratuais (/api/contrato/{id}/garantias).
Paginação client-side. Cache 15 min.
| Name | Required | Description | Default |
|---|---|---|---|
| pagina | No | Página de resultados (1-based). Padrão 1. | |
| id_contrato | Yes | ID do contrato no Comprasnet. | |
| tamanho_pagina | No | Quantidade de registros por página. Padrão 50, máximo 500. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only, idempotent, and non-destructive behavior. The description adds useful operational detail beyond annotations: client-side pagination and a 15-minute cache, both of which affect how an agent should interpret calls and pagination parameters.
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 extremely compact: purpose, endpoint, pagination model, and cache TTL in four short fragments. There is no filler, and the most important information is front-loaded.
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 simple read-only list endpoint with a complete input schema and an output schema present, the description is sufficient. It covers what is listed, how pagination works, and cache behavior, so no critical operational detail appears 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?
The input schema fully documents all three parameters, including defaults and maximum page size, so schema coverage is 100%. The description adds only the 'client-side pagination' nuance, which modestly clarifies the behavior of pagina/tamanho_pagina but does not substantially augment the schema.
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 names a specific verb ('Lista') and resource ('garantias contratuais') and includes the exact endpoint path, making the tool's function unambiguous. This clearly distinguishes it from the many compras_contrato_* siblings, none of which target guarantees.
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 intended use is inferable: list contractual guarantees for a given contract ID. However, the description does not explicitly contrast this tool with alternatives or state when not to use it, so guidance remains implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compras_contrato_historico_aditivosARead-onlyIdempotentInspect
Lista aditivos do contrato (/api/contrato/{id}/historico).
Paginação client-side (upstream não pagina). Cache 15 min do payload completo.
| Name | Required | Description | Default |
|---|---|---|---|
| pagina | No | Página de resultados (1-based). Padrão 1. | |
| id_contrato | Yes | ID do contrato no Comprasnet. | |
| tamanho_pagina | No | Quantidade de registros por página. Padrão 50, máximo 500. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only and idempotent behavior, so the bar for additional transparency is lower. The description adds meaningful operational behaviors: client-side pagination because the upstream does not paginate, and a 15-minute cache of the full payload. No contradictions with the annotations.
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 concise, with two short sentences covering the core purpose, endpoint, pagination behavior, and caching. No redundant or filler content is present.
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 the simple parameter set and the presence of an output schema, the description is complete enough for an agent to know what the tool does and how the parameters behave. It does not need to enumerate return fields because the output schema covers that.
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 input schema already covers all parameters with descriptions, so the baseline is 3. The description adds extra meaning by explaining that pagination is client-side and that the upstream returns the full payload, which clarifies how pagina and tamanho_pagina should be interpreted.
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 clearly states the tool lists contract amendments ('aditivos do contrato') and includes the specific endpoint path. The verb 'Lista' is specific and the resource is clearly identified by contract ID, distinguishing it from related contract 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?
The description does not explain when to use this tool versus other contract-related alternatives such as compras_contrato_comprasnet_consultar or compras_contratos_consultar. It only provides operational details about pagination and caching, not usage context or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compras_contrato_ocorrenciasARead-onlyIdempotentInspect
Lista ocorrências/penalidades (/api/contrato/{id}/ocorrencias).
Indicador-chave da confiabilidade do fornecedor. Paginação client-side. Cache 15 min.
| Name | Required | Description | Default |
|---|---|---|---|
| pagina | No | Página de resultados (1-based). Padrão 1. | |
| id_contrato | Yes | ID do contrato no Comprasnet. | |
| tamanho_pagina | No | Quantidade de registros por página. Padrão 50, máximo 500. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already cover read-only/idempotent behavior, and the description adds valuable behavior beyond them: client-side pagination and a 15-minute cache. These are practical operational caveats that help an agent invoke the tool correctly.
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 compact and front-loaded: purpose, usage signal, pagination, and cache are covered in a few short lines without filler. Every sentence contributes distinct 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?
Given the read-only/idempotent annotations, fully documented parameters, and presence of an output schema, this description is complete enough for safe invocation. The cache and pagination notes cover the main non-obvious calling conventions.
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?
All three parameters are already fully documented in the input schema (100% coverage), so the description is not expected to re-explain them. The pagination note adds some behavioral color but does not need to add schema-level parameter 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?
The description opens with a specific verb and resource ("Lista ocorrências/penalidades") and gives the endpoint route, so the tool's purpose is clear. It does not explicitly call out how it differs from related sibling tools such as compras_checar_sancoes_fornecedor, leaving some distinction to inference.
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?
"Indicador-chave da confiabilidade do fornecedor" supplies useful usage context, but it does not say when to use this tool over the related sanctions/supplier tools or state when not to use it. The guidance is adequate but implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compras_contrato_publicacoesARead-onlyIdempotentInspect
Lista publicações DOU (/api/contrato/{id}/publicacoes).
Paginação client-side. Cache 15 min.
| Name | Required | Description | Default |
|---|---|---|---|
| pagina | No | Página de resultados (1-based). Padrão 1. | |
| id_contrato | Yes | ID do contrato no Comprasnet. | |
| tamanho_pagina | No | Quantidade de registros por página. Padrão 50, máximo 500. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only, idempotent, and non-destructive behavior. The description adds value by mentioning client-side pagination and a 15-minute cache, which are behavioral details beyond the annotations.
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 extremely concise: two lines covering the action, resource, endpoint, pagination, and cache. No unnecessary words or redundant 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?
For a simple read-only list endpoint, the description provides all necessary context: what it returns, the endpoint, pagination behavior, and cache. No critical information 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 clear descriptions for each parameter (id_contrato, pagina, tamanho_pagina). The description does not add extra semantic meaning beyond what the schema already provides, but it is consistent and sufficient.
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 clearly states the verb 'Lista' and the specific resource 'publicações DOU' for a contract, with the endpoint path provided. It unambiguously identifies the tool's function without confusion.
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 includes usage characteristics like 'Paginação client-side' and 'Cache 15 min' but does not explicitly explain when to use this tool over alternatives. The context of siblings implies it, but no direct guidance is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compras_contrato_responsaveisARead-onlyIdempotentInspect
Lista fiscais/gestores (/api/contrato/{id}/responsaveis).
CPFs mascarados por LGPD (123.***.***-45). Paginação client-side. Cache 15 min.
| Name | Required | Description | Default |
|---|---|---|---|
| pagina | No | Página de resultados (1-based). Padrão 1. | |
| id_contrato | Yes | ID do contrato no Comprasnet. | |
| tamanho_pagina | No | Quantidade de registros por página. Padrão 50, máximo 500. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the read-only/idempotent annotations, the description discloses three meaningful behaviors: LGPD-masked CPFs, client-side pagination, and 15-minute caching. These details materially affect how an agent interprets results and pagination parameters.
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 sentences deliver the core purpose, the endpoint, and the key behavioral caveats with no filler. Each line adds distinct value and the primary action is front-loaded.
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?
The description covers what the tool lists, which contract it targets, data masking, pagination behavior, and caching. The output schema and annotations supply the remaining safety and return-shape details, so nothing needed 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%, so all three parameters are already documented. The description adds a useful note about client-side pagination, which clarifies how 'pagina' and 'tamanho_pagina' behave, but it does not add substantial syntax detail beyond the schema.
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 uses a specific verb ('Lista') and a specific resource ('fiscais/gestores') tied to an explicit endpoint path, so an agent knows exactly what data is returned. It is readily distinguishable from sibling contract tools by naming the responsibility role rather than using a generic label.
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 provides clear context for when to use the tool: whenever contract fiscal monitors/managers are needed. It does not name alternative tools or explicitly state when not to use it, but the resource-specific endpoint and role make the use case unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compras_contratos_consultarARead-onlyIdempotentInspect
Consulta um contrato no Dados Abertos (endpoint 1.1).
O upstream exige codigo + tipo. Tipos aceitos pela API:
idCompra e numeroControlePncpContrato.
Cache 15 min.
| Name | Required | Description | Default |
|---|---|---|---|
| tipo | No | Como interpretar `codigo`: 'idCompra' (id interno da compra) ou 'numeroControlePncpContrato' (identificador PNCP). | numeroControlePncpContrato |
| codigo | Yes | Identificador do contrato no upstream — interpretação depende de `tipo`. Para tipo='idCompra' é o id da compra (string numérica). Para tipo='numeroControlePncpContrato' é o número de controle PNCP completo (ex.: '00000000000000-1-000001/2024'). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only, idempotent, and non-destructive behavior. The description adds meaningful operational details beyond those annotations: the upstream contract requiring both codigo and tipo, and the 15-minute cache, which informs the agent about freshness. No contradiction with annotations.
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 compact and front-loaded: purpose first, then the required parameter combination, accepted types, and cache note. Every sentence contributes useful information 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?
For a two-parameter read-only consult with a rich input schema and an output schema, the description covers the essential call requirements and a staleness caveat. The only notable gap is the lack of explicit navigation among the large sibling set, but the endpoint and parameter semantics provide enough orientation.
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 baseline is 3, but the description adds value by flagging that the upstream requires codigo + tipo even though the schema marks tipo optional with a default. It also enumerates the only accepted type values, helping an agent avoid unsupported identifier formats.
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 first sentence, 'Consulta um contrato no Dados Abertos (endpoint 1.1)', states a specific verb and resource with an endpoint qualifier that helps separate it from legacy or Comprasnet contract tools. It does not explicitly name sibling tools, so it stops short of a 5.
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 gives useful invocation context: the upstream requires 'codigo + tipo' and lists the accepted type values. However, it does not say when to prefer this tool over closely related siblings such as compras_contrato_comprasnet_consultar or compras_contratos_listar, so the usage guidance is implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compras_contratos_item_consultarARead-onlyIdempotentInspect
Lista os itens de um contrato específico, pelo identificador.
Endpoint /modulo-contratos/2.1_consultarContratosItem_Id.
Use quando você já tem o contrato em mãos e quer só os itens dele.
compras_contratos_itens_listar exige órgão mais janela de vigência e
devolve os itens de todos os contratos do recorte — chegar a um contrato
específico por ali significa paginar centenas de linhas irrelevantes.
O codigo aceita o idCompra numérico (padrão) ou o número de controle
PNCP do contrato, conforme tipo_identificador. Qualquer outro valor de
tipo faz o upstream devolver HTTP 500.
Atenção ao somar valores: pode haver mais de uma linha por item, uma por versão/alteração contratual. Confira o campo de exclusão antes de agregar.
Cache 15 min.
| Name | Required | Description | Default |
|---|---|---|---|
| codigo | Yes | Identificador do contrato: o `idCompra` numérico ou o número de controle PNCP do contrato, conforme `tipo_identificador`. | |
| pagina | No | Página de resultados (1-based). Padrão 1. | |
| tamanho_pagina | No | Quantidade de registros por página. Padrão 50, máximo 500. | |
| tipo_identificador | No | Qual identificador está em `codigo`: 'idCompra' (padrão) ou 'numeroControlePncpContrato'. Outro valor devolve HTTP 500. | idCompra |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnlyHint, idempotentHint, destructiveHint=false), and the description adds substantial behavior beyond them: the upstream HTTP 500 failure mode for invalid tipo_identificador values, the multiple-lines-per-item semantics (one per contractual version/alteration) with an explicit warning to check the exclusion field before aggregating, and the 15-minute cache. These are non-obvious behavioral traits an agent needs to interpret results and avoid mistakes.
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?
Every sentence earns its place: purpose, endpoint, when-to-use, exclusion of the sibling, parameter caveat, aggregation warning, and cache TTL. The most decision-critical information (purpose and sibling differentiation) is front-loaded, and the aggregation warning is visually emphasized. The length is proportionate to 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 4-parameter tool with an output schema and rich annotations, this description covers all the non-obvious context: the exact usage scenario, the error mode, the duplicate-row pitfall, and the cache duration. The output schema exists, so return-value details need not be repeated. The only minor gap is that the exclusion field is referenced but not named, which the output schema presumably supplies. Overall, nothing an agent needs to call this 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 the baseline is 3. The description's parameter content ('O codigo aceita o idCompra numérico ou o número de controle PNCP... Qualquer outro valor de tipo faz o upstream devolver HTTP 500') essentially restates what the schema already documents for codigo and tipo_identificador, adding no new meaning beyond re-emphasis. It does not introduce any parameter semantics that the schema lacks.
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 begins with a specific verb+resource pair — 'Lista os itens de um contrato específico, pelo identificador' — which clearly states what is listed and the scope (single contract, keyed by identifier). It also differentiates itself from the sibling compras_contratos_itens_listar by explicitly saying what this tool is not (the alternative that requires órgão + validity window and returns items from all contracts).
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 an explicit when-to-use: 'Use quando você já tem o contrato em mãos e quer só os itens dele.' It then names the sibling alternative (compras_contratos_itens_listar), states its requirements (órgão mais janela de vigência), and explains why it is the wrong choice for this use case (paginating hundreds of irrelevant lines). This is textbook when/when-not/alternative guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compras_contratos_itens_listarARead-onlyIdempotentInspect
Lista itens de contratos (endpoint 2).
Upstream exige codigoOrgao + dataVigenciaInicialMin/Max. Cache 15 min.
| Name | Required | Description | Default |
|---|---|---|---|
| pagina | No | Página de resultados (1-based). Padrão 1. | |
| tipo_item | No | Tipo do item: 'M' (material) ou 'S' (serviço). | |
| codigo_item | No | Código CATMAT ou CATSER (opcional). | |
| codigo_orgao | Yes | Código do órgão (obrigatório). | |
| ni_fornecedor | No | CPF/CNPJ do fornecedor. | |
| tamanho_pagina | No | Quantidade de registros por página. Padrão 50, máximo 500. | |
| data_vigencia_inicial_max | Yes | Data máxima de início de vigência (YYYY-MM-DD). | |
| data_vigencia_inicial_min | Yes | Data mínima de início de vigência (YYYY-MM-DD). Janela ≤ 365 dias. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only, idempotent, non-destructive behavior, and the description adds that results are cached for 15 minutes. This extra information about caching and upstream requirements provides transparency beyond the annotations, though it does not describe pagination behavior or error semantics.
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 very concise and front-loaded, with the core action in the first sentence. It avoids unnecessary detail and uses only two short sentences to convey the essential 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?
Given the rich parameter schema and the presence of an output schema, the description provides sufficient operational context, including required inputs and cache behavior. It could be slightly more complete by clarifying what data the returned items contain, but the output schema likely covers that need.
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 input schema already covers all 8 parameters with descriptions, so the baseline is 3. The description reinforces that codigo_orgao and the date range are required, but it does not add further semantic detail beyond the schema, such as how the optional filters interact or the meaning of the item code types.
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 clearly states the tool 'lists contract items' (Lista itens de contratos), identifying the action and resource. The phrase 'endpoint 2' adds minor ambiguity but does not obscure the purpose. It is distinguishable from related item-listing tools mainly by the required filters mentioned in the description.
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 explicitly mentions that the upstream API requires codigoOrgao and dataVigenciaInicialMin/Max, giving useful usage guidance. However, it does not explain when to choose this tool over the many sibling tools that also list contracts or items, nor does it state when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compras_contratos_listarARead-onlyIdempotentInspect
Lista contratos federais (Dados Abertos /modulo-contratos/1).
O upstream exige codigoOrgao + janela dataVigenciaInicialMin/Max
(≤ 365 dias). Para sub-recursos detalhados (garantias, faturas,
ocorrências), use compras_contrato_* que consulta o Comprasnet.
Cache 15 min.
| Name | Required | Description | Default |
|---|---|---|---|
| pagina | No | Página de resultados (1-based). Padrão 1. | |
| codigo_orgao | Yes | Código do órgão (obrigatório no upstream). Use `compras_orgao_listar` para descobrir. | |
| ni_fornecedor | No | CPF/CNPJ do fornecedor (apenas dígitos). Opcional. | |
| tamanho_pagina | No | Quantidade de registros por página. Padrão 50, máximo 500. | |
| numero_contrato | No | Filtra por número do contrato (ex.: '00031/2015'). | |
| codigo_unidade_gestora | No | Filtra pela UASG gestora do contrato. | |
| codigo_modalidade_compra | No | Modalidade da compra que originou o contrato. | |
| data_vigencia_inicial_max | Yes | Data MÁXIMA de início de vigência (YYYY-MM-DD). | |
| data_vigencia_inicial_min | Yes | Data MÍNIMA de início de vigência do contrato (YYYY-MM-DD). Janela max ≤ 365 dias até data_vigencia_inicial_max. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already carry readOnly/openWorld/idempotent/destructive hints. The description adds behavioral context beyond them: the upstream endpoint, the required date-window constraint, the 15-minute cache, and the distinction between Dados Abertos and Comprasnet. There is no contradiction with the annotations.
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 four short sentences with no filler. The primary purpose is front-loaded, followed by constraints, an alternative, and the cache note—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 a listing tool with 9 parameters, 3 required fields, a full output schema, and read-only annotations, the description covers the essential operational context: data source, required upstream parameters, sibling routing, and freshness (cache 15 min). Return-value details are already covered by the output schema, so no additional explanation is needed.
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 extra meaning by explaining why the required parameters exist ('O upstream exige `codigoOrgao` + janela `dataVigenciaInicialMin/Max` (≤ 365 dias)') and by naming the discovery path for `codigo_orgao` via `compras_orgao_listar` within the schema. It does not need to restate every parameter because the schema already documents each one.
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 uses the specific verb 'Lista' with the resource 'contratos federais' and names the exact upstream source 'Dados Abertos /modulo-contratos/1'. It also distinguishes itself from the `compras_contrato_*` family by stating those are for detailed sub-resources.
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 explicitly states when to use the tool (listing federal contracts) and when not to: 'Para sub-recursos detalhados (garantias, faturas, ocorrências), use `compras_contrato_*` que consulta o Comprasnet.' It also flags the upstream requirement of `codigoOrgao` plus a date window, guiding valid invocation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compras_contratos_listar_por_fim_vigenciaARead-onlyIdempotentInspect
Lista contratos com vencimento na janela informada (endpoint 1.2).
Inventário do que precisa renovar. Upstream exige codigoOrgao +
dataVigenciaFinalMin/Max (≤ 365 dias). Cache 15 min.
| Name | Required | Description | Default |
|---|---|---|---|
| pagina | No | Página de resultados (1-based). Padrão 1. | |
| codigo_orgao | Yes | Código do órgão (obrigatório). | |
| tamanho_pagina | No | Quantidade de registros por página. Padrão 50, máximo 500. | |
| codigo_unidade_gestora | No | UASG gestora (opcional). | |
| data_vigencia_final_max | Yes | Data MÁXIMA de fim de vigência (YYYY-MM-DD). | |
| data_vigencia_final_min | Yes | Data MÍNIMA de fim de vigência (YYYY-MM-DD). Janela ≤ 365 dias. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the tool as read-only, idempotent, open-world, and non-destructive, so the description only needs to add behavioral detail beyond that. It adds 'Cache 15 min', which warns about data freshness, and explains that the upstream requires a specific parameter combination with a 365-day limit. Nothing in the description contradicts the annotations.
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 three short sentences, each earning its place: the action, the business purpose/context, and the upstream constraint plus cache behavior. The main action is front-loaded, and there is no filler or repetition of schema details.
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 filtered list tool with a full output schema and strong annotations, the description covers the use case, required parameter pairing, date-window limit, and cache behavior, leaving parameter details to the schema. The only minor gap is not pointing the agent toward the analogous ARP sibling tool, but that is not essential for invoking this tool 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 description coverage is 100%, so all six parameters are already documented with types, defaults, and format. The description adds a cross-cutting constraint — the date window must be at most 365 days and codigo_orgao is mandatory — which partially reinforces the schema's existing 'Janela ≤ 365 dias' note. This is useful but modest added value, consistent with the baseline for full schema coverage.
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 first sentence states the core behavior directly: 'Lista contratos com vencimento na janela informada' — a specific verb, resource, and time-window scope. The phrase 'Inventário do que precisa renovar' adds the business purpose, and the resource word 'contratos' helps distinguish it from the ARP-focused sibling compras_arp_por_fim_vigencia.
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 clearly frames when to use the tool: to build an inventory of contracts that need renewal ('Inventário do que precisa renovar'). It also communicates the key operational constraint that the upstream endpoint requires codigo_orgao plus the min/max validity dates with a 365-day window. It does not explicitly name alternative tools or exclusion cases, but the context is clear enough for selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compras_detalhar_preco_materialARead-onlyIdempotentInspect
Lista as compras individuais de um item CATMAT — sem valor de preço.
Endpoint: /modulo-pesquisa-preco/2_consultarMaterialDetalhe.
⚠️ Esta tool não devolve preço. Até a v0.3.12 a docstring prometia
"valor unitário homologado"; auditoria de 2026-08-05 mostrou que o DTO
upstream (FtPesqPrecoCompraMaterialDetalheDTO) tem exatamente 7 campos
e nenhum deles é valor:
idCompra, idItemCompra, numeroItemCompra, codigoItemCatalogo,
objetoCompra, descricaoDetalhadaItem, dataAtualizacaoFatoConfirmado nos dois sentidos: chamada crua ao upstream (fora da camada do MCP) devolve as mesmas 7 chaves, e o contrato OpenAPI oficial declara as mesmas 7. Ou seja: não somos nós que filtramos — o campo nunca existiu nesta rota. A rota 4 (serviço detalhe) tem DTO idêntico.
Para preço unitário de material use compras_pesquisar_preco_material,
que devolve precoUnitario, quantidade, dataCompra e fornecedor por
compra — é a fonte correta para a amostragem da IN SEGES/ME 65/2021.
Use esta tool apenas para: descrição detalhada do item como comprado,
objeto da compra e rastreio do idCompra para cruzar com outras bases.
Cache 10 min.
| Name | Required | Description | Default |
|---|---|---|---|
| pagina | No | Página (1-based). | |
| data_fim | No | Data final da compra (YYYY-MM-DD). Quando omitida, a API usa a data atual. | |
| data_inicio | No | Data inicial da compra (YYYY-MM-DD). Quando omitida, a API usa o início do ano corrente. | |
| tamanho_pagina | No | Registros por página. | |
| codigo_item_catalogo | Yes | Código CATMAT do material. Inteiro 4-8 dígitos. Ex.: 460789. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, idempotent, non-destructive behavior. The description adds substantial context beyond that: it states the tool never returns price, documents the exact 7 upstream DTO fields, confirms via raw call and OpenAPI that the price field never existed, and mentions the 10-minute cache. No contradiction with annotations.
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 the most important warning and clearly structured with bold callouts, endpoint, field list, and usage guidance. It is longer than strictly necessary, with some redundant audit detail, but the length is largely justified by the need to correct a misleading tool name and historical docstring.
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?
The description covers purpose, non-goals, the correct sibling alternative, the exact returned fields, the endpoint, cache behavior, and usage boundaries. Combined with a complete input schema and existing output schema, nothing essential is missing for selecting and invoking the tool 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?
The input schema has 100% description coverage, with all five parameters already documented, including defaults, formats, and an example. The description adds no new parameter-level semantics, so the baseline of 3 is appropriate.
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 first sentence states a specific verb and resource: it lists the individual purchases of a CATMAT item. It immediately clarifies the critical scope limitation ('sem valor de preço') and explicitly distinguishes this tool from the price-returning sibling compras_pesquisar_preco_material.
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 explicitly states when to use this tool ('Use esta tool apenas para: descrição detalhada do item...') and when not to use it, directing price queries to compras_pesquisar_preco_material. This is an ideal when/when-not/alternative structure.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compras_detalhar_preco_servicoARead-onlyIdempotentInspect
Lista as compras individuais de um serviço CATSER — sem valor de preço.
Endpoint: /modulo-pesquisa-preco/4_consultarServicoDetalhe.
⚠️ Esta tool não devolve preço (verificado 2026-08-05): o DTO upstream é idêntico ao da rota 2 — idCompra, idItemCompra, numeroItemCompra, codigoItemCatalogo, objetoCompra, descricaoDetalhadaItem, dataAtualizacaoFato. Nenhum campo de valor.
Para preço unitário de serviço use compras_pesquisar_preco_servico,
que devolve precoUnitario e fornecedor por compra.
Cache 10 min.
| Name | Required | Description | Default |
|---|---|---|---|
| pagina | No | Página (1-based). | |
| data_fim | No | Data final (YYYY-MM-DD). | |
| data_inicio | No | Data inicial (YYYY-MM-DD). | |
| tamanho_pagina | No | Registros por página. | |
| codigo_item_catalogo | Yes | Código CATSER do serviço. Inteiro 4-6 dígitos. Ex.: 27332. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the generic annotations (readOnly, openWorld, idempotent, non-destructive), the description discloses specific behaviors: it explicitly states the tool does not return price, lists the exact fields returned (idCompra, idItemCompra, etc.), notes the verification date, and mentions the 10-minute cache. This goes well beyond the annotations and helps set expectations about data freshness and content.
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 well-organized and mostly concise, but it contains some redundancy: the warning about not returning price is stated multiple times ('sem valor de preço', '⚠️ Esta tool não devolve preço', 'Nenhum campo de valor'). While this emphasis is understandable, it slightly detracts from conciseness. Structure is otherwise clear with distinct sections for endpoint, warning, alternative, and cache.
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 the presence of a full input schema, output schema (indicated by context signals), and annotations covering safety and idempotency, the description provides sufficient context. It explains the purpose, the exact endpoint, what data is returned (and what is not), and points to the correct alternative for price queries. Nothing essential is missing for an agent to use this tool 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?
The input schema already provides 100% coverage with detailed descriptions for all parameters (e.g., 'Código CATSER do serviço. Inteiro 4-6 dígitos. Ex.: 27332.'). The tool description adds no additional parameter semantics beyond what's in the schema, so the baseline score of 3 is appropriate.
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 clearly states the tool's purpose: 'Lista as compras individuais de um serviço CATSER' with the specific verb 'Lista' and the resource 'compras individuais de um serviço CATSER'. It also explicitly differentiates from the sibling tool by noting it does not return price and pointing to 'compras_pesquisar_preco_servico' for price data.
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 provides explicit guidance on when to use this tool versus the alternative: 'Para preço unitário de serviço use `compras_pesquisar_preco_servico`'. This clearly tells the agent when to choose the sibling tool, implying this tool is for non-price purchase details. It also mentions cache duration and verification date, adding practical usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compras_fornecedor_cnpj_receitaARead-onlyIdempotentInspect
Dados públicos do CNPJ na Receita Federal (via BrasilAPI/MinhaReceita).
Retorna razão social, nome fantasia, situação cadastral, CNAE primário e secundários, QSA (sócios), capital social, natureza jurídica, porte, endereço e datas de início de atividade e da situação cadastral.
Quando usar: complemento do compras_perfil_fornecedor_completo
para due diligence (avaliar porte, sócios, CNAEs vs objeto da licitação).
Os dados são da Receita; este MCP não consulta sanções aqui — para
isso use as tools de sanção (CEIS/CNEP/CEPIM/CEAF).
Cache 24h. Em caso de 404 ou erro upstream, retorna encontrado=false
com diagnóstico em _erro em vez de propagar exception.
| Name | Required | Description | Default |
|---|---|---|---|
| cnpj | Yes | CNPJ a consultar (14 dígitos, com ou sem pontuação). Usa BrasilAPI por padrão; trocável via env `CNPJ_PROVIDER=minhareceita`. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint and idempotentHint annotations, the description discloses additional behavior: 24h cache, provider configurable via environment variable, and that it returns 'encontrado=false' with a diagnostic error instead of throwing exceptions. This adds meaningful transparency about edge cases and operational details.
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 structured with clear sections (what it returns, when to use, what it does not do). It is informative without being verbose, and each sentence adds value—no filler or redundant content.
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?
The description covers the data returned, the use case, exclusions (sanctions), caching, error handling, and provider configuration. It is contextually rich and provides enough information for an agent to decide when and how to invoke the tool, especially given the output schema exists.
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 single parameter 'cnpj' is fully documented in the schema: format (14 digits, with or without punctuation), provider selection (BrasilAPI default, minhareceita via env). The description in the schema covers the parameter completely, and the main description reinforces its purpose.
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 explicitly states the tool's function (public CNPJ data from Receita Federal) and enumerates the returned fields (razão social, CNAEs, QSA, etc.). It also differentiates from sibling tools by positioning itself as a complement to compras_perfil_fornecedor_completo and clarifying that it does not cover sanctions, making the purpose unambiguous.
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 'Quando usar' section provides explicit guidance: use for due diligence, and explicitly directs to sanction tools (CEIS/CNEP/CEPIM/CEAF) when sanctions are needed. It also mentions cache and error behavior, giving clear conditions for its use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compras_fornecedor_consultarARead-onlyIdempotentInspect
Consulta cadastro de um fornecedor pelo CNPJ ou CPF.
Endpoint Dados Abertos /modulo-fornecedor/1_consultarFornecedor.
Devolve razão social, CNAE, porte da empresa, natureza jurídica.
Cache 1h.
| Name | Required | Description | Default |
|---|---|---|---|
| cnpj_cpf | Yes | CNPJ (14 dígitos) ou CPF (11 dígitos) do fornecedor, com ou sem pontuação. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish read-only, idempotent, open-world, and non-destructive behavior. The description adds useful behavioral context beyond annotations: the exact Dados Abertos endpoint path and the 1-hour cache. No contradictions with annotations.
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 compact and front-loaded: main action first, then endpoint, return fields, and cache behavior. Every line adds information and there is no redundant 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 a single required parameter, a full output schema, and annotations covering the safety profile, the description is nearly complete for a simple lookup tool. It captures the endpoint, cache TTL, and output contents; the only notable gap is explicit routing among the many supplier-related sibling tools.
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% and the schema already specifies that cnpj_cpf is a CNPJ (14 digits) or CPF (11 digits), with or without punctuation. The description only restates 'CNPJ ou CPF' and adds no new semantic detail about format, validation, or edge cases.
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 action ('Consulta cadastro de um fornecedor pelo CNPJ ou CPF'), identifies the resource (supplier registration), and lists the returned fields (razão social, CNAE, porte, natureza jurídica). It is clear, but it does not explicitly distinguish itself from sibling supplier tools such as compras_fornecedor_cnpj_receita or compras_perfil_fornecedor_completo.
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 intended use is implied by the stated lookup by CNPJ/CPF and the listed return fields, giving an agent some context for selection. However, the description does not name any alternative tools, state when-not-to-use it, or clarify how it differs from the other supplier-lookup siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compras_fornecedor_contratos_por_itemARead-onlyIdempotentInspect
Lista contratos e empenhos por itens (CATMAT/CATSER) no Comprasnet.
Endpoint POST /api/comprasnet/contratosempenhos. Útil para descobrir
quem fornece esses itens hoje no governo (potenciais participantes em
novos certames).
Cache 1h.
| Name | Required | Description | Default |
|---|---|---|---|
| codigos_catmat | No | Códigos CATMAT a buscar. | |
| codigos_catser | No | Códigos CATSER a buscar. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only, idempotent, non-destructive behavior. The description adds a useful behavioral detail with 'Cache 1h' and the endpoint. It does not explain open-world or open-ended result behavior, but no contradiction exists.
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 compact and front-loaded: it states the action first, then the endpoint, the use case, and the cache behavior. Every sentence adds value with no fluff.
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 an output schema present, return-value details are unnecessary. The description covers purpose, endpoint, use case, and caching. A minor gap is that it does not explain what happens when both optional item code parameters are omitted.
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%, with each parameter described as 'Códigos CATMAT a buscar' and 'Códigos CATSER a buscar.' The tool description reinforces that these are item codes and relates them to supplier discovery, but adds limited semantic detail beyond the schema.
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 and resource: 'Lista contratos e empenhos por itens (CATMAT/CATSER) no Comprasnet.' It clearly identifies the item-based supplier view and differentiates from the many sibling tools by focusing on discovering who currently supplies those items.
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 gives a clear intended use case: 'Útil para descobrir quem fornece esses itens hoje no governo (potenciais participantes em novos certames).' This is helpful context, though it does not explicitly name alternatives or exclusion criteria relative to sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compras_fornecedor_impedimentos_por_itensARead-onlyIdempotentInspect
Consulta impedimentos no Comprasnet por lista de itens (CATMAT/CATSER).
Endpoint POST /api/comprasnet/compras/impedimentos. Retorna fornecedores
impedidos de participar de contratações dos itens informados (sanções
aplicadas no SICAF). Essencial antes de homologar pregões eletrônicos.
Cache 1h.
| Name | Required | Description | Default |
|---|---|---|---|
| codigos_catmat | No | Lista de códigos CATMAT (materiais) a verificar. Use junto com codigos_catser ou separadamente. | |
| codigos_catser | No | Lista de códigos CATSER (serviços). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark it read-only, idempotent, non-destructive, and open-world; the description supplements this with useful behavioral details: it returns sanctioned suppliers from SICAF, uses POST, and has a 1-hour cache. This goes beyond the annotation hints without contradicting them.
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 compact and front-loaded: the purpose statement comes first, followed by endpoint, output, use case, and cache behavior. Every sentence contributes distinct value 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 a rich output schema, 100% parameter coverage, and annotations covering safety semantics, the description provides the remaining practical context an agent needs: when to use it, what it returns, and how fresh the data is. Nothing essential 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 the schema already fully documents codigos_catmat and codigos_catser. The description only mentions CATMAT/CATSER generically and does not add parameter-level semantics 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?
The description identifies a specific verb-resource pair ('Consulta impedimentos no Comprasnet') and scopes it by item lists (CATMAT/CATSER), including the endpoint and return semantics. It does not explicitly contrast itself with sibling tools such as compras_checar_sancoes_fornecedor, so it falls just short of full 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?
'Essencial antes de homologar pregões eletrônicos' provides a clear, concrete use-case. There are no exclusions or named alternatives, but the context is sufficient to guide when this check should be run.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compras_fornecedor_listarARead-onlyIdempotentInspect
Lista fornecedores no Compras.gov.br com filtros estruturais.
Endpoint Dados Abertos /modulo-fornecedor/1_consultarFornecedor. Use
para mapear fornecedores potenciais por porte/CNAE — ex.: levantar
todas as MEs com CNAE de TI.
Cache 1h.
| Name | Required | Description | Default |
|---|---|---|---|
| cpf | No | Filtrar por CPF (11 dígitos). | |
| cnpj | No | Filtrar por CNPJ (14 dígitos). | |
| ativo | No | True (default) para listar apenas ativos, False para apenas inativos. | |
| pagina | No | Página de resultados (1-based). Padrão 1. | |
| codigo_cnae | No | Código CNAE para filtrar por atividade. | |
| porte_empresa | No | Código de porte da empresa (1=ME, 2=EPP, 3=Demais). Consulte os códigos no manual do Compras.gov.br. | |
| tamanho_pagina | No | Quantidade de registros por página. Padrão 50, máximo 500. | |
| natureza_juridica | No | Código da natureza jurídica. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only and idempotent. The description adds a behavioral note about caching ('Cache 1h'), which is additional context beyond annotations. It does not contradict any annotation.
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 brief and well-structured: purpose, endpoint, use case, cache note. No redundant 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?
The description covers the essential context for a read-only listing tool with structural filters. It explains when to use it and gives an example. It does not specify return format, but the schema and annotations provide sufficient detail for this tool's complexity.
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 covers 100% of parameters with descriptions. The tool description adds a semantic example (levantar todas as MEs com CNAE de TI) that clarifies how to combine porte_empresa and codigo_cnae, enhancing understanding beyond the schema.
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 clearly states the purpose with a specific verb (Lista) and resource (fornecedores), and provides an example use case (mapping suppliers by porte/CNAE), making its intent unambiguous.
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 provides a concrete use case ('Use para mapear fornecedores potenciais por porte/CNAE') and mentions the endpoint, but it does not explicitly distinguish this tool from siblings like compras_fornecedor_consultar. The 'com filtros estruturais' hint implies differentiation but not explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compras_healthcheckARead-onlyIdempotentInspect
Diz, em ~30 segundos, o que está de pé neste servidor agora.
Estende compras_versao: além de versão e configuração, dispara um
probe paralelo (timeout curto) contra as rotas upstream reais e
devolve a situação por módulo funcional.
Por que existe: em 04/08/2026 a tool de pesquisa de preço de material estava quebrada havia semanas e ninguém sabia — a SEGES trocou a assinatura da rota sem versionar. A descoberta veio de um analista tentando usar a ferramenta. Antes de uma demonstração ou de instruir processo, rode isto: o objetivo é que a descoberta aconteça aqui, não no palco.
Args:
profundidade: basico responde só versão/config (instantâneo);
rotas (padrão) executa o probe upstream.
modulo: restringe o probe a um módulo (ex.: pesquisa_preco,
atas, pncp). Sem isso, testa todos.
Situação por módulo:
- ok: todas as rotas responderam com os campos esperados.
- degradado: alguma rota caiu, ou respondeu 200 sem os campos
do contrato (ex.: rota de preço sem precoUnitario) — o modo de
falha silencioso que só o contrato de campos pega.
- fora: todas as rotas testáveis do módulo falharam.
- pulado: faltou credencial (ex.: TRANSPARENCIA_API_KEY).
Rota que estoura o relógio é reexecutada em série antes de virar
fora: com dezenas de rotas em paralelo, uma rota apenas lenta seria
reportada como quebrada. Quando passa na segunda tentativa, o campo
problemas do módulo registra "lenta sob carga" em vez de escondê-lo.
O campo pronto_para_uso é o resumo honesto: False quando existe
qualquer módulo fora ou degradado.
| Name | Required | Description | Default |
|---|---|---|---|
| modulo | No | Restringe o probe a um módulo funcional: 'pesquisa_preco', 'catalogo', 'organizacoes', 'atas', 'contratacoes', 'contratos', 'fornecedores', 'indicadores', 'legado', 'planejamento', 'pncp', 'sancoes', 'comprasnet', 'enriquecimento'. Sem valor, testa todos. | |
| profundidade | No | 'rotas' (padrão) testa as rotas upstream reais em paralelo e devolve situação por módulo (ok/degradado/fora) em ~30s. 'basico' devolve só versão e configuração, sem tocar a rede. | rotas |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the tool as readOnly, idempotent, and non-destructive. The description goes beyond annotations by detailing the parallel probe, short timeout, retry-then-mark-out behavior, per-module status semantics (ok/degradado/fora/pulado), and the 'pronto_para_uso' summary field. This is rich behavioral disclosure without contradicting the annotations.
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 opens with a concise one-sentence summary and then uses clear sections for args, statuses, retry behavior, and the summary field. It is longer than average due to the historical rationale, but that rationale reinforces when to use the tool. It is organized and front-loaded, with minimal unnecessary repetition.
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?
The description covers what the tool does, how long it takes, what parameters do, how statuses are derived, what happens on timeouts, what happens with missing credentials, and how to interpret 'pronto_para_uso'. Even with an output schema present, the description provides enough semantic context for an agent to call the tool correctly and interpret 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?
The input schema already covers both parameters with 100% coverage, so the baseline is 3. The description adds value by giving concrete module examples ('pesquisa_preco', 'atas', 'pncp'), clarifying that 'basico' avoids network access, and explaining default behavior. This is useful extra context beyond the schema.
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 and resource: 'Diz, em ~30 segundos, o que está de pé neste servidor agora.' It explicitly distinguishes itself from the sibling compras_versao by saying it 'estende compras_versao' and adds upstream route probing. This is a clear healthcheck purpose that an agent can differentiate from other compras_* 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?
The description gives explicit usage context: 'Antes de uma demonstração ou de instruir processo, rode isto.' It also references compras_versao as the more limited alternative and explains the historical failure that motivated the tool. It does not explicitly list when-not-to-use scenarios, but the context and alternative are clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compras_indicadores_consolidadosARead-onlyIdempotentInspect
Métricas operacionais consolidadas da API Dados Abertos.
Endpoint /modulo-indicadores/1_consultarIndicadoresConsolidados.
Retorna: total de serviços disponíveis, total de requisições no
período, percentual de sucesso, latência média (ms), volume total
e médio de download (GB). Útil para diagnóstico/observabilidade,
não para indicadores de mercado público (ver docstring do módulo).
Cache 1h.
| Name | Required | Description | Default |
|---|---|---|---|
| pagina | No | Página (1-based). Padrão 1. | |
| tamanho_pagina | No | Registros por página (default 50, máximo 500). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint, idempotentHint, and destructiveHint false, and the description does not contradict these. It adds useful behavioral details such as the 1-hour cache and the specific metrics returned, with no hidden side effects mentioned or implied.
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 concise and well-structured: it opens with the tool's purpose, identifies the endpoint, lists the returned metrics, and gives usage guidance. No unnecessary words or redundant restatement of schema details are present.
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 the output schema exists, the description is not required to detail return values, yet it still lists the main metrics and provides cache and usage context. It is complete enough for an agent to understand when and how to invoke this 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?
The input schema fully describes the two optional parameters (pagina and tamanho_pagina) with defaults and constraints, so the description adds no additional parameter semantics. Baseline 3 is appropriate because the schema already carries the full parameter 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 clearly states the tool's purpose: returning consolidated operational metrics for the Dados Abertos API, including service count, request totals, success rate, latency, and download volume. It explicitly distinguishes itself from market-indicator tools by saying it is for diagnostics/observability, not public market indicators.
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 provides clear usage context: use it for diagnostics/observability and not for market indicators. It does not explicitly name sibling alternatives such as compras_indicadores_por_periodo or compras_healthcheck, but the positive and negative guidance is enough to guide tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compras_indicadores_por_periodoARead-onlyIdempotentInspect
Métricas operacionais da API por período (ano/mês).
Endpoint Dados Abertos /modulo-indicadores/2_consultarIndicadoresPorPeriodo.
Retorna métricas de USO da API (requisições, latência, downloads),
não dados de compras. Útil para análise temporal de disponibilidade
do upstream.
Cache 1h.
| Name | Required | Description | Default |
|---|---|---|---|
| ano | Yes | Ano de referência dos indicadores (4 dígitos). | |
| mes | No | Mês (1-12). Se omitido, agrega o ano inteiro. Se informado, filtra apenas o mês especificado. | |
| pagina | No | Página (1-based). | |
| tamanho_pagina | No | Registros por página. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive behavior. The description adds valuable behavioral context beyond that: the 1-hour cache, the focus on API usage rather than procurement data, and the underlying open-data endpoint, which helps the agent anticipate results.
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 compact and front-loaded: purpose first, then endpoint, then the key disambiguation, then use case and cache behavior. Every sentence delivers distinct information 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?
For a read-only, paginated query tool with a rich schema and output schema present, the description covers purpose, endpoint, semantics, exclusions, use case, and caching. Nothing needed for correct selection and 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 description coverage is 100%, with all four parameters already documented in detail, including the month aggregation behavior. The description adds only a high-level 'period (year/month)' hint, which does not materially improve on the schema.
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 and resource: it returns API usage metrics (requests, latency, downloads) by period, not purchasing data. It also names the exact endpoint and explicitly distinguishes itself from the many purchasing-data tools in the sibling list.
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 clear context by saying the tool is useful for temporal analysis of upstream availability and explicitly clarifies it is not for purchasing data. However, it does not name an alternative sibling tool or state a when-not-to-use condition beyond the 'not purchasing data' exclusion.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compras_legado_compras_sem_licitacaoARead-onlyIdempotentInspect
Lista compras sem licitação (dispensa/inexigibilidade) do regime legado.
Endpoint /modulo-legado/5_consultarComprasSemLicitacao. Upstream
exige dt_ano_aviso (ano inteiro, ex.: 2024) — não janela de datas.
| Name | Required | Description | Default |
|---|---|---|---|
| pagina | No | Página de resultados (1-based). Padrão 1. | |
| co_uasg | No | Código UASG (opcional). | |
| co_orgao | No | Código do órgão (opcional). | |
| dt_ano_aviso | Yes | Ano do aviso (ex.: 2024). Obrigatório no upstream. | |
| pertence14133 | No | Vincula à Lei 14.133. | |
| tamanho_pagina | No | Quantidade de registros por página. Padrão 50, máximo 500. | |
| co_orgao_superior | No | Código do órgão superior (opcional). | |
| nu_aviso_licitacao | No | Número do aviso de licitação. | |
| co_modalidade_licitacao | No | Código da modalidade SIASG. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint, idempotentHint, openWorldHint, and non-destructive behavior, so the description does not need to repeat them. It adds valuable behavioral context by warning that the upstream requires dt_ano_aviso and specifically disallows a date-range window. This prevents an otherwise plausible misuse given the typical date-range filtering in sibling list tools.
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 short sentences deliver the purpose, endpoint, and the single most important invocation constraint. The required-parameter warning is front-loaded and emphasized with bold, leaving no redundant content.
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 tool with nine parameters, the schema documents every parameter with descriptions, an output schema exists, and annotations cover safety semantics. The description supplies the one non-obvious call-level constraint that is not fully explicit in the schema context. Nothing essential for invoking the tool 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 the baseline is 3. The description adds one meaningful clarification beyond the schema: dt_ano_aviso must be a full year (e.g., 2024), not a date window. This directly prevents a common mistake even though the schema already labels the field as the announcement year.
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 opens with a specific verb and resource: 'Lista compras sem licitação (dispensa/inexigibilidade) do regime legado.' This clearly identifies the tool as a legacy-regime listing operation and distinguishes it from bidding, pregao, RDC, and item-level sibling tools. The parenthetical explicitly scopes the semantics to dispensa/inexigibilidade, so the agent knows exactly what kind of purchases are returned.
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 provides clear context: this is for legacy-regime purchases without bidding. It also flags the critical upstream requirement (dt_ano_aviso as a full year, not a date window). It does not name alternatives or state when not to use it, but the legacy-regime qualifier is enough context to route the agent correctly among siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compras_legado_itens_licitacao_listarBRead-onlyIdempotentInspect
Lista itens de licitações legado (/modulo-legado/2_consultarItemLicitacao).
Upstream exige modalidade obrigatório. Filtros opcionais: uasg,
numero_aviso, codigo_item_material/servico, cnpj_fornecedor.
| Name | Required | Description | Default |
|---|---|---|---|
| uasg | No | Código UASG (opcional). | |
| pagina | No | Página de resultados (1-based). Padrão 1. | |
| modalidade | Yes | Código de modalidade SIASG (obrigatório). Ex.: 5=Pregão, 6=Dispensa. | |
| numero_aviso | No | Número do aviso (opcional). | |
| tamanho_pagina | No | Quantidade de registros por página. Padrão 50, máximo 500. | |
| cnpj_fornecedor | No | CNPJ do fornecedor (opcional). | |
| codigo_item_servico | No | Código CATSER (opcional). | |
| codigo_item_material | No | Código CATMAT (opcional). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds the upstream endpoint and the mandatory modality requirement, but does not disclose additional behavioral traits such as pagination behavior, data scope, or rate limits. It is consistent with the annotations and adds a little context, but does not go far beyond them.
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 compact and well-structured: the first sentence states the action and endpoint, and the second states the required parameter and optional filters. Every sentence earns its place with no filler or 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?
For a read-only list operation with full schema coverage, safety annotations, and an output schema present, the description plus schema is nearly complete for correct invocation. The main gaps are the lack of sibling differentiation and any mention of pagination defaults, though pagination parameters are already described in 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 100%, so the schema already documents all eight parameters with individual descriptions and examples. The description restates that modalidade is required and lists the optional filter names, which adds little semantic value beyond what is already in the schema; the endpoint path is the only notable extra context.
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 clear verb ('Lista') and resource ('itens de licitações legado') and even identifies the upstream endpoint path, making the primary action and scope unambiguous. However, it does not explicitly differentiate itself from closely related siblings like compras_legado_itens_pregao_listar or compras_legado_itens_sem_licitacao_listar, so the exact boundary of 'licitações' vs. those specialized lists is left to inference.
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 guidance on when to use this tool versus any of the many sibling tools. The description only states that modalidade is required and lists optional filters; it never mentions alternatives, exclusions, or conditions that should route an agent to another tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compras_legado_itens_pregao_listarARead-onlyIdempotentInspect
Lista itens de pregões do regime legado (Lei 8.666), com a cadeia de preço.
Endpoints /modulo-legado/4_consultarItensPregoes (por período de
homologação) e /modulo-legado/4.1_consultarItensPregoes_Id (quando
id_compra é informado).
É a única fonte, em todo o MCP, da cadeia completa de formação de preço
por item: valor_estimado_item → menor_lance → valor_negociado →
valor_homologado_item. Serve para medir o desconto real obtido em certame
e para instruir negociação.
Traz também situacao_item, que revela itens desertos e fracassados —
invisíveis para quem só olha preço homologado, e relevantes para justificar
revisão de estimativa.
Informe id_compra ou o par de datas de homologação. As duas datas
precisam ser diferentes entre si (restrição do upstream).
Série histórica: use para contratações anteriores à Lei 14.133. Para 2022 em
diante, prefira compras_contratacoes_14133_itens_listar.
Cache 15 min.
| Name | Required | Description | Default |
|---|---|---|---|
| pagina | No | Página de resultados (1-based). Padrão 1. | |
| id_compra | No | Identificador do pregão, para trazer só os itens dele. É a concatenação zero-padded de UASG(6) + modalidade(2) + número(5) + ano(4) — ex.: '38916105000152022'. Também é o campo `id_compra` devolvido por `compras_legado_pregoes_listar`. | |
| codigo_uasg | No | Código da UASG que realizou o pregão (só na busca por período). | |
| decreto_7174 | No | Filtra itens sujeitos ao Decreto 7.174/2010 (bens e serviços de informática). | |
| id_compra_item | No | Identificador de um item específico dentro do pregão. | |
| tamanho_pagina | No | Quantidade de registros por página. Padrão 50, máximo 500. | |
| data_homologacao_final | No | Data final de homologação dos itens (YYYY-MM-DD). Obrigatória quando `id_compra` não é informado. | |
| data_homologacao_inicial | No | Data inicial de homologação dos itens (YYYY-MM-DD). Obrigatória quando `id_compra` não é informado. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already convey read-only, idempotent, non-destructive behavior, and the description adds valuable behavioral context: the 15-minute cache, the upstream constraint that the two dates must differ, the endpoint routing based on id_compra presence, and the unique price-chain data availability. No contradiction with annotations exists.
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 the core purpose, then uses short, dense paragraphs for data uniqueness, use cases, parameter modes, alternative routing, and cache behavior. Every sentence contributes actionable information without 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?
With a rich output schema, complete parameter descriptions, and strong annotations, the description covers the remaining gaps: legacy scope, endpoint selection, parameter exclusion constraint, sibling alternative, cache, and business relevance. Nothing essential for correct invocation is left unaddressed.
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% and parameter descriptions are already rich. The description still adds meaningful semantic guidance beyond the schema by explaining the id_compra-or-date-pair relationship, the requirement that the two dates differ, and which endpoint is used for each mode.
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 and resource: lists items from pregões under the legacy regime (Lei 8.666) with the full price chain. It also distinguishes itself by claiming to be the only MCP source for the complete per-item price formation chain and explicitly contrasts with compras_contratacoes_14133_itens_listar.
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 gives explicit when-to-use guidance: for contracts before Lei 14.133, to measure real discount, and to identify deserted or failed items. It also names the alternative for newer contracts, compras_contratacoes_14133_itens_listar, making the selection decision clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compras_legado_itens_sem_licitacao_listarARead-onlyIdempotentInspect
Lista itens de contratações diretas do regime legado (dispensa/inexigibilidade).
Endpoints /modulo-legado/6_consultarCompraItensSemLicitacao (por ano do
aviso) e /modulo-legado/6.1_consultarItensComprasSemLicitacao_Id (quando
id_compra é informado).
É o único caminho para contratação direta em nível de item no período
anterior ao PNCP (2019-2021) — justamente a janela das dispensas
emergenciais da pandemia, para a qual as rotas da Lei 14.133 retornam vazio.
Traz vr_estimado, fornecedor vencedor e a descrição detalhada do item.
Informe id_compra ou ano_aviso.
CPF de fornecedor pessoa física vem mascarado por padrão (LGPD).
Cache 15 min.
| Name | Required | Description | Default |
|---|---|---|---|
| pagina | No | Página de resultados (1-based). Padrão 1. | |
| ano_aviso | No | Ano do aviso da contratação direta. Obrigatório quando `id_compra` não é informado. Cobertura útil principalmente entre 2019 e 2021, período anterior ao PNCP — para 2022 em diante prefira `compras_contratacoes_14133_itens_listar`. | |
| id_compra | No | Identificador da compra, para trazer só os itens dela. | |
| codigo_uasg | No | Código da UASG contratante. | |
| codigo_orgao | No | Código do órgão contratante. | |
| codigo_servico | No | Código do serviço (CATSER legado). | |
| id_compra_item | No | Identificador de um item específico dentro da compra. | |
| tamanho_pagina | No | Quantidade de registros por página. Padrão 50, máximo 500. | |
| codigo_modalidade | No | Código da modalidade legada (dispensa, inexigibilidade). | |
| cpf_cnpj_fornecedor | No | CPF ou CNPJ do fornecedor vencedor (só dígitos). | |
| codigo_conjunto_materiais | No | Código do conjunto de materiais (CATMAT legado). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, open-world, and non-destructive behavior. The description adds meaningful behavioral details: CPF masking by default due to LGPD, 15-minute cache, the selected output fields (vr_estimado, winner supplier, detailed item description), and the endpoint switching behavior depending on id_compra. It does not cover pagination or rate limits, but those are partially reflected 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?
The description is compact and front-loaded: purpose, endpoint behavior, uniqueness/window, returned data, usage rule, privacy note, and cache. Each sentence adds distinct value and the most important routing guidance appears early.
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 the tool has 11 parameters, a rich output schema, and strong annotations, the description covers the essential selection context: what data it returns, which time period it serves, why it should be chosen over 14.133 routes, the required parameter relationship, and a privacy behavior. Nothing critical for an agent to invoke 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 the baseline is 3. The main description adds the mutual-exclusion rule 'Informe id_compra ou ano_aviso' and ties id_compra to the second endpoint, but most of this is already stated in the parameter descriptions. It does not need to compensate for missing schema documentation.
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 names a specific resource and action: listing items from legacy direct contracting (dispensa/inexigibilidade). It differentiates itself clearly from the 14.133-era routes and even states it is the only path for item-level direct contracting in the 2019-2021 pre-PNCP window, which distinguishes it from sibling legacy and PNCP 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?
The description explicitly says when to use it: for direct contracting items before PNCP, specifically the pandemic emergency-waiver window where Lei 14.133 routes return empty. It also provides the key usage rule 'Informe id_compra ou ano_aviso' and the schema adds the explicit alternative preference for 2022 onward: compras_contratacoes_14133_itens_listar.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compras_legado_licitacao_consultarARead-onlyIdempotentInspect
Consulta uma licitação legado pelo id_compra.
Endpoint /modulo-legado/1.1_consultarLicitacao_Id. Upstream exige
id_compra (string), não um id numérico.
| Name | Required | Description | Default |
|---|---|---|---|
| id_compra | Yes | ID da compra no SIASG (string, retornado em `compras_legado_licitacoes_listar`). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnlyHint=true, idempotentHint=true, destructiveHint=false), so the bar is lower. The description adds real value beyond them: it exposes the upstream endpoint and warns that upstream expects a string id_compra rather than a numeric id — a behavioral pitfall an agent would otherwise only discover at call time.
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, zero filler: the purpose is front-loaded in the first sentence, and the second carries the endpoint plus the type caveat. Every word earns its place, and the description is appropriately scoped for a single-parameter 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?
For a simple 1-parameter consult with an output schema present, rich safety annotations, and 100% schema coverage, nothing essential is missing. The description covers purpose, endpoint, and the critical type expectation; the schema covers parameter provenance; the output schema covers return shape.
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% (the schema documents id_compra as a SIASG string returned by the listar tool), so the baseline is 3. The description adds marginal but meaningful value by stressing that upstream requires the string form and explicitly rejects a numeric id, reinforcing the type constraint against a common agent error.
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 and resource — 'Consulta uma licitação legado' — and the lookup key 'pelo id_compra'. It also names the exact upstream endpoint (`/modulo-legado/1.1_consultarLicitacao_Id`), which disambiguates it from sibling legacy tools (pregoes, rdc). This is a fetch-by-id operation clearly distinct from compras_legado_licitacoes_listar.
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 conveys the usage context: consult a single legacy licitação when you hold an id_compra. It adds an implicit when-not warning ('não um id numérico'), and the schema parameter description completes the workflow by stating the id comes from compras_legado_licitacoes_listar. It names no explicit alternative, so it misses the top tier, but the context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compras_legado_licitacoes_listarARead-onlyIdempotentInspect
Lista licitações do regime legado (Lei 8.666/93).
Endpoint /modulo-legado/1_consultarLicitacao. Bug upstream
confirmado: o filtro uasg, embora documentado no swagger oficial,
retorna HTTP 400 ("Erro ao efetuar a consulta") porque o atributo não
existe no modelo Hibernate da view (TbVwLicitacao). Por isso este
parâmetro foi removido da assinatura.
Workaround se você precisar filtrar por UASG: liste sem filtro, depois
filtre client-side pelo campo uasg do resultado.
| Name | Required | Description | Default |
|---|---|---|---|
| pagina | No | Página de resultados (1-based). Padrão 1. | |
| modalidade | No | Código de modalidade SIASG (opcional). | |
| numero_aviso | No | Número do aviso (opcional). | |
| pertence14133 | No | Filtrar somente processos vinculados à Lei 14.133. | |
| tamanho_pagina | No | Quantidade de registros por página. Padrão 50, máximo 500. | |
| data_publicacao_final | Yes | Data final de publicação (YYYY-MM-DD). Obrigatório no upstream. | |
| data_publicacao_inicial | Yes | Data inicial de publicação (YYYY-MM-DD). Obrigatório no upstream. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Além das annotations (readOnly, openWorld, idempotent, non-destructive), a descrição revela um bug upstream confirmado: o filtro uasg gera HTTP 400 e foi removido, fornecendo workaround. Isso é transparência comportamental valiosa e não contradiz as annotations.
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?
O texto é front-loaded com o propósito, seguido do endpoint, do bug e do workaround. Cada frase agrega valor; o aviso sobre o parâmetro uasg é essencial e evita chamadas com erro. Não há redundância.
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?
Com output schema e annotations presentes, a descrição não precisa explicar retorno. Ela cobre a principal pegadinha (uasg), fornece workaround e o schema documenta o restante. Está completa para uso correto da ferramenta.
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?
O schema já cobre 100% dos parâmetros, então o baseline é 3. A descrição vai além ao explicar que uasg foi deliberadamente removido da assinatura e aponta o campo uasg no resultado para filtro client-side — informação que o schema não contém e que evita tentativas inválidas.
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?
A descrição usa verbo específico ('Lista') + recurso específico ('licitações do regime legado (Lei 8.666/93)') e identifica o endpoint. Isso diferencia claramente a ferramenta de irmãs como compras_legado_licitacao_consultar (consulta singular) e compras_legado_pregoes_listar/rdc_listar pelo escopo legado e pela ação de listagem.
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?
Há contexto claro de uso: listar licitações do regime legado. A descrição também orienta com um workaround para filtrar por UASG, indicando que o parâmetro foi removido e que se deve filtrar client-side. Não nomeia alternativas explicitamente, mas o contexto e o aviso são suficientes para o agente decidir quando usar.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compras_legado_pregoes_listarARead-onlyIdempotentInspect
Lista pregões eletrônicos do regime legado.
Endpoint /modulo-legado/3_consultarPregoes. Bug upstream
confirmado: os filtros co_uasg e co_orgao, embora documentados
no swagger, retornam HTTP 400 com erro Hibernate
Could not resolve attribute 'TbVwPregaoId.coUasg' porque os atributos
não existem no modelo da view. Por isso ambos foram removidos da
assinatura.
Workaround para filtrar por UASG: chame sem filtro e filtre client-side
pelos campos coUasg/coOrgao do resultado.
| Name | Required | Description | Default |
|---|---|---|---|
| numero | No | Número do pregão (opcional). | |
| pagina | No | Página de resultados (1-based). Padrão 1. | |
| pertence14133 | No | Filtrar pregões vinculados à Lei 14.133. | |
| tamanho_pagina | No | Quantidade de registros por página. Padrão 50, máximo 500. | |
| dt_data_edital_final | Yes | Data final do edital (YYYY-MM-DD). Obrigatório. | |
| ds_tipo_pregao_compra | No | Tipo do pregão de compra (string upstream). | |
| dt_data_edital_inicial | Yes | Data inicial do edital (YYYY-MM-DD). Obrigatório. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/idempotent annotations, the description discloses a concrete upstream bug with the exact HTTP 400 error and Hibernate message, and explains that co_uasg/co_orgao were removed. This tells the agent what will happen if it expects those parameters and how to work around the behavior.
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 sentences, with the core purpose first, the endpoint second, and the essential warning/workaround next. Every sentence carries information the schema and annotations do not, 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?
For a read-only listing tool with an output schema, this description is complete: it states the resource, endpoint, constraints, and the one serious caveat an agent would otherwise discover only after a failed call. Nothing needed 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%, so the baseline is 3, but the description adds critical meaning the schema cannot: the seemingly natural filter parameters co_uasg and co_orgao are intentionally absent because they break the endpoint, and client-side filtering on response fields is required. This materially changes how an agent should construct calls.
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 opens with a specific verb and resource, 'Lista pregões eletrônicos do regime legado', and adds the exact endpoint. This cleanly distinguishes it from sibling listers such as compras_legado_licitacoes_listar and compras_legado_rdc_listar.
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 explicit operational guidance: because the upstream filters are broken, call without filters and filter client-side by coUasg/coOrgao. It does not name alternative tools or say when not to use this one, but the main usage strategy for filtering is clearly stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compras_legado_rdc_listarARead-onlyIdempotentInspect
Lista contratações pelo RDC (Regime Diferenciado de Contratações).
Endpoint /modulo-legado/7_consultarRdc. Upstream usa
data_publicacao_min/max (note min/max, não inicial/final).
RDC foi usado principalmente para obras dos megaeventos e da Copa —
relevância residual hoje.
| Name | Required | Description | Default |
|---|---|---|---|
| uasg | No | Código UASG (opcional). | |
| orgao | No | Código do órgão (opcional). | |
| pagina | No | Página de resultados (1-based). Padrão 1. | |
| uf_uasg | No | UF da UASG (sigla, ex.: 'DF'). | |
| modalidade | No | Código de modalidade. | |
| tamanho_pagina | No | Quantidade de registros por página. Padrão 50, máximo 500. | |
| data_publicacao_max | Yes | Data MÁXIMA de publicação (YYYY-MM-DD). Obrigatório. | |
| data_publicacao_min | Yes | Data MÍNIMA de publicação (YYYY-MM-DD). Obrigatório. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the tool read-only, idempotent, and non-destructive. The description adds value by revealing the legacy endpoint and warning that the upstream API expects data_publicacao_min/max rather than inicial/final, a critical behavioral detail for correct invocation. No contradiction with annotations.
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 sentences deliver the core purpose, endpoint, parameter warning, and historical relevance with no filler. The most important information is front-loaded, and every 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?
Given the output schema exists, annotations cover the safety profile, and the input schema documents all 8 parameters, the description is complete. It adds the missing operational and contextual information an agent needs: the endpoint, the upstream parameter quirk, and the legacy/residual relevance of RDC.
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 percent, so the baseline is 3. The description adds a meaningful operational nuance about the required date parameters, explicitly warning about the upstream naming convention, which helps prevent parameter mismatches even though the schema already documents the fields.
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 clearly states the action ('Lista') and the resource ('contratações pelo RDC'), names the exact endpoint, and explains what RDC is for. This distinguishes it from the many non-RDC legacy and modern contracting tools in the sibling list.
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 gives useful context by noting that RDC was used mainly for megaevent and World Cup construction works and has residual relevance today. This implies when the tool is appropriate, though it does not explicitly name alternatives or state when-not-to-use rules.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compras_listar_promptsARead-onlyIdempotentInspect
Lista os MCP Prompts disponíveis com nome, descrição e argumentos.
Tools de descoberta para clientes (como o Claude.ai web) que ainda não expõem UI para prompts. Em Claude Desktop / Cursor / MCP Inspector, prompts aparecem em UI dedicada — esta tool é um caminho alternativo, não substituto.
Use depois compras_obter_prompt(nome, argumentos) para renderizar
um prompt específico.
Retorno: { "total": int, "prompts": [ { "nome": str, "descricao": str, "tags": [str, ...], "argumentos": [ {"nome": str, "descricao": str | None, "obrigatorio": bool}, ... ] }, ... ] }
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint false, and the description adds useful behavioral context by clarifying that this is a discovery-only tool. There is no contradiction between the description and annotations.
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 concise and each sentence adds meaningful context: what is listed, when to use it, and how it relates to the sibling prompt-rendering tool. The return schema is included compactly and supports the stated list behavior.
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 the zero-parameter input and simple discovery purpose, the description is complete. It covers the output shape, the discovery role, and the next-step sibling tool, so an agent has enough context to invoke it 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?
This tool has zero parameters, so there is no parameter information to document. The description correctly avoids inventing parameters and instead points to compras_obter_prompt for the follow-up call that does require arguments.
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 clearly states that the tool lists available MCP prompts with name, description, and arguments. It also distinguishes itself from compras_obter_prompt by explicitly framing this as a discovery step.
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 clearly indicates when to use this tool: for clients that do not expose a prompts UI, and as an alternative path rather than a replacement. It also instructs the agent to follow up with compras_obter_prompt to render a specific prompt.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compras_listar_resourcesARead-onlyIdempotentInspect
Lista os MCP Resources disponíveis com URI, nome e mime-type.
Tools de descoberta para clientes que não expõem UI de attachment de resources (como o Claude.ai web). Em Claude Desktop / Cursor / MCP Inspector, resources aparecem em picker dedicado.
Resources contêm dados de referência estáticos (tabelas de domínio,
glossário, metadados do servidor). Use compras_obter_resource(uri)
para ler o conteúdo.
Retorno: { "total": int, "resources": [ {"uri": str, "nome": str, "descricao": str, "mime_type": str, "tags": [str,...]}, ... ] }
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already carry the safety profile (readOnlyHint=true, idempotentHint=true, destructiveHint=false), so the bar is lower. The description adds genuinely useful behavioral context beyond the annotations: resources contain static reference data (domain tables, glossary, server metadata), implying stable, non-volatile content that can be cached or trusted across calls. It also clarifies the tool's role as a meta/discovery operation and documents the return envelope.
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 the one-line purpose, followed by targeted usage context and a compact return-format example. Every section earns its place, though the JSON return block is slightly redundant given an output schema is present. Overall it is well-structured and efficiently sized for a discovery 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?
For a zero-parameter discovery tool with rich annotations and an output schema, the description is fully complete. It states the purpose, explains when to use it versus relying on client UI, characterizes the resource content, provides the exact return shape, and routes the agent to compras_obter_resource for reading content. Nothing needed to invoke the tool 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?
The tool has zero parameters (empty schema with 100% coverage), so the baseline of 4 applies — there is nothing for the description to document about inputs. The description correctly avoids inventing parameter guidance and instead focuses on what the resource list will contain, which is the relevant semantic information for a no-argument discovery call.
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 opens with a specific verb+resource statement — 'Lista os MCP Resources disponíveis com URI, nome e mime-type' — specifying both the operation and the exact fields returned. It clearly distinguishes itself from siblings by positioning itself as a discovery tool and explicitly naming compras_obter_resource as the counterpart for reading content, and compras_listar_prompts is implicitly differentiated as the prompt-listing sibling.
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 explicitly states when this tool is needed ('clientes que não expõem UI de attachment de resources (como o Claude.ai web)') and when it is unnecessary (Claude Desktop/Cursor/MCP Inspector have dedicated pickers). It also names the alternative for the next step — 'Use compras_obter_resource(uri) para ler o conteúdo' — giving the agent a clear decision path.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compras_montar_dossie_arpARead-onlyIdempotentInspect
Dossiê completo de uma ARP em uma chamada.
Composição: cabeçalho via /modulo-arp/1.1 (id PNCP) e — se numero_item
informado — saldo (4), adesões (5) e unidades participantes (3) em
paralelo. Os 3 últimos endpoints usam a chave composta
numeroAta + unidadeGerenciadora.
Os 3 IDs vêm naturalmente do retorno de compras_arp_listar ou
compras_arp_itens_listar (campos: numeroControlePncpAta,
numeroAta, unidadeGerenciadora, numeroItem). Cache 10 min.
Quando numero_controle_pncp_ata vem no formato de compra (sem
sufixo -NNNNNN), devolvemos diagnóstico explícito antes de bater
no upstream — caminho que retornava cabecalho: null silencioso.
| Name | Required | Description | Default |
|---|---|---|---|
| numero_ata | Yes | Número simples da ata (ex.: '00001/2024'). Usado nos endpoints de saldo, adesões e unidades participantes. | |
| numero_item | No | Número do item dentro da ata. Se informado, traz também saldo, adesões e unidades participantes daquele item. Se omitido, apenas o cabeçalho é consultado. | |
| unidade_gerenciadora | Yes | Código UASG da unidade gerenciadora da ata. | |
| numero_controle_pncp_ata | Yes | Identificador PNCP completo da **ata** (formato `cnpj14-1-sequencial/ano-NNNNNN`, com sufixo numerando a ata SRP dentro da compra). Ex.: `00394452000103-1-004729/2024-000006`. NÃO confundir com ID de compra (sem o sufixo). Retornado em `compras_arp_por_fim_vigencia` como `numeroControlePncpAta`. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover safety (readOnlyHint, idempotentHint, destructiveHint), so the bar for adding value is high. The description clears it: it discloses parallel execution of the three endpoints, a 10-minute cache affecting freshness, and a specific error-handling behavior (explicit diagnostic for compra-format IDs instead of the old silent 'cabecalho: null'). None of this is visible in the annotations.
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 short paragraphs in logical order: purpose, composition logic, ID provenance + cache, and edge-case handling. Every sentence carries distinct information — there is no filler, and the most decision-relevant constraint (conditional composition) is front-loaded next to the purpose statement.
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 aggregator tool with 4 parameters, conditional behavior, composite keys, and an existing output schema, the description covers everything needed to invoke it correctly: which endpoints feed it, which params drive which behavior, where the inputs come from, cache freshness, and the malformed-input diagnostic. Return format needs no explanation because an output schema exists.
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, but the description adds genuine cross-parameter meaning: it explains the composite key numeroAta + unidadeGerenciadora used by the three secondary endpoints, maps API response fields (numeroControlePncpAta, numeroAta, unidadeGerenciadora, numeroItem) to the parameters, and clarifies the conditional role of numero_item. It also disambiguates the ata vs. compra formats of numero_controle_pncp_ata beyond the schema example.
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 opens with 'Dossiê completo de uma ARP em uma chamada', a specific resource (complete ARP dossier) and implied verb (compose/assemble in one call). It then details the composition (cabeçalho, saldo, adesões, unidades participantes), which clearly differentiates it from sibling tools like compras_arp_consultar, compras_arp_saldo_item, compras_arp_adesoes_item, and compras_arp_unidades_item that each cover one piece.
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 gives clear workflow guidance: the 3 IDs come naturally from compras_arp_listar or compras_arp_itens_listar, and numero_item controls whether only the header or the full dossier is fetched ('Se omitido, apenas o cabeçalho é consultado'). It also warns about the compra-format input pitfall. However, it never explicitly says 'use this instead of calling the four endpoints separately' or names when a sibling is preferable, leaving that exclusion implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compras_obter_promptARead-onlyIdempotentInspect
Renderiza um MCP Prompt e devolve o texto pronto.
O texto retornado é o conteúdo da PromptMessage[0] — tipicamente um
roteiro que orienta o LLM a executar um fluxo usando as tools deste
servidor. Depois de obter o texto, o LLM normalmente segue as
instruções dele, chamando outras tools conforme indicado.
Retorno: { "nome": str, "texto": str, # conteúdo renderizado pronto para usar "argumentos_usados": dict, }
Se o prompt não existir ou faltar argumento obrigatório, retorna
_erro com diagnóstico em vez de propagar exception.
| Name | Required | Description | Default |
|---|---|---|---|
| nome | Yes | Nome do prompt a renderizar. Use `compras_listar_prompts` para descobrir nomes disponíveis. Exemplos: `analisar_contratacao_pncp`, `dossie_due_diligence_fornecedor`, `oportunidades_carona_arp`. | |
| argumentos | No | Mapa de argumentos exigidos pelo prompt. Os nomes e tipos vêm de `compras_listar_prompts`. Ex.: {"cnpj_orgao": "00394460000141", "ano": 2025, "sequencial": 12345}. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only/idempotent behavior, and the description adds meaningful behavior beyond them: it specifies the return shape (nome, texto, argumentos_usados), that texto is the PromptMessage[0] content, and that missing prompts or required arguments yield an _erro diagnostic instead of an exception. This gives the agent a clear expectation of both success and failure behavior.
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 compact, front-loaded with the core purpose, and every block earns its place: purpose, intended use, return contract, and error behavior. The JSON sample is minimal and illustrative.
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 2-parameter, read-only render tool, the description is complete: it explains why the tool exists, what the output means, how errors are reported, and the schema/annotations cover the remaining parameter and safety details.
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 schema already gives rich semantics for both parameters, including examples and how to discover prompt names. The description itself adds little beyond noting that missing required arguments are handled, so a baseline 3 is appropriate.
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 opening sentence uses a specific verb-resource pair ('Renderiza um MCP Prompt') and states the concrete outcome: returns ready-to-use text. The follow-up clarifies it returns the content of PromptMessage[0] as a script for executing other tools, which clearly separates it from the listing sibling com compras_listar_prompts.
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 explains when the tool fits: get a rendered prompt that guides the LLM through a flow using this server's tools before the LLM calls other tools. It provides clear context, though it does not explicitly state exclusions or name compras_listar_prompts as the prerequisite discovery step (that lives in the parameter schema).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compras_obter_resourceARead-onlyIdempotentInspect
Lê o conteúdo de um MCP Resource pela URI.
Retorna o conteúdo bruto (texto/JSON-string conforme o mime-type registrado) e os metadados do resource.
Retorno: { "uri": str, "nome": str, "mime_type": str, "conteudo": str, }
Se a URI não existir, retorna _erro em vez de propagar exception.
| Name | Required | Description | Default |
|---|---|---|---|
| uri | Yes | URI do resource. Use `compras_listar_resources` para descobrir URIs disponíveis. Exemplos: `compras://referencia/modalidades-pncp`, `compras://glossario/lei-14133`, `compras://meta/escopo`. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnly, idempotent, non-destructive), the description discloses meaningful behavior: raw content is returned according to mime-type, metadata is included, and nonexistent URIs yield `_erro` instead of an exception. This error-handling detail is especially valuable and goes beyond what annotations alone convey.
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 tightly structured: a one-sentence purpose, a brief note on return behavior, an illustrative JSON block, and the error case. Every sentence earns its place, and the key purpose is front-loaded. The format is easy to scan and parse.
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 single-parameter tool with a rich schema, clear annotations, and an output schema, the description covers everything needed to call it correctly: purpose, return shape, mime-type behavior, and error semantics. The only remaining context—discovering URIs—is already handled by the parameter schema. Nothing essential 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%, and the schema's parameter description already explains how to discover and format URIs with concrete examples. The tool description itself does not add further parameter-level detail, which is acceptable given the schema's richness. Baseline 3 is appropriate because the description does not need to compensate for schema gaps.
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 opens with a specific verb and resource: 'Lê o conteúdo de um MCP Resource pela URI.' This clearly distinguishes it from sibling tools that list resources or fetch prompts. It also states what is returned (raw content and metadata), leaving no ambiguity about the tool's role.
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 makes the tool's context clear—reading a resource by URI—but does not explicitly contrast it with alternatives in the description itself. However, the parameter schema provides direct guidance: 'Use `compras_listar_resources` para descobrir URIs disponíveis,' which tells the agent how to discover valid URIs. This is clear context with a practical prerequisite, though not a full when/when-not comparison.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compras_orgao_consultarARead-onlyIdempotentInspect
Consulta um órgão específico pelo código.
Devolve nome, sigla, CNPJ, esfera, poder e quantitativos. Cache 24h.
| Name | Required | Description | Default |
|---|---|---|---|
| codigo_orgao | Yes | Código numérico do órgão (4-6 dígitos). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
As anotações já cobrem readOnly, idempotente e não destrutivo. A descrição adiciona o comportamento de cache de 24h, o que é um detalhe comportamental relevante. Não há contradição.
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?
Duas frases curtas e diretas, sem redundância. Toda a informação essencial está presente sem rodeios.
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?
Para uma consulta simples com um parâmetro e saída prevista (mencionada na descrição), a informação é suficiente. O cache é mencionado, e a existência de output schema (indicado no contexto) dispensa detalhamento adicional do retorno.
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?
O único parâmetro (codigo_orgao) é descrito no schema com a faixa '4-6 dígitos', dando semântica clara. A descrição principal não adiciona muito, mas o schema já é suficiente.
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?
O propósito é claro e específico: consultar um órgão pelo código, com lista do que é devolvido (nome, sigla, CNPJ, esfera, poder e quantitativos). Diferencia-se de outras ferramentas pelo foco em consulta pontual por código, não listagem.
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?
A descrição indica implicitamente quando usar (quando se tem o código do órgão e se quer detalhes), mas não explicita alternativas ou quando não usar. Não há menção a ferramentas similares como compras_orgao_listar.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compras_orgao_listarARead-onlyIdempotentInspect
Lista órgãos cadastrados no Compras.gov.br.
Endpoint Dados Abertos /modulo-uasg/2_consultarOrgao. Inclui órgãos
do SISG (Sistema de Serviços Gerais), com código numérico, nome,
esfera, poder e CNPJ.
✅ Restaurada em 2026-08-05: faltava o parâmetro obrigatório
statusOrgao — mesma causa do 404 em compras_uasg_listar.
nome, esfera e poder são aplicados aqui, client-side. Nenhum
dos três consta do contrato desta rota, e esta API ignora chave
desconhecida em silêncio — mandá-los devolvia os ~11,9 mil órgãos
ativos com cara de resultado filtrado (reconfirmado em 2026-09-07 com
parâmetro de controle). Desde 2026-09-07 eles não são mais enviados: o
recorte é feito sobre a página trazida, e o payload traz
_filtro_client_side dizendo quantos sobraram. Consequência prática:
o filtro só enxerga a página atual, então varra as páginas ou use
codigo_orgao em compras_orgao_consultar quando souber o código.
Cache 24h.
| Name | Required | Description | Default |
|---|---|---|---|
| nome | No | Filtro textual pelo nome do órgão (match parcial). | |
| poder | No | Poder: 'E' (Executivo), 'L' (Legislativo), 'J' (Judiciário). | |
| esfera | No | Esfera administrativa: 'F' (federal), 'E' (estadual), 'M' (municipal). Dados Abertos cobre majoritariamente federal. | |
| pagina | No | Página de resultados (1-based). Padrão 1. | |
| tamanho_pagina | No | Quantidade de registros por página. Padrão 50, máximo 500. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description reveals behavior far beyond the annotations: the three filter parameters are not sent to the API, the API silently ignores unknown keys, filters apply only to the fetched page, the payload includes `_filtro_client_side`, and results are cached for 24h. These are non-obvious, decision-relevant behaviors that an agent could not infer from readOnlyHint/idempotentHint alone.
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 well organized and front-loaded with the core purpose, followed by the essential caveats. Some maintenance-history details, such as the exact restoration date and "reconfirmado em 2026-09-07", are not needed for correct invocation and could be trimmed, but the overall structure keeps the critical warning visible.
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?
The description covers the endpoint, the data scope, the internal statusOrgao fix, the client-side filter limitation, the pagination consequence, the alternative tool, and the cache policy. Since an output schema exists, return-value details are not needed from the description. Nothing essential for selecting or invoking the tool 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?
Although the schema already describes each parameter, the description adds crucial semantic corrections: nome, esfera, and poder are applied client-side and are not part of the route contract. This changes how the agent should interpret those parameters and paginate results, which is exactly the kind of meaning the schema alone fails to convey.
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 opens with a specific verb and resource: "Lista órgãos cadastrados no Compras.gov.br" and names the exact open-data endpoint. It also lists the returned fields (código, nome, esfera, poder, CNPJ), and later distinguishes itself from compras_orgao_consultar by directing agents there when a specific code is known.
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 gives concrete usage direction: because nome/esfera/poder filters are client-side and only affect the current page, the agent should "varra as páginas ou use codigo_orgao em compras_orgao_consultar quando souber o código." This is an explicit alternative, though it does not broadly enumerate when not to use this tool versus other list-oriented siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compras_perfil_fornecedor_completoARead-onlyIdempotentInspect
Perfil consolidado do fornecedor (cadastro + Receita + sanções + impedimentos).
Composição em paralelo:
cadastro: Dados Abertos
/modulo-fornecedor/1_consultarFornecedorpelo CNPJ (razão social, CNAE, porte, natureza jurídica);receita_federal: BrasilAPI / MinhaReceita — QSA, capital social, atividades secundárias, data de início, situação cadastral (RF). Provider configurável via
CNPJ_PROVIDER(defaultbrasilapi);sanções: Portal da Transparência (CEIS+CNEP+CEPIM) pelo CNPJ;
impedimentos Comprasnet:
/api/comprasnet/compras/impedimentos.
Não inclui lista de contratos porque os endpoints upstream
/modulo-contratos/1 (Dados Abertos) e /v1/contratos (PNCP) exigem
codigoOrgao como filtro obrigatório — não é possível listar contratos
de um fornecedor sem saber em qual órgão ele tem contrato. Se você já
souber o órgão, use compras_contratos_listar(codigo_orgao=X, ni_fornecedor=Y, ...).
Sanções dependem de TRANSPARENCIA_API_KEY — se não configurada ou se
o WAF da CGU bloquear, o bloco retorna aviso e o restante segue.
Cache 10 min.
| Name | Required | Description | Default |
|---|---|---|---|
| cnpj | Yes | CNPJ do fornecedor (14 dígitos, com ou sem pontuação). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/idempotent annotations, the description discloses parallel composition, provider configurability via CNPJ_PROVIDER, dependency on TRANSPARENCIA_API_KEY, partial failure behavior if the CGU WAF blocks, and a 10-minute cache. This gives the agent realistic expectations for operation.
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 well-structured with a clear summary up front, bulleted composition details, and explicit caveats. The length is justified by the tool's composite nature, and every sentence adds useful information without fluff.
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 the composite nature of the tool and the presence of an output schema, the description covers all essential operational details: input, upstream sources, exclusions, configuration, failure behavior, and caching. Nothing critical is missing for correct invocation.
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 input schema already documents the sole parameter cnpj with type, length, and formatting guidance, so schema coverage is 100%. The description reinforces that CNPJ is used across all sub-blocks but does not add substantive new meaning beyond the schema.
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 clearly defines the tool as a consolidated supplier profile composed of cadastro, Receita Federal, sanctions, and impedimentos. It names the specific upstream endpoints and data fields, and distinguishes itself from contract-listing tools by explicitly stating contracts are not included.
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 explains when to use this tool (consolidated supplier profile) and explicitly states when not to use it: if the user already knows the órgão and needs contracts, use compras_contratos_listar. It does not enumerate all alternative sibling tools, but provides clear routing for the most likely confusion.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compras_pesquisar_preco_materialARead-onlyIdempotentInspect
Pesquisa preços praticados em compras de material (CATMAT) pelo governo.
Endpoint Dados Abertos: /modulo-pesquisa-preco/1_consultarMaterial.
Para visão consolidada estatística (média/mediana no padrão IN 65/2021),
use a tool composta compras_pesquisar_precos_para_etp.
Cada item da resposta traz precoUnitario, quantidade, dataCompra,
niFornecedor/nomeFornecedor e a UASG compradora — é esta a tool
que devolve valor unitário para material. A compras_detalhar_preco_material
NÃO devolve preço (ver a docstring dela).
⚠️ Quebra upstream corrigida em 2026-08-05: entre ~2026-07 e
2026-08-05 esta tool respondia "Recurso nao encontrado" (HTTP 404). A
SEGES trocou a assinatura de query da rota sem versionar: o parâmetro
codigoItemCatalogo foi substituído pelo par tipo (enum
codigoItemCatalogo | codigoPdm) + codigo. Como a API responde
404 — e não 400 — a parâmetros obrigatórios ausentes, a quebra se
disfarçou de "rota removida". A rota nunca saiu do swagger oficial.
Corrigido na v0.3.13; a assinatura de compras_pesquisar_preco_servico
(rota 3) não mudou.
Se voltar a devolver 404, a tool não levanta exception: devolve
_erro_upstream com diagnóstico e alternativas.
Cache 10 min.
| Name | Required | Description | Default |
|---|---|---|---|
| uf | No | Sigla da UF (ex.: 'DF'). Filtra compras realizadas pelo órgão da UF. | |
| pagina | No | Página (1-based). | |
| data_fim | No | Data final da compra (YYYY-MM-DD). Quando omitida, a API usa a data atual. | |
| codigo_uasg | No | Código da UASG compradora (filtro mais específico ainda). | |
| data_inicio | No | Data inicial da compra (YYYY-MM-DD). Quando omitida, a API usa o início do ano corrente. | |
| tamanho_pagina | No | Registros por página. | |
| codigo_municipio | No | Código IBGE do município (7 dígitos). Filtro mais fino que UF. | |
| codigo_item_catalogo | Yes | Código CATMAT do material. Inteiro 4-8 dígitos. Ex.: 460789. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/idempotent annotations, the description discloses the upstream 404 incident, the corrected query signature, the _erro_upstream fallback instead of exceptions, and the 10-minute cache. It also notes useful response fields such as precoUnitario, quantidade, dataCompra, fornecedor, and UASG. This is substantial behavioral context beyond annotations.
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, endpoint, and alternatives before the changelog. The upstream break history is detailed and slightly longer than strictly necessary, but it is relevant to correct invocation and troubleshooting. Overall it is structured and every paragraph serves a purpose.
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 the output schema exists and annotations cover safety, the description is complete for an agent to invoke the tool correctly. It covers the endpoint, required CATMAT code, sibling alternatives, expected response fields, cache behavior, and the known 404 failure mode with its fallback diagnostics.
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 input schema already covers 100% of the parameters with clear descriptions, so the baseline is 3. The description adds route-level context about codigoItemCatalogo and the API's 404 behavior for missing required parameters, but it does not materially enrich the meaning of the individual parameters beyond the schema.
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 and resource: it searches prices practiced in government material purchases (CATMAT), and explicitly identifies itself as the tool that returns unit prices for materials. It also distinguishes itself from compras_detalhar_preco_material, which it says does not return prices.
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 gives explicit routing guidance: use compras_pesquisar_precos_para_etp for consolidated statistical views (IN 65/2021 averages/medians), and warns that compras_detalhar_preco_material does not return price. This clearly tells an agent when this tool should and should not be chosen.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compras_pesquisar_preco_servicoARead-onlyIdempotentInspect
Pesquisa preços praticados em compras de serviço (CATSER).
Endpoint: /modulo-pesquisa-preco/3_consultarServico. Para visão
consolidada (mediana, média, desvio no padrão IN 65/2021), use a tool
composta compras_pesquisar_precos_para_etp com tipo='servico'.
| Name | Required | Description | Default |
|---|---|---|---|
| uf | No | Sigla da UF. | |
| pagina | No | Página (1-based). | |
| data_fim | No | Data final (YYYY-MM-DD). | |
| codigo_uasg | No | Código UASG. | |
| data_inicio | No | Data inicial (YYYY-MM-DD). | |
| tamanho_pagina | No | Registros por página. | |
| codigo_municipio | No | Código IBGE do município. | |
| codigo_item_catalogo | Yes | Código CATSER do serviço. Inteiro 4-6 dígitos. Ex.: 27332. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, openWorld, idempotent, and non-destructive behavior. The description adds meaningful context beyond those: it identifies this as a direct/raw price search rather than a consolidated statistical view, and gives the concrete endpoint. No contradiction with annotations exists.
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 two sentences with no filler. The primary purpose is stated first, followed by the endpoint and the alternative for consolidated results. Every 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?
With 100% parameter documentation, rich annotations, and an output schema, the description needs to carry less burden. It provides the essential routing context and endpoint. Slightly more detail about what distinguishes this from compras_detalhar_preco_servico would make it fully complete, 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 description coverage is 100%, so the schema documents all parameters including codigo_item_catalogo with format and example. The description adds no extra parameter-level semantics, so the baseline score of 3 is appropriate.
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 and resource: it searches practiced prices for service purchases (CATSER), which clearly distinguishes it from material price search and other siblings. It also names the endpoint and the composed alternative, so the tool's role is unambiguous.
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 explicitly tells the agent when to use a different tool instead: for a consolidated view (median, mean, deviation per IN 65/2021), use compras_pesquisar_precos_para_etp with tipo='servico'. This gives clear routing guidance beyond what the schema provides.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compras_pesquisar_precos_para_etpARead-onlyIdempotentInspect
Agrega preços praticados aplicando metodologia IN SEGES/ME 65/2021.
Composição: percorre compras_pesquisar_preco_material ou _servico
em até max_paginas, agrega os valores unitários e calcula:
mediana, média, desvio padrão, mínimo, máximo, quartis (Q1, Q3) e
descarte de outliers por IQR (1.5×IQR — Tukey).
Saída pronta para colagem em ETP: lista detalhada + sumário estatístico
amostra recomendada (sem outliers). Cache 10 min.
| Name | Required | Description | Default |
|---|---|---|---|
| uf | No | Filtro opcional por UF (ex.: 'DF'). | |
| tipo | Yes | Tipo do item: 'material' (consulta CATMAT) ou 'servico' (consulta CATSER). | |
| max_paginas | No | Número máximo de páginas a percorrer ao agregar. Cada página tem 500 registros. Default 5 (até 2500 contratações). Aumente para amostras maiores. | |
| periodo_meses | No | Janela de pesquisa em meses contados de hoje para trás. Default 12 (prazo recomendado pela IN SEGES/ME 65/2021 art. 5). | |
| codigo_item_catalogo | Yes | Código CATMAT (material) ou CATSER (serviço). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and idempotentHint=true, so the safety profile is covered; the description adds valuable behavioral detail beyond that: cache 10 min (results may be stale), traversal bounded by max_paginas, and data-transforming behavior — outlier discarding via 1.5×IQR Tukey and calculation of quartiles/standard deviation. This tells the agent the tool does not merely return raw prices but transforms them. No contradiction with annotations.
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, purposeful sentences: purpose+methodology, composition, statistical calculations, and output+caching. No filler; the IQR detail and cache note each carry decision-relevant information an agent needs before invoking. The most important scoping fact (aggregation for ETP under IN 65/2021) is front-loaded.
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 moderately complex aggregation tool, nothing essential is missing: purpose, underlying data sources, statistical behavior, output shape (detailed list + statistical summary + recommended sample without outliers), caching, and parameter semantics (covered by the 100%-coverage schema). An output schema exists so return values needn't be spelled out further.
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 schema itself is rich (max_paginas explains 'Cada página tem 500 registros', periodo_meses cites IN SEGES/ME 65/2021 art. 5, tipo maps to CATMAT/CATSER). The description adds only a light tie-in by referencing max_paginas in the composition flow. With the schema already doing the heavy lifting, baseline 3 is appropriate.
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 names a specific verb+resource: 'Agrega preços praticados aplicando metodologia IN SEGES/ME 65/2021' — aggregating practiced prices under a named legal methodology. It further differentiates from sibling raw-search tools by explicitly naming its components (`compras_pesquisar_preco_material` or `_servico`) and describing the statistical aggregation output, making clear it is the analysis layer on top of those primitives.
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 gives clear use context: it composes the raw price-search siblings into an aggregate, and states the output is 'pronta para colagem em ETP' (ready for ETP documents), signaling when an agent should choose aggregation over raw search. However, it never explicitly states when NOT to use it or names a competing aggregate sibling (e.g., compras_aggregate_contratacoes_por_periodo) as an alternative, leaving some selection inference to the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compras_pgc_agregacaoARead-onlyIdempotentInspect
Resumo agregado do PGC de um órgão num ano (totais por categoria).
Endpoint Dados Abertos /modulo-pgc/3_consultarPgcAgregacao. Retorna
contagens e valores totais por categoria/grupo, útil para diagnóstico
rápido do volume planejado pelo órgão.
Cache 1h.
| Name | Required | Description | Default |
|---|---|---|---|
| ano | Yes | Ano do PGC. | |
| pagina | No | Página de resultados (1-based). Padrão 1. | |
| codigo_orgao | Yes | Código do órgão (obrigatório nesta consulta — é a chave da agregação). | |
| tamanho_pagina | No | Quantidade de registros por página. Padrão 50, máximo 500. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, openWorldHint=true, and destructiveHint=false, covering the safety profile. The description adds real value beyond that: the 'Cache 1h' disclosure warns the agent that data may be up to an hour stale, plus explicit return semantics. No contradiction with annotations.
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 sentences, each earning its place: front-loaded purpose, output plus use case, and cache disclosure. No filler, no redundancy, and the key scoping constraint (órgão + ano) leads the text.
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?
Everything an agent needs to safely invoke this tool is present: all four parameters documented in the schema, the output schema covering the return shape, annotations carrying the full safety profile, and the description adding aggregation semantics, use case, endpoint reference, and cache-freshness caveat. There is no meaningful gap.
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% — ano, codigo_orgao, pagina, and tamanho_pagina all have descriptions with defaults and bounds (max 500), so the baseline is 3. The description marginally reinforces that codigo_orgao and ano are the aggregation keys ('de um órgão num ano') but adds no new format, constraint, or syntax beyond the schema.
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 opens with a specific verb+resource — 'Resumo agregado do PGC de um órgão num ano (totais por categoria)' — then specifies the output ('contagens e valores totais por categoria/grupo') and names the underlying Dados Abertos endpoint. The aggregation framing ('agregado', 'totais por categoria') inherently distinguishes it from list-style siblings like compras_pgc_listar and compras_pgc_listar_csv without needing to open their schemas.
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?
'útil para diagnóstico rápido do volume planejado pelo órgão' gives a clear, concrete selection context: quick volume diagnosis for an agency. However, it does not name alternatives or state when to prefer the list/CSV/catálogo siblings when row-level detail is needed, so exclusions remain implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compras_pgc_listarARead-onlyIdempotentInspect
Lista itens de PGC (Plano de Gestão de Contratações) do governo federal.
Endpoint Dados Abertos /modulo-pgc/1_consultarPgcDetalhe. Cada linha
representa um item planejado: descrição, quantidade, valor unitário
estimado, mês previsto de início e categoria de item.
Cache 1h.
| Name | Required | Description | Default |
|---|---|---|---|
| ano | Yes | Ano do PGC. Os PGCs do governo federal começam a aparecer a partir de 2020. | |
| pagina | No | Página (1-based). | |
| codigo_uasg | No | Código UASG (filtro mais específico que codigo_orgao). | |
| codigo_orgao | No | Código do órgão (filtra os PGCs desse órgão). | |
| tamanho_pagina | No | Registros por página. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint=false, covering the safety profile. The description adds useful behavioral context beyond the annotations: the endpoint, the one-row-per-item semantics, the listed example fields, and the 1-hour cache. There is no contradiction with the annotations.
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 compact and front-loaded: first the purpose, then the endpoint, then the row semantics, then the cache behavior. Every sentence adds value and there is no redundant or filler content.
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 the full schema coverage, the read-only/idempotent annotations, and the presence of an output schema, the description provides enough context for correct invocation. It explains the data source, item-level granularity, and cache behavior. It could be more complete by naming sibling tools for comparison, but that is not required to call the tool 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 description coverage is 100% and each parameter already has a clear description, including the ano minimum of 2020 and filter semantics for codigo_uasg and codigo_orgao. The tool description itself adds no parameter-specific meaning beyond listing output fields. With the schema carrying the load, a baseline 3 is appropriate.
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 clearly states the verb and resource: 'Lista itens de PGC' and identifies the federal government context. It also gives the endpoint and explains that each row represents a planned item, which makes the item-level listing purpose evident. It does not explicitly differentiate from sibling tools like compras_pgc_agregacao or compras_pgc_listar_csv, but its scope is still clear.
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 gives no explicit guidance on when to use this tool versus alternatives such as compras_pgc_agregacao, compras_pgc_listar_csv, or compras_pgc_por_catalogo. The phrase 'Cada linha representa um item planejado' implies item-level detail, but no when-to-use or when-not-to-use conditions are stated. This leaves selection among PGC tools mostly to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compras_pgc_listar_csvARead-onlyIdempotentInspect
Versão CSV de compras_pgc_listar (mesmo dataset, formato planilha).
Endpoint /modulo-pgc/1.1_consultarPgcDetalhe_CSV. Útil para colar no
ETP ou planilhar localmente. Retorna o CSV no campo csv da resposta.
| Name | Required | Description | Default |
|---|---|---|---|
| ano | Yes | Ano do PGC. Os PGCs do governo federal começam a aparecer a partir de 2020. | |
| codigo_uasg | No | Código UASG (filtro mais específico que codigo_orgao). | |
| codigo_orgao | No | Código do órgão (filtra os PGCs desse órgão). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds meaningful behavioral context beyond annotations: it reveals the response structure (CSV inside the `csv` field), the endpoint path, and that the dataset is identical to `compras_pgc_listar`. This is useful but stops short of detailing encoding, delimiters, or row limits.
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 three short sentences with no filler. The most important fact (CSV version of `compras_pgc_listar`) is front-loaded, followed by the endpoint, use case, and return field. Every 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 a simple read-only export tool with only one required parameter and an output schema present, the description is complete. It identifies the sibling relationship, endpoint, practical use, and where the CSV appears in the response, so an agent has everything needed to invoke it 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 description coverage is 100%, so the input schema already fully documents `ano`, `codigo_uasg`, and `codigo_orgao`. The description does not add parameter-level meaning beyond noting the tool shares the same dataset as `compras_pgc_listar`, which implies shared filters but does not elaborate. Baseline 3 is appropriate.
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 opens with 'Versão CSV de `compras_pgc_listar`', which immediately identifies the tool as the CSV/spreadsheet variant of a specific sibling and states the resource and format. It also names the endpoint and clarifies that it returns the CSV in the `csv` field, making the tool's purpose unambiguous.
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 states it is useful for pasting into ETP or working locally in a spreadsheet, which gives a clear context for when to choose this CSV variant over the JSON version. It does not explicitly list when not to use it, but the use-case framing is sufficient for an agent to make a good choice.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compras_pgc_por_catalogoARead-onlyIdempotentInspect
Lista todos os PGCs que incluem determinado item de catálogo (CATMAT/CATSER).
Endpoint Dados Abertos /modulo-pgc/2_consultarPgcDetalheCatalogo.
Útil para responder: "Quais órgãos planejaram comprar esse item este ano?
Em que quantidade?". Insumo para ETP e benchmarking de quantitativos.
Corrigida em 2026-09-07. A tool mandava tipo=M/tipo=S e o enum
upstream é [Material, Servico] — toda chamada devolvia HTTP 500
("Failed to convert ... EnumPgcDetalheCatalogo ... for value [M]"). A
interface M/S foi mantida e a tradução passou a ser feita aqui.
Mesma classe de defeito do tipo=C das tools de contratações.
Cache 1h.
| Name | Required | Description | Default |
|---|---|---|---|
| ano | Yes | Ano do PCA/PGC. | |
| tipo | Yes | 'M' para CATMAT (material) ou 'S' para CATSER (serviço). | |
| pagina | No | Página (1-based). | |
| codigo_item | Yes | Código do item no catálogo (CATMAT se tipo='M', CATSER se tipo='S'). | |
| tamanho_pagina | No | Registros por página. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly and idempotent behavior, and the description adds a 1-hour cache, the upstream endpoint, and a detailed correction note about the M/S to Material/Servico translation that explains why the API works despite the upstream enum. This is meaningful behavioral context beyond what annotations provide.
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 the core purpose, followed by endpoint, use cases, the bug-fix note, and caching. It is slightly longer than strictly necessary, but every section contributes useful context and the structure is clear.
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 an output schema present and annotations covering the safety profile, the description covers purpose, endpoint, typical usage, a parameter edge case, and caching. No major invocation-relevant information appears to be missing, apart from explicit sibling differentiation.
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 all parameters. The description reinforces the CATMAT/CATSER mapping and explains the tipo M/S translation quirk, but it does not add new formats, defaults, or syntax beyond what the schema provides.
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 opens with a specific verb and resource: 'Lista todos os PGCs que incluem determinado item de catálogo (CATMAT/CATSER)', clearly identifying this as a filtered list lookup by catalog item. It also names the exact upstream endpoint, reinforcing the scope. It does not explicitly name a sibling, but the resource and filter are enough to distinguish it from other PGC 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?
The description states concrete use cases: answering which agencies planned to buy a given item this year and in what quantity, plus input to ETP and quantitative benchmarking. This is clear and actionable, though it does not explicitly say when not to use it or name alternatives like compras_pgc_listar/pras_pgc_agregacao.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compras_pncp_ata_arquivosARead-onlyIdempotentInspect
Lista os ARQUIVOS de uma Ata de Registro de Preços no PNCP (ata + aditivos).
Endpoint /v1/orgaos/{cnpj}/compras/{anoCompra}/{sequencialCompra}/atas/{sequencialAta}/arquivos
da API pública de arquivos do PNCP (/api/pncp, sem chave).
Aditivos de reequilíbrio/prorrogação aparecem como documentos adicionais
do tipo Ata de Registro de Preços — diferencie por titulo e
dataPublicacaoPncp. Download: GET simples na url de cada item.
Cache 15 min.
| Name | Required | Description | Default |
|---|---|---|---|
| cnpj | Yes | CNPJ do órgão (14 dígitos, com ou sem pontuação). | |
| ano_compra | Yes | Ano da COMPRA que originou a ata. | |
| sequencial_ata | Yes | Sequencial da ATA dentro da compra (1-based). É o sufixo numérico de `numeroControlePncpAta` (ex.: `...-000004/2024` → 4). | |
| sequencial_compra | Yes | Sequencial da compra, SEM zeros à esquerda. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/idempotent annotations, the description discloses useful behaviors: the endpoint is public with no API key, results are cached for 15 minutes, aditivos appear as additional 'Ata de Registro de Preços' documents that must be differentiated by titulo/dataPublicacaoPncp, and downloads use a simple GET on the url. This materially helps the agent interpret results.
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 compact: purpose, endpoint, behavioral caveat, download note, and cache policy are each one sentence. It is front-loaded with the purpose and every sentence carries relevant 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 all four required parameters fully documented in the schema, a readOnly/idempotent annotation profile, and an output schema available, the description covers the remaining operational context (auth, cache, aditivos, download mechanism). Nothing essential for calling the tool 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?
Input schema descriptions already cover 100% of the parameters, so the description is not required to compensate. The endpoint path template reiterates the parameter roles but adds no new semantic detail beyond the schema.
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 opening sentence states the exact operation: 'Lista os ARQUIVOS de uma Ata de Registro de Preços no PNCP (ata + aditivos).' This is a specific verb+resource and distinguishes it from sibling tools that list atas themselves (e.g., compras_pncp_atas_listar) or list contract files.
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 makes clear this is the tool for retrieving files from a specific ata and that amendments appear as additional documents, with the endpoint scoped to a given ata identifier. It does not explicitly name alternative tools or state when not to use it, but the context is clear enough for selection among the siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compras_pncp_atas_listarARead-onlyIdempotentInspect
Lista atas registradas no PNCP no período (federal + estadual + municipal).
Endpoint PNCP /v1/atas. Permite encontrar atas de qualquer ente da
federação — mais amplo que Dados Abertos (só federal SISG).
Cache 15 min.
| Name | Required | Description | Default |
|---|---|---|---|
| pagina | No | Página (1-based). | |
| cnpj_orgao | No | CNPJ do órgão (14 dígitos). | |
| data_final | Yes | Data final (YYYY-MM-DD). | |
| data_inicial | Yes | Data inicial (YYYY-MM-DD). | |
| tamanho_pagina | No | Registros por página. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, openWorld, and non-destructive behavior, so the description does not need to repeat those. It adds useful behavioral context beyond annotations: the 15-minute cache, the specific PNCP endpoint, and the cross-federation scope of the 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?
The description is compact and front-loaded: the core purpose is in the first sentence, followed by endpoint/scope context and cache behavior. Every sentence adds meaningful information with no redundancy or 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?
Given the presence of an output schema, comprehensive parameter descriptions in the input schema, and strong annotations, the description is complete enough for effective tool selection and invocation. It adds the essential operational details—endpoint, federation scope, and cache behavior—without needing to explain return values or parameter syntax.
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 all parameters clearly. The description only indirectly references the period parameters with 'no período' and provides no additional semantic detail about cnpj_orgao, pagina, or tamanho_pagina beyond what is already in the schema.
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 and resource: 'Lista atas registradas no PNCP no período' and identifies the exact endpoint PNCP /v1/atas. It also clearly scopes the tool to federal, estadual, and municipal atas, differentiating it from the narrower Dados Abertos federal-only SISG source.
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 gives clear context: use this tool to find atas from any federation entity within a period, and notes it is broader than Dados Abertos, which only covers federal SISG. It does not explicitly name sibling tools or state when not to use it, but the context is sufficient for most selection decisions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compras_pncp_contratacao_arquivosARead-onlyIdempotentInspect
Lista os ARQUIVOS anexos de uma contratação no PNCP (Edital, TR, ETP...).
Endpoint /v1/orgaos/{cnpj}/compras/{ano}/{sequencial}/arquivos da API
pública de arquivos do PNCP (host /api/pncp, sem chave — diferente de
/api/consulta, que exige chave-api-dadosabertos e não expõe anexos).
Cada item traz url (download direto do PDF/ZIP), sequencialDocumento,
titulo, tipoDocumentoNome (Edital, Termo de Referência, Projeto
Básico, Estudo Técnico Preliminar...). Atenção: o arquivo do Edital vem
frequentemente como ZIP (por vezes ZIP dentro de ZIP) contendo o TR.
Baixe com GET simples na url — não é necessário navegador.
Cache 15 min.
| Name | Required | Description | Default |
|---|---|---|---|
| ano | Yes | Ano da contratação (4 dígitos). | |
| cnpj | Yes | CNPJ do órgão (14 dígitos, com ou sem pontuação). | |
| sequencial | Yes | Sequencial da contratação, SEM zeros à esquerda (ex.: 2101, não 002101). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, openWorld; description adds concrete behavior: no browser needed, ZIP handling, cache 15 min, no side effects.
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?
Well structured, dense but no fluff; includes endpoint, contrast, item fields, download tip, cache.
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?
Contains enough context for a tool with 3 params and output schema – mentions output fields, URL structure, and download behavior; no missing critical info.
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 covers all three parameters with descriptions (ano, cnpj, sequencial) at 100%; description does not add additional parameter semantics beyond that, so baseline 3.
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 (ARQUIVOS anexos de uma contratação no PNCP). Clearly differentiates from /api/consulta by noting this endpoint is public without key and exposes anexos.
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 contrasts with /api/consulta (requires chave, no anexos), gives download instructions (GET simples na url), and notes cache. Provides clear when and how to use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compras_pncp_contratacao_item_resultadosARead-onlyIdempotentInspect
Lista resultados (vencedores) de um item específico de contratação no PNCP.
Endpoint /v1/orgaos/{cnpj}/compras/{ano}/{sequencial}/itens/{n}/resultados.
Cache 15 min.
| Name | Required | Description | Default |
|---|---|---|---|
| ano | Yes | Ano da contratação. | |
| cnpj | Yes | CNPJ do órgão. | |
| sequencial | Yes | Sequencial. | |
| numero_item | Yes | Número do item dentro da contratação. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is clear. The description adds the cache of 15 minutes and the exact endpoint, which are useful behavioral details, but it does not describe pagination, result limit, or potential error conditions. This is reasonable 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?
The description is very concise: one functional sentence and the endpoint for reference. It is front-loaded with the core purpose and includes the cache detail, which is valuable for an agent deciding whether to call it repeatedly. No wasted words.
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 the annotations (read-only, idempotent, open-world) and the 100% schema coverage, the description is largely complete for a simple list-by-item tool. The cache note helps the agent avoid unnecessary calls. It could mention pagination if the PNCP endpoint returns paginated results, but the lack of output schema detail and simple resource suggest limited gaps.
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 all four parameters (cnpj, ano, sequencial, numero_item) are documented in the schema. The description adds the endpoint path that reinforces the composite key but does not explain formats or meanings beyond the schema. Baseline 3 is appropriate.
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 clearly states the tool lists results (winners) for a specific item of a contract in PNCP, giving a specific verb ('Lista'), resource ('resultados de um item específico de contratação'), and the exact endpoint. This distinguishes it from related siblings like compras_pncp_contratacao_itens and compras_contratacoes_14133_resultados_listar.
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 the tool is for querying winners of a specific item, but does not explicitly state when to prefer this over alternatives, nor does it mention exclusions or fallback conditions. While the endpoint path makes the scope clear, no explicit guidance about matching sibling tools is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compras_pncp_contratacao_itensBRead-onlyIdempotentInspect
Lista itens de uma contratação no PNCP.
Endpoint /v1/orgaos/{cnpj}/compras/{ano}/{sequencial}/itens.
Cache 15 min.
| Name | Required | Description | Default |
|---|---|---|---|
| ano | Yes | Ano da contratação. | |
| cnpj | Yes | CNPJ do órgão. | |
| pagina | No | Página de resultados (1-based). Padrão 1. | |
| sequencial | Yes | Sequencial da contratação. | |
| tamanho_pagina | No | Quantidade de registros por página. Padrão 50, máximo 500. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile with readOnlyHint=true, idempotentHint=true, and destructiveHint=false. The description adds a useful behavioral fact — results are cached for 15 minutes — and the exact endpoint, but it does not disclose additional behavior such as rate limits or response quirks.
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 compact and front-loaded: the purpose appears first, followed by the endpoint and cache behavior. Every sentence carries useful information with no filler or repetition.
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 straightforward paginated list endpoint with an output schema and fully documented parameters, the description, annotations, and schema together provide enough information to invoke the tool correctly. It lacks usage differentiation from related tools, but that gap is more relevant to usage guidelines than operational completeness.
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%, and every parameter has a meaningful description, including defaults and maximum page size. The description adds no extra parameter-level detail beyond what the schema already provides, so the baseline 3 is appropriate.
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 clear action ('Lista itens de uma contratação') and identifies the resource type, along with the exact endpoint. It is unambiguous and sets the scope to items of a specific PNCP contract, though it does not explicitly differentiate itself from related 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?
The description gives no guidance on when to use this tool versus the many related contract/item endpoints such as compras_pncp_contratacao_item_resultados or compras_contratacoes_14133_itens_listar. It only states what the tool does and its endpoint, leaving the agent to infer suitability.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compras_pncp_contratacao_por_orgaoARead-onlyIdempotentInspect
Consulta uma contratação específica pelo CNPJ + ano + sequencial.
Endpoint /v1/orgaos/{cnpj}/compras/{ano}/{sequencial}. Devolve
cabeçalho completo da contratação.
Cache 15 min.
| Name | Required | Description | Default |
|---|---|---|---|
| ano | Yes | Ano da contratação (4 dígitos). | |
| cnpj | Yes | CNPJ do órgão (14 dígitos, com ou sem pontuação). | |
| sequencial | Yes | Sequencial da contratação dentro do órgão e ano. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish read-only, idempotent, non-destructive behavior; the description adds useful behavioral facts: the exact endpoint path, that it returns the complete header, and a 15-minute cache. This exceeds annotation coverage without contradicting it.
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 sentences: what it does, exact endpoint, return scope, and cache. No filler; key info front-loaded.
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 single-record lookup with a full output schema and read-only/idempotent annotations, the description is sufficient: identifiers, endpoint, return scope, and cache behavior are all present. Nothing an agent needs to invoke 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 covers all 3 parameters with per-field descriptions (CNPJ format, 4-digit year, sequential), so the description adds little beyond echoing the key components in the endpoint. Baseline of 3 is appropriate for 100% schema coverage.
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?
Description names a specific action ('Consulta'), a precise resource ('uma contratação específica'), and the identifying composite key (CNPJ + ano + sequencial). It also states the endpoint and that it returns the full header, which distinguishes it from sibling item/file endpoints.
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 phrase 'contratação específica' plus the exact key combination clearly signals exact-lookup usage rather than listing/searching, and the endpoint reinforces the context. It does not name alternative tools or exclusions, so it stops short of full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compras_pncp_contratacoes_atualizacaoARead-onlyIdempotentInspect
Lista contratações alteradas no período (PNCP).
Endpoint /v1/contratacoes/atualizacao. Útil para monitoramento:
descobrir editais que sofreram retificações/republicações. Aceita
filtro esfera client-side.
Cache 15 min.
| Name | Required | Description | Default |
|---|---|---|---|
| esfera | No | Filtro opcional de esfera federativa (`federal`, `estadual`, `municipal` ou `distrital`). Aplicado client-side sobre a página retornada — útil para recortar a lista, mas note que `_total_registros` continua refletindo o total **sem** filtro de esfera. | |
| pagina | No | Página (1-based). | |
| data_final | Yes | Data final de atualização (YYYY-MM-DD). | |
| data_inicial | Yes | Data inicial de atualização (YYYY-MM-DD). | |
| tamanho_pagina | No | Registros por página (PNCP mínimo 10). | |
| codigo_modalidade | Yes | Código da modalidade (obrigatório no PNCP). Códigos comuns: 1=Leilão Eletrônico, 4=Concorrência Eletrônica, 6=Pregão Eletrônico, 8=Dispensa, 9=Inexigibilidade, 13=Concurso. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds valuable behavioral details beyond the readOnlyHint/idempotentHint annotations: it notes the client-side esfera filter behavior, that _total_registros still reflects the unfiltered total, and that responses are cached for 15 minutes. This helps agents understand side effects and data semantics.
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 compact: three short, informative sentences with the core purpose and endpoint first, followed by the monitoring use case, filter caveat, and cache behavior. No waste.
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 the high schema coverage, presence of an output schema, and strong annotations, the description adds exactly the missing context: why to use this tool, the client-side filtering nuance, the cache, and the endpoint. The agent has enough to select and invoke it 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%, so the schema already documents every parameter thoroughly. The description mostly repeats the client-side esfera behavior found in the schema, adding no substantially new parameter guidance. Baseline 3 is appropriate.
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 clearly states the tool's function with a specific verb and resource: lists contracts changed in a period (PNCP), and immediately clarifies the use case of discovering notices that underwent retifications/republications. It distinguishes itself from sibling tools like compras_pncp_contratacoes_publicacao and compras_buscar_contratacoes_similares by focusing on updates over time.
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 gives clear context for when to use the tool: for monitoring changes and retifications to public notices. It does not explicitly name alternative tools or state when not to use it, but the monitoring use case is specific enough to guide tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compras_pncp_contratacoes_propostaARead-onlyIdempotentInspect
Lista contratações com prazo de proposta aberto no PNCP.
Endpoint /v1/contratacoes/proposta. Útil para mapear oportunidades
abertas para fornecedores ou para identificar contratações em curso
em órgãos similares. Filtro esfera opcional client-side.
Cache 15 min.
| Name | Required | Description | Default |
|---|---|---|---|
| uf | No | Sigla da UF. | |
| esfera | No | Filtro opcional de esfera federativa (`federal`, `estadual`, `municipal` ou `distrital`). Aplicado client-side sobre a página retornada — útil para recortar a lista, mas note que `_total_registros` continua refletindo o total **sem** filtro de esfera. | |
| pagina | No | Página (1-based). | |
| data_final | Yes | Data limite para propostas (YYYY-MM-DD). | |
| tamanho_pagina | No | Registros por página. | |
| codigo_modalidade | Yes | Código da modalidade (ver PNCPListarContratacoesInput). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint/idempotentHint annotations, the description adds meaningful behavioral details: the endpoint, the client-side nature of the `esfera` filter, the implication for `_total_registros`, and a 15-minute cache. These details help the agent understand data freshness and filtering semantics.
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 compact, front-loaded with the core function, and each sentence earns its place: purpose, endpoint, use cases, filter caveat, and cache. There is no redundant wording or 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?
For a read-only listing tool with an output schema, the description covers all essential context: what it lists, why it is useful, the optional filter behavior, and data freshness. Required parameters are already documented in the schema, so 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 description coverage is 100%, so the schema already documents every parameter, including the `esfera` client-side caveat. The description adds minimal parameter-specific meaning beyond that, which matches the baseline of 3 for fully covered schemas.
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 opens with a specific verb and resource: 'Lista contratações com prazo de proposta aberto no PNCP', and identifies the exact endpoint. The phrase 'prazo de proposta aberto' clearly differentiates this tool from sibling listing tools such as compras_pncp_contratacoes_publicacao or compras_pncp_contratacoes_atualizacao.
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 gives explicit use cases: mapping open opportunities for suppliers and identifying ongoing contracting in similar agencies. It does not name alternatives or state when not to use this tool, so it stops short of the top score, but the context is clear and actionable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compras_pncp_contratacoes_publicacaoARead-onlyIdempotentInspect
Lista contratações publicadas no PNCP no período.
Endpoint /v1/contratacoes/publicacao. Cobre todos os entes da
federação. Modalidades comuns: 6=Pregão Eletrônico, 8=Dispensa,
9=Inexigibilidade, 4=Concorrência Eletrônica.
O filtro esfera (federal/estadual/municipal/distrital) é aplicado
client-side sobre a página retornada. Janela máxima por consulta: ~30
dias. Cache 15 min.
| Name | Required | Description | Default |
|---|---|---|---|
| uf | No | Sigla da UF. | |
| esfera | No | Filtro opcional de esfera federativa (`federal`, `estadual`, `municipal` ou `distrital`). Aplicado client-side sobre a página retornada — útil para recortar a lista, mas note que `_total_registros` continua refletindo o total **sem** filtro de esfera. | |
| pagina | No | Página (1-based). | |
| cnpj_orgao | No | CNPJ do órgão (14 dígitos). | |
| data_final | Yes | Data final de publicação (YYYY-MM-DD). | |
| data_inicial | Yes | Data inicial de publicação (YYYY-MM-DD). | |
| tamanho_pagina | No | Registros por página (PNCP mínimo 10). | |
| codigo_modalidade | Yes | Código da modalidade (obrigatório no PNCP). Códigos comuns: 1=Leilão Eletrônico, 4=Concorrência Eletrônica, 6=Pregão Eletrônico, 8=Dispensa, 9=Inexigibilidade, 13=Concurso. | |
| codigo_municipio_ibge | No | Código IBGE do município (7 dígitos). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (read-only, open-world, idempotent), the description discloses key behavioral details: the `esfera` filter is applied client-side, there's a maximum 30-day query window, and results are cached for 15 minutes. These are meaningful operational nuances that an agent would need to know, and they do not contradict the annotations.
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 compact and well-structured: it leads with the main purpose, then gives the endpoint, scope, modality examples, a key behavioral caveat, and constraints. Every sentence adds relevant information without redundancy, and there is no fluff.
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 the presence of an output schema and a comprehensive input schema, the description covers the essential context: endpoint, scope, filter behavior, and operational limits. It does not need to repeat return-value details since an output schema exists, and it provides enough for an agent to decide whether to call this tool for a given date-range listing task.
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?
All 9 parameters have descriptions in the input schema (coverage 100%), so the baseline is 3. The tool description itself does not add significant new information about parameters beyond what the schema already provides; it only reiterates the modality codes and esfera behavior already present in the schema descriptions.
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 and resource: 'Lista contratações publicadas no PNCP no período' and identifies the exact endpoint (`/v1/contratacoes/publicacao`). It also includes scope details (all federal entities) and common modality codes, which helps distinguish it from similar listing tools. The client-side `esfera` filter is called out, further differentiating its behavior.
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 usage by stating the purpose (listing published contracts in a period) but does not explicitly mention when to prefer this tool over siblings like `compras_pncp_contratacoes_atualizacao` or `compras_contratacoes_14133_listar`. It provides operational constraints (max 30-day window, client-side esfera filter) but no direct alternatives or when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compras_pncp_contrato_por_orgaoBRead-onlyIdempotentInspect
Consulta um contrato específico no PNCP.
Endpoint /v1/orgaos/{cnpj}/contratos/{ano}/{sequencial}. Cache 15 min.
| Name | Required | Description | Default |
|---|---|---|---|
| ano | Yes | Ano do contrato. | |
| cnpj | Yes | CNPJ do órgão. | |
| sequencial | Yes | Sequencial do contrato. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare read-only, idempotent, and non-destructive behavior. The description adds the cache duration (15 minutes), which is a useful behavioral detail beyond the annotations and does not contradict them.
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 concise and to the point: a single functional sentence plus the endpoint and cache note. No unnecessary words or 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?
The tool is a simple lookup. The description specifies the endpoint and that it queries a specific contract, which is adequate given the simplicity and the presence of an output schema (indicated in context). It does not explicitly describe the response format, but that is not critical for this operation.
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?
All three parameters have descriptions in the schema (cnpj, ano, sequencial) with clear basic meanings. The description text does not add extra format details, but with 100% schema coverage the baseline is appropriate.
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 clearly states that it queries a specific contract in the PNCP, and the endpoint structure reinforces that. It distinguishes from list-like operations by using 'específico', but does not explicitly name 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?
The description provides no guidance on when to use this tool compared to alternatives. It does not mention conditions such as 'when you have a specific contract identifier' or contrast with the list endpoint.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compras_pncp_contratos_listarARead-onlyIdempotentInspect
Lista contratos publicados no PNCP no período.
Endpoint /v1/contratos. Cache 15 min.
| Name | Required | Description | Default |
|---|---|---|---|
| pagina | No | Página de resultados (1-based). Padrão 1. | |
| cnpj_orgao | No | CNPJ do órgão (14 dígitos). | |
| data_final | Yes | Data final (YYYY-MM-DD). | |
| data_inicial | Yes | Data inicial de publicação do contrato (YYYY-MM-DD). | |
| tamanho_pagina | No | Quantidade de registros por página. Padrão 50, máximo 500. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds a behavioral fact, 'Cache 15 min', which tells the agent results may be up to 15 minutes stale. It also names the endpoint and contradicts no annotation.
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 three short, information-dense segments: purpose first, then endpoint, then cache TTL. There is no filler, and each element earns its place in an easily scannable format.
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 an output schema present, rich annotations, and cache/endpoint stated, an agent can invoke the tool correctly. However, the description omits any guidance on when to use this listing versus siblings like compras_contratos_listar or compras_pncp_contrato_por_orgao, leaving tool selection partially underspecified. Given the large sibling set, this is a real but not critical gap.
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% and each parameter already has a description, including date formats, defaults, and max page size. The description's 'no período' only restates the role of data_inicial and data_final and adds no extra syntax, constraints, or examples. Baseline 3 is appropriate because the schema carries the 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?
Description opens with a clear action and object: 'Lista contratos publicados no PNCP no período.' It identifies the resource (contracts on PNCP) and a temporal filter. It does not explicitly differentiate from siblings such as compras_contratos_listar or compras_pncp_contrato_por_orgao, so not a 5.
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?
No guidance is given for when to choose this tool over the many contract-related siblings. The phrase 'no período' hints at the required date range, but there are no exclusions or alternative recommendations. An agent would have to infer selection from the tool name and endpoint.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compras_pncp_modalidadesARead-onlyIdempotentInspect
Cheat sheet local: códigos de modalidade de contratação do PNCP.
Tool local (não chama upstream). Fonte: tabela oficial PNCP (Lei 14.133).
ATENÇÃO — duas tabelas em circulação no ecossistema Compras:
codigoaqui (PNCP) é o usado em TODAS as toolscompras_pncp_*e emmodalidadeIdPncpno payload de retorno.O Dados Abertos / SIASG usa uma enumeração diferente em
compras_contratacoes_14133_listar(codigo_modalidade_dados_abertos): campoequivalente_dados_abertosabaixo, ou None se a modalidade não estiver disponível naquele endpoint.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes beyond the annotations by explicitly stating the tool is local and does not call upstream, which clarifies its behavior and performance characteristics. It also hints at the output structure by mentioning the `equivalente_dados_abertos` field, but does not fully describe the returned data; however, the read-only, idempotent, and non-destructive hints are adequately complemented.
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 concise and well-structured, using a title, a brief summary, and a bullet-pointed attention note to convey the key information about the two code tables. It avoids unnecessary detail while providing all essential context.
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?
The description provides complete context for a simple zero-parameter lookup tool: it explains the purpose, the source, the local behavior, and the relationship with other tools via the two-table warning. The output schema is available and the mention of the `equivalente_dados_abertos` field gives enough context for the expected result.
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 has no parameters, and the input schema is an empty object. Since there are no parameters to misinterpret, the description does not need to add any parameter semantics; the absence of parameters is clear and unambiguous.
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 clearly identifies the tool as a local cheat sheet for PNCP contract modality codes. It states the source (official PNCP table under Lei 14.133) and explicitly distinguishes this code list from the Dados Abertos/SIASG enum, leaving no ambiguity about its purpose.
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 provides concrete usage guidance by warning about the two different code tables: it specifies that the `codigo` here is used in all `compras_pncp_*` tools and in the `modalidadeIdPncp` payload, while the Dados Abertos endpoint requires a different enum. It also notes that the tool is local and does not call upstream, implying it is appropriate for fast reference without external calls.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compras_pncp_orgao_unidadesARead-onlyIdempotentInspect
Lista unidades administrativas de um órgão no PNCP.
Endpoint PNCP /v1/orgaos/{cnpj}/unidades. Útil para descobrir códigos
de unidade antes de filtrar contratações/contratos do órgão.
Cobre estados e municípios (não só federal). Cache 24h.
Tratamento de 404: nem todo CNPJ está indexado no PNCP. Em vez de
levantar exception, esta tool retorna _erro_upstream informativo
com lista de alternativas (mesmo padrão das tools compras_uasg_* /
compras_orgao_* quando o /modulo-uasg/* retorna 404).
| Name | Required | Description | Default |
|---|---|---|---|
| cnpj | Yes | CNPJ do órgão (14 dígitos, com ou sem pontuação). Exemplo: 00394460000141 (Presidência da República). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes beyond the annotations by detailing the error handling (returning `_erro_upstream` instead of raising an exception on 404) and mentioning the 24-hour cache. This provides important behavioral context that is not evident from the annotations alone.
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 concise and well-structured, with clear sections for the endpoint, usage, coverage, and error handling. It avoids unnecessary verbosity while covering essential details, though a slight reduction in redundancy could make it even tighter.
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 the simple parameter set and presence of an output schema, the description is complete. It explains the purpose, usage, coverage, caching, and error behavior, covering all aspects an agent would need to invoke the tool 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?
The schema already describes the single parameter, and the description adds value by specifying the exact format (14 digits, with or without punctuation) and providing a concrete example. This enhances understanding beyond the basic schema.
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 clearly states the tool's function: listing administrative units of an agency in PNCP. It includes the specific endpoint and explains its utility for discovering unit codes before filtering contracts, which distinguishes it from sibling tools that focus on other aspects.
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 indicates when to use the tool ('Útil para descobrir códigos de unidade antes de filtrar contratações/contratos') and explains the 404 behavior, referencing a pattern shared with other tools. However, it does not explicitly contrast with alternative tools, though the context is fairly clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compras_pncp_pca_atualizacaoARead-onlyIdempotentInspect
Lista PCAs atualizados num período (PNCP).
Endpoint PNCP /v1/pca/atualizacao. Útil para monitoramento: descobrir
quais órgãos revisaram seu PCA recentemente.
Cache 1h.
| Name | Required | Description | Default |
|---|---|---|---|
| pagina | No | Página (1-based). | |
| data_final | Yes | Data final do período (YYYY-MM-DD). Janela máxima ~30 dias. | |
| data_inicial | Yes | Data inicial do período de atualização (YYYY-MM-DD). | |
| tamanho_pagina | No | Registros por página. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false. The description adds a concrete behavioral fact, 'Cache 1h', which helps an agent reason about data freshness. Given the rich annotation coverage, this extra context justifies a 4.
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 sentences front-load the core behavior, then add the endpoint, intended use case, and cache behavior. There is no filler, and nothing redundantly restates the schema or annotations.
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 read-only listing tool, the description covers what it does, the monitoring scenario, the relevant endpoint, and cache freshness. The complete schema coverage, rich annotations, and output schema cover the remaining invocation details.
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 input schema already documents all parameters, formats, defaults, and the ~30-day window. The description adds no parameter-specific meaning beyond what the schema provides, so the baseline of 3 is appropriate.
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 opens with a specific verb+resource: 'Lista PCAs atualizados num período' and reinforces this with the endpoint and the monitoring use case. This clearly distinguishes it from sibling PCA tools like compras_pncp_pca_listar, which focus on listing PCAs rather than recently updated ones.
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 explicitly states when the tool is useful: 'Útil para monitoramento: descobrir quais órgãos revisaram seu PCA recentemente.' It gives clear usage context but does not name alternative tools or exclusion conditions, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compras_pncp_pca_listarARead-onlyIdempotentInspect
Lista PCAs (Planos Anuais de Contratações) no PNCP.
Endpoint PNCP /v1/pca/. Diferente do PGC, o PCA da Lei 14.133 cobre
federais + estaduais + municipais. Filtra por categoria do item
(codigo_classificacao_superior é obrigatório no upstream).
Cache 1h.
| Name | Required | Description | Default |
|---|---|---|---|
| ano | Yes | Ano do PCA (Lei 14.133). | |
| pagina | No | Página (1-based). | |
| cnpj_orgao | No | CNPJ do órgão (filtra PCAs desse órgão; 14 dígitos). | |
| tamanho_pagina | No | Registros por página. | |
| codigo_classificacao_superior | Yes | Código da classificação superior do item no catálogo. Obrigatório no endpoint PNCP. Para CATMAT use o código do grupo; para CATSER use o código da seção. Veja `compras_catmat_listar_grupos` ou `compras_catser_listar_secoes`. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, openWorld, and non-destructive behavior. The description adds useful context beyond that: the upstream endpoint path, the mandatory upstream filter, the 1-hour cache, and the fact that it filters by item category.
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, information-dense sentences. The main action is front-loaded, and each sentence adds distinct value: scope, distinction from PGC, required filter, and cache behavior.
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 read-only parametrized list endpoint with an output schema, the description is nearly complete: endpoint, scope, required filter, cache, and PGC contrast are all covered. The only gap is explicit navigation among sibling PCA tools, but the schema and annotations carry much of the remaining burden.
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 fully documents all five parameters, including the CATMAT/CATSER code nuance. The description adds no significant parameter-level meaning beyond reaffirming that codigo_classificacao_superior is required upstream.
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 opens with a specific verb and resource: 'Lista PCAs ... no PNCP', and immediately distinguishes the tool from PGC by legal scope (federais + estaduais + municipais). It also names the exact endpoint, making the operation unambiguous and easy to differentiate from the PGC 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 gives clear context for when to use this tool over PGC: for Lei 14.133 PCAs covering federal, state, and municipal bodies. It also flags the upstream obligation of codigo_classificacao_superior. It does not explicitly mention the sibling PCA-specific tools (e.g., por_classificacao_superior, por_usuario) or state when not to use them.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compras_pncp_pca_por_classificacao_superiorARead-onlyIdempotentInspect
Lista itens de PCA filtrados por categoria superior do item.
Endpoint PNCP /v1/pca/ com codigoClassificacaoSuperior. Permite
agregar planejamentos por categoria (ex.: todos os itens de TI
planejados para o ano).
Cache 1h.
| Name | Required | Description | Default |
|---|---|---|---|
| ano | Yes | Ano do PCA. | |
| pagina | No | Página (1-based). | |
| tamanho_pagina | No | Registros por página. | |
| codigo_classificacao_superior | Yes | Código de classificação superior do item (categoria pai). Veja a tabela de classificação no manual do PNCP. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint=false, covering the safety profile. The description adds value beyond these by disclosing the endpoint path, a 1-hour cache (freshness expectation), and the aggregation use case. No contradiction with annotations.
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 sentences with the purpose front-loaded and every sentence earning its place: main function, endpoint and filter parameter, aggregation use case, and cache behavior. No filler or 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?
For a filtered-list tool, everything an agent needs is present: purpose, distinguishing filter, pagination parameters in the schema, safety profile in the annotations, and return shape in the output schema. The cache disclosure covers the only nontrivial runtime behavior not otherwise stated.
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 all four parameters (ano, pagina, tamanho_pagina, codigo_classificacao_superior) are already documented. The description adds some semantic color by framing codigo_classificacao_superior as the category aggregation filter with an IT-items example, but does not add syntax-level details beyond the schema. 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?
The description opens with a specific verb and resource ('Lista itens de PCA') and names the distinguishing filter ('por categoria superior do item' via codigoClassificacaoSuperior). This clearly differentiates it from sibling tools like compras_pncp_pca_listar without needing to inspect 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?
Provides a concrete use case ('agregar planejamentos por categoria, ex.: todos os itens de TI planejados para o ano'), which tells an agent when the tool is appropriate. It does not explicitly name exclusions or the alternative unfiltered PCA listing tool, so it stops short of full when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compras_pncp_pca_por_usuarioARead-onlyIdempotentInspect
Lista PCAs vinculados a um usuário/sistema integrador específico.
Endpoint PNCP /v1/pca/usuario. Uso menos comum — geralmente o
analista prefere compras_pncp_pca_listar com cnpj_orgao.
Cache 1h.
| Name | Required | Description | Default |
|---|---|---|---|
| ano | Yes | Ano do PCA. | |
| pagina | No | Página (1-based). | |
| id_usuario | Yes | ID interno de usuário/sistema integrador do PNCP. Obtido na documentação interna do órgão; raramente usado por analistas. | |
| tamanho_pagina | No | Registros por página. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already cover read-only, idempotent, and non-destructive behavior. The description adds a useful caching note ('Cache 1h'), which is behavioral context not present in the annotations, giving the agent additional expectations about response freshness.
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 very concise: two short sentences plus the endpoint and cache note. It immediately states the purpose, provides the usage contrast, and includes all necessary extra context without any redundancy or 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?
Given the simple list operation, existing output schema, and strong annotations, the description provides sufficient context: clear purpose, explicit alternative, and cache behavior. Nothing critical is missing for an agent to decide when and how to use this 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?
The input schema has 100% coverage with detailed descriptions for all parameters (including the meaning of `id_usuario` and defaults for `pagina` and `tamanho_pagina`). The tool description itself does not add further parameter semantics, so the baseline score 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?
The description clearly states the tool lists PCAs linked to a specific user/integrator system, with a specific verb and resource. It also identifies the exact endpoint and contrasts it with the preferred sibling tool, making its purpose unambiguous.
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 explicitly says this is less common and recommends using `compras_pncp_pca_listar` with `cnpj_orgao` instead, providing clear when-to-use vs. when-not-to-use guidance. The parameter description for `id_usuario` reinforces that this is rarely used by analysts.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compras_sancao_acordos_lenienciaARead-onlyIdempotentInspect
Lista acordos de leniência firmados com a CGU.
Endpoint /api-de-dados/acordos-leniencia. Empresas com acordo ativo
estão sob compromisso de compliance reforçado — informação útil para
análise de risco em contratações de alto valor.
Cache 1h.
| Name | Required | Description | Default |
|---|---|---|---|
| cnpj | No | CNPJ do sancionado (14 dígitos). | |
| pagina | No | Página (1-based). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only, idempotent, open-world, and non-destructive behavior. The description adds useful behavioral context beyond annotations: the exact endpoint, a 1-hour cache, and the business meaning of active leniency agreements. This goes beyond what the structured annotations alone provide.
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 compact and front-loaded with the core action, then the endpoint, use-case context, and cache behavior. Every sentence contributes useful information without repetition or 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?
For a simple read-only tool with two optional parameters, an output schema, and rich annotations, the description is sufficiently complete. It covers what the tool lists, why it matters, where the data comes from, and a relevant operational detail (cache 1h).
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%, with both 'cnpj' and 'pagina' already documented. The description adds no additional parameter formatting or behavior details, so the baseline score of 3 is appropriate since the schema carries the semantic weight.
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 opens with 'Lista acordos de leniência firmados com a CGU', a specific verb, resource, and scope. It clearly identifies what the tool does and is distinct from the adjacent sanction-list siblings, though it does not explicitly name or contrast those alternatives.
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 a concrete use case: information for risk analysis in high-value contracting, especially because companies with active leniency agreements are under reinforced compliance obligations. It does not explicitly mention when not to use it or how it compares with sibling sanction tools, but the context is clear enough for selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compras_sancao_ceafARead-onlyIdempotentInspect
Consulta CEAF — Cadastro de Expulsões da Administração Federal.
Endpoint /api-de-dados/ceaf. Servidores expulsos do serviço público
federal. Útil quando se identifica responsável/preposto suspeito.
CPFs mascarados por LGPD (123.***.***-45). Cache 1h.
| Name | Required | Description | Default |
|---|---|---|---|
| cpf | No | CPF do servidor (11 dígitos, com ou sem pontuação). | |
| nome | No | Nome do servidor expulso (busca textual). | |
| pagina | No | Página (1-based). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the read-only and idempotent annotations, the description adds meaningful behavioral details: CPFs are masked under LGPD with an example format, and results are cached for 1 hour. These traits help the agent correctly interpret returned data without contradicting any annotations.
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 compact and front-loaded: it identifies the dataset, endpoint, use case, data caveat, and cache behavior in a few sentences. Every sentence adds value and there is no redundant 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 an output schema present, annotations covering safety, and all parameters documented in the schema, the description completes the picture by explaining the data source, typical use case, LGPD masking, and cache freshness. Nothing essential is missing for correct invocation.
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, nome, and pagina. The description adds no semantic detail about the parameters themselves, beyond the output-level CPF masking note, so the baseline score of 3 is appropriate.
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 ('Consulta') and resource ('CEAF — Cadastro de Expulsões da Administração Federal'), and clarifies that it covers federal civil servants expelled from public service. This clearly separates it from sanction-related siblings such as CEIS, CNEP, CEPIM, and leniency agreements.
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 phrase 'Útil quando se identifica responsável/preposto suspeito' gives concrete guidance on when to invoke this tool. It does not explicitly discuss when not to use it or name alternatives, but the intended context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compras_sancao_ceisARead-onlyIdempotentInspect
Consulta CEIS — Cadastro de Empresas Inidôneas e Suspensas.
Endpoint /api-de-dados/ceis. Empresas com sanção ativa não podem
contratar com a administração pública. Use sempre antes de
homologar pregões e contratos.
Cache 1h.
| Name | Required | Description | Default |
|---|---|---|---|
| cnpj | No | CNPJ do fornecedor (14 dígitos, com ou sem pontuação). | |
| nome | No | Nome (razão social/fantasia) do sancionado para busca textual. | |
| pagina | No | Página (1-based). | |
| orgao_sancionador | No | Sigla do órgão sancionador (ex.: 'TCU'). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare read-only, idempotent, and non-destructive behavior. The description adds useful context beyond that: the 1-hour cache TTL and the operational significance of active sanctions. This is genuinely additive and not redundant.
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 a compact set of three short paragraphs with no filler. It front-loads identity and endpoint, then gives business relevance, usage guidance, and cache TTL in only a few 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?
With a full input schema, an output schema, and complete safety annotations, the description is nearly complete. The main gap is that it does not clarify that CEIS is only one of several sanction registries and that a comprehensive compliance check might require sibling tools.
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 all four parameters, including CNPJ, name, page, and sanctioning body. The description does not add parameter-level details, but the baseline 3 is appropriate since the schema carries the burden.
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 opens with a specific verb and resource ('Consulta CEIS — Cadastro de Empresas Inidôneas e Suspensas') and identifies the exact endpoint. This makes the CEIS registry unmistakable relative to sibling sanction tools such as CNEP, CEAF, and CEPIM.
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 an explicit trigger: 'Use sempre antes de homologar pregões e contratos.' It does not name sibling tools like compras_sancao_cnep or compras_checar_sancoes_fornecedor for cases where CEIS alone may be insufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compras_sancao_cepimARead-onlyIdempotentInspect
Consulta CEPIM — Entidades Privadas Sem Fins Lucrativos Impedidas.
Endpoint /api-de-dados/cepim. Aplicável a contratações via convênios
e termos de fomento com OSCs.
Cache 1h.
| Name | Required | Description | Default |
|---|---|---|---|
| cnpj | No | CNPJ da entidade (14 dígitos). | |
| nome | No | Nome da entidade (busca textual). | |
| pagina | No | Página (1-based). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds useful behavioral context beyond annotations: the exact endpoint and a 1-hour cache, which informs an agent about data freshness and repeated-call expectations.
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 compact and front-loaded: the purpose appears first, followed by the endpoint, applicability, and cache behavior. Every sentence carries useful information, and there is no redundancy with the schema or annotations.
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 low-complexity read-only query tool with three optional, fully described parameters and an output schema present, the description provides sufficient context: what is queried, when it applies, where to call, and how caching behaves. No critical operational detail 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 the input schema already documents all three parameters (cnpj, nome, pagina) with meaningful descriptions. The tool description itself adds no additional parameter-level semantics, which is acceptable given the schema's completeness.
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 ('Consulta') and a specific resource ('CEPIM — Entidades Privadas Sem Fins Lucrativos Impedidas'), making the tool's function immediately clear. It also adds an applicability context (convênios and termos de fomento with OSCs), which distinguishes it from sibling sanction-registry tools like CEIS, CNEP, and CEAF even without naming them.
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 explicitly states when the tool applies: contratações via convênios and termos de fomento with OSCs. It does not, however, contrast this with alternative sanction tools or provide explicit exclusions, so it stops short of full when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compras_sancao_cnepARead-onlyIdempotentInspect
Consulta CNEP — Cadastro Nacional de Empresas Punidas (Lei Anticorrupção).
Endpoint /api-de-dados/cnep. Empresas punidas pela Lei 12.846/2013
(Lei Anticorrupção). Indicador de risco de integridade.
Cache 1h.
| Name | Required | Description | Default |
|---|---|---|---|
| cnpj | No | CNPJ do fornecedor (14 dígitos, com ou sem pontuação). | |
| nome | No | Nome do sancionado. | |
| pagina | No | Página (1-based). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, idempotent, open-world, and non-destructive behavior; the description adds practical context with 'Cache 1h' and the endpoint path '/api-de-dados/cnep'. This gives the agent useful information about possible data staleness and the technical route, with no contradiction against the annotations.
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 compact and front-loaded with the core purpose. However, 'Lei Anticorrupção' and 'Empresas punidas' are mentioned twice in consecutive lines, creating minor 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?
For a low-complexity query tool with a fully documented input schema, rich annotations, and an existing output schema, the description covers semantics, endpoint, and cache behavior adequately. The main missing piece is sibling differentiation, which is already penalized under usage guidelines.
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 all three parameters (cnpj, nome, pagina) already have meaningful descriptions. The tool description adds no parameter-specific detail, so the baseline score of 3 is appropriate.
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 ('Consulta') and resource ('CNEP — Cadastro Nacional de Empresas Punidas'), and clarifies the legal basis (Lei 12.846/2013) and integrity-risk semantics. Though it does not explicitly compare with sibling sanction tools such as CEIS or CEAF, naming the exact registry makes the purpose distinct and clear.
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?
No explicit when-to-use or alternative routing is provided. The description gives background context (punished companies, integrity risk) but never states when to prefer CNEP over compras_checar_sancoes_fornecedor or the other compras_sancao_* registries. This is effectively no usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compras_uasg_buscarARead-onlyIdempotentInspect
Busca UASGs por trecho do nome (match parcial, ignora acento e caixa).
✅ Restaurada em 2026-08-05, com busca local. Duas correções:
A rota exige
statusUasg; sem ele devolvia 404 (mesma causa decompras_uasg_listar).O parâmetro
nomenão existe no contrato da rota e era ignorado pelo upstream — enviá-lo devolvia o universo inteiro (~22 mil UASGs) como se fossem resultados de busca. Corrigir só o item 1 teria trocado um erro visível (404) por um erro silencioso, que é pior: o analista receberia "TCU - SECRETARIA DE INFORMATICA" como 1º resultado de qualquer termo.
Como não há filtro textual upstream, a busca é feita localmente:
a tool varre as páginas da rota (500 registros cada, ~8s no universo
completo), filtra por termo e pagina o resultado filtrado. O varrido
fica em cache por 24h, então só a primeira busca do dia paga o custo.
O payload informa _busca_local, _paginas_varridas e
_universo_varrido — se a varredura for truncada, isso fica explícito
em vez de virar silêncio.
Cache 24h.
| Name | Required | Description | Default |
|---|---|---|---|
| termo | Yes | Trecho do nome da UASG (match literal, ignora acento e caixa). Ex.: 'aquaviarios', 'tribunal regional', 'exercito'. Siglas raramente funcionam — os nomes vêm por extenso no cadastro ('AGÊNCIA NACIONAL DE TRANSPORTES AQUAVIÁRIOS', não 'ANTAQ'). | |
| pagina | No | Página de resultados (1-based). Padrão 1. | |
| tamanho_pagina | No | Quantidade de registros por página. Padrão 50, máximo 500. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark it read-only and idempotent, and the description adds substantial context: the route requires statusUasg, nome is ignored upstream, search is performed by scanning ~500-record pages (~8s full universe), results are cached for 24h, and the payload exposes _busca_local, _paginas_varridas, and _universo_varrido to make truncated scans explicit. No contradiction with annotations.
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 definition is front-loaded with the purpose and then organized into a restoration note, numbered bugs, local-search explanation, and cache note. It is longer than strictly necessary because of the incident history, but the extra detail is mostly relevant to expectations about cost and result completeness.
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 the output schema and annotations, the description covers the key operational facts an agent needs: local filtering, pagination, first-search cost, 24h cache, and explicit truncation signaling. Nothing essential for invoking the tool 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 the schema already documents termo, pagina, and tamanho_pagina with examples and caveats. The description does not add parameter-level meaning beyond mentioning the local-search mechanics; baseline 3 is appropriate.
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 opening sentence states a specific operation: buscar UASGs by partial name, ignoring accents and case. It is clearly scoped to name-fragment search, but it does not explicitly contrast with sibling tools like compras_uasg_listar or compras_uasg_consultar, so differentiation is left mostly to the tool name and semantics.
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 intended use (partial-name search) is implied by the first sentence and reinforced by the explanation that there is no upstream textual filter, so search is done locally with a 24h cache. However, there is no explicit when-to-use/when-not-to-use statement or named alternative such as compras_uasg_consultar for exact lookup.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compras_uasg_consultarARead-onlyIdempotentInspect
Consulta uma UASG específica pelo código.
Devolve nome, sigla, CNPJ vinculado, órgão superior e endereço.
Útil para resolver codigo_uasg antes de consultas filtradas.
✅ Restaurada em 2026-08-05 — ver compras_uasg_listar para o
diagnóstico do 404 que afetava toda a família /modulo-uasg/*.
Busca primeiro entre as ativas; se não achar, repete entre as inativas
(o upstream exige statusUasg e não aceita "ambas"), devolvendo
ativa: false para UASGs extintas.
Cache 24h.
| Name | Required | Description | Default |
|---|---|---|---|
| codigo_uasg | Yes | Código numérico da UASG. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Even with readOnly/idempotent annotations, the description adds rich behavioral detail: it tries active UASGs first, retries inactive ones because the upstream rejects 'ambas', marks extinct UASGs with ativa:false, and has a 24h cache. It also discloses the restoration status. No contradiction with annotations.
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 and output, then adds behavior and cache details in a compact, well-separated structure. Each paragraph earns its place; the restoration note is operational context that helps explain reliability.
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 a single documented parameter and annotations covering safety/idempotence, the description supplies everything else needed to call the tool appropriately: return contents, active/inactive fallback, cache, and why it was restored. The output schema further covers return shape.
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 schema already fully documents codigo_uasg ('Código numérico da UASG') at 100% coverage. The description adds usage context about resolving the code before filtered queries but no additional format, range, or interdependency semantics, 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?
The first sentence states a specific action and target ('Consulta uma UASG específica pelo código') and the next sentence enumerates the returned fields, making the tool's function concrete. This is clearly distinct from the list-style sibling compras_uasg_listar and from broader search 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?
It gives an explicit use case ('Útil para resolver codigo_uasg antes de consultas filtradas') and points to compras_uasg_listar for diagnosing a 404 issue. It does not explicitly state when to prefer compras_uasg_buscar over this tool, so it lacks full exclusion/alternative guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compras_uasg_listarARead-onlyIdempotentInspect
Lista UASGs (Unidades Administrativas de Serviços Gerais) do governo.
✅ Restaurada em 2026-08-05. Da v0.2.x até a v0.3.12 esta tool
devolvia "endpoint indisponível" e a documentação atribuía o 404 a um
bug de roteamento da SEGES. O diagnóstico estava errado: faltava o
parâmetro obrigatório statusUasg, e esta API responde 404 (não
400) quando um obrigatório não vem. Enviando o parâmetro, a rota
devolve 200 com ~22 mil UASGs ativas.
O filtro ativo alimenta statusUasg; quando não informado, a tool
assume True (ativas), que é o caso de uso dominante.
Paginação: o upstream ignora tamanho_pagina nesta rota e devolve
páginas fixas de 500 registros — _total_paginas reflete a paginação
real do servidor, não o tamanho pedido.
codigo_orgao corrigido em 2026-09-07. O filtro era enviado como
codigoOrgao, chave que esta rota não declara: a resposta vinha com as
22 mil UASGs do país, sem aviso, como se o órgão não tivesse recorte
nenhum. Agora a tool resolve o código para o CNPJ do órgão e filtra por
cnpjCpfOrgao — órgão 26246 (UFSC) devolve 3 UASGs. Custa uma chamada
extra a /modulo-uasg/2_consultarOrgao.
Duas ressalvas, ambas tratadas aqui: CNPJ não identifica órgão (599
dos 11.957 órgãos ativos compartilham CNPJ com outro — as 7 unidades do
CNPJ da Polícia Federal devolviam 110 UASGs, das quais só 8 do órgão
pedido), então o resultado é reduzido client-side pelo codigoOrgao de
cada UASG; e 39 órgãos não têm CNPJ próprio (o upstream grava "0"),
caso em que a tool devolve lista vazia com _aviso_filtro em vez de um
recorte falso.
Cache 24h.
| Name | Required | Description | Default |
|---|---|---|---|
| ativo | No | True para apenas UASGs ativas, False para inativas, None para ambas. | |
| pagina | No | Página de resultados (1-based). Padrão 1. | |
| codigo_orgao | No | Filtra UASGs subordinadas a este código de órgão. | |
| tamanho_pagina | No | Quantidade de registros por página. Padrão 50, máximo 500. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes far beyond the readOnly/idempotent annotations by revealing that the upstream ignores tamanho_pagina, returns fixed 500-record pages, resolves codigo_orgao via an extra API call to CNPJ, and client-side filters results due to non-unique CNPJs. It also documents special cases like 39 orgãos without CNPJ and the 24h cache, which are exactly the behavioral traits an agent needs to interpret responses correctly.
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 core purpose sentence is clear and the content is organized with bold labels, but much of the text is historical changelog covering version ranges, past incorrect diagnoses, and dates. While the behavioral details are valuable, the description is overlong and would be stronger with the historical narrative trimmed.
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 read-only listing tool with an output schema and rich annotations, the description covers default behavior, pagination quirks, filtering caveats, and failure modes such as returning an empty list with _aviso_filtro. Nothing an agent needs to invoke and interpret this tool 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?
Even though the schema already documents all four parameters, the description adds crucial operational semantics: ativo maps to statusUasg, codigo_orgao is effectively sent as cnpjCpfOrgao after CNPJ resolution, and tamanho_pagina is ignored upstream. This is substantial value beyond the schema descriptions.
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 opens with a specific verb and resource: 'Lista UASGs (Unidades Administrativas de Serviços Gerais) do governo,' which clearly identifies the tool's purpose. However, it does not explicitly contrast itself with sibling tools like compras_uasg_buscar or compras_uasg_consultar, so it stops short of full sibling 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?
The description gives clear context on when to use the tool: it lists UASGs, defaults to active ones, and states that active is the dominant use case. It does not mention alternatives or exclusions, but for a listing tool the intended context is clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compras_versaoARead-onlyIdempotentInspect
Healthcheck/diagnóstico do MCP. Retorna versão, fontes upstream e estado de configurações sensíveis (sem expor valores).
Útil para confirmar que o servidor está respondendo, qual a versão instalada, quais APIs estão acessíveis e se a chave da Transparência foi configurada (necessária para tools de sanções).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds valuable behavioral context beyond the readOnly/idempotent annotations by explicitly stating that sensitive configuration values are not exposed and that the tool reports upstream availability and key configuration state. It also clarifies that the tool is a diagnostic healthcheck, consistent with the non-destructive annotations.
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 concise, front-loaded with the core purpose, and each sentence adds useful information. It avoids fluff while covering what the tool returns, the security guarantee, and relevant use cases.
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?
The description is complete enough for a zero-parameter healthcheck tool: it explains the purpose, the outputs, the privacy behavior, and practical use cases. The only notable gap is the lack of distinction from the compras_healthcheck sibling, which could create ambiguity in tool selection.
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 has zero parameters, so the description carries no parameter burden. With schema coverage at 100% and no params to document, the baseline of 4 applies and the description appropriately focuses on outputs rather than inputs.
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 clearly states a specific verb and resource: it is a healthcheck/diagnostics tool that returns version, upstream sources, and sensitive configuration state without exposing values. It distinguishes itself from the data-querying sibling tools, but it does not differentiate from the sibling compras_healthcheck, so it lacks full sibling 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?
The description gives concrete when-to-use guidance: confirm the server is responding, check installed version, verify accessible APIs, and check whether the Transparência key is configured for sanctions tools. However, it does not mention alternatives or exclusions, especially relative to the similar compras_healthcheck sibling.
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. Dates show when Glama detected each change.
100 tool updates
- First observed
compras_aggregate_contratacoes_por_periodo - First observed
compras_arp_adesoes_item - First observed
compras_arp_buscar_por_objeto - First observed
compras_arp_consultar - First observed
compras_arp_itens_listar - First observed
compras_arp_listar - First observed
compras_arp_por_fim_vigencia - First observed
compras_arp_saldo_item - First observed
compras_arp_unidades_item - First observed
compras_buscar_contratacoes_similares - First observed
compras_catmat_buscar - First observed
compras_catmat_consultar - First observed
compras_catmat_listar_classes - First observed
compras_catmat_listar_grupos - First observed
compras_catmat_listar_pdms - First observed
compras_catser_consultar - First observed
compras_catser_listar_classes - First observed
compras_catser_listar_secoes - First observed
compras_checar_sancoes_fornecedor - First observed
compras_comparar_periodos_contratacoes - First observed
compras_contratacoes_14133_consultar - First observed
compras_contratacoes_14133_itens_listar - First observed
compras_contratacoes_14133_itens_por_contratacao - First observed
compras_contratacoes_14133_listar - First observed
compras_contratacoes_14133_resultados_listar - First observed
compras_contratacoes_14133_resultados_por_contratacao - First observed
compras_contrato_comprasnet_consultar - First observed
compras_contrato_comprasnet_por_uasg - First observed
compras_contrato_cronograma - First observed
compras_contrato_empenhos - First observed
compras_contrato_faturas - First observed
compras_contrato_garantias - First observed
compras_contrato_historico_aditivos - First observed
compras_contrato_ocorrencias - First observed
compras_contrato_publicacoes - First observed
compras_contrato_responsaveis - First observed
compras_contratos_consultar - First observed
compras_contratos_item_consultar - First observed
compras_contratos_itens_listar - First observed
compras_contratos_listar - First observed
compras_contratos_listar_por_fim_vigencia - First observed
compras_detalhar_preco_material - First observed
compras_detalhar_preco_servico - First observed
compras_fornecedor_cnpj_receita - First observed
compras_fornecedor_consultar - First observed
compras_fornecedor_contratos_por_item - First observed
compras_fornecedor_impedimentos_por_itens - First observed
compras_fornecedor_listar - First observed
compras_healthcheck - First observed
compras_indicadores_consolidados - First observed
compras_indicadores_por_periodo - First observed
compras_legado_compras_sem_licitacao - First observed
compras_legado_itens_licitacao_listar - First observed
compras_legado_itens_pregao_listar - First observed
compras_legado_itens_sem_licitacao_listar - First observed
compras_legado_licitacao_consultar - First observed
compras_legado_licitacoes_listar - First observed
compras_legado_pregoes_listar - First observed
compras_legado_rdc_listar - First observed
compras_listar_prompts - First observed
compras_listar_resources - First observed
compras_montar_dossie_arp - First observed
compras_obter_prompt - First observed
compras_obter_resource - First observed
compras_orgao_consultar - First observed
compras_orgao_listar - First observed
compras_perfil_fornecedor_completo - First observed
compras_pesquisar_preco_material - First observed
compras_pesquisar_preco_servico - First observed
compras_pesquisar_precos_para_etp - First observed
compras_pgc_agregacao - First observed
compras_pgc_listar - First observed
compras_pgc_listar_csv - First observed
compras_pgc_por_catalogo - First observed
compras_pncp_ata_arquivos - First observed
compras_pncp_atas_listar - First observed
compras_pncp_contratacao_arquivos - First observed
compras_pncp_contratacao_item_resultados - First observed
compras_pncp_contratacao_itens - First observed
compras_pncp_contratacao_por_orgao - First observed
compras_pncp_contratacoes_atualizacao - First observed
compras_pncp_contratacoes_proposta - First observed
compras_pncp_contratacoes_publicacao - First observed
compras_pncp_contrato_por_orgao - First observed
compras_pncp_contratos_listar - First observed
compras_pncp_modalidades - First observed
compras_pncp_orgao_unidades - First observed
compras_pncp_pca_atualizacao - First observed
compras_pncp_pca_listar - First observed
compras_pncp_pca_por_classificacao_superior - First observed
compras_pncp_pca_por_usuario - First observed
compras_sancao_acordos_leniencia - First observed
compras_sancao_ceaf - First observed
compras_sancao_ceis - First observed
compras_sancao_cepim - First observed
compras_sancao_cnep - First observed
compras_uasg_buscar - First observed
compras_uasg_consultar - First observed
compras_uasg_listar - First observed
compras_versao
Frequently Asked Questions
Claiming proves that you control a remote MCP connector. It does not move, proxy, or interrupt the server.
Open the connector listing, choose Claim ownership, and sign in to Glama.
Complete one verification method:
GitHub identity — fastest for official registry listings. For a namespace such as
io.github.alice/server, link the matching GitHub user, then choose Claim with GitHub. An organization namespace such asio.github.acme/serveralso needs that organization to have installed the Glama AI GitHub App and approved its permissions, because GitHub discloses organization membership only to apps it has installed. Use HTTP or DNS when it has not.HTTP challenge — works when you can deploy a public file. Generate a token, publish the exact JSON Glama shows at
/.well-known/glama.jsonon the same origin as the connector, then choose Check HTTP challenge.DNS challenge — works when you control DNS but cannot change the server. Generate a token, create the exact TXT record Glama shows, wait for it to propagate, then choose Check DNS challenge.
After verification, Glama sends a confirmation email and gives you access to listing details, thumbnails, health checks, and analytics. Keep the HTTP file or DNS record in place: Glama periodically checks it and ownership remains verified while the token is discoverable.
The HTTP ownership file has this structure:
{
"$schema": "https://glama.ai/mcp/schemas/connector.json",
"claim": "glama_claim_..."
}Claim tokens are opaque, stable, and bound to the signed-in Glama account. They contain no email address or other personal information. If Glama can no longer discover a verified HTTP or DNS token, it starts a seven-day grace period before removing claim-based access. Restore the same token during that period to keep ownership verified. Never publish an email address, Glama session token, GitHub token, or connector credential as ownership proof.
If verification fails, confirm that you copied the current token exactly. The HTTP file must be public, return valid JSON with a successful HTTP response, and stay on the connector's origin. DNS changes may need more time to propagate. A claim cannot transfer to a different origin or hostname: if the connector target changes, Glama starts the grace period and the new target must be claimed separately after the previous claim is released.
For a connector linked to the official MCP Registry, registry updates continue to replace its name, description, and URL by default. After claiming, open Manage connector and enable Use Glama listing details as the source of truth if edits made on Glama should be preserved. Categories and thumbnails are always managed on Glama; registry linkage and technical connection settings continue to sync.
Control your server's listing on Glama, including description and metadata
Access analytics and receive server usage reports
Get monitoring and health status updates for your server
Feature your server to boost visibility and reach more users
To improve your MCP server's ranking:
Claim ownership of the server listing
Complete the server profile with an accurate description and thumbnail
Provide a test profile so Glama can connect to and evaluate the server
Keep tool definitions clear and complete to earn a high Tool Definition Quality Score (TDQS)
Route real usage through the Glama Gateway; more recorded successful server uses also improve the ranking
For users:
Full audit trail – every tool call is logged with inputs and outputs for compliance and debugging
Granular tool control – enable or disable individual tools per connector to limit what your AI agents can do
Centralized credential management – store and rotate API keys and OAuth tokens in one place
Change alerts – get notified when a connector changes its schema, adds or removes tools, or updates tool definitions, so nothing breaks silently
For server owners:
Proven adoption – public usage metrics on your listing show real-world traction and build trust with prospective users
Tool-level analytics – see which tools are being used most, helping you prioritize development and documentation
Direct user feedback – users can report issues and suggest improvements through the listing, giving you a channel you would not have otherwise
The connector status is unhealthy when Glama is unable to successfully connect to the server. This can happen for several reasons:
The server is experiencing an outage
The URL of the server is wrong
Credentials required to access the server are missing or invalid
If you are the owner of this MCP connector and would like to make modifications to the listing, including providing test credentials for accessing the server, please contact support@glama.ai.
Discussions
No comments yet. Be the first to start the discussion!
Related MCP Connectors
Dados legislativos e regulatórios do Brasil: proposições, DOU, BACEN, CVM e agências reguladoras
Brazilian Federal Transparency Portal: sanctions (CEIS, CNEP, CEPIM) and Politically Exposed Persons
Brazilian public procurement (PNCP): search, deadlines, tender markdown, alerts and watches.
Portal da Transparência: Acordos de Leniência, official-source lookup. Platform-hosted, pay per quer
Related MCP Servers
AlicenseAqualityAmaintenancerazilian public procurement (PNCP) and Federal Revenue CNPJ data for any MCP client. 18 tools covering bids, contracts, atas de registro de preço, annual procurement plans, CNPJ enrichment, plus temporal aggregation and period comparison. MIT licensed, maintained by Licinexus under Law 14.133/2021.1813778MIT- FlicenseCqualityBmaintenanceEnables read-only access to official Brazilian government procurement data from Compras.gov.br and the PNCP, covering all cataloged public GET endpoints through MCP tools.175-
- AlicenseNot gradedqualityBmaintenanceEnables agents to query 153 live Brazilian government data tools across federal and state sources, including economy, legislature, judiciary, elections, health, education, and more, reading directly from original APIs.MIT
- AlicenseAqualityNot gradedmaintenanceUnified API for Government Data and Web Scraping100-
Glama MCP Gateway
Add one secure layer between your agents and this server.
TDQS
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.
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.
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).
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.