Skip to main content
Glama

CensoSenso MCP

Version Node License: MIT CI

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

  1. Versão e estado

  2. Validação dos 645 municípios paulistas

  3. Arquitetura

  4. Ferramentas disponíveis

  5. Fluxo de uma chamada

  6. Algoritmos e regras de decisão

  7. Extração, cache e tolerância a falhas

  8. Procedência e auditabilidade

  9. SIDRA e estatísticas

  10. Geografia, vizinhança e recortes territoriais

  11. Pesquisa assistida search/fetch

  12. Validação, testes e gates

  13. Instalação local

  14. Uso remoto

  15. Desenvolvimento e reprodução

  16. Segurança, privacidade e limites operacionais

  17. Dados, licença e atribuições

  18. Status do protótipo e próximos passos


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:

  1. initialize;

  2. emissão/captura de mcp-session-id;

  3. notifications/initialized;

  4. tools/list;

  5. tools/call;

  6. consulta efetiva a fonte oficial;

  7. 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

a215de0ed21d5538db07a35e65c8dcd9fb1c201491c1ee1f4d0aaaa757810d86

O gate consulta:

https://servicodados.ibge.gov.br/api/v1/localidades/estados/35/municipios?orderBy=nome

O 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-645

Arquitetura

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 metodologia

Ferramentas 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

ibge_estados, ibge_municipios, ibge_localidade, ibge_geocodigo

SIDRA

ibge_sidra, ibge_sidra_tabelas, ibge_sidra_metadados, ibge_pesquisas

Censo e indicadores

ibge_censo, ibge_indicadores, ibge_comparar, ibge_cidades

Geografia

ibge_malhas, ibge_mapa, ibge_malhas_tema, ibge_vizinhos

Economia/classificações

ibge_cnae

Saúde e condições de vida

ibge_datasaude

Nomes

ibge_nomes

Países

ibge_paises

Informação corrente

ibge_noticias, ibge_calendario

Pesquisa assistida

search, fetch

Seleção recomendada

Pergunta

Ferramenta

Panorama de um município

ibge_cidades

Censo por tema

ibge_censo

Série econômica/social conhecida

ibge_indicadores

Comparar localidades

ibge_comparar

Consultar tabela SIDRA

ibge_sidra

Descobrir tabela

ibge_sidra_tabelas

Inspecionar dimensões/classificações

ibge_sidra_metadados

Resolver nome/código IBGE

ibge_geocodigo

Geometria administrativa

ibge_malhas

Mapa coroplético municipal

ibge_mapa

Vizinhança municipal

ibge_vizinhos

Recorte territorial especial

ibge_malhas_tema


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
35

sã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:

  1. verifica correspondência com UF;

  2. verifica correspondência com região;

  3. consulta municípios;

  4. restringe por UF, quando informada;

  5. usa busca textual por inclusão do nome;

  6. limita a 20 correspondências;

  7. se houver exatamente uma correspondência, retorna imediatamente a hierarquia detalhada;

  8. 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

STATIC

24 horas

MEDIUM

1 hora

SHORT

15 minutos

REALTIME

1 minuto

A chave de cache é construída com parâmetros:

  1. parâmetros undefined são removidos;

  2. nomes são ordenados lexicograficamente;

  3. 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_at continua 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, 504

També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:

  1. o código HTTP é preservado;

  2. o corpo textual é lido;

  3. páginas HTML de borda são descartadas;

  4. JSON de erro é inspecionado por message, mensagem, erro, error ou detail;

  5. espaços são normalizados;

  6. 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:

  1. structuredContent.provenance;

  2. structuredContent.attribution;

  3. _meta namespaced.

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_sidra

Wrappers 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:

-
..
...
X

Valores 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:

  1. correspondência exata sem diferença de caixa/acento;

  2. aliases conhecidos;

  3. correspondência parcial bidirecional;

  4. 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íguos

Neste modo, “vizinho” significa tocar a fronteira do município.

Com raio:

geometria
   ↓
centroid
   ↓
distance
   ↓
filtro por km

Esse 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_tema

Recortes 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:

  1. catálogo SIDRA;

  2. municípios;

  3. indicadores conhecidos;

  4. temas do Censo;

  5. indicadores de saúde;

  6. 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.

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:deploy

Encadeia:

  1. checagem do gerador de homologação;

  2. typecheck;

  3. lint;

  4. EOL;

  5. Prettier;

  6. build;

  7. suíte Vitest;

  8. cobertura;

  9. npm ci do Worker;

  10. typecheck do Worker;

  11. testes do Worker.

Gate dos 645 municípios

npm run gate:sp-645

Integração real

Em PowerShell:

.\scripts\run_integration_gate.ps1

Smoke

STDIO:

node scripts/smoke-mcp.mjs --stdio

Remoto:

node scripts/smoke-mcp.mjs https://censosenso.poderdapalavra.org

Baseline da superfície MCP

node scripts/dump-surface.mjs --stdio

Baseline atual:

baselines/surface-stdio-0.7.0.json

Mudanç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 ci

Build:

npm run build

Execução STDIO:

node dist/index.js

Ou:

npm start

Configuraçã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/mcp

O 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 dev

A equivalência funcional de uma reprodução exige, no mínimo:

  1. npm ci;

  2. npm run gate:deploy;

  3. negociação MCP via STDIO;

  4. negociação MCP via Worker;

  5. tools/list com superfície esperada;

  6. ao menos uma chamada real ao IBGE;

  7. procedência nos canais esperados;

  8. integridade dos snapshots;

  9. ausência de mudança inexplicada no baseline;

  10. resposta válida de /health, /status e /mcp.

CI/CD

Fluxo operacional:

push/merge
   ↓
GitHub
   ↓
gates
   ↓
Cloudflare Workers Build
   ↓
wrangler deploy
   ↓
health/status/MCP

Seguranç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 Found

Esse 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:

  1. publicar a árvore homologada completa neste repositório;

  2. executar novamente o gate completo na árvore pública;

  3. executar smoke remoto após a migração;

  4. criar tag/release pública;

  5. iniciar com um grupo externo reduzido;

  6. monitorar erros, uso e rate limiting;

  7. 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 tools
fetchDocumento para Deep ResearchA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesIdentificador de um documento devolvido por `search`

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYesIdentificador único do documento no servidor; é o que `fetch` recebe
urlYesURL pública canônica do documento — a citação do ChatGPT depende dela
textYesConteúdo integral do documento, legível (Markdown)
titleYesTítulo legível do documento
metadataNoPares chave/valor adicionais sobre o documento (tipo, fonte, período…)

TDQS

A4.4/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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çõesA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
deNoData inicial no formato DD/MM/AAAA (ex: '01/01/2024')
ateNoData final no formato DD/MM/AAAA (ex: '31/12/2024')
tipoNoTipo de evento: 'divulgacao' (publicações), 'coleta' (pesquisas de campo), ou 'todos'divulgacao
paginaNoNúmero da página (padrão: 1)
produtoNoFiltrar por produto/pesquisa (ex: 'IPCA', 'PNAD', 'PIB')
quantidadeNoQuantidade de resultados por página (padrão: 20)

Output Schema

ParametersJSON Schema
NameRequiredDescription
totalYesTotal de eventos disponíveis para os critérios
paginaNoPágina atual retornada
eventosYesLista de eventos do calendário (divulgações/coletas)
produtoNoFiltro de produto aplicado, quando informado
provenanceYesBloco de proveniência (contrato v1.1): fonte, URL, período, extração e licença
attributionYesURLs canônicas das fontes desta resposta (lista de atribuição)
totalPaginasNoTotal de páginas disponíveis

TDQS

A4.6/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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áficoA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
anoNoAno do censo (1970, 1980, 1991, 2000, 2010, 2022) ou 'todos' para série histórica
temaNoTema 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íveispopulacao
topNNoTamanho das listas top/bottom quando estatisticas=true sem agruparPor (padrão: 10, máx: 100)
camposNoSelecionar apenas algumas colunas por rótulo, separadas por vírgula (ex: 'Valor,Ano'). Reduz o volume da resposta.
formatoNoFormato de saídatabela
agruparPorNoCom 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
localidadesNoCódigos das localidades ou 'all'all
estatisticasNoComputa 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_territorialNoNível territorial (código N): 1=Brasil, 2=Região, 3=UF, 6=Município1

Output Schema

ParametersJSON Schema
NameRequiredDescription
anoNoAno(s) de referência
temaNoTema do censo consultado
tabelaNoTabela SIDRA de origem
colunasYesRótulos das colunas, na ordem
descricaoNoDescrição da tabela
registrosYesRegistros: cada um mapeia rótulo da coluna -> valor
provenanceYesBloco de proveniência (contrato v1.1): fonte, URL, período, extração e licença
attributionYesURLs canônicas das fontes desta resposta (lista de atribuição)
estatisticasNoBloco estatístico presente quando estatisticas=true (registros vem vazio nesse modo)
totalRegistrosYesTotal de registros de dados

TDQS

A4.6/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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@)A
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
ufNoCódigo ou sigla da UF para filtrar (ex: 35 ou SP)
tipoNoTipo de consulta: panorama (resumo geral), indicador (específico), pesquisas (listar), historicopanorama
pesquisaNoID da pesquisa para filtrar indicadores
indicadorNoID do indicador ou nome para busca
municipioNoCódigo IBGE do município (7 dígitos)

Output Schema

