Skip to main content
Glama

IBGE Brasil MCP Server

npm version npm downloads node MCP Registry LobeHub ibge-br-mcp MCP server CI Coverage GitHub stars GitHub Sponsors License: MIT

Live, exact Brazilian public data for your AI assistant — with provenance, not guesswork.

Ask an LLM "what was Belo Horizonte's population in the 2022 Census?" and you get a plausible number from its training data: maybe right, maybe outdated, with no source. ibge-br-mcp instead has your assistant query the official IBGE APIs in real time — returning the exact figure together with the table and period it came from.

🇧🇷 Leia em Português

This server implements the Model Context Protocol (MCP) to give AI assistants live, structured access to Brazil's public geographic, demographic, economic, and health data — sourced from the IBGE APIs (including health indicators served through IBGE's SIDRA system).

See it in action

Ask your assistant, in English or Portuguese:

  • "What was Belo Horizonte's population in the 2022 Census?" → ibge_cidades / ibge_censo

  • "List the municipalities of Espírito Santo." → ibge_municipios

  • "Compare GDP across the Southeast state capitals." → ibge_comparar

The answers come live from the official IBGE APIs — exact figures with the table and period they came from, not numbers guessed from training data.

Want to see a whole analysis rather than a single answer? The end-to-end demo works one real question — which state grew most between the 2010 and 2022 Censuses, and what drove it — from first call to conclusion, with every figure as it came back. The practical examples are seven shorter recipes, including ranking all 5,570 municipalities in a single call.

Related MCP server: Brazilian CEP MCP

Features

  • 23 tools covering all major IBGE data domains — 21 ibge_* data tools plus search/fetch for ChatGPT Deep Research

  • Provenance block on every response — source, canonical URL, reference period, real extraction timestamp, ready-to-use citation, and legal regime (see Data provenance)

  • Reference resources & analysis prompts (MCP catalogs + ready-made templates)

  • 565 automated tests — 88% overall coverage, 92% across the tools

  • Automatic caching with configurable TTL for optimal performance

  • Retry mechanism with exponential backoff for network resilience

  • Comprehensive validation for all input parameters

  • Standardized error handling with helpful suggestions

  • Full TypeScript support with strict typing

📖 Article (in Portuguese): Como achar a tabela certa no SIDRA — e como saber que é a certa — finding the right SIDRA table, the metadata that settles it, a full worked example on 2022 Census data, and the four traps that cost the most. Also published on the site, in Portuguese and English: sidneybissoli.com.

🔌 Tutorial: Querying SIDRA through MCP in Claude and ChatGPT — how to connect this server in claude.ai, Claude Desktop, Claude Code, ChatGPT (developer mode and Deep Research), Cursor, VS Code and Gemini CLI, then one real query end to end with the provenance block it returns. Em português.

Data provenance

Since v3.3.0 every successful tool response carries a provenance block (portfolio contract v1.0), so each number is citable, auditable, and reproducible. The block is emitted on three channels:

  1. structuredContent.provenance (parseable, visible to the model) — exactly six keys: source (the IBGE API queried), source_url (canonical URL that reproduces the query), data_vintage (reference period when the source exposes one; null otherwise), retrieved_at (the REAL upstream extraction instant, preserved across cache hits, Brasília time), citation ("Fonte: IBGE — [pesquisa/tabela], [URL], extraído em [data]."), and license — plus attribution, the canonical list of source URLs.

  2. _meta under br.com.sidneybissoli.ibge/provenance and .../attribution (out-of-band mirror for audit/UI, zero model tokens).

  3. A compact text footer appended to the Markdown, for text-only clients.

The IBGE APIs declare no license of their own; the legal regime is Brazil's open-data framework — Lei 12.527/2011 (LAI) and Decreto 8.777/2016 (unrestricted reuse, free use, obligation limited to crediting the source). Statistics-mode responses (estatisticas=true) and ibge_comparar are marked derived with an explanatory note in the canonical block, since the aggregates are computed server-side from the raw IBGE values.

What each number is, and which version of it. A SIDRA value says neither its period nor whether it is a monthly change, a year-to-date or 12-month accumulation, an index or a level — the record's period column and its Variável label do, and each ibge_indicadores entry is pinned to the one variable its name promises (since 5.7.0; before, nine of them mixed every variable of the table). data_vintage is ordered by the SIDRA period code, so a January–December request reads "janeiro 2024–dezembro 2024". Every value is the version SIDRA publishes at retrieved_at: IBGE revises published figures (quarterly GDP, PNAD reweighting, PIM/PMC/PMS) and keeps no earlier version.

Available Tools

Localities & Geography

Tool

Description

ibge_estados

List Brazilian states with region filtering

ibge_municipios

List municipalities by state or search by name

ibge_localidade

Get details of a locality by IBGE code

ibge_geocodigo

Decode IBGE codes or search codes by name

ibge_vizinhos

Find neighboring municipalities

Statistical Data (SIDRA)

Tool

Description

ibge_sidra

Query SIDRA tables (Census, PNAD, GDP, etc.)

ibge_sidra_tabelas

List and search available SIDRA tables (accent-insensitive; everyday Portuguese resolved to the IBGE's wording, and the response says so)

ibge_sidra_metadados

Get table metadata (variables, periods, levels)

ibge_pesquisas

List IBGE research surveys and their tables

Economic & Social Indicators

Tool

Description

ibge_indicadores

Economic and social indicators (GDP, IPCA, unemployment)

ibge_censo

Census data (1970-2022) with 16 themes

ibge_comparar

Compare indicators across localities with rankings

Municipal Data (Cidades@)

Tool

Description

ibge_cidades

Municipal indicators (population, HDI, GDP per capita, etc.)

International Data

Tool

Description

ibge_paises

Country data following UN M49 methodology

Demographics

Tool

Description

ibge_nomes

Name frequency and rankings in Brazil

Classifications

Tool

Description

ibge_cnae

CNAE (National Classification of Economic Activities)

Maps & Geographic Meshes

Tool

Description

ibge_malhas

Geographic meshes (GeoJSON, TopoJSON, SVG)

ibge_malhas_tema

What a thematic recorte contains (biomes, Legal Amazon, semi-arid, coastal, border strip, metro regions, RIDEs) + the URL to download its geometry

Health

Tool

Description

ibge_datasaude

Health indicators via IBGE's SIDRA

News & Calendar

Tool

Description

ibge_noticias

IBGE news and press releases

ibge_calendario

IBGE release and collection calendar

ChatGPT Deep Research

Tool

Description

search

Searches the IBGE catalog (SIDRA tables, municipalities, known indicators) — OpenAI Deep Research contract

fetch

Returns one catalog document (table metadata, municipality hierarchy + population, indicator series) with its public URL for citation

The two are the only tools without the ibge_ prefix: their names are fixed by the OpenAI contract. For data queries keep using the ibge_* tools.

Which tool should I use?

With 23 tools, several can touch the same topic. Quick guide for the common overlaps:

Population & demographics

You want…

Use

A single municipality/state panel (population, HDI, GDP…)

ibge_cidades

Census data or historical series (1970–2022)

ibge_censo

Rank/compare 2–10 localities on one indicator

ibge_comparar

A macro indicator time series (GDP, IPCA, unemployment…)

ibge_indicadores

A specific SIDRA table / fine control

ibge_sidra

The largest/smallest/mean/median across a whole table

ibge_sidra/ibge_censo/ibge_indicadores/ibge_datasaude with estatisticas=true

Economic indicators

You want…

Use

IPCA, INPC, GDP, unemployment (IBGE, primary source)

ibge_indicadores

Localities & codes

You want…

Use

List/search municipalities

ibge_municipios

List states

ibge_estados

Resolve a name→code at any level, or decode a code's structure

ibge_geocodigo

Full record of one locality you already have the code for

ibge_localidade

Neighboring municipalities

ibge_vizinhos

SIDRA workflow

Discover → inspect → query: ibge_pesquisas / ibge_sidra_tabelas (find a table) → ibge_sidra_metadados (its structure) → ibge_sidra (query). For common data, the wrappers above (ibge_censo, ibge_indicadores, ibge_comparar, ibge_cidades) are usually easier.

Ask in your words, not the IBGE's

The IBGE names its tables in official statistical Portuguese, and ibge_sidra_tabelas matched your words against the table name as a plain substring, accents included — so populacao (no tilde, as anyone types it) returned nothing at all, and so did the everyday word for a concept the IBGE names differently. Measured over the 9,336 tables of the Aggregates API (2026-09-16), fixed since 5.1.0: both sides are normalised, every word must match (AND), and the everyday word is expanded to the IBGE's own — the response says so in notas_vocabulario, and zero results come with a way out.

you ask

hits before

the IBGE writes

hits

populacao, ocupacao, instrucao, saude, area, agua

0

população, ocupação, instrução, saúde, área, água

520, 364, 698, 518, 956, 256

desemprego

4

desocupação

33

renda

72

rendimento

1,126

inflação

0

IPCA, INPC, preços

37, 15, 75

moradia, casa

14, 101

domicílio

3,606

cidade

110

município

455

natalidade, mortes

0, 1

nascidos vivos, óbitos

84, 33

gênero

40

sexo

2,020

negros

0

cor ou raça

1,134

universidade, faculdade

0

ensino superior

12

luz, fábrica, tabagismo, convênio, idosos

0

energia elétrica, indústria, fumante, plano de saúde, 60 anos

43, 248, 94, 101, 89

Only measured pairs enter the table (src/vocabulario.ts, counts in the header): the word you ask with absent from the catalogue, the IBGE's word present. What the IBGE does not publish as an aggregate stays out and still returns zero — turismo, aposentadoria, frota — because an alias for data that does not exist promises what the source does not have. The same table feeds the Deep Research search index, which gets the everyday word as a keyword of the table whose name carries the IBGE's word.

Maps (meshes)

You want…

Use

Administrative outlines (Brazil/region/state/municipality)

ibge_malhas

Thematic areas (biomes, Legal Amazon, semi-arid, metro regions)

ibge_malhas_tema (IBGE Geosserviços WFS — the Malhas API does not publish these)

Installation

Prerequisites

  • Node.js 22.x or higher (engines.node)

  • npm or yarn

npm install -g ibge-br-mcp

From source

# Clone the repository
git clone https://github.com/SidneyBissoli/ibge-br-mcp.git
cd ibge-br-mcp

# Install dependencies
npm install

# Build the project
npm run build

Configuration

Remote endpoint (nothing to install)

The server is also hosted, with the same tools, over Streamable HTTP and without a key:

https://ibge.sidneybissoli.com/mcp

It works with any client that accepts a remote MCP server — a custom connector in claude.ai (Settings → Connectors → Add custom connector), claude mcp add --transport http ibge https://ibge.sidneybissoli.com/mcp in Claude Code, an app in ChatGPT, the mcp.json of Cursor and VS Code. The step-by-step for each client is in the tutorial. The sections below cover the local form, via npx.

Claude Desktop

Add to your Claude Desktop configuration file (claude_desktop_config.json):

{
  "mcpServers": {
    "ibge-br-mcp": {
      "command": "npx",
      "args": ["-y", "ibge-br-mcp"]
    }
  }
}

Or if installed from source:

{
  "mcpServers": {
    "ibge-br-mcp": {
      "command": "node",
      "args": ["/path/to/ibge-br-mcp/dist/index.js"]
    }
  }
}

Claude Code

{
  "mcpServers": {
    "ibge-br-mcp": {
      "command": "npx",
      "args": ["-y", "ibge-br-mcp"]
    }
  }
}

ChatGPT (Deep Research)

ChatGPT deep research (and company knowledge, and research workflows over the Responses API) only uses an MCP server that exposes exactly search and fetch — this server does, on top of the ibge_* tools. Point the connector at the hosted endpoint, no key required:

https://ibge.sidneybissoli.com/mcp

search ranks the query against SIDRA tables, municipalities and the known indicators and returns { id, title, url }; fetch returns the document as readable Markdown with the canonical public URL (sidra.ibge.gov.br or cidades.ibge.gov.br), which is what ChatGPT cites. Both carry the same provenance block as every other tool. In ChatGPT's developer mode (Settings → Security and login → Developer mode) any tool is callable — the ibge_* tools remain the ones to use for data.

Tool Usage Examples

ibge_estados

List all Brazilian states.

# List all states
ibge_estados

# States in Northeast region
ibge_estados(regiao="NE")

# States sorted by abbreviation
ibge_estados(ordenar="sigla")

ibge_municipios

List Brazilian municipalities.

# Municipalities of São Paulo state
ibge_municipios(uf="SP")

# Search municipalities by name
ibge_municipios(busca="Campinas")

# Municipalities in MG containing "Belo"
ibge_municipios(uf="MG", busca="Belo")

ibge_cidades

Query municipal indicators (similar to Cidades@ portal).

# Panorama of São Paulo
ibge_cidades(tipo="panorama", municipio="3550308")

# Population history
ibge_cidades(tipo="historico", municipio="3550308", indicador="populacao")

# List available research
ibge_cidades(tipo="pesquisas")

Available indicators: populacao, area, densidade, pib_per_capita, idh, escolarizacao, mortalidade, salario_medio, receitas, despesas

ibge_paises

Query international country data.

# List all countries
ibge_paises(tipo="listar")

# Brazil details
ibge_paises(tipo="detalhes", pais="BR")

# Search countries
ibge_paises(tipo="buscar", busca="Argentina")

# Countries in Americas
ibge_paises(tipo="listar", regiao="americas")

Regions: americas, europa, africa, asia, oceania

ibge_sidra

Query SIDRA tables (IBGE's Automatic Recovery System).

# Brazil population in 2023
ibge_sidra(tabela="6579", periodos="2023")

# Population by state
ibge_sidra(tabela="6579", nivel_territorial="3", periodos="2023")

# Census 2022 for São Paulo municipality
ibge_sidra(tabela="9514", nivel_territorial="6", localidades="3550308")

Common tables:

Code

Description

6579

Population estimates (annual)

9514

Census 2022 population

4714

Population, territorial area and density (Census 2022)

4099

Unemployment rate (PNAD Contínua, quarterly)

1846

Quarterly GDP at current prices (Brazil)

5938

Municipal GDP at current prices (annual)

6784

Annual GDP and GDP per capita (Brazil)

Territorial levels:

Code

Level

1

Brazil

2

Region (North, Northeast, etc.)

3

State (UF)

6

Municipality

7

Metropolitan Region

106

Health Region

127

Legal Amazon

128

Semi-arid

Statistics mode (also on ibge_censo, ibge_indicadores, ibge_datasaude): for largest/smallest/mean/median/distribution/ranking questions, pass estatisticas=true — the server computes the full distribution (min/max/mean/ median/std-dev/labeled percentiles) over all rows before pagination and returns top/bottom rankings (topN, default 10). agruparPor="<column label>" ranks groups by descending sum, each with its own mini-distribution.

# Which state has the largest estimated population?
ibge_sidra(tabela="6579", nivel_territorial="3", estatisticas=true)

# Census 2022 population distribution grouped by state
ibge_censo(ano="2022", tema="populacao", nivel_territorial="3", estatisticas=true, agruparPor="Unidade da Federação")

ibge_censo

Query Census data (1970-2022).

# Population Census 2022
ibge_censo(ano="2022", tema="populacao")

# Historical population series
ibge_censo(ano="todos", tema="populacao")

# Literacy by state in 2010
ibge_censo(ano="2010", tema="alfabetizacao", nivel_territorial="3")

Available themes: populacao, alfabetizacao, domicilios, idade_sexo, religiao, cor_raca, rendimento, migracao, educacao, trabalho

ibge_indicadores

Query economic and social indicators.

# GDP
ibge_indicadores(indicador="pib")

# IPCA last 12 months
ibge_indicadores(indicador="ipca", periodos="last 12")

# Unemployment by state
ibge_indicadores(indicador="desemprego", nivel_territorial="3")

# List all indicators
ibge_indicadores(indicador="listar")

Available indicators:

Category

Indicators

Economic

pib, pib_variacao, pib_per_capita, industria, comercio, servicos

Prices

ipca, ipca_acumulado, inpc

Labor

desemprego, ocupacao, rendimento, informalidade

Population

populacao, densidade

Agriculture

agricultura, pecuaria

ibge_nomes

Query name frequency and rankings.

# Frequency of "Maria"
ibge_nomes(tipo="frequencia", nomes="Maria")

# Compare names
ibge_nomes(tipo="frequencia", nomes="João,José,Pedro")

# Ranking of names in 2000s
ibge_nomes(tipo="ranking", decada=2000)

# Female names ranking
ibge_nomes(tipo="ranking", sexo="F")

ibge_malhas

Get geographic meshes (maps).

# Brazil with states
ibge_malhas(localidade="BR", resolucao="2")

# São Paulo with municipalities
ibge_malhas(localidade="SP", resolucao="5")

# Specific municipality
ibge_malhas(localidade="3550308")

# SVG format
ibge_malhas(localidade="BR", formato="svg")

Resolution levels:

Value

Internal Divisions

0

No divisions (outline only)

2

States

5

Municipalities

ibge_datasaude

Query Brazilian health indicators served through IBGE's SIDRA (some originally produced by DataSUS, e.g. mortality and births).

# Infant mortality in Brazil
ibge_datasaude(indicador="mortalidade_infantil")

# Life expectancy by state
ibge_datasaude(indicador="esperanca_vida", nivel_territorial="3")

# List indicators
ibge_datasaude(indicador="listar")

Available indicators: mortalidade_infantil, esperanca_vida, nascidos_vivos, obitos, fecundidade, saneamento_agua, saneamento_esgoto, plano_saude

APIs Used

IBGE APIs

  • Localities: servicodados.ibge.gov.br/api/v1/localidades

  • Names: servicodados.ibge.gov.br/api/v2/censos/nomes

  • Aggregates/SIDRA: servicodados.ibge.gov.br/api/v3/agregados (SIDRA tables are read here with view=flat; apisidra.ibge.gov.br has been behind a browser-only Cloudflare challenge since 2026-09-15)

  • Meshes: servicodados.ibge.gov.br/api/v3/malhas

  • News: servicodados.ibge.gov.br/api/v3/noticias

  • Population: servicodados.ibge.gov.br/api/v1/projecoes/populacao

  • CNAE: servicodados.ibge.gov.br/api/v2/cnae

  • Calendar: servicodados.ibge.gov.br/api/v3/calendario

  • Countries: servicodados.ibge.gov.br/api/v1/paises

  • Research: servicodados.ibge.gov.br/api/v1/pesquisas

Development

# Build
npm run build

# Watch mode
npm run watch

# Run tests
npm test

# Run tests in watch mode
npm run test:watch

# Lint
npm run lint

# Format
npm run format

# Test with MCP inspector
npm run inspector

Project Structure

ibge-br-mcp/
├── src/
│   ├── index.ts              # Main MCP server
│   ├── types.ts              # TypeScript types
│   ├── config.ts             # Configuration and constants
│   ├── cache.ts              # Request caching system
│   ├── retry.ts              # Trip to the source over @sbissoli/mcp-upstream (retry, timeout, budget, retrieval count)
│   ├── errors.ts             # Standardized error handling
│   ├── validation.ts         # Input validation helpers
│   ├── metrics.ts            # Metrics and logging
│   ├── utils/
│   │   └── formatters.ts     # Formatting utilities
│   └── tools/
│       ├── index.ts          # Tool exports
│       ├── estados.ts        # ibge_estados
│       ├── municipios.ts     # ibge_municipios
│       ├── localidade.ts     # ibge_localidade
│       ├── geocodigo.ts      # ibge_geocodigo
│       ├── censo.ts          # ibge_censo
│       ├── sidra.ts          # ibge_sidra
│       ├── sidra-tabelas.ts  # ibge_sidra_tabelas
│       ├── sidra-metadados.ts# ibge_sidra_metadados
│       ├── indicadores.ts    # ibge_indicadores
│       ├── cnae.ts           # ibge_cnae
│       ├── calendario.ts     # ibge_calendario
│       ├── comparar.ts       # ibge_comparar
│       ├── malhas.ts         # ibge_malhas
│       ├── malhas-tema.ts    # ibge_malhas_tema
│       ├── vizinhos.ts       # ibge_vizinhos
│       ├── datasaude.ts      # ibge_datasaude
│       ├── pesquisas.ts      # ibge_pesquisas
│       ├── nomes.ts          # ibge_nomes
│       ├── noticias.ts       # ibge_noticias
│       ├── paises.ts         # ibge_paises
│       └── cidades.ts        # ibge_cidades
├── tests/                    # Test files
├── dist/                     # Compiled files
├── package.json
├── tsconfig.json
├── vitest.config.ts
└── README.md

Testing

The project includes a comprehensive test suite with 565 tests covering:

  • Validation functions

  • Retry mechanism

  • Formatting utilities

  • Error handling

  • Cache operations

  • Integration tests with mocks

npm test

Quality Assurance

This project maintains high code quality standards:

  • 565 automated tests covering validation, caching, retry logic, formatting, and integrations

  • 88% overall test coverage — cache and validation modules above 97%

  • ESLint for code linting with zero warnings

  • Prettier for consistent code formatting

  • TypeScript strict mode for type safety

  • Automated CI/CD via GitHub Actions

Run tests locally:

# Run all tests
npm test

# Run tests with coverage
npm run test:coverage

# Run linter
npm run lint

Surface fingerprint, checkable from the registry

Every release publishes, in its MCP Registry entry, the sha256 of the surface this version serves (initialize, tools, resources, prompts) and which methods answer without a credential. A surface change without a version bump fails the build; the fingerprint in the registry lets a client check the same thing on its own side. Canonical form and procedure: SPEC.md of @sbissoli/mcp-surface. To check it yourself (Node 18+, no dependencies):

curl -sO https://raw.githubusercontent.com/SidneyBissoli/mcp-br-commons/main/packages/mcp-surface/exemplos/verify.mjs
node verify.mjs io.github.SidneyBissoli/ibge-br-mcp

License

MIT

Author

Sidney da Silva Pereira Bissoli

References

Available Tools

23 tools
fetchDocumento para Deep ResearchA
Read-onlyIdempotent
Inspect

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…)
provenanceYesBloco de proveniência (contrato v1.1): fonte, URL, período, extração, diagnóstico de origem 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 cover read-only, idempotent and non-destructive, but the description adds real context: it performs a live GET against the public source, unknown ids error, and it returns a specific document shape. It doesn't cover rate limits or latency, so it is strong rather than exhaustive.

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 usage routing, then behavior — a sensible order. The closing 'Behavior: read-only and idempotent' largely restates the annotations, a minor redundancy, but the rest of the text is tight.

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-id fetch with an output schema, the description is complete: it explains the return shape, the id constraint, the error case, and the relationship to sibling tools. Nothing needed 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, and the description goes further by constraining the `id` parameter's provenance (must come from `search`) and its failure mode (unknown id → error). That adds meaning beyond the schema's plain 'identificador' text.

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 the full document for an id produced by `search`. It explicitly positions itself as the companion of `search` and distinguishes itself from the `ibge_*` tools that handle data queries, so an agent can route without opening the 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: only ids returned by `search` are valid, and an unknown id errors out. It also names the alternatives to use for data (the `ibge_*` tools), giving both the selecting condition and the exclusion.

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
Inspect

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, diagnóstico de origem e licença
attributionYesURLs canônicas das fontes desta resposta (lista de atribuição)
totalPaginasNoTotal de páginas disponíveis

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 safety is covered. The description adds value beyond them by naming the underlying live GET to the public Calendário API and the return format (Markdown list). Minor gap: pagination behavior via pagina/quantidade is not characterized.

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 followed by Features, Event types, Examples, and routing sections. Every section carries distinct, non-redundant information and the examples are compact.

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 an output schema exists, return values needn't be detailed, and safety is covered by annotations. The description still rounds out domain concepts (Release vs Collection event types) needed to interpret the results 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 already documents all six parameters. The description's examples tie parameter names to concrete values (produto="IPCA", de/ate date range, tipo="coleta"), which adds useful usage semantics 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 and resource (queries the IBGE release/collection calendar) and enumerates what it covers. It explicitly distinguishes itself from the sibling ibge_noticias, 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?

Provides explicit when-to-use context plus a 'Use a different tool when' section routing already-published news to ibge_noticias. Concrete examples (no params for upcoming, produto="IPCA", date range, tipo="coleta") map conditions to calls.

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
Inspect

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

  • 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: Pirâmide etária - 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 e 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, diagnóstico de origem 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/destructive=false, so the safety profile is covered. The description still adds beyond them: it states the call is a live GET against the public IBGE SIDRA API and the return shape (Markdown plus typed structuredContent), and it flags that in statistics mode campos/formato are ignored and registros comes back empty.

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 alternatives in a scannable structure. Slightly long because the theme bullets duplicate the schema enum descriptions, but nothing is genuinely wasted and the ordering is logical.

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, output-schema-backed tool this covers everything an agent needs: scoping, alternatives, mode switches, worked examples, and return format. The presence of a structured output schema means return-value detail is not required, and routing guidance is fully 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 baseline is 3, but the description adds real meaning above the schema: the estatisticas cross-parameter effect (campos/formato ignored, registros empty), the agruparPor ranking behavior with short-label resolution and refusal on ambiguous labels, and the pre-pagination computation semantics.

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 scopes it apart from the raw SIDRA tools by noting it works 'without knowing SIDRA table codes'. An agent can distinguish it from ibge_sidra without opening the 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 naming three alternatives (ibge_cidades, ibge_comparar, ibge_sidra) with the condition that selects each, plus worked examples and a dedicated statistics mode for largest/smallest/mean questions. When-to-use is fully specified.

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
Inspect

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 — a live GET against the public IBGE APIs (Cidades@/agregados). 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)
municipioNoCódigo IBGE do município
provenanceYesBloco de proveniência (contrato v1.1): fonte, URL, período, extração, diagnóstico de origem e licença
attributionYesURLs canônicas das fontes desta resposta (lista de atribuição)
indicadoresYesIndicadores retornados (vazio para respostas de catálogo)

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 still adds useful context beyond annotations: it identifies the underlying source ('live GET against the public IBGE APIs (Cidades@/agregados)') and the return shape ('Markdown plus a typed structuredContent payload'). It does not discuss rate limits or error modes, but with annotations covering behavior, this is solid.

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 with the core purpose, then cleanly sectioned into features, available indicators, runnable examples, sibling routing, and behavior. Every block is scannable and earns its place, with no redundant 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?

An output schema exists, so return values need not be described beyond the brief note about Markdown plus structuredContent. Combined with the valid-indicator list and examples, the definition gives an agent everything needed to call a five-parameter, zero-required tool 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, but the description adds real value: it enumerates the valid indicator identifiers (populacao, area, densidade, pib_per_capita, etc.) that the schema does not contain, and gives concrete example parameter combinations (tipo="historico", municipio="3550308", indicador="populacao") that clarify how tipo interacts with the other fields.

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 (municipal indicators), and explicitly frames the tool as the panel for a SINGLE municipality (Cidades@). The routing paragraph names the exact siblings it must not be confused with (ibge_censo, ibge_comparar, ibge_indicadores), so an agent can distinguish it 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?

