CensoSenso MCP
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@CensoSenso MCPCompare a população de São Paulo e Rio de Janeiro no Censo 2022"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
CensoSenso MCP
Servidor MCP independente para consulta, comparação e análise de dados oficiais do IBGE, com 24 ferramentas, procedência reproduzível, validação de contratos e transporte remoto via Cloudflare Workers.
Endpoint MCP remoto: https://censosenso.poderdapalavra.org/mcp
Protótipo público 1. A versão 0.7.0 é experimental, somente leitura e disponibilizada sem SLA. O canal oficial inicial é o endpoint remoto acima. O pacote npm ainda não integra este lançamento.
O CensoSenso MCP é uma implementação de Model Context Protocol voltada ao uso analítico de dados públicos brasileiros. A superfície atual reúne ferramentas de localidades, Censo Demográfico, SIDRA, indicadores, Cidades@, saúde, saneamento, economia, classificações, malhas administrativas, vizinhança municipal, recortes territoriais, notícias e calendário.
O princípio central é simples: uma resposta útil não deve trazer apenas um número. Sempre que o contrato da ferramenta permitir, o resultado preserva fonte, URL reproduzível, período ou vintage, instante de extração, indicação de derivação e atributos de qualidade.
Sumário
Related MCP server: ibge-data-mcp
Política de versionamento
A sequência pública usa versões pré-1.0: 0.x.0 para acréscimo funcional e 0.x.y para correções ou melhorias de funcionalidades existentes. A família 0.9.x é reservada ao beta e 1.0.0 ao primeiro lançamento estável. Consulte docs/VERSIONAMENTO.md.
Versão e estado
versão do servidor: 0.7.0;
linguagem principal: TypeScript;
runtime: Node.js 22+;
protocolo: Model Context Protocol;
transporte local: STDIO;
transporte remoto: Streamable HTTP;
hospedagem remota: Cloudflare Workers;
endpoint:
https://censosenso.poderdapalavra.org/mcp;health:
https://censosenso.poderdapalavra.org/health;status:
https://censosenso.poderdapalavra.org/status;licença do software: MIT;
fonte principal dos dados: IBGE;
natureza deste lançamento: protótipo público experimental, sem SLA.
A superfície atual possui 24 ferramentas: 22 componentes ibge_* e duas ferramentas genéricas de pesquisa assistida, search e fetch.
Documentação técnica
O deploy remoto foi homologado com a sequência MCP real:
initialize;emissão/captura de
mcp-session-id;notifications/initialized;tools/list;tools/call;consulta efetiva a fonte oficial;
retorno estruturado com procedência.
Validação dos 645 municípios paulistas
A evidência completa desta execução está em docs/VALIDACAO_SP_645.md. O resultado municipal público pode ser consultado em validation/sp/0.6.0/municipios-sp-645.csv.
A versão 0.6.0 possui um gate reproduzível específico para o universo municipal do Estado de São Paulo.
Execução validada em 5 de outubro de 2026:
Métrica | Resultado |
Municípios retornados pela API oficial | 645 |
Validação estrutural | aprovada |
Divergências globais | 0 |
Divergências municipais | 0 |
Amostra determinística de chamadas reais | 21 |
Amostra aprovada | 21/21 |
Falhas na amostra | 0 |
SHA-256 do snapshot validado |
|
O gate consulta:
https://servicodados.ibge.gov.br/api/v1/localidades/estados/35/municipios?orderBy=nomeO que é verificado nos 645 registros
Para cada município:
código IBGE com exatamente 7 dígitos;
prefixo
35, correspondente ao Estado de São Paulo;unicidade dos códigos;
nome não vazio;
unicidade dos nomes normalizados em pt-BR;
código da UF igual a 35, quando informado pela origem;
sigla da UF igual a SP, quando informada;
região igual a Sudeste, quando informada.
No conjunto:
total obrigatório de 645 registros;
inexistência de códigos duplicados;
inexistência de qualquer registro marcado como divergente.
Como a amostra de 21 municípios é construída
Além da validação estrutural 645/645, o gate cria uma amostra determinística para chamar as ferramentas reais do servidor.
A amostra começa por:
município de São Paulo;
Guararema;
primeiro e último código na ordenação;
primeiro e último nome na ordenação alfabética.
Depois inclui municípios nos quantis de código:
10%;
25%;
50%;
75%;
90%.
Também inclui:
ao menos um município de cada região geográfica intermediária encontrada;
um nome contendo caracteres acentuados;
um nome composto com espaço.
As duplicidades são removidas por código e o resultado é ordenado deterministicamente.
Cada município da amostra é validado simultaneamente por:
ibge_geocodigo(codigo=...)
ibge_localidade(codigo=...)O gate compara código, nome e UF retornados pelas ferramentas com o registro oficial usado como referência.
Artefatos produzidos pelo gate
A execução gera:
snapshot-candidato.json;meta.json;validacao-645.jsonl;amostra.json;amostra-resultados.json;resumo.json.
O snapshot é serializado de forma determinística e recebe SHA-256. A promoção para snapshot versionado só é permitida se não houver divergência estrutural nem falha na amostra real.
Comando:
npm run gate:sp-645Arquitetura
flowchart LR
A[Cliente MCP remoto] -->|Streamable HTTP| B[Cloudflare Worker]
A2[Cliente MCP local] -->|STDIO| C[Servidor local]
B --> D[buildServer / registerAll]
C --> D
D --> E{Ferramenta}
E --> F[Localidades / Cidades / CNAE / Países]
E --> G[SIDRA / Censo / Indicadores / Saúde]
E --> H[Malhas / Vizinhos]
E --> I[Recortes temáticos]
E --> J[search / fetch]
F --> K[APIs oficiais IBGE]
G --> K
H --> K
I --> L[Snapshots oficiais versionados]
J --> K
D --> M[Validação + cache + métricas]
K --> N[Adapter de domínio]
L --> N
N --> O[Procedência]
O --> P[content + structuredContent + _meta]A mesma lógica de registro das ferramentas é usada pelo servidor STDIO e pelo Worker HTTP. O Worker acrescenta controles de transporte, segurança e operação, mas não mantém uma implementação paralela das regras de domínio.
Árvore funcional
src/
server.ts registro MCP e instruções
cache.ts cache TTL e metadata de extração
retry.ts retry, timeout e erros upstream
provenance.ts adapter de procedência IBGE
stats.ts adapter estatístico SIDRA
pagination.ts guarda de cursor
validation.ts validações compartilhadas
tools/ ferramentas de domínio
data/recortes/ snapshots territoriais versionados
worker/
src/ transporte Cloudflare
tests/ testes do Worker
scripts/ smoke e testes HTTP
wrangler.jsonc configuração de deploy
scripts/
gate-sp-645.mjs validação dos 645 municípios de SP
normalizar_recortes.py ETL dos recortes territoriais
smoke-mcp.mjs smoke STDIO/HTTP
run_integration_gate.ps1 contratos reais
tests/ testes unitários e de integração
evals/ avaliação de seleção de ferramentas
baselines/ superfície MCP versionada
docs/ arquitetura, auditorias e metodologiaFerramentas disponíveis
Para schemas, parâmetros, decisões, fontes e limitações ferramenta por ferramenta, consulte docs/FERRAMENTAS.md. Para a visão consolidada de origem, cache e derivação, consulte docs/MATRIZ_FONTES_E_PROCESSOS.md.
Domínio | Ferramentas |
Localidades |
|
SIDRA |
|
Censo e indicadores |
|
Geografia |
|
Economia/classificações |
|
Saúde e condições de vida |
|
Nomes |
|
Países |
|
Informação corrente |
|
Pesquisa assistida |
|
Seleção recomendada
Pergunta | Ferramenta |
Panorama de um município |
|
Censo por tema |
|
Série econômica/social conhecida |
|
Comparar localidades |
|
Consultar tabela SIDRA |
|
Descobrir tabela |
|
Inspecionar dimensões/classificações |
|
Resolver nome/código IBGE |
|
Geometria administrativa |
|
Mapa coroplético municipal |
|
Vizinhança municipal |
|
Recorte territorial especial |
|
Fluxo de uma chamada
flowchart TD
A[tools/call] --> B[Schema Zod estrito]
B -->|inválido| C[Erro explícito]
B -->|válido| D[Handler]
D --> E{Origem}
E -->|API| F[cachedFetch]
E -->|snapshot| G[JSON versionado]
F --> H[fetchWithRetry]
H --> I[Resposta oficial]
G --> I
I --> J[Adapter de domínio]
J --> K{estatísticas?}
K -->|sim| L[mcp-stats]
K -->|não| M[resultado de domínio]
L --> M
M --> N[provenienciaIbge]
N --> O[toMcpResult]
O --> P[content]
O --> Q[structuredContent]
O --> R[_meta]A política do projeto é recusar ambiguidades relevantes em vez de escolher silenciosamente uma interpretação plausível.
Algoritmos e regras de decisão
1. Validação territorial
isValidIbgeCode interpreta o tamanho do código:
1 dígito → região;
2 dígitos → UF;
7 dígitos → município;
9 dígitos → distrito.
Para municípios e distritos, os dois primeiros dígitos precisam corresponder a uma UF oficial conhecida.
2. Normalização de UF
Entradas como:
SP
São Paulo
35são resolvidas por um único resolver compartilhado, evitando lógicas divergentes entre ferramentas.
3. Resolução em ibge_geocodigo
Quando recebe codigo, a ferramenta remove caracteres não numéricos e decide o nível territorial pelo comprimento.
Quando recebe nome:
verifica correspondência com UF;
verifica correspondência com região;
consulta municípios;
restringe por UF, quando informada;
usa busca textual por inclusão do nome;
limita a 20 correspondências;
se houver exatamente uma correspondência, retorna imediatamente a hierarquia detalhada;
se houver várias, retorna lista e exige escolha explícita.
A ferramenta não usa correspondência fuzzy probabilística para inventar uma localidade.
4. Datas
Entradas aceitas:
DD/MM/AAAA;DD-MM-AAAA;AAAA-MM-DD.
A ordem mês-dia-ano fornecida pelo usuário não é aceita por ser ambígua no contexto brasileiro.
Quando uma API do IBGE exige MM-DD-AAAA, a conversão é feita somente depois da validação da entrada.
5. Períodos SIDRA
São aceitos, entre outros:
last;first;all;last N;ano
AAAA;intervalo
AAAA-AAAA;mês
AAAAMM;trimestre no formato usado pelo SIDRA;
múltiplos períodos separados por vírgula.
6. Paginação MCP
As listas MCP atuais são entregues em página única e não emitem nextCursor.
Por isso, se o cliente envia cursor em:
tools/list;resources/list;resources/templates/list;prompts/list;
o servidor responde JSON-RPC -32602 Invalid params, em vez de ignorar um cursor inválido.
7. Algoritmos delegados
Alguns algoritmos não são reimplementados localmente:
estatística genérica →
@sbissoli/mcp-stats;ranking do índice
search→@sbissoli/mcp-search;modelo canônico de procedência →
@sbissoli/mcp-provenance;contiguidade topológica →
@turf/boolean-touches;centróide →
@turf/centroid;distância geodésica →
@turf/distance.
O CensoSenso implementa os adapters, regras de decisão, seleção de colunas, tratamento de erros, fontes, schemas e contratos ao redor desses algoritmos.
Extração, cache e tolerância a falhas
Cache
O cache é em memória por processo/isolate.
TTL padrão:
Classe | TTL |
| 24 horas |
| 1 hora |
| 15 minutos |
| 1 minuto |
A chave de cache é construída com parâmetros:
parâmetros
undefinedsão removidos;nomes são ordenados lexicograficamente;
a representação
k=vé concatenada à base.
Isso evita chaves distintas para a mesma consulta apenas por diferença na ordem dos parâmetros.
Data real de extração
Cada entrada de cache preserva a data do fetch real.
Em cache hit:
o valor pode ser servido novamente;
served_from_cache=true;retrieved_atcontinua sendo o instante original de obtenção upstream.
Isso evita declarar como “extraído agora” um dado que foi obtido anteriormente.
Retry
Padrão:
máximo: 4 retries além da tentativa inicial;
atraso inicial: 2.000 ms;
multiplicador: 2;
atraso máximo: 16.000 ms.
Fórmula:
delay = min(initialDelay × multiplier^(attempt-1), maxDelay)Status HTTP retryable:
429, 500, 502, 503, 504Também são considerados transitórios erros de rede como:
ECONNREFUSED;ECONNRESET;ETIMEDOUT;ENOTFOUND;EAI_AGAIN;conexão recusada/resetada;
timeout.
Cada tentativa recebe AbortSignal próprio e timeout configurável.
Erros da fonte
Quando uma API devolve erro:
o código HTTP é preservado;
o corpo textual é lido;
páginas HTML de borda são descartadas;
JSON de erro é inspecionado por
message,mensagem,erro,erroroudetail;espaços são normalizados;
o texto é truncado em 300 caracteres.
A intenção é devolver ao cliente a razão fornecida pela fonte — por exemplo, “nível territorial incompatível” — em vez de reduzir tudo a “HTTP 400”.
Procedência e auditabilidade
O CensoSenso usa um adapter sobre @sbissoli/mcp-provenance.
Contexto:
namespace:
io.github.hilaliskandar.censosenso;locale:
pt-BR;timezone: Brasília, UTC-03:00;
modo padrão:
concise.
A procedência pode ser emitida em três canais:
structuredContent.provenance;structuredContent.attribution;_metanamespaced.
O Markdown legível também pode receber rodapé compacto.
Fontes registradas
Entre as fontes oficiais usadas:
API de Localidades;
SIDRA;
API de Agregados;
API de Nomes;
API de Malhas;
GeoFTP;
API de Notícias;
Projeções de População;
CNAE;
Calendário;
Países;
Pesquisas/Cidades@.
Derivação
Regra:
filtrar, paginar ou reserializar dado bruto → não é derivação estatística;
calcular média, mediana, percentis, rankings ou agregações → resultado marcado como derivado e acompanhado de nota metodológica.
SIDRA e estatísticas
Fluxo recomendado
ibge_sidra_tabelas
↓
ibge_sidra_metadados
↓
ibge_sidraWrappers especializados simplificam temas frequentes:
ibge_censo;ibge_indicadores;ibge_datasaude;ibge_comparar;ibge_cidades.
Estatísticas sobre o conjunto completo
Quando estatisticas=true, o cálculo ocorre antes da paginação/truncagem.
São produzidos:
n;
soma;
mínimo;
máximo;
média;
mediana;
desvio-padrão;
percentis;
top;
bottom.
Marcadores SIDRA excluídos da distribuição:
-
..
...
XValores não numéricos também ficam fora de n e são contabilizados em registrosSemValor.
Resolução de agruparPor
A coluna solicitada é resolvida nesta ordem:
correspondência exata sem diferença de caixa/acento;
aliases conhecidos;
correspondência parcial bidirecional;
se houver mais de uma candidata, a operação é recusada como ambígua.
Exemplos de aliases:
UF,estado→Unidade da Federação;cidade→Município;região→Grande Região;indicador→Variável.
Quando SIDRA publica simultaneamente “Unidade da Federação” e “Unidade da Federação (Código)”, o rótulo legível é preferido porque os grupos são semanticamente equivalentes.
Mistura de variáveis
Se uma consulta traz várias variáveis e o usuário não escolhe agrupamento, o servidor agrupa automaticamente por Variável para evitar calcular uma única distribuição sobre unidades potencialmente incompatíveis.
Geografia, vizinhança e recortes territoriais
Malhas administrativas
ibge_malhas consulta a API oficial de Malhas para geometrias administrativas.
Mapas coropléticos
ibge_mapa combina indicadores municipais auditados do SIDRA com a malha municipal oficial do IBGE e produz SVG vetorial para recortes explícitos de até 50 municípios de uma mesma UF. A primeira versão oferece classificação por quantis ou intervalos iguais e registra o produto como derivado.
Vizinhança municipal
Sem raio:
geometria do município
↓
candidatos territoriais
↓
@turf/boolean-touches
↓
municípios topologicamente contíguosNeste modo, “vizinho” significa tocar a fronteira do município.
Com raio:
geometria
↓
centroid
↓
distance
↓
filtro por kmEsse modo é aproximação por distância entre centróides e é declarado como tal.
Recortes temáticos
A auditoria do projeto encontrou bloqueio HTTP 403 no WFS temático para clientes automatizados. Para evitar que uma origem instável fizesse parte do caminho crítico, os atributos e composições foram migrados para snapshots oficiais versionados.
Fluxo:
fonte oficial IBGE/GeoFTP
↓
inspeção de arquivo
↓
validação de estrutura/vintage/encoding
↓
normalização
↓
JSON versionado
↓
recortes-gerados.ts
↓
ibge_malhas_temaRecortes atualmente versionados:
Amazônia Legal 2024;
Biomas 2025;
Semiárido 2022;
Zona Costeira 2021;
Faixa de Fronteira 2024;
Regiões Metropolitanas 2025;
RIDEs 2025.
A ferramenta retorna composição e atributos. Geometria administrativa continua em ibge_malhas.
Pesquisa assistida search/fetch
O índice de pesquisa é construído na primeira chamada e agrega:
catálogo SIDRA;
municípios;
indicadores conhecidos;
temas do Censo;
indicadores de saúde;
recortes territoriais.
A construção consulta em paralelo:
catálogo oficial de agregados;
lista nivelada de municípios.
Depois acrescenta os dicionários auditados locais.
O índice possui TTL equivalente a CACHE_TTL.STATIC — 24 horas.
Chamadas simultâneas durante a primeira construção compartilham a mesma Promise, evitando reconstruções concorrentes.
Se a construção falha, o resultado falho não é mantido: a próxima chamada tenta novamente.
search
O ranking genérico é fornecido por @sbissoli/mcp-search. O CensoSenso define:
entradas;
títulos;
palavras-chave;
URLs;
vocabulário de consulta;
fontes;
limite de resultados.
fetch
O ID do resultado determina qual ferramenta real renderiza o documento:
tabela SIDRA → metadados SIDRA;
município → hierarquia + população;
tema Censo → catálogo auditado;
saúde → indicador auditado;
recorte → snapshot versionado;
indicador geral → ferramenta de indicadores.
Assim, fetch não inventa um documento independente: ele recompõe a informação usando os mesmos adapters e contratos das ferramentas de domínio.
Validação, testes e gates
O projeto separa testes determinísticos de contratos que dependem de fontes externas.
Gate completo
npm run gate:deployEncadeia:
checagem do gerador de homologação;
typecheck;
lint;
EOL;
Prettier;
build;
suíte Vitest;
cobertura;
npm cido Worker;typecheck do Worker;
testes do Worker.
Gate dos 645 municípios
npm run gate:sp-645Integração real
Em PowerShell:
.\scripts\run_integration_gate.ps1Smoke
STDIO:
node scripts/smoke-mcp.mjs --stdioRemoto:
node scripts/smoke-mcp.mjs https://censosenso.poderdapalavra.orgBaseline da superfície MCP
node scripts/dump-surface.mjs --stdioBaseline atual:
baselines/surface-stdio-0.7.0.jsonMudança de ferramentas, schemas, resources ou prompts deve produzir diff explícito no baseline.
Instalação local
A árvore homologada do protótipo 0.7.0 está publicada neste repositório. O CI público usa apenas runners hospedados pelo GitHub e não realiza deploy de produção.
Pré-requisitos:
Git;
Node.js 22 ou superior;
npm compatível com o lockfile;
Python somente se for necessário regenerar snapshots territoriais.
Clone:
git clone https://github.com/hilaliskandar/hilaliskandar-censosenso-mcp.git
cd hilaliskandar-censosenso-mcp
npm ciBuild:
npm run buildExecução STDIO:
node dist/index.jsOu:
npm startConfiguração genérica de um cliente MCP local:
{
"mcpServers": {
"censosenso": {
"command": "node",
"args": ["/caminho/para/hilaliskandar-censosenso-mcp/dist/index.js"]
}
}
}A forma exata do arquivo de configuração varia entre clientes MCP.
Uso remoto
Clientes compatíveis com MCP Streamable HTTP devem apontar para:
https://censosenso.poderdapalavra.org/mcpO protótipo público 1:
não exige conta CensoSenso;
não exige OAuth;
não exige API key;
é somente leitura.
Exemplos de intenção
Qual era a população de Campinas no Censo 2022?
Liste os municípios do Espírito Santo.
Compare a população de Campinas, Jundiaí e Sorocaba.
Quais municípios fazem fronteira com Guararema?
Qual é o índice de envelhecimento de Campinas?
Liste os municípios da Amazônia Legal.Exemplos de chamadas
ibge_geocodigo(nome="Campinas", uf="SP")
ibge_censo(ano="2022", tema="estrutura_etaria", nivel_territorial="6", localidades="3509502")
ibge_vizinhos(municipio="3518305")
ibge_malhas_tema(tema="amazonia_legal")Desenvolvimento e reprodução
Worker local:
cd worker
npm ci
npm run devA equivalência funcional de uma reprodução exige, no mínimo:
npm ci;npm run gate:deploy;negociação MCP via STDIO;
negociação MCP via Worker;
tools/listcom superfície esperada;ao menos uma chamada real ao IBGE;
procedência nos canais esperados;
integridade dos snapshots;
ausência de mudança inexplicada no baseline;
resposta válida de
/health,/statuse/mcp.
CI/CD
Fluxo operacional:
push/merge
↓
GitHub
↓
gates
↓
Cloudflare Workers Build
↓
wrangler deploy
↓
health/status/MCPSegurança, privacidade e limites operacionais
Modelo de segurança
ferramentas de dados são read-only;
schemas de entrada são estritos;
Host/Origin são validados no transporte;
HTTPS via Cloudflare;
Bearer opcional existe no código;
OAuth não está habilitado;
/metricsé privado por padrão.
Sem METRICS_API_KEY, /metrics responde:
HTTP 404 Not FoundEsse comportamento foi confirmado no domínio de produção antes da abertura pública.
Rate limiting
O Worker usa token bucket em memória por cliente/IP.
Configuração atual:
burst: 20 tokens;
refill: 5 tokens/s;
máximo: 1.000 buckets por isolate;
evicção FIFO quando o mapa atinge o limite.
Importante: esse limite é por isolate. Não constitui cota global exata.
Telemetria
O projeto pode manter:
contadores agregados no Durable Object
USAGE;logs de método, path, status e duração;
metadata de deploy;
cache em memória.
O código não foi projetado para persistir nos contadores de uso:
valores de argumentos;
conteúdo das perguntas;
datasets retornados.
Leia PRIVACY.md e SECURITY.md.
Limitações
sem SLA;
disponibilidade depende de APIs oficiais externas;
o WFS temático permanece fora do runtime principal;
rate limit não é global;
OAuth ainda não está habilitado;
pacote npm ainda não publicado;
o protótipo pode mudar de contrato em versões posteriores.
Dados, licença e atribuições
Software
Licença: MIT.
Copyright:
Copyright (c) 2026 Carlos Alexandre Gomes <hilaliskandar@gmail.com>Código de origem
Partes deste projeto derivam de:
IBGE Brasil MCP / ibge-br-mcp
Autor original: Sidney da Silva Pereira Bissoli
Repositório: https://github.com/SidneyBissoli/ibge-br-mcp
Licença: MIT.
O aviso MIT original é preservado em THIRD_PARTY_LICENSES.md.
A linhagem e as responsabilidades estão descritas em NOTICE.md.
Dados
O software consulta dados públicos oficiais do IBGE.
A licença MIT deste repositório cobre o software e não substitui os termos aplicáveis aos dados e serviços oficiais consultados.
O CensoSenso:
não é produto oficial do IBGE;
não representa o IBGE;
não implica endosso do IBGE.
Status do protótipo e próximos passos
Concluído:
versão 0.7.0;
24 ferramentas;
transporte STDIO;
Streamable HTTP;
domínio próprio;
homologação remota;
procedência estruturada;
snapshots territoriais;
CI/gates;
hardening de
/metrics;validação dos 645 municípios paulistas;
documentação de segurança e privacidade;
licença e atribuições públicas.
Antes da divulgação ampla:
publicar a árvore homologada completa neste repositório;
executar novamente o gate completo na árvore pública;
executar smoke remoto após a migração;
criar tag/release pública;
iniciar com um grupo externo reduzido;
monitorar erros, uso e rate limiting;
ampliar a divulgação somente após janela inicial estável.
Itens deliberadamente posteriores:
publicação npm;
OAuth obrigatório;
rate limit global rígido;
eventual retorno do WFS temático ao runtime.
Contato
Carlos Alexandre Gomes
GitHub: @hilaliskandar
E-mail: hilaliskandar@gmail.com
Para vulnerabilidades, consulte SECURITY.md. Para contribuições, consulte CONTRIBUTING.md.
Available Tools
24 toolsfetchDocumento para Deep ResearchARead-onlyIdempotent
Returns the full document for an id obtained from search, as { id, title, text, url, metadata }: text is the readable content (Markdown) and url the canonical public page to cite.
Companion of search in the OpenAI Deep Research contract, over the IBGE (Brazilian official statistics: SIDRA tables, municipalities, known indicators) catalog. Only ids returned by search are valid; an unknown id returns an error.
The ibge_* tools (ibge_sidra, ibge_cidades, ibge_indicadores, ibge_comparar…) remain the tools for data queries.
Behavior: read-only and idempotent — a live GET against the public source when the document needs it.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Identificador de um documento devolvido por `search` |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | Identificador único do documento no servidor; é o que `fetch` recebe |
| url | Yes | URL pública canônica do documento — a citação do ChatGPT depende dela |
| text | Yes | Conteúdo integral do documento, legível (Markdown) |
| title | Yes | Título legível do documento |
| metadata | No | Pares chave/valor adicionais sobre o documento (tipo, fonte, período…) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/openWorld/non-destructive, so the safety bar is met structurally. The description adds non-obvious context beyond them: failure behavior on unknown ids, that it performs a live GET against the public source when needed, and the shape of the payload. It stops short of describing rate limits or latency characteristics.
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 return contract, then provenance, then routing to the `ibge_*` siblings. Each sentence carries information, though the inline field enumeration partially duplicates the output schema and could be 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?
For a single-parameter retrieval tool with a full output schema and complete annotations, everything an agent needs to call it correctly is present: provenance constraint, error condition, read semantics, and where to go instead for data queries. Return-value explanation is a bonus rather than a necessity.
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?
Only one parameter, and the schema description already states it is an identifier returned by `search` at 100% coverage. The description reinforces the provenance rule (invalid ids error out) but adds no syntax, format, or example 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?
Opens with a specific verb+resource ('Returns the full document for an id'), names the field set returned, and explicitly positions itself as the companion of `search` in the Deep Research contract. An agent can distinguish it from the ~20 `ibge_*` data-query siblings without opening any 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?
Explicit preconditions: only ids returned by `search` are valid, and an unknown id returns an error. It also names the alternative path for a different intent ('The `ibge_*` tools ... remain the tools for data queries'), which is exactly the when-not guidance an agent needs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ibge_calendarioCalendário de divulgaçõesARead-onlyIdempotent
Queries IBGE release and collection calendar.
Features:
List upcoming survey releases
Filter by product (IPCA, PNAD, GDP, etc.)
Filter by period
Distinguish releases from field collections
Event types:
Release: Publication of survey results
Collection: Field research period
Examples:
Upcoming releases: (no parameters)
IPCA releases: produto="IPCA"
2024 calendar: de="01/01/2024", ate="31/12/2024"
Field collections: tipo="coleta"
Use a different tool when:
Already-published news and releases → ibge_noticias
Behavior: read-only and idempotent — a live GET against the public IBGE Calendário API. Returns a Markdown list.
| Name | Required | Description | Default |
|---|---|---|---|
| de | No | Data inicial no formato DD/MM/AAAA (ex: '01/01/2024') | |
| ate | No | Data final no formato DD/MM/AAAA (ex: '31/12/2024') | |
| tipo | No | Tipo de evento: 'divulgacao' (publicações), 'coleta' (pesquisas de campo), ou 'todos' | divulgacao |
| pagina | No | Número da página (padrão: 1) | |
| produto | No | Filtrar por produto/pesquisa (ex: 'IPCA', 'PNAD', 'PIB') | |
| quantidade | No | Quantidade de resultados por página (padrão: 20) |
Output Schema
| Name | Required | Description |
|---|---|---|
| total | Yes | Total de eventos disponíveis para os critérios |
| pagina | No | Página atual retornada |
| eventos | Yes | Lista de eventos do calendário (divulgações/coletas) |
| produto | No | Filtro de produto aplicado, quando informado |
| provenance | Yes | Bloco de proveniência (contrato v1.1): fonte, URL, período, extração e licença |
| attribution | Yes | URLs canônicas das fontes desta resposta (lista de atribuição) |
| totalPaginas | No | Total de páginas disponíveis |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, openWorld and non-destructive, so the safety profile is covered. The description adds real context beyond that: it is a live GET against the public IBGE Calendário API and returns a Markdown list. It does not detail rate limits or pagination edge cases, so not a full 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 purpose followed by clearly sectioned features, event types, examples, and routing guidance. It is somewhat long with several sections, but each block (especially the event-type definitions and examples) earns its place given 6 parameters and an enum.
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 supplies everything else an agent needs: purpose, event-type semantics, filtering examples, and alternative-tool routing. Nothing material 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 earns extra by mapping parameters to concrete examples (produto="IPCA", tipo="coleta") and explaining the tipo enum semantics (Release = publication, Collection = field research period) beyond the schema's short labels.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Queries IBGE release and collection calendar') and immediately differentiates itself by explaining the two event types (release vs. collection). It also names the sibling it is not (ibge_noticias), so an agent can route without opening other 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?
Provides explicit usage examples (no params for upcoming, produto="IPCA", de/ate for a year, tipo="coleta") and an explicit 'use a different tool when' clause routing published news to ibge_noticias. When-to-use and when-not-to-use are both covered.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ibge_censoCenso DemográficoARead-onlyIdempotent
Queries IBGE Demographic Census data (1970-2022).
Simplified tool to access census data without knowing SIDRA table codes.
Available years: 1970, 1980, 1991, 2000, 2010, 2022
Available themes:
populacao: Resident population
alfabetizacao: Literacy rate
domicilios: Housing characteristics
idade_sexo: Age pyramid
religiao: Religion distribution
cor_raca: Race/color
rendimento: Monthly income
educacao: Education level
trabalho: Employment
Examples:
Population 2022: ano="2022", tema="populacao"
Historical series: ano="todos", tema="populacao"
Literacy 2010 by state: ano="2010", tema="alfabetizacao", nivel_territorial="3"
List tables: tema="listar"
Statistics mode: for largest/smallest/mean/median/distribution/ranking questions over census data ("which municipality had the largest 2022 population?") use estatisticas=true — full distribution + top/bottom computed over ALL rows before truncation; agruparPor="" ranks groups by descending sum. In this mode campos/formato are ignored and registros comes empty.
Use a different tool when:
One municipality's current panel (estimate, HDI, GDP) → ibge_cidades
Current estimates or non-census indicator time series → ibge_indicadores
Comparing/ranking localities → ibge_comparar
An arbitrary SIDRA table → ibge_sidra
Behavior: read-only and idempotent — a live GET against the public IBGE SIDRA API. Returns Markdown plus a typed structuredContent payload.
| Name | Required | Description | Default |
|---|---|---|---|
| ano | No | Ano do censo (1970, 1980, 1991, 2000, 2010, 2022) ou 'todos' para série histórica | |
| tema | No | Tema dos dados: - populacao: População residente - alfabetizacao: Taxa de alfabetização - domicilios: Características dos domicílios - idade_sexo: Distribuição por sexo e idade para pirâmide etária - estrutura_etaria: Índice de envelhecimento, idade mediana e razão de sexo - religiao: Distribuição por religião - cor_raca: Cor ou raça - rendimento: Rendimento mensal - migracao: Migração - educacao: Nível de instrução - trabalho: Ocupação e trabalho - indigenas: População indígena - quilombolas: População quilombola - saneamento: Abastecimento de água; para esgotamento sanitário use ibge_datasaude(saneamento_esgoto) - deficiencia: Pessoas com deficiência - nupcialidade: Estado civil - fecundidade: Taxa de fecundidade - listar: Lista tabelas disponíveis | populacao |
| topN | No | Tamanho das listas top/bottom quando estatisticas=true sem agruparPor (padrão: 10, máx: 100) | |
| campos | No | Selecionar apenas algumas colunas por rótulo, separadas por vírgula (ex: 'Valor,Ano'). Reduz o volume da resposta. | |
| formato | No | Formato de saída | tabela |
| agruparPor | No | Com estatisticas=true, agrupa pela coluna informada (rótulo, ex: 'Unidade da Federação', 'Ano') e ranqueia os grupos por soma decrescente (grupos[0] = maior total), cada grupo com sua mini-distribuição. Nome curto ('UF', 'estado', 'cidade', 'região') e rótulo parcial ('Federação') são resolvidos, e a resposta diz em `aviso` por qual coluna agrupou; rótulo que casa com duas colunas é recusado em vez de escolhido | |
| localidades | No | Códigos das localidades ou 'all' | all |
| estatisticas | No | Computa estatísticas (mínimo/máximo/média/mediana/desvio-padrão/percentis) sobre TODOS os registros da consulta, antes da paginação, + ranking top/bottom. Use para 'qual o maior/menor', 'média', 'mediana', 'distribuição', 'ranking'. Quando true, ignora pagina, campos e formato | |
| nivel_territorial | No | Nível territorial (código N): 1=Brasil, 2=Região, 3=UF, 6=Município | 1 |
Output Schema
| Name | Required | Description |
|---|---|---|
| ano | No | Ano(s) de referência |
| tema | No | Tema do censo consultado |
| tabela | No | Tabela SIDRA de origem |
| colunas | Yes | Rótulos das colunas, na ordem |
| descricao | No | Descrição da tabela |
| registros | Yes | Registros: cada um mapeia rótulo da coluna -> valor |
| provenance | Yes | Bloco de proveniência (contrato v1.1): fonte, URL, período, extração e licença |
| attribution | Yes | URLs canônicas das fontes desta resposta (lista de atribuição) |
| estatisticas | No | Bloco estatístico presente quando estatisticas=true (registros vem vazio nesse modo) |
| totalRegistros | Yes | Total de registros de dados |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint/idempotentHint, and the description redundantly restates 'read-only and idempotent', so that sentence earns little. It does add genuine beyond-annotation behavior: statistics mode computes over ALL rows before truncation, silently ignores campos/formato, and returns empty registros — plus fuzzy label resolution for agruparPor with the 'aviso' field and refusal on ambiguous labels. Strong disclosure, minus the annotation duplication.
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 purpose, then years, themes, examples, mode notes and routing — a sensible priority order that lets an agent stop reading early. However, the theme list is duplicated almost verbatim between the description and the tema enum description, and the examples are long, so some sentences do not earn their 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 nine parameters, three enums, an existing output schema and a dense sibling set, this definition covers everything an agent needs: valid years, valid themes, territorial level codes, the statistics escape hatch, and explicit disambiguation from every plausible alternative. The return format is already covered by the output schema, so the brief Markdown/structuredContent note is sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3 and the schema already documents ano/tema/topN/agruparPor thoroughly. The description adds value by showing parameter combinations (ano + tema + nivel_territorial="3") and by flagging the cross-parameter interaction where estatisticas=true suppresses pagina/campos/formato, which the schema only hints at per-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?
States a specific verb and resource (queries IBGE Demographic Census data 1970-2022) and immediately frames the value proposition: census access without knowing SIDRA table codes. The 'Use a different tool when' block names four siblings (ibge_cidades, ibge_indicadores, ibge_comparar, ibge_sidra) with the exact condition that selects each, so an agent can route without opening any 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?
Explicit when-to-use routing with named alternatives and their discriminating conditions (one municipality's current panel → ibge_cidades; arbitrary SIDRA table → ibge_sidra; rankings → ibge_comparar). It also gives worked invocation examples for each common case, including the 'todos' historical-series pattern and tema="listar" for table discovery.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ibge_cidadesPanorama municipal (Cidades@)ARead-onlyIdempotent
Queries municipal indicators from IBGE (similar to Cidades@ portal).
Features:
General overview of a municipality (population, HDI, GDP, etc.)
Query specific indicators
Historical indicator data over years
List available surveys and indicators
Available indicators: populacao, area, densidade, pib_per_capita, idh, escolarizacao, mortalidade, salario_medio, receitas, despesas
Examples:
São Paulo overview: tipo="panorama", municipio="3550308"
Population history: tipo="historico", municipio="3550308", indicador="populacao"
View surveys: tipo="pesquisas"
Available indicators: tipo="indicador"
This tool is the panel for a SINGLE municipality (Cidades@). Use a different tool when:
Census themes / historical series → ibge_censo
Comparing multiple municipalities → ibge_comparar
A macro indicator time series → ibge_indicadores
Behavior: read-only and idempotent — uses the public IBGE Pesquisas (Cidades@) API, Localidades, SIDRA Table 9510 for salario_medio (municipal publication restricted to municipalities with 50,000 inhabitants or more), and the versioned official Atlas Brasil Censo 1991–2010 snapshot for IDHM Educação, Longevidade and Renda. Panorama may combine several indicator calls and explicitly reports partial upstream gaps. Returns Markdown plus a typed structuredContent payload.
| Name | Required | Description | Default |
|---|---|---|---|
| uf | No | Código ou sigla da UF para filtrar (ex: 35 ou SP) | |
| tipo | No | Tipo de consulta: panorama (resumo geral), indicador (específico), pesquisas (listar), historico | panorama |
| pesquisa | No | ID da pesquisa para filtrar indicadores | |
| indicador | No | ID do indicador ou nome para busca | |
| municipio | No | Código IBGE do município (7 dígitos) |
Output Schema
| Name | Required | Description |
|---|---|---|
| nome | No | Nome do município/indicador |
| tipo | Yes | Tipo de consulta (panorama, indicador, pesquisas, historico) |
| avisos | No | Avisos de indisponibilidade parcial ou limitações da resposta |
| municipio | No | Código IBGE do município |
| provenance | Yes | Bloco de proveniência (contrato v1.1): fonte, URL, período, extração e licença |
| attribution | Yes | URLs canônicas das fontes desta resposta (lista de atribuição) |
| indicadores | Yes | Indicadores retornados (vazio para respostas de catálogo) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/openWorld/non-destructive, yet the description adds substantial context beyond them: the upstream sources used (IBGE Pesquisas, Localidades, SIDRA Table 9510, versioned Atlas Brasil 1991–2010 snapshot), the restriction that salario_medio is limited to municipalities with 50,000+ inhabitants, that panorama may fan out into several calls and reports partial upstream gaps, and the return format.
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 purpose, then cleanly sectioned into Features, indicators, Examples, and Behavior. It is on the long side and the data-source paragraph is dense, but every block earns its place by disambiguating usage or parameters.
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 5-parameter, single-endpoint panel tool with an output schema present, the description covers routing, valid inputs, data provenance, and known data limitations. Return-format detail is brief, which is appropriate since a typed structuredContent 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 real meaning the schema lacks: it enumerates the valid indicador values (populacao, area, densidade, pib_per_capita, idh, etc.) and shows worked parameter combinations per tipo, which the schema only describes generically as 'ID do indicador ou nome para busca'.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Queries municipal indicators from IBGE') and immediately scopes it as 'the panel for a SINGLE municipality (Cidades@)'. It explicitly names the siblings it is not (ibge_censo, ibge_comparar, ibge_indicadores) with the condition that selects each, so an agent can route correctly without opening any 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 explicit when-to-use guidance via four feature bullets, concrete worked examples per tipo value, and an explicit when-NOT-to-use block mapping alternatives (census themes, multi-municipality comparison, macro time series) to named siblings. Nothing is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ibge_cnaeClassificação CNAEARead-onlyIdempotent
Queries CNAE (National Classification of Economic Activities) from IBGE.
CNAE is the official classification for economic activities in Brazil.
Hierarchical structure:
Section (letter A-U): 21 main categories
Division (2 digits): 87 divisions
Group (3 digits): 285 groups
Class (4-5 digits): 673 classes
Subclass (7 digits): 1,332 subclasses
Features:
Search by CNAE code
Search by activity description
List by hierarchical level
Show complete hierarchy
Examples:
Search software: busca="software"
Specific code: codigo="6201-5/01"
View section: codigo="J"
List divisions: nivel="divisoes"
Behavior: read-only and idempotent — a live GET against the public IBGE CNAE API. Returns Markdown.
| Name | Required | Description | Default |
|---|---|---|---|
| busca | No | Termo para buscar na descrição das atividades (ex: 'software', 'restaurante', 'comércio') | |
| nivel | No | Nível hierárquico para listar (padrão: mostra todos os níveis relevantes) | |
| codigo | No | Código CNAE para buscar (seção, divisão, grupo, classe ou subclasse). Exemplos: - Seção: "A" (agricultura) - Divisão: "01" (agricultura e pecuária) - Grupo: "01.1" (produção de lavouras) - Classe: "01.11" (cultivo de cereais) - Subclasse: "0111-3/01" (cultivo de arroz) | |
| limite | No | Número máximo de resultados (padrão: 20) |
Output Schema
| Name | Required | Description |
|---|---|---|
| modo | Yes | Modo de resposta que gerou os dados |
| busca | No | Presente no modo de busca por termo |
| lista | No | Presente no modo de listagem por nível |
| codigo | No | Presente no modo de consulta por código |
| provenance | Yes | Bloco de proveniência (contrato v1.1): fonte, URL, período, extração e licença |
| attribution | Yes | URLs canônicas das fontes desta resposta (lista de atribuição) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint, and destructiveHint=false. The description adds genuinely new context beyond those: it is a live GET against the public IBGE CNAE API and returns Markdown. It still omits rate limits, pagination behavior tied to 'limite', and error behavior, which keeps it at 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?
The hierarchy, features, examples, and behavior are laid out in labeled blocks that are easy to scan and front-loaded with the core purpose. It is somewhat longer than strictly required given the schema already carries examples, but every section is on-topic and no sentence is pure 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, return-value details need not be explained, yet the description still notes the Markdown format. Combined with full schema coverage and a clear hierarchy map, an agent has everything needed to call this zero-required-parameter lookup 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 the schema already documents each parameter, including examples of code formats and the enum values for 'nivel'. The description's examples largely restate what the schema provides, so the baseline of 3 is appropriate; it adds little semantic meaning 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?
States a specific verb ('Queries') and resource ('CNAE - National Classification of Economic Activities') plus its domain scope (Brazilian official economic-activity classification). This clearly distinguishes it from geographic siblings like ibge_municipios, ibge_estados, or ibge_malhas, without needing to open any 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?
The 'Features' block and the concrete examples map each usage mode to its parameter (busca for descriptions, codigo for codes/levels, nivel for listing), giving an agent clear routing within the tool. It stops short of naming when NOT to use it or pointing at a sibling alternative, so it does not reach 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ibge_compararComparação entre localidadesARead-onlyIdempotent
Compares data between localities (municipalities or states).
Available indicators:
populacao: Current population estimate
populacao_censo: Census 2022 population
pib: GDP per capita
area: Territorial area (km²)
densidade: Population density (inhab/km²)
alfabetizacao: Literacy rate
domicilios: Number of households
Features:
Compare up to 10 localities at once
Calculate statistics (max, min, average, variation)
Generate ranked output
Accept municipality codes (7 digits) or state codes (2 digits)
Examples:
Compare capitals: localidades="3550308,3304557,4106902", indicador="populacao"
Compare states: localidades="35,33,41", indicador="pib"
Area ranking: localidades="3550308,3304557", formato="ranking"
List indicators: indicador="listar"
Use a different tool when:
You want a time series or one known indicator rather than comparing a fixed set of localities → ibge_indicadores
You need census themes or historical census data → ibge_censo
You know the exact SIDRA table and need arbitrary dimensions → ibge_sidra
Use this tool ONLY to rank/compare 2–10 localities on one indicator. For a single locality, use ibge_cidades (municipal panel), ibge_censo, or ibge_sidra.
Behavior: read-only and idempotent — a live GET against the public IBGE APIs (SIDRA and Localidades). Returns Markdown plus a typed structuredContent payload.
| Name | Required | Description | Default |
|---|---|---|---|
| formato | No | Formato de saída: tabela, json ou ranking (ordenado) | tabela |
| indicador | No | Indicador para comparação: - populacao: Estimativa populacional atual - populacao_censo: População do Censo 2022 - pib: PIB a preços correntes (Mil Reais) - area: Área territorial (km²) - densidade: Densidade demográfica (hab/km²) - alfabetizacao: Taxa de alfabetização - domicilios: Número de domicílios - listar: Lista indicadores disponíveis | populacao |
| localidades | Yes | Códigos IBGE das localidades separados por vírgula (ex: "3550308,3304557,4106902"). Use 7 dígitos para municípios, 2 dígitos para UFs. |
Output Schema
| Name | Required | Description |
|---|---|---|
| nome | No | Nome do indicador |
| tabela | No | Tabela SIDRA de origem |
| formato | No | Formato solicitado |
| indicador | No | Indicador comparado |
| provenance | Yes | Bloco de proveniência (contrato v1.1): fonte, URL, período, extração e licença |
| attribution | Yes | URLs canônicas das fontes desta resposta (lista de atribuição) |
| localidades | Yes | Localidades comparadas, com o valor do indicador |
| estatisticas | No | Estatísticas agregadas (quando há ao menos 2 valores positivos) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already establish read-only, idempotent, open-world, and non-destructive behavior. The description adds meaningful context beyond that: it is a live GET against public IBGE APIs, supports up to 10 localities, calculates statistics and ranked output, and returns Markdown plus structuredContent.
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 and front-loaded, with features, examples, and exclusions clearly separated. It is somewhat redundant because it repeats the indicator list already present in the schema, but the repetition aids tool selection and does not overwhelm the reader.
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 schema, annotations, and output schema, the description provides everything an agent needs: scope, limits, examples, alternatives, and behavioral context. It does not need to explain return values in detail 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 schema already documents the parameters, enums, and locality code formats. The description adds examples and the 10-locality limit, but it mostly duplicates schema content and contains a semantic mismatch: it calls pib “GDP per capita,” while the schema defines it as current-price GDP in thousand reais.
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: compares data between localities, with municipalities or states explicitly named. It also distinguishes the tool from siblings by saying it is for ranking/comparing 2–10 localities on one indicator, rather than for single-locality or time-series queries.
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 when-to-use and when-not-to-use guidance, naming alternatives such as ibge_indicadores, ibge_censo, ibge_sidra, and ibge_cidades. It also includes concrete examples and a clear constraint: use this tool only to rank or compare 2–10 localities on one indicator.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ibge_datasaudeIndicadores de saúdeARead-onlyIdempotent
Queries Brazil health indicators, served through IBGE's SIDRA (some originally produced by DataSUS, e.g. mortality and births).
Mortality and Birth:
mortalidade_infantil: Infant mortality rate
nascidos_vivos: Live births by location
obitos: Deaths by residence
Demographic Indicators:
esperanca_vida: Life expectancy at birth
fecundidade: Fertility rate
Sanitation:
saneamento_agua: Water supply
saneamento_esgoto: Sewage system
Health Coverage:
plano_saude: Health insurance coverage
autoavaliacao_saude: Self-rated health status
Territorial levels: 1=Brazil, 2=Region, 3=State, 6=Municipality
Use this tool for health, mortality, fertility, sanitation and health-coverage indicators. Use ibge_indicadores for general economic/social series such as GDP, prices, labor and population estimates.
Examples:
Infant mortality: indicador="mortalidade_infantil"
Life expectancy by state: indicador="esperanca_vida", nivel_territorial="3"
Deaths in SP: indicador="obitos", nivel_territorial="3", localidade="35"
List indicators: indicador="listar"
Statistics mode: for largest/smallest/mean/median/distribution/ranking questions ("which state has the highest infant mortality?", "median life expectancy across states") use estatisticas=true — full distribution + top/bottom over ALL rows before truncation; agruparPor="" ranks groups by descending sum. In this mode campos/formato are ignored and registros comes empty.
Use a different tool when:
A single municipality's general panel (which also includes infant mortality) → ibge_cidades
Population/demographic counts (not health-specific) → ibge_censo or ibge_sidra
Behavior: read-only and idempotent — a live GET against the public IBGE SIDRA API. Returns Markdown plus a typed structuredContent payload.
| Name | Required | Description | Default |
|---|---|---|---|
| topN | No | Tamanho das listas top/bottom quando estatisticas=true sem agruparPor (padrão: 10, máx: 100) | |
| campos | No | Selecionar apenas algumas colunas por rótulo, separadas por vírgula (ex: 'Valor,Ano'). Reduz o volume da resposta. | |
| formato | No | Formato de saída | tabela |
| periodo | No | Período: 'last', 'all', ou ano específico | last |
| indicador | Yes | Indicador de saúde. Disponíveis: - mortalidade_infantil: Taxa de mortalidade infantil - esperanca_vida: Esperança de vida ao nascer - nascidos_vivos: Nascidos vivos - obitos: Óbitos por local de residência - fecundidade: Taxa de fecundidade - saneamento_agua: Abastecimento de água - saneamento_esgoto: Esgotamento sanitário - plano_saude: Cobertura de plano de saúde - autoavaliacao_saude: Autoavaliação de saúde boa ou muito boa - listar: Lista indicadores disponíveis e os níveis territoriais válidos por indicador A disponibilidade territorial varia por indicador. Antes de usar nivel_territorial=6, consulte indicador="listar". | |
| agruparPor | No | Com estatisticas=true, agrupa pela coluna informada (rótulo, ex: 'Unidade da Federação', 'Ano') e ranqueia os grupos por soma decrescente (grupos[0] = maior total), cada grupo com sua mini-distribuição. Nome curto ('UF', 'estado', 'cidade', 'região') e rótulo parcial ('Federação') são resolvidos, e a resposta diz em `aviso` por qual coluna agrupou; rótulo que casa com duas colunas é recusado em vez de escolhido | |
| localidade | No | Código da localidade ou 'all' | all |
| estatisticas | No | Computa estatísticas (mínimo/máximo/média/mediana/desvio-padrão/percentis) sobre TODOS os registros da consulta, antes da paginação, + ranking top/bottom. Use para 'qual o maior/menor', 'média', 'mediana', 'distribuição', 'ranking'. Quando true, ignora pagina, campos e formato | |
| nivel_territorial | No | Nível territorial (código N): 1=Brasil, 2=Região, 3=UF, 6=Município. A disponibilidade é específica por indicador; use indicador='listar' para consultar os níveis válidos. | 1 |
Output Schema
| Name | Required | Description |
|---|---|---|
| nome | No | Nome do indicador |
| fonte | No | Fonte do dado |
| colunas | Yes | Rótulos das colunas, na ordem |
| indicador | No | Chave do indicador de saúde consultado |
| registros | Yes | Registros: cada um mapeia rótulo da coluna -> valor |
| provenance | Yes | Bloco de proveniência (contrato v1.1): fonte, URL, período, extração e licença |
| attribution | Yes | URLs canônicas das fontes desta resposta (lista de atribuição) |
| estatisticas | No | Bloco estatístico presente quando estatisticas=true (registros vem vazio nesse modo) |
| totalRegistros | Yes | Total de registros de dados |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/openWorld/non-destructive, so the safety profile is covered. The description adds genuine behavioral detail beyond that: it is 'a live GET against the public IBGE SIDRA API', returns 'Markdown plus a typed structuredContent payload', and discloses that in statistics mode campos/formato are ignored and registros comes back empty. Missing only rate-limit/quota context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose, then organized into clear labeled sections (indicators, territorial levels, usage, examples, statistics mode, alternatives, behavior). It is long (~380 words) but dense and every block earns its place; slightly verbose in the indicator enumeration.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 9-parameter tool with an output schema present, the description need not explain return values. It covers routing, indicator semantics, territorial codes, statistics mode, and behavioral traits, leaving no material gap 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 coverage is 100%, so baseline is 3. The description goes further, restating the territorial-level code mapping (1=Brazil…6=Municipality), explaining agruparPor's ranking behavior, and defining when/what statistics mode does to the other parameters — meaningful semantics beyond the raw 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?
States a specific verb and resource ('Queries Brazil health indicators, served through IBGE's SIDRA') and enumerates the indicator families (mortality, demographic, sanitation, coverage) it covers. It explicitly names the sibling it is not ('Use ibge_indicadores for general economic/social series'), so an agent can distinguish it without opening 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?
Provides explicit when-to-use ('health, mortality, fertility, sanitation and health-coverage indicators'), when-not-to-use with named alternatives ('→ ibge_cidades', '→ ibge_censo or ibge_sidra', ibge_indicadores), concrete examples, and routing guidance for statistics questions. Nothing is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ibge_estadosEstados do BrasilARead-onlyIdempotent
Lists all Brazilian states from IBGE.
Features:
Lists all 27 states (26 states + Federal District)
Filter by region (North, Northeast, Southeast, South, Central-West)
Sort by ID, name, or abbreviation
Examples:
List all states: (no parameters)
Northeast states: regiao="NE"
Sorted by abbreviation: ordenar="sigla"
Use a different tool when:
Municipalities of a state → ibge_municipios
Details/hierarchy of one locality by code → ibge_localidade
Behavior: read-only and idempotent — a live GET against the public IBGE Localidades API. Returns a Markdown table.
| Name | Required | Description | Default |
|---|---|---|---|
| regiao | No | Filtrar por região: N (Norte), NE (Nordeste), SE (Sudeste), S (Sul), CO (Centro-Oeste) | |
| ordenar | No | Campo para ordenação dos resultados | nome |
Output Schema
| Name | Required | Description |
|---|---|---|
| total | Yes | Total de estados retornados |
| estados | Yes | Lista de estados |
| provenance | Yes | Bloco de proveniência (contrato v1.1): fonte, URL, período, extração e licença |
| attribution | Yes | URLs canônicas das fontes desta resposta (lista de atribuição) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so the safety profile is covered. The description still adds value beyond them by naming the upstream API ('live GET against the public IBGE Localidades API') and the return format ('Markdown table'). It does not mention rate limits or error behavior, so it is not a full 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 one-line purpose followed by tight Features/Examples/Routing/Behavior blocks that each carry distinct information. Slightly long overall, but no sentence is redundant and every block 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 zero-required-parameter list tool with full schema coverage, an output schema, and rich annotations, the description supplies everything an agent needs: scope, filters, sorting, sibling routing, and even the response format. No gap remains.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3 and the enums are already documented. The examples go further by demonstrating real invocation values ('regiao="NE"', 'ordenar="sigla"'), showing how the parameters combine in practice rather than just restating 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?
States a specific verb and resource ('Lists all Brazilian states from IBGE') and immediately scopes it to the 27 states. The 'Use a different tool when' section names the siblings it must not be confused with, so an agent can route correctly without opening 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?
Explicit when-to-use coverage via three worked examples, plus explicit when-not-to-use routing ('Municipalities of a state → ibge_municipios', 'Details/hierarchy of one locality by code → ibge_localidade'). Nothing about selection is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ibge_geocodigoCódigos geográficos do IBGEARead-onlyIdempotent
Decodes IBGE codes or searches codes by locality name.
Features:
Decode region, state, municipality, or district codes
Search IBGE code by name
Show complete geographic hierarchy
Return related codes
Code structure:
1 digit: Region (1=North, 2=Northeast, 3=Southeast, 4=South, 5=Central-West)
2 digits: State (11-53)
7 digits: Municipality
9 digits: District
Examples:
Decode municipality: codigo="3550308"
Decode state: codigo="35"
Search by name: nome="São Paulo"
Municipality in state: nome="Campinas", uf="SP"
This tool decodes a code's structure and resolves name→code at any level. Use a different tool when:
You only need to list/search municipalities → ibge_municipios
You want the full detailed record of one locality → ibge_localidade
Behavior: read-only and idempotent — a live GET against the public IBGE Localidades API. Returns Markdown.
| Name | Required | Description | Default |
|---|---|---|---|
| uf | No | Estado por sigla (SP), nome (São Paulo) ou código IBGE (35) para restringir a busca por nome de município | |
| nome | No | Nome da localidade para encontrar o código IBGE (estado ou município) | |
| codigo | No | Código IBGE para decodificar. Formatos aceitos: - 1 dígito: Região (1-5) - 2 dígitos: UF (11-53) - 7 dígitos: Município - 9 dígitos: Distrito |
Output Schema
| Name | Required | Description |
|---|---|---|
| nome | No | Nome da localidade resolvida |
| tipo | Yes | Tipo do resultado: localidade decodificada (regiao/uf/municipio/distrito) ou lista de municípios encontrados (lista) |
| sigla | No | Sigla da região ou UF, quando aplicável |
| total | No | Quantidade de municípios encontrados na busca por nome (apenas tipo lista) |
| codigo | No | Código IBGE da localidade resolvida (ausente em resultados do tipo lista) |
| regiao | No | Nome da região à qual a UF pertence (apenas tipo uf) |
| estados | No | Estados pertencentes à região (apenas tipo regiao) |
| matches | No | Municípios encontrados na busca por nome (apenas tipo lista) |
| hierarquia | No | Hierarquia geográfica completa, da região ao município/distrito (tipo municipio/distrito) |
| provenance | Yes | Bloco de proveniência (contrato v1.1): fonte, URL, período, extração e licença |
| attribution | Yes | URLs canônicas das fontes desta resposta (lista de atribuição) |
| codigoSidra | No | Código SIDRA de 6 dígitos do município (apenas tipo municipio) |
| regiaoCodigo | No | Código IBGE da região à qual a UF pertence (apenas tipo uf) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint, so the safety profile is covered; the description usefully adds the concrete backing ('a live GET against the public IBGE Localidades API') and the return medium (Markdown). It stops short of disclosing rate limits, latency, or partial-match/fuzzy behavior for name searches, which is the only remaining gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well front-loaded and sectioned (Features, Code structure, Examples, Use a different tool when, Behavior), so an agent can skim to the relevant part. It is on the long side and the 'Features' bullets partially restate the opening sentence, but every section carries usable content and none is 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 zero-required-parameter decoder with a published output schema, the description covers the operation modes, the code grammar, the routing alternatives, and the read-only behavior — nothing an agent needs in order to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description goes beyond it: the code-structure ladder (1/2/7/9 digits with region and state ranges) and the 'Municipality in state: nome="Campinas", uf="SP"' example show how the optional uf parameter scopes a nome lookup, which the schema only implies. It does not explain what happens when both codigo and nome are supplied, leaving one interaction rule unstated.
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 pair ('Decodes IBGE codes or searches codes by locality name') and immediately enumerates the four concrete operations (decode, search by name, show hierarchy, return related codes). It explicitly names the siblings it is not (ibge_municipios, ibge_localidade), so an agent can separate it from the 20+ other ibge_* tools without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Includes a dedicated 'Use a different tool when' block with two explicit exclusions mapped to the correct alternatives, plus four worked examples showing the exact call shape for each mode (decode municipality, decode state, search by name, name+uf). This is as close to unambiguous routing as a description can get.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ibge_indicadoresIndicadores econômicos e sociaisARead-onlyIdempotent
Queries IBGE economic and social indicators.
Available indicators:
Economic:
pib: GDP at current prices
pib_variacao: GDP variation (%)
pib_per_capita: GDP per capita
industria: Industrial production
comercio: Retail sales
servicos: Services volume
Prices:
ipca: Monthly IPCA
ipca_acumulado: 12-month IPCA
inpc: Monthly INPC
Labor:
desemprego: Unemployment rate
ocupacao: Employed people
rendimento: Average income
informalidade: Informality rate
Population:
populacao: Population estimate
densidade: Population density
Examples:
GDP: indicador="pib"
IPCA last 12 months: indicador="ipca", periodos="last 12"
Unemployment by state: indicador="desemprego", nivel_territorial="3"
List indicators: indicador="listar"
Statistics mode: for largest/smallest/mean/median/distribution/ranking questions ("which state has the highest unemployment?", "median GDP per capita across states") use estatisticas=true — full distribution + top/bottom over ALL rows before truncation; agruparPor="" (e.g. "Unidade da Federação", "Trimestre") ranks groups by descending sum. In this mode campos/formato are ignored and registros comes empty.
Use a different tool when:
Comparing/ranking localities → ibge_comparar
Census themes → ibge_censo
One municipality's panel → ibge_cidades
You know the exact SIDRA table or need arbitrary variables/classifications → ibge_sidra
Behavior: read-only and idempotent — a live GET against the public IBGE SIDRA API. Returns Markdown plus a typed structuredContent payload.
| Name | Required | Description | Default |
|---|---|---|---|
| topN | No | Tamanho das listas top/bottom quando estatisticas=true sem agruparPor (padrão: 10, máx: 100) | |
| campos | No | Selecionar apenas algumas colunas por rótulo, separadas por vírgula (ex: 'Valor,Ano'). Reduz o volume da resposta. | |
| formato | No | Formato de saída | tabela |
| periodos | No | Períodos (ex: '2023', 'last', 'last 4') | last |
| categoria | No | Filtrar por categoria de indicadores | |
| indicador | No | Nome do indicador (ex: "pib", "ipca", "desemprego", "populacao"). Use "listar" para ver todos os indicadores disponíveis. | |
| agruparPor | No | Com estatisticas=true, agrupa pela coluna informada (rótulo, ex: 'Unidade da Federação', 'Ano') e ranqueia os grupos por soma decrescente (grupos[0] = maior total), cada grupo com sua mini-distribuição. Nome curto ('UF', 'estado', 'cidade', 'região') e rótulo parcial ('Federação') são resolvidos, e a resposta diz em `aviso` por qual coluna agrupou; rótulo que casa com duas colunas é recusado em vez de escolhido | |
| localidades | No | Códigos das localidades ou 'all' | all |
| estatisticas | No | Computa estatísticas (mínimo/máximo/média/mediana/desvio-padrão/percentis) sobre TODOS os registros da consulta, antes da paginação, + ranking top/bottom. Use para 'qual o maior/menor', 'média', 'mediana', 'distribuição', 'ranking'. Quando true, ignora pagina, campos e formato | |
| nivel_territorial | No | Nível territorial (código N): 1=Brasil, 2=Região, 3=UF, 6=Município, 7=Região Metropolitana, 8=Mesorregião, 9=Microrregião, 14=RIDE | 1 |
Output Schema
| Name | Required | Description |
|---|---|---|
| nome | No | Nome do indicador |
| tabela | No | Tabela SIDRA de origem |
| colunas | Yes | Rótulos das colunas, na ordem |
| indicador | No | Chave do indicador consultado |
| registros | Yes | Registros: cada um mapeia rótulo da coluna -> valor |
| provenance | Yes | Bloco de proveniência (contrato v1.1): fonte, URL, período, extração e licença |
| attribution | Yes | URLs canônicas das fontes desta resposta (lista de atribuição) |
| estatisticas | No | Bloco estatístico presente quando estatisticas=true (registros vem vazio nesse modo) |
| totalRegistros | Yes | Total de registros de dados |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so the safety profile is covered. The description adds real context beyond them: it is a live GET against the public IBGE SIDRA API, returns Markdown plus a typed structuredContent payload, and that estatisticas=true suppresses campos/formato and empties registros. No contradiction; only rate limits/error behavior are unstated.
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-loads purpose, then organizes the indicator inventory under Economic/Prices/Labor/Population headers, followed by examples, the statistics-mode note, and the alternative-tool routing. Every block earns its place for a 10-parameter tool; the indicator list is essential since indicador is an unconstrained string.
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 10 parameters, a statistics mode that silently changes behavior, and an existing output schema (so return values need not be re-explained), the definition covers the valid inputs, the mode switch, routing to alternatives, and the data source. An agent has everything needed 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 description coverage is 100%, so the baseline is 3; the description still adds value by giving example parameter combinations and by explaining the cross-parameter interaction of estatisticas with campos/formato/registros and the ranking semantics of agruparPor. It does not, however, add much beyond what the already-verbose schema descriptions say.
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 ('Queries IBGE economic and social indicators') and enumerates the concrete indicador values (pib, ipca, desemprego, populacao, etc.), so the agent knows exactly what domain it covers. It also names the sibling tools it is NOT (ibge_comparar, ibge_censo, ibge_cidades, ibge_sidra) so it is trivially distinguishable.
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 provides a 'Use a different tool when:' block mapping four distinct scenarios to alternatives, plus worked examples ('indicador="pib"', 'unemployment by state → nivel_territorial="3"') and a rule for when to enable estatisticas (largest/smallest/mean/median/distribution/ranking questions). Nothing is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ibge_localidadeDetalhes de localidadeARead-onlyIdempotent
Returns details of a specific locality by IBGE code.
Features:
State information (2-digit code)
Municipality information (7-digit code)
District information (9-digit code)
Complete hierarchy (region, mesoregion, microregion)
Examples:
São Paulo state: codigo=35
São Paulo city: codigo=3550308
District: codigo=355030805
This tool returns the full record of ONE locality you already have the code for. Use a different tool when:
You have a name and need the code → ibge_municipios (municipalities) or ibge_geocodigo (any level)
You want to decompose/understand a code's structure → ibge_geocodigo
Behavior: read-only and idempotent — a live GET against the public IBGE Localidades API. Returns a Markdown record.
| Name | Required | Description | Default |
|---|---|---|---|
| tipo | No | Tipo da localidade. Se não informado, será inferido pelo tamanho do código. | |
| codigo | Yes | Código IBGE da localidade (estado: 2 dígitos, município: 7 dígitos, distrito: 9 dígitos) |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | Código IBGE da localidade |
| nome | Yes | Nome da localidade |
| tipo | Yes | Tipo da localidade retornada |
| sigla | No | Sigla da UF (apenas para estados) |
| estado | No | Estado da localidade (município ou distrito) |
| regiao | No | Região do estado (apenas para estados) |
| municipio | No | Município ao qual o distrito pertence (apenas para distritos) |
| provenance | Yes | Bloco de proveniência (contrato v1.1): fonte, URL, período, extração e licença |
| attribution | Yes | URLs canônicas das fontes desta resposta (lista de atribuição) |
| mesorregiao | No | Mesorregião do município |
| microrregiao | No | Microrregião do município |
| regiaoImediata | No | Região imediata do município |
| regiaoIntermediaria | No | Região intermediária do município |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint, so the safety profile is covered; the description still adds value by disclosing the backing source ('live GET against the public IBGE Localidades API') and the response format ('Markdown record'). It does not mention auth requirements or rate limits, so it falls short of 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, then Features/Examples/alternatives/Behavior in clearly labeled blocks. The Features list partially restates what the output schema already returns, which is mild redundancy, but every block is scannable and none is wasted prose.
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 tool with an output schema and full annotation coverage, the description supplies purpose, examples, routing rules, and source behavior. Nothing an agent needs in order to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds concrete worked examples mapping real codes to each level (estado=35, municipio=3550308, distrito=355030805) and states that hierarchy is inferred. This reinforces the digit-length convention in a way the schema alone does 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?
States a specific verb and resource ('Returns details of a specific locality by IBGE code') and immediately scopes it to a single record keyed by a code you already hold. It explicitly names the sibling tools it is not (ibge_geocodigo, ibge_municipios), so an agent can route without opening any 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?
Contains an explicit 'Use a different tool when' block with two disambiguating conditions and the exact alternative tool names for each. The precondition ('you already have the code for') is stated directly, leaving nothing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ibge_malhasMalhas geográficasARead-onlyIdempotent
Gets geographic meshes (maps) from IBGE in GeoJSON, TopoJSON, or SVG format.
Features:
Meshes for Brazil, regions, states, municipalities
Different resolution levels (internal divisions)
Different quality levels
Formats: GeoJSON (data), TopoJSON (compact), SVG (image)
Structured cartographic summary for geometric responses: feature count, geometry types, bbox, vertex centroid, and property keys
Locality types:
"BR" or "1" = Entire Brazil
State abbreviation (e.g., "SP", "RJ")
State code (e.g., "35" for SP)
Municipality code (7 digits)
Resolution (internal divisions):
0 = Outline only
2 = States
5 = Municipalities
Examples:
Brazil with states: localidade="BR", resolucao="2"
São Paulo with municipalities: localidade="SP", resolucao="5"
SVG format: localidade="BR", formato="svg"
Use a different tool when:
Thematic meshes (biomes, Legal Amazon, semi-arid, metropolitan regions) → ibge_malhas_tema
Behavior: read-only and idempotent — a live GET against the public IBGE Malhas API. The full geometry remains in the Markdown/download channel; structuredContent carries lightweight cartographic metadata only.
| Name | Required | Description | Default |
|---|---|---|---|
| tipo | No | Tipo de divisão territorial | |
| formato | No | Formato de saída (padrão: geojson) | geojson |
| qualidade | No | Qualidade do traçado: 'minima', 'intermediaria' ou 'maxima' (padrão). Os números 1–4 do IBGE antigo continuam aceitos e são traduzidos. | maxima |
| resolucao | No | Divisões internas a desenhar dentro da malha pedida: 0 = Sem divisões internas (só o contorno) 1 = Macrorregiões (apenas quando localidade=BR) 2 = Unidades da Federação (BR ou uma região) 3 = Mesorregiões 4 = Microrregiões 5 = Municípios Cada nível aceita só as divisões menores que ele: município aceita nenhuma, UF aceita 3, 4 e 5. | 0 |
| localidade | Yes | Código IBGE ou sigla da localidade (ex: 'BR', 'SP', '35', '3550308') | |
| intrarregiao | No | Divisão interna pelo nome, alternativa a resolucao: 'regiao', 'UF', 'regiao-intermediaria', 'regiao-imediata', 'mesorregiao', 'microrregiao' ou 'municipio'. Quando informado, prevalece sobre resolucao. |
Output Schema
| Name | Required | Description |
|---|---|---|
| url | No | URL para download da malha completa |
| tipo | No | Tipo de divisão territorial, quando informado |
| formato | Yes | Formato de saída solicitado (geojson, topojson ou svg) |
| qualidade | No | Qualidade do traçado solicitada |
| resolucao | No | Resolução/divisões internas solicitada |
| localidade | Yes | Código IBGE ou sigla da localidade consultada |
| provenance | Yes | Bloco de proveniência (contrato v1.1): fonte, URL, período, extração e licença |
| attribution | Yes | URLs canônicas das fontes desta resposta (lista de atribuição) |
| intrarregiao | No | Divisão interna desenhada dentro da malha (vocabulário da API v3) |
| resumo_geometrico | No | Resumo cartográfico derivado da geometria retornada |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive/openWorld, but the description adds non-obvious behavior: that the call is a live GET against the public IBGE Malhas API and that full geometry lands in the Markdown/download channel while structuredContent carries only lightweight cartographic metadata (feature count, geometry types, bbox, vertex centroid, property keys). This channel-split detail is exactly the kind of behavioral context annotations cannot 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?
Well front-loaded — purpose sentence first, then grouped sections (Features, Locality types, Resolution, Examples, Use a different tool when). The block structure makes it scannable, though it is on the longer side and repeats some enum information already in 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?
There is an output schema, so return-value detail is not required, and the description nevertheless notes what structuredContent contains. Combined with the behavior note, format distinctions, locality formats, resolution mapping, and sibling routing, an agent has everything needed to invoke this correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline 3, but the description adds real semantics: it spells out accepted localidade forms ("BR", state abbreviation, state code, 7-digit municipality code) with examples, and clarifies what each format means (GeoJSON=data, TopoJSON=compact, SVG=image) and resolution levels. It does not add much for tipo, qualidade, or intrarregiao, which stay 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?
Opens with a specific verb+resource ("Gets geographic meshes (maps) from IBGE") and names the output formats, so the agent immediately knows this returns cartographic geometry. It distinguishes itself from the sibling ibge_malhas_tema by scoping to standard IBGE meshes and routing thematic meshes elsewhere.
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 "Use a different tool when" block naming ibge_malhas_tema for thematic meshes, plus worked examples that show valid parameter combinations. It does not cover other plausible alternatives in the large sibling set (e.g., ibge_mapa or ibge_municipios), so routing guidance is clear but not exhaustive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ibge_malhas_temaMalhas temáticasARead-onlyIdempotent
Lists what a THEMATIC territorial recorte of Brazil contains: how many records, with which codes and names, from versioned official IBGE/GeoFTP snapshots.
Available recortes:
biomas: the six continental biomes
amazonia_legal: Legal Amazon boundary
semiarido: semi-arid area
costeiro: coastal municipalities
fronteira: border-strip municipalities
metropolitana: metropolitan regions
ride: Integrated Development Regions
listar: the catalogue itself, without querying the source
Filtering with codigo: biomas uses the biome code; every municipality-composition recorte (amazonia_legal, semiarido, costeiro, fronteira, metropolitana and ride) accepts the 7-digit IBGE municipality code. Ask without codigo to list records.
THEMATIC GEOMETRY IS NOT PART OF THIS TOOL'S CONTRACT. Use ibge_malhas for supported administrative geometry.
Use a different tool when:
Administrative meshes WITH geometry (country/region/state/municipality outlines) → ibge_malhas
Behavior: read-only and idempotent. Attributes/listings come exclusively from versioned official IBGE/GeoFTP snapshots audited by the laboratory. Returns Markdown plus a typed structuredContent payload.
| Name | Required | Description | Default |
|---|---|---|---|
| tema | Yes | Recorte temático do território: - biomas: os seis biomas continentais - amazonia_legal: limite da Amazônia Legal - semiarido: área do semiárido - costeiro: municípios da zona costeira - fronteira: municípios da faixa de fronteira - metropolitana: regiões metropolitanas - ride: Regiões Integradas de Desenvolvimento - listar: lista os recortes disponíveis, sem consultar a fonte | |
| codigo | No | Filtra registros do recorte. Em biomas, usa cd_bioma (ex. "1"). Nos recortes compostos por municípios — amazonia_legal, semiarido, costeiro, fronteira, metropolitana e ride — usa o código IBGE municipal de 7 dígitos. | |
| limite | No | Quantas feições trazer (padrão 50, máx. 600). O total do recorte vem sempre, mesmo quando o limite corta a lista. |
Output Schema
| Name | Required | Description |
|---|---|---|
| tema | Yes | Recorte solicitado (ou 'listar') |
| temas | No | Lista de recortes disponíveis (somente no modo 'listar') |
| codigo | No | Código usado como filtro, quando informado |
| versao | No | Versão/vintage da fonte temática consultada |
| feicoes | No | Total de registros retornáveis na fonte; consulte tipo_registro para interpretar a unidade |
| registros | No | Atributos de cada feição (sem geometria) |
| provenance | Yes | Bloco de proveniência (contrato v1.1): fonte, URL, período, extração e licença |
| attribution | Yes | URLs canônicas das fontes desta resposta (lista de atribuição) |
| fonte_dados | No | URL oficial da fonte de atributos/listagem usada |
| tipo_registro | No | Unidade dos registros retornados: feição geográfica do recorte ou município componente |
| feicoes_retornadas | No | Quantas vieram nesta resposta |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive/openWorld, so the safety profile is covered. The description adds genuinely useful context beyond that: data provenance from versioned official IBGE/GeoFTP snapshots, the explicit exclusion of thematic geometry, and the return shape (Markdown plus typed structuredContent).
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, then a scannable list of recortes, then filtering rules, then the sibling routing. It is somewhat long and the all-caps emphasis plus repetition of the recorte list (already in the enum) costs a little, but every block is functional.
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 lister with a full output schema, annotations, and 100% schema coverage, this description covers purpose, scope boundaries, filtering behavior, provenance, and the alternative tool. 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 description coverage is 100%, so the baseline is 3. The description largely restates what the schema already documents for `tema` and `codigo` (biome code vs. 7-digit municipality code), adding only the behavioral note that omitting `codigo` lists records rather than a semantic detail 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?
States a specific verb and resource: it lists what a thematic territorial recorte of Brazil contains, enumerating the eight supported recortes. It also explicitly carves out what it is NOT (geometry), which separates it from ibge_malhas without the agent needing to inspect either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes the agent: 'Use a different tool when: Administrative meshes WITH geometry → ibge_malhas'. It also gives operational guidance for the filter ('ask without codigo to list records') and explains which recortes accept which code namespace, leaving no ambiguity about 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.
ibge_mapaMapa coroplético municipalARead-onlyIdempotent
Generates a municipal choropleth map as SVG from audited SIDRA indicators and official IBGE municipal meshes.
Scope of this first cartographic release:
2 to 50 municipalities
all municipalities must belong to the same state
indicators: populacao, populacao_censo, pib, area, densidade, alfabetizacao, domicilios
classification: quantiles or equal intervals
output: lightweight metadata plus complete SVG in structuredContent.svg
The SVG includes municipal polygons, sequential classes, legend, title, tooltips and source note. The server fetches the state municipal mesh at minimum quality and filters it to the requested municipalities.
Use a different tool when:
You need only geometry/download URL → ibge_malhas
You need non-cartographic comparison/ranking → ibge_comparar
You need thematic territorial composition (biomes, metropolitan regions, etc.) → ibge_malhas_tema
Behavior: read-only and idempotent. The map is a server-side derived product from official IBGE SIDRA data and official IBGE geographic meshes.
| Name | Required | Description | Default |
|---|---|---|---|
| titulo | No | ||
| classes | No | ||
| largura | No | ||
| indicador | No | populacao | |
| municipios | Yes | Códigos IBGE municipais de 7 dígitos, separados por vírgula; todos na mesma UF | |
| classificacao | No | quantis |
Output Schema
| Name | Required | Description |
|---|---|---|
| svg | Yes | |
| bbox | Yes | |
| nome | Yes | |
| fontes | Yes | |
| tabela | Yes | |
| classes | Yes | |
| indicador | Yes | |
| provenance | Yes | Bloco de proveniência (contrato v1.1): fonte, URL, período, extração e licença |
| attribution | Yes | URLs canônicas das fontes desta resposta (lista de atribuição) |
| localidades | Yes | |
| classificacao | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive/openWorld, but the description adds real behavioral context beyond them: hard scope limits (2–50 municipalities, single state), the server-side derivation chain (fetches state mesh at minimum quality, filters), and the output shape (metadata plus structuredContent.svg). It stops short of error behavior or fetch latency, so not 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 action, then well-organized bullet lists for scope, output, and alternatives. Most sentences carry information, though the closing 'Behavior: read-only and idempotent' sentence largely repeats the annotation block, which is minor 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?
An output schema exists, so return values need not be spelled out, yet the description still usefully notes SVG contents and structuredContent.svg. Scope constraints, indicator coverage, and sibling routing cover what an agent needs; only the undocumented width/title/class-count parameters leave a small 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 only 17%, so the description must compensate. It clarifies municipios (2–50, same state) and classificacao (quantiles or equal intervals) and lists the indicator values, but leaves titulo, largura, and the classes count (2–7) undocumented in both schema and description. Partial compensation, so 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 concrete verb+resource+output format: generates a municipal choropleth map as SVG from audited SIDRA indicators and official IBGE municipal meshes. It explicitly differentiates from siblings (ibge_malhas, ibge_comparar, ibge_malhas_tema), so an agent can route correctly without opening 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?
The 'Use a different tool when' block names three sibling alternatives and the exact condition that selects each (geometry/download URL, comparison/ranking, thematic territorial composition). When-to-use and when-not-to-use are both explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ibge_municipiosMunicípios do BrasilARead-onlyIdempotent
Lists Brazilian municipalities from IBGE.
Features:
List municipalities by state (using state abbreviation)
List all municipalities in Brazil (5,570 municipalities)
Search by municipality name
Returns 7-digit IBGE code
Examples:
São Paulo municipalities: uf="SP"
Search by name: busca="Campinas"
MG municipalities containing "Belo": uf="MG", busca="Belo"
Use a different tool when:
Resolve/decode a code at any level (region, state, district), not just municipalities → ibge_geocodigo
Full details/hierarchy of one locality by code → ibge_localidade
Neighboring municipalities → ibge_vizinhos
Behavior: read-only and idempotent — a live GET against the public IBGE Localidades API. Returns a Markdown table.
| Name | Required | Description | Default |
|---|---|---|---|
| uf | No | Estado por sigla (SP), nome (São Paulo) ou código IBGE (35). Se não informado, retorna todos os municípios do Brasil. | |
| busca | No | Termo para buscar no nome do município | |
| limite | No | Número máximo de resultados (padrão: 100, máximo: 5570) |
Output Schema
| Name | Required | Description |
|---|---|---|
| uf | No | UF informada no filtro (como recebida na entrada) |
| busca | No | Termo de busca aplicado ao nome do município |
| total | Yes | Total de municípios encontrados antes do limite |
| municipios | Yes | Lista de municípios retornados (após filtro e limite) |
| provenance | Yes | Bloco de proveniência (contrato v1.1): fonte, URL, período, extração e licença |
| attribution | Yes | URLs canônicas das fontes desta resposta (lista de atribuição) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint, so restating 'read-only and idempotent' adds little; however, the description goes further by disclosing the live GET against the public IBGE Localidades API and the Markdown-table return format, which annotations do not convey. It stops short of error/rate-limit behavior, so not a full 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 one-line purpose, then tight feature bullets, examples, exclusions, and a single behavior line. No sentence is redundant, and the exclusion block is placed after usage so it does not bloat the opening.
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, the description need not explain return fields, and it correctly focuses on routing, scope, and invocation. Coverage of purpose, alternatives, parameter combinations, and execution semantics is complete for a read-only list tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The examples add meaning beyond the schema by showing that uf and busca can be combined (uf="MG", busca="Belo") and demonstrating accepted value forms, which the per-field schema text does not state.
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?
Opens with a specific verb+resource ('Lists Brazilian municipalities from IBGE') and immediately enumerates the three scoping modes (by state, all of Brazil, by name). It is clearly distinguishable from siblings like ibge_geocodigo and ibge_localidade without opening any 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 concrete invocation examples and an explicit 'Use a different tool when' block that names three alternatives with the condition that selects each. An agent can route correctly with no inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ibge_nomesFrequência e ranking de nomesARead-onlyIdempotent
Queries name frequency and rankings in Brazil (IBGE).
Features:
Name frequency (tipo='frequencia'):
Birth frequency by decade
Multiple names separated by comma
Filter by sex and locality
Name ranking (tipo='ranking'):
Most popular names
Filter by decade, sex, and locality
Available decades: 1930-2010
Examples:
Frequency of "Maria": tipo="frequencia", nomes="Maria"
Compare names: tipo="frequencia", nomes="João,José,Pedro"
2000s ranking: tipo="ranking", decada=2000
Female names: tipo="ranking", sexo="F"
Behavior: read-only and idempotent — a live GET against the public IBGE Nomes (Censo) API. Returns a Markdown table.
| Name | Required | Description | Default |
|---|---|---|---|
| sexo | No | Filtrar por sexo: M (masculino) ou F (feminino) | |
| tipo | Yes | Tipo de consulta: 'frequencia' para buscar nomes específicos ou 'ranking' para ver os mais populares | |
| nomes | No | Para tipo='frequencia': Nome ou nomes separados por vírgula | |
| decada | No | Para tipo='ranking': Década do ranking (ex: 1990, 2000, 2010) | |
| limite | No | Para tipo='ranking': Número de nomes (padrão: 20) | |
| localidade | No | Código IBGE da localidade (UF: 2 dígitos, Município: 7 dígitos) |
Output Schema
| Name | Required | Description |
|---|---|---|
| tipo | Yes | Tipo da consulta realizada |
| ranking | No | Resultado do ranking (presente quando tipo='ranking') |
| frequencia | No | Resultados de frequência (presente quando tipo='frequencia') |
| provenance | Yes | Bloco de proveniência (contrato v1.1): fonte, URL, período, extração e licença |
| attribution | Yes | URLs canônicas das fontes desta resposta (lista de atribuição) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, openWorld and non-destructive, and the description's 'read-only and idempotent — a live GET against the public IBGE Nomes (Censo) API' is consistent with them while adding useful context: the live-network nature and the Markdown-table response format. That return-shape disclosure is genuine added value beyond the annotation block.
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 purpose followed by a scannable feature list and examples; every section is useful. Minor redundancy exists (sex/locality filtering is stated under both modes, and the examples restate features already described), which keeps it from a 5.
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-mode query tool with a complete schema, an output schema, and full annotation coverage, nothing an agent needs is missing: modes, valid decades, filtering options, parameter examples, and response format are all present.
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 parameters are largely self-documenting and baseline would be 3. The description adds real meaning not in the schema: the valid decade window (1930–2010) and worked examples of comma-separated multi-name input and sex filtering.
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 verb and resource (queries name frequency and rankings from IBGE) and the two supported query modes are enumerated immediately after. Sibling tools cover entirely different IBGE resources (estados, municipios, sidra, malhas), so an agent can distinguish this one without ambiguity.
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?
Clear context is given for selecting each mode: tipo='frequencia' for specific/multiple names, tipo='ranking' for most-popular lists, reinforced by four concrete examples. It stops short of naming alternatives or exclusions (e.g., when to prefer ibge_censo or search), so it is strong but not fully routing-aware.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ibge_noticiasNotícias do IBGEARead-onlyIdempotent
Searches and lists already-published IBGE news articles and press releases.
Use this to find recent IBGE publications or announcements about a survey or topic — when an indicator was released, or news mentioning a term like "censo". Results are sorted newest-first; with no parameters it returns the 10 most recent items.
Parameters:
busca: free-text term to match (e.g. "PIB", "censo")
tipo: "release" (official publication of survey results) or "noticia" (general news); omit for both
de / ate: date range, format DD/MM/AAAA (e.g. de="01/01/2024", ate="31/12/2024")
destaque: true to return only featured items
quantidade: how many to return (default 10, max 100); pagina: page number to page through more
Each item returns: title, type (release/news), publication date, editoria (section), related products/surveys, a featured flag, a plain-text summary, and a link to the full article. The header reports the total count and current page.
Examples:
Latest 10 news: (no parameters)
Search census: busca="censo"
2024 news: de="01/01/2024", ate="31/12/2024"
Releases only: tipo="release"
Use a different tool when:
Scheduled/upcoming release dates (not yet published) → ibge_calendario
Behavior: read-only and idempotent — a live GET against the public IBGE Notícias API. Returns a Markdown list.
| Name | Required | Description | Default |
|---|---|---|---|
| de | No | Data inicial no formato DD/MM/AAAA (ex: 01/01/2024) | |
| ate | No | Data final no formato DD/MM/AAAA (ex: 31/12/2024) | |
| tipo | No | Tipo de publicação: 'release' ou 'noticia' | |
| busca | No | Termo para buscar nas notícias | |
| pagina | No | Número da página para paginação | |
| destaque | No | Filtrar apenas notícias em destaque | |
| quantidade | No | Quantidade de notícias a retornar (padrão: 10, máximo: 100) |
Output Schema
| Name | Required | Description |
|---|---|---|
| busca | No | Termo de busca aplicado, se houver |
| total | Yes | Total de notícias encontradas na consulta |
| pagina | Yes | Página atual |
| noticias | Yes | Lista de notícias retornadas |
| provenance | Yes | Bloco de proveniência (contrato v1.1): fonte, URL, período, extração e licença |
| attribution | Yes | URLs canônicas das fontes desta resposta (lista de atribuição) |
| totalPaginas | Yes | Número total de páginas |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive and openWorld, so the safety profile is covered. The description still adds real context: it is a live GET against the public IBGE Notícias API, results are sorted newest-first, the default page size is 10, and the header reports total count and page — useful operational detail 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?
Front-loaded one-line purpose, then clearly sectioned parameters, examples and exclusions; the newest-first/default-10 behavior is stated up top. It is on the long side, and the 'each item returns...' enumeration overlaps with the output schema, which is the only mild 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?
An output schema exists, so the description need not carry return values, yet it still summarizes them briefly. For a 7-parameter, read-only search tool, the description plus annotations and schema give an agent everything needed 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%, so the baseline is 3, but the description earns above it by explaining the semantic difference the schema omits: tipo='release' means official survey results versus 'noticia' for general news, plus the DD/MM/AAAA date format and quantidade's default/max. It adds meaning rather than restating 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?
States a specific verb and resource ('searches and lists already-published IBGE news articles and press releases') with the 'already-published' qualifier that separates it from scheduling tools. An agent can distinguish it from ibge_calendario and the indicator/survey tools without opening any 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?
Explicit when-to-use framing ('find recent IBGE publications or announcements... when an indicator was released'), four concrete examples, and a dedicated 'use a different tool when' section routing scheduled releases to ibge_calendario. Nothing is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ibge_paisesDados de paísesARead-onlyIdempotent
Queries international country data via IBGE.
Features:
List all countries (following UN M49 methodology)
Country details (area, languages, currency, location)
Search countries by name
Filter by region/continent
Available regions: americas, europa, africa, asia, oceania
Country codes: Use ISO-ALPHA-2 (e.g., BR, US, AR, PT, JP)
Examples:
List all: tipo="listar"
Brazil details: tipo="detalhes", pais="BR"
Search: tipo="buscar", busca="Argentina"
Americas countries: tipo="listar", regiao="americas"
Available indicators: tipo="indicadores"
Behavior: read-only and idempotent — queries the public IBGE Países API when data is requested and returns Markdown plus typed structuredContent with provenance.
| Name | Required | Description | Default |
|---|---|---|---|
| pais | No | Código ISO-ALPHA-2 do país (ex: BR, US, AR) ou código M49 | |
| tipo | No | Tipo de consulta: listar (todos), detalhes (de um país), indicadores, buscar | listar |
| busca | No | Termo de busca para filtrar países pelo nome | |
| regiao | No | Filtrar por região/continente: americas, europa, africa, asia, oceania | |
| indicadores | No | IDs dos indicadores separados por | (ex: 77819|77820), usados apenas com tipo=detalhes |
Output Schema
| Name | Required | Description |
|---|---|---|
| pais | No | Detalhes de um país específico (modo detalhes) |
| tipo | Yes | Modo de consulta que originou este resultado |
| busca | No | Termo de busca aplicado, se houver |
| total | No | Total de países encontrados (modos listar/buscar) |
| paises | No | Lista de países (modos listar/buscar). Limitada aos 50 primeiros na exibição |
| regiao | No | Filtro de região/continente aplicado, se houver |
| provenance | Yes | Bloco de proveniência (contrato v1.1): fonte, URL, período, extração e licença |
| attribution | Yes | URLs canônicas das fontes desta resposta (lista de atribuição) |
| indicadores | No | Indicadores disponíveis para consulta de países (modo indicadores) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and openWorldHint. The description adds context beyond annotations: it states the API source ('public IBGE Países API') and the return format ('Markdown plus typed structuredContent with provenance'). This extra detail is helpful, though it repeats the read-only/idempotent traits.
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 organized into features, examples, and behavior. It is appropriately sized with no redundant sentences; every section adds 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 tool's complexity (5 optional parameters, output schema present), the description covers all key aspects: what the tool does, parameter usage via examples, available regions, code formats, and behavioral notes. An agent has enough information to invoke it correctly without needing to consult other sources.
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 value by giving concrete examples of parameter combinations (e.g., tipo="detalhes", pais="BR") and clarifying that indicadores is used with tipo=detalhes, going beyond the schema's individual 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 states a specific verb and resource: 'Queries international country data via IBGE.' It then lists features that distinguish it from sibling tools like ibge_estados and ibge_municipios, making its scope immediately 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?
It provides concrete usage examples for different modes (listar, detalhes, buscar, filtrar por região) and lists available regions and code formats. However, it does not explicitly state when not to use this tool or name alternative sibling tools, 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.
ibge_pesquisasPesquisas do IBGEARead-onlyIdempotent
Lists available IBGE surveys and their tables.
Features:
List all IBGE surveys (Census, PNAD, GDP, etc.)
Search by name or code
Show details and tables of a specific survey
Categorize surveys by theme
Main surveys:
Census: Demographic, Agricultural, MUNIC
PNAD Contínua: Employment, income, education
National Accounts: GDP, investments
Economic Surveys: Industry, Commerce, Services
Price Indices: IPCA, INPC
Examples:
List all: (no parameters)
Search population: busca="população"
PNAD details: detalhes="pnad"
This lists surveys, not data. To find table codes use ibge_sidra_tabelas; to query data use ibge_sidra (or a wrapper: ibge_censo, ibge_indicadores, ibge_comparar, ibge_cidades).
Behavior: read-only and idempotent — a live GET against the public IBGE SIDRA/Pesquisas API. Returns a Markdown list.
| Name | Required | Description | Default |
|---|---|---|---|
| busca | No | Termo para buscar no nome ou ID da pesquisa | |
| detalhes | No | Código da pesquisa para ver detalhes e tabelas disponíveis |
Output Schema
| Name | Required | Description |
|---|---|---|
| modo | Yes | Modo de consulta que originou este resultado: lista de pesquisas ou detalhes de uma |
| busca | No | Termo de busca aplicado, se houver (modo lista) |
| total | No | Total de pesquisas encontradas (modo lista) |
| pesquisa | No | Detalhes de uma pesquisa específica (modo detalhes) |
| pesquisas | No | Lista de pesquisas (modo lista) |
| provenance | Yes | Bloco de proveniência (contrato v1.1): fonte, URL, período, extração e licença |
| attribution | Yes | URLs canônicas das fontes desta resposta (lista de atribuição) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, and the description largely restates these ('read-only and idempotent'), which earns no credit. It does add two useful facts beyond the structured fields: the call is a live GET against the public IBGE API and the return is a Markdown list. That is meaningful but thin, so a 3 fits.
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 and the critical routing sentence, then organized under Features/Main surveys/Examples/Behavior. It is somewhat long and the 'Main surveys' taxonomy is arguably optional, but each block is scannable and nothing is buried.
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 rich annotations, the description needn't explain return values in depth. It nonetheless covers purpose, scope, sibling routing, parameter examples and call behavior, leaving no gap an agent needs 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 coverage is 100%, so the baseline is 3, and the schema itself documents both busca and detalhes. The description goes slightly beyond by giving concrete usage examples (busca="população", detalhes="pnad"), showing that detalhes accepts a survey code and busca a free-text term, which clarifies intent beyond the terse schema strings.
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 available IBGE surveys and their tables') and immediately distinguishes itself from siblings by declaring 'This lists surveys, not data.' An agent can separate it from ibge_sidra, ibge_sidra_tabelas and the wrapper tools without opening any 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?
Explicit routing is provided: use ibge_sidra_tabelas to find table codes, ibge_sidra (or ibge_censo/ibge_indicadores/ibge_comparar/ibge_cidades) to query data. Both the when-to-use and the when-not-to-use cases are spelled out with named alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ibge_sidraConsulta de tabelas SIDRAARead-onlyIdempotent
Queries SIDRA tables (IBGE's Automatic Recovery System).
SIDRA contains data from IBGE surveys like Census, PNAD, GDP, etc.
Common tables:
6579: Population estimates (annual)
9514: Census 2022 population
200: Census population (1970-2010)
4714: Population, territorial area and density (Census 2022)
4099: Unemployment rate (PNAD Contínua, quarterly)
5436: Average real income (PNAD Contínua, quarterly)
6706: GDP at current prices
5938: GDP per capita
Territorial levels:
1: Brazil
2: Region (North, Northeast, etc.)
3: State (UF)
6: Municipality
7: Metropolitan Region
Examples:
Brazil population 2023: tabela="6579", periodos="2023"
Population by state: tabela="6579", nivel_territorial="3"
Census 2022 by municipality: tabela="9514", nivel_territorial="6", localidades="3550308"
Statistics mode: for largest/smallest/mean/median/distribution/ranking questions ("which municipality has the largest population?", "median GDP by state") use estatisticas=true — it computes min/max/mean/median/std-dev/labeled percentiles over ALL data rows BEFORE pagination and returns top/bottom rankings (default 10, cap 100 via topN), so one call answers what would otherwise require paging thousands of records. With agruparPor="" (e.g. "Unidade da Federação", "Ano") it ranks groups by descending sum, each with its own mini-distribution. Queries mixing several variables auto-group by "Variável" (units differ). SIDRA absence markers ("-", "..", "...", "X") are excluded from n. In this mode pagina/campos/formato are ignored and registros comes empty. Very large queries are refused by the source (since 2026-09-16 SIDRA tables are read through the Aggregates API, whose ceiling is lower than SIDRA's old 100,000-value cap: all municipalities × 12 yearly periods fails, × 8 works) — narrow periodos (e.g. "last 4") or raise nivel_territorial.
ibge_sidra is the low-level engine. Prefer a friendlier wrapper when it fits:
Census themes (1970–2022) → ibge_censo
Economic/social time series → ibge_indicadores
Rank/compare 2–10 localities → ibge_comparar
One municipality's panel → ibge_cidades Use ibge_sidra_tabelas and ibge_sidra_metadados to find a table code and its structure before querying.
Behavior: read-only and idempotent — a live GET against the public IBGE SIDRA API. Returns Markdown plus a typed structuredContent payload.
| Name | Required | Description | Default |
|---|---|---|---|
| topN | No | Tamanho das listas top/bottom quando estatisticas=true sem agruparPor (padrão: 10, máx: 100) | |
| campos | No | Selecionar apenas algumas colunas por rótulo, separadas por vírgula (ex: 'Valor,Ano'). Reduz o volume da resposta. Omitir traz todas. | |
| pagina | No | Página de resultados (100 registros por página) | |
| tabela | Yes | Código da tabela SIDRA (ex: 6579 para estimativas de população, 9514 para censo 2022) | |
| formato | No | Formato de saída: 'json' para dados brutos ou 'tabela' para formato legível | tabela |
| periodos | No | Períodos: 'last' para último, 'all' para todos, ou anos específicos (ex: 2020,2021,2022) | last |
| variaveis | No | IDs das variáveis separados por vírgula, ou 'allxp' para todas | allxp |
| agruparPor | No | Com estatisticas=true, agrupa pela coluna informada (rótulo, ex: 'Unidade da Federação', 'Ano') e ranqueia os grupos por soma decrescente (grupos[0] = maior total), cada grupo com sua mini-distribuição. Nome curto ('UF', 'estado', 'cidade', 'região') e rótulo parcial ('Federação') são resolvidos, e a resposta diz em `aviso` por qual coluna agrupou; rótulo que casa com duas colunas é recusado em vez de escolhido | |
| localidades | No | Códigos das localidades separados por vírgula, ou 'all' para todas | all |
| estatisticas | No | Computa estatísticas (mínimo/máximo/média/mediana/desvio-padrão/percentis) sobre TODOS os registros da consulta, antes da paginação, + ranking top/bottom. Use para 'qual o maior/menor', 'média', 'mediana', 'distribuição', 'ranking'. Quando true, ignora pagina, campos e formato | |
| classificacoes | No | Classificações no formato 'id[categorias]' (ex: '2[6794]' para sexo masculino) | |
| nivel_territorial | No | Nível territorial (código N): 1=Brasil, 2=Região, 3=UF, 6=Município, 7=Região Metropolitana, 8=Mesorregião, 9=Microrregião, 10=Distrito, 11=Subdistrito, 13=RM/RIDE, 14=RIDE, 15=Aglomeração Urbana, 17=Região Geográfica Imediata, 18=Região Geográfica Intermediária, 105=Macrorregião de Saúde, 106=Região de Saúde, 114=Aglomerado Subnormal, 127=Amazônia Legal, 128=Semiárido | 1 |
Output Schema
| Name | Required | Description |
|---|---|---|
| nome | Yes | Nome da tabela (quando conhecido) |
| tabela | Yes | Código da tabela SIDRA consultada |
| colunas | Yes | Rótulos das colunas, na ordem |
| paginacao | Yes | Metadados de paginação para continuação |
| registros | Yes | Registros da página atual: cada um mapeia rótulo da coluna -> valor |
| provenance | Yes | Bloco de proveniência (contrato v1.1): fonte, URL, período, extração e licença |
| attribution | Yes | URLs canônicas das fontes desta resposta (lista de atribuição) |
| estatisticas | No | Bloco estatístico presente quando estatisticas=true (registros vem vazio nesse modo) |
| totalRegistros | Yes | Total de registros de dados disponíveis (todas as páginas) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only/idempotent/open-world, but the description adds substantial context beyond them: statistics are computed BEFORE pagination, SIDRA absence markers ('-', '..', '...', 'X') are excluded from n, pagina/campos/formato are ignored in that mode, and the source-side Aggregates API ceiling refuses very large queries with a concrete workaround ('narrow periodos or raise nivel_territorial'). This is exactly the operational knowledge an agent needs and cannot get from structured fields.
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 structure is strong — purpose first, then table codes, territorial levels, worked examples, the dense statistics paragraph, and finally routing. It is long, but almost every section earns its place given 12 parameters and non-obvious semantics; the statistics paragraph is dense yet front-loads the trigger words and the mode's side effects.
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?
An output schema exists, so return values need no explanation, and the description covers what remains: valid table codes, full territorial-level codes, worked examples, mode interactions, source-side limits, and sibling routing. Nothing an agent needs in order 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, but the description adds cross-parameter interactions and intent: topN's default/cap is tied to estatisticas behavior, agruparPor is explained with short-label resolution and the 'aviso' feedback, and estatisticas is framed by the question types that should trigger it. The interaction between estatisticas and agruparPor (auto-grouping by 'Variável' when units differ) is only meaningful when read as a workflow.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Queries SIDRA tables') and immediately names the sibling wrappers it is not (ibge_censo, ibge_indicadores, ibge_comparar, ibge_cidades), positioning itself as the low-level engine. An agent can select or route away from it without opening any 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?
Explicit when-to-use routing rules map each question class (census themes, time series, rank/compare 2–10 localities, single-municipality panel) to the right sibling tool, and it tells the agent to consult ibge_sidra_tabelas/ibge_sidra_metadados first to find table codes. The statistics-mode trigger phrases ('largest/smallest/mean/median/distribution/ranking') give concrete selection criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ibge_sidra_metadadosMetadados de tabela SIDRAARead-onlyIdempotent
Returns metadata for a specific SIDRA table.
Features:
General info (name, survey, subject, periodicity)
Available territorial levels
Variable list with units
Classifications and categories
Available periods
Use this tool to understand table structure BEFORE querying data with ibge_sidra.
Examples:
Population table metadata: tabela="6579"
Census 2022 metadata: tabela="9514"
PNAD unemployment: tabela="4714"
Use this after finding a table code (ibge_sidra_tabelas) and before querying with ibge_sidra.
Behavior: read-only and idempotent — a live GET against the public IBGE SIDRA API. Returns Markdown.
| Name | Required | Description | Default |
|---|---|---|---|
| tabela | Yes | Código da tabela/agregado SIDRA (ex: '6579', '9514', '4714') | |
| incluir_periodos | No | Incluir lista de períodos disponíveis (padrão: true) | |
| incluir_localidades | No | Incluir níveis territoriais disponíveis (padrão: false) |
Output Schema
| Name | Required | Description |
|---|---|---|
| url | No | URL da tabela no SIDRA |
| nome | Yes | Nome da tabela |
| codigo | Yes | Código da tabela/agregado SIDRA |
| assunto | No | Assunto/tema da tabela |
| periodos | No | Períodos disponíveis para a tabela (quando incluir_periodos) |
| pesquisa | No | Nome da pesquisa de origem |
| variaveis | No | Variáveis da tabela, com unidades e classificações/categorias |
| provenance | Yes | Bloco de proveniência (contrato v1.1): fonte, URL, período, extração e licença |
| attribution | Yes | URLs canônicas das fontes desta resposta (lista de atribuição) |
| periodicidade | No | Periodicidade da pesquisa |
| niveisTerritoriais | No | Níveis territoriais disponíveis para a tabela |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint, so the safety profile is covered. The description still adds value by noting it is 'a live GET against the public IBGE SIDRA API' and 'Returns Markdown', which annotations do not 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?
Front-loaded with the core purpose, then well-organized Features/Examples/Behavior sections. The scheduling guidance is stated twice (once at the top of the usage note and again as 'Use this after... and before...'), a minor redundancy that keeps it short of a 5.
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?
An output schema exists, so return values need not be described. For a read-only metadata lookup the description covers purpose, usage ordering, alternatives, return format, and concrete code examples—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 description coverage is 100%, with all three parameters documented including defaults and examples, so the schema does the heavy lifting (baseline 3). The description's feature list (periods, territorial levels) loosely maps to the incluir_periodos/incluir_localidades toggles but adds no explicit parameter guidance 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?
States a specific verb+resource ('Returns metadata for a specific SIDRA table') and enumerates exactly what the metadata contains (name, survey, territorial levels, variables, classifications, periods). It is clearly distinguishable from the sibling ibge_sidra (query data) and ibge_sidra_tabelas (find table codes).
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 explicit ordering guidance: 'Use this after finding a table code (ibge_sidra_tabelas) and before querying with ibge_sidra', and 'to understand table structure BEFORE querying data'. Both the preceding and following alternatives are named with their selection conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ibge_sidra_tabelasBusca de tabelas SIDRAARead-onlyIdempotent
Lists and searches available SIDRA tables.
Features:
List all SIDRA tables (aggregates)
Search by table name: every word must match (AND), accents and case ignored, and everyday Portuguese is resolved to the IBGE's own wording (renda→rendimento, desemprego→desocupação, cidade→município, gênero→sexo); when that happens the response says so in notas_vocabulario
Filter by survey (Census, PNAD, GDP, etc.)
Shows code and name of each table
SIDRA contains data from various surveys:
Demographic Census
PNAD Contínua (employment, income)
National Accounts (GDP)
Industrial Survey
Agricultural Survey
Examples:
List tables: (no parameters)
Search population tables: busca="população"
Census tables: pesquisa="censo"
This is step 1 of the SIDRA workflow: find a table code → ibge_sidra_metadados (structure) → ibge_sidra (query). For common data, a wrapper is usually easier: ibge_censo, ibge_indicadores, ibge_comparar, ibge_cidades.
Behavior: read-only and idempotent — a live GET against the public IBGE SIDRA API. Returns a Markdown table.
| Name | Required | Description | Default |
|---|---|---|---|
| busca | No | Termos para buscar no nome das tabelas/agregados (sem distinção de acento ou caixa; AND entre as palavras; a palavra de todo dia é traduzida para a do IBGE — renda→rendimento, desemprego→desocupação, cidade→município) | |
| limite | No | Número máximo de resultados (padrão: 20) | |
| pesquisa | No | Filtrar por código ou nome da pesquisa (ex: 'censo', 'pnad', 'pib') |
Output Schema
| Name | Required | Description |
|---|---|---|
| busca | No | Termo de busca aplicado, se houver |
| total | Yes | Total de tabelas que correspondem aos critérios |
| tabelas | Yes | Lista de tabelas SIDRA retornadas |
| pesquisa | No | Filtro de pesquisa aplicado, se houver |
| provenance | Yes | Bloco de proveniência (contrato v1.1): fonte, URL, período, extração e licença |
| attribution | Yes | URLs canônicas das fontes desta resposta (lista de atribuição) |
| notas_vocabulario | No | Quando a busca foi ampliada para a palavra que o IBGE usa (renda→rendimento), diz qual |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (which already cover read-only/idempotent/destructive), it discloses that this is a live GET against the public API, that the response is a Markdown table, and a non-obvious behavioral trait: everyday Portuguese terms are resolved to IBGE wording (renda→rendimento, desemprego→desocupação) with the substitution surfaced in notas_vocabulario. That is real context an agent could not infer from 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?
Purpose is front-loaded and the sections (Features, surveys, Examples, workflow, Behavior) are well organized. The survey bullet list and the 'read-only and idempotent' restatement of annotations are mild padding, but the whole is still efficient for the information conveyed.
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 3-param, no-required, output-schema-backed lookup tool, the description covers purpose, usage, alternatives, workflow position, behavior, and output format. Nothing an agent needs to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents busca (accent/case/AND/translation), pesquisa, and limite. The description's examples (busca="população", pesquisa="censo") illustrate usage but largely restate semantics already present in the schema, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb pair (lists and searches) against a specific resource (SIDRA tables/aggregates). The description makes the boundary explicit versus ibge_sidra (query) and ibge_sidra_metadados (structure), so an agent can distinguish it from siblings without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly positions the tool as 'step 1 of the SIDRA workflow: find a table code → ibge_sidra_metadados → ibge_sidra', and names the wrapper alternatives ('ibge_censo, ibge_indicadores, ibge_comparar, ibge_cidades') that are easier for common data. This is a textbook when-to-use / when-to-use-something-else routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ibge_vizinhosMunicípios vizinhosARead-onlyIdempotent
Finds nearby/neighboring municipalities.
Features:
Search by IBGE code (7 digits) or municipality name
Without raio: returns municipalities that actually touch the reference municipality in the official municipal mesh
With raio: returns municipalities whose centroids fall within the requested radius in km
Optionally includes population data
Examples:
By code: municipio="3550308"
By name: municipio="Campinas", uf="SP"
With population: municipio="3550308", incluir_dados=true
Contiguity is topological (shared boundary); radius mode is an approximation based on centroid distance. For listing/searching municipalities, use ibge_municipios.
Behavior: read-only and idempotent — uses the public IBGE Localidades and Malhas v3 APIs; population enrichment, when requested, uses SIDRA. Returns a Markdown list.
| Name | Required | Description | Default |
|---|---|---|---|
| uf | No | Estado por sigla (SP), nome (São Paulo) ou código IBGE (35) — obrigatório se usar nome do município | |
| raio | No | Raio em km para buscar municípios próximos, calculado pela distância entre centróides municipais | |
| municipio | Yes | Código IBGE do município (7 dígitos) ou nome do município | |
| incluir_dados | No | Incluir dados populacionais dos vizinhos |
Output Schema
| Name | Required | Description |
|---|---|---|
| total | Yes | Quantidade de municípios encontrados |
| vizinhos | Yes | Lista de municípios contíguos ou próximos, conforme o critério espacial solicitado |
| municipio | Yes | Município de referência da consulta |
| provenance | Yes | Bloco de proveniência (contrato v1.1): fonte, URL, período, extração e licença |
| attribution | Yes | URLs canônicas das fontes desta resposta (lista de atribuição) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover safety (readOnly, idempotent, non-destructive, open world), yet the description still adds real value: the backing data sources (Localidades, Malhas v3, SIDRA for enrichment), the precision caveat that radius mode is an approximation while contiguity is topological, and the Markdown-list return format.
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 summary followed by features, examples, and a behavior note; every block is scannable. The features bullets partially restate what the schema already documents (code format, incluir_dados), which is mild redundancy rather than 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?
With an output schema present the description needn't explain return values, and it still notes the Markdown list output. All four parameters, the mode-selection rule, the sibling alternative, and the external data dependencies are covered for a tool of this 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 coverage is 100%, so the baseline is 3, but the description adds semantics the schema does not: the behavioral difference between supplying raio (centroid radius) and omitting it (mesh contiguity), plus the 7-digit code format and the conditional uf requirement, both reinforced by examples.
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?
Specific verb (finds) plus resource (nearby/neighboring municipalities) with the exact mechanism distinguished: topological contiguity via the official mesh vs. centroid-radius approximation. It also names the sibling to avoid (ibge_municipios) for plain listing/searching, so an agent can separate the two without reading 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?
Explicitly states the routing rule ("For listing/searching municipalities, use ibge_municipios") and the condition selecting each internal mode: no raio = shared-boundary contiguity, with raio = centroid-distance approximation. Three worked examples disambiguate code-vs-name invocation and uf requirement.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
searchBusca para Deep ResearchARead-onlyIdempotent
Searches the IBGE (Brazilian official statistics: SIDRA tables, municipalities, known indicators) catalog and returns up to 10 matching documents as { id, title, url }, ordered by relevance (an empty list means nothing matched).
This tool exists for the OpenAI Deep Research contract: ChatGPT deep research, company knowledge and research workflows over the Responses API require exactly the tools search and fetch. Pass one of the returned ids to fetch to read the document.
For direct questions and for data (values, series, rankings) prefer the ibge_* tools (ibge_sidra, ibge_cidades, ibge_indicadores, ibge_comparar…), which return the actual data with provenance — this is a catalog index, not a data query.
Query: natural language or keywords, Portuguese or English; accents and case are ignored.
Behavior: read-only and idempotent — the catalog comes from the public source and is cached in memory.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Termos de busca em linguagem natural ou palavras-chave (acentos e caixa são ignorados) |
Output Schema
| Name | Required | Description |
|---|---|---|
| results | Yes | Documentos encontrados, em ordem de relevância |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint, so the safety profile is covered; the description still adds the result cap, relevance ordering, the empty-list-means-no-match signal, and the in-memory caching of the public source. It restates 'read-only and idempotent' from the annotations, which is redundant, keeping it short of 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 action and return shape, then usage, then query semantics, then behavior — good ordering with no filler paragraphs. It is longer than strictly necessary because 'Behavior: read-only and idempotent' repeats the annotations, but every other sentence carries information an agent needs.
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?
An output schema exists, yet the description still summarizes the return form and the empty-result case so the contract is clear at selection time. All four needed pieces — what it returns, why it exists, when to prefer siblings, and how to feed `fetch` — are present for a single-parameter 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?
With 100% schema coverage and one parameter, the baseline is 3, and the description earns a bump by adding meaning the schema does not fully carry: queries may be natural language or keywords and may be in Portuguese *or English*, plus the explicit note that this is a catalog index rather than a data query. Accent/case insensitivity is duplicated from the schema but the language breadth is 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?
Names a specific verb (searches) and a concrete resource (the IBGE catalog of SIDRA tables, municipalities, indicators), states the exact return shape ({id, title, url}) and the cap of 10, and explicitly distinguishes itself from the ibge_* data tools and from `fetch`. An agent can route to it correctly without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit when-to-use (the Deep Research contract requires exactly `search` plus `fetch`), explicit when-not-to-use (direct questions and actual data values/series/rankings belong to `ibge_sidra`, `ibge_cidades`, etc.), and names the follow-up tool by describing the id handoff to `fetch`. Nothing about selection is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
24 tool updates
v0.7.2- Changed
fetch1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
ibge_calendario14 fields changed- changed
Output schema / properties / provenance / descriptionPrevious value: -"Bloco de proveniência (contrato v1.0): fonte, URL, período, extração e licença"New value: +"Bloco de proveniência (contrato v1.1): fonte, URL, período, extração e licença" - removed
Output schema / properties / provenance / properties / citation / descriptionRemoved value: -"Citação pronta para uso" - removed
Output schema / properties / provenance / properties / data_vintage / descriptionRemoved value: -"Período de referência do dado segundo a fonte; null se a fonte não expõe" - added
Output schema / properties / provenance / properties / derivation_noteAdded value: +{ + "type": "string" +} - added
Output schema / properties / provenance / properties / derivedAdded value: +{ + "type": "boolean" +} - added
Output schema / properties / provenance / properties / field_sourcesAdded value: +{ + "items": { + "additionalProperties": false, + "properties": { + "data_vintage": { + "type": [ + "string", + "null" + ] + }, + "dataset_id": { + "type": [ + "string", + "null" + ] + }, + "fields": { + "items": { + "type": "string" + }, + "minItems": 1, + "type": "array" + }, + "retrieved_at": { + "type": [ + "string", + "null" + ] + }, + "served_from_cache": { + "type": [ + "boolean", + "null" + ] + }, + "source_url": { + "type": "string" + } + }, + "required": [ + "fields", + "source_url", + "dataset_id", + "data_vintage", + "retrieved_at" + ], + "type": "object" + }, + "minItems": 1, + "type": "array" +} - removed
Output schema / properties / provenance / properties / license / descriptionRemoved value: -"Regime legal do dado" - added
Output schema / properties / provenance / properties / noticesAdded value: +{ + "items": { + "type": "string" + }, + "minItems": 1, + "type": "array" +} - added
Output schema / properties / provenance / properties / retrievalAdded value: +{ + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "anomalies": { + "items": { + "additionalProperties": false, + "properties": { + "count": { + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" + }, + "kind": { + "enum": [ + "timeout", + "network", + "http_4xx", + "http_5xx", + "rate_limited", + "malformed_body" + ], + "type": "string" + } + }, + "required": [ + "kind", + "count" + ], + "type": "object" + }, + "type": "array" + }, + "attempts": { + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" + }, + "requests": { + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" + }, + "unstable": { + "type": "boolean" + } + }, + "required": [ + "requests", + "attempts", + "anomalies", + "unstable" + ], + "type": "object" + }, + { + "type": "null" + } + ] +} - removed
Output schema / properties / provenance / properties / retrieved_at / descriptionRemoved value: -"Instante real da extração no upstream (ISO-8601, horário de Brasília)" - added
Output schema / properties / provenance / properties / revisionAdded value: +{ + "additionalProperties": false, + "properties": { + "note": { + "type": [ + "string", + "null" + ] + }, + "status": { + "enum": [ + "current", + "provisional", + "final" + ], + "type": "string" + } + }, + "required": [ + "status", + "note" + ], + "type": "object" +} - removed
Output schema / properties / provenance / properties / source / descriptionRemoved value: -"Fonte oficial do dado (API do IBGE consultada)" - removed
Output schema / properties / provenance / properties / source_url / descriptionRemoved value: -"URL canônica que reproduz a consulta" - changed
Output schema / properties / provenance / requiredPrevious value: -[ - "source", - "source_url", - "data_vintage", - "retrieved_at", - "citation", - "license" -]New value: +[ + "source", + "source_url", + "data_vintage", + "retrieved_at", + "retrieval", + "citation", + "license" +]
- Changed
ibge_censo14 fields changed- changed
Output schema / properties / provenance / descriptionPrevious value: -"Bloco de proveniência (contrato v1.0): fonte, URL, período, extração e licença"New value: +"Bloco de proveniência (contrato v1.1): fonte, URL, período, extração e licença" - removed
Output schema / properties / provenance / properties / citation / descriptionRemoved value: -"Citação pronta para uso" - removed
Output schema / properties / provenance / properties / data_vintage / descriptionRemoved value: -"Período de referência do dado segundo a fonte; null se a fonte não expõe" - added
Output schema / properties / provenance / properties / derivation_noteAdded value: +{ + "type": "string" +} - added
Output schema / properties / provenance / properties / derivedAdded value: +{ + "type": "boolean" +} - added
Output schema / properties / provenance / properties / field_sourcesAdded value: +{ + "items": { + "additionalProperties": false, + "properties": { + "data_vintage": { + "type": [ + "string", + "null" + ] + }, + "dataset_id": { + "type": [ + "string", + "null" + ] + }, + "fields": { + "items": { + "type": "string" + }, + "minItems": 1, + "type": "array" + }, + "retrieved_at": { + "type": [ + "string", + "null" + ] + }, + "served_from_cache": { + "type": [ + "boolean", + "null" + ] + }, + "source_url": { + "type": "string" + } + }, + "required": [ + "fields", + "source_url", + "dataset_id", + "data_vintage", + "retrieved_at" + ], + "type": "object" + }, + "minItems": 1, + "type": "array" +} - removed
Output schema / properties / provenance / properties / license / descriptionRemoved value: -"Regime legal do dado" - added
Output schema / properties / provenance / properties / noticesAdded value: +{ + "items": { + "type": "string" + }, + "minItems": 1, + "type": "array" +} - added
Output schema / properties / provenance / properties / retrievalAdded value: +{ + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "anomalies": { + "items": { + "additionalProperties": false, + "properties": { + "count": { + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" + }, + "kind": { + "enum": [ + "timeout", + "network", + "http_4xx", + "http_5xx", + "rate_limited", + "malformed_body" + ], + "type": "string" + } + }, + "required": [ + "kind", + "count" + ], + "type": "object" + }, + "type": "array" + }, + "attempts": { + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" + }, + "requests": { + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" + }, + "unstable": { + "type": "boolean" + } + }, + "required": [ + "requests", + "attempts", + "anomalies", + "unstable" + ], + "type": "object" + }, + { + "type": "null" + } + ] +} - removed
Output schema / properties / provenance / properties / retrieved_at / descriptionRemoved value: -"Instante real da extração no upstream (ISO-8601, horário de Brasília)" - added
Output schema / properties / provenance / properties / revisionAdded value: +{ + "additionalProperties": false, + "properties": { + "note": { + "type": [ + "string", + "null" + ] + }, + "status": { + "enum": [ + "current", + "provisional", + "final" + ], + "type": "string" + } + }, + "required": [ + "status", + "note" + ], + "type": "object" +} - removed
Output schema / properties / provenance / properties / source / descriptionRemoved value: -"Fonte oficial do dado (API do IBGE consultada)" - removed
Output schema / properties / provenance / properties / source_url / descriptionRemoved value: -"URL canônica que reproduz a consulta" - changed
Output schema / properties / provenance / requiredPrevious value: -[ - "source", - "source_url", - "data_vintage", - "retrieved_at", - "citation", - "license" -]New value: +[ + "source", + "source_url", + "data_vintage", + "retrieved_at", + "retrieval", + "citation", + "license" +]
- Changed
ibge_cidades14 fields changed- changed
Output schema / properties / provenance / descriptionPrevious value: -"Bloco de proveniência (contrato v1.0): fonte, URL, período, extração e licença"New value: +"Bloco de proveniência (contrato v1.1): fonte, URL, período, extração e licença" - removed
Output schema / properties / provenance / properties / citation / descriptionRemoved value: -"Citação pronta para uso" - removed
Output schema / properties / provenance / properties / data_vintage / descriptionRemoved value: -"Período de referência do dado segundo a fonte; null se a fonte não expõe" - added
Output schema / properties / provenance / properties / derivation_noteAdded value: +{ + "type": "string" +} - added
Output schema / properties / provenance / properties / derivedAdded value: +{ + "type": "boolean" +} - added
Output schema / properties / provenance / properties / field_sourcesAdded value: +{ + "items": { + "additionalProperties": false, + "properties": { + "data_vintage": { + "type": [ + "string", + "null" + ] + }, + "dataset_id": { + "type": [ + "string", + "null" + ] + }, + "fields": { + "items": { + "type": "string" + }, + "minItems": 1, + "type": "array" + }, + "retrieved_at": { + "type": [ + "string", + "null" + ] + }, + "served_from_cache": { + "type": [ + "boolean", + "null" + ] + }, + "source_url": { + "type": "string" + } + }, + "required": [ + "fields", + "source_url", + "dataset_id", + "data_vintage", + "retrieved_at" + ], + "type": "object" + }, + "minItems": 1, + "type": "array" +} - removed
Output schema / properties / provenance / properties / license / descriptionRemoved value: -"Regime legal do dado" - added
Output schema / properties / provenance / properties / noticesAdded value: +{ + "items": { + "type": "string" + }, + "minItems": 1, + "type": "array" +} - added
Output schema / properties / provenance / properties / retrievalAdded value: +{ + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "anomalies": { + "items": { + "additionalProperties": false, + "properties": { + "count": { + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" + }, + "kind": { + "enum": [ + "timeout", + "network", + "http_4xx", + "http_5xx", + "rate_limited", + "malformed_body" + ], + "type": "string" + } + }, + "required": [ + "kind", + "count" + ], + "type": "object" + }, + "type": "array" + }, + "attempts": { + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" + }, + "requests": { + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" + }, + "unstable": { + "type": "boolean" + } + }, + "required": [ + "requests", + "attempts", + "anomalies", + "unstable" + ], + "type": "object" + }, + { + "type": "null" + } + ] +} - removed
Output schema / properties / provenance / properties / retrieved_at / descriptionRemoved value: -"Instante real da extração no upstream (ISO-8601, horário de Brasília)" - added
Output schema / properties / provenance / properties / revisionAdded value: +{ + "additionalProperties": false, + "properties": { + "note": { + "type": [ + "string", + "null" + ] + }, + "status": { + "enum": [ + "current", + "provisional", + "final" + ], + "type": "string" + } + }, + "required": [ + "status", + "note" + ], + "type": "object" +} - removed
Output schema / properties / provenance / properties / source / descriptionRemoved value: -"Fonte oficial do dado (API do IBGE consultada)" - removed
Output schema / properties / provenance / properties / source_url / descriptionRemoved value: -"URL canônica que reproduz a consulta" - changed
Output schema / properties / provenance / requiredPrevious value: -[ - "source", - "source_url", - "data_vintage", - "retrieved_at", - "citation", - "license" -]New value: +[ + "source", + "source_url", + "data_vintage", + "retrieved_at", + "retrieval", + "citation", + "license" +]
- Changed
ibge_cnae14 fields changed- changed
Output schema / properties / provenance / descriptionPrevious value: -"Bloco de proveniência (contrato v1.0): fonte, URL, período, extração e licença"New value: +"Bloco de proveniência (contrato v1.1): fonte, URL, período, extração e licença" - removed
Output schema / properties / provenance / properties / citation / descriptionRemoved value: -"Citação pronta para uso" - removed
Output schema / properties / provenance / properties / data_vintage / descriptionRemoved value: -"Período de referência do dado segundo a fonte; null se a fonte não expõe" - added
Output schema / properties / provenance / properties / derivation_noteAdded value: +{ + "type": "string" +} - added
Output schema / properties / provenance / properties / derivedAdded value: +{ + "type": "boolean" +} - added
Output schema / properties / provenance / properties / field_sourcesAdded value: +{ + "items": { + "additionalProperties": false, + "properties": { + "data_vintage": { + "type": [ + "string", + "null" + ] + }, + "dataset_id": { + "type": [ + "string", + "null" + ] + }, + "fields": { + "items": { + "type": "string" + }, + "minItems": 1, + "type": "array" + }, + "retrieved_at": { + "type": [ + "string", + "null" + ] + }, + "served_from_cache": { + "type": [ + "boolean", + "null" + ] + }, + "source_url": { + "type": "string" + } + }, + "required": [ + "fields", + "source_url", + "dataset_id", + "data_vintage", + "retrieved_at" + ], + "type": "object" + }, + "minItems": 1, + "type": "array" +} - removed
Output schema / properties / provenance / properties / license / descriptionRemoved value: -"Regime legal do dado" - added
Output schema / properties / provenance / properties / noticesAdded value: +{ + "items": { + "type": "string" + }, + "minItems": 1, + "type": "array" +} - added
Output schema / properties / provenance / properties / retrievalAdded value: +{ + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "anomalies": { + "items": { + "additionalProperties": false, + "properties": { + "count": { + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" + }, + "kind": { + "enum": [ + "timeout", + "network", + "http_4xx", + "http_5xx", + "rate_limited", + "malformed_body" + ], + "type": "string" + } + }, + "required": [ + "kind", + "count" + ], + "type": "object" + }, + "type": "array" + }, + "attempts": { + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" + }, + "requests": { + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" + }, + "unstable": { + "type": "boolean" + } + }, + "required": [ + "requests", + "attempts", + "anomalies", + "unstable" + ], + "type": "object" + }, + { + "type": "null" + } + ] +} - removed
Output schema / properties / provenance / properties / retrieved_at / descriptionRemoved value: -"Instante real da extração no upstream (ISO-8601, horário de Brasília)" - added
Output schema / properties / provenance / properties / revisionAdded value: +{ + "additionalProperties": false, + "properties": { + "note": { + "type": [ + "string", + "null" + ] + }, + "status": { + "enum": [ + "current", + "provisional", + "final" + ], + "type": "string" + } + }, + "required": [ + "status", + "note" + ], + "type": "object" +} - removed
Output schema / properties / provenance / properties / source / descriptionRemoved value: -"Fonte oficial do dado (API do IBGE consultada)" - removed
Output schema / properties / provenance / properties / source_url / descriptionRemoved value: -"URL canônica que reproduz a consulta" - changed
Output schema / properties / provenance / requiredPrevious value: -[ - "source", - "source_url", - "data_vintage", - "retrieved_at", - "citation", - "license" -]New value: +[ + "source", + "source_url", + "data_vintage", + "retrieved_at", + "retrieval", + "citation", + "license" +]
- Changed
ibge_comparar14 fields changed- changed
Output schema / properties / provenance / descriptionPrevious value: -"Bloco de proveniência (contrato v1.0): fonte, URL, período, extração e licença"New value: +"Bloco de proveniência (contrato v1.1): fonte, URL, período, extração e licença" - removed
Output schema / properties / provenance / properties / citation / descriptionRemoved value: -"Citação pronta para uso" - removed
Output schema / properties / provenance / properties / data_vintage / descriptionRemoved value: -"Período de referência do dado segundo a fonte; null se a fonte não expõe" - added
Output schema / properties / provenance / properties / derivation_noteAdded value: +{ + "type": "string" +} - added
Output schema / properties / provenance / properties / derivedAdded value: +{ + "type": "boolean" +} - added
Output schema / properties / provenance / properties / field_sourcesAdded value: +{ + "items": { + "additionalProperties": false, + "properties": { + "data_vintage": { + "type": [ + "string", + "null" + ] + }, + "dataset_id": { + "type": [ + "string", + "null" + ] + }, + "fields": { + "items": { + "type": "string" + }, + "minItems": 1, + "type": "array" + }, + "retrieved_at": { + "type": [ + "string", + "null" + ] + }, + "served_from_cache": { + "type": [ + "boolean", + "null" + ] + }, + "source_url": { + "type": "string" + } + }, + "required": [ + "fields", + "source_url", + "dataset_id", + "data_vintage", + "retrieved_at" + ], + "type": "object" + }, + "minItems": 1, + "type": "array" +} - removed
Output schema / properties / provenance / properties / license / descriptionRemoved value: -"Regime legal do dado" - added
Output schema / properties / provenance / properties / noticesAdded value: +{ + "items": { + "type": "string" + }, + "minItems": 1, + "type": "array" +} - added
Output schema / properties / provenance / properties / retrievalAdded value: +{ + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "anomalies": { + "items": { + "additionalProperties": false, + "properties": { + "count": { + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" + }, + "kind": { + "enum": [ + "timeout", + "network", + "http_4xx", + "http_5xx", + "rate_limited", + "malformed_body" + ], + "type": "string" + } + }, + "required": [ + "kind", + "count" + ], + "type": "object" + }, + "type": "array" + }, + "attempts": { + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" + }, + "requests": { + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" + }, + "unstable": { + "type": "boolean" + } + }, + "required": [ + "requests", + "attempts", + "anomalies", + "unstable" + ], + "type": "object" + }, + { + "type": "null" + } + ] +} - removed
Output schema / properties / provenance / properties / retrieved_at / descriptionRemoved value: -"Instante real da extração no upstream (ISO-8601, horário de Brasília)" - added
Output schema / properties / provenance / properties / revisionAdded value: +{ + "additionalProperties": false, + "properties": { + "note": { + "type": [ + "string", + "null" + ] + }, + "status": { + "enum": [ + "current", + "provisional", + "final" + ], + "type": "string" + } + }, + "required": [ + "status", + "note" + ], + "type": "object" +} - removed
Output schema / properties / provenance / properties / source / descriptionRemoved value: -"Fonte oficial do dado (API do IBGE consultada)" - removed
Output schema / properties / provenance / properties / source_url / descriptionRemoved value: -"URL canônica que reproduz a consulta" - changed
Output schema / properties / provenance / requiredPrevious value: -[ - "source", - "source_url", - "data_vintage", - "retrieved_at", - "citation", - "license" -]New value: +[ + "source", + "source_url", + "data_vintage", + "retrieved_at", + "retrieval", + "citation", + "license" +]
- Changed
ibge_datasaude16 fields changed- changed
Input schema / properties / indicador / descriptionPrevious value: -"Indicador de saúde. Disponíveis:\n- mortalidade_infantil: Taxa de mortalidade infantil\n- esperanca_vida: Esperança de vida ao nascer\n- nascidos_vivos: Nascidos vivos\n- obitos: Óbitos por local de residência\n- fecundidade: Taxa de fecundidade\n- saneamento_agua: Abastecimento de água\n- saneamento_esgoto: Esgotamento sanitário\n- plano_saude: Cobertura de plano de saúde\n- autoavaliacao_saude: Autoavaliação de saúde boa ou muito boa\n- listar: Lista indicadores disponíveis"New value: +"Indicador de saúde. Disponíveis:\n- mortalidade_infantil: Taxa de mortalidade infantil\n- esperanca_vida: Esperança de vida ao nascer\n- nascidos_vivos: Nascidos vivos\n- obitos: Óbitos por local de residência\n- fecundidade: Taxa de fecundidade\n- saneamento_agua: Abastecimento de água\n- saneamento_esgoto: Esgotamento sanitário\n- plano_saude: Cobertura de plano de saúde\n- autoavaliacao_saude: Autoavaliação de saúde boa ou muito boa\n- listar: Lista indicadores disponíveis e os níveis territoriais válidos por indicador\n\nA disponibilidade territorial varia por indicador. Antes de usar nivel_territorial=6, consulte indicador=\"listar\"." - changed
Input schema / properties / nivel_territorial / descriptionPrevious value: -"Nível territorial (código N): 1=Brasil, 2=Região, 3=UF, 6=Município"New value: +"Nível territorial (código N): 1=Brasil, 2=Região, 3=UF, 6=Município. A disponibilidade é específica por indicador; use indicador='listar' para consultar os níveis válidos." - changed
Output schema / properties / provenance / descriptionPrevious value: -"Bloco de proveniência (contrato v1.0): fonte, URL, período, extração e licença"New value: +"Bloco de proveniência (contrato v1.1): fonte, URL, período, extração e licença" - removed
Output schema / properties / provenance / properties / citation / descriptionRemoved value: -"Citação pronta para uso" - removed
Output schema / properties / provenance / properties / data_vintage / descriptionRemoved value: -"Período de referência do dado segundo a fonte; null se a fonte não expõe" - added
Output schema / properties / provenance / properties / derivation_noteAdded value: +{ + "type": "string" +} - added
Output schema / properties / provenance / properties / derivedAdded value: +{ + "type": "boolean" +} - added
Output schema / properties / provenance / properties / field_sourcesAdded value: +{ + "items": { + "additionalProperties": false, + "properties": { + "data_vintage": { + "type": [ + "string", + "null" + ] + }, + "dataset_id": { + "type": [ + "string", + "null" + ] + }, + "fields": { + "items": { + "type": "string" + }, + "minItems": 1, + "type": "array" + }, + "retrieved_at": { + "type": [ + "string", + "null" + ] + }, + "served_from_cache": { + "type": [ + "boolean", + "null" + ] + }, + "source_url": { + "type": "string" + } + }, + "required": [ + "fields", + "source_url", + "dataset_id", + "data_vintage", + "retrieved_at" + ], + "type": "object" + }, + "minItems": 1, + "type": "array" +} - removed
Output schema / properties / provenance / properties / license / descriptionRemoved value: -"Regime legal do dado" - added
Output schema / properties / provenance / properties / noticesAdded value: +{ + "items": { + "type": "string" + }, + "minItems": 1, + "type": "array" +} - added
Output schema / properties / provenance / properties / retrievalAdded value: +{ + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "anomalies": { + "items": { + "additionalProperties": false, + "properties": { + "count": { + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" + }, + "kind": { + "enum": [ + "timeout", + "network", + "http_4xx", + "http_5xx", + "rate_limited", + "malformed_body" + ], + "type": "string" + } + }, + "required": [ + "kind", + "count" + ], + "type": "object" + }, + "type": "array" + }, + "attempts": { + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" + }, + "requests": { + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" + }, + "unstable": { + "type": "boolean" + } + }, + "required": [ + "requests", + "attempts", + "anomalies", + "unstable" + ], + "type": "object" + }, + { + "type": "null" + } + ] +} - removed
Output schema / properties / provenance / properties / retrieved_at / descriptionRemoved value: -"Instante real da extração no upstream (ISO-8601, horário de Brasília)" - added
Output schema / properties / provenance / properties / revisionAdded value: +{ + "additionalProperties": false, + "properties": { + "note": { + "type": [ + "string", + "null" + ] + }, + "status": { + "enum": [ + "current", + "provisional", + "final" + ], + "type": "string" + } + }, + "required": [ + "status", + "note" + ], + "type": "object" +} - removed
Output schema / properties / provenance / properties / source / descriptionRemoved value: -"Fonte oficial do dado (API do IBGE consultada)" - removed
Output schema / properties / provenance / properties / source_url / descriptionRemoved value: -"URL canônica que reproduz a consulta" - changed
Output schema / properties / provenance / requiredPrevious value: -[ - "source", - "source_url", - "data_vintage", - "retrieved_at", - "citation", - "license" -]New value: +[ + "source", + "source_url", + "data_vintage", + "retrieved_at", + "retrieval", + "citation", + "license" +]
- Changed
ibge_estados14 fields changed- changed
Output schema / properties / provenance / descriptionPrevious value: -"Bloco de proveniência (contrato v1.0): fonte, URL, período, extração e licença"New value: +"Bloco de proveniência (contrato v1.1): fonte, URL, período, extração e licença" - removed
Output schema / properties / provenance / properties / citation / descriptionRemoved value: -"Citação pronta para uso" - removed
Output schema / properties / provenance / properties / data_vintage / descriptionRemoved value: -"Período de referência do dado segundo a fonte; null se a fonte não expõe" - added
Output schema / properties / provenance / properties / derivation_noteAdded value: +{ + "type": "string" +} - added
Output schema / properties / provenance / properties / derivedAdded value: +{ + "type": "boolean" +} - added
Output schema / properties / provenance / properties / field_sourcesAdded value: +{ + "items": { + "additionalProperties": false, + "properties": { + "data_vintage": { + "type": [ + "string", + "null" + ] + }, + "dataset_id": { + "type": [ + "string", + "null" + ] + }, + "fields": { + "items": { + "type": "string" + }, + "minItems": 1, + "type": "array" + }, + "retrieved_at": { + "type": [ + "string", + "null" + ] + }, + "served_from_cache": { + "type": [ + "boolean", + "null" + ] + }, + "source_url": { + "type": "string" + } + }, + "required": [ + "fields", + "source_url", + "dataset_id", + "data_vintage", + "retrieved_at" + ], + "type": "object" + }, + "minItems": 1, + "type": "array" +} - removed
Output schema / properties / provenance / properties / license / descriptionRemoved value: -"Regime legal do dado" - added
Output schema / properties / provenance / properties / noticesAdded value: +{ + "items": { + "type": "string" + }, + "minItems": 1, + "type": "array" +} - added
Output schema / properties / provenance / properties / retrievalAdded value: +{ + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "anomalies": { + "items": { + "additionalProperties": false, + "properties": { + "count": { + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" + }, + "kind": { + "enum": [ + "timeout", + "network", + "http_4xx", + "http_5xx", + "rate_limited", + "malformed_body" + ], + "type": "string" + } + }, + "required": [ + "kind", + "count" + ], + "type": "object" + }, + "type": "array" + }, + "attempts": { + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" + }, + "requests": { + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" + }, + "unstable": { + "type": "boolean" + } + }, + "required": [ + "requests", + "attempts", + "anomalies", + "unstable" + ], + "type": "object" + }, + { + "type": "null" + } + ] +} - removed
Output schema / properties / provenance / properties / retrieved_at / descriptionRemoved value: -"Instante real da extração no upstream (ISO-8601, horário de Brasília)" - added
Output schema / properties / provenance / properties / revisionAdded value: +{ + "additionalProperties": false, + "properties": { + "note": { + "type": [ + "string", + "null" + ] + }, + "status": { + "enum": [ + "current", + "provisional", + "final" + ], + "type": "string" + } + }, + "required": [ + "status", + "note" + ], + "type": "object" +} - removed
Output schema / properties / provenance / properties / source / descriptionRemoved value: -"Fonte oficial do dado (API do IBGE consultada)" - removed
Output schema / properties / provenance / properties / source_url / descriptionRemoved value: -"URL canônica que reproduz a consulta" - changed
Output schema / properties / provenance / requiredPrevious value: -[ - "source", - "source_url", - "data_vintage", - "retrieved_at", - "citation", - "license" -]New value: +[ + "source", + "source_url", + "data_vintage", + "retrieved_at", + "retrieval", + "citation", + "license" +]
- Changed
ibge_geocodigo14 fields changed- changed
Output schema / properties / provenance / descriptionPrevious value: -"Bloco de proveniência (contrato v1.0): fonte, URL, período, extração e licença"New value: +"Bloco de proveniência (contrato v1.1): fonte, URL, período, extração e licença" - removed
Output schema / properties / provenance / properties / citation / descriptionRemoved value: -"Citação pronta para uso" - removed
Output schema / properties / provenance / properties / data_vintage / descriptionRemoved value: -"Período de referência do dado segundo a fonte; null se a fonte não expõe" - added
Output schema / properties / provenance / properties / derivation_noteAdded value: +{ + "type": "string" +} - added
Output schema / properties / provenance / properties / derivedAdded value: +{ + "type": "boolean" +} - added
Output schema / properties / provenance / properties / field_sourcesAdded value: +{ + "items": { + "additionalProperties": false, + "properties": { + "data_vintage": { + "type": [ + "string", + "null" + ] + }, + "dataset_id": { + "type": [ + "string", + "null" + ] + }, + "fields": { + "items": { + "type": "string" + }, + "minItems": 1, + "type": "array" + }, + "retrieved_at": { + "type": [ + "string", + "null" + ] + }, + "served_from_cache": { + "type": [ + "boolean", + "null" + ] + }, + "source_url": { + "type": "string" + } + }, + "required": [ + "fields", + "source_url", + "dataset_id", + "data_vintage", + "retrieved_at" + ], + "type": "object" + }, + "minItems": 1, + "type": "array" +} - removed
Output schema / properties / provenance / properties / license / descriptionRemoved value: -"Regime legal do dado" - added
Output schema / properties / provenance / properties / noticesAdded value: +{ + "items": { + "type": "string" + }, + "minItems": 1, + "type": "array" +} - added
Output schema / properties / provenance / properties / retrievalAdded value: +{ + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "anomalies": { + "items": { + "additionalProperties": false, + "properties": { + "count": { + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" + }, + "kind": { + "enum": [ + "timeout", + "network", + "http_4xx", + "http_5xx", + "rate_limited", + "malformed_body" + ], + "type": "string" + } + }, + "required": [ + "kind", + "count" + ], + "type": "object" + }, + "type": "array" + }, + "attempts": { + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" + }, + "requests": { + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" + }, + "unstable": { + "type": "boolean" + } + }, + "required": [ + "requests", + "attempts", + "anomalies", + "unstable" + ], + "type": "object" + }, + { + "type": "null" + } + ] +} - removed
Output schema / properties / provenance / properties / retrieved_at / descriptionRemoved value: -"Instante real da extração no upstream (ISO-8601, horário de Brasília)" - added
Output schema / properties / provenance / properties / revisionAdded value: +{ + "additionalProperties": false, + "properties": { + "note": { + "type": [ + "string", + "null" + ] + }, + "status": { + "enum": [ + "current", + "provisional", + "final" + ], + "type": "string" + } + }, + "required": [ + "status", + "note" + ], + "type": "object" +} - removed
Output schema / properties / provenance / properties / source / descriptionRemoved value: -"Fonte oficial do dado (API do IBGE consultada)" - removed
Output schema / properties / provenance / properties / source_url / descriptionRemoved value: -"URL canônica que reproduz a consulta" - changed
Output schema / properties / provenance / requiredPrevious value: -[ - "source", - "source_url", - "data_vintage", - "retrieved_at", - "citation", - "license" -]New value: +[ + "source", + "source_url", + "data_vintage", + "retrieved_at", + "retrieval", + "citation", + "license" +]
- Changed
ibge_indicadores14 fields changed- changed
Output schema / properties / provenance / descriptionPrevious value: -"Bloco de proveniência (contrato v1.0): fonte, URL, período, extração e licença"New value: +"Bloco de proveniência (contrato v1.1): fonte, URL, período, extração e licença" - removed
Output schema / properties / provenance / properties / citation / descriptionRemoved value: -"Citação pronta para uso" - removed
Output schema / properties / provenance / properties / data_vintage / descriptionRemoved value: -"Período de referência do dado segundo a fonte; null se a fonte não expõe" - added
Output schema / properties / provenance / properties / derivation_noteAdded value: +{ + "type": "string" +} - added
Output schema / properties / provenance / properties / derivedAdded value: +{ + "type": "boolean" +} - added
Output schema / properties / provenance / properties / field_sourcesAdded value: +{ + "items": { + "additionalProperties": false, + "properties": { + "data_vintage": { + "type": [ + "string", + "null" + ] + }, + "dataset_id": { + "type": [ + "string", + "null" + ] + }, + "fields": { + "items": { + "type": "string" + }, + "minItems": 1, + "type": "array" + }, + "retrieved_at": { + "type": [ + "string", + "null" + ] + }, + "served_from_cache": { + "type": [ + "boolean", + "null" + ] + }, + "source_url": { + "type": "string" + } + }, + "required": [ + "fields", + "source_url", + "dataset_id", + "data_vintage", + "retrieved_at" + ], + "type": "object" + }, + "minItems": 1, + "type": "array" +} - removed
Output schema / properties / provenance / properties / license / descriptionRemoved value: -"Regime legal do dado" - added
Output schema / properties / provenance / properties / noticesAdded value: +{ + "items": { + "type": "string" + }, + "minItems": 1, + "type": "array" +} - added
Output schema / properties / provenance / properties / retrievalAdded value: +{ + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "anomalies": { + "items": { + "additionalProperties": false, + "properties": { + "count": { + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" + }, + "kind": { + "enum": [ + "timeout", + "network", + "http_4xx", + "http_5xx", + "rate_limited", + "malformed_body" + ], + "type": "string" + } + }, + "required": [ + "kind", + "count" + ], + "type": "object" + }, + "type": "array" + }, + "attempts": { + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" + }, + "requests": { + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" + }, + "unstable": { + "type": "boolean" + } + }, + "required": [ + "requests", + "attempts", + "anomalies", + "unstable" + ], + "type": "object" + }, + { + "type": "null" + } + ] +} - removed
Output schema / properties / provenance / properties / retrieved_at / descriptionRemoved value: -"Instante real da extração no upstream (ISO-8601, horário de Brasília)" - added
Output schema / properties / provenance / properties / revisionAdded value: +{ + "additionalProperties": false, + "properties": { + "note": { + "type": [ + "string", + "null" + ] + }, + "status": { + "enum": [ + "current", + "provisional", + "final" + ], + "type": "string" + } + }, + "required": [ + "status", + "note" + ], + "type": "object" +} - removed
Output schema / properties / provenance / properties / source / descriptionRemoved value: -"Fonte oficial do dado (API do IBGE consultada)" - removed
Output schema / properties / provenance / properties / source_url / descriptionRemoved value: -"URL canônica que reproduz a consulta" - changed
Output schema / properties / provenance / requiredPrevious value: -[ - "source", - "source_url", - "data_vintage", - "retrieved_at", - "citation", - "license" -]New value: +[ + "source", + "source_url", + "data_vintage", + "retrieved_at", + "retrieval", + "citation", + "license" +]
- Changed
ibge_localidade14 fields changed- changed
Output schema / properties / provenance / descriptionPrevious value: -"Bloco de proveniência (contrato v1.0): fonte, URL, período, extração e licença"New value: +"Bloco de proveniência (contrato v1.1): fonte, URL, período, extração e licença" - removed
Output schema / properties / provenance / properties / citation / descriptionRemoved value: -"Citação pronta para uso" - removed
Output schema / properties / provenance / properties / data_vintage / descriptionRemoved value: -"Período de referência do dado segundo a fonte; null se a fonte não expõe" - added
Output schema / properties / provenance / properties / derivation_noteAdded value: +{ + "type": "string" +} - added
Output schema / properties / provenance / properties / derivedAdded value: +{ + "type": "boolean" +} - added
Output schema / properties / provenance / properties / field_sourcesAdded value: +{ + "items": { + "additionalProperties": false, + "properties": { + "data_vintage": { + "type": [ + "string", + "null" + ] + }, + "dataset_id": { + "type": [ + "string", + "null" + ] + }, + "fields": { + "items": { + "type": "string" + }, + "minItems": 1, + "type": "array" + }, + "retrieved_at": { + "type": [ + "string", + "null" + ] + }, + "served_from_cache": { + "type": [ + "boolean", + "null" + ] + }, + "source_url": { + "type": "string" + } + }, + "required": [ + "fields", + "source_url", + "dataset_id", + "data_vintage", + "retrieved_at" + ], + "type": "object" + }, + "minItems": 1, + "type": "array" +} - removed
Output schema / properties / provenance / properties / license / descriptionRemoved value: -"Regime legal do dado" - added
Output schema / properties / provenance / properties / noticesAdded value: +{ + "items": { + "type": "string" + }, + "minItems": 1, + "type": "array" +} - added
Output schema / properties / provenance / properties / retrievalAdded value: +{ + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "anomalies": { + "items": { + "additionalProperties": false, + "properties": { + "count": { + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" + }, + "kind": { + "enum": [ + "timeout", + "network", + "http_4xx", + "http_5xx", + "rate_limited", + "malformed_body" + ], + "type": "string" + } + }, + "required": [ + "kind", + "count" + ], + "type": "object" + }, + "type": "array" + }, + "attempts": { + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" + }, + "requests": { + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" + }, + "unstable": { + "type": "boolean" + } + }, + "required": [ + "requests", + "attempts", + "anomalies", + "unstable" + ], + "type": "object" + }, + { + "type": "null" + } + ] +} - removed
Output schema / properties / provenance / properties / retrieved_at / descriptionRemoved value: -"Instante real da extração no upstream (ISO-8601, horário de Brasília)" - added
Output schema / properties / provenance / properties / revisionAdded value: +{ + "additionalProperties": false, + "properties": { + "note": { + "type": [ + "string", + "null" + ] + }, + "status": { + "enum": [ + "current", + "provisional", + "final" + ], + "type": "string" + } + }, + "required": [ + "status", + "note" + ], + "type": "object" +} - removed
Output schema / properties / provenance / properties / source / descriptionRemoved value: -"Fonte oficial do dado (API do IBGE consultada)" - removed
Output schema / properties / provenance / properties / source_url / descriptionRemoved value: -"URL canônica que reproduz a consulta" - changed
Output schema / properties / provenance / requiredPrevious value: -[ - "source", - "source_url", - "data_vintage", - "retrieved_at", - "citation", - "license" -]New value: +[ + "source", + "source_url", + "data_vintage", + "retrieved_at", + "retrieval", + "citation", + "license" +]
- Changed
ibge_malhas15 fields changed- changed
Output schema / properties / provenance / descriptionPrevious value: -"Bloco de proveniência (contrato v1.0): fonte, URL, período, extração e licença"New value: +"Bloco de proveniência (contrato v1.1): fonte, URL, período, extração e licença" - removed
Output schema / properties / provenance / properties / citation / descriptionRemoved value: -"Citação pronta para uso" - removed
Output schema / properties / provenance / properties / data_vintage / descriptionRemoved value: -"Período de referência do dado segundo a fonte; null se a fonte não expõe" - added
Output schema / properties / provenance / properties / derivation_noteAdded value: +{ + "type": "string" +} - added
Output schema / properties / provenance / properties / derivedAdded value: +{ + "type": "boolean" +} - added
Output schema / properties / provenance / properties / field_sourcesAdded value: +{ + "items": { + "additionalProperties": false, + "properties": { + "data_vintage": { + "type": [ + "string", + "null" + ] + }, + "dataset_id": { + "type": [ + "string", + "null" + ] + }, + "fields": { + "items": { + "type": "string" + }, + "minItems": 1, + "type": "array" + }, + "retrieved_at": { + "type": [ + "string", + "null" + ] + }, + "served_from_cache": { + "type": [ + "boolean", + "null" + ] + }, + "source_url": { + "type": "string" + } + }, + "required": [ + "fields", + "source_url", + "dataset_id", + "data_vintage", + "retrieved_at" + ], + "type": "object" + }, + "minItems": 1, + "type": "array" +} - removed
Output schema / properties / provenance / properties / license / descriptionRemoved value: -"Regime legal do dado" - added
Output schema / properties / provenance / properties / noticesAdded value: +{ + "items": { + "type": "string" + }, + "minItems": 1, + "type": "array" +} - added
Output schema / properties / provenance / properties / retrievalAdded value: +{ + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "anomalies": { + "items": { + "additionalProperties": false, + "properties": { + "count": { + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" + }, + "kind": { + "enum": [ + "timeout", + "network", + "http_4xx", + "http_5xx", + "rate_limited", + "malformed_body" + ], + "type": "string" + } + }, + "required": [ + "kind", + "count" + ], + "type": "object" + }, + "type": "array" + }, + "attempts": { + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" + }, + "requests": { + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" + }, + "unstable": { + "type": "boolean" + } + }, + "required": [ + "requests", + "attempts", + "anomalies", + "unstable" + ], + "type": "object" + }, + { + "type": "null" + } + ] +} - removed
Output schema / properties / provenance / properties / retrieved_at / descriptionRemoved value: -"Instante real da extração no upstream (ISO-8601, horário de Brasília)" - added
Output schema / properties / provenance / properties / revisionAdded value: +{ + "additionalProperties": false, + "properties": { + "note": { + "type": [ + "string", + "null" + ] + }, + "status": { + "enum": [ + "current", + "provisional", + "final" + ], + "type": "string" + } + }, + "required": [ + "status", + "note" + ], + "type": "object" +} - removed
Output schema / properties / provenance / properties / source / descriptionRemoved value: -"Fonte oficial do dado (API do IBGE consultada)" - removed
Output schema / properties / provenance / properties / source_url / descriptionRemoved value: -"URL canônica que reproduz a consulta" - changed
Output schema / properties / provenance / requiredPrevious value: -[ - "source", - "source_url", - "data_vintage", - "retrieved_at", - "citation", - "license" -]New value: +[ + "source", + "source_url", + "data_vintage", + "retrieved_at", + "retrieval", + "citation", + "license" +] - added
Output schema / properties / resumo_geometricoAdded value: +{ + "additionalProperties": false, + "description": "Resumo cartográfico derivado da geometria retornada", + "properties": { + "bbox": { + "description": "[longitude mínima, latitude mínima, longitude máxima, latitude máxima]", + "items": false, + "maxItems": 4, + "minItems": 4, + "prefixItems": [ + { + "type": "number" + }, + { + "type": "number" + }, + { + "type": "number" + }, + { + "type": "number" + } + ], + "type": "array" + }, + "centroide": { + "additionalProperties": false, + "description": "Centróide dos vértices da malha, em longitude/latitude", + "properties": { + "latitude": { + "type": "number" + }, + "longitude": { + "type": "number" + } + }, + "required": [ + "longitude", + "latitude" + ], + "type": "object" + }, + "feicoes": { + "description": "Quantidade de feições na resposta", + "maximum": 9007199254740991, + "minimum": 0, + "type": "integer" + }, + "propriedades": { + "description": "Chaves de propriedades observadas nas feições retornadas", + "items": { + "type": "string" + }, + "type": "array" + }, + "tipos_geometria": { + "additionalProperties": { + "maximum": 9007199254740991, + "minimum": 0, + "type": "integer" + }, + "description": "Contagem por tipo de geometria", + "propertyNames": { + "type": "string" + }, + "type": "object" + } + }, + "required": [ + "feicoes", + "tipos_geometria", + "propriedades" + ], + "type": "object" +}
- Changed
ibge_malhas_tema14 fields changed- changed
Output schema / properties / provenance / descriptionPrevious value: -"Bloco de proveniência (contrato v1.0): fonte, URL, período, extração e licença"New value: +"Bloco de proveniência (contrato v1.1): fonte, URL, período, extração e licença" - removed
Output schema / properties / provenance / properties / citation / descriptionRemoved value: -"Citação pronta para uso" - removed
Output schema / properties / provenance / properties / data_vintage / descriptionRemoved value: -"Período de referência do dado segundo a fonte; null se a fonte não expõe" - added
Output schema / properties / provenance / properties / derivation_noteAdded value: +{ + "type": "string" +} - added
Output schema / properties / provenance / properties / derivedAdded value: +{ + "type": "boolean" +} - added
Output schema / properties / provenance / properties / field_sourcesAdded value: +{ + "items": { + "additionalProperties": false, + "properties": { + "data_vintage": { + "type": [ + "string", + "null" + ] + }, + "dataset_id": { + "type": [ + "string", + "null" + ] + }, + "fields": { + "items": { + "type": "string" + }, + "minItems": 1, + "type": "array" + }, + "retrieved_at": { + "type": [ + "string", + "null" + ] + }, + "served_from_cache": { + "type": [ + "boolean", + "null" + ] + }, + "source_url": { + "type": "string" + } + }, + "required": [ + "fields", + "source_url", + "dataset_id", + "data_vintage", + "retrieved_at" + ], + "type": "object" + }, + "minItems": 1, + "type": "array" +} - removed
Output schema / properties / provenance / properties / license / descriptionRemoved value: -"Regime legal do dado" - added
Output schema / properties / provenance / properties / noticesAdded value: +{ + "items": { + "type": "string" + }, + "minItems": 1, + "type": "array" +} - added
Output schema / properties / provenance / properties / retrievalAdded value: +{ + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "anomalies": { + "items": { + "additionalProperties": false, + "properties": { + "count": { + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" + }, + "kind": { + "enum": [ + "timeout", + "network", + "http_4xx", + "http_5xx", + "rate_limited", + "malformed_body" + ], + "type": "string" + } + }, + "required": [ + "kind", + "count" + ], + "type": "object" + }, + "type": "array" + }, + "attempts": { + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" + }, + "requests": { + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" + }, + "unstable": { + "type": "boolean" + } + }, + "required": [ + "requests", + "attempts", + "anomalies", + "unstable" + ], + "type": "object" + }, + { + "type": "null" + } + ] +} - removed
Output schema / properties / provenance / properties / retrieved_at / descriptionRemoved value: -"Instante real da extração no upstream (ISO-8601, horário de Brasília)" - added
Output schema / properties / provenance / properties / revisionAdded value: +{ + "additionalProperties": false, + "properties": { + "note": { + "type": [ + "string", + "null" + ] + }, + "status": { + "enum": [ + "current", + "provisional", + "final" + ], + "type": "string" + } + }, + "required": [ + "status", + "note" + ], + "type": "object" +} - removed
Output schema / properties / provenance / properties / source / descriptionRemoved value: -"Fonte oficial do dado (API do IBGE consultada)" - removed
Output schema / properties / provenance / properties / source_url / descriptionRemoved value: -"URL canônica que reproduz a consulta" - changed
Output schema / properties / provenance / requiredPrevious value: -[ - "source", - "source_url", - "data_vintage", - "retrieved_at", - "citation", - "license" -]New value: +[ + "source", + "source_url", + "data_vintage", + "retrieved_at", + "retrieval", + "citation", + "license" +]
- Added
ibge_mapa - Changed
ibge_municipios14 fields changed- changed
Output schema / properties / provenance / descriptionPrevious value: -"Bloco de proveniência (contrato v1.0): fonte, URL, período, extração e licença"New value: +"Bloco de proveniência (contrato v1.1): fonte, URL, período, extração e licença" - removed
Output schema / properties / provenance / properties / citation / descriptionRemoved value: -"Citação pronta para uso" - removed
Output schema / properties / provenance / properties / data_vintage / descriptionRemoved value: -"Período de referência do dado segundo a fonte; null se a fonte não expõe" - added
Output schema / properties / provenance / properties / derivation_noteAdded value: +{ + "type": "string" +} - added
Output schema / properties / provenance / properties / derivedAdded value: +{ + "type": "boolean" +} - added
Output schema / properties / provenance / properties / field_sourcesAdded value: +{ + "items": { + "additionalProperties": false, + "properties": { + "data_vintage": { + "type": [ + "string", + "null" + ] + }, + "dataset_id": { + "type": [ + "string", + "null" + ] + }, + "fields": { + "items": { + "type": "string" + }, + "minItems": 1, + "type": "array" + }, + "retrieved_at": { + "type": [ + "string", + "null" + ] + }, + "served_from_cache": { + "type": [ + "boolean", + "null" + ] + }, + "source_url": { + "type": "string" + } + }, + "required": [ + "fields", + "source_url", + "dataset_id", + "data_vintage", + "retrieved_at" + ], + "type": "object" + }, + "minItems": 1, + "type": "array" +} - removed
Output schema / properties / provenance / properties / license / descriptionRemoved value: -"Regime legal do dado" - added
Output schema / properties / provenance / properties / noticesAdded value: +{ + "items": { + "type": "string" + }, + "minItems": 1, + "type": "array" +} - added
Output schema / properties / provenance / properties / retrievalAdded value: +{ + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "anomalies": { + "items": { + "additionalProperties": false, + "properties": { + "count": { + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" + }, + "kind": { + "enum": [ + "timeout", + "network", + "http_4xx", + "http_5xx", + "rate_limited", + "malformed_body" + ], + "type": "string" + } + }, + "required": [ + "kind", + "count" + ], + "type": "object" + }, + "type": "array" + }, + "attempts": { + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" + }, + "requests": { + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" + }, + "unstable": { + "type": "boolean" + } + }, + "required": [ + "requests", + "attempts", + "anomalies", + "unstable" + ], + "type": "object" + }, + { + "type": "null" + } + ] +} - removed
Output schema / properties / provenance / properties / retrieved_at / descriptionRemoved value: -"Instante real da extração no upstream (ISO-8601, horário de Brasília)" - added
Output schema / properties / provenance / properties / revisionAdded value: +{ + "additionalProperties": false, + "properties": { + "note": { + "type": [ + "string", + "null" + ] + }, + "status": { + "enum": [ + "current", + "provisional", + "final" + ], + "type": "string" + } + }, + "required": [ + "status", + "note" + ], + "type": "object" +} - removed
Output schema / properties / provenance / properties / source / descriptionRemoved value: -"Fonte oficial do dado (API do IBGE consultada)" - removed
Output schema / properties / provenance / properties / source_url / descriptionRemoved value: -"URL canônica que reproduz a consulta" - changed
Output schema / properties / provenance / requiredPrevious value: -[ - "source", - "source_url", - "data_vintage", - "retrieved_at", - "citation", - "license" -]New value: +[ + "source", + "source_url", + "data_vintage", + "retrieved_at", + "retrieval", + "citation", + "license" +]
- Changed
ibge_nomes14 fields changed- changed
Output schema / properties / provenance / descriptionPrevious value: -"Bloco de proveniência (contrato v1.0): fonte, URL, período, extração e licença"New value: +"Bloco de proveniência (contrato v1.1): fonte, URL, período, extração e licença" - removed
Output schema / properties / provenance / properties / citation / descriptionRemoved value: -"Citação pronta para uso" - removed
Output schema / properties / provenance / properties / data_vintage / descriptionRemoved value: -"Período de referência do dado segundo a fonte; null se a fonte não expõe" - added
Output schema / properties / provenance / properties / derivation_noteAdded value: +{ + "type": "string" +} - added
Output schema / properties / provenance / properties / derivedAdded value: +{ + "type": "boolean" +} - added
Output schema / properties / provenance / properties / field_sourcesAdded value: +{ + "items": { + "additionalProperties": false, + "properties": { + "data_vintage": { + "type": [ + "string", + "null" + ] + }, + "dataset_id": { + "type": [ + "string", + "null" + ] + }, + "fields": { + "items": { + "type": "string" + }, + "minItems": 1, + "type": "array" + }, + "retrieved_at": { + "type": [ + "string", + "null" + ] + }, + "served_from_cache": { + "type": [ + "boolean", + "null" + ] + }, + "source_url": { + "type": "string" + } + }, + "required": [ + "fields", + "source_url", + "dataset_id", + "data_vintage", + "retrieved_at" + ], + "type": "object" + }, + "minItems": 1, + "type": "array" +} - removed
Output schema / properties / provenance / properties / license / descriptionRemoved value: -"Regime legal do dado" - added
Output schema / properties / provenance / properties / noticesAdded value: +{ + "items": { + "type": "string" + }, + "minItems": 1, + "type": "array" +} - added
Output schema / properties / provenance / properties / retrievalAdded value: +{ + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "anomalies": { + "items": { + "additionalProperties": false, + "properties": { + "count": { + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" + }, + "kind": { + "enum": [ + "timeout", + "network", + "http_4xx", + "http_5xx", + "rate_limited", + "malformed_body" + ], + "type": "string" + } + }, + "required": [ + "kind", + "count" + ], + "type": "object" + }, + "type": "array" + }, + "attempts": { + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" + }, + "requests": { + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" + }, + "unstable": { + "type": "boolean" + } + }, + "required": [ + "requests", + "attempts", + "anomalies", + "unstable" + ], + "type": "object" + }, + { + "type": "null" + } + ] +} - removed
Output schema / properties / provenance / properties / retrieved_at / descriptionRemoved value: -"Instante real da extração no upstream (ISO-8601, horário de Brasília)" - added
Output schema / properties / provenance / properties / revisionAdded value: +{ + "additionalProperties": false, + "properties": { + "note": { + "type": [ + "string", + "null" + ] + }, + "status": { + "enum": [ + "current", + "provisional", + "final" + ], + "type": "string" + } + }, + "required": [ + "status", + "note" + ], + "type": "object" +} - removed
Output schema / properties / provenance / properties / source / descriptionRemoved value: -"Fonte oficial do dado (API do IBGE consultada)" - removed
Output schema / properties / provenance / properties / source_url / descriptionRemoved value: -"URL canônica que reproduz a consulta" - changed
Output schema / properties / provenance / requiredPrevious value: -[ - "source", - "source_url", - "data_vintage", - "retrieved_at", - "citation", - "license" -]New value: +[ + "source", + "source_url", + "data_vintage", + "retrieved_at", + "retrieval", + "citation", + "license" +]
- Changed
ibge_noticias14 fields changed- changed
Output schema / properties / provenance / descriptionPrevious value: -"Bloco de proveniência (contrato v1.0): fonte, URL, período, extração e licença"New value: +"Bloco de proveniência (contrato v1.1): fonte, URL, período, extração e licença" - removed
Output schema / properties / provenance / properties / citation / descriptionRemoved value: -"Citação pronta para uso" - removed
Output schema / properties / provenance / properties / data_vintage / descriptionRemoved value: -"Período de referência do dado segundo a fonte; null se a fonte não expõe" - added
Output schema / properties / provenance / properties / derivation_noteAdded value: +{ + "type": "string" +} - added
Output schema / properties / provenance / properties / derivedAdded value: +{ + "type": "boolean" +} - added
Output schema / properties / provenance / properties / field_sourcesAdded value: +{ + "items": { + "additionalProperties": false, + "properties": { + "data_vintage": { + "type": [ + "string", + "null" + ] + }, + "dataset_id": { + "type": [ + "string", + "null" + ] + }, + "fields": { + "items": { + "type": "string" + }, + "minItems": 1, + "type": "array" + }, + "retrieved_at": { + "type": [ + "string", + "null" + ] + }, + "served_from_cache": { + "type": [ + "boolean", + "null" + ] + }, + "source_url": { + "type": "string" + } + }, + "required": [ + "fields", + "source_url", + "dataset_id", + "data_vintage", + "retrieved_at" + ], + "type": "object" + }, + "minItems": 1, + "type": "array" +} - removed
Output schema / properties / provenance / properties / license / descriptionRemoved value: -"Regime legal do dado" - added
Output schema / properties / provenance / properties / noticesAdded value: +{ + "items": { + "type": "string" + }, + "minItems": 1, + "type": "array" +} - added
Output schema / properties / provenance / properties / retrievalAdded value: +{ + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "anomalies": { + "items": { + "additionalProperties": false, + "properties": { + "count": { + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" + }, + "kind": { + "enum": [ + "timeout", + "network", + "http_4xx", + "http_5xx", + "rate_limited", + "malformed_body" + ], + "type": "string" + } + }, + "required": [ + "kind", + "count" + ], + "type": "object" + }, + "type": "array" + }, + "attempts": { + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" + }, + "requests": { + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" + }, + "unstable": { + "type": "boolean" + } + }, + "required": [ + "requests", + "attempts", + "anomalies", + "unstable" + ], + "type": "object" + }, + { + "type": "null" + } + ] +} - removed
Output schema / properties / provenance / properties / retrieved_at / descriptionRemoved value: -"Instante real da extração no upstream (ISO-8601, horário de Brasília)" - added
Output schema / properties / provenance / properties / revisionAdded value: +{ + "additionalProperties": false, + "properties": { + "note": { + "type": [ + "string", + "null" + ] + }, + "status": { + "enum": [ + "current", + "provisional", + "final" + ], + "type": "string" + } + }, + "required": [ + "status", + "note" + ], + "type": "object" +} - removed
Output schema / properties / provenance / properties / source / descriptionRemoved value: -"Fonte oficial do dado (API do IBGE consultada)" - removed
Output schema / properties / provenance / properties / source_url / descriptionRemoved value: -"URL canônica que reproduz a consulta" - changed
Output schema / properties / provenance / requiredPrevious value: -[ - "source", - "source_url", - "data_vintage", - "retrieved_at", - "citation", - "license" -]New value: +[ + "source", + "source_url", + "data_vintage", + "retrieved_at", + "retrieval", + "citation", + "license" +]
- Changed
ibge_paises14 fields changed- changed
Output schema / properties / provenance / descriptionPrevious value: -"Bloco de proveniência (contrato v1.0): fonte, URL, período, extração e licença"New value: +"Bloco de proveniência (contrato v1.1): fonte, URL, período, extração e licença" - removed
Output schema / properties / provenance / properties / citation / descriptionRemoved value: -"Citação pronta para uso" - removed
Output schema / properties / provenance / properties / data_vintage / descriptionRemoved value: -"Período de referência do dado segundo a fonte; null se a fonte não expõe" - added
Output schema / properties / provenance / properties / derivation_noteAdded value: +{ + "type": "string" +} - added
Output schema / properties / provenance / properties / derivedAdded value: +{ + "type": "boolean" +} - added
Output schema / properties / provenance / properties / field_sourcesAdded value: +{ + "items": { + "additionalProperties": false, + "properties": { + "data_vintage": { + "type": [ + "string", + "null" + ] + }, + "dataset_id": { + "type": [ + "string", + "null" + ] + }, + "fields": { + "items": { + "type": "string" + }, + "minItems": 1, + "type": "array" + }, + "retrieved_at": { + "type": [ + "string", + "null" + ] + }, + "served_from_cache": { + "type": [ + "boolean", + "null" + ] + }, + "source_url": { + "type": "string" + } + }, + "required": [ + "fields", + "source_url", + "dataset_id", + "data_vintage", + "retrieved_at" + ], + "type": "object" + }, + "minItems": 1, + "type": "array" +} - removed
Output schema / properties / provenance / properties / license / descriptionRemoved value: -"Regime legal do dado" - added
Output schema / properties / provenance / properties / noticesAdded value: +{ + "items": { + "type": "string" + }, + "minItems": 1, + "type": "array" +} - added
Output schema / properties / provenance / properties / retrievalAdded value: +{ + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "anomalies": { + "items": { + "additionalProperties": false, + "properties": { + "count": { + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" + }, + "kind": { + "enum": [ + "timeout", + "network", + "http_4xx", + "http_5xx", + "rate_limited", + "malformed_body" + ], + "type": "string" + } + }, + "required": [ + "kind", + "count" + ], + "type": "object" + }, + "type": "array" + }, + "attempts": { + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" + }, + "requests": { + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" + }, + "unstable": { + "type": "boolean" + } + }, + "required": [ + "requests", + "attempts", + "anomalies", + "unstable" + ], + "type": "object" + }, + { + "type": "null" + } + ] +} - removed
Output schema / properties / provenance / properties / retrieved_at / descriptionRemoved value: -"Instante real da extração no upstream (ISO-8601, horário de Brasília)" - added
Output schema / properties / provenance / properties / revisionAdded value: +{ + "additionalProperties": false, + "properties": { + "note": { + "type": [ + "string", + "null" + ] + }, + "status": { + "enum": [ + "current", + "provisional", + "final" + ], + "type": "string" + } + }, + "required": [ + "status", + "note" + ], + "type": "object" +} - removed
Output schema / properties / provenance / properties / source / descriptionRemoved value: -"Fonte oficial do dado (API do IBGE consultada)" - removed
Output schema / properties / provenance / properties / source_url / descriptionRemoved value: -"URL canônica que reproduz a consulta" - changed
Output schema / properties / provenance / requiredPrevious value: -[ - "source", - "source_url", - "data_vintage", - "retrieved_at", - "citation", - "license" -]New value: +[ + "source", + "source_url", + "data_vintage", + "retrieved_at", + "retrieval", + "citation", + "license" +]
- Changed
ibge_pesquisas14 fields changed- changed
Output schema / properties / provenance / descriptionPrevious value: -"Bloco de proveniência (contrato v1.0): fonte, URL, período, extração e licença"New value: +"Bloco de proveniência (contrato v1.1): fonte, URL, período, extração e licença" - removed
Output schema / properties / provenance / properties / citation / descriptionRemoved value: -"Citação pronta para uso" - removed
Output schema / properties / provenance / properties / data_vintage / descriptionRemoved value: -"Período de referência do dado segundo a fonte; null se a fonte não expõe" - added
Output schema / properties / provenance / properties / derivation_noteAdded value: +{ + "type": "string" +} - added
Output schema / properties / provenance / properties / derivedAdded value: +{ + "type": "boolean" +} - added
Output schema / properties / provenance / properties / field_sourcesAdded value: +{ + "items": { + "additionalProperties": false, + "properties": { + "data_vintage": { + "type": [ + "string", + "null" + ] + }, + "dataset_id": { + "type": [ + "string", + "null" + ] + }, + "fields": { + "items": { + "type": "string" + }, + "minItems": 1, + "type": "array" + }, + "retrieved_at": { + "type": [ + "string", + "null" + ] + }, + "served_from_cache": { + "type": [ + "boolean", + "null" + ] + }, + "source_url": { + "type": "string" + } + }, + "required": [ + "fields", + "source_url", + "dataset_id", + "data_vintage", + "retrieved_at" + ], + "type": "object" + }, + "minItems": 1, + "type": "array" +} - removed
Output schema / properties / provenance / properties / license / descriptionRemoved value: -"Regime legal do dado" - added
Output schema / properties / provenance / properties / noticesAdded value: +{ + "items": { + "type": "string" + }, + "minItems": 1, + "type": "array" +} - added
Output schema / properties / provenance / properties / retrievalAdded value: +{ + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "anomalies": { + "items": { + "additionalProperties": false, + "properties": { + "count": { + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" + }, + "kind": { + "enum": [ + "timeout", + "network", + "http_4xx", + "http_5xx", + "rate_limited", + "malformed_body" + ], + "type": "string" + } + }, + "required": [ + "kind", + "count" + ], + "type": "object" + }, + "type": "array" + }, + "attempts": { + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" + }, + "requests": { + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" + }, + "unstable": { + "type": "boolean" + } + }, + "required": [ + "requests", + "attempts", + "anomalies", + "unstable" + ], + "type": "object" + }, + { + "type": "null" + } + ] +} - removed
Output schema / properties / provenance / properties / retrieved_at / descriptionRemoved value: -"Instante real da extração no upstream (ISO-8601, horário de Brasília)" - added
Output schema / properties / provenance / properties / revisionAdded value: +{ + "additionalProperties": false, + "properties": { + "note": { + "type": [ + "string", + "null" + ] + }, + "status": { + "enum": [ + "current", + "provisional", + "final" + ], + "type": "string" + } + }, + "required": [ + "status", + "note" + ], + "type": "object" +} - removed
Output schema / properties / provenance / properties / source / descriptionRemoved value: -"Fonte oficial do dado (API do IBGE consultada)" - removed
Output schema / properties / provenance / properties / source_url / descriptionRemoved value: -"URL canônica que reproduz a consulta" - changed
Output schema / properties / provenance / requiredPrevious value: -[ - "source", - "source_url", - "data_vintage", - "retrieved_at", - "citation", - "license" -]New value: +[ + "source", + "source_url", + "data_vintage", + "retrieved_at", + "retrieval", + "citation", + "license" +]
- Changed
ibge_sidra14 fields changed- changed
Output schema / properties / provenance / descriptionPrevious value: -"Bloco de proveniência (contrato v1.0): fonte, URL, período, extração e licença"New value: +"Bloco de proveniência (contrato v1.1): fonte, URL, período, extração e licença" - removed
Output schema / properties / provenance / properties / citation / descriptionRemoved value: -"Citação pronta para uso" - removed
Output schema / properties / provenance / properties / data_vintage / descriptionRemoved value: -"Período de referência do dado segundo a fonte; null se a fonte não expõe" - added
Output schema / properties / provenance / properties / derivation_noteAdded value: +{ + "type": "string" +} - added
Output schema / properties / provenance / properties / derivedAdded value: +{ + "type": "boolean" +} - added
Output schema / properties / provenance / properties / field_sourcesAdded value: +{ + "items": { + "additionalProperties": false, + "properties": { + "data_vintage": { + "type": [ + "string", + "null" + ] + }, + "dataset_id": { + "type": [ + "string", + "null" + ] + }, + "fields": { + "items": { + "type": "string" + }, + "minItems": 1, + "type": "array" + }, + "retrieved_at": { + "type": [ + "string", + "null" + ] + }, + "served_from_cache": { + "type": [ + "boolean", + "null" + ] + }, + "source_url": { + "type": "string" + } + }, + "required": [ + "fields", + "source_url", + "dataset_id", + "data_vintage", + "retrieved_at" + ], + "type": "object" + }, + "minItems": 1, + "type": "array" +} - removed
Output schema / properties / provenance / properties / license / descriptionRemoved value: -"Regime legal do dado" - added
Output schema / properties / provenance / properties / noticesAdded value: +{ + "items": { + "type": "string" + }, + "minItems": 1, + "type": "array" +} - added
Output schema / properties / provenance / properties / retrievalAdded value: +{ + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "anomalies": { + "items": { + "additionalProperties": false, + "properties": { + "count": { + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" + }, + "kind": { + "enum": [ + "timeout", + "network", + "http_4xx", + "http_5xx", + "rate_limited", + "malformed_body" + ], + "type": "string" + } + }, + "required": [ + "kind", + "count" + ], + "type": "object" + }, + "type": "array" + }, + "attempts": { + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" + }, + "requests": { + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" + }, + "unstable": { + "type": "boolean" + } + }, + "required": [ + "requests", + "attempts", + "anomalies", + "unstable" + ], + "type": "object" + }, + { + "type": "null" + } + ] +} - removed
Output schema / properties / provenance / properties / retrieved_at / descriptionRemoved value: -"Instante real da extração no upstream (ISO-8601, horário de Brasília)" - added
Output schema / properties / provenance / properties / revisionAdded value: +{ + "additionalProperties": false, + "properties": { + "note": { + "type": [ + "string", + "null" + ] + }, + "status": { + "enum": [ + "current", + "provisional", + "final" + ], + "type": "string" + } + }, + "required": [ + "status", + "note" + ], + "type": "object" +} - removed
Output schema / properties / provenance / properties / source / descriptionRemoved value: -"Fonte oficial do dado (API do IBGE consultada)" - removed
Output schema / properties / provenance / properties / source_url / descriptionRemoved value: -"URL canônica que reproduz a consulta" - changed
Output schema / properties / provenance / requiredPrevious value: -[ - "source", - "source_url", - "data_vintage", - "retrieved_at", - "citation", - "license" -]New value: +[ + "source", + "source_url", + "data_vintage", + "retrieved_at", + "retrieval", + "citation", + "license" +]
- Changed
ibge_sidra_metadados14 fields changed- changed
Output schema / properties / provenance / descriptionPrevious value: -"Bloco de proveniência (contrato v1.0): fonte, URL, período, extração e licença"New value: +"Bloco de proveniência (contrato v1.1): fonte, URL, período, extração e licença" - removed
Output schema / properties / provenance / properties / citation / descriptionRemoved value: -"Citação pronta para uso" - removed
Output schema / properties / provenance / properties / data_vintage / descriptionRemoved value: -"Período de referência do dado segundo a fonte; null se a fonte não expõe" - added
Output schema / properties / provenance / properties / derivation_noteAdded value: +{ + "type": "string" +} - added
Output schema / properties / provenance / properties / derivedAdded value: +{ + "type": "boolean" +} - added
Output schema / properties / provenance / properties / field_sourcesAdded value: +{ + "items": { + "additionalProperties": false, + "properties": { + "data_vintage": { + "type": [ + "string", + "null" + ] + }, + "dataset_id": { + "type": [ + "string", + "null" + ] + }, + "fields": { + "items": { + "type": "string" + }, + "minItems": 1, + "type": "array" + }, + "retrieved_at": { + "type": [ + "string", + "null" + ] + }, + "served_from_cache": { + "type": [ + "boolean", + "null" + ] + }, + "source_url": { + "type": "string" + } + }, + "required": [ + "fields", + "source_url", + "dataset_id", + "data_vintage", + "retrieved_at" + ], + "type": "object" + }, + "minItems": 1, + "type": "array" +} - removed
Output schema / properties / provenance / properties / license / descriptionRemoved value: -"Regime legal do dado" - added
Output schema / properties / provenance / properties / noticesAdded value: +{ + "items": { + "type": "string" + }, + "minItems": 1, + "type": "array" +} - added
Output schema / properties / provenance / properties / retrievalAdded value: +{ + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "anomalies": { + "items": { + "additionalProperties": false, + "properties": { + "count": { + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" + }, + "kind": { + "enum": [ + "timeout", + "network", + "http_4xx", + "http_5xx", + "rate_limited", + "malformed_body" + ], + "type": "string" + } + }, + "required": [ + "kind", + "count" + ], + "type": "object" + }, + "type": "array" + }, + "attempts": { + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" + }, + "requests": { + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" + }, + "unstable": { + "type": "boolean" + } + }, + "required": [ + "requests", + "attempts", + "anomalies", + "unstable" + ], + "type": "object" + }, + { + "type": "null" + } + ] +} - removed
Output schema / properties / provenance / properties / retrieved_at / descriptionRemoved value: -"Instante real da extração no upstream (ISO-8601, horário de Brasília)" - added
Output schema / properties / provenance / properties / revisionAdded value: +{ + "additionalProperties": false, + "properties": { + "note": { + "type": [ + "string", + "null" + ] + }, + "status": { + "enum": [ + "current", + "provisional", + "final" + ], + "type": "string" + } + }, + "required": [ + "status", + "note" + ], + "type": "object" +} - removed
Output schema / properties / provenance / properties / source / descriptionRemoved value: -"Fonte oficial do dado (API do IBGE consultada)" - removed
Output schema / properties / provenance / properties / source_url / descriptionRemoved value: -"URL canônica que reproduz a consulta" - changed
Output schema / properties / provenance / requiredPrevious value: -[ - "source", - "source_url", - "data_vintage", - "retrieved_at", - "citation", - "license" -]New value: +[ + "source", + "source_url", + "data_vintage", + "retrieved_at", + "retrieval", + "citation", + "license" +]
- Changed
ibge_sidra_tabelas14 fields changed- changed
Output schema / properties / provenance / descriptionPrevious value: -"Bloco de proveniência (contrato v1.0): fonte, URL, período, extração e licença"New value: +"Bloco de proveniência (contrato v1.1): fonte, URL, período, extração e licença" - removed
Output schema / properties / provenance / properties / citation / descriptionRemoved value: -"Citação pronta para uso" - removed
Output schema / properties / provenance / properties / data_vintage / descriptionRemoved value: -"Período de referência do dado segundo a fonte; null se a fonte não expõe" - added
Output schema / properties / provenance / properties / derivation_noteAdded value: +{ + "type": "string" +} - added
Output schema / properties / provenance / properties / derivedAdded value: +{ + "type": "boolean" +} - added
Output schema / properties / provenance / properties / field_sourcesAdded value: +{ + "items": { + "additionalProperties": false, + "properties": { + "data_vintage": { + "type": [ + "string", + "null" + ] + }, + "dataset_id": { + "type": [ + "string", + "null" + ] + }, + "fields": { + "items": { + "type": "string" + }, + "minItems": 1, + "type": "array" + }, + "retrieved_at": { + "type": [ + "string", + "null" + ] + }, + "served_from_cache": { + "type": [ + "boolean", + "null" + ] + }, + "source_url": { + "type": "string" + } + }, + "required": [ + "fields", + "source_url", + "dataset_id", + "data_vintage", + "retrieved_at" + ], + "type": "object" + }, + "minItems": 1, + "type": "array" +} - removed
Output schema / properties / provenance / properties / license / descriptionRemoved value: -"Regime legal do dado" - added
Output schema / properties / provenance / properties / noticesAdded value: +{ + "items": { + "type": "string" + }, + "minItems": 1, + "type": "array" +} - added
Output schema / properties / provenance / properties / retrievalAdded value: +{ + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "anomalies": { + "items": { + "additionalProperties": false, + "properties": { + "count": { + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" + }, + "kind": { + "enum": [ + "timeout", + "network", + "http_4xx", + "http_5xx", + "rate_limited", + "malformed_body" + ], + "type": "string" + } + }, + "required": [ + "kind", + "count" + ], + "type": "object" + }, + "type": "array" + }, + "attempts": { + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" + }, + "requests": { + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" + }, + "unstable": { + "type": "boolean" + } + }, + "required": [ + "requests", + "attempts", + "anomalies", + "unstable" + ], + "type": "object" + }, + { + "type": "null" + } + ] +} - removed
Output schema / properties / provenance / properties / retrieved_at / descriptionRemoved value: -"Instante real da extração no upstream (ISO-8601, horário de Brasília)" - added
Output schema / properties / provenance / properties / revisionAdded value: +{ + "additionalProperties": false, + "properties": { + "note": { + "type": [ + "string", + "null" + ] + }, + "status": { + "enum": [ + "current", + "provisional", + "final" + ], + "type": "string" + } + }, + "required": [ + "status", + "note" + ], + "type": "object" +} - removed
Output schema / properties / provenance / properties / source / descriptionRemoved value: -"Fonte oficial do dado (API do IBGE consultada)" - removed
Output schema / properties / provenance / properties / source_url / descriptionRemoved value: -"URL canônica que reproduz a consulta" - changed
Output schema / properties / provenance / requiredPrevious value: -[ - "source", - "source_url", - "data_vintage", - "retrieved_at", - "citation", - "license" -]New value: +[ + "source", + "source_url", + "data_vintage", + "retrieved_at", + "retrieval", + "citation", + "license" +]
- Changed
ibge_vizinhos16 fields changed- changed
Output schema / properties / provenance / descriptionPrevious value: -"Bloco de proveniência (contrato v1.0): fonte, URL, período, extração e licença"New value: +"Bloco de proveniência (contrato v1.1): fonte, URL, período, extração e licença" - removed
Output schema / properties / provenance / properties / citation / descriptionRemoved value: -"Citação pronta para uso" - removed
Output schema / properties / provenance / properties / data_vintage / descriptionRemoved value: -"Período de referência do dado segundo a fonte; null se a fonte não expõe" - added
Output schema / properties / provenance / properties / derivation_noteAdded value: +{ + "type": "string" +} - added
Output schema / properties / provenance / properties / derivedAdded value: +{ + "type": "boolean" +} - added
Output schema / properties / provenance / properties / field_sourcesAdded value: +{ + "items": { + "additionalProperties": false, + "properties": { + "data_vintage": { + "type": [ + "string", + "null" + ] + }, + "dataset_id": { + "type": [ + "string", + "null" + ] + }, + "fields": { + "items": { + "type": "string" + }, + "minItems": 1, + "type": "array" + }, + "retrieved_at": { + "type": [ + "string", + "null" + ] + }, + "served_from_cache": { + "type": [ + "boolean", + "null" + ] + }, + "source_url": { + "type": "string" + } + }, + "required": [ + "fields", + "source_url", + "dataset_id", + "data_vintage", + "retrieved_at" + ], + "type": "object" + }, + "minItems": 1, + "type": "array" +} - removed
Output schema / properties / provenance / properties / license / descriptionRemoved value: -"Regime legal do dado" - added
Output schema / properties / provenance / properties / noticesAdded value: +{ + "items": { + "type": "string" + }, + "minItems": 1, + "type": "array" +} - added
Output schema / properties / provenance / properties / retrievalAdded value: +{ + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "anomalies": { + "items": { + "additionalProperties": false, + "properties": { + "count": { + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" + }, + "kind": { + "enum": [ + "timeout", + "network", + "http_4xx", + "http_5xx", + "rate_limited", + "malformed_body" + ], + "type": "string" + } + }, + "required": [ + "kind", + "count" + ], + "type": "object" + }, + "type": "array" + }, + "attempts": { + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" + }, + "requests": { + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" + }, + "unstable": { + "type": "boolean" + } + }, + "required": [ + "requests", + "attempts", + "anomalies", + "unstable" + ], + "type": "object" + }, + { + "type": "null" + } + ] +} - removed
Output schema / properties / provenance / properties / retrieved_at / descriptionRemoved value: -"Instante real da extração no upstream (ISO-8601, horário de Brasília)" - added
Output schema / properties / provenance / properties / revisionAdded value: +{ + "additionalProperties": false, + "properties": { + "note": { + "type": [ + "string", + "null" + ] + }, + "status": { + "enum": [ + "current", + "provisional", + "final" + ], + "type": "string" + } + }, + "required": [ + "status", + "note" + ], + "type": "object" +} - removed
Output schema / properties / provenance / properties / source / descriptionRemoved value: -"Fonte oficial do dado (API do IBGE consultada)" - removed
Output schema / properties / provenance / properties / source_url / descriptionRemoved value: -"URL canônica que reproduz a consulta" - changed
Output schema / properties / provenance / requiredPrevious value: -[ - "source", - "source_url", - "data_vintage", - "retrieved_at", - "citation", - "license" -]New value: +[ + "source", + "source_url", + "data_vintage", + "retrieved_at", + "retrieval", + "citation", + "license" +] - added
Output schema / properties / vizinhos / items / properties / populacao_anoAdded value: +{ + "description": "Período de referência da população enriquecida via SIDRA", + "type": "string" +} - added
Output schema / properties / vizinhos / items / properties / populacao_tabelaAdded value: +{ + "description": "Tabela SIDRA usada no enriquecimento populacional", + "type": "string" +}
- Changed
search1 field changed- added
Input schema / additionalPropertiesAdded value: +false
23 tool updates
v0.6.0- First observed
fetch - First observed
ibge_calendario - First observed
ibge_censo - First observed
ibge_cidades - First observed
ibge_cnae - First observed
ibge_comparar - First observed
ibge_datasaude - First observed
ibge_estados - First observed
ibge_geocodigo - First observed
ibge_indicadores - First observed
ibge_localidade - First observed
ibge_malhas - First observed
ibge_malhas_tema - First observed
ibge_municipios - First observed
ibge_nomes - First observed
ibge_noticias - First observed
ibge_paises - First observed
ibge_pesquisas - First observed
ibge_sidra - First observed
ibge_sidra_metadados - First observed
ibge_sidra_tabelas - First observed
ibge_vizinhos - First observed
search
TDQS
Scored across 24 tools
Most tools target distinct data surfaces, and the descriptions add explicit 'use a different tool when' guidance that resolves most potential confusion. However, there is genuine overlap among the locality tools (ibge_municipios, ibge_localidade, ibge_geocodigo) and among the SIDRA-family tools (ibge_sidra wrappers: ibge_censo, ibge_indicadores, ibge_datasaude, ibge_comparar, ibge_cidades), where an agent must lean heavily on prose to pick correctly.
Nearly all tools use a consistent snake_case 'ibge_<noun>' pattern (ibge_estados, ibge_sidra_tabelas, ibge_malhas_tema), which is highly predictable and scannable. The two bare 'search' and 'fetch' tools break the prefix convention, though that deviation is intentional for the Deep Research contract.
24 tools is on the heavy side and several are convenience wrappers over the same underlying SIDRA engine, so surface area is larger than strictly necessary. The breadth of the IBGE domain (geography, census, indicators, news, calendar, names, countries) partially justifies the count, placing it at borderline-heavy rather than excessive.
Coverage is broad and coherent: localities, geographic meshes, static maps, census themes, time-series indicators, health, news, calendar, names and international data are all present, with clear catalog/lookup entry points. As a fully read-only public-data API there is no write lifecycle to cover, so the main residual gap is the thin/overlapping wrapper layer rather than missing capabilities.
Maintenance
Related MCP Connectors
IBGE: geography, census, economy and health from the official APIs, with provenance. 23 tools.
Discover, resolve, and query official Brazilian economic data with semantic search and provenance.
Banco Central do Brasil (BCB): SGS series, Focus expectations, PTAX, stats + provenance. 17 tools.
Brazilian public data API for AI agents. BCB, IBGE, CVM, B3, compliance. x402 payments on Base.
Related MCP Servers
- AlicenseAqualityBmaintenanceExposes official IBGE data as MCP tools, including Brazilian localities, SIDRA statistical aggregates, and population indicators.11MIT
- FlicenseNot gradedqualityDmaintenanceEnables LLMs to access Brazilian IBGE statistical data (population, economy, agriculture) via natural language, with tools for querying aggregated data and metadata.-
- AlicenseAqualityDmaintenanceEnables AI agents to access Brazilian statistical, geographic, and economic data in real-time via IBGE public APIs.327 npmMIT
- 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