ParametersJSON Schema
NameRequiredDescription
nomeNoNome do município/indicador
tipoYesTipo de consulta (panorama, indicador, pesquisas, historico)
avisosNoAvisos de indisponibilidade parcial ou limitações da resposta
municipioNoCódigo IBGE do município
provenanceYesBloco de proveniência (contrato v1.1): fonte, URL, período, extração e licença
attributionYesURLs canônicas das fontes desta resposta (lista de atribuição)
indicadoresYesIndicadores retornados (vazio para respostas de catálogo)

TDQS

A4.8/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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 CNAEA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
buscaNoTermo para buscar na descrição das atividades (ex: 'software', 'restaurante', 'comércio')
nivelNoNível hierárquico para listar (padrão: mostra todos os níveis relevantes)
codigoNoCó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)
limiteNoNúmero máximo de resultados (padrão: 20)

Output Schema

ParametersJSON Schema
NameRequiredDescription
modoYesModo de resposta que gerou os dados
buscaNoPresente no modo de busca por termo
listaNoPresente no modo de listagem por nível
codigoNoPresente no modo de consulta por código
provenanceYesBloco de proveniência (contrato v1.1): fonte, URL, período, extração e licença
attributionYesURLs canônicas das fontes desta resposta (lista de atribuição)

TDQS

A4.2/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 localidadesA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
formatoNoFormato de saída: tabela, json ou ranking (ordenado)tabela
indicadorNoIndicador 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íveispopulacao
localidadesYesCó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

ParametersJSON Schema
NameRequiredDescription
nomeNoNome do indicador
tabelaNoTabela SIDRA de origem
formatoNoFormato solicitado
indicadorNoIndicador comparado
provenanceYesBloco de proveniência (contrato v1.1): fonte, URL, período, extração e licença
attributionYesURLs canônicas das fontes desta resposta (lista de atribuição)
localidadesYesLocalidades comparadas, com o valor do indicador
estatisticasNoEstatísticas agregadas (quando há ao menos 2 valores positivos)

TDQS

A4.6/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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údeA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
topNNoTamanho das listas top/bottom quando estatisticas=true sem agruparPor (padrão: 10, máx: 100)
camposNoSelecionar apenas algumas colunas por rótulo, separadas por vírgula (ex: 'Valor,Ano'). Reduz o volume da resposta.
formatoNoFormato de saídatabela
periodoNoPeríodo: 'last', 'all', ou ano específicolast
indicadorYesIndicador 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".
agruparPorNoCom 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
localidadeNoCódigo da localidade ou 'all'all
estatisticasNoComputa 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_territorialNoNí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

ParametersJSON Schema
NameRequiredDescription
nomeNoNome do indicador
fonteNoFonte do dado
colunasYesRótulos das colunas, na ordem
indicadorNoChave do indicador de saúde consultado
registrosYesRegistros: cada um mapeia rótulo da coluna -> valor
provenanceYesBloco de proveniência (contrato v1.1): fonte, URL, período, extração e licença
attributionYesURLs canônicas das fontes desta resposta (lista de atribuição)
estatisticasNoBloco estatístico presente quando estatisticas=true (registros vem vazio nesse modo)
totalRegistrosYesTotal de registros de dados

TDQS

A4.6/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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 BrasilA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
regiaoNoFiltrar por região: N (Norte), NE (Nordeste), SE (Sudeste), S (Sul), CO (Centro-Oeste)
ordenarNoCampo para ordenação dos resultadosnome

Output Schema

ParametersJSON Schema
NameRequiredDescription
totalYesTotal de estados retornados
estadosYesLista de estados
provenanceYesBloco de proveniência (contrato v1.1): fonte, URL, período, extração e licença
attributionYesURLs canônicas das fontes desta resposta (lista de atribuição)

TDQS

A4.6/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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 IBGEA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
ufNoEstado por sigla (SP), nome (São Paulo) ou código IBGE (35) para restringir a busca por nome de município
nomeNoNome da localidade para encontrar o código IBGE (estado ou município)
codigoNoCó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

ParametersJSON Schema
NameRequiredDescription
nomeNoNome da localidade resolvida
tipoYesTipo do resultado: localidade decodificada (regiao/uf/municipio/distrito) ou lista de municípios encontrados (lista)
siglaNoSigla da região ou UF, quando aplicável
totalNoQuantidade de municípios encontrados na busca por nome (apenas tipo lista)
codigoNoCódigo IBGE da localidade resolvida (ausente em resultados do tipo lista)
regiaoNoNome da região à qual a UF pertence (apenas tipo uf)
estadosNoEstados pertencentes à região (apenas tipo regiao)
matchesNoMunicípios encontrados na busca por nome (apenas tipo lista)
hierarquiaNoHierarquia geográfica completa, da região ao município/distrito (tipo municipio/distrito)
provenanceYesBloco de proveniência (contrato v1.1): fonte, URL, período, extração e licença
attributionYesURLs canônicas das fontes desta resposta (lista de atribuição)
codigoSidraNoCódigo SIDRA de 6 dígitos do município (apenas tipo municipio)
regiaoCodigoNoCódigo IBGE da região à qual a UF pertence (apenas tipo uf)

TDQS

A4.6/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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 sociaisA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
topNNoTamanho das listas top/bottom quando estatisticas=true sem agruparPor (padrão: 10, máx: 100)
camposNoSelecionar apenas algumas colunas por rótulo, separadas por vírgula (ex: 'Valor,Ano'). Reduz o volume da resposta.
formatoNoFormato de saídatabela
periodosNoPeríodos (ex: '2023', 'last', 'last 4')last
categoriaNoFiltrar por categoria de indicadores
indicadorNoNome do indicador (ex: "pib", "ipca", "desemprego", "populacao"). Use "listar" para ver todos os indicadores disponíveis.
agruparPorNoCom 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
localidadesNoCódigos das localidades ou 'all'all
estatisticasNoComputa 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_territorialNoNí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=RIDE1

Output Schema

ParametersJSON Schema
NameRequiredDescription
nomeNoNome do indicador
tabelaNoTabela SIDRA de origem
colunasYesRótulos das colunas, na ordem
indicadorNoChave do indicador consultado
registrosYesRegistros: cada um mapeia rótulo da coluna -> valor
provenanceYesBloco de proveniência (contrato v1.1): fonte, URL, período, extração e licença
attributionYesURLs canônicas das fontes desta resposta (lista de atribuição)
estatisticasNoBloco estatístico presente quando estatisticas=true (registros vem vazio nesse modo)
totalRegistrosYesTotal de registros de dados

TDQS

A4.7/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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 localidadeA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
tipoNoTipo da localidade. Se não informado, será inferido pelo tamanho do código.
codigoYesCódigo IBGE da localidade (estado: 2 dígitos, município: 7 dígitos, distrito: 9 dígitos)

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYesCódigo IBGE da localidade
nomeYesNome da localidade
tipoYesTipo da localidade retornada
siglaNoSigla da UF (apenas para estados)
estadoNoEstado da localidade (município ou distrito)
regiaoNoRegião do estado (apenas para estados)
municipioNoMunicípio ao qual o distrito pertence (apenas para distritos)
provenanceYesBloco de proveniência (contrato v1.1): fonte, URL, período, extração e licença
attributionYesURLs canônicas das fontes desta resposta (lista de atribuição)
mesorregiaoNoMesorregião do município
microrregiaoNoMicrorregião do município
regiaoImediataNoRegião imediata do município
regiaoIntermediariaNoRegião intermediária do município

TDQS

A4.6/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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áficasA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
tipoNoTipo de divisão territorial
formatoNoFormato de saída (padrão: geojson)geojson
qualidadeNoQualidade do traçado: 'minima', 'intermediaria' ou 'maxima' (padrão). Os números 1–4 do IBGE antigo continuam aceitos e são traduzidos.maxima
resolucaoNoDivisõ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
localidadeYesCódigo IBGE ou sigla da localidade (ex: 'BR', 'SP', '35', '3550308')
intrarregiaoNoDivisão interna pelo nome, alternativa a resolucao: 'regiao', 'UF', 'regiao-intermediaria', 'regiao-imediata', 'mesorregiao', 'microrregiao' ou 'municipio'. Quando informado, prevalece sobre resolucao.

Output Schema

ParametersJSON Schema
NameRequiredDescription
urlNoURL para download da malha completa
tipoNoTipo de divisão territorial, quando informado
formatoYesFormato de saída solicitado (geojson, topojson ou svg)
qualidadeNoQualidade do traçado solicitada
resolucaoNoResolução/divisões internas solicitada
localidadeYesCódigo IBGE ou sigla da localidade consultada
provenanceYesBloco de proveniência (contrato v1.1): fonte, URL, período, extração e licença
attributionYesURLs canônicas das fontes desta resposta (lista de atribuição)
intrarregiaoNoDivisão interna desenhada dentro da malha (vocabulário da API v3)
resumo_geometricoNoResumo cartográfico derivado da geometria retornada

TDQS

A4.6/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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áticasA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
temaYesRecorte 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
codigoNoFiltra 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.
limiteNoQuantas feições trazer (padrão 50, máx. 600). O total do recorte vem sempre, mesmo quando o limite corta a lista.

Output Schema

ParametersJSON Schema
NameRequiredDescription
temaYesRecorte solicitado (ou 'listar')
temasNoLista de recortes disponíveis (somente no modo 'listar')
codigoNoCódigo usado como filtro, quando informado
versaoNoVersão/vintage da fonte temática consultada
feicoesNoTotal de registros retornáveis na fonte; consulte tipo_registro para interpretar a unidade
registrosNoAtributos de cada feição (sem geometria)
provenanceYesBloco de proveniência (contrato v1.1): fonte, URL, período, extração e licença
attributionYesURLs canônicas das fontes desta resposta (lista de atribuição)
fonte_dadosNoURL oficial da fonte de atributos/listagem usada
tipo_registroNoUnidade dos registros retornados: feição geográfica do recorte ou município componente
feicoes_retornadasNoQuantas vieram nesta resposta