Provides explicit when-to-use conditions via the feature list (overview, specific indicator, historical, list surveys) and explicit when-NOT-to-use conditions naming the correct alternatives for census themes, multi-municipality comparison, and macro time series. 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
Inspect

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'). Acento e caixa não importam, e várias palavras casam em E ('comercio varejista'). A palavra de todo dia é traduzida para a da CNAE quando preciso — farmácia → produtos farmacêuticos, academia → condicionamento físico, lixo → resíduos — e a resposta diz quando traduziu.
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, diagnóstico de origem e licença
attributionYesURLs canônicas das fontes desta resposta (lista de atribuição)

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare read-only, idempotent, non-destructive, open-world, so the safety profile is covered. The description adds genuinely new context: it is a live GET against the public IBGE CNAE API and returns Markdown. It does not discuss rate limits or error behavior, but it exceeds the annotation bar.

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 what CNAE is, then hierarchy, features, examples and behavior in a scannable structure. The per-level counts (21/87/285/673/1332) and some examples duplicate what the schema already conveys, costing a little efficiency.

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?

With an output schema present, rich annotations, and fully documented parameters, the description only needs to frame purpose and usage — which it does. Nothing essential for correct invocation is missing, though it could note the default nivel behavior more explicitly.

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, nivel, codigo and limite thoroughly, including the code-format examples that the description also repeats. The description adds no semantics beyond 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 and resource — querying the CNAE economic-activity classification from IBGE — and the hierarchy detail makes the scope unambiguous. It is clearly distinguishable from the other ibge_* siblings (cidades, sidra, municipios), none of which handle CNAE codes.

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' list plus four worked examples (busca, codigo for code/section, nivel for listing) tell an agent concretely how to invoke the tool for each intent. It stops short of naming when NOT to use it or routing to a sibling alternative, so it is clear but not fully explicit.

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
Inspect

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 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, diagnóstico de origem 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.4/5.0
Behavior4/5

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

Annotations already declare readOnly/openWorld/idempotent/non-destructive, so the safety profile is covered; the description still adds value by disclosing the underlying data sources (live GET against public IBGE SIDRA and Localidades APIs) and the return shape (Markdown plus typed structuredContent). It does not mention rate limits or error behavior, so it stops 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 purpose, then indicators, features, examples, and the exclusion rule — a sensible hierarchy. Mildly redundant since the indicator bullet list duplicates the schema enum text, but the examples and routing rule earn their space.

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 and the description still notes the dual Markdown + structuredContent return, plus indicator coverage, locality-count bounds, accepted code formats, and sibling routing. Nothing an agent needs to call this correctly is missing.

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

Parameters3/5

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

Schema description coverage is 100% and both enums are fully documented in the schema, so the schema does the heavy lifting. The description largely restates the indicator list and the 7-digit/2-digit code convention already present in the schema, adding little new semantic detail.

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 ('Compares data between localities') and enumerates exactly what can be compared (population, GDP, area, density, literacy, households). The 'Use this tool ONLY to rank/compare 2–10 localities on one indicator' line separates it cleanly from ibge_cidades, ibge_censo and ibge_sidra.

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 (2–10 localities on one indicator), when-not (single locality → use ibge_cidades, ibge_censo, or ibge_sidra), plus concrete invocation examples and a way to list indicators via indicador='listar'.

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
Inspect

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

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 - listar: Lista 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
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ípio1

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, diagnóstico de origem 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.8/5.0
Behavior5/5

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

Annotations already declare readOnly/idempotent/openWorld, but the description adds real context beyond them: it is a live GET against the public API, returns Markdown plus a typed structuredContent payload, estatisticas ignores campos/formato and leaves registros empty, and agruparPor resolves short names and refuses ambiguous labels (reporting via `aviso`).

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?

Long but tightly organized into purpose, indicator groups, territorial legend, examples, statistics mode, and exclusions. Front-loaded with the core purpose; only the examples and indicator list add bulk, which is justified for a 9-parameter tool.

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 full schema coverage and an output schema, all an agent needs is present: indicator vocabulary, territorial codes, statistics-mode semantics, sibling routing, and behavior profile. No meaningful 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 baseline is 3, but the description genuinely adds meaning: the territoral-level mapping (1=Brazil … 6=Municipality) is restated for usability, examples show real localidade/nivel_territorial combinations, and the interaction between estatisticas, agruparPor, topN and campos is explained beyond the per-parameter text.

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 (Brazil health indicators via IBGE SIDRA/DataSUS) and enumerates the exact indicator domains. The 'Use a different tool when' section names siblings (ibge_cidades, ibge_censo, ibge_sidra), making it distinguishable 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 guidance: which tool to use for a single municipality's panel, for population counts, and precisely when to flip estatisticas=true (highest/lowest/mean/median/distribution/ranking). 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
Inspect

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, diagnóstico de origem 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 readOnly, idempotent, openWorld and non-destructive, so the safety profile is covered; the description still adds value by naming the backing endpoint (live GET against the public IBGE Localidades API) and the return format (Markdown table). It does not discuss rate limits or failure modes, which is a minor 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?

Front-loaded with the core statement and organized under Features/Examples/Use-a-different-tool/Behavior headers, each carrying distinct information. The examples slightly duplicate the enum values, and the header structure is heavier than strictly needed for a 2-param read tool.

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 trivial read-only list tool with an output schema, the description covers what it does, how to filter/sort it, when to pick a sibling, and the return shape. 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.

Parameters4/5

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

Schema coverage is 100% with enums, so the baseline is 3, but the description adds example values (regiao="NE", ordenar="sigla") that show real usage beyond the enum listing. It does not explain the default sort behavior, which the schema already handles.

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 explicitly names the siblings it is not for (ibge_municipios, ibge_localidade). An agent can distinguish it from the other ibge_* 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?

Provides concrete invocation examples (no params, regiao="NE", ordenar="sigla") and an explicit 'Use a different tool when' section routing two sibling cases. 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_geocodigoCódigos geográficos do IBGEA
Read-onlyIdempotent
Inspect

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, diagnóstico de origem 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 read-only, idempotent, open-world, and non-destructive behavior. The description adds useful context beyond annotations: it is a live GET against the public IBGE Localidades API and returns Markdown. It does not discuss error behavior or rate limits, but those gaps are minor for a public read-only decoder.

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 front-loaded with the core purpose and organized under clear headings. It is longer than strictly necessary because it repeats code-format details already present in the schema, but the structure and examples make the extra length useful rather than noisy.

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 3 optional parameters, 100% schema coverage, full annotation coverage, and the presence of an output schema, the description supplies everything needed for correct invocation. Alternatives are named, examples are provided, and the return behavior is stated, so no material context 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 schema already documents all three parameters. The description still adds value by repeating the digit-to-level code structure and giving concrete examples such as codigo="3550308" and combined nome="Campinas", uf="SP", which clarify usage 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?

The description states a specific purpose: decoding IBGE codes or searching codes by locality name. It enumerates supported levels (region, state, municipality, district) and explicitly distinguishes itself from ibge_municipios and ibge_localidade, so an agent can select it without inspecting sibling 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?

It gives explicit examples for both main modes and a dedicated 'Use a different tool when' section naming alternatives and the conditions that select them. This routes the agent away from tools that only list municipalities or return one full locality record.

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
Inspect

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

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=UF1

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, diagnóstico de origem 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, openWorldHint and destructiveHint=false, so the safety profile is covered. The description adds genuinely useful context beyond that: a live GET against the public IBGE SIDRA API and a Markdown + structuredContent return shape. It stops short of documenting rate limits or truncation/pagination behavior outside statistics mode.

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 organized under bold headers (Economic, Prices, Labor, Population, Examples, Statistics mode), which makes it scannable despite its length. The indicator catalog is long but each line is a distinct key, so the length is earned rather than padded.

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 10-parameter, annotation-rich tool with an output schema, everything an agent needs is present: the valid indicator catalog, category filter usage, working examples, the statistics-mode contract, and explicit sibling routing. Nothing material is left for the agent to infer.

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 value on top: worked examples for indicador, periodos and nivel_territorial, the cross-parameter rule that estatisticas=true ignores campos/formato and leaves registros empty, and the agruparPor ranking semantics with ambiguity refusal. It does not explain topN or localidades beyond the schema text.

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 economic and social indicators') and then enumerates the exact indicator keys across four categories. It explicitly names the sibling tools it is not (ibge_comparar, ibge_censo, ibge_cidades), 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?

Contains a dedicated 'Use a different tool when' block with three named alternatives and the condition that selects each, plus four concrete invocation examples. It also states when to flip estatisticas=true (largest/smallest/mean/median/distribution/ranking) and what that mode disables.

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
Inspect

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, diagnóstico de origem 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, openWorldHint, and destructiveHint=false, so the safety profile is covered. The description adds context beyond structured fields: it is a 'live GET against the public IBGE Localidades API' and returns a 'Markdown record,' which tells the agent about the data source and output format. It does not cover rate limits or auth, but for a public read-only API that is minor.

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 organized into clear sections (Features, Examples, Alternatives, Behavior). It is slightly longer than necessary because the 'Features' list restates code-length information already present in the schema, but the structure and routing guidance justify most of the length.

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 lookup tool with 100% schema coverage, full annotations, and an output schema, the description covers purpose, routing, behavior, and examples. The output schema handles return details, and annotations handle safety, so nothing essential is missing for an agent to call it correctly.

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

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 goes further by providing concrete code examples (São Paulo state: codigo=35; city: codigo=3550308; district: codigo=355030805) that illustrate the digit-length conventions in practice, adding practical value beyond the schema's format description.

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?

First sentence states a specific verb and resource: 'Returns details of a specific locality by IBGE code.' It further clarifies scope ('the full record of ONE locality you already have the code for') and explicitly names sibling alternatives (ibge_municipios, ibge_geocodigo), so an agent can distinguish it from the ~20 other ibge_* tools.

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

Usage Guidelines5/5

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

Explicitly states when to use a different tool: when you have a name and need the code, or when you want to decompose a code's structure, each mapped to a specific sibling (ibge_municipios, ibge_geocodigo). This is a textbook when/when-not/alternatives section with no ambiguity.

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
Inspect

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)

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. Returns the mesh in the requested format (GeoJSON, TopoJSON, or SVG).

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, diagnóstico de origem 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)

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 adds the caller-relevant fact that this is a live GET against the public IBGE Malhas API and that the response matches the requested format. It omits pagination/size limits and failure behavior, so it stops 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 organized into labeled sections that are easy to scan. Slightly redundant: resolution is explained once in the generic features and again in the 'Resolution' section, and the format list appears twice.

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 6 parameters (4 enum-constrained), an output schema, and full annotation coverage, the description supplies everything an agent needs: purpose, routing, locality/resolution/format conventions, and examples. No material 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 baseline is 3, but the description earns extra by mapping locality types ('BR'/'1', state abbreviation, state code, 7-digit municipality code) and resolution levels to concrete examples. It restates much of the schema, and intrarregiao is left entirely to the schema, keeping it out of 5 territory.

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 ('Gets geographic meshes (maps) from IBGE') plus output formats, and explicitly distinguishes itself from the sibling ibge_malhas_tema for thematic meshes. An agent can route between the two without opening either schema.

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

Usage Guidelines5/5

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

Provides explicit 'Use a different tool when' routing to ibge_malhas_tema, plus three concrete invocation examples covering locality/resolution/format combinations. Both when-to-use and when-not-to-use are present.

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
Inspect

Lists what a THEMATIC territorial recorte of Brazil contains: how many features, with which codes and names, and the URL to download its geometry.

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: only the recortes that have a per-feature code accept it — biomas (the biome code) and the two municipality ones, costeiro and fronteira (the 7-digit IBGE municipality code). Ask without codigo to see what exists; biome codes come from the source, not from a fixed table.

GEOMETRY IS NOT IN THE RESPONSE, on purpose: one biome polygon alone is over 9 MB. The response carries the attributes plus a canonical WFS URL that returns the recorte with geometry in GeoJSON.

Use a different tool when:

  • Administrative meshes WITH geometry (country/region/state/municipality outlines) → ibge_malhas

Behavior: read-only and idempotent — a live GET against the public IBGE Geosserviços WFS (IBGE Geociências), which is a different service from the Malhas API and the only one that publishes these recortes. 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 uma feição do recorte. Só os recortes que têm código próprio aceitam: biomas (cd_bioma, ex. "1") e os dois de municípios, costeiro e fronteira (código IBGE de 7 dígitos). Nos demais a chamada é recusada com a lista do que aceita.
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')
camadaNoCamada WFS do IBGE Geosserviços consultada
codigoNoCódigo usado como filtro, quando informado
feicoesNoTotal de feições do recorte na fonte
registrosNoAtributos de cada feição (sem geometria)
provenanceYesBloco de proveniência (contrato v1.1): fonte, URL, período, extração, diagnóstico de origem e licença
attributionYesURLs canônicas das fontes desta resposta (lista de atribuição)
url_geometriaNoURL canônica do WFS que devolve a malha COM geometria, em GeoJSON
feicoes_retornadasNoQuantas vieram nesta resposta

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already declare read-only/idempotent/open-world safety, so the bar is lower, yet the description still adds real context: geometry is deliberately excluded (one biome polygon >9 MB), the call is a live GET against the public IBGE Geosserviços WFS, that service differs from the Malhas API, and the return is 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-loads the core purpose, then uses parallel bulleted sections for enum meanings, filtering, exclusions, and behavior. It is on the longer side, but nearly every line (geometry exclusion, service identity, routing) 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?

Even though an output schema exists, the description explains the geometry-omission decision and the download-URL workaround, which is the one thing an agent must understand to use the result correctly. Nothing needed for correct invocation is missing.

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

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, but the description adds meaning beyond the schema: codigo is only accepted by biomas, costeiro, and fronteira, and biome codes come from the source rather than a fixed table. It does not add syntax detail for limite beyond what the schema already documents.

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 (Lists) and resource (thematic territorial recorte of Brazil) with explicit scope: feature counts, codes, names, and a geometry download URL. It also names the sibling ibge_malhas as the tool for a different job, so an agent can distinguish 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?

Provides explicit routing via 'Use a different tool when: Administrative meshes WITH geometry → ibge_malhas', plus conditional guidance on when codigo is accepted versus when to call without it. Covers both when-to-use and the alternative.

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
Inspect

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, diagnóstico de origem 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 "read-only and idempotent" is partly restating structured data. It does add genuine context beyond the annotations: the tool issues a live GET against the public IBGE Localidades API and returns a Markdown table, which tells the agent about latency exposure and output shape. No permission or rate-limit detail is given, but that is minor for a public read API.

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 one-line purpose, then layered features, examples, and exclusions in scannable blocks. Structure is excellent, though the "Features" bullets and "Examples" partially restate the same facts (state filtering appears in both), which is a small amount of redundancy rather than 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?

An output schema exists and annotations carry the safety profile, so the description is not obligated to explain return values. It still covers scope, all three parameters' intent, sibling routing, data source, and output format — nothing an agent needs to select or invoke this tool 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. The description earns above that by showing that uf and busca compose (uf="MG", busca="Belo") and by confirming that omitting uf returns the full national list, which the schema states but the examples reinforce. It says nothing about the limite/slicing parameter, leaving that entirely to 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 Brazilian municipalities from IBGE") and immediately enumerates the concrete capabilities: filter by state, list all 5,570, search by name. The description also differentiates itself from ibge_geocodigo, ibge_localidade, and ibge_vizinhos, so an agent can place it against 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?

Provides three worked invocation examples mapping intent to parameters (uf="SP", busca="Campinas", uf="MG"+busca="Belo"), plus an explicit "Use a different tool when" block that names three alternatives and the exact condition that selects each. When-to-use, when-not-to-use, and alternatives are all covered.

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
Inspect

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, diagnóstico de origem e licença
attributionYesURLs canônicas das fontes desta resposta (lista de atribuição)

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/openWorld/destructive=false, but the description adds real value: the live GET against the public IBGE Nomes (Censo) API, the Markdown table return shape, and the 1930-2010 decade constraint that the schema does not encode.

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 with the core purpose, then organized into features, examples, and behavior. Example lines are slightly verbose but each demonstrates a distinct valid call combination, so little is wasted.

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 re-explained, and the description covers both modes, parameter pairing rules, and the decade limit. Minor gaps remain around locality code behavior and result limits, but nothing an agent needs to invoke correctly is absent.

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; the description goes slightly beyond by showing combined parameter usage (comma-separated nomes, tipo+decada, tipo+sexo) and the available decade range, which the schema's decada description 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?

States a specific verb and resource ('Queries name frequency and rankings in Brazil (IBGE)') and enumerates the two distinct query modes, making it immediately distinguishable from siblings like ibge_censo or ibge_sidra.

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?

Gives clear when-to-use context per mode, including which parameters belong to each tipo, backed by four concrete examples. It stops short of naming alternatives or stating when a sibling tool would be preferred over this one.

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
Inspect

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, diagnóstico de origem e licença
attributionYesURLs canônicas das fontes desta resposta (lista de atribuição)
totalPaginasYesNúmero total de páginas

TDQS

A4.7/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. The description still adds real context beyond them: newest-first ordering, the no-parameter default of 10 items, that it is a live GET against the public IBGE Notícias API, and that output is a Markdown list with a header reporting total count and page. That is meaningful behavioral disclosure, though no rate-limit or error behavior is mentioned.

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 with the core purpose, then cleanly segmented into parameters, return shape, examples, and alternatives. Despite its length, each block is scannable and every sentence carries distinct information, so nothing is wasted.

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?

Even though an output schema exists (so return values need not be restated), the description still summarizes the item shape and header fields, and it covers the read-only/live-API nature. For a 7-parameter, zero-required list tool this leaves no decision-relevant gap.

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 genuinely adds meaning on top: it defines 'tipo' semantics ('release' = official survey results vs 'noticia' = general news), gives example search terms, restates the date format, and clarifies the quantidade/pagina pagination relationship, which the schema alone does not connect.

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 ('searches and lists'), resource ('already-published IBGE news articles and press releases'), and an explicit negative scope ('already-published'/'not yet published'). It distinguishes itself from the sibling ibge_calendario by naming it, 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?

Gives concrete when-to-use triggers (finding recent publications, when an indicator was released, news mentioning a term), worked examples, and an explicit 'Use a different tool when' clause pointing to ibge_calendario for scheduled releases. 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
Inspect

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 — a live GET against the public IBGE Países API. Returns Markdown.

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)

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, diagnóstico de origem 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.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=false, so the safety profile is covered. The description still adds value by stating the mechanism is a live GET against the public IBGE Países API and that output is Markdown, which the annotations do not say.

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 scannable features, region list, code convention, and examples — well structured and easy to skim. The region enumeration and code-format note duplicate the schema slightly, costing a little density.

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 detail is not required, yet the description still flags Markdown output and the read-only live-API nature. All five parameters, the enum modes, and the region vocabulary are accounted for, so 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.

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 and the schema already documents each field. The description goes further by tying parameters to intent through concrete examples and by surfacing the region vocabulary and ISO-ALPHA-2 code convention in prose, reducing lookup friction.

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 international country data via IBGE' — and enumerates the concrete modes (list, details, search, filter by region) that separate it from siblings like ibge_estados or ibge_localidade. An agent can tell what this tool covers without opening the 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 feature list plus worked examples (tipo="listar" with regiao="americas", tipo="detalhes" with pais="BR") give clear, actionable context for choosing each query mode. It stops short of explicit when-not-to-use guidance or naming alternative sibling tools for overlapping tasks (e.g., localidade or municipios).

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
Inspect

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, diagnóstico de origem 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, destructiveHint=false and openWorldHint, yet the description still adds value: it discloses that this is a live GET against the public IBGE SIDRA/Pesquisas API and that output is a Markdown list. It does repeat the read-only/idempotent traits already in annotations, which keeps it short of a 5.

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

Conciseness4/5

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

Front-loads the core purpose, then layers features, examples and routing in a scannable structure. The 'Main surveys' taxonomy block is longer than strictly necessary for tool selection, but it is genuinely useful context for a survey-catalog tool.

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; the description still covers purpose, inputs, examples, sibling routing, and the underlying API behavior. For a zero-required-parameter read-only listing 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.

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 description rises above it by supplying worked examples that map each parameter to realistic values ('busca="população"', 'detalhes="pnad"') and clarifying the no-parameter case lists everything. It does not, however, state matching behavior (partial vs exact) for 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 ('Lists available IBGE surveys and their tables') and immediately scopes it against siblings: 'This lists surveys, not data.' An agent can distinguish it from ibge_sidra_tabelas and ibge_sidra 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 routes the agent: use ibge_sidra_tabelas to find table codes, ibge_sidra or a wrapper to query data. It also gives concrete when-to-use examples ('Search population: busca="população"'). 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_sidraConsulta de tabelas SIDRAA
Read-onlyIdempotent
Inspect

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, diagnóstico de origem 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.9/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, and non-destructive traits. The description adds substantial context beyond that: it discloses the live GET against the public IBGE SIDRA API, return format ('Markdown plus a typed structuredContent payload'), data-quality marker exclusion ('-', '..', '...', 'X'), source-imposed query ceilings (Aggregates API limits), and mode-specific behavior (estatisticas ignores pagina/campos/formato; registros empty). This is rich behavioral disclosure.

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?