TDQS

A4.4/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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 municipalA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
tituloNo
classesNo
larguraNo
indicadorNopopulacao
municipiosYesCódigos IBGE municipais de 7 dígitos, separados por vírgula; todos na mesma UF
classificacaoNoquantis

Output Schema

ParametersJSON Schema
NameRequiredDescription
svgYes
bboxYes
nomeYes
fontesYes
tabelaYes
classesYes
indicadorYes
provenanceYesBloco de proveniência (contrato v1.1): fonte, URL, período, extração e licença
attributionYesURLs canônicas das fontes desta resposta (lista de atribuição)
localidadesYes
classificacaoYes

TDQS

A4.3/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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 BrasilA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
ufNoEstado por sigla (SP), nome (São Paulo) ou código IBGE (35). Se não informado, retorna todos os municípios do Brasil.
buscaNoTermo para buscar no nome do município
limiteNoNúmero máximo de resultados (padrão: 100, máximo: 5570)

Output Schema

ParametersJSON Schema
NameRequiredDescription
ufNoUF informada no filtro (como recebida na entrada)
buscaNoTermo de busca aplicado ao nome do município
totalYesTotal de municípios encontrados antes do limite
municipiosYesLista de municípios retornados (após filtro e limite)
provenanceYesBloco de proveniência (contrato v1.1): fonte, URL, período, extração e licença
attributionYesURLs canônicas das fontes desta resposta (lista de atribuição)

TDQS

A4.7/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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 nomesA
Read-onlyIdempotent

Queries name frequency and rankings in Brazil (IBGE).

Features:

  1. Name frequency (tipo='frequencia'):

    • Birth frequency by decade

    • Multiple names separated by comma

    • Filter by sex and locality

  2. 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.

ParametersJSON Schema
NameRequiredDescriptionDefault
sexoNoFiltrar por sexo: M (masculino) ou F (feminino)
tipoYesTipo de consulta: 'frequencia' para buscar nomes específicos ou 'ranking' para ver os mais populares
nomesNoPara tipo='frequencia': Nome ou nomes separados por vírgula
decadaNoPara tipo='ranking': Década do ranking (ex: 1990, 2000, 2010)
limiteNoPara tipo='ranking': Número de nomes (padrão: 20)
localidadeNoCódigo IBGE da localidade (UF: 2 dígitos, Município: 7 dígitos)

Output Schema

ParametersJSON Schema
NameRequiredDescription
tipoYesTipo da consulta realizada
rankingNoResultado do ranking (presente quando tipo='ranking')
frequenciaNoResultados de frequência (presente quando tipo='frequencia')
provenanceYesBloco de proveniência (contrato v1.1): fonte, URL, período, extração e licença
attributionYesURLs canônicas das fontes desta resposta (lista de atribuição)

TDQS

A4.4/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 IBGEA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
deNoData inicial no formato DD/MM/AAAA (ex: 01/01/2024)
ateNoData final no formato DD/MM/AAAA (ex: 31/12/2024)
tipoNoTipo de publicação: 'release' ou 'noticia'
buscaNoTermo para buscar nas notícias
paginaNoNúmero da página para paginação
destaqueNoFiltrar apenas notícias em destaque
quantidadeNoQuantidade de notícias a retornar (padrão: 10, máximo: 100)

Output Schema

ParametersJSON Schema
NameRequiredDescription
buscaNoTermo de busca aplicado, se houver
totalYesTotal de notícias encontradas na consulta
paginaYesPágina atual
noticiasYesLista de notícias retornadas
provenanceYesBloco de proveniência (contrato v1.1): fonte, URL, período, extração e licença
attributionYesURLs canônicas das fontes desta resposta (lista de atribuição)
totalPaginasYesNúmero total de páginas

TDQS

A4.6/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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ísesA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
paisNoCódigo ISO-ALPHA-2 do país (ex: BR, US, AR) ou código M49
tipoNoTipo de consulta: listar (todos), detalhes (de um país), indicadores, buscarlistar
buscaNoTermo de busca para filtrar países pelo nome
regiaoNoFiltrar por região/continente: americas, europa, africa, asia, oceania
indicadoresNoIDs dos indicadores separados por | (ex: 77819|77820), usados apenas com tipo=detalhes

Output Schema

ParametersJSON Schema
NameRequiredDescription
paisNoDetalhes de um país específico (modo detalhes)
tipoYesModo de consulta que originou este resultado
buscaNoTermo de busca aplicado, se houver
totalNoTotal de países encontrados (modos listar/buscar)
paisesNoLista de países (modos listar/buscar). Limitada aos 50 primeiros na exibição
regiaoNoFiltro de região/continente aplicado, se houver
provenanceYesBloco de proveniência (contrato v1.1): fonte, URL, período, extração e licença
attributionYesURLs canônicas das fontes desta resposta (lista de atribuição)
indicadoresNoIndicadores disponíveis para consulta de países (modo indicadores)

TDQS

A4.5/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 IBGEA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
buscaNoTermo para buscar no nome ou ID da pesquisa
detalhesNoCódigo da pesquisa para ver detalhes e tabelas disponíveis

Output Schema

ParametersJSON Schema
NameRequiredDescription
modoYesModo de consulta que originou este resultado: lista de pesquisas ou detalhes de uma
buscaNoTermo de busca aplicado, se houver (modo lista)
totalNoTotal de pesquisas encontradas (modo lista)
pesquisaNoDetalhes de uma pesquisa específica (modo detalhes)
pesquisasNoLista de pesquisas (modo lista)
provenanceYesBloco de proveniência (contrato v1.1): fonte, URL, período, extração e licença
attributionYesURLs canônicas das fontes desta resposta (lista de atribuição)

TDQS

A4.4/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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 SIDRAA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
topNNoTamanho das listas top/bottom quando estatisticas=true sem agruparPor (padrão: 10, máx: 100)
camposNoSelecionar apenas algumas colunas por rótulo, separadas por vírgula (ex: 'Valor,Ano'). Reduz o volume da resposta. Omitir traz todas.
paginaNoPágina de resultados (100 registros por página)
tabelaYesCódigo da tabela SIDRA (ex: 6579 para estimativas de população, 9514 para censo 2022)
formatoNoFormato de saída: 'json' para dados brutos ou 'tabela' para formato legíveltabela
periodosNoPeríodos: 'last' para último, 'all' para todos, ou anos específicos (ex: 2020,2021,2022)last
variaveisNoIDs das variáveis separados por vírgula, ou 'allxp' para todasallxp
agruparPorNoCom 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
localidadesNoCódigos das localidades separados por vírgula, ou 'all' para todasall
estatisticasNoComputa 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
classificacoesNoClassificações no formato 'id[categorias]' (ex: '2[6794]' para sexo masculino)
nivel_territorialNoNí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árido1

Output Schema

ParametersJSON Schema
NameRequiredDescription
nomeYesNome da tabela (quando conhecido)
tabelaYesCódigo da tabela SIDRA consultada
colunasYesRótulos das colunas, na ordem
paginacaoYesMetadados de paginação para continuação
registrosYesRegistros da página atual: cada um mapeia rótulo da coluna -> valor
provenanceYesBloco de proveniência (contrato v1.1): fonte, URL, período, extração e licença
attributionYesURLs canônicas das fontes desta resposta (lista de atribuição)
estatisticasNoBloco estatístico presente quando estatisticas=true (registros vem vazio nesse modo)
totalRegistrosYesTotal de registros de dados disponíveis (todas as páginas)

TDQS

A4.8/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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 SIDRAA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
tabelaYesCódigo da tabela/agregado SIDRA (ex: '6579', '9514', '4714')
incluir_periodosNoIncluir lista de períodos disponíveis (padrão: true)
incluir_localidadesNoIncluir níveis territoriais disponíveis (padrão: false)

Output Schema

ParametersJSON Schema
NameRequiredDescription
urlNoURL da tabela no SIDRA
nomeYesNome da tabela
codigoYesCódigo da tabela/agregado SIDRA
assuntoNoAssunto/tema da tabela
periodosNoPeríodos disponíveis para a tabela (quando incluir_periodos)
pesquisaNoNome da pesquisa de origem
variaveisNoVariáveis da tabela, com unidades e classificações/categorias
provenanceYesBloco de proveniência (contrato v1.1): fonte, URL, período, extração e licença
attributionYesURLs canônicas das fontes desta resposta (lista de atribuição)
periodicidadeNoPeriodicidade da pesquisa
niveisTerritoriaisNoNíveis territoriais disponíveis para a tabela

TDQS

A4.4/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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 SIDRAA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
buscaNoTermos 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)
limiteNoNúmero máximo de resultados (padrão: 20)
pesquisaNoFiltrar por código ou nome da pesquisa (ex: 'censo', 'pnad', 'pib')

Output Schema

ParametersJSON Schema
NameRequiredDescription
buscaNoTermo de busca aplicado, se houver
totalYesTotal de tabelas que correspondem aos critérios
tabelasYesLista de tabelas SIDRA retornadas
pesquisaNoFiltro de pesquisa aplicado, se houver
provenanceYesBloco de proveniência (contrato v1.1): fonte, URL, período, extração e licença
attributionYesURLs canônicas das fontes desta resposta (lista de atribuição)
notas_vocabularioNoQuando a busca foi ampliada para a palavra que o IBGE usa (renda→rendimento), diz qual

TDQS

A4.6/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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 vizinhosA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
ufNoEstado por sigla (SP), nome (São Paulo) ou código IBGE (35) — obrigatório se usar nome do município
raioNoRaio em km para buscar municípios próximos, calculado pela distância entre centróides municipais
municipioYesCódigo IBGE do município (7 dígitos) ou nome do município
incluir_dadosNoIncluir dados populacionais dos vizinhos

Output Schema

ParametersJSON Schema
NameRequiredDescription
totalYesQuantidade de municípios encontrados
vizinhosYesLista de municípios contíguos ou próximos, conforme o critério espacial solicitado
municipioYesMunicípio de referência da consulta
provenanceYesBloco de proveniência (contrato v1.1): fonte, URL, período, extração e licença
attributionYesURLs canônicas das fontes desta resposta (lista de atribuição)

TDQS

A4.8/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 24 tool updatesv0.7.2
    • Changedfetch1 field changed
      • addedInput schema / additionalProperties
        Added value: +false
    • Changedibge_calendario14 fields changed
      • changedOutput schema / properties / provenance / description
        Previous 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"
      • removedOutput schema / properties / provenance / properties / citation / description
        Removed value: -"Citação pronta para uso"
      • removedOutput schema / properties / provenance / properties / data_vintage / description
        Removed value: -"Período de referência do dado segundo a fonte; null se a fonte não expõe"
      • addedOutput schema / properties / provenance / properties / derivation_note
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / provenance / properties / derived
        Added value: +{
        +  "type": "boolean"
        +}
      • addedOutput schema / properties / provenance / properties / field_sources
        Added 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"
        +}
      • removedOutput schema / properties / provenance / properties / license / description
        Removed value: -"Regime legal do dado"
      • addedOutput schema / properties / provenance / properties / notices
        Added value: +{
        +  "items": {
        +    "type": "string"
        +  },
        +  "minItems": 1,
        +  "type": "array"
        +}
      • addedOutput schema / properties / provenance / properties / retrieval
        Added 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"
        +    }
        +  ]
        +}
      • removedOutput schema / properties / provenance / properties / retrieved_at / description
        Removed value: -"Instante real da extração no upstream (ISO-8601, horário de Brasília)"
      • addedOutput schema / properties / provenance / properties / revision
        Added value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "note": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "status": {
        +      "enum": [
        +        "current",
        +        "provisional",
        +        "final"
        +      ],
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "status",
        +    "note"
        +  ],
        +  "type": "object"
        +}
      • removedOutput schema / properties / provenance / properties / source / description
        Removed value: -"Fonte oficial do dado (API do IBGE consultada)"
      • removedOutput schema / properties / provenance / properties / source_url / description
        Removed value: -"URL canônica que reproduz a consulta"
      • changedOutput schema / properties / provenance / required
        Previous value: -[
        -  "source",
        -  "source_url",
        -  "data_vintage",
        -  "retrieved_at",
        -  "citation",
        -  "license"
        -]New value: +[
        +  "source",
        +  "source_url",
        +  "data_vintage",
        +  "retrieved_at",
        +  "retrieval",
        +  "citation",
        +  "license"
        +]
    • Changedibge_censo14 fields changed
      • changedOutput schema / properties / provenance / description
        Previous 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"
      • removedOutput schema / properties / provenance / properties / citation / description
        Removed value: -"Citação pronta para uso"
      • removedOutput schema / properties / provenance / properties / data_vintage / description
        Removed value: -"Período de referência do dado segundo a fonte; null se a fonte não expõe"
      • addedOutput schema / properties / provenance / properties / derivation_note
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / provenance / properties / derived
        Added value: +{
        +  "type": "boolean"
        +}
      • addedOutput schema / properties / provenance / properties / field_sources
        Added 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"
        +}
      • removedOutput schema / properties / provenance / properties / license / description
        Removed value: -"Regime legal do dado"
      • addedOutput schema / properties / provenance / properties / notices
        Added value: +{
        +  "items": {
        +    "type": "string"
        +  },
        +  "minItems": 1,
        +  "type": "array"
        +}
      • addedOutput schema / properties / provenance / properties / retrieval
        Added 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"
        +    }
        +  ]
        +}
      • removedOutput schema / properties / provenance / properties / retrieved_at / description
        Removed value: -"Instante real da extração no upstream (ISO-8601, horário de Brasília)"
      • addedOutput schema / properties / provenance / properties / revision
        Added value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "note": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "status": {
        +      "enum": [
        +        "current",
        +        "provisional",
        +        "final"
        +      ],
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "status",
        +    "note"
        +  ],
        +  "type": "object"
        +}
      • removedOutput schema / properties / provenance / properties / source / description
        Removed value: -"Fonte oficial do dado (API do IBGE consultada)"
      • removedOutput schema / properties / provenance / properties / source_url / description
        Removed value: -"URL canônica que reproduz a consulta"
      • changedOutput schema / properties / provenance / required
        Previous value: -[
        -  "source",
        -  "source_url",
        -  "data_vintage",
        -  "retrieved_at",
        -  "citation",
        -  "license"
        -]New value: +[
        +  "source",
        +  "source_url",
        +  "data_vintage",
        +  "retrieved_at",
        +  "retrieval",
        +  "citation",
        +  "license"
        +]
    • Changedibge_cidades14 fields changed
      • changedOutput schema / properties / provenance / description
        Previous 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"
      • removedOutput schema / properties / provenance / properties / citation / description
        Removed value: -"Citação pronta para uso"
      • removedOutput schema / properties / provenance / properties / data_vintage / description
        Removed value: -"Período de referência do dado segundo a fonte; null se a fonte não expõe"
      • addedOutput schema / properties / provenance / properties / derivation_note
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / provenance / properties / derived
        Added value: +{
        +  "type": "boolean"
        +}
      • addedOutput schema / properties / provenance / properties / field_sources
        Added 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"
        +}
      • removedOutput schema / properties / provenance / properties / license / description
        Removed value: -"Regime legal do dado"
      • addedOutput schema / properties / provenance / properties / notices
        Added value: +{
        +  "items": {
        +    "type": "string"
        +  },
        +  "minItems": 1,
        +  "type": "array"
        +}
      • addedOutput schema / properties / provenance / properties / retrieval
        Added 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"
        +    }
        +  ]
        +}
      • removedOutput schema / properties / provenance / properties / retrieved_at / description
        Removed value: -"Instante real da extração no upstream (ISO-8601, horário de Brasília)"
      • addedOutput schema / properties / provenance / properties / revision
        Added value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "note": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "status": {
        +      "enum": [
        +        "current",
        +        "provisional",
        +        "final"
        +      ],
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "status",
        +    "note"
        +  ],
        +  "type": "object"
        +}
      • removedOutput schema / properties / provenance / properties / source / description
        Removed value: -"Fonte oficial do dado (API do IBGE consultada)"
      • removedOutput schema / properties / provenance / properties / source_url / description
        Removed value: -"URL canônica que reproduz a consulta"
      • changedOutput schema / properties / provenance / required
        Previous value: -[
        -  "source",
        -  "source_url",
        -  "data_vintage",
        -  "retrieved_at",
        -  "citation",
        -  "license"
        -]New value: +[
        +  "source",
        +  "source_url",
        +  "data_vintage",
        +  "retrieved_at",
        +  "retrieval",
        +  "citation",
        +  "license"
        +]
    • Changedibge_cnae14 fields changed
      • changedOutput schema / properties / provenance / description
        Previous 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"
      • removedOutput schema / properties / provenance / properties / citation / description
        Removed value: -"Citação pronta para uso"
      • removedOutput schema / properties / provenance / properties / data_vintage / description
        Removed value: -"Período de referência do dado segundo a fonte; null se a fonte não expõe"
      • addedOutput schema / properties / provenance / properties / derivation_note
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / provenance / properties / derived
        Added value: +{
        +  "type": "boolean"
        +}
      • addedOutput schema / properties / provenance / properties / field_sources
        Added 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"
        +}
      • removedOutput schema / properties / provenance / properties / license / description
        Removed value: -"Regime legal do dado"
      • addedOutput schema / properties / provenance / properties / notices
        Added value: +{
        +  "items": {
        +    "type": "string"
        +  },
        +  "minItems": 1,
        +  "type": "array"
        +}
      • addedOutput schema / properties / provenance / properties / retrieval
        Added 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"
        +    }
        +  ]
        +}
      • removedOutput schema / properties / provenance / properties / retrieved_at / description
        Removed value: -"Instante real da extração no upstream (ISO-8601, horário de Brasília)"
      • addedOutput schema / properties / provenance / properties / revision
        Added value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "note": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "status": {
        +      "enum": [
        +        "current",
        +        "provisional",
        +        "final"
        +      ],
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "status",
        +    "note"
        +  ],
        +  "type": "object"
        +}
      • removedOutput schema / properties / provenance / properties / source / description
        Removed value: -"Fonte oficial do dado (API do IBGE consultada)"
      • removedOutput schema / properties / provenance / properties / source_url / description
        Removed value: -"URL canônica que reproduz a consulta"
      • changedOutput schema / properties / provenance / required
        Previous value: -[
        -  "source",
        -  "source_url",
        -  "data_vintage",
        -  "retrieved_at",
        -  "citation",
        -  "license"
        -]New value: +[
        +  "source",
        +  "source_url",
        +  "data_vintage",
        +  "retrieved_at",
        +  "retrieval",
        +  "citation",
        +  "license"
        +]
    • Changedibge_comparar14 fields changed
      • changedOutput schema / properties / provenance / description
        Previous 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"
      • removedOutput schema / properties / provenance / properties / citation / description
        Removed value: -"Citação pronta para uso"
      • removedOutput schema / properties / provenance / properties / data_vintage / description
        Removed value: -"Período de referência do dado segundo a fonte; null se a fonte não expõe"
      • addedOutput schema / properties / provenance / properties / derivation_note
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / provenance / properties / derived
        Added value: +{
        +  "type": "boolean"
        +}
      • addedOutput schema / properties / provenance / properties / field_sources
        Added 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"
        +}
      • removedOutput schema / properties / provenance / properties / license / description
        Removed value: -"Regime legal do dado"
      • addedOutput schema / properties / provenance / properties / notices
        Added value: +{
        +  "items": {
        +    "type": "string"
        +  },
        +  "minItems": 1,
        +  "type": "array"
        +}
      • addedOutput schema / properties / provenance / properties / retrieval
        Added 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"
        +    }
        +  ]
        +}
      • removedOutput schema / properties / provenance / properties / retrieved_at / description
        Removed value: -"Instante real da extração no upstream (ISO-8601, horário de Brasília)"
      • addedOutput schema / properties / provenance / properties / revision
        Added value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "note": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "status": {
        +      "enum": [
        +        "current",
        +        "provisional",
        +        "final"
        +      ],
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "status",
        +    "note"
        +  ],
        +  "type": "object"
        +}
      • removedOutput schema / properties / provenance / properties / source / description
        Removed value: -"Fonte oficial do dado (API do IBGE consultada)"
      • removedOutput schema / properties / provenance / properties / source_url / description
        Removed value: -"URL canônica que reproduz a consulta"
      • changedOutput schema / properties / provenance / required
        Previous value: -[
        -  "source",
        -  "source_url",
        -  "data_vintage",
        -  "retrieved_at",
        -  "citation",
        -  "license"
        -]New value: +[
        +  "source",
        +  "source_url",
        +  "data_vintage",
        +  "retrieved_at",
        +  "retrieval",
        +  "citation",
        +  "license"
        +]
    • Changedibge_datasaude16 fields changed
      • changedInput schema / properties / indicador / description
        Previous 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\"."
      • changedInput schema / properties / nivel_territorial / description
        Previous 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."
      • changedOutput schema / properties / provenance / description
        Previous 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"
      • removedOutput schema / properties / provenance / properties / citation / description
        Removed value: -"Citação pronta para uso"
      • removedOutput schema / properties / provenance / properties / data_vintage / description
        Removed value: -"Período de referência do dado segundo a fonte; null se a fonte não expõe"
      • addedOutput schema / properties / provenance / properties / derivation_note
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / provenance / properties / derived
        Added value: +{
        +  "type": "boolean"
        +}
      • addedOutput schema / properties / provenance / properties / field_sources
        Added 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"
        +}
      • removedOutput schema / properties / provenance / properties / license / description
        Removed value: -"Regime legal do dado"
      • addedOutput schema / properties / provenance / properties / notices
        Added value: +{
        +  "items": {
        +    "type": "string"
        +  },
        +  "minItems": 1,
        +  "type": "array"
        +}
      • addedOutput schema / properties / provenance / properties / retrieval
        Added 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"
        +    }
        +  ]
        +}
      • removedOutput schema / properties / provenance / properties / retrieved_at / description
        Removed value: -"Instante real da extração no upstream (ISO-8601, horário de Brasília)"
      • addedOutput schema / properties / provenance / properties / revision
        Added value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "note": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "status": {
        +      "enum": [
        +        "current",
        +        "provisional",
        +        "final"
        +      ],
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "status",
        +    "note"
        +  ],
        +  "type": "object"
        +}
      • removedOutput schema / properties / provenance / properties / source / description
        Removed value: -"Fonte oficial do dado (API do IBGE consultada)"
      • removedOutput schema / properties / provenance / properties / source_url / description
        Removed value: -"URL canônica que reproduz a consulta"
      • changedOutput schema / properties / provenance / required
        Previous value: -[
        -  "source",
        -  "source_url",
        -  "data_vintage",
        -  "retrieved_at",
        -  "citation",
        -  "license"
        -]New value: +[
        +  "source",
        +  "source_url",
        +  "data_vintage",
        +  "retrieved_at",
        +  "retrieval",
        +  "citation",
        +  "license"
        +]
    • Changedibge_estados14 fields changed
      • changedOutput schema / properties / provenance / description
        Previous 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"
      • removedOutput schema / properties / provenance / properties / citation / description
        Removed value: -"Citação pronta para uso"
      • removedOutput schema / properties / provenance / properties / data_vintage / description
        Removed value: -"Período de referência do dado segundo a fonte; null se a fonte não expõe"
      • addedOutput schema / properties / provenance / properties / derivation_note
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / provenance / properties / derived
        Added value: +{
        +  "type": "boolean"
        +}
      • addedOutput schema / properties / provenance / properties / field_sources
        Added 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"
        +}
      • removedOutput schema / properties / provenance / properties / license / description
        Removed value: -"Regime legal do dado"
      • addedOutput schema / properties / provenance / properties / notices
        Added value: +{
        +  "items": {
        +    "type": "string"
        +  },
        +  "minItems": 1,
        +  "type": "array"
        +}
      • addedOutput schema / properties / provenance / properties / retrieval
        Added 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"
        +    }
        +  ]
        +}
      • removedOutput schema / properties / provenance / properties / retrieved_at / description
        Removed value: -"Instante real da extração no upstream (ISO-8601, horário de Brasília)"
      • addedOutput schema / properties / provenance / properties / revision
        Added value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "note": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "status": {
        +      "enum": [
        +        "current",
        +        "provisional",
        +        "final"
        +      ],
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "status",
        +    "note"
        +  ],
        +  "type": "object"
        +}
      • removedOutput schema / properties / provenance / properties / source / description
        Removed value: -"Fonte oficial do dado (API do IBGE consultada)"
      • removedOutput schema / properties / provenance / properties / source_url / description
        Removed value: -"URL canônica que reproduz a consulta"
      • changedOutput schema / properties / provenance / required
        Previous value: -[
        -  "source",
        -  "source_url",
        -  "data_vintage",
        -  "retrieved_at",
        -  "citation",
        -  "license"
        -]New value: +[
        +  "source",
        +  "source_url",
        +  "data_vintage",
        +  "retrieved_at",
        +  "retrieval",
        +  "citation",
        +  "license"
        +]
    • Changedibge_geocodigo14 fields changed
      • changedOutput schema / properties / provenance / description
        Previous 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"
      • removedOutput schema / properties / provenance / properties / citation / description
        Removed value: -"Citação pronta para uso"
      • removedOutput schema / properties / provenance / properties / data_vintage / description
        Removed value: -"Período de referência do dado segundo a fonte; null se a fonte não expõe"
      • addedOutput schema / properties / provenance / properties / derivation_note
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / provenance / properties / derived
        Added value: +{
        +  "type": "boolean"
        +}
      • addedOutput schema / properties / provenance / properties / field_sources
        Added 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"
        +}
      • removedOutput schema / properties / provenance / properties / license / description
        Removed value: -"Regime legal do dado"
      • addedOutput schema / properties / provenance / properties / notices
        Added value: +{
        +  "items": {
        +    "type": "string"
        +  },
        +  "minItems": 1,
        +  "type": "array"
        +}
      • addedOutput schema / properties / provenance / properties / retrieval
        Added 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"
        +    }
        +  ]
        +}
      • removedOutput schema / properties / provenance / properties / retrieved_at / description
        Removed value: -"Instante real da extração no upstream (ISO-8601, horário de Brasília)"
      • addedOutput schema / properties / provenance / properties / revision
        Added value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "note": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "status": {
        +      "enum": [
        +        "current",
        +        "provisional",
        +        "final"
        +      ],
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "status",
        +    "note"
        +  ],
        +  "type": "object"
        +}
      • removedOutput schema / properties / provenance / properties / source / description
        Removed value: -"Fonte oficial do dado (API do IBGE consultada)"
      • removedOutput schema / properties / provenance / properties / source_url / description
        Removed value: -"URL canônica que reproduz a consulta"
      • changedOutput schema / properties / provenance / required
        Previous value: -[
        -  "source",
        -  "source_url",
        -  "data_vintage",
        -  "retrieved_at",
        -  "citation",
        -  "license"
        -]New value: +[
        +  "source",
        +  "source_url",
        +  "data_vintage",
        +  "retrieved_at",
        +  "retrieval",
        +  "citation",
        +  "license"
        +]
    • Changedibge_indicadores14 fields changed
      • changedOutput schema / properties / provenance / description
        Previous 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"
      • removedOutput schema / properties / provenance / properties / citation / description
        Removed value: -"Citação pronta para uso"
      • removedOutput schema / properties / provenance / properties / data_vintage / description
        Removed value: -"Período de referência do dado segundo a fonte; null se a fonte não expõe"
      • addedOutput schema / properties / provenance / properties / derivation_note
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / provenance / properties / derived
        Added value: +{
        +  "type": "boolean"
        +}
      • addedOutput schema / properties / provenance / properties / field_sources
        Added 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"
        +}
      • removedOutput schema / properties / provenance / properties / license / description
        Removed value: -"Regime legal do dado"
      • addedOutput schema / properties / provenance / properties / notices
        Added value: +{
        +  "items": {
        +    "type": "string"
        +  },
        +  "minItems": 1,
        +  "type": "array"
        +}
      • addedOutput schema / properties / provenance / properties / retrieval
        Added 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"
        +    }
        +  ]
        +}
      • removedOutput schema / properties / provenance / properties / retrieved_at / description
        Removed value: -"Instante real da extração no upstream (ISO-8601, horário de Brasília)"
      • addedOutput schema / properties / provenance / properties / revision
        Added value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "note": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "status": {
        +      "enum": [
        +        "current",
        +        "provisional",
        +        "final"
        +      ],
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "status",
        +    "note"
        +  ],
        +  "type": "object"
        +}
      • removedOutput schema / properties / provenance / properties / source / description
        Removed value: -"Fonte oficial do dado (API do IBGE consultada)"
      • removedOutput schema / properties / provenance / properties / source_url / description
        Removed value: -"URL canônica que reproduz a consulta"
      • changedOutput schema / properties / provenance / required
        Previous value: -[
        -  "source",
        -  "source_url",
        -  "data_vintage",
        -  "retrieved_at",
        -  "citation",
        -  "license"
        -]New value: +[
        +  "source",
        +  "source_url",
        +  "data_vintage",
        +  "retrieved_at",
        +  "retrieval",
        +  "citation",
        +  "license"
        +]
    • Changedibge_localidade14 fields changed
      • changedOutput schema / properties / provenance / description
        Previous 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"
      • removedOutput schema / properties / provenance / properties / citation / description
        Removed value: -"Citação pronta para uso"
      • removedOutput schema / properties / provenance / properties / data_vintage / description
        Removed value: -"Período de referência do dado segundo a fonte; null se a fonte não expõe"
      • addedOutput schema / properties / provenance / properties / derivation_note
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / provenance / properties / derived
        Added value: +{
        +  "type": "boolean"
        +}
      • addedOutput schema / properties / provenance / properties / field_sources
        Added 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"
        +}
      • removedOutput schema / properties / provenance / properties / license / description
        Removed value: -"Regime legal do dado"
      • addedOutput schema / properties / provenance / properties / notices
        Added value: +{
        +  "items": {
        +    "type": "string"
        +  },
        +  "minItems": 1,
        +  "type": "array"
        +}
      • addedOutput schema / properties / provenance / properties / retrieval
        Added 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"
        +    }
        +  ]
        +}
      • removedOutput schema / properties / provenance / properties / retrieved_at / description
        Removed value: -"Instante real da extração no upstream (ISO-8601, horário de Brasília)"
      • addedOutput schema / properties / provenance / properties / revision
        Added value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "note": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "status": {
        +      "enum": [
        +        "current",
        +        "provisional",
        +        "final"
        +      ],
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "status",
        +    "note"
        +  ],
        +  "type": "object"
        +}
      • removedOutput schema / properties / provenance / properties / source / description
        Removed value: -"Fonte oficial do dado (API do IBGE consultada)"
      • removedOutput schema / properties / provenance / properties / source_url / description
        Removed value: -"URL canônica que reproduz a consulta"
      • changedOutput schema / properties / provenance / required
        Previous value: -[
        -  "source",
        -  "source_url",
        -  "data_vintage",
        -  "retrieved_at",
        -  "citation",
        -  "license"
        -]New value: +[
        +  "source",
        +  "source_url",
        +  "data_vintage",
        +  "retrieved_at",
        +  "retrieval",
        +  "citation",
        +  "license"
        +]
    • Changedibge_malhas15 fields changed
      • changedOutput schema / properties / provenance / description
        Previous 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"
      • removedOutput schema / properties / provenance / properties / citation / description
        Removed value: -"Citação pronta para uso"
      • removedOutput schema / properties / provenance / properties / data_vintage / description
        Removed value: -"Período de referência do dado segundo a fonte; null se a fonte não expõe"
      • addedOutput schema / properties / provenance / properties / derivation_note
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / provenance / properties / derived
        Added value: +{
        +  "type": "boolean"
        +}
      • addedOutput schema / properties / provenance / properties / field_sources
        Added 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"
        +}
      • removedOutput schema / properties / provenance / properties / license / description
        Removed value: -"Regime legal do dado"
      • addedOutput schema / properties / provenance / properties / notices
        Added value: +{
        +  "items": {
        +    "type": "string"
        +  },
        +  "minItems": 1,
        +  "type": "array"
        +}
      • addedOutput schema / properties / provenance / properties / retrieval
        Added 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"
        +    }
        +  ]
        +}
      • removedOutput schema / properties / provenance / properties / retrieved_at / description
        Removed value: -"Instante real da extração no upstream (ISO-8601, horário de Brasília)"
      • addedOutput schema / properties / provenance / properties / revision
        Added value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "note": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "status": {
        +      "enum": [
        +        "current",
        +        "provisional",
        +        "final"
        +      ],
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "status",
        +    "note"
        +  ],
        +  "type": "object"
        +}
      • removedOutput schema / properties / provenance / properties / source / description
        Removed value: -"Fonte oficial do dado (API do IBGE consultada)"
      • removedOutput schema / properties / provenance / properties / source_url / description
        Removed value: -"URL canônica que reproduz a consulta"
      • changedOutput schema / properties / provenance / required
        Previous value: -[
        -  "source",
        -  "source_url",
        -  "data_vintage",
        -  "retrieved_at",
        -  "citation",
        -  "license"
        -]New value: +[
        +  "source",
        +  "source_url",
        +  "data_vintage",
        +  "retrieved_at",
        +  "retrieval",
        +  "citation",
        +  "license"
        +]
      • addedOutput schema / properties / resumo_geometrico
        Added 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"
        +}
    • Changedibge_malhas_tema14 fields changed
      • changedOutput schema / properties / provenance / description
        Previous 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"
      • removedOutput schema / properties / provenance / properties / citation / description
        Removed value: -"Citação pronta para uso"
      • removedOutput schema / properties / provenance / properties / data_vintage / description
        Removed value: -"Período de referência do dado segundo a fonte; null se a fonte não expõe"
      • addedOutput schema / properties / provenance / properties / derivation_note
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / provenance / properties / derived
        Added value: +{
        +  "type": "boolean"
        +}
      • addedOutput schema / properties / provenance / properties / field_sources
        Added 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"
        +}
      • removedOutput schema / properties / provenance / properties / license / description
        Removed value: -"Regime legal do dado"
      • addedOutput schema / properties / provenance / properties / notices
        Added value: +{
        +  "items": {
        +    "type": "string"
        +  },
        +  "minItems": 1,
        +  "type": "array"
        +}
      • addedOutput schema / properties / provenance / properties / retrieval
        Added 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"
        +    }
        +  ]
        +}
      • removedOutput schema / properties / provenance / properties / retrieved_at / description
        Removed value: -"Instante real da extração no upstream (ISO-8601, horário de Brasília)"
      • addedOutput schema / properties / provenance / properties / revision
        Added value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "note": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "status": {
        +      "enum": [
        +        "current",
        +        "provisional",
        +        "final"
        +      ],
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "status",
        +    "note"
        +  ],
        +  "type": "object"
        +}
      • removedOutput schema / properties / provenance / properties / source / description
        Removed value: -"Fonte oficial do dado (API do IBGE consultada)"
      • removedOutput schema / properties / provenance / properties / source_url / description
        Removed value: -"URL canônica que reproduz a consulta"
      • changedOutput schema / properties / provenance / required
        Previous value: -[
        -  "source",
        -  "source_url",
        -  "data_vintage",
        -  "retrieved_at",
        -  "citation",
        -  "license"
        -]New value: +[
        +  "source",
        +  "source_url",
        +  "data_vintage",
        +  "retrieved_at",
        +  "retrieval",
        +  "citation",
        +  "license"
        +]
    • Addedibge_mapa
    • Changedibge_municipios14 fields changed
      • changedOutput schema / properties / provenance / description
        Previous 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"
      • removedOutput schema / properties / provenance / properties / citation / description
        Removed value: -"Citação pronta para uso"
      • removedOutput schema / properties / provenance / properties / data_vintage / description
        Removed value: -"Período de referência do dado segundo a fonte; null se a fonte não expõe"
      • addedOutput schema / properties / provenance / properties / derivation_note
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / provenance / properties / derived
        Added value: +{
        +  "type": "boolean"
        +}
      • addedOutput schema / properties / provenance / properties / field_sources
        Added 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"
        +}
      • removedOutput schema / properties / provenance / properties / license / description
        Removed value: -"Regime legal do dado"
      • addedOutput schema / properties / provenance / properties / notices
        Added value: +{
        +  "items": {
        +    "type": "string"
        +  },
        +  "minItems": 1,
        +  "type": "array"
        +}
      • addedOutput schema / properties / provenance / properties / retrieval
        Added 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"
        +    }
        +  ]
        +}
      • removedOutput schema / properties / provenance / properties / retrieved_at / description
        Removed value: -"Instante real da extração no upstream (ISO-8601, horário de Brasília)"
      • addedOutput schema / properties / provenance / properties / revision
        Added value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "note": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "status": {
        +      "enum": [
        +        "current",
        +        "provisional",
        +        "final"
        +      ],
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "status",
        +    "note"
        +  ],
        +  "type": "object"
        +}
      • removedOutput schema / properties / provenance / properties / source / description
        Removed value: -"Fonte oficial do dado (API do IBGE consultada)"
      • removedOutput schema / properties / provenance / properties / source_url / description
        Removed value: -"URL canônica que reproduz a consulta"
      • changedOutput schema / properties / provenance / required
        Previous value: -[
        -  "source",
        -  "source_url",
        -  "data_vintage",
        -  "retrieved_at",
        -  "citation",
        -  "license"
        -]New value: +[
        +  "source",
        +  "source_url",
        +  "data_vintage",
        +  "retrieved_at",
        +  "retrieval",
        +  "citation",
        +  "license"
        +]
    • Changedibge_nomes14 fields changed
      • changedOutput schema / properties / provenance / description
        Previous 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"
      • removedOutput schema / properties / provenance / properties / citation / description
        Removed value: -"Citação pronta para uso"
      • removedOutput schema / properties / provenance / properties / data_vintage / description
        Removed value: -"Período de referência do dado segundo a fonte; null se a fonte não expõe"
      • addedOutput schema / properties / provenance / properties / derivation_note
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / provenance / properties / derived
        Added value: +{
        +  "type": "boolean"
        +}
      • addedOutput schema / properties / provenance / properties / field_sources
        Added 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"
        +}
      • removedOutput schema / properties / provenance / properties / license / description
        Removed value: -"Regime legal do dado"
      • addedOutput schema / properties / provenance / properties / notices
        Added value: +{
        +  "items": {
        +    "type": "string"
        +  },
        +  "minItems": 1,
        +  "type": "array"
        +}
      • addedOutput schema / properties / provenance / properties / retrieval
        Added 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"
        +    }
        +  ]
        +}
      • removedOutput schema / properties / provenance / properties / retrieved_at / description
        Removed value: -"Instante real da extração no upstream (ISO-8601, horário de Brasília)"
      • addedOutput schema / properties / provenance / properties / revision
        Added value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "note": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "status": {
        +      "enum": [
        +        "current",
        +        "provisional",
        +        "final"
        +      ],
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "status",
        +    "note"
        +  ],
        +  "type": "object"
        +}
      • removedOutput schema / properties / provenance / properties / source / description
        Removed value: -"Fonte oficial do dado (API do IBGE consultada)"
      • removedOutput schema / properties / provenance / properties / source_url / description
        Removed value: -"URL canônica que reproduz a consulta"
      • changedOutput schema / properties / provenance / required
        Previous value: -[
        -  "source",
        -  "source_url",
        -  "data_vintage",
        -  "retrieved_at",
        -  "citation",
        -  "license"
        -]New value: +[
        +  "source",
        +  "source_url",
        +  "data_vintage",
        +  "retrieved_at",
        +  "retrieval",
        +  "citation",
        +  "license"
        +]
    • Changedibge_noticias14 fields changed
      • changedOutput schema / properties / provenance / description
        Previous 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"
      • removedOutput schema / properties / provenance / properties / citation / description
        Removed value: -"Citação pronta para uso"
      • removedOutput schema / properties / provenance / properties / data_vintage / description
        Removed value: -"Período de referência do dado segundo a fonte; null se a fonte não expõe"
      • addedOutput schema / properties / provenance / properties / derivation_note
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / provenance / properties / derived
        Added value: +{
        +  "type": "boolean"
        +}
      • addedOutput schema / properties / provenance / properties / field_sources
        Added 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"
        +}
      • removedOutput schema / properties / provenance / properties / license / description
        Removed value: -"Regime legal do dado"
      • addedOutput schema / properties / provenance / properties / notices
        Added value: +{
        +  "items": {
        +    "type": "string"
        +  },
        +  "minItems": 1,
        +  "type": "array"
        +}
      • addedOutput schema / properties / provenance / properties / retrieval
        Added 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"
        +    }
        +  ]
        +}
      • removedOutput schema / properties / provenance / properties / retrieved_at / description
        Removed value: -"Instante real da extração no upstream (ISO-8601, horário de Brasília)"
      • addedOutput schema / properties / provenance / properties / revision
        Added value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "note": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "status": {
        +      "enum": [
        +        "current",
        +        "provisional",
        +        "final"
        +      ],
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "status",
        +    "note"
        +  ],
        +  "type": "object"
        +}
      • removedOutput schema / properties / provenance / properties / source / description
        Removed value: -"Fonte oficial do dado (API do IBGE consultada)"
      • removedOutput schema / properties / provenance / properties / source_url / description
        Removed value: -"URL canônica que reproduz a consulta"
      • changedOutput schema / properties / provenance / required
        Previous value: -[
        -  "source",
        -  "source_url",
        -  "data_vintage",
        -  "retrieved_at",
        -  "citation",
        -  "license"
        -]New value: +[
        +  "source",
        +  "source_url",
        +  "data_vintage",
        +  "retrieved_at",
        +  "retrieval",
        +  "citation",
        +  "license"
        +]
    • Changedibge_paises14 fields changed
      • changedOutput schema / properties / provenance / description
        Previous 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"
      • removedOutput schema / properties / provenance / properties / citation / description
        Removed value: -"Citação pronta para uso"
      • removedOutput schema / properties / provenance / properties / data_vintage / description
        Removed value: -"Período de referência do dado segundo a fonte; null se a fonte não expõe"
      • addedOutput schema / properties / provenance / properties / derivation_note
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / provenance / properties / derived
        Added value: +{
        +  "type": "boolean"
        +}
      • addedOutput schema / properties / provenance / properties / field_sources
        Added 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"
        +}
      • removedOutput schema / properties / provenance / properties / license / description
        Removed value: -"Regime legal do dado"
      • addedOutput schema / properties / provenance / properties / notices
        Added value: +{
        +  "items": {
        +    "type": "string"
        +  },
        +  "minItems": 1,
        +  "type": "array"
        +}
      • addedOutput schema / properties / provenance / properties / retrieval
        Added 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"
        +    }
        +  ]
        +}
      • removedOutput schema / properties / provenance / properties / retrieved_at / description
        Removed value: -"Instante real da extração no upstream (ISO-8601, horário de Brasília)"
      • addedOutput schema / properties / provenance / properties / revision
        Added value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "note": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "status": {
        +      "enum": [
        +        "current",
        +        "provisional",
        +        "final"
        +      ],
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "status",
        +    "note"
        +  ],
        +  "type": "object"
        +}
      • removedOutput schema / properties / provenance / properties / source / description
        Removed value: -"Fonte oficial do dado (API do IBGE consultada)"
      • removedOutput schema / properties / provenance / properties / source_url / description
        Removed value: -"URL canônica que reproduz a consulta"
      • changedOutput schema / properties / provenance / required
        Previous value: -[
        -  "source",
        -  "source_url",
        -  "data_vintage",
        -  "retrieved_at",
        -  "citation",
        -  "license"
        -]New value: +[
        +  "source",
        +  "source_url",
        +  "data_vintage",
        +  "retrieved_at",
        +  "retrieval",
        +  "citation",
        +  "license"
        +]
    • Changedibge_pesquisas14 fields changed
      • changedOutput schema / properties / provenance / description
        Previous 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"
      • removedOutput schema / properties / provenance / properties / citation / description
        Removed value: -"Citação pronta para uso"
      • removedOutput schema / properties / provenance / properties / data_vintage / description
        Removed value: -"Período de referência do dado segundo a fonte; null se a fonte não expõe"
      • addedOutput schema / properties / provenance / properties / derivation_note
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / provenance / properties / derived
        Added value: +{
        +  "type": "boolean"
        +}
      • addedOutput schema / properties / provenance / properties / field_sources
        Added 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"
        +}
      • removedOutput schema / properties / provenance / properties / license / description
        Removed value: -"Regime legal do dado"
      • addedOutput schema / properties / provenance / properties / notices
        Added value: +{
        +  "items": {
        +    "type": "string"
        +  },
        +  "minItems": 1,
        +  "type": "array"
        +}
      • addedOutput schema / properties / provenance / properties / retrieval
        Added 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"
        +    }
        +  ]
        +}
      • removedOutput schema / properties / provenance / properties / retrieved_at / description
        Removed value: -"Instante real da extração no upstream (ISO-8601, horário de Brasília)"
      • addedOutput schema / properties / provenance / properties / revision
        Added value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "note": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "status": {
        +      "enum": [
        +        "current",
        +        "provisional",
        +        "final"
        +      ],
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "status",
        +    "note"
        +  ],
        +  "type": "object"
        +}
      • removedOutput schema / properties / provenance / properties / source / description
        Removed value: -"Fonte oficial do dado (API do IBGE consultada)"
      • removedOutput schema / properties / provenance / properties / source_url / description
        Removed value: -"URL canônica que reproduz a consulta"
      • changedOutput schema / properties / provenance / required
        Previous value: -[
        -  "source",
        -  "source_url",
        -  "data_vintage",
        -  "retrieved_at",
        -  "citation",
        -  "license"
        -]New value: +[
        +  "source",
        +  "source_url",
        +  "data_vintage",
        +  "retrieved_at",
        +  "retrieval",
        +  "citation",
        +  "license"
        +]
    • Changedibge_sidra14 fields changed
      • changedOutput schema / properties / provenance / description
        Previous 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"
      • removedOutput schema / properties / provenance / properties / citation / description
        Removed value: -"Citação pronta para uso"
      • removedOutput schema / properties / provenance / properties / data_vintage / description
        Removed value: -"Período de referência do dado segundo a fonte; null se a fonte não expõe"
      • addedOutput schema / properties / provenance / properties / derivation_note
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / provenance / properties / derived
        Added value: +{
        +  "type": "boolean"
        +}
      • addedOutput schema / properties / provenance / properties / field_sources
        Added 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"
        +}
      • removedOutput schema / properties / provenance / properties / license / description
        Removed value: -"Regime legal do dado"
      • addedOutput schema / properties / provenance / properties / notices
        Added value: +{
        +  "items": {
        +    "type": "string"
        +  },
        +  "minItems": 1,
        +  "type": "array"
        +}
      • addedOutput schema / properties / provenance / properties / retrieval
        Added 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"
        +    }
        +  ]
        +}
      • removedOutput schema / properties / provenance / properties / retrieved_at / description
        Removed value: -"Instante real da extração no upstream (ISO-8601, horário de Brasília)"
      • addedOutput schema / properties / provenance / properties / revision
        Added value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "note": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "status": {
        +      "enum": [
        +        "current",
        +        "provisional",
        +        "final"
        +      ],
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "status",
        +    "note"
        +  ],
        +  "type": "object"
        +}
      • removedOutput schema / properties / provenance / properties / source / description
        Removed value: -"Fonte oficial do dado (API do IBGE consultada)"
      • removedOutput schema / properties / provenance / properties / source_url / description
        Removed value: -"URL canônica que reproduz a consulta"
      • changedOutput schema / properties / provenance / required
        Previous value: -[
        -  "source",
        -  "source_url",
        -  "data_vintage",
        -  "retrieved_at",
        -  "citation",
        -  "license"
        -]New value: +[
        +  "source",
        +  "source_url",
        +  "data_vintage",
        +  "retrieved_at",
        +  "retrieval",
        +  "citation",
        +  "license"
        +]
    • Changedibge_sidra_metadados14 fields changed
      • changedOutput schema / properties / provenance / description
        Previous 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"
      • removedOutput schema / properties / provenance / properties / citation / description
        Removed value: -"Citação pronta para uso"
      • removedOutput schema / properties / provenance / properties / data_vintage / description
        Removed value: -"Período de referência do dado segundo a fonte; null se a fonte não expõe"
      • addedOutput schema / properties / provenance / properties / derivation_note
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / provenance / properties / derived
        Added value: +{
        +  "type": "boolean"
        +}
      • addedOutput schema / properties / provenance / properties / field_sources
        Added 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"
        +}
      • removedOutput schema / properties / provenance / properties / license / description
        Removed value: -"Regime legal do dado"
      • addedOutput schema / properties / provenance / properties / notices
        Added value: +{
        +  "items": {
        +    "type": "string"
        +  },
        +  "minItems": 1,
        +  "type": "array"
        +}
      • addedOutput schema / properties / provenance / properties / retrieval
        Added 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"
        +    }
        +  ]
        +}
      • removedOutput schema / properties / provenance / properties / retrieved_at / description
        Removed value: -"Instante real da extração no upstream (ISO-8601, horário de Brasília)"
      • addedOutput schema / properties / provenance / properties / revision
        Added value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "note": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "status": {
        +      "enum": [
        +        "current",
        +        "provisional",
        +        "final"
        +      ],
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "status",
        +    "note"
        +  ],
        +  "type": "object"
        +}
      • removedOutput schema / properties / provenance / properties / source / description
        Removed value: -"Fonte oficial do dado (API do IBGE consultada)"
      • removedOutput schema / properties / provenance / properties / source_url / description
        Removed value: -"URL canônica que reproduz a consulta"
      • changedOutput schema / properties / provenance / required
        Previous value: -[
        -  "source",
        -  "source_url",
        -  "data_vintage",
        -  "retrieved_at",
        -  "citation",
        -  "license"
        -]New value: +[
        +  "source",
        +  "source_url",
        +  "data_vintage",
        +  "retrieved_at",
        +  "retrieval",
        +  "citation",
        +  "license"
        +]
    • Changedibge_sidra_tabelas14 fields changed
      • changedOutput schema / properties / provenance / description
        Previous 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"
      • removedOutput schema / properties / provenance / properties / citation / description
        Removed value: -"Citação pronta para uso"
      • removedOutput schema / properties / provenance / properties / data_vintage / description
        Removed value: -"Período de referência do dado segundo a fonte; null se a fonte não expõe"
      • addedOutput schema / properties / provenance / properties / derivation_note
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / provenance / properties / derived
        Added value: +{
        +  "type": "boolean"
        +}
      • addedOutput schema / properties / provenance / properties / field_sources
        Added 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"
        +}
      • removedOutput schema / properties / provenance / properties / license / description
        Removed value: -"Regime legal do dado"
      • addedOutput schema / properties / provenance / properties / notices
        Added value: +{
        +  "items": {
        +    "type": "string"
        +  },
        +  "minItems": 1,
        +  "type": "array"
        +}
      • addedOutput schema / properties / provenance / properties / retrieval
        Added 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"
        +    }
        +  ]
        +}
      • removedOutput schema / properties / provenance / properties / retrieved_at / description
        Removed value: -"Instante real da extração no upstream (ISO-8601, horário de Brasília)"
      • addedOutput schema / properties / provenance / properties / revision
        Added value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "note": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "status": {
        +      "enum": [
        +        "current",
        +        "provisional",
        +        "final"
        +      ],
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "status",
        +    "note"
        +  ],
        +  "type": "object"
        +}
      • removedOutput schema / properties / provenance / properties / source / description
        Removed value: -"Fonte oficial do dado (API do IBGE consultada)"
      • removedOutput schema / properties / provenance / properties / source_url / description
        Removed value: -"URL canônica que reproduz a consulta"
      • changedOutput schema / properties / provenance / required
        Previous value: -[
        -  "source",
        -  "source_url",
        -  "data_vintage",
        -  "retrieved_at",
        -  "citation",
        -  "license"
        -]New value: +[
        +  "source",
        +  "source_url",
        +  "data_vintage",
        +  "retrieved_at",
        +  "retrieval",
        +  "citation",
        +  "license"
        +]
    • Changedibge_vizinhos16 fields changed
      • changedOutput schema / properties / provenance / description
        Previous 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"
      • removedOutput schema / properties / provenance / properties / citation / description
        Removed value: -"Citação pronta para uso"
      • removedOutput schema / properties / provenance / properties / data_vintage / description
        Removed value: -"Período de referência do dado segundo a fonte; null se a fonte não expõe"
      • addedOutput schema / properties / provenance / properties / derivation_note
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / provenance / properties / derived
        Added value: +{
        +  "type": "boolean"
        +}
      • addedOutput schema / properties / provenance / properties / field_sources
        Added 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"
        +}
      • removedOutput schema / properties / provenance / properties / license / description
        Removed value: -"Regime legal do dado"
      • addedOutput schema / properties / provenance / properties / notices
        Added value: +{
        +  "items": {
        +    "type": "string"
        +  },
        +  "minItems": 1,
        +  "type": "array"
        +}
      • addedOutput schema / properties / provenance / properties / retrieval
        Added 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"
        +    }
        +  ]
        +}
      • removedOutput schema / properties / provenance / properties / retrieved_at / description
        Removed value: -"Instante real da extração no upstream (ISO-8601, horário de Brasília)"
      • addedOutput schema / properties / provenance / properties / revision
        Added value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "note": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "status": {
        +      "enum": [
        +        "current",
        +        "provisional",
        +        "final"
        +      ],
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "status",
        +    "note"
        +  ],
        +  "type": "object"
        +}
      • removedOutput schema / properties / provenance / properties / source / description
        Removed value: -"Fonte oficial do dado (API do IBGE consultada)"
      • removedOutput schema / properties / provenance / properties / source_url / description
        Removed value: -"URL canônica que reproduz a consulta"
      • changedOutput schema / properties / provenance / required
        Previous value: -[
        -  "source",
        -  "source_url",
        -  "data_vintage",
        -  "retrieved_at",
        -  "citation",
        -  "license"
        -]New value: +[
        +  "source",
        +  "source_url",
        +  "data_vintage",
        +  "retrieved_at",
        +  "retrieval",
        +  "citation",
        +  "license"
        +]
      • addedOutput schema / properties / vizinhos / items / properties / populacao_ano
        Added value: +{
        +  "description": "Período de referência da população enriquecida via SIDRA",
        +  "type": "string"
        +}
      • addedOutput schema / properties / vizinhos / items / properties / populacao_tabela
        Added value: +{
        +  "description": "Tabela SIDRA usada no enriquecimento populacional",
        +  "type": "string"
        +}
    • Changedsearch1 field changed
      • addedInput schema / additionalProperties
        Added value: +false
  2. 23 tool updatesv0.6.0
    • First observedfetch
    • First observedibge_calendario
    • First observedibge_censo
    • First observedibge_cidades
    • First observedibge_cnae
    • First observedibge_comparar
    • First observedibge_datasaude
    • First observedibge_estados
    • First observedibge_geocodigo
    • First observedibge_indicadores
    • First observedibge_localidade
    • First observedibge_malhas
    • First observedibge_malhas_tema
    • First observedibge_municipios
    • First observedibge_nomes
    • First observedibge_noticias
    • First observedibge_paises
    • First observedibge_pesquisas
    • First observedibge_sidra
    • First observedibge_sidra_metadados
    • First observedibge_sidra_tabelas
    • First observedibge_vizinhos
    • First observedsearch

TDQS

A4.2/5.0

Scored across 24 tools

Disambiguation4/5

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.

Naming Consistency4/5

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.

Tool Count3/5

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.

Completeness4/5

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

ActivityMaintained
ResponsivenessWithin a week

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables 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