Despite its length, the description is well-structured with clear sections (common tables, territorial levels, examples, statistics mode, routing, behavior) and front-loads the core purpose. Every part serves to guide correct invocation, so it earns its place without wasted words.

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 12 parameters, a complex statistics mode, and 20+ sibling tools, the description is complete: it routes to alternatives, explains limitations and special behaviors, and notes output format. With an output schema present, return values need not be detailed further, and the description fills all remaining gaps.

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 listing eight common table codes with descriptions (e.g., 6579, 9514) and giving usage examples (tabela="6579", periodos="2023"), which help select parameter values. However, it does not deeply explain parameter semantics beyond what the schema already provides, so a 4 is warranted.

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 (IBGE's Automatic Recovery System).' It explicitly positions itself as the low-level engine and names sibling wrappers (ibge_censo, ibge_indicadores, etc.), so an agent can distinguish it from alternatives 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 routing: 'Prefer a friendlier wrapper when it fits: Census themes → ibge_censo; ... Rank/compare 2–10 localities → ibge_comparar.' Also directs to ibge_sidra_tabelas and ibge_sidra_metadados for table discovery, and explains when to use the statistics mode (estatisticas=true). No guidance 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_sidra_metadadosMetadados de tabela SIDRAA
Read-onlyIdempotent
Inspect

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, diagnóstico de origem 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.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 adds real value beyond that: it discloses the live GET against the public IBGE SIDRA API and that the return format is Markdown. It does not mention rate limits or error behavior, but that is a minor omission given annotations handle the rest.

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 and organized under clear Features/Examples headings with scannable bullets. Slightly redundant: the 'BEFORE querying' guidance appears twice (in the intro line and the later 'Use this after...' sentence), which is minor waste but not confusing.

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 metadata lookup with a full output schema, the description supplies everything an agent needs: what is returned, when to call it relative to the two sibling tools, and concrete example codes. Return-value detail is correctly delegated to the output schema.

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. The description goes beyond the schema by mapping concrete table codes to content semantics (6579=population, 9514=Census 2022, 4714=PNAD unemployment) and by tying the feature list (available periods, territorial levels) to the optional booleans incluir_periodos and incluir_localidades.

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 metadata for a specific SIDRA table') and enumerates exactly what that metadata includes (name, survey, periodicity, territorial levels, variables, classifications, periods). This distinguishes it cleanly from ibge_sidra (data queries) and ibge_sidra_tabelas (table code discovery).

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 when to use it ('BEFORE querying data with ibge_sidra') and names both bracketing siblings: use after ibge_sidra_tabelas and before ibge_sidra. This is a complete when/when-not/alternative routing instruction.

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
Inspect

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, diagnóstico de origem 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
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 nonetheless adds real context by stating this is a live GET against the public IBGE SIDRA API and that the response is a Markdown table. It also discloses non-obvious behavior beyond the annotations: everyday Portuguese is silently mapped to IBGE terminology, and the response flags that mapping in notas_vocabulario. It does not discuss rate limits or error behavior, 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 purpose, then structured into Features, Surveys, Examples and Workflow sections — easy to scan. The bulleted list of SIDRA surveys (Census, PNAD, GDP, Industrial, Agricultural) is largely filler that the 'pesquisa' parameter already implies, costing some tightness.

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 explained, yet the description still notes the Markdown table format. With zero required parameters, 100% schema coverage, and explicit workflow placement and wrapper alternatives, an agent has everything needed to select and call this tool 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 and the schema already documents busca, limite and pesquisa including the vocabulary mapping. The description goes modestly beyond by giving worked parameter examples (busca="população", pesquisa="censo"), but does not clarify limite's default/max or AND semantics beyond what the schema states.

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 opens with a specific verb+resource ('Lists and searches available SIDRA tables') and immediately distinguishes itself from siblings by naming itself as step 1 of the SIDRA workflow, with ibge_sidra_metadados and ibge_sidra as the downstream steps. An agent can tell this apart from the wrapper tools (ibge_censo, ibge_indicadores) 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?

It gives explicit routing: use this first to find a table code, then ibge_sidra_metadados for structure, then ibge_sidra for the query — and adds a when-not branch ('For common data, a wrapper is usually easier: ibge_censo, ibge_indicadores, ibge_comparar, ibge_cidades'). Concrete invocation examples (no parameters, busca="população", pesquisa="censo") remove remaining ambiguity.

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
Inspect

Finds nearby/neighboring municipalities.

Features:

  • Search by IBGE code (7 digits) or municipality name

  • Returns municipalities in the same mesoregion (proximity approximation)

  • Optionally includes population data

Note: Uses mesoregion as geographic proximity proxy. For exact spatial neighborhood, mesh processing would be required.

Examples:

  • By code: municipio="3550308"

  • By name: municipio="Campinas", uf="SP"

  • With population: municipio="3550308", incluir_dados=true

Note: proximity is approximated by shared mesoregion (not exact spatial adjacency). For listing/searching municipalities, use ibge_municipios.

Behavior: read-only and idempotent — a live GET against the public IBGE Localidades API. 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 (usa centróides)
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 próximos encontrados
vizinhosYesLista de municípios próximos (mesma mesorregião)
municipioYesMunicípio de referência da consulta
provenanceYesBloco de proveniência (contrato v1.1): fonte, URL, período, extração, diagnóstico de origem 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 readOnly, idempotent, openWorld and non-destructive, but the description still adds genuinely new behavioral context: the proxying via shared mesoregion, the live GET against the public IBGE Localidades API, and that the return is a Markdown list. The only shortfall is that the repeating of the mesoregion caveat crowds out other traits, such as how results are ordered or limited.

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

Conciseness3/5

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

The core sentence is well front-loaded and the examples are useful, but the mesoregion caveat is stated three separate times (in Features, in the first Note, and in the second Note), which is redundant padding on a short definition.

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?

With a full annotation set and an output schema covering the return format, the description only needs to explain scope and behavior, which it does well; the unexplained 'raio' parameter is the one loose end.

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 baseline applies and the description's examples (municipio, uf, incluir_dados) largely duplicate documented fields. Notably it never mentions the 'raio' (radius in km via centroids) parameter, which is arguably in tension with its claim that proximity is only approximated by mesoregion — leaving the agent to reconcile the two from the schema alone.

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 ('Finds nearby/neighboring municipalities') and immediately distinguishes itself from ibge_municipios by naming that sibling for listing/searching. An agent can separate this from the 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?

Gives concrete when-to-use context plus examples for code lookup, name+uf lookup, and population inclusion, and explicitly routes list/search queries to ibge_municipios. It also warns that exact spatial adjacency is out of scope, which is a real exclusion criterion.

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. 2 tool updatesv5.5.1
    • Changedfetch1 field changed
      • addedInput schema / additionalProperties
        Added value: +false
    • Changedsearch1 field changed
      • addedInput schema / additionalProperties
        Added value: +false
  2. 23 tool updatesv5.4.0
    • Changedfetch3 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, diagnóstico de origem e licença"
      • addedOutput schema / properties / provenance / properties / retrieval
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": false,
        +      "properties": {
        +        "anomalies": {
        +          "description": "Anomalias superadas até o sucesso, somadas por classe, em ordem fixa; [] se nenhuma",
        +          "items": {
        +            "additionalProperties": false,
        +            "properties": {
        +              "count": {
        +                "description": "Ocorrências desta classe na chamada",
        +                "maximum": 9007199254740991,
        +                "minimum": 1,
        +                "type": "integer"
        +              },
        +              "kind": {
        +                "description": "Classe da anomalia (vocabulário fechado do contrato)",
        +                "enum": [
        +                  "timeout",
        +                  "network",
        +                  "http_4xx",
        +                  "http_5xx",
        +                  "rate_limited",
        +                  "malformed_body"
        +                ],
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "kind",
        +              "count"
        +            ],
        +            "type": "object"
        +          },
        +          "type": "array"
        +        },
        +        "attempts": {
        +          "description": "Tentativas somadas, incluindo as repetidas (>= requests)",
        +          "maximum": 9007199254740991,
        +          "minimum": 1,
        +          "type": "integer"
        +        },
        +        "requests": {
        +          "description": "Idas distintas à origem que compõem esta resposta (fatias, páginas)",
        +          "maximum": 9007199254740991,
        +          "minimum": 1,
        +          "type": "integer"
        +        },
        +        "unstable": {
        +          "description": "true se houve repetição (attempts > requests) ou alguma anomalia",
        +          "type": "boolean"
        +        }
        +      },
        +      "required": [
        +        "requests",
        +        "attempts",
        +        "anomalies",
        +        "unstable"
        +      ],
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Diagnóstico de origem desta chamada (contrato v1.1): idas à API do IBGE, tentativas somadas e anomalias contornadas; unstable=true quando houve anomalia. null quando nada foi medido (resposta servida só do cache)"
        +}
      • 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_calendario3 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, diagnóstico de origem e licença"
      • addedOutput schema / properties / provenance / properties / retrieval
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": false,
        +      "properties": {
        +        "anomalies": {
        +          "description": "Anomalias superadas até o sucesso, somadas por classe, em ordem fixa; [] se nenhuma",
        +          "items": {
        +            "additionalProperties": false,
        +            "properties": {
        +              "count": {
        +                "description": "Ocorrências desta classe na chamada",
        +                "maximum": 9007199254740991,
        +                "minimum": 1,
        +                "type": "integer"
        +              },
        +              "kind": {
        +                "description": "Classe da anomalia (vocabulário fechado do contrato)",
        +                "enum": [
        +                  "timeout",
        +                  "network",
        +                  "http_4xx",
        +                  "http_5xx",
        +                  "rate_limited",
        +                  "malformed_body"
        +                ],
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "kind",
        +              "count"
        +            ],
        +            "type": "object"
        +          },
        +          "type": "array"
        +        },
        +        "attempts": {
        +          "description": "Tentativas somadas, incluindo as repetidas (>= requests)",
        +          "maximum": 9007199254740991,
        +          "minimum": 1,
        +          "type": "integer"
        +        },
        +        "requests": {
        +          "description": "Idas distintas à origem que compõem esta resposta (fatias, páginas)",
        +          "maximum": 9007199254740991,
        +          "minimum": 1,
        +          "type": "integer"
        +        },
        +        "unstable": {
        +          "description": "true se houve repetição (attempts > requests) ou alguma anomalia",
        +          "type": "boolean"
        +        }
        +      },
        +      "required": [
        +        "requests",
        +        "attempts",
        +        "anomalies",
        +        "unstable"
        +      ],
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Diagnóstico de origem desta chamada (contrato v1.1): idas à API do IBGE, tentativas somadas e anomalias contornadas; unstable=true quando houve anomalia. null quando nada foi medido (resposta servida só do cache)"
        +}
      • 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_censo3 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, diagnóstico de origem e licença"
      • addedOutput schema / properties / provenance / properties / retrieval
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": false,
        +      "properties": {
        +        "anomalies": {
        +          "description": "Anomalias superadas até o sucesso, somadas por classe, em ordem fixa; [] se nenhuma",
        +          "items": {
        +            "additionalProperties": false,
        +            "properties": {
        +              "count": {
        +                "description": "Ocorrências desta classe na chamada",
        +                "maximum": 9007199254740991,
        +                "minimum": 1,
        +                "type": "integer"
        +              },
        +              "kind": {
        +                "description": "Classe da anomalia (vocabulário fechado do contrato)",
        +                "enum": [
        +                  "timeout",
        +                  "network",
        +                  "http_4xx",
        +                  "http_5xx",
        +                  "rate_limited",
        +                  "malformed_body"
        +                ],
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "kind",
        +              "count"
        +            ],
        +            "type": "object"
        +          },
        +          "type": "array"
        +        },
        +        "attempts": {
        +          "description": "Tentativas somadas, incluindo as repetidas (>= requests)",
        +          "maximum": 9007199254740991,
        +          "minimum": 1,
        +          "type": "integer"
        +        },
        +        "requests": {
        +          "description": "Idas distintas à origem que compõem esta resposta (fatias, páginas)",
        +          "maximum": 9007199254740991,
        +          "minimum": 1,
        +          "type": "integer"
        +        },
        +        "unstable": {
        +          "description": "true se houve repetição (attempts > requests) ou alguma anomalia",
        +          "type": "boolean"
        +        }
        +      },
        +      "required": [
        +        "requests",
        +        "attempts",
        +        "anomalies",
        +        "unstable"
        +      ],
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Diagnóstico de origem desta chamada (contrato v1.1): idas à API do IBGE, tentativas somadas e anomalias contornadas; unstable=true quando houve anomalia. null quando nada foi medido (resposta servida só do cache)"
        +}
      • 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_cidades3 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, diagnóstico de origem e licença"
      • addedOutput schema / properties / provenance / properties / retrieval
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": false,
        +      "properties": {
        +        "anomalies": {
        +          "description": "Anomalias superadas até o sucesso, somadas por classe, em ordem fixa; [] se nenhuma",
        +          "items": {
        +            "additionalProperties": false,
        +            "properties": {
        +              "count": {
        +                "description": "Ocorrências desta classe na chamada",
        +                "maximum": 9007199254740991,
        +                "minimum": 1,
        +                "type": "integer"
        +              },
        +              "kind": {
        +                "description": "Classe da anomalia (vocabulário fechado do contrato)",
        +                "enum": [
        +                  "timeout",
        +                  "network",
        +                  "http_4xx",
        +                  "http_5xx",
        +                  "rate_limited",
        +                  "malformed_body"
        +                ],
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "kind",
        +              "count"
        +            ],
        +            "type": "object"
        +          },
        +          "type": "array"
        +        },
        +        "attempts": {
        +          "description": "Tentativas somadas, incluindo as repetidas (>= requests)",
        +          "maximum": 9007199254740991,
        +          "minimum": 1,
        +          "type": "integer"
        +        },
        +        "requests": {
        +          "description": "Idas distintas à origem que compõem esta resposta (fatias, páginas)",
        +          "maximum": 9007199254740991,
        +          "minimum": 1,
        +          "type": "integer"
        +        },
        +        "unstable": {
        +          "description": "true se houve repetição (attempts > requests) ou alguma anomalia",
        +          "type": "boolean"
        +        }
        +      },
        +      "required": [
        +        "requests",
        +        "attempts",
        +        "anomalies",
        +        "unstable"
        +      ],
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Diagnóstico de origem desta chamada (contrato v1.1): idas à API do IBGE, tentativas somadas e anomalias contornadas; unstable=true quando houve anomalia. null quando nada foi medido (resposta servida só do cache)"
        +}
      • 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_cnae3 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, diagnóstico de origem e licença"
      • addedOutput schema / properties / provenance / properties / retrieval
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": false,
        +      "properties": {
        +        "anomalies": {
        +          "description": "Anomalias superadas até o sucesso, somadas por classe, em ordem fixa; [] se nenhuma",
        +          "items": {
        +            "additionalProperties": false,
        +            "properties": {
        +              "count": {
        +                "description": "Ocorrências desta classe na chamada",
        +                "maximum": 9007199254740991,
        +                "minimum": 1,
        +                "type": "integer"
        +              },
        +              "kind": {
        +                "description": "Classe da anomalia (vocabulário fechado do contrato)",
        +                "enum": [
        +                  "timeout",
        +                  "network",
        +                  "http_4xx",
        +                  "http_5xx",
        +                  "rate_limited",
        +                  "malformed_body"
        +                ],
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "kind",
        +              "count"
        +            ],
        +            "type": "object"
        +          },
        +          "type": "array"
        +        },
        +        "attempts": {
        +          "description": "Tentativas somadas, incluindo as repetidas (>= requests)",
        +          "maximum": 9007199254740991,
        +          "minimum": 1,
        +          "type": "integer"
        +        },
        +        "requests": {
        +          "description": "Idas distintas à origem que compõem esta resposta (fatias, páginas)",
        +          "maximum": 9007199254740991,
        +          "minimum": 1,
        +          "type": "integer"
        +        },
        +        "unstable": {
        +          "description": "true se houve repetição (attempts > requests) ou alguma anomalia",
        +          "type": "boolean"
        +        }
        +      },
        +      "required": [
        +        "requests",
        +        "attempts",
        +        "anomalies",
        +        "unstable"
        +      ],
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Diagnóstico de origem desta chamada (contrato v1.1): idas à API do IBGE, tentativas somadas e anomalias contornadas; unstable=true quando houve anomalia. null quando nada foi medido (resposta servida só do cache)"
        +}
      • 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_comparar3 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, diagnóstico de origem e licença"
      • addedOutput schema / properties / provenance / properties / retrieval
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": false,
        +      "properties": {
        +        "anomalies": {
        +          "description": "Anomalias superadas até o sucesso, somadas por classe, em ordem fixa; [] se nenhuma",
        +          "items": {
        +            "additionalProperties": false,
        +            "properties": {
        +              "count": {
        +                "description": "Ocorrências desta classe na chamada",
        +                "maximum": 9007199254740991,
        +                "minimum": 1,
        +                "type": "integer"
        +              },
        +              "kind": {
        +                "description": "Classe da anomalia (vocabulário fechado do contrato)",
        +                "enum": [
        +                  "timeout",
        +                  "network",
        +                  "http_4xx",
        +                  "http_5xx",
        +                  "rate_limited",
        +                  "malformed_body"
        +                ],
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "kind",
        +              "count"
        +            ],
        +            "type": "object"
        +          },
        +          "type": "array"
        +        },
        +        "attempts": {
        +          "description": "Tentativas somadas, incluindo as repetidas (>= requests)",
        +          "maximum": 9007199254740991,
        +          "minimum": 1,
        +          "type": "integer"
        +        },
        +        "requests": {
        +          "description": "Idas distintas à origem que compõem esta resposta (fatias, páginas)",
        +          "maximum": 9007199254740991,
        +          "minimum": 1,
        +          "type": "integer"
        +        },
        +        "unstable": {
        +          "description": "true se houve repetição (attempts > requests) ou alguma anomalia",
        +          "type": "boolean"
        +        }
        +      },
        +      "required": [
        +        "requests",
        +        "attempts",
        +        "anomalies",
        +        "unstable"
        +      ],
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Diagnóstico de origem desta chamada (contrato v1.1): idas à API do IBGE, tentativas somadas e anomalias contornadas; unstable=true quando houve anomalia. null quando nada foi medido (resposta servida só do cache)"
        +}
      • 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_datasaude3 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, diagnóstico de origem e licença"
      • addedOutput schema / properties / provenance / properties / retrieval
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": false,
        +      "properties": {
        +        "anomalies": {
        +          "description": "Anomalias superadas até o sucesso, somadas por classe, em ordem fixa; [] se nenhuma",
        +          "items": {
        +            "additionalProperties": false,
        +            "properties": {
        +              "count": {
        +                "description": "Ocorrências desta classe na chamada",
        +                "maximum": 9007199254740991,
        +                "minimum": 1,
        +                "type": "integer"
        +              },
        +              "kind": {
        +                "description": "Classe da anomalia (vocabulário fechado do contrato)",
        +                "enum": [
        +                  "timeout",
        +                  "network",
        +                  "http_4xx",
        +                  "http_5xx",
        +                  "rate_limited",
        +                  "malformed_body"
        +                ],
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "kind",
        +              "count"
        +            ],
        +            "type": "object"
        +          },
        +          "type": "array"
        +        },
        +        "attempts": {
        +          "description": "Tentativas somadas, incluindo as repetidas (>= requests)",
        +          "maximum": 9007199254740991,
        +          "minimum": 1,
        +          "type": "integer"
        +        },
        +        "requests": {
        +          "description": "Idas distintas à origem que compõem esta resposta (fatias, páginas)",
        +          "maximum": 9007199254740991,
        +          "minimum": 1,
        +          "type": "integer"
        +        },
        +        "unstable": {
        +          "description": "true se houve repetição (attempts > requests) ou alguma anomalia",
        +          "type": "boolean"
        +        }
        +      },
        +      "required": [
        +        "requests",
        +        "attempts",
        +        "anomalies",
        +        "unstable"
        +      ],
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Diagnóstico de origem desta chamada (contrato v1.1): idas à API do IBGE, tentativas somadas e anomalias contornadas; unstable=true quando houve anomalia. null quando nada foi medido (resposta servida só do cache)"
        +}
      • 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_estados3 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, diagnóstico de origem e licença"
      • addedOutput schema / properties / provenance / properties / retrieval
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": false,
        +      "properties": {
        +        "anomalies": {
        +          "description": "Anomalias superadas até o sucesso, somadas por classe, em ordem fixa; [] se nenhuma",
        +          "items": {
        +            "additionalProperties": false,
        +            "properties": {
        +              "count": {
        +                "description": "Ocorrências desta classe na chamada",
        +                "maximum": 9007199254740991,
        +                "minimum": 1,
        +                "type": "integer"
        +              },
        +              "kind": {
        +                "description": "Classe da anomalia (vocabulário fechado do contrato)",
        +                "enum": [
        +                  "timeout",
        +                  "network",
        +                  "http_4xx",
        +                  "http_5xx",
        +                  "rate_limited",
        +                  "malformed_body"
        +                ],
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "kind",
        +              "count"
        +            ],
        +            "type": "object"
        +          },
        +          "type": "array"
        +        },
        +        "attempts": {
        +          "description": "Tentativas somadas, incluindo as repetidas (>= requests)",
        +          "maximum": 9007199254740991,
        +          "minimum": 1,
        +          "type": "integer"
        +        },
        +        "requests": {
        +          "description": "Idas distintas à origem que compõem esta resposta (fatias, páginas)",
        +          "maximum": 9007199254740991,
        +          "minimum": 1,
        +          "type": "integer"
        +        },
        +        "unstable": {
        +          "description": "true se houve repetição (attempts > requests) ou alguma anomalia",
        +          "type": "boolean"
        +        }
        +      },
        +      "required": [
        +        "requests",
        +        "attempts",
        +        "anomalies",
        +        "unstable"
        +      ],
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Diagnóstico de origem desta chamada (contrato v1.1): idas à API do IBGE, tentativas somadas e anomalias contornadas; unstable=true quando houve anomalia. null quando nada foi medido (resposta servida só do cache)"
        +}
      • 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_geocodigo3 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, diagnóstico de origem e licença"
      • addedOutput schema / properties / provenance / properties / retrieval
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": false,
        +      "properties": {
        +        "anomalies": {
        +          "description": "Anomalias superadas até o sucesso, somadas por classe, em ordem fixa; [] se nenhuma",
        +          "items": {
        +            "additionalProperties": false,
        +            "properties": {
        +              "count": {
        +                "description": "Ocorrências desta classe na chamada",
        +                "maximum": 9007199254740991,
        +                "minimum": 1,
        +                "type": "integer"
        +              },
        +              "kind": {
        +                "description": "Classe da anomalia (vocabulário fechado do contrato)",
        +                "enum": [
        +                  "timeout",
        +                  "network",
        +                  "http_4xx",
        +                  "http_5xx",
        +                  "rate_limited",
        +                  "malformed_body"
        +                ],
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "kind",
        +              "count"
        +            ],
        +            "type": "object"
        +          },
        +          "type": "array"
        +        },
        +        "attempts": {
        +          "description": "Tentativas somadas, incluindo as repetidas (>= requests)",
        +          "maximum": 9007199254740991,
        +          "minimum": 1,
        +          "type": "integer"
        +        },
        +        "requests": {
        +          "description": "Idas distintas à origem que compõem esta resposta (fatias, páginas)",
        +          "maximum": 9007199254740991,
        +          "minimum": 1,
        +          "type": "integer"
        +        },
        +        "unstable": {
        +          "description": "true se houve repetição (attempts > requests) ou alguma anomalia",
        +          "type": "boolean"
        +        }
        +      },
        +      "required": [
        +        "requests",
        +        "attempts",
        +        "anomalies",
        +        "unstable"
        +      ],
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Diagnóstico de origem desta chamada (contrato v1.1): idas à API do IBGE, tentativas somadas e anomalias contornadas; unstable=true quando houve anomalia. null quando nada foi medido (resposta servida só do cache)"
        +}
      • 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_indicadores3 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, diagnóstico de origem e licença"
      • addedOutput schema / properties / provenance / properties / retrieval
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": false,
        +      "properties": {
        +        "anomalies": {
        +          "description": "Anomalias superadas até o sucesso, somadas por classe, em ordem fixa; [] se nenhuma",
        +          "items": {
        +            "additionalProperties": false,
        +            "properties": {
        +              "count": {
        +                "description": "Ocorrências desta classe na chamada",
        +                "maximum": 9007199254740991,
        +                "minimum": 1,
        +                "type": "integer"
        +              },
        +              "kind": {
        +                "description": "Classe da anomalia (vocabulário fechado do contrato)",
        +                "enum": [
        +                  "timeout",
        +                  "network",
        +                  "http_4xx",
        +                  "http_5xx",
        +                  "rate_limited",
        +                  "malformed_body"
        +                ],
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "kind",
        +              "count"
        +            ],
        +            "type": "object"
        +          },
        +          "type": "array"
        +        },
        +        "attempts": {
        +          "description": "Tentativas somadas, incluindo as repetidas (>= requests)",
        +          "maximum": 9007199254740991,
        +          "minimum": 1,
        +          "type": "integer"
        +        },
        +        "requests": {
        +          "description": "Idas distintas à origem que compõem esta resposta (fatias, páginas)",
        +          "maximum": 9007199254740991,
        +          "minimum": 1,
        +          "type": "integer"
        +        },
        +        "unstable": {
        +          "description": "true se houve repetição (attempts > requests) ou alguma anomalia",
        +          "type": "boolean"
        +        }
        +      },
        +      "required": [
        +        "requests",
        +        "attempts",
        +        "anomalies",
        +        "unstable"
        +      ],
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Diagnóstico de origem desta chamada (contrato v1.1): idas à API do IBGE, tentativas somadas e anomalias contornadas; unstable=true quando houve anomalia. null quando nada foi medido (resposta servida só do cache)"
        +}
      • 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_localidade3 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, diagnóstico de origem e licença"
      • addedOutput schema / properties / provenance / properties / retrieval
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": false,
        +      "properties": {
        +        "anomalies": {
        +          "description": "Anomalias superadas até o sucesso, somadas por classe, em ordem fixa; [] se nenhuma",
        +          "items": {
        +            "additionalProperties": false,
        +            "properties": {
        +              "count": {
        +                "description": "Ocorrências desta classe na chamada",
        +                "maximum": 9007199254740991,
        +                "minimum": 1,
        +                "type": "integer"
        +              },
        +              "kind": {
        +                "description": "Classe da anomalia (vocabulário fechado do contrato)",
        +                "enum": [
        +                  "timeout",
        +                  "network",
        +                  "http_4xx",
        +                  "http_5xx",
        +                  "rate_limited",
        +                  "malformed_body"
        +                ],
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "kind",
        +              "count"
        +            ],
        +            "type": "object"
        +          },
        +          "type": "array"
        +        },
        +        "attempts": {
        +          "description": "Tentativas somadas, incluindo as repetidas (>= requests)",
        +          "maximum": 9007199254740991,
        +          "minimum": 1,
        +          "type": "integer"
        +        },
        +        "requests": {
        +          "description": "Idas distintas à origem que compõem esta resposta (fatias, páginas)",
        +          "maximum": 9007199254740991,
        +          "minimum": 1,
        +          "type": "integer"
        +        },
        +        "unstable": {
        +          "description": "true se houve repetição (attempts > requests) ou alguma anomalia",
        +          "type": "boolean"
        +        }
        +      },
        +      "required": [
        +        "requests",
        +        "attempts",
        +        "anomalies",
        +        "unstable"
        +      ],
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Diagnóstico de origem desta chamada (contrato v1.1): idas à API do IBGE, tentativas somadas e anomalias contornadas; unstable=true quando houve anomalia. null quando nada foi medido (resposta servida só do cache)"
        +}
      • 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_malhas3 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, diagnóstico de origem e licença"
      • addedOutput schema / properties / provenance / properties / retrieval
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": false,
        +      "properties": {
        +        "anomalies": {
        +          "description": "Anomalias superadas até o sucesso, somadas por classe, em ordem fixa; [] se nenhuma",
        +          "items": {
        +            "additionalProperties": false,
        +            "properties": {
        +              "count": {
        +                "description": "Ocorrências desta classe na chamada",
        +                "maximum": 9007199254740991,
        +                "minimum": 1,
        +                "type": "integer"
        +              },
        +              "kind": {
        +                "description": "Classe da anomalia (vocabulário fechado do contrato)",
        +                "enum": [
        +                  "timeout",
        +                  "network",
        +                  "http_4xx",
        +                  "http_5xx",
        +                  "rate_limited",
        +                  "malformed_body"
        +                ],
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "kind",
        +              "count"
        +            ],
        +            "type": "object"
        +          },
        +          "type": "array"
        +        },
        +        "attempts": {
        +          "description": "Tentativas somadas, incluindo as repetidas (>= requests)",
        +          "maximum": 9007199254740991,
        +          "minimum": 1,
        +          "type": "integer"
        +        },
        +        "requests": {
        +          "description": "Idas distintas à origem que compõem esta resposta (fatias, páginas)",
        +          "maximum": 9007199254740991,
        +          "minimum": 1,
        +          "type": "integer"
        +        },
        +        "unstable": {
        +          "description": "true se houve repetição (attempts > requests) ou alguma anomalia",
        +          "type": "boolean"
        +        }
        +      },
        +      "required": [
        +        "requests",
        +        "attempts",
        +        "anomalies",
        +        "unstable"
        +      ],
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Diagnóstico de origem desta chamada (contrato v1.1): idas à API do IBGE, tentativas somadas e anomalias contornadas; unstable=true quando houve anomalia. null quando nada foi medido (resposta servida só do cache)"
        +}
      • 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_malhas_tema3 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, diagnóstico de origem e licença"
      • addedOutput schema / properties / provenance / properties / retrieval
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": false,
        +      "properties": {
        +        "anomalies": {
        +          "description": "Anomalias superadas até o sucesso, somadas por classe, em ordem fixa; [] se nenhuma",
        +          "items": {
        +            "additionalProperties": false,
        +            "properties": {
        +              "count": {
        +                "description": "Ocorrências desta classe na chamada",
        +                "maximum": 9007199254740991,
        +                "minimum": 1,
        +                "type": "integer"
        +              },
        +              "kind": {
        +                "description": "Classe da anomalia (vocabulário fechado do contrato)",
        +                "enum": [
        +                  "timeout",
        +                  "network",
        +                  "http_4xx",
        +                  "http_5xx",
        +                  "rate_limited",
        +                  "malformed_body"
        +                ],
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "kind",
        +              "count"
        +            ],
        +            "type": "object"
        +          },
        +          "type": "array"
        +        },
        +        "attempts": {
        +          "description": "Tentativas somadas, incluindo as repetidas (>= requests)",
        +          "maximum": 9007199254740991,
        +          "minimum": 1,
        +          "type": "integer"
        +        },
        +        "requests": {
        +          "description": "Idas distintas à origem que compõem esta resposta (fatias, páginas)",
        +          "maximum": 9007199254740991,
        +          "minimum": 1,
        +          "type": "integer"
        +        },
        +        "unstable": {
        +          "description": "true se houve repetição (attempts > requests) ou alguma anomalia",
        +          "type": "boolean"
        +        }
        +      },
        +      "required": [
        +        "requests",
        +        "attempts",
        +        "anomalies",
        +        "unstable"
        +      ],
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Diagnóstico de origem desta chamada (contrato v1.1): idas à API do IBGE, tentativas somadas e anomalias contornadas; unstable=true quando houve anomalia. null quando nada foi medido (resposta servida só do cache)"
        +}
      • 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_municipios3 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, diagnóstico de origem e licença"
      • addedOutput schema / properties / provenance / properties / retrieval
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": false,
        +      "properties": {
        +        "anomalies": {
        +          "description": "Anomalias superadas até o sucesso, somadas por classe, em ordem fixa; [] se nenhuma",
        +          "items": {
        +            "additionalProperties": false,
        +            "properties": {
        +              "count": {
        +                "description": "Ocorrências desta classe na chamada",
        +                "maximum": 9007199254740991,
        +                "minimum": 1,
        +                "type": "integer"
        +              },
        +              "kind": {
        +                "description": "Classe da anomalia (vocabulário fechado do contrato)",
        +                "enum": [
        +                  "timeout",
        +                  "network",
        +                  "http_4xx",
        +                  "http_5xx",
        +                  "rate_limited",
        +                  "malformed_body"
        +                ],
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "kind",
        +              "count"
        +            ],
        +            "type": "object"
        +          },
        +          "type": "array"
        +        },
        +        "attempts": {
        +          "description": "Tentativas somadas, incluindo as repetidas (>= requests)",
        +          "maximum": 9007199254740991,
        +          "minimum": 1,
        +          "type": "integer"
        +        },
        +        "requests": {
        +          "description": "Idas distintas à origem que compõem esta resposta (fatias, páginas)",
        +          "maximum": 9007199254740991,
        +          "minimum": 1,
        +          "type": "integer"
        +        },
        +        "unstable": {
        +          "description": "true se houve repetição (attempts > requests) ou alguma anomalia",
        +          "type": "boolean"
        +        }
        +      },
        +      "required": [
        +        "requests",
        +        "attempts",
        +        "anomalies",
        +        "unstable"
        +      ],
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Diagnóstico de origem desta chamada (contrato v1.1): idas à API do IBGE, tentativas somadas e anomalias contornadas; unstable=true quando houve anomalia. null quando nada foi medido (resposta servida só do cache)"
        +}
      • 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_nomes3 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, diagnóstico de origem e licença"
      • addedOutput schema / properties / provenance / properties / retrieval
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": false,
        +      "properties": {
        +        "anomalies": {
        +          "description": "Anomalias superadas até o sucesso, somadas por classe, em ordem fixa; [] se nenhuma",
        +          "items": {
        +            "additionalProperties": false,
        +            "properties": {
        +              "count": {
        +                "description": "Ocorrências desta classe na chamada",
        +                "maximum": 9007199254740991,
        +                "minimum": 1,
        +                "type": "integer"
        +              },
        +              "kind": {
        +                "description": "Classe da anomalia (vocabulário fechado do contrato)",
        +                "enum": [
        +                  "timeout",
        +                  "network",
        +                  "http_4xx",
        +                  "http_5xx",
        +                  "rate_limited",
        +                  "malformed_body"
        +                ],
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "kind",
        +              "count"
        +            ],
        +            "type": "object"
        +          },
        +          "type": "array"
        +        },
        +        "attempts": {
        +          "description": "Tentativas somadas, incluindo as repetidas (>= requests)",
        +          "maximum": 9007199254740991,
        +          "minimum": 1,
        +          "type": "integer"
        +        },
        +        "requests": {
        +          "description": "Idas distintas à origem que compõem esta resposta (fatias, páginas)",
        +          "maximum": 9007199254740991,
        +          "minimum": 1,
        +          "type": "integer"
        +        },
        +        "unstable": {
        +          "description": "true se houve repetição (attempts > requests) ou alguma anomalia",
        +          "type": "boolean"
        +        }
        +      },
        +      "required": [
        +        "requests",
        +        "attempts",
        +        "anomalies",
        +        "unstable"
        +      ],
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Diagnóstico de origem desta chamada (contrato v1.1): idas à API do IBGE, tentativas somadas e anomalias contornadas; unstable=true quando houve anomalia. null quando nada foi medido (resposta servida só do cache)"
        +}
      • 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_noticias3 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, diagnóstico de origem e licença"
      • addedOutput schema / properties / provenance / properties / retrieval
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": false,
        +      "properties": {
        +        "anomalies": {
        +          "description": "Anomalias superadas até o sucesso, somadas por classe, em ordem fixa; [] se nenhuma",
        +          "items": {
        +            "additionalProperties": false,
        +            "properties": {
        +              "count": {
        +                "description": "Ocorrências desta classe na chamada",
        +                "maximum": 9007199254740991,
        +                "minimum": 1,
        +                "type": "integer"
        +              },
        +              "kind": {
        +                "description": "Classe da anomalia (vocabulário fechado do contrato)",
        +                "enum": [
        +                  "timeout",
        +                  "network",
        +                  "http_4xx",
        +                  "http_5xx",
        +                  "rate_limited",
        +                  "malformed_body"
        +                ],
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "kind",
        +              "count"
        +            ],
        +            "type": "object"
        +          },
        +          "type": "array"
        +        },
        +        "attempts": {
        +          "description": "Tentativas somadas, incluindo as repetidas (>= requests)",
        +          "maximum": 9007199254740991,
        +          "minimum": 1,
        +          "type": "integer"
        +        },
        +        "requests": {
        +          "description": "Idas distintas à origem que compõem esta resposta (fatias, páginas)",
        +          "maximum": 9007199254740991,
        +          "minimum": 1,
        +          "type": "integer"
        +        },
        +        "unstable": {
        +          "description": "true se houve repetição (attempts > requests) ou alguma anomalia",
        +          "type": "boolean"
        +        }
        +      },
        +      "required": [
        +        "requests",
        +        "attempts",
        +        "anomalies",
        +        "unstable"
        +      ],
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Diagnóstico de origem desta chamada (contrato v1.1): idas à API do IBGE, tentativas somadas e anomalias contornadas; unstable=true quando houve anomalia. null quando nada foi medido (resposta servida só do cache)"
        +}
      • 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_paises3 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, diagnóstico de origem e licença"
      • addedOutput schema / properties / provenance / properties / retrieval
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": false,
        +      "properties": {
        +        "anomalies": {
        +          "description": "Anomalias superadas até o sucesso, somadas por classe, em ordem fixa; [] se nenhuma",
        +          "items": {
        +            "additionalProperties": false,
        +            "properties": {
        +              "count": {
        +                "description": "Ocorrências desta classe na chamada",
        +                "maximum": 9007199254740991,
        +                "minimum": 1,
        +                "type": "integer"
        +              },
        +              "kind": {
        +                "description": "Classe da anomalia (vocabulário fechado do contrato)",
        +                "enum": [
        +                  "timeout",
        +                  "network",
        +                  "http_4xx",
        +                  "http_5xx",
        +                  "rate_limited",
        +                  "malformed_body"
        +                ],
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "kind",
        +              "count"
        +            ],
        +            "type": "object"
        +          },
        +          "type": "array"
        +        },
        +        "attempts": {
        +          "description": "Tentativas somadas, incluindo as repetidas (>= requests)",
        +          "maximum": 9007199254740991,
        +          "minimum": 1,
        +          "type": "integer"
        +        },
        +        "requests": {
        +          "description": "Idas distintas à origem que compõem esta resposta (fatias, páginas)",
        +          "maximum": 9007199254740991,
        +          "minimum": 1,
        +          "type": "integer"
        +        },
        +        "unstable": {
        +          "description": "true se houve repetição (attempts > requests) ou alguma anomalia",
        +          "type": "boolean"
        +        }
        +      },
        +      "required": [
        +        "requests",
        +        "attempts",
        +        "anomalies",
        +        "unstable"
        +      ],
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Diagnóstico de origem desta chamada (contrato v1.1): idas à API do IBGE, tentativas somadas e anomalias contornadas; unstable=true quando houve anomalia. null quando nada foi medido (resposta servida só do cache)"
        +}
      • 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_pesquisas3 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, diagnóstico de origem e licença"
      • addedOutput schema / properties / provenance / properties / retrieval
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": false,
        +      "properties": {
        +        "anomalies": {
        +          "description": "Anomalias superadas até o sucesso, somadas por classe, em ordem fixa; [] se nenhuma",
        +          "items": {
        +            "additionalProperties": false,
        +            "properties": {
        +              "count": {
        +                "description": "Ocorrências desta classe na chamada",
        +                "maximum": 9007199254740991,
        +                "minimum": 1,
        +                "type": "integer"
        +              },
        +              "kind": {
        +                "description": "Classe da anomalia (vocabulário fechado do contrato)",
        +                "enum": [
        +                  "timeout",
        +                  "network",
        +                  "http_4xx",
        +                  "http_5xx",
        +                  "rate_limited",
        +                  "malformed_body"
        +                ],
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "kind",
        +              "count"
        +            ],
        +            "type": "object"
        +          },
        +          "type": "array"
        +        },
        +        "attempts": {
        +          "description": "Tentativas somadas, incluindo as repetidas (>= requests)",
        +          "maximum": 9007199254740991,
        +          "minimum": 1,
        +          "type": "integer"
        +        },
        +        "requests": {
        +          "description": "Idas distintas à origem que compõem esta resposta (fatias, páginas)",
        +          "maximum": 9007199254740991,
        +          "minimum": 1,
        +          "type": "integer"
        +        },
        +        "unstable": {
        +          "description": "true se houve repetição (attempts > requests) ou alguma anomalia",
        +          "type": "boolean"
        +        }
        +      },
        +      "required": [
        +        "requests",
        +        "attempts",
        +        "anomalies",
        +        "unstable"
        +      ],
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Diagnóstico de origem desta chamada (contrato v1.1): idas à API do IBGE, tentativas somadas e anomalias contornadas; unstable=true quando houve anomalia. null quando nada foi medido (resposta servida só do cache)"
        +}
      • 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_sidra3 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, diagnóstico de origem e licença"
      • addedOutput schema / properties / provenance / properties / retrieval
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": false,
        +      "properties": {
        +        "anomalies": {
        +          "description": "Anomalias superadas até o sucesso, somadas por classe, em ordem fixa; [] se nenhuma",
        +          "items": {
        +            "additionalProperties": false,
        +            "properties": {
        +              "count": {
        +                "description": "Ocorrências desta classe na chamada",
        +                "maximum": 9007199254740991,
        +                "minimum": 1,
        +                "type": "integer"
        +              },
        +              "kind": {
        +                "description": "Classe da anomalia (vocabulário fechado do contrato)",
        +                "enum": [
        +                  "timeout",
        +                  "network",
        +                  "http_4xx",
        +                  "http_5xx",
        +                  "rate_limited",
        +                  "malformed_body"
        +                ],
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "kind",
        +              "count"
        +            ],
        +            "type": "object"
        +          },
        +          "type": "array"
        +        },
        +        "attempts": {
        +          "description": "Tentativas somadas, incluindo as repetidas (>= requests)",
        +          "maximum": 9007199254740991,
        +          "minimum": 1,
        +          "type": "integer"
        +        },
        +        "requests": {
        +          "description": "Idas distintas à origem que compõem esta resposta (fatias, páginas)",
        +          "maximum": 9007199254740991,
        +          "minimum": 1,
        +          "type": "integer"
        +        },
        +        "unstable": {
        +          "description": "true se houve repetição (attempts > requests) ou alguma anomalia",
        +          "type": "boolean"
        +        }
        +      },
        +      "required": [
        +        "requests",
        +        "attempts",
        +        "anomalies",
        +        "unstable"
        +      ],
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Diagnóstico de origem desta chamada (contrato v1.1): idas à API do IBGE, tentativas somadas e anomalias contornadas; unstable=true quando houve anomalia. null quando nada foi medido (resposta servida só do cache)"
        +}
      • 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_metadados3 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, diagnóstico de origem e licença"
      • addedOutput schema / properties / provenance / properties / retrieval
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": false,
        +      "properties": {
        +        "anomalies": {
        +          "description": "Anomalias superadas até o sucesso, somadas por classe, em ordem fixa; [] se nenhuma",
        +          "items": {
        +            "additionalProperties": false,
        +            "properties": {
        +              "count": {
        +                "description": "Ocorrências desta classe na chamada",
        +                "maximum": 9007199254740991,
        +                "minimum": 1,
        +                "type": "integer"
        +              },
        +              "kind": {
        +                "description": "Classe da anomalia (vocabulário fechado do contrato)",
        +                "enum": [
        +                  "timeout",
        +                  "network",
        +                  "http_4xx",
        +                  "http_5xx",
        +                  "rate_limited",
        +                  "malformed_body"
        +                ],
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "kind",
        +              "count"
        +            ],
        +            "type": "object"
        +          },
        +          "type": "array"
        +        },
        +        "attempts": {
        +          "description": "Tentativas somadas, incluindo as repetidas (>= requests)",
        +          "maximum": 9007199254740991,
        +          "minimum": 1,
        +          "type": "integer"
        +        },
        +        "requests": {
        +          "description": "Idas distintas à origem que compõem esta resposta (fatias, páginas)",
        +          "maximum": 9007199254740991,
        +          "minimum": 1,
        +          "type": "integer"
        +        },
        +        "unstable": {
        +          "description": "true se houve repetição (attempts > requests) ou alguma anomalia",
        +          "type": "boolean"
        +        }
        +      },
        +      "required": [
        +        "requests",
        +        "attempts",
        +        "anomalies",
        +        "unstable"
        +      ],
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Diagnóstico de origem desta chamada (contrato v1.1): idas à API do IBGE, tentativas somadas e anomalias contornadas; unstable=true quando houve anomalia. null quando nada foi medido (resposta servida só do cache)"
        +}
      • 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_tabelas3 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, diagnóstico de origem e licença"
      • addedOutput schema / properties / provenance / properties / retrieval
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": false,
        +      "properties": {
        +        "anomalies": {
        +          "description": "Anomalias superadas até o sucesso, somadas por classe, em ordem fixa; [] se nenhuma",
        +          "items": {
        +            "additionalProperties": false,
        +            "properties": {
        +              "count": {
        +                "description": "Ocorrências desta classe na chamada",
        +                "maximum": 9007199254740991,
        +                "minimum": 1,
        +                "type": "integer"
        +              },
        +              "kind": {
        +                "description": "Classe da anomalia (vocabulário fechado do contrato)",
        +                "enum": [
        +                  "timeout",
        +                  "network",
        +                  "http_4xx",
        +                  "http_5xx",
        +                  "rate_limited",
        +                  "malformed_body"
        +                ],
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "kind",
        +              "count"
        +            ],
        +            "type": "object"
        +          },
        +          "type": "array"
        +        },
        +        "attempts": {
        +          "description": "Tentativas somadas, incluindo as repetidas (>= requests)",
        +          "maximum": 9007199254740991,
        +          "minimum": 1,
        +          "type": "integer"
        +        },
        +        "requests": {
        +          "description": "Idas distintas à origem que compõem esta resposta (fatias, páginas)",
        +          "maximum": 9007199254740991,
        +          "minimum": 1,
        +          "type": "integer"
        +        },
        +        "unstable": {
        +          "description": "true se houve repetição (attempts > requests) ou alguma anomalia",
        +          "type": "boolean"
        +        }
        +      },
        +      "required": [
        +        "requests",
        +        "attempts",
        +        "anomalies",
        +        "unstable"
        +      ],
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Diagnóstico de origem desta chamada (contrato v1.1): idas à API do IBGE, tentativas somadas e anomalias contornadas; unstable=true quando houve anomalia. null quando nada foi medido (resposta servida só do cache)"
        +}
      • 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_vizinhos3 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, diagnóstico de origem e licença"
      • addedOutput schema / properties / provenance / properties / retrieval
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": false,
        +      "properties": {
        +        "anomalies": {
        +          "description": "Anomalias superadas até o sucesso, somadas por classe, em ordem fixa; [] se nenhuma",
        +          "items": {
        +            "additionalProperties": false,
        +            "properties": {
        +              "count": {
        +                "description": "Ocorrências desta classe na chamada",
        +                "maximum": 9007199254740991,
        +                "minimum": 1,
        +                "type": "integer"
        +              },
        +              "kind": {
        +                "description": "Classe da anomalia (vocabulário fechado do contrato)",
        +                "enum": [
        +                  "timeout",
        +                  "network",
        +                  "http_4xx",
        +                  "http_5xx",
        +                  "rate_limited",
        +                  "malformed_body"
        +                ],
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "kind",
        +              "count"
        +            ],
        +            "type": "object"
        +          },
        +          "type": "array"
        +        },
        +        "attempts": {
        +          "description": "Tentativas somadas, incluindo as repetidas (>= requests)",
        +          "maximum": 9007199254740991,
        +          "minimum": 1,
        +          "type": "integer"
        +        },
        +        "requests": {
        +          "description": "Idas distintas à origem que compõem esta resposta (fatias, páginas)",
        +          "maximum": 9007199254740991,
        +          "minimum": 1,
        +          "type": "integer"
        +        },
        +        "unstable": {
        +          "description": "true se houve repetição (attempts > requests) ou alguma anomalia",
        +          "type": "boolean"
        +        }
        +      },
        +      "required": [
        +        "requests",
        +        "attempts",
        +        "anomalies",
        +        "unstable"
        +      ],
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Diagnóstico de origem desta chamada (contrato v1.1): idas à API do IBGE, tentativas somadas e anomalias contornadas; unstable=true quando houve anomalia. null quando nada foi medido (resposta servida só do cache)"
        +}
      • 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"
        +]
    • Changedsearch3 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, diagnóstico de origem e licença"
      • addedOutput schema / properties / provenance / properties / retrieval
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": false,
        +      "properties": {
        +        "anomalies": {
        +          "description": "Anomalias superadas até o sucesso, somadas por classe, em ordem fixa; [] se nenhuma",
        +          "items": {
        +            "additionalProperties": false,
        +            "properties": {
        +              "count": {
        +                "description": "Ocorrências desta classe na chamada",
        +                "maximum": 9007199254740991,
        +                "minimum": 1,
        +                "type": "integer"
        +              },
        +              "kind": {
        +                "description": "Classe da anomalia (vocabulário fechado do contrato)",
        +                "enum": [
        +                  "timeout",
        +                  "network",
        +                  "http_4xx",
        +                  "http_5xx",
        +                  "rate_limited",
        +                  "malformed_body"
        +                ],
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "kind",
        +              "count"
        +            ],
        +            "type": "object"
        +          },
        +          "type": "array"
        +        },
        +        "attempts": {
        +          "description": "Tentativas somadas, incluindo as repetidas (>= requests)",
        +          "maximum": 9007199254740991,
        +          "minimum": 1,
        +          "type": "integer"
        +        },
        +        "requests": {
        +          "description": "Idas distintas à origem que compõem esta resposta (fatias, páginas)",
        +          "maximum": 9007199254740991,
        +          "minimum": 1,
        +          "type": "integer"
        +        },
        +        "unstable": {
        +          "description": "true se houve repetição (attempts > requests) ou alguma anomalia",
        +          "type": "boolean"
        +        }
        +      },
        +      "required": [
        +        "requests",
        +        "attempts",
        +        "anomalies",
        +        "unstable"
        +      ],
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Diagnóstico de origem desta chamada (contrato v1.1): idas à API do IBGE, tentativas somadas e anomalias contornadas; unstable=true quando houve anomalia. null quando nada foi medido (resposta servida só do cache)"
        +}
      • 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"
        +]
  3. 1 tool updatev5.2.0
    • Changedibge_cnae4 fields changed
      • changedInput schema / properties / busca / description
        Previous value: -"Termo para buscar na descrição das atividades (ex: 'software', 'restaurante', 'comércio')"New value: +"Termo para buscar na descrição das atividades (ex: 'software', 'restaurante', 'comércio').\nAcento e caixa não importam, e várias palavras casam em E ('comercio varejista').\nA palavra de todo dia é traduzida para a da CNAE quando preciso — farmácia →\nprodutos farmacêuticos, academia → condicionamento físico, lixo → resíduos — e a\nresposta diz quando traduziu."
      • addedOutput schema / properties / busca / properties / encontrados
        Added value: +{
        +  "description": "Quantidade de atividades que casam o termo no catálogo inteiro (pode ser maior que 'total', que é limitado por 'limite')",
        +  "type": "number"
        +}
      • addedOutput schema / properties / busca / properties / notas_vocabulario
        Added value: +{
        +  "description": "Presente quando o termo foi traduzido para a palavra que a CNAE usa (ex: farmácia → produtos farmacêuticos)",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • changedOutput schema / properties / busca / required
        Previous value: -[
        -  "termo",
        -  "nivel",
        -  "total",
        -  "resultados"
        -]New value: +[
        +  "termo",
        +  "nivel",
        +  "total",
        +  "encontrados",
        +  "resultados"
        +]
  4. 1 tool updatev5.1.1
    • Changedibge_sidra_tabelas2 fields changed
      • changedInput schema / properties / busca / description
        Previous value: -"Termo para buscar no nome das tabelas/agregados"New value: +"Termos para buscar no nome das tabelas/agregados (sem distinção de acento ou caixa; AND entre as palavras; a palavra de todo dia é traduzida para a do IBGE — renda→rendimento, desemprego→desocupação, cidade→município)"
      • addedOutput schema / properties / notas_vocabulario
        Added value: +{
        +  "description": "Quando a busca foi ampliada para a palavra que o IBGE usa (renda→rendimento), diz qual",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
  5. 21 tool updatesv5.0.0
    • Changedibge_calendario1 field changed
      • addedInput schema / additionalProperties
        Added value: +false
    • Changedibge_censo2 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedInput schema / properties / agruparPor / description
        Previous value: -"Com estatisticas=true, agrupa pela coluna informada (rótulo, ex: 'Unidade da Federação', 'Ano') e ranqueia os grupos por soma decrescente (grupos[0] = maior total), cada grupo com sua mini-distribuição"New value: +"Com estatisticas=true, agrupa pela coluna informada (rótulo, ex: 'Unidade da Federação', 'Ano') e ranqueia os grupos por soma decrescente (grupos[0] = maior total), cada grupo com sua mini-distribuição. Nome curto ('UF', 'estado', 'cidade', 'região') e rótulo parcial ('Federação') são resolvidos, e a resposta diz em `aviso` por qual coluna agrupou; rótulo que casa com duas colunas é recusado em vez de escolhido"
    • Changedibge_cidades1 field changed
      • addedInput schema / additionalProperties
        Added value: +false
    • Changedibge_cnae1 field changed
      • addedInput schema / additionalProperties
        Added value: +false
    • Changedibge_comparar1 field changed
      • addedInput schema / additionalProperties
        Added value: +false
    • Changedibge_datasaude2 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedInput schema / properties / agruparPor / description
        Previous value: -"Com estatisticas=true, agrupa pela coluna informada (rótulo, ex: 'Unidade da Federação', 'Ano') e ranqueia os grupos por soma decrescente (grupos[0] = maior total), cada grupo com sua mini-distribuição"New value: +"Com estatisticas=true, agrupa pela coluna informada (rótulo, ex: 'Unidade da Federação', 'Ano') e ranqueia os grupos por soma decrescente (grupos[0] = maior total), cada grupo com sua mini-distribuição. Nome curto ('UF', 'estado', 'cidade', 'região') e rótulo parcial ('Federação') são resolvidos, e a resposta diz em `aviso` por qual coluna agrupou; rótulo que casa com duas colunas é recusado em vez de escolhido"
    • Changedibge_estados1 field changed
      • addedInput schema / additionalProperties
        Added value: +false
    • Changedibge_geocodigo1 field changed
      • addedInput schema / additionalProperties
        Added value: +false
    • Changedibge_indicadores2 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedInput schema / properties / agruparPor / description
        Previous value: -"Com estatisticas=true, agrupa pela coluna informada (rótulo, ex: 'Unidade da Federação', 'Ano') e ranqueia os grupos por soma decrescente (grupos[0] = maior total), cada grupo com sua mini-distribuição"New value: +"Com estatisticas=true, agrupa pela coluna informada (rótulo, ex: 'Unidade da Federação', 'Ano') e ranqueia os grupos por soma decrescente (grupos[0] = maior total), cada grupo com sua mini-distribuição. Nome curto ('UF', 'estado', 'cidade', 'região') e rótulo parcial ('Federação') são resolvidos, e a resposta diz em `aviso` por qual coluna agrupou; rótulo que casa com duas colunas é recusado em vez de escolhido"
    • Changedibge_localidade1 field changed
      • addedInput schema / additionalProperties
        Added value: +false
    • Changedibge_malhas8 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedInput schema / properties / intrarregiao / description
        Previous value: -"Código de região para filtrar (apenas quando localidade=BR)"New value: +"Divisão interna pelo nome, alternativa a resolucao: 'regiao', 'UF', 'regiao-intermediaria', 'regiao-imediata', 'mesorregiao', 'microrregiao' ou 'municipio'. Quando informado, prevalece sobre resolucao."
      • changedInput schema / properties / qualidade / default
        Previous value: -"4"New value: +"maxima"
      • changedInput schema / properties / qualidade / description
        Previous value: -"Qualidade do traçado: 1=mínima, 2=baixa, 3=intermediária, 4=máxima"New value: +"Qualidade do traçado: 'minima', 'intermediaria' ou 'maxima' (padrão). Os números 1–4 do IBGE antigo continuam aceitos e são traduzidos."
      • changedInput schema / properties / qualidade / enum
        Previous value: -[
        -  "1",
        -  "2",
        -  "3",
        -  "4"
        -]New value: +[
        +  "1",
        +  "2",
        +  "3",
        +  "4",
        +  "minima",
        +  "intermediaria",
        +  "maxima"
        +]
      • changedInput schema / properties / resolucao / description
        Previous value: -"Resolução/divisões internas:\n0 = Sem divisões internas\n1 = Macrorregiões (apenas para BR)\n2 = Unidades da Federação\n3 = Mesorregiões\n4 = Microrregiões\n5 = Municípios"New value: +"Divisões internas a desenhar dentro da malha pedida:\n0 = Sem divisões internas (só o contorno)\n1 = Macrorregiões (apenas quando localidade=BR)\n2 = Unidades da Federação (BR ou uma região)\n3 = Mesorregiões\n4 = Microrregiões\n5 = Municípios\nCada nível aceita só as divisões menores que ele: município aceita nenhuma, UF aceita 3, 4 e 5."
      • changedInput schema / properties / tipo / enum
        Previous value: -[
        -  "paises",
        -  "regioes",
        -  "estados",
        -  "mesorregioes",
        -  "microrregioes",
        -  "municipios",
        -  "distritos",
        -  "regioes-imediatas",
        -  "regioes-intermediarias"
        -]New value: +[
        +  "paises",
        +  "regioes",
        +  "estados",
        +  "mesorregioes",
        +  "microrregioes",
        +  "municipios",
        +  "regioes-imediatas",
        +  "regioes-intermediarias"
        +]
      • changedOutput schema / properties / intrarregiao / description
        Previous value: -"Código de região usado para filtrar (apenas quando localidade=BR)"New value: +"Divisão interna desenhada dentro da malha (vocabulário da API v3)"
    • Changedibge_malhas_tema20 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedInput schema / properties / codigo / description
        Previous value: -"Código específico do tema (ex: código do bioma, da região metropolitana)"New value: +"Filtra uma feição do recorte. Só os recortes que têm código próprio aceitam: biomas (cd_bioma, ex. \"1\") e os dois de municípios, costeiro e fronteira (código IBGE de 7 dígitos). Nos demais a chamada é recusada com a lista do que aceita."
      • removedInput schema / properties / formato
        Removed value: -{
        -  "default": "geojson",
        -  "description": "Formato de saída",
        -  "enum": [
        -    "geojson",
        -    "topojson",
        -    "svg"
        -  ],
        -  "type": "string"
        -}
      • addedInput schema / properties / limite
        Added value: +{
        +  "default": 50,
        +  "description": "Quantas feições trazer (padrão 50, máx. 600). O total do recorte vem sempre, mesmo quando o limite corta a lista.",
        +  "maximum": 600,
        +  "minimum": 1,
        +  "type": "integer"
        +}
      • removedInput schema / properties / qualidade
        Removed value: -{
        -  "default": "4",
        -  "description": "Qualidade do traçado: 1=mínima, 4=máxima",
        -  "enum": [
        -    "1",
        -    "2",
        -    "3",
        -    "4"
        -  ],
        -  "type": "string"
        -}
      • removedInput schema / properties / resolucao
        Removed value: -{
        -  "default": "0",
        -  "description": "0 = Apenas contorno, 5 = Com municípios",
        -  "enum": [
        -    "0",
        -    "5"
        -  ],
        -  "type": "string"
        -}
      • changedInput schema / properties / tema / description
        Previous value: -"Tema da malha:\n- biomas: Biomas brasileiros (Amazônia, Cerrado, etc.)\n- amazonia_legal: Área da Amazônia Legal\n- semiarido: Região do semiárido\n- costeiro: Zona costeira\n- fronteira: Faixa de fronteira\n- metropolitana: Regiões metropolitanas\n- ride: Regiões Integradas de Desenvolvimento\n- listar: Lista temas disponíveis"New value: +"Recorte temático do território:\n- biomas: os seis biomas continentais\n- amazonia_legal: limite da Amazônia Legal\n- semiarido: área do semiárido\n- costeiro: municípios da zona costeira\n- fronteira: municípios da faixa de fronteira\n- metropolitana: regiões metropolitanas\n- ride: Regiões Integradas de Desenvolvimento\n- listar: lista os recortes disponíveis, sem consultar a fonte"
      • addedOutput schema / properties / camada
        Added value: +{
        +  "description": "Camada WFS do IBGE Geosserviços consultada",
        +  "type": "string"
        +}
      • changedOutput schema / properties / codigo / description
        Previous value: -"Código específico do tema, quando informado"New value: +"Código usado como filtro, quando informado"
      • addedOutput schema / properties / feicoes
        Added value: +{
        +  "description": "Total de feições do recorte na fonte",
        +  "type": "number"
        +}
      • addedOutput schema / properties / feicoes_retornadas
        Added value: +{
        +  "description": "Quantas vieram nesta resposta",
        +  "type": "number"
        +}
      • removedOutput schema / properties / formato
        Removed value: -{
        -  "description": "Formato de saída (geojson, topojson, svg)",
        -  "type": "string"
        -}
      • addedOutput schema / properties / registros
        Added value: +{
        +  "description": "Atributos de cada feição (sem geometria)",
        +  "items": {
        +    "additionalProperties": {},
        +    "propertyNames": {
        +      "type": "string"
        +    },
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
      • removedOutput schema / properties / resolucao
        Removed value: -{
        -  "description": "Resolução da malha (0 = contorno, 5 = com municípios)",
        -  "type": "string"
        -}
      • changedOutput schema / properties / tema / description
        Previous value: -"Tema da malha solicitada (ou 'listar')"New value: +"Recorte solicitado (ou 'listar')"
      • changedOutput schema / properties / temas / description
        Previous value: -"Lista de temas disponíveis (somente no modo 'listar')"New value: +"Lista de recortes disponíveis (somente no modo 'listar')"
      • changedOutput schema / properties / temas / items / properties / descricao / description
        Previous value: -"Descrição do tema"New value: +"Descrição do recorte"
      • changedOutput schema / properties / temas / items / properties / nome / description
        Previous value: -"Nome do tema"New value: +"Nome do recorte"
      • changedOutput schema / properties / temas / items / properties / tema / description
        Previous value: -"Identificador do tema"New value: +"Identificador do recorte"
      • addedOutput schema / properties / url_geometria
        Added value: +{
        +  "description": "URL canônica do WFS que devolve a malha COM geometria, em GeoJSON",
        +  "type": "string"
        +}
    • Changedibge_municipios1 field changed
      • addedInput schema / additionalProperties
        Added value: +false
    • Changedibge_nomes1 field changed
      • addedInput schema / additionalProperties
        Added value: +false
    • Changedibge_noticias1 field changed
      • addedInput schema / additionalProperties
        Added value: +false
    • Changedibge_paises1 field changed
      • addedInput schema / additionalProperties
        Added value: +false
    • Changedibge_pesquisas1 field changed
      • addedInput schema / additionalProperties
        Added value: +false
    • Changedibge_sidra2 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedInput schema / properties / agruparPor / description
        Previous value: -"Com estatisticas=true, agrupa pela coluna informada (rótulo, ex: 'Unidade da Federação', 'Ano') e ranqueia os grupos por soma decrescente (grupos[0] = maior total), cada grupo com sua mini-distribuição"New value: +"Com estatisticas=true, agrupa pela coluna informada (rótulo, ex: 'Unidade da Federação', 'Ano') e ranqueia os grupos por soma decrescente (grupos[0] = maior total), cada grupo com sua mini-distribuição. Nome curto ('UF', 'estado', 'cidade', 'região') e rótulo parcial ('Federação') são resolvidos, e a resposta diz em `aviso` por qual coluna agrupou; rótulo que casa com duas colunas é recusado em vez de escolhido"
    • Changedibge_sidra_metadados1 field changed
      • addedInput schema / additionalProperties
        Added value: +false
    • Changedibge_sidra_tabelas1 field changed
      • addedInput schema / additionalProperties
        Added value: +false
    • Changedibge_vizinhos1 field changed
      • addedInput schema / additionalProperties
        Added value: +false
  6. 2 tool updatesv4.3.0
    • Addedfetch
    • Addedsearch
  7. 22 tool updatesv4.0.0
    • Changedibge_calendario4 fields changed
      • removedOutput schema / properties / provenance / properties / data_vintage / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / provenance / properties / data_vintage / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / provenance / properties / license / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / provenance / properties / license / type
        Added value: +[
        +  "string",
        +  "null"
        +]
    • Changedibge_censo4 fields changed
      • removedOutput schema / properties / provenance / properties / data_vintage / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / provenance / properties / data_vintage / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / provenance / properties / license / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / provenance / properties / license / type
        Added value: +[
        +  "string",
        +  "null"
        +]
    • Changedibge_cidades4 fields changed
      • removedOutput schema / properties / provenance / properties / data_vintage / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / provenance / properties / data_vintage / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / provenance / properties / license / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / provenance / properties / license / type
        Added value: +[
        +  "string",
        +  "null"
        +]
    • Changedibge_cnae4 fields changed
      • removedOutput schema / properties / provenance / properties / data_vintage / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / provenance / properties / data_vintage / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / provenance / properties / license / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / provenance / properties / license / type
        Added value: +[
        +  "string",
        +  "null"
        +]
    • Changedibge_comparar6 fields changed
      • changedInput schema / properties / indicador / description
        Previous value: -"Indicador para comparação:\n- populacao: Estimativa populacional atual\n- populacao_censo: População do Censo 2022\n- pib: PIB per capita\n- area: Área territorial (km²)\n- densidade: Densidade demográfica (hab/km²)\n- alfabetizacao: Taxa de alfabetização\n- domicilios: Número de domicílios\n- listar: Lista indicadores disponíveis"New value: +"Indicador para comparação:\n- populacao: Estimativa populacional atual\n- populacao_censo: População do Censo 2022\n- pib: PIB a preços correntes (Mil Reais)\n- area: Área territorial (km²)\n- densidade: Densidade demográfica (hab/km²)\n- alfabetizacao: Taxa de alfabetização\n- domicilios: Número de domicílios\n- listar: Lista indicadores disponíveis"
      • changedOutput schema / properties / localidades / items / properties / valor / type
        Previous value: -"number"New value: +[
        +  "number",
        +  "null"
        +]
      • removedOutput schema / properties / provenance / properties / data_vintage / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / provenance / properties / data_vintage / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / provenance / properties / license / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / provenance / properties / license / type
        Added value: +[
        +  "string",
        +  "null"
        +]
    • Changedibge_datasaude5 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- obitos_causas: Óbitos por causas (CID-10)\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- 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- listar: Lista indicadores disponíveis"
      • removedOutput schema / properties / provenance / properties / data_vintage / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / provenance / properties / data_vintage / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / provenance / properties / license / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / provenance / properties / license / type
        Added value: +[
        +  "string",
        +  "null"
        +]
    • Changedibge_estados4 fields changed
      • removedOutput schema / properties / provenance / properties / data_vintage / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / provenance / properties / data_vintage / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / provenance / properties / license / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / provenance / properties / license / type
        Added value: +[
        +  "string",
        +  "null"
        +]
    • Changedibge_geocodigo4 fields changed
      • removedOutput schema / properties / provenance / properties / data_vintage / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / provenance / properties / data_vintage / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / provenance / properties / license / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / provenance / properties / license / type
        Added value: +[
        +  "string",
        +  "null"
        +]
    • Changedibge_indicadores4 fields changed
      • removedOutput schema / properties / provenance / properties / data_vintage / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / provenance / properties / data_vintage / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / provenance / properties / license / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / provenance / properties / license / type
        Added value: +[
        +  "string",
        +  "null"
        +]
    • Changedibge_localidade4 fields changed
      • removedOutput schema / properties / provenance / properties / data_vintage / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / provenance / properties / data_vintage / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / provenance / properties / license / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / provenance / properties / license / type
        Added value: +[
        +  "string",
        +  "null"
        +]
    • Changedibge_malhas4 fields changed
      • removedOutput schema / properties / provenance / properties / data_vintage / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / provenance / properties / data_vintage / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / provenance / properties / license / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / provenance / properties / license / type
        Added value: +[
        +  "string",
        +  "null"
        +]
    • Changedibge_malhas_tema4 fields changed
      • removedOutput schema / properties / provenance / properties / data_vintage / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / provenance / properties / data_vintage / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / provenance / properties / license / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / provenance / properties / license / type
        Added value: +[
        +  "string",
        +  "null"
        +]
    • Changedibge_municipios4 fields changed
      • removedOutput schema / properties / provenance / properties / data_vintage / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / provenance / properties / data_vintage / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / provenance / properties / license / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / provenance / properties / license / type
        Added value: +[
        +  "string",
        +  "null"
        +]
    • Changedibge_nomes8 fields changed
      • removedOutput schema / properties / frequencia / items / properties / sexo / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / frequencia / items / properties / sexo / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / provenance / properties / data_vintage / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / provenance / properties / data_vintage / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / provenance / properties / license / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / provenance / properties / license / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / ranking / properties / sexo / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / ranking / properties / sexo / type
        Added value: +[
        +  "string",
        +  "null"
        +]
    • Changedibge_noticias4 fields changed
      • removedOutput schema / properties / provenance / properties / data_vintage / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / provenance / properties / data_vintage / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / provenance / properties / license / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / provenance / properties / license / type
        Added value: +[
        +  "string",
        +  "null"
        +]
    • Changedibge_paises4 fields changed
      • removedOutput schema / properties / provenance / properties / data_vintage / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / provenance / properties / data_vintage / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / provenance / properties / license / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / provenance / properties / license / type
        Added value: +[
        +  "string",
        +  "null"
        +]
    • Changedibge_pesquisas4 fields changed
      • removedOutput schema / properties / provenance / properties / data_vintage / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / provenance / properties / data_vintage / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / provenance / properties / license / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / provenance / properties / license / type
        Added value: +[
        +  "string",
        +  "null"
        +]
    • Removedibge_populacao
    • Changedibge_sidra4 fields changed
      • removedOutput schema / properties / provenance / properties / data_vintage / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / provenance / properties / data_vintage / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / provenance / properties / license / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / provenance / properties / license / type
        Added value: +[
        +  "string",
        +  "null"
        +]
    • Changedibge_sidra_metadados4 fields changed
      • removedOutput schema / properties / provenance / properties / data_vintage / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / provenance / properties / data_vintage / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / provenance / properties / license / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / provenance / properties / license / type
        Added value: +[
        +  "string",
        +  "null"
        +]
    • Changedibge_sidra_tabelas4 fields changed
      • removedOutput schema / properties / provenance / properties / data_vintage / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / provenance / properties / data_vintage / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / provenance / properties / license / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / provenance / properties / license / type
        Added value: +[
        +  "string",
        +  "null"
        +]
    • Changedibge_vizinhos4 fields changed
      • removedOutput schema / properties / provenance / properties / data_vintage / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / provenance / properties / data_vintage / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / provenance / properties / license / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / provenance / properties / license / type
        Added value: +[
        +  "string",
        +  "null"
        +]
  8. 22 tool updatesv3.3.0
    • Changedibge_calendario6 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedOutput schema / properties / attribution
        Added value: +{
        +  "description": "URLs canônicas das fontes desta resposta (lista de atribuição)",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / provenance
        Added value: +{
        +  "additionalProperties": false,
        +  "description": "Bloco de proveniência (contrato v1.0): fonte, URL, período, extração e licença",
        +  "properties": {
        +    "citation": {
        +      "description": "Citação pronta para uso",
        +      "type": "string"
        +    },
        +    "data_vintage": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "Período de referência do dado segundo a fonte; null se a fonte não expõe"
        +    },
        +    "license": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "Regime legal do dado"
        +    },
        +    "retrieved_at": {
        +      "description": "Instante real da extração no upstream (ISO-8601, horário de Brasília)",
        +      "type": "string"
        +    },
        +    "source": {
        +      "description": "Fonte oficial do dado (API do IBGE consultada)",
        +      "type": "string"
        +    },
        +    "source_url": {
        +      "description": "URL canônica que reproduz a consulta",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "source",
        +    "source_url",
        +    "data_vintage",
        +    "retrieved_at",
        +    "citation",
        +    "license"
        +  ],
        +  "type": "object"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "eventos",
        -  "total"
        -]New value: +[
        +  "eventos",
        +  "total",
        +  "provenance",
        +  "attribution"
        +]
    • Changedibge_censo11 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / agruparPor
        Added value: +{
        +  "description": "Com estatisticas=true, agrupa pela coluna informada (rótulo, ex: 'Unidade da Federação', 'Ano') e ranqueia os grupos por soma decrescente (grupos[0] = maior total), cada grupo com sua mini-distribuição",
        +  "type": "string"
        +}
      • addedInput schema / properties / estatisticas
        Added value: +{
        +  "default": false,
        +  "description": "Computa estatísticas (mínimo/máximo/média/mediana/desvio-padrão/percentis) sobre TODOS os registros da consulta, antes da paginação, + ranking top/bottom. Use para 'qual o maior/menor', 'média', 'mediana', 'distribuição', 'ranking'. Quando true, ignora pagina, campos e formato",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / topN
        Added value: +{
        +  "default": 10,
        +  "description": "Tamanho das listas top/bottom quando estatisticas=true sem agruparPor (padrão: 10, máx: 100)",
        +  "maximum": 100,
        +  "minimum": 1,
        +  "type": "integer"
        +}
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedOutput schema / properties / attribution
        Added value: +{
        +  "description": "URLs canônicas das fontes desta resposta (lista de atribuição)",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / estatisticas
        Added value: +{
        +  "additionalProperties": false,
        +  "description": "Bloco estatístico presente quando estatisticas=true (registros vem vazio nesse modo)",
        +  "properties": {
        +    "agrupadoPor": {
        +      "description": "Rótulo da coluna de agrupamento (com agruparPor)",
        +      "type": "string"
        +    },
        +    "aviso": {
        +      "description": "Avisos sobre agrupamento automático, mistura de unidades ou truncamento",
        +      "type": "string"
        +    },
        +    "bottom": {
        +      "description": "Menores valores (sem agruparPor)",
        +      "items": {
        +        "additionalProperties": {},
        +        "propertyNames": {
        +          "type": "string"
        +        },
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "colunaValor": {
        +      "description": "Rótulo da coluna numérica analisada (sempre 'Valor' no SIDRA)",
        +      "type": "string"
        +    },
        +    "distribuicao": {
        +      "additionalProperties": false,
        +      "description": "Distribuição do conjunto inteiro (sem agruparPor)",
        +      "properties": {
        +        "desvioPadrao": {
        +          "type": "number"
        +        },
        +        "maximo": {
        +          "type": "number"
        +        },
        +        "media": {
        +          "type": "number"
        +        },
        +        "mediana": {
        +          "type": "number"
        +        },
        +        "minimo": {
        +          "type": "number"
        +        },
        +        "n": {
        +          "description": "Registros com valor numérico considerados",
        +          "type": "number"
        +        },
        +        "percentis": {
        +          "items": {
        +            "additionalProperties": false,
        +            "properties": {
        +              "percentil": {
        +                "description": "Percentil (50 = mediana)",
        +                "type": "number"
        +              },
        +              "rotulo": {
        +                "description": "Enunciado por extenso, pronto para citar ao leitor",
        +                "type": "string"
        +              },
        +              "valor": {
        +                "type": "number"
        +              }
        +            },
        +            "required": [
        +              "percentil",
        +              "valor",
        +              "rotulo"
        +            ],
        +            "type": "object"
        +          },
        +          "type": "array"
        +        },
        +        "soma": {
        +          "type": "number"
        +        }
        +      },
        +      "required": [
        +        "n",
        +        "soma",
        +        "minimo",
        +        "maximo",
        +        "media",
        +        "mediana",
        +        "desvioPadrao",
        +        "percentis"
        +      ],
        +      "type": "object"
        +    },
        +    "grupos": {
        +      "description": "Grupos ordenados por soma decrescente, cada um com sua mini-distribuição (com agruparPor)",
        +      "items": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "desvioPadrao": {
        +            "type": "number"
        +          },
        +          "grupo": {
        +            "type": "string"
        +          },
        +          "maximo": {
        +            "type": "number"
        +          },
        +          "media": {
        +            "type": "number"
        +          },
        +          "mediana": {
        +            "type": "number"
        +          },
        +          "minimo": {
        +            "type": "number"
        +          },
        +          "n": {
        +            "description": "Registros com valor numérico considerados",
        +            "type": "number"
        +          },
        +          "percentis": {
        +            "items": {
        +              "additionalProperties": false,
        +              "properties": {
        +                "percentil": {
        +                  "description": "Percentil (50 = mediana)",
        +                  "type": "number"
        +                },
        +                "rotulo": {
        +                  "description": "Enunciado por extenso, pronto para citar ao leitor",
        +                  "type": "string"
        +                },
        +                "valor": {
        +                  "type": "number"
        +                }
        +              },
        +              "required": [
        +                "percentil",
        +                "valor",
        +                "rotulo"
        +              ],
        +              "type": "object"
        +            },
        +            "type": "array"
        +          },
        +          "soma": {
        +            "type": "number"
        +          }
        +        },
        +        "required": [
        +          "n",
        +          "soma",
        +          "minimo",
        +          "maximo",
        +          "media",
        +          "mediana",
        +          "desvioPadrao",
        +          "percentis",
        +          "grupo"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "registrosConsiderados": {
        +      "description": "Registros com valor numérico (contam no n)",
        +      "type": "number"
        +    },
        +    "registrosSemValor": {
        +      "description": "Registros excluídos por marcador de ausência SIDRA ('-', '..', '...', 'X') ou valor não numérico",
        +      "type": "number"
        +    },
        +    "top": {
        +      "description": "Maiores valores, com as colunas de identificação do registro (sem agruparPor)",
        +      "items": {
        +        "additionalProperties": {},
        +        "propertyNames": {
        +          "type": "string"
        +        },
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "totalGrupos": {
        +      "description": "Total de grupos existentes antes do teto (com agruparPor)",
        +      "type": "number"
        +    }
        +  },
        +  "required": [
        +    "colunaValor",
        +    "registrosConsiderados",
        +    "registrosSemValor"
        +  ],
        +  "type": "object"
        +}
      • addedOutput schema / properties / provenance
        Added value: +{
        +  "additionalProperties": false,
        +  "description": "Bloco de proveniência (contrato v1.0): fonte, URL, período, extração e licença",
        +  "properties": {
        +    "citation": {
        +      "description": "Citação pronta para uso",
        +      "type": "string"
        +    },
        +    "data_vintage": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "Período de referência do dado segundo a fonte; null se a fonte não expõe"
        +    },
        +    "license": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "Regime legal do dado"
        +    },
        +    "retrieved_at": {
        +      "description": "Instante real da extração no upstream (ISO-8601, horário de Brasília)",
        +      "type": "string"
        +    },
        +    "source": {
        +      "description": "Fonte oficial do dado (API do IBGE consultada)",
        +      "type": "string"
        +    },
        +    "source_url": {
        +      "description": "URL canônica que reproduz a consulta",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "source",
        +    "source_url",
        +    "data_vintage",
        +    "retrieved_at",
        +    "citation",
        +    "license"
        +  ],
        +  "type": "object"
        +}
      • addedOutput schema / properties / registros / items / propertyNames
        Added value: +{
        +  "type": "string"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "totalRegistros",
        -  "colunas",
        -  "registros"
        -]New value: +[
        +  "totalRegistros",
        +  "colunas",
        +  "registros",
        +  "provenance",
        +  "attribution"
        +]
    • Changedibge_cidades6 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedOutput schema / properties / attribution
        Added value: +{
        +  "description": "URLs canônicas das fontes desta resposta (lista de atribuição)",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / provenance
        Added value: +{
        +  "additionalProperties": false,
        +  "description": "Bloco de proveniência (contrato v1.0): fonte, URL, período, extração e licença",
        +  "properties": {
        +    "citation": {
        +      "description": "Citação pronta para uso",
        +      "type": "string"
        +    },
        +    "data_vintage": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "Período de referência do dado segundo a fonte; null se a fonte não expõe"
        +    },
        +    "license": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "Regime legal do dado"
        +    },
        +    "retrieved_at": {
        +      "description": "Instante real da extração no upstream (ISO-8601, horário de Brasília)",
        +      "type": "string"
        +    },
        +    "source": {
        +      "description": "Fonte oficial do dado (API do IBGE consultada)",
        +      "type": "string"
        +    },
        +    "source_url": {
        +      "description": "URL canônica que reproduz a consulta",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "source",
        +    "source_url",
        +    "data_vintage",
        +    "retrieved_at",
        +    "citation",
        +    "license"
        +  ],
        +  "type": "object"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "tipo",
        -  "indicadores"
        -]New value: +[
        +  "tipo",
        +  "indicadores",
        +  "provenance",
        +  "attribution"
        +]
    • Changedibge_cnae6 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedOutput schema / properties / attribution
        Added value: +{
        +  "description": "URLs canônicas das fontes desta resposta (lista de atribuição)",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / provenance
        Added value: +{
        +  "additionalProperties": false,
        +  "description": "Bloco de proveniência (contrato v1.0): fonte, URL, período, extração e licença",
        +  "properties": {
        +    "citation": {
        +      "description": "Citação pronta para uso",
        +      "type": "string"
        +    },
        +    "data_vintage": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "Período de referência do dado segundo a fonte; null se a fonte não expõe"
        +    },
        +    "license": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "Regime legal do dado"
        +    },
        +    "retrieved_at": {
        +      "description": "Instante real da extração no upstream (ISO-8601, horário de Brasília)",
        +      "type": "string"
        +    },
        +    "source": {
        +      "description": "Fonte oficial do dado (API do IBGE consultada)",
        +      "type": "string"
        +    },
        +    "source_url": {
        +      "description": "URL canônica que reproduz a consulta",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "source",
        +    "source_url",
        +    "data_vintage",
        +    "retrieved_at",
        +    "citation",
        +    "license"
        +  ],
        +  "type": "object"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "modo"
        -]New value: +[
        +  "modo",
        +  "provenance",
        +  "attribution"
        +]
    • Changedibge_comparar6 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedOutput schema / properties / attribution
        Added value: +{
        +  "description": "URLs canônicas das fontes desta resposta (lista de atribuição)",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / provenance
        Added value: +{
        +  "additionalProperties": false,
        +  "description": "Bloco de proveniência (contrato v1.0): fonte, URL, período, extração e licença",
        +  "properties": {
        +    "citation": {
        +      "description": "Citação pronta para uso",
        +      "type": "string"
        +    },
        +    "data_vintage": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "Período de referência do dado segundo a fonte; null se a fonte não expõe"
        +    },
        +    "license": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "Regime legal do dado"
        +    },
        +    "retrieved_at": {
        +      "description": "Instante real da extração no upstream (ISO-8601, horário de Brasília)",
        +      "type": "string"
        +    },
        +    "source": {
        +      "description": "Fonte oficial do dado (API do IBGE consultada)",
        +      "type": "string"
        +    },
        +    "source_url": {
        +      "description": "URL canônica que reproduz a consulta",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "source",
        +    "source_url",
        +    "data_vintage",
        +    "retrieved_at",
        +    "citation",
        +    "license"
        +  ],
        +  "type": "object"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "localidades"
        -]New value: +[
        +  "localidades",
        +  "provenance",
        +  "attribution"
        +]
    • Changedibge_datasaude11 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / agruparPor
        Added value: +{
        +  "description": "Com estatisticas=true, agrupa pela coluna informada (rótulo, ex: 'Unidade da Federação', 'Ano') e ranqueia os grupos por soma decrescente (grupos[0] = maior total), cada grupo com sua mini-distribuição",
        +  "type": "string"
        +}
      • addedInput schema / properties / estatisticas
        Added value: +{
        +  "default": false,
        +  "description": "Computa estatísticas (mínimo/máximo/média/mediana/desvio-padrão/percentis) sobre TODOS os registros da consulta, antes da paginação, + ranking top/bottom. Use para 'qual o maior/menor', 'média', 'mediana', 'distribuição', 'ranking'. Quando true, ignora pagina, campos e formato",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / topN
        Added value: +{
        +  "default": 10,
        +  "description": "Tamanho das listas top/bottom quando estatisticas=true sem agruparPor (padrão: 10, máx: 100)",
        +  "maximum": 100,
        +  "minimum": 1,
        +  "type": "integer"
        +}
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedOutput schema / properties / attribution
        Added value: +{
        +  "description": "URLs canônicas das fontes desta resposta (lista de atribuição)",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / estatisticas
        Added value: +{
        +  "additionalProperties": false,
        +  "description": "Bloco estatístico presente quando estatisticas=true (registros vem vazio nesse modo)",
        +  "properties": {
        +    "agrupadoPor": {
        +      "description": "Rótulo da coluna de agrupamento (com agruparPor)",
        +      "type": "string"
        +    },
        +    "aviso": {
        +      "description": "Avisos sobre agrupamento automático, mistura de unidades ou truncamento",
        +      "type": "string"
        +    },
        +    "bottom": {
        +      "description": "Menores valores (sem agruparPor)",
        +      "items": {
        +        "additionalProperties": {},
        +        "propertyNames": {
        +          "type": "string"
        +        },
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "colunaValor": {
        +      "description": "Rótulo da coluna numérica analisada (sempre 'Valor' no SIDRA)",
        +      "type": "string"
        +    },
        +    "distribuicao": {
        +      "additionalProperties": false,
        +      "description": "Distribuição do conjunto inteiro (sem agruparPor)",
        +      "properties": {
        +        "desvioPadrao": {
        +          "type": "number"
        +        },
        +        "maximo": {
        +          "type": "number"
        +        },
        +        "media": {
        +          "type": "number"
        +        },
        +        "mediana": {
        +          "type": "number"
        +        },
        +        "minimo": {
        +          "type": "number"
        +        },
        +        "n": {
        +          "description": "Registros com valor numérico considerados",
        +          "type": "number"
        +        },
        +        "percentis": {
        +          "items": {
        +            "additionalProperties": false,
        +            "properties": {
        +              "percentil": {
        +                "description": "Percentil (50 = mediana)",
        +                "type": "number"
        +              },
        +              "rotulo": {
        +                "description": "Enunciado por extenso, pronto para citar ao leitor",
        +                "type": "string"
        +              },
        +              "valor": {
        +                "type": "number"
        +              }
        +            },
        +            "required": [
        +              "percentil",
        +              "valor",
        +              "rotulo"
        +            ],
        +            "type": "object"
        +          },
        +          "type": "array"
        +        },
        +        "soma": {
        +          "type": "number"
        +        }
        +      },
        +      "required": [
        +        "n",
        +        "soma",
        +        "minimo",
        +        "maximo",
        +        "media",
        +        "mediana",
        +        "desvioPadrao",
        +        "percentis"
        +      ],
        +      "type": "object"
        +    },
        +    "grupos": {
        +      "description": "Grupos ordenados por soma decrescente, cada um com sua mini-distribuição (com agruparPor)",
        +      "items": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "desvioPadrao": {
        +            "type": "number"
        +          },
        +          "grupo": {
        +            "type": "string"
        +          },
        +          "maximo": {
        +            "type": "number"
        +          },
        +          "media": {
        +            "type": "number"
        +          },
        +          "mediana": {
        +            "type": "number"
        +          },
        +          "minimo": {
        +            "type": "number"
        +          },
        +          "n": {
        +            "description": "Registros com valor numérico considerados",
        +            "type": "number"
        +          },
        +          "percentis": {
        +            "items": {
        +              "additionalProperties": false,
        +              "properties": {
        +                "percentil": {
        +                  "description": "Percentil (50 = mediana)",
        +                  "type": "number"
        +                },
        +                "rotulo": {
        +                  "description": "Enunciado por extenso, pronto para citar ao leitor",
        +                  "type": "string"
        +                },
        +                "valor": {
        +                  "type": "number"
        +                }
        +              },
        +              "required": [
        +                "percentil",
        +                "valor",
        +                "rotulo"
        +              ],
        +              "type": "object"
        +            },
        +            "type": "array"
        +          },
        +          "soma": {
        +            "type": "number"
        +          }
        +        },
        +        "required": [
        +          "n",
        +          "soma",
        +          "minimo",
        +          "maximo",
        +          "media",
        +          "mediana",
        +          "desvioPadrao",
        +          "percentis",
        +          "grupo"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "registrosConsiderados": {
        +      "description": "Registros com valor numérico (contam no n)",
        +      "type": "number"
        +    },
        +    "registrosSemValor": {
        +      "description": "Registros excluídos por marcador de ausência SIDRA ('-', '..', '...', 'X') ou valor não numérico",
        +      "type": "number"
        +    },
        +    "top": {
        +      "description": "Maiores valores, com as colunas de identificação do registro (sem agruparPor)",
        +      "items": {
        +        "additionalProperties": {},
        +        "propertyNames": {
        +          "type": "string"
        +        },
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "totalGrupos": {
        +      "description": "Total de grupos existentes antes do teto (com agruparPor)",
        +      "type": "number"
        +    }
        +  },
        +  "required": [
        +    "colunaValor",
        +    "registrosConsiderados",
        +    "registrosSemValor"
        +  ],
        +  "type": "object"
        +}
      • addedOutput schema / properties / provenance
        Added value: +{
        +  "additionalProperties": false,
        +  "description": "Bloco de proveniência (contrato v1.0): fonte, URL, período, extração e licença",
        +  "properties": {
        +    "citation": {
        +      "description": "Citação pronta para uso",
        +      "type": "string"
        +    },
        +    "data_vintage": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "Período de referência do dado segundo a fonte; null se a fonte não expõe"
        +    },
        +    "license": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "Regime legal do dado"
        +    },
        +    "retrieved_at": {
        +      "description": "Instante real da extração no upstream (ISO-8601, horário de Brasília)",
        +      "type": "string"
        +    },
        +    "source": {
        +      "description": "Fonte oficial do dado (API do IBGE consultada)",
        +      "type": "string"
        +    },
        +    "source_url": {
        +      "description": "URL canônica que reproduz a consulta",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "source",
        +    "source_url",
        +    "data_vintage",
        +    "retrieved_at",
        +    "citation",
        +    "license"
        +  ],
        +  "type": "object"
        +}
      • addedOutput schema / properties / registros / items / propertyNames
        Added value: +{
        +  "type": "string"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "totalRegistros",
        -  "colunas",
        -  "registros"
        -]New value: +[
        +  "totalRegistros",
        +  "colunas",
        +  "registros",
        +  "provenance",
        +  "attribution"
        +]
    • Changedibge_estados6 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedOutput schema / properties / attribution
        Added value: +{
        +  "description": "URLs canônicas das fontes desta resposta (lista de atribuição)",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / provenance
        Added value: +{
        +  "additionalProperties": false,
        +  "description": "Bloco de proveniência (contrato v1.0): fonte, URL, período, extração e licença",
        +  "properties": {
        +    "citation": {
        +      "description": "Citação pronta para uso",
        +      "type": "string"
        +    },
        +    "data_vintage": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "Período de referência do dado segundo a fonte; null se a fonte não expõe"
        +    },
        +    "license": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "Regime legal do dado"
        +    },
        +    "retrieved_at": {
        +      "description": "Instante real da extração no upstream (ISO-8601, horário de Brasília)",
        +      "type": "string"
        +    },
        +    "source": {
        +      "description": "Fonte oficial do dado (API do IBGE consultada)",
        +      "type": "string"
        +    },
        +    "source_url": {
        +      "description": "URL canônica que reproduz a consulta",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "source",
        +    "source_url",
        +    "data_vintage",
        +    "retrieved_at",
        +    "citation",
        +    "license"
        +  ],
        +  "type": "object"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "estados",
        -  "total"
        -]New value: +[
        +  "estados",
        +  "total",
        +  "provenance",
        +  "attribution"
        +]
    • Changedibge_geocodigo6 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedOutput schema / properties / attribution
        Added value: +{
        +  "description": "URLs canônicas das fontes desta resposta (lista de atribuição)",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / provenance
        Added value: +{
        +  "additionalProperties": false,
        +  "description": "Bloco de proveniência (contrato v1.0): fonte, URL, período, extração e licença",
        +  "properties": {
        +    "citation": {
        +      "description": "Citação pronta para uso",
        +      "type": "string"
        +    },
        +    "data_vintage": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "Período de referência do dado segundo a fonte; null se a fonte não expõe"
        +    },
        +    "license": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "Regime legal do dado"
        +    },
        +    "retrieved_at": {
        +      "description": "Instante real da extração no upstream (ISO-8601, horário de Brasília)",
        +      "type": "string"
        +    },
        +    "source": {
        +      "description": "Fonte oficial do dado (API do IBGE consultada)",
        +      "type": "string"
        +    },
        +    "source_url": {
        +      "description": "URL canônica que reproduz a consulta",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "source",
        +    "source_url",
        +    "data_vintage",
        +    "retrieved_at",
        +    "citation",
        +    "license"
        +  ],
        +  "type": "object"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "tipo"
        -]New value: +[
        +  "tipo",
        +  "provenance",
        +  "attribution"
        +]
    • Changedibge_indicadores11 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / agruparPor
        Added value: +{
        +  "description": "Com estatisticas=true, agrupa pela coluna informada (rótulo, ex: 'Unidade da Federação', 'Ano') e ranqueia os grupos por soma decrescente (grupos[0] = maior total), cada grupo com sua mini-distribuição",
        +  "type": "string"
        +}
      • addedInput schema / properties / estatisticas
        Added value: +{
        +  "default": false,
        +  "description": "Computa estatísticas (mínimo/máximo/média/mediana/desvio-padrão/percentis) sobre TODOS os registros da consulta, antes da paginação, + ranking top/bottom. Use para 'qual o maior/menor', 'média', 'mediana', 'distribuição', 'ranking'. Quando true, ignora pagina, campos e formato",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / topN
        Added value: +{
        +  "default": 10,
        +  "description": "Tamanho das listas top/bottom quando estatisticas=true sem agruparPor (padrão: 10, máx: 100)",
        +  "maximum": 100,
        +  "minimum": 1,
        +  "type": "integer"
        +}
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedOutput schema / properties / attribution
        Added value: +{
        +  "description": "URLs canônicas das fontes desta resposta (lista de atribuição)",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / estatisticas
        Added value: +{
        +  "additionalProperties": false,
        +  "description": "Bloco estatístico presente quando estatisticas=true (registros vem vazio nesse modo)",
        +  "properties": {
        +    "agrupadoPor": {
        +      "description": "Rótulo da coluna de agrupamento (com agruparPor)",
        +      "type": "string"
        +    },
        +    "aviso": {
        +      "description": "Avisos sobre agrupamento automático, mistura de unidades ou truncamento",
        +      "type": "string"
        +    },
        +    "bottom": {
        +      "description": "Menores valores (sem agruparPor)",
        +      "items": {
        +        "additionalProperties": {},
        +        "propertyNames": {
        +          "type": "string"
        +        },
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "colunaValor": {
        +      "description": "Rótulo da coluna numérica analisada (sempre 'Valor' no SIDRA)",
        +      "type": "string"
        +    },
        +    "distribuicao": {
        +      "additionalProperties": false,
        +      "description": "Distribuição do conjunto inteiro (sem agruparPor)",
        +      "properties": {
        +        "desvioPadrao": {
        +          "type": "number"
        +        },
        +        "maximo": {
        +          "type": "number"
        +        },
        +        "media": {
        +          "type": "number"
        +        },
        +        "mediana": {
        +          "type": "number"
        +        },
        +        "minimo": {
        +          "type": "number"
        +        },
        +        "n": {
        +          "description": "Registros com valor numérico considerados",
        +          "type": "number"
        +        },
        +        "percentis": {
        +          "items": {
        +            "additionalProperties": false,
        +            "properties": {
        +              "percentil": {
        +                "description": "Percentil (50 = mediana)",
        +                "type": "number"
        +              },
        +              "rotulo": {
        +                "description": "Enunciado por extenso, pronto para citar ao leitor",
        +                "type": "string"
        +              },
        +              "valor": {
        +                "type": "number"
        +              }
        +            },
        +            "required": [
        +              "percentil",
        +              "valor",
        +              "rotulo"
        +            ],
        +            "type": "object"
        +          },
        +          "type": "array"
        +        },
        +        "soma": {
        +          "type": "number"
        +        }
        +      },
        +      "required": [
        +        "n",
        +        "soma",
        +        "minimo",
        +        "maximo",
        +        "media",
        +        "mediana",
        +        "desvioPadrao",
        +        "percentis"
        +      ],
        +      "type": "object"
        +    },
        +    "grupos": {
        +      "description": "Grupos ordenados por soma decrescente, cada um com sua mini-distribuição (com agruparPor)",
        +      "items": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "desvioPadrao": {
        +            "type": "number"
        +          },
        +          "grupo": {
        +            "type": "string"
        +          },
        +          "maximo": {
        +            "type": "number"
        +          },
        +          "media": {
        +            "type": "number"
        +          },
        +          "mediana": {
        +            "type": "number"
        +          },
        +          "minimo": {
        +            "type": "number"
        +          },
        +          "n": {
        +            "description": "Registros com valor numérico considerados",
        +            "type": "number"
        +          },
        +          "percentis": {
        +            "items": {
        +              "additionalProperties": false,
        +              "properties": {
        +                "percentil": {
        +                  "description": "Percentil (50 = mediana)",
        +                  "type": "number"
        +                },
        +                "rotulo": {
        +                  "description": "Enunciado por extenso, pronto para citar ao leitor",
        +                  "type": "string"
        +                },
        +                "valor": {
        +                  "type": "number"
        +                }
        +              },
        +              "required": [
        +                "percentil",
        +                "valor",
        +                "rotulo"
        +              ],
        +              "type": "object"
        +            },
        +            "type": "array"
        +          },
        +          "soma": {
        +            "type": "number"
        +          }
        +        },
        +        "required": [
        +          "n",
        +          "soma",
        +          "minimo",
        +          "maximo",
        +          "media",
        +          "mediana",
        +          "desvioPadrao",
        +          "percentis",
        +          "grupo"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "registrosConsiderados": {
        +      "description": "Registros com valor numérico (contam no n)",
        +      "type": "number"
        +    },
        +    "registrosSemValor": {
        +      "description": "Registros excluídos por marcador de ausência SIDRA ('-', '..', '...', 'X') ou valor não numérico",
        +      "type": "number"
        +    },
        +    "top": {
        +      "description": "Maiores valores, com as colunas de identificação do registro (sem agruparPor)",
        +      "items": {
        +        "additionalProperties": {},
        +        "propertyNames": {
        +          "type": "string"
        +        },
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "totalGrupos": {
        +      "description": "Total de grupos existentes antes do teto (com agruparPor)",
        +      "type": "number"
        +    }
        +  },
        +  "required": [
        +    "colunaValor",
        +    "registrosConsiderados",
        +    "registrosSemValor"
        +  ],
        +  "type": "object"
        +}
      • addedOutput schema / properties / provenance
        Added value: +{
        +  "additionalProperties": false,
        +  "description": "Bloco de proveniência (contrato v1.0): fonte, URL, período, extração e licença",
        +  "properties": {
        +    "citation": {
        +      "description": "Citação pronta para uso",
        +      "type": "string"
        +    },
        +    "data_vintage": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "Período de referência do dado segundo a fonte; null se a fonte não expõe"
        +    },
        +    "license": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "Regime legal do dado"
        +    },
        +    "retrieved_at": {
        +      "description": "Instante real da extração no upstream (ISO-8601, horário de Brasília)",
        +      "type": "string"
        +    },
        +    "source": {
        +      "description": "Fonte oficial do dado (API do IBGE consultada)",
        +      "type": "string"
        +    },
        +    "source_url": {
        +      "description": "URL canônica que reproduz a consulta",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "source",
        +    "source_url",
        +    "data_vintage",
        +    "retrieved_at",
        +    "citation",
        +    "license"
        +  ],
        +  "type": "object"
        +}
      • addedOutput schema / properties / registros / items / propertyNames
        Added value: +{
        +  "type": "string"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "totalRegistros",
        -  "colunas",
        -  "registros"
        -]New value: +[
        +  "totalRegistros",
        +  "colunas",
        +  "registros",
        +  "provenance",
        +  "attribution"
        +]
    • Changedibge_localidade6 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedOutput schema / properties / attribution
        Added value: +{
        +  "description": "URLs canônicas das fontes desta resposta (lista de atribuição)",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / provenance
        Added value: +{
        +  "additionalProperties": false,
        +  "description": "Bloco de proveniência (contrato v1.0): fonte, URL, período, extração e licença",
        +  "properties": {
        +    "citation": {
        +      "description": "Citação pronta para uso",
        +      "type": "string"
        +    },
        +    "data_vintage": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "Período de referência do dado segundo a fonte; null se a fonte não expõe"
        +    },
        +    "license": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "Regime legal do dado"
        +    },
        +    "retrieved_at": {
        +      "description": "Instante real da extração no upstream (ISO-8601, horário de Brasília)",
        +      "type": "string"
        +    },
        +    "source": {
        +      "description": "Fonte oficial do dado (API do IBGE consultada)",
        +      "type": "string"
        +    },
        +    "source_url": {
        +      "description": "URL canônica que reproduz a consulta",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "source",
        +    "source_url",
        +    "data_vintage",
        +    "retrieved_at",
        +    "citation",
        +    "license"
        +  ],
        +  "type": "object"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "tipo",
        -  "id",
        -  "nome"
        -]New value: +[
        +  "tipo",
        +  "id",
        +  "nome",
        +  "provenance",
        +  "attribution"
        +]
    • Changedibge_malhas6 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedOutput schema / properties / attribution
        Added value: +{
        +  "description": "URLs canônicas das fontes desta resposta (lista de atribuição)",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / provenance
        Added value: +{
        +  "additionalProperties": false,
        +  "description": "Bloco de proveniência (contrato v1.0): fonte, URL, período, extração e licença",
        +  "properties": {
        +    "citation": {
        +      "description": "Citação pronta para uso",
        +      "type": "string"
        +    },
        +    "data_vintage": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "Período de referência do dado segundo a fonte; null se a fonte não expõe"
        +    },
        +    "license": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "Regime legal do dado"
        +    },
        +    "retrieved_at": {
        +      "description": "Instante real da extração no upstream (ISO-8601, horário de Brasília)",
        +      "type": "string"
        +    },
        +    "source": {
        +      "description": "Fonte oficial do dado (API do IBGE consultada)",
        +      "type": "string"
        +    },
        +    "source_url": {
        +      "description": "URL canônica que reproduz a consulta",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "source",
        +    "source_url",
        +    "data_vintage",
        +    "retrieved_at",
        +    "citation",
        +    "license"
        +  ],
        +  "type": "object"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "localidade",
        -  "formato"
        -]New value: +[
        +  "localidade",
        +  "formato",
        +  "provenance",
        +  "attribution"
        +]
    • Changedibge_malhas_tema6 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedOutput schema / properties / attribution
        Added value: +{
        +  "description": "URLs canônicas das fontes desta resposta (lista de atribuição)",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / provenance
        Added value: +{
        +  "additionalProperties": false,
        +  "description": "Bloco de proveniência (contrato v1.0): fonte, URL, período, extração e licença",
        +  "properties": {
        +    "citation": {
        +      "description": "Citação pronta para uso",
        +      "type": "string"
        +    },
        +    "data_vintage": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "Período de referência do dado segundo a fonte; null se a fonte não expõe"
        +    },
        +    "license": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "Regime legal do dado"
        +    },
        +    "retrieved_at": {
        +      "description": "Instante real da extração no upstream (ISO-8601, horário de Brasília)",
        +      "type": "string"
        +    },
        +    "source": {
        +      "description": "Fonte oficial do dado (API do IBGE consultada)",
        +      "type": "string"
        +    },
        +    "source_url": {
        +      "description": "URL canônica que reproduz a consulta",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "source",
        +    "source_url",
        +    "data_vintage",
        +    "retrieved_at",
        +    "citation",
        +    "license"
        +  ],
        +  "type": "object"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "tema"
        -]New value: +[
        +  "tema",
        +  "provenance",
        +  "attribution"
        +]
    • Changedibge_municipios6 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedOutput schema / properties / attribution
        Added value: +{
        +  "description": "URLs canônicas das fontes desta resposta (lista de atribuição)",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / provenance
        Added value: +{
        +  "additionalProperties": false,
        +  "description": "Bloco de proveniência (contrato v1.0): fonte, URL, período, extração e licença",
        +  "properties": {
        +    "citation": {
        +      "description": "Citação pronta para uso",
        +      "type": "string"
        +    },
        +    "data_vintage": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "Período de referência do dado segundo a fonte; null se a fonte não expõe"
        +    },
        +    "license": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "Regime legal do dado"
        +    },
        +    "retrieved_at": {
        +      "description": "Instante real da extração no upstream (ISO-8601, horário de Brasília)",
        +      "type": "string"
        +    },
        +    "source": {
        +      "description": "Fonte oficial do dado (API do IBGE consultada)",
        +      "type": "string"
        +    },
        +    "source_url": {
        +      "description": "URL canônica que reproduz a consulta",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "source",
        +    "source_url",
        +    "data_vintage",
        +    "retrieved_at",
        +    "citation",
        +    "license"
        +  ],
        +  "type": "object"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "municipios",
        -  "total"
        -]New value: +[
        +  "municipios",
        +  "total",
        +  "provenance",
        +  "attribution"
        +]
    • Changedibge_nomes10 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedOutput schema / properties / attribution
        Added value: +{
        +  "description": "URLs canônicas das fontes desta resposta (lista de atribuição)",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / frequencia / items / properties / sexo / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / frequencia / items / properties / sexo / type
        Removed value: -[
        -  "string",
        -  "null"
        -]
      • addedOutput schema / properties / provenance
        Added value: +{
        +  "additionalProperties": false,
        +  "description": "Bloco de proveniência (contrato v1.0): fonte, URL, período, extração e licença",
        +  "properties": {
        +    "citation": {
        +      "description": "Citação pronta para uso",
        +      "type": "string"
        +    },
        +    "data_vintage": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "Período de referência do dado segundo a fonte; null se a fonte não expõe"
        +    },
        +    "license": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "Regime legal do dado"
        +    },
        +    "retrieved_at": {
        +      "description": "Instante real da extração no upstream (ISO-8601, horário de Brasília)",
        +      "type": "string"
        +    },
        +    "source": {
        +      "description": "Fonte oficial do dado (API do IBGE consultada)",
        +      "type": "string"
        +    },
        +    "source_url": {
        +      "description": "URL canônica que reproduz a consulta",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "source",
        +    "source_url",
        +    "data_vintage",
        +    "retrieved_at",
        +    "citation",
        +    "license"
        +  ],
        +  "type": "object"
        +}
      • addedOutput schema / properties / ranking / properties / sexo / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / ranking / properties / sexo / type
        Removed value: -[
        -  "string",
        -  "null"
        -]
      • changedOutput schema / required
        Previous value: -[
        -  "tipo"
        -]New value: +[
        +  "tipo",
        +  "provenance",
        +  "attribution"
        +]
    • Changedibge_noticias6 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedOutput schema / properties / attribution
        Added value: +{
        +  "description": "URLs canônicas das fontes desta resposta (lista de atribuição)",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / provenance
        Added value: +{
        +  "additionalProperties": false,
        +  "description": "Bloco de proveniência (contrato v1.0): fonte, URL, período, extração e licença",
        +  "properties": {
        +    "citation": {
        +      "description": "Citação pronta para uso",
        +      "type": "string"
        +    },
        +    "data_vintage": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "Período de referência do dado segundo a fonte; null se a fonte não expõe"
        +    },
        +    "license": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "Regime legal do dado"
        +    },
        +    "retrieved_at": {
        +      "description": "Instante real da extração no upstream (ISO-8601, horário de Brasília)",
        +      "type": "string"
        +    },
        +    "source": {
        +      "description": "Fonte oficial do dado (API do IBGE consultada)",
        +      "type": "string"
        +    },
        +    "source_url": {
        +      "description": "URL canônica que reproduz a consulta",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "source",
        +    "source_url",
        +    "data_vintage",
        +    "retrieved_at",
        +    "citation",
        +    "license"
        +  ],
        +  "type": "object"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "noticias",
        -  "total",
        -  "pagina",
        -  "totalPaginas"
        -]New value: +[
        +  "noticias",
        +  "total",
        +  "pagina",
        +  "totalPaginas",
        +  "provenance",
        +  "attribution"
        +]
    • Changedibge_paises6 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedOutput schema / properties / attribution
        Added value: +{
        +  "description": "URLs canônicas das fontes desta resposta (lista de atribuição)",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / provenance
        Added value: +{
        +  "additionalProperties": false,
        +  "description": "Bloco de proveniência (contrato v1.0): fonte, URL, período, extração e licença",
        +  "properties": {
        +    "citation": {
        +      "description": "Citação pronta para uso",
        +      "type": "string"
        +    },
        +    "data_vintage": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "Período de referência do dado segundo a fonte; null se a fonte não expõe"
        +    },
        +    "license": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "Regime legal do dado"
        +    },
        +    "retrieved_at": {
        +      "description": "Instante real da extração no upstream (ISO-8601, horário de Brasília)",
        +      "type": "string"
        +    },
        +    "source": {
        +      "description": "Fonte oficial do dado (API do IBGE consultada)",
        +      "type": "string"
        +    },
        +    "source_url": {
        +      "description": "URL canônica que reproduz a consulta",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "source",
        +    "source_url",
        +    "data_vintage",
        +    "retrieved_at",
        +    "citation",
        +    "license"
        +  ],
        +  "type": "object"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "tipo"
        -]New value: +[
        +  "tipo",
        +  "provenance",
        +  "attribution"
        +]
    • Changedibge_pesquisas6 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedOutput schema / properties / attribution
        Added value: +{
        +  "description": "URLs canônicas das fontes desta resposta (lista de atribuição)",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / provenance
        Added value: +{
        +  "additionalProperties": false,
        +  "description": "Bloco de proveniência (contrato v1.0): fonte, URL, período, extração e licença",
        +  "properties": {
        +    "citation": {
        +      "description": "Citação pronta para uso",
        +      "type": "string"
        +    },
        +    "data_vintage": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "Período de referência do dado segundo a fonte; null se a fonte não expõe"
        +    },
        +    "license": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "Regime legal do dado"
        +    },
        +    "retrieved_at": {
        +      "description": "Instante real da extração no upstream (ISO-8601, horário de Brasília)",
        +      "type": "string"
        +    },
        +    "source": {
        +      "description": "Fonte oficial do dado (API do IBGE consultada)",
        +      "type": "string"
        +    },
        +    "source_url": {
        +      "description": "URL canônica que reproduz a consulta",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "source",
        +    "source_url",
        +    "data_vintage",
        +    "retrieved_at",
        +    "citation",
        +    "license"
        +  ],
        +  "type": "object"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "modo"
        -]New value: +[
        +  "modo",
        +  "provenance",
        +  "attribution"
        +]
    • Changedibge_populacao6 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedOutput schema / properties / attribution
        Added value: +{
        +  "description": "URLs canônicas das fontes desta resposta (lista de atribuição)",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / provenance
        Added value: +{
        +  "additionalProperties": false,
        +  "description": "Bloco de proveniência (contrato v1.0): fonte, URL, período, extração e licença",
        +  "properties": {
        +    "citation": {
        +      "description": "Citação pronta para uso",
        +      "type": "string"
        +    },
        +    "data_vintage": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "Período de referência do dado segundo a fonte; null se a fonte não expõe"
        +    },
        +    "license": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "Regime legal do dado"
        +    },
        +    "retrieved_at": {
        +      "description": "Instante real da extração no upstream (ISO-8601, horário de Brasília)",
        +      "type": "string"
        +    },
        +    "source": {
        +      "description": "Fonte oficial do dado (API do IBGE consultada)",
        +      "type": "string"
        +    },
        +    "source_url": {
        +      "description": "URL canônica que reproduz a consulta",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "source",
        +    "source_url",
        +    "data_vintage",
        +    "retrieved_at",
        +    "citation",
        +    "license"
        +  ],
        +  "type": "object"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "localidade",
        -  "horario",
        -  "populacao",
        -  "periodoMedio"
        -]New value: +[
        +  "localidade",
        +  "horario",
        +  "populacao",
        +  "periodoMedio",
        +  "provenance",
        +  "attribution"
        +]
    • Changedibge_sidra12 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / agruparPor
        Added value: +{
        +  "description": "Com estatisticas=true, agrupa pela coluna informada (rótulo, ex: 'Unidade da Federação', 'Ano') e ranqueia os grupos por soma decrescente (grupos[0] = maior total), cada grupo com sua mini-distribuição",
        +  "type": "string"
        +}
      • addedInput schema / properties / estatisticas
        Added value: +{
        +  "default": false,
        +  "description": "Computa estatísticas (mínimo/máximo/média/mediana/desvio-padrão/percentis) sobre TODOS os registros da consulta, antes da paginação, + ranking top/bottom. Use para 'qual o maior/menor', 'média', 'mediana', 'distribuição', 'ranking'. Quando true, ignora pagina, campos e formato",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / pagina / maximum
        Added value: +9007199254740991
      • addedInput schema / properties / topN
        Added value: +{
        +  "default": 10,
        +  "description": "Tamanho das listas top/bottom quando estatisticas=true sem agruparPor (padrão: 10, máx: 100)",
        +  "maximum": 100,
        +  "minimum": 1,
        +  "type": "integer"
        +}
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedOutput schema / properties / attribution
        Added value: +{
        +  "description": "URLs canônicas das fontes desta resposta (lista de atribuição)",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / estatisticas
        Added value: +{
        +  "additionalProperties": false,
        +  "description": "Bloco estatístico presente quando estatisticas=true (registros vem vazio nesse modo)",
        +  "properties": {
        +    "agrupadoPor": {
        +      "description": "Rótulo da coluna de agrupamento (com agruparPor)",
        +      "type": "string"
        +    },
        +    "aviso": {
        +      "description": "Avisos sobre agrupamento automático, mistura de unidades ou truncamento",
        +      "type": "string"
        +    },
        +    "bottom": {
        +      "description": "Menores valores (sem agruparPor)",
        +      "items": {
        +        "additionalProperties": {},
        +        "propertyNames": {
        +          "type": "string"
        +        },
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "colunaValor": {
        +      "description": "Rótulo da coluna numérica analisada (sempre 'Valor' no SIDRA)",
        +      "type": "string"
        +    },
        +    "distribuicao": {
        +      "additionalProperties": false,
        +      "description": "Distribuição do conjunto inteiro (sem agruparPor)",
        +      "properties": {
        +        "desvioPadrao": {
        +          "type": "number"
        +        },
        +        "maximo": {
        +          "type": "number"
        +        },
        +        "media": {
        +          "type": "number"
        +        },
        +        "mediana": {
        +          "type": "number"
        +        },
        +        "minimo": {
        +          "type": "number"
        +        },
        +        "n": {
        +          "description": "Registros com valor numérico considerados",
        +          "type": "number"
        +        },
        +        "percentis": {
        +          "items": {
        +            "additionalProperties": false,
        +            "properties": {
        +              "percentil": {
        +                "description": "Percentil (50 = mediana)",
        +                "type": "number"
        +              },
        +              "rotulo": {
        +                "description": "Enunciado por extenso, pronto para citar ao leitor",
        +                "type": "string"
        +              },
        +              "valor": {
        +                "type": "number"
        +              }
        +            },
        +            "required": [
        +              "percentil",
        +              "valor",
        +              "rotulo"
        +            ],
        +            "type": "object"
        +          },
        +          "type": "array"
        +        },
        +        "soma": {
        +          "type": "number"
        +        }
        +      },
        +      "required": [
        +        "n",
        +        "soma",
        +        "minimo",
        +        "maximo",
        +        "media",
        +        "mediana",
        +        "desvioPadrao",
        +        "percentis"
        +      ],
        +      "type": "object"
        +    },
        +    "grupos": {
        +      "description": "Grupos ordenados por soma decrescente, cada um com sua mini-distribuição (com agruparPor)",
        +      "items": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "desvioPadrao": {
        +            "type": "number"
        +          },
        +          "grupo": {
        +            "type": "string"
        +          },
        +          "maximo": {
        +            "type": "number"
        +          },
        +          "media": {
        +            "type": "number"
        +          },
        +          "mediana": {
        +            "type": "number"
        +          },
        +          "minimo": {
        +            "type": "number"
        +          },
        +          "n": {
        +            "description": "Registros com valor numérico considerados",
        +            "type": "number"
        +          },
        +          "percentis": {
        +            "items": {
        +              "additionalProperties": false,
        +              "properties": {
        +                "percentil": {
        +                  "description": "Percentil (50 = mediana)",
        +                  "type": "number"
        +                },
        +                "rotulo": {
        +                  "description": "Enunciado por extenso, pronto para citar ao leitor",
        +                  "type": "string"
        +                },
        +                "valor": {
        +                  "type": "number"
        +                }
        +              },
        +              "required": [
        +                "percentil",
        +                "valor",
        +                "rotulo"
        +              ],
        +              "type": "object"
        +            },
        +            "type": "array"
        +          },
        +          "soma": {
        +            "type": "number"
        +          }
        +        },
        +        "required": [
        +          "n",
        +          "soma",
        +          "minimo",
        +          "maximo",
        +          "media",
        +          "mediana",
        +          "desvioPadrao",
        +          "percentis",
        +          "grupo"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "registrosConsiderados": {
        +      "description": "Registros com valor numérico (contam no n)",
        +      "type": "number"
        +    },
        +    "registrosSemValor": {
        +      "description": "Registros excluídos por marcador de ausência SIDRA ('-', '..', '...', 'X') ou valor não numérico",
        +      "type": "number"
        +    },
        +    "top": {
        +      "description": "Maiores valores, com as colunas de identificação do registro (sem agruparPor)",
        +      "items": {
        +        "additionalProperties": {},
        +        "propertyNames": {
        +          "type": "string"
        +        },
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "totalGrupos": {
        +      "description": "Total de grupos existentes antes do teto (com agruparPor)",
        +      "type": "number"
        +    }
        +  },
        +  "required": [
        +    "colunaValor",
        +    "registrosConsiderados",
        +    "registrosSemValor"
        +  ],
        +  "type": "object"
        +}
      • addedOutput schema / properties / provenance
        Added value: +{
        +  "additionalProperties": false,
        +  "description": "Bloco de proveniência (contrato v1.0): fonte, URL, período, extração e licença",
        +  "properties": {
        +    "citation": {
        +      "description": "Citação pronta para uso",
        +      "type": "string"
        +    },
        +    "data_vintage": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "Período de referência do dado segundo a fonte; null se a fonte não expõe"
        +    },
        +    "license": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "Regime legal do dado"
        +    },
        +    "retrieved_at": {
        +      "description": "Instante real da extração no upstream (ISO-8601, horário de Brasília)",
        +      "type": "string"
        +    },
        +    "source": {
        +      "description": "Fonte oficial do dado (API do IBGE consultada)",
        +      "type": "string"
        +    },
        +    "source_url": {
        +      "description": "URL canônica que reproduz a consulta",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "source",
        +    "source_url",
        +    "data_vintage",
        +    "retrieved_at",
        +    "citation",
        +    "license"
        +  ],
        +  "type": "object"
        +}
      • addedOutput schema / properties / registros / items / propertyNames
        Added value: +{
        +  "type": "string"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "tabela",
        -  "nome",
        -  "totalRegistros",
        -  "colunas",
        -  "registros",
        -  "paginacao"
        -]New value: +[
        +  "tabela",
        +  "nome",
        +  "totalRegistros",
        +  "colunas",
        +  "registros",
        +  "paginacao",
        +  "provenance",
        +  "attribution"
        +]
    • Changedibge_sidra_metadados6 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedOutput schema / properties / attribution
        Added value: +{
        +  "description": "URLs canônicas das fontes desta resposta (lista de atribuição)",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / provenance
        Added value: +{
        +  "additionalProperties": false,
        +  "description": "Bloco de proveniência (contrato v1.0): fonte, URL, período, extração e licença",
        +  "properties": {
        +    "citation": {
        +      "description": "Citação pronta para uso",
        +      "type": "string"
        +    },
        +    "data_vintage": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "Período de referência do dado segundo a fonte; null se a fonte não expõe"
        +    },
        +    "license": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "Regime legal do dado"
        +    },
        +    "retrieved_at": {
        +      "description": "Instante real da extração no upstream (ISO-8601, horário de Brasília)",
        +      "type": "string"
        +    },
        +    "source": {
        +      "description": "Fonte oficial do dado (API do IBGE consultada)",
        +      "type": "string"
        +    },
        +    "source_url": {
        +      "description": "URL canônica que reproduz a consulta",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "source",
        +    "source_url",
        +    "data_vintage",
        +    "retrieved_at",
        +    "citation",
        +    "license"
        +  ],
        +  "type": "object"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "codigo",
        -  "nome"
        -]New value: +[
        +  "codigo",
        +  "nome",
        +  "provenance",
        +  "attribution"
        +]
    • Changedibge_sidra_tabelas6 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedOutput schema / properties / attribution
        Added value: +{
        +  "description": "URLs canônicas das fontes desta resposta (lista de atribuição)",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / provenance
        Added value: +{
        +  "additionalProperties": false,
        +  "description": "Bloco de proveniência (contrato v1.0): fonte, URL, período, extração e licença",
        +  "properties": {
        +    "citation": {
        +      "description": "Citação pronta para uso",
        +      "type": "string"
        +    },
        +    "data_vintage": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "Período de referência do dado segundo a fonte; null se a fonte não expõe"
        +    },
        +    "license": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "Regime legal do dado"
        +    },
        +    "retrieved_at": {
        +      "description": "Instante real da extração no upstream (ISO-8601, horário de Brasília)",
        +      "type": "string"
        +    },
        +    "source": {
        +      "description": "Fonte oficial do dado (API do IBGE consultada)",
        +      "type": "string"
        +    },
        +    "source_url": {
        +      "description": "URL canônica que reproduz a consulta",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "source",
        +    "source_url",
        +    "data_vintage",
        +    "retrieved_at",
        +    "citation",
        +    "license"
        +  ],
        +  "type": "object"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "tabelas",
        -  "total"
        -]New value: +[
        +  "tabelas",
        +  "total",
        +  "provenance",
        +  "attribution"
        +]
    • Changedibge_vizinhos6 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedOutput schema / properties / attribution
        Added value: +{
        +  "description": "URLs canônicas das fontes desta resposta (lista de atribuição)",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / provenance
        Added value: +{
        +  "additionalProperties": false,
        +  "description": "Bloco de proveniência (contrato v1.0): fonte, URL, período, extração e licença",
        +  "properties": {
        +    "citation": {
        +      "description": "Citação pronta para uso",
        +      "type": "string"
        +    },
        +    "data_vintage": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "Período de referência do dado segundo a fonte; null se a fonte não expõe"
        +    },
        +    "license": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "Regime legal do dado"
        +    },
        +    "retrieved_at": {
        +      "description": "Instante real da extração no upstream (ISO-8601, horário de Brasília)",
        +      "type": "string"
        +    },
        +    "source": {
        +      "description": "Fonte oficial do dado (API do IBGE consultada)",
        +      "type": "string"
        +    },
        +    "source_url": {
        +      "description": "URL canônica que reproduz a consulta",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "source",
        +    "source_url",
        +    "data_vintage",
        +    "retrieved_at",
        +    "citation",
        +    "license"
        +  ],
        +  "type": "object"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "municipio",
        -  "vizinhos",
        -  "total"
        -]New value: +[
        +  "municipio",
        +  "vizinhos",
        +  "total",
        +  "provenance",
        +  "attribution"
        +]
  9. 24 tool updatesv3.0.0
    • Removedbcb
    • Removeddatasaude
    • Changedibge_calendario3 fields changed
      • changedInput schema / properties / ate / description
        Previous value: -"Data final no formato MM-DD-AAAA (ex: '12-31-2024')"New value: +"Data final no formato DD/MM/AAAA (ex: '31/12/2024')"
      • changedInput schema / properties / de / description
        Previous value: -"Data inicial no formato MM-DD-AAAA (ex: '01-01-2024')"New value: +"Data inicial no formato DD/MM/AAAA (ex: '01/01/2024')"
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "eventos": {
        +      "description": "Lista de eventos do calendário (divulgações/coletas)",
        +      "items": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "dataDivulgacao": {
        +            "description": "Data/hora de divulgação no formato 'DD/MM/AAAA HH:MM:SS'",
        +            "type": "string"
        +          },
        +          "id": {
        +            "description": "Identificador do evento no calendário",
        +            "type": "number"
        +          },
        +          "link": {
        +            "description": "Link para mais informações, quando disponível",
        +            "type": "string"
        +          },
        +          "produto": {
        +            "description": "Nome do produto/pesquisa associado",
        +            "type": "string"
        +          },
        +          "tipo": {
        +            "description": "Descrição do tipo do evento",
        +            "type": "string"
        +          },
        +          "tipoId": {
        +            "description": "ID do tipo (1 = divulgação, 2 = coleta)",
        +            "type": "number"
        +          },
        +          "titulo": {
        +            "description": "Título do evento",
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "id",
        +          "titulo",
        +          "produto",
        +          "dataDivulgacao",
        +          "tipoId",
        +          "tipo"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "pagina": {
        +      "description": "Página atual retornada",
        +      "type": "number"
        +    },
        +    "produto": {
        +      "description": "Filtro de produto aplicado, quando informado",
        +      "type": "string"
        +    },
        +    "total": {
        +      "description": "Total de eventos disponíveis para os critérios",
        +      "type": "number"
        +    },
        +    "totalPaginas": {
        +      "description": "Total de páginas disponíveis",
        +      "type": "number"
        +    }
        +  },
        +  "required": [
        +    "eventos",
        +    "total"
        +  ],
        +  "type": "object"
        +}
    • Changedibge_censo3 fields changed
      • addedInput schema / properties / campos
        Added value: +{
        +  "description": "Selecionar apenas algumas colunas por rótulo, separadas por vírgula (ex: 'Valor,Ano'). Reduz o volume da resposta.",
        +  "type": "string"
        +}
      • changedInput schema / properties / nivel_territorial / description
        Previous value: -"Nível territorial: 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"
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "ano": {
        +      "description": "Ano(s) de referência",
        +      "type": "string"
        +    },
        +    "colunas": {
        +      "description": "Rótulos das colunas, na ordem",
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "descricao": {
        +      "description": "Descrição da tabela",
        +      "type": "string"
        +    },
        +    "registros": {
        +      "description": "Registros: cada um mapeia rótulo da coluna -> valor",
        +      "items": {
        +        "additionalProperties": {
        +          "type": "string"
        +        },
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "tabela": {
        +      "description": "Tabela SIDRA de origem",
        +      "type": "string"
        +    },
        +    "tema": {
        +      "description": "Tema do censo consultado",
        +      "type": "string"
        +    },
        +    "totalRegistros": {
        +      "description": "Total de registros de dados",
        +      "type": "number"
        +    }
        +  },
        +  "required": [
        +    "totalRegistros",
        +    "colunas",
        +    "registros"
        +  ],
        +  "type": "object"
        +}
    • Changedibge_cidades1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "indicadores": {
        +      "description": "Indicadores retornados (vazio para respostas de catálogo)",
        +      "items": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "ano": {
        +            "type": "string"
        +          },
        +          "nome": {
        +            "type": "string"
        +          },
        +          "valor": {
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "nome",
        +          "valor"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "municipio": {
        +      "description": "Código IBGE do município",
        +      "type": "string"
        +    },
        +    "nome": {
        +      "description": "Nome do município/indicador",
        +      "type": "string"
        +    },
        +    "tipo": {
        +      "description": "Tipo de consulta (panorama, indicador, pesquisas, historico)",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "tipo",
        +    "indicadores"
        +  ],
        +  "type": "object"
        +}
    • Changedibge_cnae1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "busca": {
        +      "additionalProperties": false,
        +      "description": "Presente no modo de busca por termo",
        +      "properties": {
        +        "nivel": {
        +          "description": "Nível hierárquico pesquisado (ex: subclasses, classes)",
        +          "type": "string"
        +        },
        +        "resultados": {
        +          "description": "Atividades encontradas para o termo",
        +          "items": {
        +            "additionalProperties": false,
        +            "properties": {
        +              "descricao": {
        +                "description": "Descrição da atividade",
        +                "type": "string"
        +              },
        +              "id": {
        +                "description": "Código CNAE da atividade",
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "id",
        +              "descricao"
        +            ],
        +            "type": "object"
        +          },
        +          "type": "array"
        +        },
        +        "termo": {
        +          "description": "Termo pesquisado",
        +          "type": "string"
        +        },
        +        "total": {
        +          "description": "Quantidade de resultados retornados",
        +          "type": "number"
        +        }
        +      },
        +      "required": [
        +        "termo",
        +        "nivel",
        +        "total",
        +        "resultados"
        +      ],
        +      "type": "object"
        +    },
        +    "codigo": {
        +      "additionalProperties": false,
        +      "description": "Presente no modo de consulta por código",
        +      "properties": {
        +        "descricao": {
        +          "description": "Descrição do código",
        +          "type": "string"
        +        },
        +        "hierarquia": {
        +          "description": "Cadeia hierárquica do código (do mais geral ao mais específico)",
        +          "items": {
        +            "additionalProperties": false,
        +            "properties": {
        +              "descricao": {
        +                "description": "Descrição do nível",
        +                "type": "string"
        +              },
        +              "id": {
        +                "description": "Código do nível",
        +                "type": "string"
        +              },
        +              "nivel": {
        +                "description": "Nível hierárquico (Seção, Divisão, Grupo, Classe, Subclasse)",
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "nivel",
        +              "id",
        +              "descricao"
        +            ],
        +            "type": "object"
        +          },
        +          "type": "array"
        +        },
        +        "id": {
        +          "description": "Código CNAE consultado",
        +          "type": "string"
        +        },
        +        "nivel": {
        +          "description": "Nível do código (secao, divisao, grupo, classe ou subclasse)",
        +          "type": "string"
        +        },
        +        "observacoes": {
        +          "description": "Observações/notas explicativas do código",
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        }
        +      },
        +      "required": [
        +        "id",
        +        "descricao",
        +        "nivel"
        +      ],
        +      "type": "object"
        +    },
        +    "lista": {
        +      "additionalProperties": false,
        +      "description": "Presente no modo de listagem por nível",
        +      "properties": {
        +        "exibidos": {
        +          "description": "Quantidade de registros exibidos (limitada por 'limite')",
        +          "type": "number"
        +        },
        +        "nivel": {
        +          "description": "Nível hierárquico listado",
        +          "type": "string"
        +        },
        +        "registros": {
        +          "description": "Registros do nível listado",
        +          "items": {
        +            "additionalProperties": false,
        +            "properties": {
        +              "descricao": {
        +                "description": "Descrição do registro",
        +                "type": "string"
        +              },
        +              "id": {
        +                "description": "Código CNAE do registro",
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "id",
        +              "descricao"
        +            ],
        +            "type": "object"
        +          },
        +          "type": "array"
        +        },
        +        "total": {
        +          "description": "Total de registros existentes no nível",
        +          "type": "number"
        +        }
        +      },
        +      "required": [
        +        "nivel",
        +        "total",
        +        "exibidos",
        +        "registros"
        +      ],
        +      "type": "object"
        +    },
        +    "modo": {
        +      "description": "Modo de resposta que gerou os dados",
        +      "enum": [
        +        "busca",
        +        "codigo",
        +        "lista",
        +        "estrutura"
        +      ],
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "modo"
        +  ],
        +  "type": "object"
        +}
    • Changedibge_comparar1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "estatisticas": {
        +      "additionalProperties": false,
        +      "description": "Estatísticas agregadas (quando há ao menos 2 valores positivos)",
        +      "properties": {
        +        "maior": {
        +          "type": "number"
        +        },
        +        "media": {
        +          "type": "number"
        +        },
        +        "menor": {
        +          "type": "number"
        +        },
        +        "variacaoPct": {
        +          "type": "number"
        +        }
        +      },
        +      "required": [
        +        "maior",
        +        "menor",
        +        "media",
        +        "variacaoPct"
        +      ],
        +      "type": "object"
        +    },
        +    "formato": {
        +      "description": "Formato solicitado",
        +      "type": "string"
        +    },
        +    "indicador": {
        +      "description": "Indicador comparado",
        +      "type": "string"
        +    },
        +    "localidades": {
        +      "description": "Localidades comparadas, com o valor do indicador",
        +      "items": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "codigo": {
        +            "type": "string"
        +          },
        +          "nome": {
        +            "type": "string"
        +          },
        +          "valor": {
        +            "type": "number"
        +          },
        +          "valorTexto": {
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "codigo",
        +          "nome",
        +          "valor",
        +          "valorTexto"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "nome": {
        +      "description": "Nome do indicador",
        +      "type": "string"
        +    },
        +    "tabela": {
        +      "description": "Tabela SIDRA de origem",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "localidades"
        +  ],
        +  "type": "object"
        +}
    • Addedibge_datasaude
    • Changedibge_estados1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "estados": {
        +      "description": "Lista de estados",
        +      "items": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "id": {
        +            "description": "Código IBGE do estado",
        +            "type": "number"
        +          },
        +          "nome": {
        +            "description": "Nome do estado",
        +            "type": "string"
        +          },
        +          "regiao": {
        +            "description": "Nome da região",
        +            "type": "string"
        +          },
        +          "sigla": {
        +            "description": "Sigla da UF",
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "id",
        +          "sigla",
        +          "nome",
        +          "regiao"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "total": {
        +      "description": "Total de estados retornados",
        +      "type": "number"
        +    }
        +  },
        +  "required": [
        +    "estados",
        +    "total"
        +  ],
        +  "type": "object"
        +}
    • Changedibge_geocodigo2 fields changed
      • changedInput schema / properties / uf / description
        Previous value: -"Sigla da UF para restringir a busca por nome de município"New value: +"Estado por sigla (SP), nome (São Paulo) ou código IBGE (35) para restringir a busca por nome de município"
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "codigo": {
        +      "description": "Código IBGE da localidade resolvida (ausente em resultados do tipo lista)",
        +      "type": "number"
        +    },
        +    "codigoSidra": {
        +      "description": "Código SIDRA de 6 dígitos do município (apenas tipo municipio)",
        +      "type": "string"
        +    },
        +    "estados": {
        +      "description": "Estados pertencentes à região (apenas tipo regiao)",
        +      "items": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "codigo": {
        +            "description": "Código IBGE da UF",
        +            "type": "number"
        +          },
        +          "nome": {
        +            "description": "Nome da UF",
        +            "type": "string"
        +          },
        +          "sigla": {
        +            "description": "Sigla da UF",
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "codigo",
        +          "sigla",
        +          "nome"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "hierarquia": {
        +      "description": "Hierarquia geográfica completa, da região ao município/distrito (tipo municipio/distrito)",
        +      "items": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "codigo": {
        +            "description": "Código IBGE do nível",
        +            "type": "number"
        +          },
        +          "nivel": {
        +            "description": "Nome do nível territorial (Região, UF, Município, etc.)",
        +            "type": "string"
        +          },
        +          "nome": {
        +            "description": "Nome da localidade neste nível",
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "nivel",
        +          "codigo",
        +          "nome"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "matches": {
        +      "description": "Municípios encontrados na busca por nome (apenas tipo lista)",
        +      "items": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "codigo": {
        +            "description": "Código IBGE (7 dígitos) do município",
        +            "type": "number"
        +          },
        +          "nome": {
        +            "description": "Nome do município",
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "codigo",
        +          "nome"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "nome": {
        +      "description": "Nome da localidade resolvida",
        +      "type": "string"
        +    },
        +    "regiao": {
        +      "description": "Nome da região à qual a UF pertence (apenas tipo uf)",
        +      "type": "string"
        +    },
        +    "regiaoCodigo": {
        +      "description": "Código IBGE da região à qual a UF pertence (apenas tipo uf)",
        +      "type": "number"
        +    },
        +    "sigla": {
        +      "description": "Sigla da região ou UF, quando aplicável",
        +      "type": "string"
        +    },
        +    "tipo": {
        +      "description": "Tipo do resultado: localidade decodificada (regiao/uf/municipio/distrito) ou lista de municípios encontrados (lista)",
        +      "enum": [
        +        "regiao",
        +        "uf",
        +        "municipio",
        +        "distrito",
        +        "lista"
        +      ],
        +      "type": "string"
        +    },
        +    "total": {
        +      "description": "Quantidade de municípios encontrados na busca por nome (apenas tipo lista)",
        +      "type": "number"
        +    }
        +  },
        +  "required": [
        +    "tipo"
        +  ],
        +  "type": "object"
        +}
    • Changedibge_indicadores3 fields changed
      • addedInput schema / properties / campos
        Added value: +{
        +  "description": "Selecionar apenas algumas colunas por rótulo, separadas por vírgula (ex: 'Valor,Ano'). Reduz o volume da resposta.",
        +  "type": "string"
        +}
      • changedInput schema / properties / nivel_territorial / description
        Previous value: -"Nível territorial: 1=Brasil, 2=Região, 3=UF"New value: +"Nível territorial (código N): 1=Brasil, 2=Região, 3=UF"
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "colunas": {
        +      "description": "Rótulos das colunas, na ordem",
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "indicador": {
        +      "description": "Chave do indicador consultado",
        +      "type": "string"
        +    },
        +    "nome": {
        +      "description": "Nome do indicador",
        +      "type": "string"
        +    },
        +    "registros": {
        +      "description": "Registros: cada um mapeia rótulo da coluna -> valor",
        +      "items": {
        +        "additionalProperties": {
        +          "type": "string"
        +        },
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "tabela": {
        +      "description": "Tabela SIDRA de origem",
        +      "type": "string"
        +    },
        +    "totalRegistros": {
        +      "description": "Total de registros de dados",
        +      "type": "number"
        +    }
        +  },
        +  "required": [
        +    "totalRegistros",
        +    "colunas",
        +    "registros"
        +  ],
        +  "type": "object"
        +}
    • Changedibge_localidade1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "estado": {
        +      "additionalProperties": false,
        +      "description": "Estado da localidade (município ou distrito)",
        +      "properties": {
        +        "id": {
        +          "description": "Código IBGE do estado",
        +          "type": "number"
        +        },
        +        "nome": {
        +          "description": "Nome do estado",
        +          "type": "string"
        +        },
        +        "sigla": {
        +          "description": "Sigla da UF",
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "id",
        +        "sigla",
        +        "nome"
        +      ],
        +      "type": "object"
        +    },
        +    "id": {
        +      "description": "Código IBGE da localidade",
        +      "type": "number"
        +    },
        +    "mesorregiao": {
        +      "additionalProperties": false,
        +      "description": "Mesorregião do município",
        +      "properties": {
        +        "id": {
        +          "description": "Código IBGE da mesorregião",
        +          "type": "number"
        +        },
        +        "nome": {
        +          "description": "Nome da mesorregião",
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "id",
        +        "nome"
        +      ],
        +      "type": "object"
        +    },
        +    "microrregiao": {
        +      "additionalProperties": false,
        +      "description": "Microrregião do município",
        +      "properties": {
        +        "id": {
        +          "description": "Código IBGE da microrregião",
        +          "type": "number"
        +        },
        +        "nome": {
        +          "description": "Nome da microrregião",
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "id",
        +        "nome"
        +      ],
        +      "type": "object"
        +    },
        +    "municipio": {
        +      "additionalProperties": false,
        +      "description": "Município ao qual o distrito pertence (apenas para distritos)",
        +      "properties": {
        +        "id": {
        +          "description": "Código IBGE do município",
        +          "type": "number"
        +        },
        +        "nome": {
        +          "description": "Nome do município",
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "id",
        +        "nome"
        +      ],
        +      "type": "object"
        +    },
        +    "nome": {
        +      "description": "Nome da localidade",
        +      "type": "string"
        +    },
        +    "regiao": {
        +      "additionalProperties": false,
        +      "description": "Região do estado (apenas para estados)",
        +      "properties": {
        +        "id": {
        +          "description": "Código IBGE da região",
        +          "type": "number"
        +        },
        +        "nome": {
        +          "description": "Nome da região",
        +          "type": "string"
        +        },
        +        "sigla": {
        +          "description": "Sigla da região",
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "id",
        +        "sigla",
        +        "nome"
        +      ],
        +      "type": "object"
        +    },
        +    "regiaoImediata": {
        +      "additionalProperties": false,
        +      "description": "Região imediata do município",
        +      "properties": {
        +        "id": {
        +          "description": "Código IBGE da região imediata",
        +          "type": "number"
        +        },
        +        "nome": {
        +          "description": "Nome da região imediata",
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "id",
        +        "nome"
        +      ],
        +      "type": "object"
        +    },
        +    "regiaoIntermediaria": {
        +      "additionalProperties": false,
        +      "description": "Região intermediária do município",
        +      "properties": {
        +        "id": {
        +          "description": "Código IBGE da região intermediária",
        +          "type": "number"
        +        },
        +        "nome": {
        +          "description": "Nome da região intermediária",
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "id",
        +        "nome"
        +      ],
        +      "type": "object"
        +    },
        +    "sigla": {
        +      "description": "Sigla da UF (apenas para estados)",
        +      "type": "string"
        +    },
        +    "tipo": {
        +      "description": "Tipo da localidade retornada",
        +      "enum": [
        +        "estado",
        +        "municipio",
        +        "distrito"
        +      ],
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "tipo",
        +    "id",
        +    "nome"
        +  ],
        +  "type": "object"
        +}
    • Changedibge_malhas1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "formato": {
        +      "description": "Formato de saída solicitado (geojson, topojson ou svg)",
        +      "type": "string"
        +    },
        +    "intrarregiao": {
        +      "description": "Código de região usado para filtrar (apenas quando localidade=BR)",
        +      "type": "string"
        +    },
        +    "localidade": {
        +      "description": "Código IBGE ou sigla da localidade consultada",
        +      "type": "string"
        +    },
        +    "qualidade": {
        +      "description": "Qualidade do traçado solicitada",
        +      "type": "string"
        +    },
        +    "resolucao": {
        +      "description": "Resolução/divisões internas solicitada",
        +      "type": "string"
        +    },
        +    "tipo": {
        +      "description": "Tipo de divisão territorial, quando informado",
        +      "type": "string"
        +    },
        +    "url": {
        +      "description": "URL para download da malha completa",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "localidade",
        +    "formato"
        +  ],
        +  "type": "object"
        +}
    • Changedibge_malhas_tema1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "codigo": {
        +      "description": "Código específico do tema, quando informado",
        +      "type": "string"
        +    },
        +    "formato": {
        +      "description": "Formato de saída (geojson, topojson, svg)",
        +      "type": "string"
        +    },
        +    "resolucao": {
        +      "description": "Resolução da malha (0 = contorno, 5 = com municípios)",
        +      "type": "string"
        +    },
        +    "tema": {
        +      "description": "Tema da malha solicitada (ou 'listar')",
        +      "type": "string"
        +    },
        +    "temas": {
        +      "description": "Lista de temas disponíveis (somente no modo 'listar')",
        +      "items": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "descricao": {
        +            "description": "Descrição do tema",
        +            "type": "string"
        +          },
        +          "nome": {
        +            "description": "Nome do tema",
        +            "type": "string"
        +          },
        +          "tema": {
        +            "description": "Identificador do tema",
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "tema",
        +          "nome",
        +          "descricao"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    }
        +  },
        +  "required": [
        +    "tema"
        +  ],
        +  "type": "object"
        +}
    • Changedibge_municipios4 fields changed
      • changedInput schema / properties / uf / description
        Previous value: -"Sigla do estado (ex: SP, RJ, MG). Se não informado, retorna todos os municípios do Brasil."New value: +"Estado por sigla (SP), nome (São Paulo) ou código IBGE (35). Se não informado, retorna todos os municípios do Brasil."
      • removedInput schema / properties / uf / maxLength
        Removed value: -2
      • removedInput schema / properties / uf / minLength
        Removed value: -2
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "busca": {
        +      "description": "Termo de busca aplicado ao nome do município",
        +      "type": "string"
        +    },
        +    "municipios": {
        +      "description": "Lista de municípios retornados (após filtro e limite)",
        +      "items": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "id": {
        +            "description": "Código IBGE do município",
        +            "type": "number"
        +          },
        +          "nome": {
        +            "description": "Nome do município",
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "id",
        +          "nome"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "total": {
        +      "description": "Total de municípios encontrados antes do limite",
        +      "type": "number"
        +    },
        +    "uf": {
        +      "description": "UF informada no filtro (como recebida na entrada)",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "municipios",
        +    "total"
        +  ],
        +  "type": "object"
        +}
    • Changedibge_nomes1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "frequencia": {
        +      "description": "Resultados de frequência (presente quando tipo='frequencia')",
        +      "items": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "localidade": {
        +            "description": "Código IBGE da localidade (ou BR para Brasil)",
        +            "type": "string"
        +          },
        +          "nome": {
        +            "description": "Nome consultado",
        +            "type": "string"
        +          },
        +          "periodos": {
        +            "description": "Frequência do nome por período",
        +            "items": {
        +              "additionalProperties": false,
        +              "properties": {
        +                "frequencia": {
        +                  "description": "Frequência de registros do nome no período",
        +                  "type": "number"
        +                },
        +                "periodo": {
        +                  "description": "Período/década (ex: '1930[', '1990,2000[')",
        +                  "type": "string"
        +                }
        +              },
        +              "required": [
        +                "periodo",
        +                "frequencia"
        +              ],
        +              "type": "object"
        +            },
        +            "type": "array"
        +          },
        +          "sexo": {
        +            "description": "Sexo do nome: M, F ou nulo",
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "total": {
        +            "description": "Soma das frequências de todos os períodos",
        +            "type": "number"
        +          }
        +        },
        +        "required": [
        +          "nome",
        +          "localidade",
        +          "periodos",
        +          "total"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "ranking": {
        +      "additionalProperties": false,
        +      "description": "Resultado do ranking (presente quando tipo='ranking')",
        +      "properties": {
        +        "decada": {
        +          "description": "Década do ranking, quando informada",
        +          "type": "number"
        +        },
        +        "itens": {
        +          "description": "Itens do ranking, limitados pelo parâmetro 'limite'",
        +          "items": {
        +            "additionalProperties": false,
        +            "properties": {
        +              "frequencia": {
        +                "description": "Frequência de registros do nome",
        +                "type": "number"
        +              },
        +              "nome": {
        +                "description": "Nome",
        +                "type": "string"
        +              },
        +              "ranking": {
        +                "description": "Posição no ranking",
        +                "type": "number"
        +              }
        +            },
        +            "required": [
        +              "ranking",
        +              "nome",
        +              "frequencia"
        +            ],
        +            "type": "object"
        +          },
        +          "type": "array"
        +        },
        +        "localidade": {
        +          "description": "Código IBGE da localidade (ou BR para Brasil)",
        +          "type": "string"
        +        },
        +        "sexo": {
        +          "description": "Sexo do ranking: M, F ou nulo",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        }
        +      },
        +      "required": [
        +        "localidade",
        +        "itens"
        +      ],
        +      "type": "object"
        +    },
        +    "tipo": {
        +      "description": "Tipo da consulta realizada",
        +      "enum": [
        +        "frequencia",
        +        "ranking"
        +      ],
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "tipo"
        +  ],
        +  "type": "object"
        +}
    • Changedibge_noticias3 fields changed
      • changedInput schema / properties / ate / description
        Previous value: -"Data final no formato MM-DD-AAAA (ex: 12-31-2024)"New value: +"Data final no formato DD/MM/AAAA (ex: 31/12/2024)"
      • changedInput schema / properties / de / description
        Previous value: -"Data inicial no formato MM-DD-AAAA (ex: 01-01-2024)"New value: +"Data inicial no formato DD/MM/AAAA (ex: 01/01/2024)"
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "busca": {
        +      "description": "Termo de busca aplicado, se houver",
        +      "type": "string"
        +    },
        +    "noticias": {
        +      "description": "Lista de notícias retornadas",
        +      "items": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "dataPublicacao": {
        +            "description": "Data de publicação (formato original da API)",
        +            "type": "string"
        +          },
        +          "destaque": {
        +            "description": "Indica se a publicação está em destaque",
        +            "type": "boolean"
        +          },
        +          "editorias": {
        +            "description": "Editoria(s) associada(s) à publicação",
        +            "type": "string"
        +          },
        +          "introducao": {
        +            "description": "Introdução/resumo da publicação (texto limpo)",
        +            "type": "string"
        +          },
        +          "link": {
        +            "description": "URL para a publicação completa",
        +            "type": "string"
        +          },
        +          "produtos": {
        +            "description": "Produtos do IBGE relacionados à publicação",
        +            "type": "string"
        +          },
        +          "tipo": {
        +            "description": "Tipo de publicação (ex: 'Release' ou 'Notícia')",
        +            "type": "string"
        +          },
        +          "titulo": {
        +            "description": "Título da notícia ou release",
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "titulo",
        +          "tipo",
        +          "dataPublicacao",
        +          "link"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "pagina": {
        +      "description": "Página atual",
        +      "type": "number"
        +    },
        +    "total": {
        +      "description": "Total de notícias encontradas na consulta",
        +      "type": "number"
        +    },
        +    "totalPaginas": {
        +      "description": "Número total de páginas",
        +      "type": "number"
        +    }
        +  },
        +  "required": [
        +    "noticias",
        +    "total",
        +    "pagina",
        +    "totalPaginas"
        +  ],
        +  "type": "object"
        +}
    • Changedibge_paises1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "busca": {
        +      "description": "Termo de busca aplicado, se houver",
        +      "type": "string"
        +    },
        +    "indicadores": {
        +      "description": "Indicadores disponíveis para consulta de países (modo indicadores)",
        +      "items": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "alias": {
        +            "description": "Apelido amigável do indicador",
        +            "type": "string"
        +          },
        +          "id": {
        +            "description": "ID do indicador na API do IBGE",
        +            "type": "number"
        +          },
        +          "nome": {
        +            "description": "Nome do indicador",
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "id",
        +          "nome",
        +          "alias"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "pais": {
        +      "additionalProperties": false,
        +      "description": "Detalhes de um país específico (modo detalhes)",
        +      "properties": {
        +        "areaTotalKm2": {
        +          "description": "Área territorial total em km²",
        +          "type": "number"
        +        },
        +        "historico": {
        +          "description": "Texto histórico sobre o país",
        +          "type": "string"
        +        },
        +        "indicadores": {
        +          "description": "Indicadores principais com o valor mais recente disponível",
        +          "items": {
        +            "additionalProperties": false,
        +            "properties": {
        +              "ano": {
        +                "description": "Ano de referência do valor",
        +                "type": "string"
        +              },
        +              "indicador": {
        +                "description": "Nome do indicador",
        +                "type": "string"
        +              },
        +              "valor": {
        +                "description": "Valor mais recente do indicador",
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "indicador",
        +              "valor",
        +              "ano"
        +            ],
        +            "type": "object"
        +          },
        +          "type": "array"
        +        },
        +        "isoAlpha2": {
        +          "description": "Código ISO-ALPHA-2",
        +          "type": "string"
        +        },
        +        "isoAlpha3": {
        +          "description": "Código ISO-ALPHA-3",
        +          "type": "string"
        +        },
        +        "linguas": {
        +          "description": "Línguas faladas no país",
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        },
        +        "m49": {
        +          "description": "Código M49 do país",
        +          "type": "number"
        +        },
        +        "moedas": {
        +          "description": "Unidades monetárias do país",
        +          "items": {
        +            "additionalProperties": false,
        +            "properties": {
        +              "id": {
        +                "description": "Código da unidade monetária",
        +                "type": "string"
        +              },
        +              "nome": {
        +                "description": "Nome da unidade monetária",
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "id",
        +              "nome"
        +            ],
        +            "type": "object"
        +          },
        +          "type": "array"
        +        },
        +        "nome": {
        +          "description": "Nome do país",
        +          "type": "string"
        +        },
        +        "regiao": {
        +          "description": "Nome da região/continente",
        +          "type": "string"
        +        },
        +        "regiaoIntermediaria": {
        +          "description": "Nome da região intermediária",
        +          "type": "string"
        +        },
        +        "subRegiao": {
        +          "description": "Nome da sub-região",
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "nome",
        +        "m49",
        +        "isoAlpha2",
        +        "isoAlpha3"
        +      ],
        +      "type": "object"
        +    },
        +    "paises": {
        +      "description": "Lista de países (modos listar/buscar). Limitada aos 50 primeiros na exibição",
        +      "items": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "codigo": {
        +            "description": "Código ISO-ALPHA-2 do país (ou '-' se ausente)",
        +            "type": "string"
        +          },
        +          "nome": {
        +            "description": "Nome do país",
        +            "type": "string"
        +          },
        +          "regiao": {
        +            "description": "Nome da região/continente (ou '-' se ausente)",
        +            "type": "string"
        +          },
        +          "subRegiao": {
        +            "description": "Nome da sub-região (ou '-' se ausente)",
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "codigo",
        +          "nome",
        +          "regiao",
        +          "subRegiao"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "regiao": {
        +      "description": "Filtro de região/continente aplicado, se houver",
        +      "type": "string"
        +    },
        +    "tipo": {
        +      "description": "Modo de consulta que originou este resultado",
        +      "enum": [
        +        "listar",
        +        "buscar",
        +        "detalhes",
        +        "indicadores"
        +      ],
        +      "type": "string"
        +    },
        +    "total": {
        +      "description": "Total de países encontrados (modos listar/buscar)",
        +      "type": "number"
        +    }
        +  },
        +  "required": [
        +    "tipo"
        +  ],
        +  "type": "object"
        +}
    • Changedibge_pesquisas1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "busca": {
        +      "description": "Termo de busca aplicado, se houver (modo lista)",
        +      "type": "string"
        +    },
        +    "modo": {
        +      "description": "Modo de consulta que originou este resultado: lista de pesquisas ou detalhes de uma",
        +      "enum": [
        +        "lista",
        +        "detalhes"
        +      ],
        +      "type": "string"
        +    },
        +    "pesquisa": {
        +      "additionalProperties": false,
        +      "description": "Detalhes de uma pesquisa específica (modo detalhes)",
        +      "properties": {
        +        "id": {
        +          "description": "Código da pesquisa",
        +          "type": "string"
        +        },
        +        "nome": {
        +          "description": "Nome da pesquisa",
        +          "type": "string"
        +        },
        +        "tabelas": {
        +          "description": "Tabelas disponíveis na pesquisa",
        +          "items": {
        +            "additionalProperties": false,
        +            "properties": {
        +              "id": {
        +                "description": "Código da tabela (agregado)",
        +                "type": "string"
        +              },
        +              "nome": {
        +                "description": "Nome da tabela",
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "id",
        +              "nome"
        +            ],
        +            "type": "object"
        +          },
        +          "type": "array"
        +        },
        +        "totalTabelas": {
        +          "description": "Quantidade de tabelas da pesquisa",
        +          "type": "number"
        +        }
        +      },
        +      "required": [
        +        "id",
        +        "nome",
        +        "totalTabelas",
        +        "tabelas"
        +      ],
        +      "type": "object"
        +    },
        +    "pesquisas": {
        +      "description": "Lista de pesquisas (modo lista)",
        +      "items": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "id": {
        +            "description": "Código da pesquisa",
        +            "type": "string"
        +          },
        +          "nome": {
        +            "description": "Nome da pesquisa",
        +            "type": "string"
        +          },
        +          "totalTabelas": {
        +            "description": "Quantidade de tabelas (agregados) da pesquisa",
        +            "type": "number"
        +          }
        +        },
        +        "required": [
        +          "id",
        +          "nome",
        +          "totalTabelas"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "total": {
        +      "description": "Total de pesquisas encontradas (modo lista)",
        +      "type": "number"
        +    }
        +  },
        +  "required": [
        +    "modo"
        +  ],
        +  "type": "object"
        +}
    • Changedibge_populacao1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "horario": {
        +      "description": "Data/hora da consulta",
        +      "type": "string"
        +    },
        +    "localidade": {
        +      "description": "Localidade da projeção",
        +      "type": "string"
        +    },
        +    "periodoMedio": {
        +      "additionalProperties": false,
        +      "description": "Indicadores do período médio",
        +      "properties": {
        +        "incrementoPopulacional": {
        +          "description": "Incremento populacional por dia",
        +          "type": "number"
        +        },
        +        "nascimento": {
        +          "description": "Segundos entre nascimentos",
        +          "type": "number"
        +        },
        +        "obito": {
        +          "description": "Segundos entre óbitos",
        +          "type": "number"
        +        }
        +      },
        +      "required": [
        +        "incrementoPopulacional",
        +        "nascimento",
        +        "obito"
        +      ],
        +      "type": "object"
        +    },
        +    "populacao": {
        +      "description": "População projetada (habitantes)",
        +      "type": "number"
        +    }
        +  },
        +  "required": [
        +    "localidade",
        +    "horario",
        +    "populacao",
        +    "periodoMedio"
        +  ],
        +  "type": "object"
        +}
    • Changedibge_sidra4 fields changed
      • addedInput schema / properties / campos
        Added value: +{
        +  "description": "Selecionar apenas algumas colunas por rótulo, separadas por vírgula (ex: 'Valor,Ano'). Reduz o volume da resposta. Omitir traz todas.",
        +  "type": "string"
        +}
      • changedInput schema / properties / nivel_territorial / description
        Previous value: -"Nível territorial (código N sem o prefixo):\n1=Brasil, 2=Grande Região, 3=UF, 6=Município, 7=Região Metropolitana,\n8=Mesorregião, 9=Microrregião, 10=Distrito, 11=Subdistrito,\n13=RM e RIDE, 14=Região Integrada de Desenvolvimento, 15=Aglomeração Urbana,\n17=Região Geográfica Imediata, 18=Região Geográfica Intermediária,\n105=Macrorregião de Saúde, 106=Região de Saúde,\n114=Aglomerado Subnormal, 127=Amazônia Legal, 128=Semiárido"New value: +"Nível territorial (código N): 1=Brasil, 2=Região, 3=UF, 6=Município, 7=Região Metropolitana, 8=Mesorregião, 9=Microrregião, 10=Distrito, 11=Subdistrito, 13=RM/RIDE, 14=RIDE, 15=Aglomeração Urbana, 17=Região Geográfica Imediata, 18=Região Geográfica Intermediária, 105=Macrorregião de Saúde, 106=Região de Saúde, 114=Aglomerado Subnormal, 127=Amazônia Legal, 128=Semiárido"
      • addedInput schema / properties / pagina
        Added value: +{
        +  "default": 1,
        +  "description": "Página de resultados (100 registros por página)",
        +  "minimum": 1,
        +  "type": "integer"
        +}
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "colunas": {
        +      "description": "Rótulos das colunas, na ordem",
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "nome": {
        +      "description": "Nome da tabela (quando conhecido)",
        +      "type": "string"
        +    },
        +    "paginacao": {
        +      "additionalProperties": false,
        +      "description": "Metadados de paginação para continuação",
        +      "properties": {
        +        "pagina": {
        +          "type": "number"
        +        },
        +        "porPagina": {
        +          "type": "number"
        +        },
        +        "temMais": {
        +          "type": "boolean"
        +        },
        +        "totalPaginas": {
        +          "type": "number"
        +        }
        +      },
        +      "required": [
        +        "pagina",
        +        "porPagina",
        +        "totalPaginas",
        +        "temMais"
        +      ],
        +      "type": "object"
        +    },
        +    "registros": {
        +      "description": "Registros da página atual: cada um mapeia rótulo da coluna -> valor",
        +      "items": {
        +        "additionalProperties": {
        +          "type": "string"
        +        },
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "tabela": {
        +      "description": "Código da tabela SIDRA consultada",
        +      "type": "string"
        +    },
        +    "totalRegistros": {
        +      "description": "Total de registros de dados disponíveis (todas as páginas)",
        +      "type": "number"
        +    }
        +  },
        +  "required": [
        +    "tabela",
        +    "nome",
        +    "totalRegistros",
        +    "colunas",
        +    "registros",
        +    "paginacao"
        +  ],
        +  "type": "object"
        +}
    • Changedibge_sidra_metadados1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "assunto": {
        +      "description": "Assunto/tema da tabela",
        +      "type": "string"
        +    },
        +    "codigo": {
        +      "description": "Código da tabela/agregado SIDRA",
        +      "type": "string"
        +    },
        +    "niveisTerritoriais": {
        +      "description": "Níveis territoriais disponíveis para a tabela",
        +      "items": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "codigo": {
        +            "description": "Código do nível territorial (ex: N1, N3, N6)",
        +            "type": "string"
        +          },
        +          "nome": {
        +            "description": "Nome do nível territorial (ex: Brasil, UF, Município)",
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "codigo",
        +          "nome"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "nome": {
        +      "description": "Nome da tabela",
        +      "type": "string"
        +    },
        +    "periodicidade": {
        +      "additionalProperties": false,
        +      "description": "Periodicidade da pesquisa",
        +      "properties": {
        +        "fim": {
        +          "description": "Ano/período final da série",
        +          "type": "number"
        +        },
        +        "frequencia": {
        +          "description": "Frequência de coleta (ex: anual, mensal)",
        +          "type": "string"
        +        },
        +        "inicio": {
        +          "description": "Ano/período inicial da série",
        +          "type": "number"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "periodos": {
        +      "description": "Períodos disponíveis para a tabela (quando incluir_periodos)",
        +      "items": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "id": {
        +            "description": "Código do período",
        +            "type": "string"
        +          },
        +          "literais": {
        +            "description": "Descrições textuais do período",
        +            "items": {
        +              "type": "string"
        +            },
        +            "type": "array"
        +          }
        +        },
        +        "required": [
        +          "id",
        +          "literais"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "pesquisa": {
        +      "description": "Nome da pesquisa de origem",
        +      "type": "string"
        +    },
        +    "url": {
        +      "description": "URL da tabela no SIDRA",
        +      "type": "string"
        +    },
        +    "variaveis": {
        +      "description": "Variáveis da tabela, com unidades e classificações/categorias",
        +      "items": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "classificacoes": {
        +            "description": "Classificações aplicáveis à variável",
        +            "items": {
        +              "additionalProperties": false,
        +              "properties": {
        +                "categorias": {
        +                  "description": "Categorias da classificação",
        +                  "items": {
        +                    "additionalProperties": false,
        +                    "properties": {
        +                      "id": {
        +                        "description": "ID da categoria",
        +                        "type": "number"
        +                      },
        +                      "nivel": {
        +                        "description": "Nível hierárquico da categoria",
        +                        "type": "number"
        +                      },
        +                      "nome": {
        +                        "description": "Nome da categoria",
        +                        "type": "string"
        +                      },
        +                      "unidade": {
        +                        "description": "Unidade da categoria",
        +                        "type": "string"
        +                      }
        +                    },
        +                    "required": [
        +                      "id",
        +                      "nome"
        +                    ],
        +                    "type": "object"
        +                  },
        +                  "type": "array"
        +                },
        +                "id": {
        +                  "description": "ID da classificação",
        +                  "type": "number"
        +                },
        +                "nome": {
        +                  "description": "Nome da classificação",
        +                  "type": "string"
        +                }
        +              },
        +              "required": [
        +                "id",
        +                "nome",
        +                "categorias"
        +              ],
        +              "type": "object"
        +            },
        +            "type": "array"
        +          },
        +          "id": {
        +            "description": "ID da variável",
        +            "type": "number"
        +          },
        +          "nome": {
        +            "description": "Nome da variável",
        +            "type": "string"
        +          },
        +          "unidade": {
        +            "description": "Unidade de medida da variável",
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "id",
        +          "nome"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    }
        +  },
        +  "required": [
        +    "codigo",
        +    "nome"
        +  ],
        +  "type": "object"
        +}
    • Changedibge_sidra_tabelas1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "busca": {
        +      "description": "Termo de busca aplicado, se houver",
        +      "type": "string"
        +    },
        +    "pesquisa": {
        +      "description": "Filtro de pesquisa aplicado, se houver",
        +      "type": "string"
        +    },
        +    "tabelas": {
        +      "description": "Lista de tabelas SIDRA retornadas",
        +      "items": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "codigo": {
        +            "description": "Código da tabela/agregado SIDRA",
        +            "type": "string"
        +          },
        +          "nome": {
        +            "description": "Nome da tabela/agregado",
        +            "type": "string"
        +          },
        +          "pesquisa": {
        +            "description": "Pesquisa de origem (código - nome)",
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "codigo",
        +          "nome"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "total": {
        +      "description": "Total de tabelas que correspondem aos critérios",
        +      "type": "number"
        +    }
        +  },
        +  "required": [
        +    "tabelas",
        +    "total"
        +  ],
        +  "type": "object"
        +}
    • Changedibge_vizinhos2 fields changed
      • changedInput schema / properties / uf / description
        Previous value: -"Sigla da UF (obrigatório se usar nome do município)"New value: +"Estado por sigla (SP), nome (São Paulo) ou código IBGE (35) — obrigatório se usar nome do município"
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "municipio": {
        +      "additionalProperties": false,
        +      "description": "Município de referência da consulta",
        +      "properties": {
        +        "codigo": {
        +          "description": "Código IBGE do município consultado",
        +          "type": "string"
        +        },
        +        "nome": {
        +          "description": "Nome do município consultado",
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "codigo",
        +        "nome"
        +      ],
        +      "type": "object"
        +    },
        +    "total": {
        +      "description": "Quantidade de municípios próximos encontrados",
        +      "type": "number"
        +    },
        +    "vizinhos": {
        +      "description": "Lista de municípios próximos (mesma mesorregião)",
        +      "items": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "codigo": {
        +            "description": "Código IBGE do município vizinho",
        +            "type": "string"
        +          },
        +          "nome": {
        +            "description": "Nome do município vizinho",
        +            "type": "string"
        +          },
        +          "populacao": {
        +            "description": "População do município vizinho (apenas quando incluir_dados=true)",
        +            "type": "number"
        +          },
        +          "uf": {
        +            "description": "Sigla da UF do município vizinho",
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "codigo",
        +          "nome"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    }
        +  },
        +  "required": [
        +    "municipio",
        +    "vizinhos",
        +    "total"
        +  ],
        +  "type": "object"
        +}
  10. 23 tool updatesv1.0.0
    • First observedbcb
    • First observeddatasaude
    • First observedibge_calendario
    • First observedibge_censo
    • First observedibge_cidades
    • First observedibge_cnae
    • First observedibge_comparar
    • 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_populacao
    • First observedibge_sidra
    • First observedibge_sidra_metadados
    • First observedibge_sidra_tabelas
    • First observedibge_vizinhos

TDQS

A4.4/5.0

Scored across 23 tools

Disambiguation4/5

Most tools target clearly distinct resources (localities, census, news, calendar, CNAE, countries), and descriptions include explicit 'Use a different tool when' guidance that resolves overlaps. However there is real conceptual overlap among the SIDRA wrappers (ibge_censo, ibge_indicadores, ibge_cidades, ibge_comparar, ibge_datasaude) and the low-level ibge_sidra, so an agent could still misselect on an ambiguous query.

Naming Consistency4/5

Nearly all tools use a consistent ibge_ snake_case prefix with Portuguese resource/action names (ibge_municipios, ibge_estados, ibge_comparar, ibge_geocodigo). The only deviations are 'search' and 'fetch', which are deliberately named to satisfy the OpenAI Deep Research contract, a minor and justified exception.

Tool Count4/5

23 tools is on the heavy side, but the domain is extremely broad (geography, census, time series, health, news, calendar, CNAE, countries, meshes, names) and a layered low-level-plus-wrapper design is intentional. Each tool maps to a distinct resource or workflow, so the count is justified though bordering on large.

Completeness5/5

The surface covers an impressively wide range: locality lookup, geocoding, administrative and thematic meshes, census/indicator/health wrappers, the raw SIDRA engine with table discovery and metadata, news, calendar, CNAE, names, countries, and comparison. Lifecycle operations (find table -> metadata -> query, name->code->details) are all present with no obvious dead ends.

Maintenance

ActivityActive
ResponsivenessSlow

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    D
    maintenance
    An MCP server that enables querying detailed address information from Brazilian postal codes (CEPs) via the ViaCEP API, returning data such as street names, neighborhoods, cities, states, regions, and IBGE codes.
    1
    2
    MIT
  • A
    license
    A
    quality
    D
    maintenance
    A Model Context Protocol server that connects AI assistants to Brazilian public data services, providing access to postal codes, company registrations, bank information, area codes, IBGE data, currency exchange rates, and domain registration status.
    11
    7 npm
    4
    MIT