Banco Central do Brasil (BCB) — SGS MCP
This MCP server lets AI assistants query Brazilian Central Bank economic data live: SGS time series, Focus market expectations, and PTAX exchange rates.
SGS time series: query values by code with date filters, get latest N values, metadata, popular catalog, and smart accent-insensitive search across a curated 135-series catalog plus the BCB open-data portal index
Current indicators: one-call snapshot of Selic, IPCA, USD/BRL, and IBC-Br
Analysis tools: percentage variation (level or compounded), compare 2–5 series, correlate series (Pearson/Spearman), and deflate nominal series to real values
Frequency harmonisation: resample series to monthly/quarterly/annual with explicit aggregation conventions
Focus survey: market expectations (mean, median, std dev, min/max, respondents) for IPCA, GDP, FX and more by horizon, plus Selic expectations by Copom meeting
PTAX exchange rates: official closing quotes for any BCB-published currency, single day or date range
Deep Research support:
searchandfetchtools returning canonical public URLs for citationProvenance: every response carries source, query URL, data vintage, extraction time, and ODbL license attribution
Exposes search and fetch tools for OpenAI Deep Research workflows, enabling discovery of Brazilian Central Bank economic series from the curated catalog and open data index and retrieval of series as readable documents with canonical public URLs.
Banco Central do Brasil (BCB) — SGS Time Series MCP Server
MCP (Model Context Protocol) server for the Brazilian Central Bank (Banco Central do Brasil, BCB): SGS time series (SGS/BCB), the Focus market-expectations survey (served over the Olinda OData API) and PTAX exchange rates.
Query economic and financial indicators such as Selic (interest rate), IPCA (inflation), exchange rates, GDP, and more, directly from AI assistants like Claude.
If you find this project useful, please consider giving it a star on GitHub. It helps others discover the project!
Capabilities: 17 tools (skills) · 3 resources · 3 prompts — everything an MCP client needs to query the Brazilian Central Bank: SGS/BCB time series, the Focus market-expectations survey and PTAX exchange rates.
See it in action
Ask your assistant, in plain Portuguese:
"Qual a taxa Selic atual?" →
bcb_indicadores_atuais"Mostre o IPCA mês a mês em 2024." →
bcb_serie_valores"Qual foi a variação do dólar nos últimos 12 meses?" →
bcb_variacao"O que o mercado espera do IPCA em 2027?" →
bcb_focus_expectativas"Qual a Selic esperada na próxima reunião do Copom?" →
bcb_focus_selic"Qual foi a PTAX de fechamento do euro na sexta?" →
bcb_cambio_cotacao
The answers come live from the Brazilian Central Bank's SGS API — exact figures with provenance, not numbers guessed from training data.
Related MCP server: Financial Modeling Prep MCP Server
Features
Historical data - Query time series values by code with date filters
Latest values - Get the most recent N values of any series
Metadata - Detailed information about series (frequency, source, etc.)
Popular series catalog - 135 economic indicators verified against the source, organized by category
Smart search - Find series by keyword (accent-insensitive)
Current indicators - Latest values for key economic indicators
Long periods, handled - The BCB API caps daily series at a 10-year window (HTTP 406) and refuses open windows; requests are sliced, fetched and merged automatically, so a 15-year daily query just works
Frequency harmonisation - Resample a series to monthly, quarterly or annual with an explicit convention, including geometric compounding for series that already are percentage changes (monthly IPCA into annual IPCA)
Variation calculation - Percentage change between periods with statistics
Series comparison - Compare multiple series over the same period, with a warning when their periodicities differ
Focus survey - Market expectations (mean, median, std. deviation, min, max, respondents) for IPCA, GDP, FX and more, by monthly/quarterly/annual horizon or rolling 12/24-month inflation, plus Selic by Copom meeting
PTAX exchange rates - Official closing quotes for any currency the BCB publishes, single day or date range
📖 Article (in Portuguese): Séries do Banco Central: como consultar o SGS, a Focus e a PTAX sem cair nas armadilhas — the three API limits measured live, level vs. rate series, the Focus scopes, and what the ODbL requires. Also published on the site, in Portuguese and English: sidneybissoli.com.
Available Tools
Tool | Description |
| Query series values by code and date range; slices long windows automatically and can harmonise the series to a coarser frequency |
| Get the last N values of a series (any N — the upstream cap of 20 is worked around) |
| Get series metadata (name, frequency, category, last value) |
| List popular series grouped by category |
| Search series by name or description (accent-insensitive, AND between words; everyday words resolved to the BCB's wording, and the response says so) |
| Latest values: Selic, IPCA, USD/BRL, IBC-Br |
| Percentage variation of one series over a period: level change for level series, compounded accumulation for series that are already period-on-period rates (IPCA, IGP-M, INPC…); |
| Compare 2 to 5 series over the same period with ranking (same level/compounding rule per series, declared in |
| Focus survey expectations for one indicator, horizon as a parameter (monthly, quarterly, annual, rolling 12m/24m inflation); |
| Focus expectations for the Selic rate, by Copom meeting (R1/2026 form) |
| Which indicators and reference dates the Focus survey actually publishes, broken down per scope (the five horizons plus |
| PTAX quote for a currency (USD by default), single day or date range |
| Currencies with quotes published by the BCB |
| OpenAI Deep Research contract: searches the series catalog (curated + open data portal index) and returns |
| OpenAI Deep Research contract: returns one series as a readable document with its canonical public URL |
Resources
Reference catalogs the server exposes as MCP resources (read-only contextual data that clients can attach):
URI | Description |
| Catalog of 135 verified BCB economic series, organized by category (JSON) |
| List of available categories in the series catalog (JSON) |
| Codes of the most-used indicators — Selic, IPCA, USD/BRL, GDP, etc. (JSON) |
Prompts
Ready-made templates the server provides as MCP prompts:
Prompt | Description |
| Query Brazil's key economic indicators (Selic, IPCA, USD/BRL, IBC-Br) |
| Generate a complete overview of the Brazilian economy |
| Compare Brazil's main inflation indices (IPCA, IGP-M, INPC) over the last 12 months |
Installation
Via Smithery (recommended)
Visit bcb-br-mcp on Smithery and follow the installation instructions for your MCP client.
Via URL (Claude.ai, Claude Desktop, any MCP client)
Use the HTTP endpoint directly, no installation required:
https://bcb.sidneybissoli.com/mcpThe legacy hostname https://bcb.sidneybissoli.workers.dev keeps working, and so
does the older POST / route — clients configured before the endpoint moved to
/mcp are rewritten transparently, so nothing that used to work stopped working.
New setups should use the URL above.
Via npx (Claude Desktop)
Add to your Claude Desktop configuration file:
Windows: %APPDATA%\Claude\claude_desktop_config.json
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
{
"mcpServers": {
"bcb-br": {
"command": "npx",
"args": ["-y", "bcb-br-mcp"]
}
}
}Via global install
npm install -g bcb-br-mcp{
"mcpServers": {
"bcb-br": {
"command": "bcb-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 bcb_* tools. Point the connector at the hosted endpoint, no key required:
https://bcb.sidneybissoli.com/mcpsearch ranks the query against the series catalog — the 135 curated series plus the thousands indexed from the Open Data Portal — and returns { id, title, url } (ids are sgs:<code>); fetch returns the series as readable Markdown (name, category, frequency, unit, latest value) with the canonical public URL, which is what ChatGPT cites: the dataset page on dadosabertos.bcb.gov.br when the series has one, otherwise the public SGS query for its latest observations (the SGS has no per-series page). 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 bcb_* tools remain the ones to use for data.
Usage Examples
Get the current Selic rate
What is the current Selic interest rate?
→ Uses bcb_indicadores_atuaisIPCA history for 2024
Show me the monthly IPCA for 2024
→ Uses bcb_serie_valores with code 433, dataInicial 2024-01-01, dataFinal 2024-12-31List inflation indicators
What inflation series are available?
→ Uses bcb_series_populares with category "Inflação"Search for USD exchange rate series
Search for series related to the dollar
→ Uses bcb_buscar_serie with term "dolar" (works without accents)Calculate USD/BRL variation
What was the USD/BRL variation over the last 12 months?
→ Uses bcb_variacao with code 1 and periodos 12Compare IPCA, IGP-M, and INPC
Compare IPCA, IGP-M, and INPC in 2024
→ Uses bcb_comparar with codes [433, 189, 188], dataInicial 2024-01-01, dataFinal 2024-12-31Series Catalog (135)
The curated catalog holds 135 series, each verified against the source on 2026-08-13 (4 discontinued FGV series were removed on 2026-08-23).
The fonteNome field on every entry says where its name comes from:
portal(82 series) — the name is transcribed from the series' dataset on the BCB Open Data Portal, andunidadecarries the published unit of measure.medido(53 series) — the series has no dataset on the portal, so the name is inherited; what was verified against the source is its periodicity and order of magnitude.
Periodicity is always the measured one (from the spacing between observations), never an
inherited label. Market expectations are not here — use bcb_focus_expectativas.
Juros (14)
Code | Name | Periodicity | Name source |
11 | Taxa de juros - Selic | Diária |
|
432 | Taxa de juros - Meta Selic definida pelo Copom | Diária |
|
1178 | Taxa de juros - Selic anualizada base 252 | Diária |
|
4189 | Taxa de juros - Selic acumulada no mês anualizada base 252 | Mensal |
|
4390 | Taxa de juros - Selic acumulada no mês | Mensal |
|
12 | Taxa de juros - CDI diária | Diária |
|
4389 | Taxa de juros - CDI anualizada base 252 | Diária |
|
4391 | Taxa de juros - CDI acumulada no mês | Mensal |
|
4392 | Taxa de juros - CDI acumulada no mês anualizada | Mensal |
|
226 | Taxa Referencial (TR) - diária | Diária |
|
7811 | Taxa Referencial (TR) - mensal | Mensal |
|
7812 | Taxa Referencial (TR) - anualizada | Mensal |
|
256 | Taxa de Juros de Longo Prazo (TJLP) | Mensal |
|
253 | Taxa de juros - CDB pré-fixado - 30 dias | Diária |
|
Inflação (28)
Code | Name | Periodicity | Name source |
433 | IPCA - Variação mensal | Mensal |
|
13522 | IPCA - Variação acumulada em 12 meses | Mensal |
|
7478 | IPCA-15 - Variação mensal | Mensal |
|
10764 | IPCA-E - Variação mensal | Mensal |
|
16121 | Índice nacional de preços ao consumidor - Amplo (IPCA) - Núcleo por exclusão - ex2 | Mensal |
|
16122 | Índice nacional de preços ao consumidor - Amplo (IPCA) - Núcleo de dupla ponderação | Mensal |
|
11426 | Índice nacional de preços ao consumidor - Amplo (IPCA) - Núcleo médias aparadas sem suavização | Mensal |
|
11427 | Índice nacional de preços ao consumidor - Amplo (IPCA) - Núcleo por exclusão - Sem monitorados e alimentos no domicílio | Mensal |
|
10841 | Índice de Preços ao Consumidor-Amplo (IPCA) - Bens não-duráveis | Mensal |
|
10842 | Índice de Preços ao Consumidor-Amplo (IPCA) - Bens semi-duráveis | Mensal |
|
10843 | Índice de Preços ao Consumidor-Amplo (IPCA) - Duráveis | Mensal |
|
10844 | Índice de Preços ao Consumidor-Amplo (IPCA) - Serviços | Mensal |
|
4449 | Índice nacional de preços ao consumidor-Amplo (IPCA) - Preços monitorados - Total | Mensal |
|
11428 | Índice nacional de preços ao consumidor - Amplo (IPCA) - Itens livres | Mensal |
|
188 | INPC - Variação mensal | Mensal |
|
189 | IGP-M - Variação mensal | Mensal |
|
7447 | IGP-10 - Variação mensal | Mensal |
|
7448 | IGP-M - 1ª prévia | Mensal |
|
7449 | IGP-M - 2ª prévia | Mensal |
|
190 | IGP-DI - Variação mensal | Mensal |
|
7450 | IPA-M - Variação mensal | Mensal |
|
225 | IPA-DI - Geral - Variação mensal | Mensal |
|
7459 | IPA-DI - Produtos industriais | Mensal |
|
7460 | IPA-DI - Produtos agrícolas | Mensal |
|
191 | IPC-DI - Variação mensal | Mensal |
|
193 | IPC-Fipe - Variação mensal | Mensal |
|
17679 | IPC-3i - Variação mensal | Mensal |
|
17680 | IPC-C1 - Variação mensal | Mensal |
|
Câmbio (13)
Code | Name | Periodicity | Name source |
1 | Taxa de câmbio - Livre - Dólar americano (venda) - diário | Diária |
|
10813 | Taxa de câmbio - Livre - Dólar americano (compra) | Diária |
|
3698 | Taxa de câmbio - PTAX - Dólar americano (venda) | Mensal |
|
3697 | Taxa de câmbio - PTAX - Dólar americano (compra) | Mensal |
|
3695 | Taxa de câmbio - PTAX - Dólar americano (média) | Mensal |
|
21619 | Taxa de câmbio - Euro (venda) | Diária |
|
21620 | Taxa de câmbio - Euro (compra) | Diária |
|
21623 | Taxa de câmbio - Libra Esterlina (venda) | Diária |
|
21624 | Taxa de câmbio - Libra Esterlina (compra) | Diária |
|
21621 | Taxa de câmbio - Iene (venda) | Diária |
|
21622 | Taxa de câmbio - Iene (compra) | Diária |
|
21625 | Taxa de câmbio - Franco Suíço (venda) | Diária |
|
21626 | Taxa de câmbio - Franco Suíço (compra) | Diária |
|
Atividade Econômica (21)
Code | Name | Periodicity | Name source |
4380 | PIB mensal - Valores correntes (R$ milhões) | Mensal |
|
4381 | PIB acumulado no ano - Valores correntes (R$ milhões) | Mensal |
|
4382 | PIB acumulado dos últimos 12 meses - Valores correntes (R$ milhões) | Mensal |
|
4385 | PIB mensal em US$ (milhões) | Mensal |
|
4386 | PIB acumulado no ano em US$ (milhões) | Mensal |
|
7324 | PIB anual em US$ (milhões) | Anual |
|
24363 | Índice de Atividade Econômica do Banco Central - IBC-Br | Mensal |
|
24364 | Índice de Atividade Econômica do Banco Central (IBC-Br) - com ajuste sazonal | Mensal |
|
29601 | Índice de Atividade Econômica do Banco Central (IBC-Br) Agropecuária | Mensal |
|
29602 | Índice de Atividade Econômica do Banco Central (IBC-Br) Agropecuária - com ajuste sazonal | Mensal |
|
29603 | Índice de Atividade Econômica do Banco Central (IBC-Br) Indústria | Mensal |
|
29604 | Índice de Atividade Econômica do Banco Central (IBC-Br) Indústria - com ajuste sazonal | Mensal |
|
29605 | Índice de Atividade Econômica do Banco Central (IBC-Br) Serviços | Mensal |
|
29606 | Índice de Atividade Econômica do Banco Central (IBC-Br) Serviços - com ajuste sazonal | Mensal |
|
22103 | Exportação de bens e serviços - Trimestral | Trimestral |
|
22104 | Importação de bens e serviços - Trimestral | Trimestral |
|
22109 | Consumo das famílias - Trimestral | Trimestral |
|
22110 | Consumo do governo - Trimestral | Trimestral |
|
22111 | Formação bruta de capital fixo - Trimestral | Trimestral |
|
21859 | Produção industrial - Geral - Variação mensal | Mensal |
|
21862 | Utilização da capacidade instalada - Indústria | Mensal |
|
Emprego (4)
Code | Name | Periodicity | Name source |
24369 | Taxa de desocupação - PNAD Contínua | Mensal |
|
24380 | Rendimento médio real habitual - Todos os trabalhos | Mensal |
|
24381 | Massa de rendimento real habitual | Mensal |
|
28561 | CAGED - Saldo de empregos formais | Mensal |
|
Fiscal (7)
Code | Name | Periodicity | Name source |
4503 | Dívida Líquida do Setor Público (% PIB) - Total - Governo Federal e Banco Central | Mensal |
|
4513 | Dívida Líquida do Setor Público (% PIB) - Total - Setor público consolidado | Mensal |
|
4505 | Dívida Líquida do Setor Público (% PIB) - Total - Banco Central | Mensal |
|
4536 | Dívida líquida do governo geral (% PIB) | Mensal |
|
4537 | Dívida bruta do governo geral (% PIB) - Metodologia utilizada até 2007 | Mensal |
|
5364 | Receita total do governo central | Mensal |
|
5793 | NFSP sem desvalorização cambial (% PIB) - Fluxo acumulado em 12 meses - Resultado primário - Total - Setor público consolidado | Mensal |
|
Setor Externo (12)
Code | Name | Periodicity | Name source |
3546 | Reservas internacionais - Conceito liquidez - Total | Mensal |
|
13621 | Reservas internacionais - Conceito caixa - Total - diária | Diária |
|
22707 | Balança comercial - Balanço de Pagamentos - mensal - saldo | Mensal |
|
22708 | Exportação de bens - Balanço de Pagamentos - mensal | Mensal |
|
22709 | Importação de bens - Balanço de Pagamentos - mensal | Mensal |
|
22714 | Bens exportados sob merchanting - exportações positivas - mensal | Mensal |
|
22701 | Transações correntes - mensal - saldo | Mensal |
|
22704 | Balança comercial e Serviços - mensal - saldo | Mensal |
|
22715 | Bens importados sob merchanting - exportações negativas - mensal | Mensal |
|
22716 | Balança comercial - ouro não monetário - Balanço de Pagamentos - mensal - saldo | Mensal |
|
22846 | Renda secundária - Demais setores - Transferências pessoais - mensal - receita | Mensal |
|
22885 | Investimentos diretos no país - IDP - mensal - líquido | Mensal |
|
Crédito (30)
Code | Name | Periodicity | Name source |
20539 | Saldo da carteira de crédito - Total | Mensal |
|
20540 | Saldo da carteira de crédito - Pessoas jurídicas - Total | Mensal |
|
20541 | Saldo da carteira de crédito - Pessoas físicas - Total | Mensal |
|
20542 | Saldo da carteira de crédito com recursos livres - Total | Mensal |
|
20570 | Saldo da carteira de crédito com recursos livres - Pessoas físicas - Total | Mensal |
|
20592 | Saldo da carteira de crédito com recursos livres - Pessoas físicas - Outros créditos livres | Mensal |
|
20615 | Saldo da carteira de crédito com recursos direcionados - Pessoas físicas - Financiamento agroindustrial com recursos do BNDES | Mensal |
|
20631 | Concessões de crédito - Total | Mensal |
|
20665 | Concessões de crédito com recursos livres - Pessoas físicas - Cheque especial | Mensal |
|
20714 | Taxa média de juros das operações de crédito - Total | Mensal |
|
20716 | Taxa média de juros das operações de crédito - Pessoas físicas - Total | Mensal |
|
20740 | Taxa média de juros das operações de crédito com recursos livres - Pessoas físicas - Total | Mensal |
|
20749 | Taxa média de juros das operações de crédito com recursos livres - Pessoas físicas - Aquisição de veículos | Mensal |
|
20772 | Taxa média de juros das operações de crédito com recursos direcionados - Pessoas físicas - Financiamento imobiliário com taxas de mercado | Mensal |
|
25497 | Taxa média mensal de juros das operações de crédito com recursos direcionados - Pessoas físicas - Financiamento imobiliário com taxas de mercado | Mensal |
|
20783 | Spread médio das operações de crédito - Total | Mensal |
|
20785 | Spread médio das operações de crédito - Pessoas físicas - Total | Mensal |
|
20786 | Spread médio das operações de crédito com recursos livres - Total | Mensal |
|
21082 | Inadimplência da carteira de crédito - Total | Mensal |
|
21084 | Inadimplência da carteira de crédito - Pessoas físicas - Total | Mensal |
|
21085 | Inadimplência da carteira de crédito com recursos livres - Total | Mensal |
|
21128 | Inadimplência da carteira de crédito com recursos livres - Pessoas físicas - Cartão de crédito parcelado | Mensal |
|
21129 | Inadimplência da carteira de crédito com recursos livres - Pessoas físicas - Cartão de crédito total | Mensal |
|
13685 | Inadimplência da carteira de crédito das instituições financeiras sob controle privado - Total | Mensal |
|
29033 | Comprometimento de renda das famílias com juros da dívida com o Sistema Financeiro Nacional - Com ajuste sazonal (RNDBF) | Mensal |
|
29034 | Comprometimento de renda das famílias com o serviço da dívida com o Sistema Financeiro Nacional - Com ajuste sazonal (RNDBF) | Mensal |
|
29035 | Comprometimento de renda das famílias com o serviço da dívida com o Sistema Financeiro Nacional exceto crédito habitacional - Com ajuste sazonal (RNDBF) | Mensal |
|
29036 | Comprometimento de renda das famílias com amortização da dívida com o Sistema Financeiro Nacional - Com ajuste sazonal (RNDBF) | Mensal |
|
29037 | Endividamento das famílias com o Sistema Financeiro Nacional em relação à renda acumulada dos últimos doze meses (RNDBF) | Mensal |
|
29038 | Endividamento das famílias com o Sistema Financeiro Nacional exceto crédito habitacional em relação à renda acumulada dos últimos 12 meses (RNDBF) | Mensal |
|
Agregados Monetários (8)
Code | Name | Periodicity | Name source |
1788 | BM - Base monetária restrita (saldo em final de período) | Mensal |
|
1833 | Base Monetária Ampliada (saldo em final de período) | Mensal |
|
27788 | Meios de pagamento - M1 (média dos dias úteis do mês) - Novo | Mensal |
|
27789 | Meios de pagamento - Papel moeda em poder do público (saldo em final de período) - Novo | Mensal |
|
27790 | Meios de pagamento - Depósitos à vista (saldo em final de período) - Novo | Mensal |
|
27791 | Meios de pagamento - M1 (saldo em final de período) - Novo | Mensal |
|
27815 | Meios de pagamento amplos - M4 (saldo em final de periodo) - Novo | Mensal |
|
7530 | Comportamento monetário - Comportamento do público - C | Mensal |
|
Poupança (2)
Code | Name | Periodicity | Name source |
25 | Depósitos de poupança até 03.05.2012 - Rentabilidade no período | Diária |
|
195 | Depósitos de poupança a partir de 04.05.2012 - Rentabilidade no período | Diária |
|
The full machine-readable catalog is served as the bcb://series/populares resource and by
bcb_series_populares. Thousands of further series are reachable through bcb_buscar_serie,
which also queries the BCB Open Data Portal index.
Finding Other Series
The SGS database contains over 18,000 time series. To find codes for other series:
Visit the BCB SGS Portal
Search for the desired series
Note the series code
Use that code with this server's tools
Ask in your words, not the BCB's
bcb_buscar_serie matches your words, all of them (AND), against the curated catalogue (135 series: name and category) and the dataset slugs of the BCB open-data portal (3,579 series identified by code). Accents were already ignored; the word was not. Measured over both layers on 2026-09-16, fixed since 1.12.0: the everyday word is expanded to the BCB's own, and the response says so in notasVocabulario; zero results come with a way out.
you ask | hits before (curated / portal) | the BCB writes | hits |
| 0 / 0 | resultado primário, resultado nominal | 1 / 26, 0 / 22 |
| 0 / 0 | inadimplência | 6 / 484 |
| 0 / 0 | Selic | 5 / 7 |
| 0 / 0 | desocupação | 1 / 0 |
| 0 / 0 | receita, despesa | 2 / 8, 0 / 8 |
| 0 / 0 | investimento direto | 1 / 12 |
| 0 / 0 | transações correntes | 1 / 5 |
Only measured pairs enter the table (src/vocabulario.ts): the word you ask with absent from both layers, the BCB's word present. What the BCB does not publish under any of these names stays out and still returns zero — salário mínimo, ibovespa, bitcoin, meta de inflação — because an alias for a series that does not exist promises what the source does not have; and empréstimo is not mapped to crédito on purpose (the portal already answers it with 45 datasets; the mapping would drown them in 2,000). The same table feeds the Deep Research search index.
Technical Details
Robustness
Timeout: 30 seconds per request (prevents hanging)
Auto-retry: 3 attempts with exponential backoff (1s, 2s, 4s) for transient failures; client errors (4xx) are not retried, since they are deterministic
Error handling: Clear error messages
Working around the SGS limits
Measured against the live API, not inferred from documentation:
A date window over 10 years on a daily series is refused with HTTP 406, and so is an open window (no
dataInicial, or no dates at all). The limit applies to the implicit window: with nodataFinalthe API assumes today. Requests are sliced into windows of up to 3 years, fetched with bounded concurrency and merged in date order without duplicating the seams; the response reports it inchunking. The slice is 3 years rather than the allowed 10 because a 10-year daily window costs 10–20 s upstream and may be cut off around 30 s.dados/ultimos/Nis capped at 20 by the API, in every periodicity. Above 20, the server infers the series' periodicity and fetches by date window instead.There is no per-series metadata endpoint (
/metadadosanswers 404). Frequency is inferred from the spacing of the observations and flagged withperiodicidadeInferida; unit of measure is not available from any source.
Derived values
Anything this server computes — variation, descriptive statistics, harmonised
series — is marked derived: true and carries a note with the conventions used.
Statistics come from @sbissoli/mcp-stats.
A value published by the BCB is always returned verbatim; only computed values are
rounded (to 4 decimals).
Smart Search
bcb_buscar_serie searches two layers: the curated catalog of 135 verified series (which ranks first, with
the source of the name declared) and the index of the BCB Open Data Portal, with thousands of series
identified by code. Terms are accent- and case-insensitive, and several terms are combined with AND:
"inflacao"→ finds "Inflação""cambio"→ finds "Câmbio""ipca servicos"→ both terms must match
The portal index is served from a 24-hour cache, renewed by the first search after it expires (one request to
the portal, only metadata — series codes and names, never observations). Every answer carries
catalogo.cobertura: the index is not the whole SGS, so not finding a series here is not proof it does not
exist.
Data source and licence
Data obtained from the Banco Central do Brasil (SGS / Olinda-Expectativas / PTAX), published under the
Open Data Commons Open Database License (ODbL) v1.0 — https://opendatacommons.org/licenses/odbl/1-0/.
Re-verified against the source on 2026-08-13: 4,259 of the portal's 4,260 datasets declare
license_id: "odc-odbl". This is not CC0, CC BY, or public domain — ODbL carries attribution,
share-alike (on derived databases) and anti-DRM clauses. Exchange-rate answers pass through the BCB's own
liability disclaimer verbatim; cross-currency parities are not compiled by the BCB — they come from an
information agency (Refinitiv) and are redistributed by the BCB, and the tools say so.
The server's own code is MIT; the data is not. See NOTICE.md. Privacy: no user data is logged, by either channel — see PRIVACY.md.
Provenance block
Every successful tool response carries a provenance block (portfolio contract v1.0) in two channels:
structuredContent.provenance + attribution (visible to the model) and a _meta mirror under
br.com.sidneybissoli.bcb/* (out of band, zero tokens). Each block names the source, the canonical URL that
reproduces the query, the data vintage, the real upstream extraction instant, and the licence.
Two details that are easy to get wrong and are handled here:
retrieved_atis the real extraction instant, not "now". The portal index is served from a 24-hour cache, so a search answered from cache reports the instant the index was actually fetched — which can be a day old, and is the legally relevant date.One block per provenance, never merged.
bcb_buscar_serieseparates the BCB portal index from the server's own curated catalogue;bcb_serie_metadadosseparates the live SGS reading from the catalogue;bcb_cambio_cotacaoseparates BCB-compiled dollar rates from agency-sourced cross-currency parities.
Development
Requirements
Node.js >= 18.0.0
Setup
git clone https://github.com/SidneyBissoli/bcb-br-mcp.git
cd bcb-br-mcp
npm installBuild
npm run buildLocal testing (stdio)
npm run devLocal testing (HTTP worker)
npm run dev:workerOr use the MCP Inspector:
npx @modelcontextprotocol/inspector npm run devBCB API
This server uses the Brazilian Central Bank's public API:
Base endpoint:
https://api.bcb.gov.br/dados/serie/bcdata.sgs.{code}/dadosFormat: JSON
Authentication: None (public API)
Documentation: BCB Open Data
Changelog
v1.4.1
bcb_focus_referencias: the parameter is nowescopo, nothorizonte, and the response array isescopos. The scopes are the five horizons ofbcb_focus_expectativasplusselic— andselicis not a horizon: its axis is the Copom meeting. Each block names thetoolthat consumes it. The previous name impliedselicwas a queryable horizon ofbcb_focus_expectativas, which it is not. Never published to npm under the old name.
v1.4.0
Three APIs under one contract, 8 tools → 13. Focus market-expectations survey (
bcb_focus_expectativas,bcb_focus_selic,bcb_focus_referencias) and PTAX exchange rates (bcb_cambio_cotacao,bcb_cambio_moedas), consolidated by parameter rather than mirroring the source's ~18 OData resources.Real search.
bcb_buscar_serienow queries the Open Data Portal index (3,500+ series, 24-hour cache, metadata only) on top of the curated catalog, and states the index's coverage instead of claiming a series does not exist.Every Focus and PTAX field name verified against the live API, including the Top 5 Selic resource, which publishes its fields in a different case from the other twelve.
ODbL obligations shipped with the exchange-rate tools: the BCB disclaimer is passed through verbatim, and non-USD parities are qualified as third-party (Refinitiv) data redistributed by the BCB.
v1.2.0
HTTP endpoint via Cloudflare Workers (
https://bcb.sidneybissoli.workers.dev)Published on Smithery.ai
Refactored: tool logic extracted to
src/tools.ts(shared between stdio and HTTP)
v1.1.0
New tool
bcb_variacaofor percentage variation calculationNew tool
bcb_compararfor comparing multiple series30-second timeout on requests
Auto-retry with exponential backoff (3 attempts)
Normalized search (accent-insensitive)
Additional statistics (max, min, average, range)
v1.0.0
Initial release
6 basic tools
Catalog with 135 verified series
Contributing
Contributions are welcome! Please:
Fork the repository
Create a feature branch (
git checkout -b feature/new-feature)Commit your changes (
git commit -m 'Add new feature')Push to the branch (
git push origin feature/new-feature)Open a Pull Request
License
Two licences, and they are not the same thing.
Code: MIT — see LICENSE.
Data: from the Banco Central do Brasil, under the Open Data Commons Open Database License (ODbL) v1.0 — https://opendatacommons.org/licenses/odbl/1-0/. Not CC0, not CC BY, not public domain: the ODbL requires attribution, has a share-alike clause on derived databases, and an anti-DRM clause.
Every successful response carries a provenance block with the source, the query URL, the data vintage, the real extraction instant and the licence. Exchange-rate answers pass the BCB disclaimer through verbatim, and non-USD parities are qualified as information-agency data (Refinitiv) redistributed by the BCB — not as data compiled by the Central Bank.
Details and obligations in NOTICE.md. Privacy: no user data is logged, by either channel — see PRIVACY.md.
Author
Sidney da Silva Pereira Bissoli
GitHub: @SidneyBissoli
Email: sbissoli76@gmail.com
Useful Links
Available Tools
17 toolsbcb_buscar_serieBuscar série no catálogoARead-onlyIdempotentInspect
Busca séries do BCB por palavra-chave (ou pelo código) em DUAS camadas: o catálogo curado local de 135 séries verificadas contra a origem, que vem primeiro e com fonteNome dizendo se o nome é transcrito do portal do BCB ou herdado, e o índice do Portal de Dados Abertos do BCB, com milhares de séries identificadas por código. Ignora acentos e maiúsculas ('inflacao' encontra 'Inflação'); vários termos são combinados com E ('ipca servicos'). Quando usar: para descobrir o código de uma série antes de consultar valores. Quando NÃO usar: para navegar tudo por categoria use bcb_series_populares; para valores use bcb_serie_valores. Retorna: termo, totalEncontradas, series (cada item com codigo, nome, origem — 'curado' ou 'indice' — e, no índice, dataset com a página do portal), catalogo (origem, obtidoEm, seriesIndexadas, cobertura) e, quando aplicável, observacao, avisos, mensagem e sugestao. Cobertura: o índice NÃO é o SGS inteiro, portanto não encontrar aqui não prova que a série não exista — o campo catalogo.cobertura diz isso explicitamente em toda resposta. Comportamento de rede: o índice é servido de cache com validade de 24 h e a renovação é feita pela primeira busca após o vencimento (uma requisição ao portal, ~1 s); as demais buscas não tocam a rede. Se o portal estiver fora, a busca degrada para o catálogo curado (ou para o último índice obtido) e sinaliza em avisos, sempre com a data de obtenção visível.
| Name | Required | Description | Default |
|---|---|---|---|
| termo | Yes | Termo de busca (mínimo 2 caracteres) ou o código da série. Vários termos são combinados com E, sem distinção de acento; a palavra de todo dia é traduzida para a do BCB (déficit→resultado primário, calote→inadimplência, desemprego→desocupação) e a resposta diz quando isso aconteceu (notasVocabulario). | |
| limite | No | Máximo de séries a devolver (1-100, padrão: 20). `totalEncontradas` traz o total antes do corte. |
Output Schema
| Name | Required | Description |
|---|---|---|
| termo | Yes | Termo pesquisado |
| avisos | No | Avisos de degradação (índice vencido ou indisponível) |
| series | Yes | Séries que correspondem ao termo — as do catálogo curado primeiro |
| catalogo | Yes | Proveniência do índice usado na busca |
| mensagem | No | Mensagem exibida quando nada é encontrado |
| sugestao | No | Sugestões de termos alternativos |
| observacao | No | Aviso de corte quando há mais resultados que `limite` |
| provenance | Yes | Um bloco por procedência que contribuiu com esta resposta (contrato v1.1; licenças nunca se fundem) |
| attribution | Yes | URLs canônicas das fontes desta resposta (lista de atribuição) |
| notasVocabulario | No | Quando um termo foi ampliado para a palavra que o BCB usa (déficit→resultado primário), diz qual |
| totalEncontradas | Yes | Quantidade de séries encontradas, antes do corte por `limite` |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/openWorld/idempotent hints, but the description goes far beyond them: it discloses accent/case-insensitive matching, AND-combination of terms, vocabulary translation, 24-hour cache behavior, network degradation to the curated catalog, and warning signals. This is rich behavioral context that annotations alone could not convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Although long, the description is well-structured with clear labeled sections (Quando usar, Quando NÃO usar, Retorna, Cobertura, Comportamento de rede). The most important purpose and usage guidance are front-loaded, and every section adds operational value rather than repeating the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a search tool with two data sources, cache behavior, degradation paths, and vocabulary nuances, the description covers all operational aspects an agent needs: return shape, coverage caveats, network behavior, and failure signaling. The sibling list and output schema further complete the picture, but the description itself is already self-sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, yet the description still adds substantial meaning: it explains that 'termo' can be a code or keyword, that multiple terms are AND-combined, that accents are ignored, and that everyday words are translated to BCB vocabulary. The 'limite' parameter's truncation behavior is also clarified via 'totalEncontradas'.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific action ('Busca séries do BCB por palavra-chave ou pelo código') and immediately distinguishes this tool from siblings by naming bcb_series_populares and bcb_serie_valores as alternatives for other intents. The two-layer catalog/index behavior makes the tool's unique role unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly states when to use the tool ('para descobrir o código de uma série antes de consultar valores') and when not to use it, naming the exact alternative tools for category browsing and value retrieval. It also warns about coverage limitations, so an agent knows not to over-trust a negative result.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bcb_cambio_cotacaoCotação de câmbio (PTAX)ARead-onlyIdempotentInspect
Consulta a cotação PTAX de uma moeda contra o real, em um dia específico ou num intervalo de datas. Padrão: dólar americano (USD). Devolve compra, venda, data/hora e tipo de boletim; para moedas não-dólar devolve também a paridade contra o USD, com a origem qualificada. Quando usar: para a cotação oficial de fechamento de um dia ou a série de um período curto. Quando NÃO usar: para a série histórica longa do dólar como série temporal do SGS use bcb_serie_valores (códigos 1 = livre venda, 3698 = PTAX venda, 3697 = PTAX compra, 3695 = PTAX média) — esta tool é a fonte primária do boletim, com compra e venda no mesmo registro; para descobrir o símbolo da moeda use bcb_cambio_moedas. Retorna: moeda, periodo (dataInicial, dataFinal, janelaPadrao), totalRegistros, cotacoes, disclaimer, qualificacaoParidade (só para moedas não-dólar), urlConsulta, consultadoEm e, quando aplicável, observacao. Sem datas, cobre os últimos 7 dias (para atravessar fim de semana e feriado). Fonte: PTAX / Cotações e boletins de câmbio do Banco Central do Brasil, via Olinda OData. A resposta repassa literalmente o disclaimer de responsabilidade do BCB, em disclaimer. Cotações existem só em dia útil com fechamento de câmbio. As paridades de moedas não-dólar vêm de agência de informação (Refinitiv), redistribuídas pelo BCB — não são apuradas pelo Banco Central.
| Name | Required | Description | Default |
|---|---|---|---|
| data | No | Dia específico (yyyy-MM-dd ou dd/MM/yyyy). Não combine com dataInicial/dataFinal. | |
| moeda | No | Símbolo da moeda (ex.: USD, EUR, GBP, JPY). Padrão: USD. | USD |
| limite | No | Máximo de boletins a devolver (1-1000, padrão 100) | |
| dataFinal | No | Fim do intervalo (yyyy-MM-dd ou dd/MM/yyyy). Padrão: hoje. | |
| dataInicial | No | Início do intervalo (yyyy-MM-dd ou dd/MM/yyyy). Padrão: 7 dias antes do fim. |
Output Schema
| Name | Required | Description |
|---|---|---|
| moeda | Yes | |
| periodo | Yes | |
| cotacoes | Yes | |
| disclaimer | Yes | Disclaimer de responsabilidade do BCB, repassado literalmente |
| observacao | No | |
| provenance | Yes | Um bloco por procedência que contribuiu com esta resposta (contrato v1.1; licenças nunca se fundem) |
| attribution | Yes | URLs canônicas das fontes desta resposta (lista de atribuição) |
| urlConsulta | Yes | |
| consultadoEm | Yes | |
| totalRegistros | Yes | |
| qualificacaoParidade | No | Qualificação da origem das paridades não-dólar |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, but the description adds substantial context beyond them: unexpected 7-day default window to cross weekends/holidays, quotes exist only on business days with exchange closing, non-dollar parities come from Refinitiv (not computed by BCB), and the disclaimer is passed through literally. It also discloses the data source (Olinda OData). No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Though long, the description is dense and logically front-loaded: core purpose first, then return structure, then usage guidance, then behavioral nuances. Every sentence earns its place — the date ranges, return fields, source, and validity constraints are all functional. No filler or repetition of schema content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the medium complexity (5 parameters, date/currency handling, non-dollar parity logic), the description is complete: it covers usage and exclusions, enumerates the full return structure (matching the output schema), explains data availability and provenance, and the annotations carry the safety profile. An agent has everything needed to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% so the baseline is 3, but the description adds real value: it explains the rationale behind the 7-day default window ('para atravessar fim de semana e feriado'), clarifies the moeda behavior (non-dollar currencies return parity), and notes that records only exist on business days — information an agent needs to interpret results. It enriches but does not replace the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: queries the PTAX exchange rate of a currency against the real, on a specific day or date range, with USD as default. It distinguishes itself from siblings by explicitly naming bcb_serie_valores and bcb_cambio_moedas as different tools for different jobs, so an agent can tell it apart 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit 'Quando usar' and 'Quando NÃO usar' guidance, naming the exact alternative (bcb_serie_valores with specific SGS codes 1, 3698, 3697, 3695) and the reason (long time series vs. same-record buy/sell bulletin), plus bcb_cambio_moedas for symbol discovery. 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.
bcb_cambio_moedasMoedas com cotação no BCBARead-onlyIdempotentInspect
Lista as moedas com cotação publicada pelo Banco Central, com símbolo, nome e tipo, e aceita um termo para filtrar. Quando usar: para descobrir o símbolo correto antes de chamar bcb_cambio_cotacao (é a causa mais comum de cotação vazia). Quando NÃO usar: para valores de cotação. Retorna: termo, totalMoedas, moedas (simbolo, nome, tipo), disclaimer, qualificacaoParidade, urlConsulta e consultadoEm. Fonte: PTAX / Cotações e boletins de câmbio do Banco Central do Brasil, via Olinda OData. A resposta repassa literalmente o disclaimer de responsabilidade do BCB, em disclaimer. Cotações existem só em dia útil com fechamento de câmbio.
| Name | Required | Description | Default |
|---|---|---|---|
| termo | No | Filtro por símbolo ou nome (ex.: 'EUR', 'libra'). Opcional. |
Output Schema
| Name | Required | Description |
|---|---|---|
| termo | No | Termo aplicado no filtro; nulo quando não foi informado |
| moedas | Yes | |
| disclaimer | Yes | |
| observacao | No | |
| provenance | Yes | Bloco de proveniência (contrato v1.1): fonte, URL, competência, extração, diagnóstico de origem, citação e licença |
| attribution | Yes | URLs canônicas das fontes desta resposta (lista de atribuição) |
| totalMoedas | Yes | |
| urlConsulta | Yes | |
| consultadoEm | Yes | |
| qualificacaoParidade | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds valuable behavioral context beyond the annotations: it warns that the response passes through the BCB's disclaimer verbatim and that quotations exist only on business days with exchange closing. These are real behavioral caveats an agent needs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is longer than minimal but well-structured with clear sections: purpose, when to use, when not to use, return fields, source, and caveat. Most sentences earn their place, and the most important guidance appears early. A slightly tighter phrasing could improve it, but it is not padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is complete for a low-complexity tool with one optional parameter. It names the return fields, identifies the data source, explains the disclaimer behavior, and states the business-day limitation. The output schema exists, so return-value details are structurally covered; nothing an agent needs to call this tool correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the parameter termo is already documented as an optional filter by symbol or name. The description adds example values ('EUR', 'libra') and ties the parameter to its practical purpose (finding the correct symbol), which is helpful but not essential. Baseline 3 is appropriate when the schema fully documents the parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Lista as moedas com cotação publicada pelo Banco Central, com símbolo, nome e tipo'. It explicitly contrasts with bcb_cambio_cotacao, saying it is for discovering the correct symbol before calling that sibling tool, and clarifies it is not for quotation values. This clearly distinguishes it from its siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description states exactly when to use the tool ('para descobrir o símbolo correto antes de chamar bcb_cambio_cotacao'), identifies the most common failure it prevents (cotação vazia), and explicitly says when NOT to use it ('para valores de cotação'). This is direct, actionable guidance with a named alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bcb_compararComparar sériesARead-onlyIdempotentInspect
Compara de 2 a 5 séries temporais no MESMO período (dataInicial e dataFinal obrigatórias), calculando a variação percentual de cada uma e ordenando-as num ranking (maior para menor variação). Série de nível entra pela variação entre as pontas; série que já é variação por período (IPCA, INPC, IGP-M mensais do catálogo; Selic/CDI acumulados no mês; poupança) entra pelo ACUMULADO encadeado do período — cada item diz em metodo qual conta foi feita, então "qual índice de preço subiu mais em 2024" é esta tool. Quando usar: para comparar/correlacionar a evolução de vários indicadores lado a lado. Quando NÃO usar: para uma única série use bcb_variacao. Retorna: periodo, totalSeries, seriesComDados, seriesComErro, ranking (cada item com posicao, codigo, nome, metodo, valorInicial, valorFinal, variacaoPercentual, maximo, minimo, media) e erros. Resiliente: séries sem dados no período, e séries de acumulado móvel (IPCA em 12 meses), são isoladas em erros sem invalidar a comparação. Periodicidades diferentes: comparar uma série diária com uma mensal alinha pontos que não são comparáveis, e a resposta avisa isso em aviso; informe frequencia (mensal|trimestral|anual) para harmonizar todas na mesma grade antes de comparar, escolhendo a convenção em agregacao. Janelas longas em séries diárias são fatiadas automaticamente (limite de 10 anos da API do BCB). Comportamento: consome a API pública SGS do Banco Central do Brasil — sem autenticação, chave de API ou cadastro, e sem limite de requisições divulgado (uso é best-effort). Em falha transitória ou timeout a chamada é repetida automaticamente (até 3 tentativas, backoff exponencial); persistindo o erro, retorna isError: true com mensagem em português (HTTP 404 = série inexistente ou sem dados no período solicitado). O resultado vem como JSON tanto em texto quanto em structuredContent (conforme o outputSchema); datas no formato dd/MM/yyyy e valores numéricos (ponto decimal).
| Name | Required | Description | Default |
|---|---|---|---|
| codigos | Yes | Array com 2 a 5 códigos de séries para comparar | |
| agregacao | No | Como agregar os valores de cada período quando `frequencia` é informada. `ultimo` (padrão) serve a nível de preço, taxa e índice; `soma` a fluxo; `acumulada` a séries que JÁ SÃO variação percentual (IPCA mensal, por exemplo), compondo geometricamente — somar 12 variações mensais NÃO dá a inflação do ano. | ultimo |
| dataFinal | Yes | Data final (yyyy-MM-dd ou dd/MM/yyyy) | |
| frequencia | No | Opcional: reamostra a série para esta frequência antes de responder (só agrega para períodos MAIORES; pedir frequência mais fina que a da série é recusado). Útil para comparar séries de periodicidades diferentes. | |
| dataInicial | Yes | Data inicial (yyyy-MM-dd ou dd/MM/yyyy) |
Output Schema
| Name | Required | Description |
|---|---|---|
| aviso | No | Presente quando as séries comparadas têm periodicidades diferentes e nenhuma harmonização foi pedida — os números do ranking, nesse caso, não são diretamente comparáveis entre si. |
| erros | Yes | Séries que não retornaram dados, com o motivo |
| periodo | Yes | Janela temporal comparada |
| ranking | Yes | Séries ordenadas pela variação percentual (maior para menor) |
| derivacao | Yes | Origem dos números calculados: o que é derivado, por qual motor e com quais convenções |
| provenance | Yes | Bloco de proveniência (contrato v1.1): fonte, URL, competência, extração, diagnóstico de origem, citação e licença |
| attribution | Yes | URLs canônicas das fontes desta resposta (lista de atribuição) |
| totalSeries | Yes | Quantidade de séries solicitadas |
| harmonizacao | No | Presente quando `frequencia` foi informada: descreve a reamostragem aplicada. Valor DERIVADO — calculado por este servidor, não publicado pelo Banco Central. |
| seriesComErro | Yes | Quantidade de séries sem dados ou com erro |
| seriesComDados | Yes | Quantidade de séries com dados no período |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false. The description adds rich behavioral context: explains how the ranking is computed, how series without data are handled (isolated in `erros`), how different periodicities are aligned, and mentions automatic retry (up to 3 attempts), best-effort API usage, and error codes (HTTP 404). It even clarifies the meaning of `isError`. This goes beyond annotations, though it doesn't explicitly mention the retry behavior in annotations, but that's fine. No contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is fairly long, but every sentence adds needed context. It front-loads the key purpose and usage guidance, then details behaviors and edge cases. It could be slightly more concise, but it is well-organized and not redundant. A 4 is justified.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (mixed periodicities, error isolation, aggregation options, output schema with detailed ranking fields), the description covers all critical aspects: input validation, output structure, error handling, resilience, and the distinction from siblings. The output schema exists and covers return fields, so the description doesn't need to repeat them. This is a complete definition.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all 5 parameters have descriptions in the schema. The description adds value by explaining the meaning of `agregacao` in detail (especially 'acumulada' and why summing monthly variations is wrong), and what `frequencia` does (only aggregates to larger periods, rejects finer frequencies). It also clarifies that `codigos` must be 2-5 and that `dataInicial`/`dataFinal` are required. The description enriches beyond the schema, e.g., explaining the impact of `frequencia` on alignment. Thus, a 4 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool compares 2-5 time series in the same period, calculates percentage variation, and ranks them. It distinguishes from bcb_variacao by explicitly stating when to use this tool vs. that one. The specific resource and action are unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit when-to-use ('para comparar/correlacionar a evolução de vários indicadores lado a lado') and when-not-to-use ('para uma única série use bcb_variacao'). It also explains how to handle mixed periodicities and aggregation, giving concrete guidance on the `frequencia` and `agregacao` parameters and their semantics.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bcb_correlacaoCorrelacionar sériesARead-onlyIdempotentInspect
Calcula a correlação estatística entre 2 a 5 séries temporais do BCB no MESMO período (dataInicial e dataFinal obrigatórias), par a par. Quando usar: para medir se dois indicadores se movem juntos (ex.: dólar e Selic, IPCA e IGP-M). Quando NÃO usar: para comparar a variação de cada série lado a lado use bcb_comparar; para uma série só use bcb_variacao. Métodos: pearson (padrão) mede relação LINEAR entre os valores; spearman mede relação MONÓTONA entre os postos e é o adequado quando a relação não é reta ou quando uma série fica parada em platôs (taxa de juros entre reuniões do Copom). Base: nivel (padrão) correlaciona os valores; variacao correlaciona a mudança percentual de um ponto para o outro — prefira variacao quando as duas séries têm tendência (preço, índice, estoque), porque o nível de duas séries crescentes tem correlação alta só porque ambas crescem com o tempo. Retorna: periodo, metodo, base, series, alinhamento (datas cruzadas, completas e parciais), pares (cada um com codigoA/codigoB, coeficiente entre -1 e 1, n, descartados e interpretacao em prosa), erros e derivacao. Coeficiente que não pode ser calculado vem null com motivo — nunca 0, que significaria ausência medida de relação. Periodicidades diferentes são RECUSADAS, não avisadas: cruzar uma série diária com uma mensal por data casa só as datas coincidentes (cerca de 7 por ano) e produziria um coeficiente sobre esse punhado; informe frequencia para harmonizar todas na mesma grade antes de correlacionar. Correlação não estabelece causalidade. Comportamento: consome a API pública SGS do Banco Central do Brasil — sem autenticação, chave de API ou cadastro, e sem limite de requisições divulgado (uso é best-effort). Em falha transitória ou timeout a chamada é repetida automaticamente (até 3 tentativas, backoff exponencial); persistindo o erro, retorna isError: true com mensagem em português (HTTP 404 = série inexistente ou sem dados no período solicitado). O resultado vem como JSON tanto em texto quanto em structuredContent (conforme o outputSchema); datas no formato dd/MM/yyyy e valores numéricos (ponto decimal).
| Name | Required | Description | Default |
|---|---|---|---|
| base | No | `nivel` correlaciona os valores; `variacao` correlaciona a mudança percentual de um ponto para o seguinte. Prefira `variacao` quando as duas séries têm tendência: o nível de duas séries crescentes tem correlação alta só porque ambas crescem com o tempo. | nivel |
| metodo | No | `pearson` mede relação linear entre os valores; `spearman` mede relação monótona entre os postos (com posto médio nos empates) e é o adequado quando a relação não é reta ou quando uma das séries fica parada em platôs, como a Selic entre reuniões do Copom. | pearson |
| codigos | Yes | Array com 2 a 5 códigos de séries para correlacionar par a par | |
| agregacao | No | Como agregar os valores de cada período quando `frequencia` é informada. `ultimo` (padrão) serve a nível de preço, taxa e índice; `soma` a fluxo; `acumulada` a séries que JÁ SÃO variação percentual (IPCA mensal, por exemplo), compondo geometricamente — somar 12 variações mensais NÃO dá a inflação do ano. | ultimo |
| dataFinal | Yes | Data final (yyyy-MM-dd ou dd/MM/yyyy) | |
| frequencia | No | Opcional: reamostra a série para esta frequência antes de responder (só agrega para períodos MAIORES; pedir frequência mais fina que a da série é recusado). Útil para comparar séries de periodicidades diferentes. | |
| dataInicial | Yes | Data inicial (yyyy-MM-dd ou dd/MM/yyyy) |
Output Schema
| Name | Required | Description |
|---|---|---|
| base | Yes | Se o cálculo usou os valores ou as variações |
| erros | Yes | Séries que não retornaram dados, com o motivo |
| pares | Yes | Um item por par de séries |
| metodo | Yes | Método aplicado |
| series | Yes | Séries que entraram no cálculo |
| periodo | Yes | Janela temporal correlacionada |
| derivacao | Yes | Origem dos números calculados: o que é derivado, por qual motor e com quais convenções |
| provenance | Yes | Bloco de proveniência (contrato v1.1): fonte, URL, competência, extração, diagnóstico de origem, citação e licença |
| alinhamento | Yes | Como as grades foram cruzadas. `completas` é o que efetivamente entra num coeficiente: datas em que TODAS as séries publicam. A distância entre `datas` e `completas` é a medida de quanto as séries não se sobrepõem. |
| attribution | Yes | URLs canônicas das fontes desta resposta (lista de atribuição) |
| harmonizacao | No | Presente quando `frequencia` foi informada: descreve a reamostragem aplicada. Valor DERIVADO — calculado por este servidor, não publicado pelo Banco Central. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint, and destructiveHint=false. The description goes well beyond these by disclosing: the public SGS API with no auth, automatic retry with up to 3 attempts and exponential backoff, error response format with isError and Portuguese messages, HTTP 404 semantics, refusal of different periodicities rather than warning, null with motivo rather than 0, and output format details (dd/MM/yyyy, decimal point). No annotation contradiction exists; the description enriches the safety profile with operational behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but unusually well-structured: it front-loads the core action)Skip and use cases, then method/base/frequency guidance, then return format, then failure behavior. Every major section adds non-obvious operational knowledge. Minor redundancy with schema descriptions (e.g., base and metodo paragraphs closely mirror schema text) costs a point, but the density and logical ordering are top-tier for a tool of this complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite an output schema existing, the description covers everything an agent needs to select and invoke the tool correctly: necessary parameters (dataInicial/dataFinal required), pair count limits (2–5), method/base/frequency choices with rationale, aggregation rules for different data types, retry and error behavior, output format, and explicit causal caveat. The only thing omitted is the full return schema itself, which is already provided separately. For a tool with 7 parameters and subtle statistical semantics, this is complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema coverage is 100%, so the baseline is 3. The description adds valuable semantic context beyond the schema: it explains the statistical reasoning for choosing spearman over pearson (monotonic vs linear), why variacao should be favored for trending series, and how agregacao='acumulada' should be used for series that are already percentage changes (IPCA example). However, some parameter explanations (base and metodo) intentionally duplicate the schema's own descriptions, which prevents a higher score.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Calcula a correlação estatística entre 2 a 5 séries temporais do BCB no MESMO período', specifying the scope (pairwise, same period) and required parameters. It further differentiates from siblings by naming bcb_comparar and bcb_variacao as the tools NOT to use for side-by-side comparison or single-series analysis. This makes the tool's unique purpose immediately identifiable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly provides 'Quando usar' and 'Quando NÃO usar' sections, citing concrete examples and sibling tools. It also gives decision guidance for metodo (pearson vs spearman, with the Copom plateau example) and base (nivel vs variacao, with trending series), plus advice on using frequencia to harmonize different periodicities. This is comprehensive, explicit usage guidance with clear exclusion criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bcb_deflacionarDeflacionar série (valores reais)ARead-onlyIdempotentInspect
Converte uma série NOMINAL do BCB em valores REAIS (moeda constante), descontando a inflação do período — a diferença entre 'o salário mínimo subiu 46% desde 2020' e 'o salário mínimo subiu 5% em poder de compra'. Quando usar: sempre que valores em reais de épocas diferentes forem comparados. Quando NÃO usar: para séries que já são percentuais, índices ou taxas (deflacionar uma taxa de juros não significa nada); para a série nominal crua use bcb_serie_valores. Índice: ipca (padrão), inpc ou igpm. Base: mesBase no formato yyyy-MM define em reais de que mês os valores são expressos; sem ele, usa o último mês publicado do índice ('em reais de hoje'). Retorna: serie, deflator (índice, código, cobertura), base, periodo, dados (cada ponto com valorNominal, valorReal e fator), variacao (a percentual nominal ao lado da real no mesmo período), derivacao e avisos. Limite da fonte: o SGS não publica número-índice, então o índice é reconstruído compondo as variações mensais — reconstrução conferida contra a própria fonte (diferença máxima de 0,0052 ponto percentual contra o acumulado oficial em 12 meses). Observação fora da cobertura do índice recebe valorReal: null, nunca um valor inventado; como o índice sai com defasagem, o mês corrente costuma cair nesse caso. Comportamento: consome a API pública SGS do Banco Central do Brasil — sem autenticação, chave de API ou cadastro, e sem limite de requisições divulgado (uso é best-effort). Em falha transitória ou timeout a chamada é repetida automaticamente (até 3 tentativas, backoff exponencial); persistindo o erro, retorna isError: true com mensagem em português (HTTP 404 = série inexistente ou sem dados no período solicitado). O resultado vem como JSON tanto em texto quanto em structuredContent (conforme o outputSchema); datas no formato dd/MM/yyyy e valores numéricos (ponto decimal).
| Name | Required | Description | Default |
|---|---|---|---|
| codigo | Yes | Código da série NOMINAL a deflacionar (ex.: 1619 para salário mínimo) | |
| indice | No | Índice de preços usado como deflator: IPCA (433), INPC (188) ou IGP-M (189) | ipca |
| mesBase | No | Mês em cujos preços os valores serão expressos, no formato yyyy-MM. Sem ele, usa o último mês publicado do índice — isto é, 'em reais de hoje'. | |
| agregacao | No | Como agregar os valores de cada período quando `frequencia` é informada. `ultimo` (padrão) serve a nível de preço, taxa e índice; `soma` a fluxo; `acumulada` a séries que JÁ SÃO variação percentual (IPCA mensal, por exemplo), compondo geometricamente — somar 12 variações mensais NÃO dá a inflação do ano. | ultimo |
| dataFinal | Yes | Data final (yyyy-MM-dd ou dd/MM/yyyy) | |
| frequencia | No | Opcional: reamostra a série para esta frequência antes de responder (só agrega para períodos MAIORES; pedir frequência mais fina que a da série é recusado). Útil para comparar séries de periodicidades diferentes. | |
| dataInicial | Yes | Data inicial (yyyy-MM-dd ou dd/MM/yyyy) |
Output Schema
| Name | Required | Description |
|---|---|---|
| base | Yes | Mês em cujos preços os valores reais estão expressos |
| dados | Yes | Observações com o valor publicado e o valor em moeda constante |
| serie | Yes | Identificação da série nominal |
| avisos | No | Ressalvas sobre cobertura do índice ou mês base substituído |
| periodo | Yes | |
| chunking | No | Presente quando a consulta foi fatiada em várias requisições à origem, por causa do limite de 10 anos por janela em séries diárias. As fatias são fundidas e ordenadas antes de responder. |
| deflator | Yes | Índice de preços usado e o intervalo que ele cobre |
| variacao | Yes | Variação percentual do período em moeda corrente ao lado da variação em moeda constante — é a comparação que a tool existe para entregar. `null` quando há menos de duas observações deflacionadas. |
| derivacao | Yes | Origem dos números calculados: o que é derivado, por qual motor e com quais convenções |
| provenance | Yes | Bloco de proveniência (contrato v1.1): fonte, URL, competência, extração, diagnóstico de origem, citação e licença |
| attribution | Yes | URLs canônicas das fontes desta resposta (lista de atribuição) |
| harmonizacao | No | Presente quando `frequencia` foi informada: descreve a reamostragem aplicada. Valor DERIVADO — calculado por este servidor, não publicado pelo Banco Central. |
| janelaAplicada | No | Presente quando o período pedido estava aberto numa série diária e o servidor aplicou uma janela própria (a origem recusa janela aberta em série diária com HTTP 406). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes far beyond the annotations by disclosing source behavior (public SGS API, no auth), retry logic (up to 3 attempts with exponential backoff), error semantics (404 meaning, Portuguese error messages), limitations (number-index not published, reconstructed index verified against source), and null-handling for out-of-coverage dates. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but every block earns its place: purpose is front-loaded, then usage rules, parameters, return shape, source limitations, and error handling. It uses scannable labels ('Quando usar', 'Quando NÃO usar', 'Retorna', 'Comportamento') and avoids fluff. The length matches the tool's complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 7-parameter tool with an output schema, the description is remarkably complete: required inputs, optional behavior, output structure, edge cases, failure semantics, and source constraints are all covered. Even though an output schema exists, the summary of return fields adds clarity. Nothing critical is missing for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Even though schema coverage is 100%, the description adds valuable parameter-level meaning: clarifies `indice` with the internal codes (IPCA 433, INPC 188, IGP-M 189), explains `mesBase` as 'em reais de hoje' when absent, defines `agregacao` semantics including the geometric composition warning for `acumulada`, and describes `frequencia` re-sampling restrictions. This is substantive enrichment, not repetition.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a precise verb-resource pair: 'Converte uma série NOMINAL do BCB em valores REAIS (moeda constante), descontando a inflação do período'. It clarifies the conceptual output with a concrete example, and differentiates itself from bcb_serie_valores for raw nominal series. This is more than enough for an agent to know what the tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage guidance is explicit and well-structured: 'Quando usar' and 'Quando NÃO usar' sections clearly state the intended case (comparing reais from different periods) and exclusions (percentage/index/rate series). It even names the sibling alternative, bcb_serie_valores, for the raw nominal series. This leaves no ambiguity about when to invoke it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bcb_focus_expectativasExpectativas de mercado (Focus)ARead-onlyIdempotentInspect
Consulta as expectativas de mercado do boletim Focus para UM indicador, com o horizonte como parâmetro: mensal, trimestral, anual, inflação nos próximos 12 meses e nos próximos 24 meses. Devolve média, mediana, desvio padrão, mínimo, máximo e número de respondentes por data de coleta. Quando usar: para expectativa de IPCA, IGP-M, PIB, câmbio e afins em um mês, trimestre ou ano específico, ou para a inflação rolante. Quando NÃO usar: para expectativa de Selic por reunião do Copom use bcb_focus_selic; para o valor REALIZADO (não esperado) use bcb_serie_valores. Regras do contrato: referencia é obrigatória nos horizontes de calendário (mensal, trimestral, anual) e recusada nos rolantes; suavizada só vale nos rolantes; top5: true traz as expectativas das cinco instituições mais assertivas e existe nos cinco horizontes. Se não souber o texto exato do indicador ou da referência, chame bcb_focus_referencias primeiro — o conjunto de indicadores MUDA por horizonte, e pedir um indicador no horizonte em que a fonte não o publica é a causa mais comum de resposta vazia. Retorna: indicador, horizonte, base (consenso|top5), filtro (referencia, dataInicial, dataFinal, janelaPadrao, suavizada), totalRegistros, expectativas (array normalizado), urlConsulta, consultadoEm e, quando aplicável, observacao. Sem datas, a janela padrão é de 30 dias. Fonte: Expectativas de Mercado (Focus) do Banco Central do Brasil, via Olinda OData. O Focus é vintage por construção: coletadoEm é a data da coleta e referencia é o alvo da expectativa — a mesma referência aparece em muitas coletas, e é isso que permite ver a expectativa mudar no tempo. A contagem é feita do nosso lado porque a fonte ignora $count; e o filtro é obrigatório por construção porque consulta sem filtro não completa na origem. Microdados por instituição NÃO são expostos: a fonte desativou esse recurso por risco de quebra de confidencialidade.
| Name | Required | Description | Default |
|---|---|---|---|
| top5 | No | Expectativas do Top 5 (as cinco instituições mais assertivas) em vez do consenso; existe nos cinco horizontes | |
| limite | No | Máximo de coletas a devolver (1-500, padrão 50) | |
| dataFinal | No | Fim da janela de COLETA (yyyy-MM-dd ou dd/MM/yyyy). Padrão: hoje. | |
| horizonte | Yes | mensal, trimestral e anual usam `referencia`; inflacao_12m e inflacao_24m são rolantes e não usam | |
| indicador | Yes | Indicador exatamente como a fonte publica (ex.: 'IPCA', 'IGP-M', 'PIB Total', 'Câmbio'). Veja bcb_focus_referencias. | |
| suavizada | No | Só nos horizontes rolantes: série suavizada (true) ou não suavizada (false) | |
| referencia | No | Alvo da expectativa: MM/yyyy (mensal), T/yyyy (trimestral) ou yyyy (anual). Obrigatória nesses três; proibida nos rolantes. | |
| dataInicial | No | Início da janela de COLETA (yyyy-MM-dd ou dd/MM/yyyy). Padrão: 30 dias antes do fim. |
Output Schema
| Name | Required | Description |
|---|---|---|
| base | Yes | |
| filtro | Yes | Filtro efetivamente aplicado na origem; nulo onde o parâmetro não foi informado |
| horizonte | Yes | |
| indicador | Yes | |
| observacao | No | |
| provenance | Yes | Bloco de proveniência (contrato v1.1): fonte, URL, competência, extração, diagnóstico de origem, citação e licença |
| attribution | Yes | URLs canônicas das fontes desta resposta (lista de atribuição) |
| urlConsulta | Yes | URL OData consultada, reproduzível no navegador |
| consultadoEm | Yes | Timestamp ISO 8601 da consulta |
| expectativas | Yes | |
| totalRegistros | Yes | Coletas encontradas (contagem client-side) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and non-destructive behavior, and the description adds substantial operational context: the Focus data is vintage where `coletadoEm` is the collection date and `referencia` is the target; counts are computed client-side because the source ignores `$count`; queries without a filter do not complete; and institution-level microdata are not exposed for confidentiality. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but information-dense, and every major block (purpose, when to use/not use, contract rules, return shape, source behavior) earns its place. It is front-loaded with the core purpose and usage guidance, though a slightly tighter structure with fewer parenthetical asides would make it even easier to scan.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 8 parameters, 5 horizons, complex contract rules, an output schema, and a quirky legacy source, the description is remarkably complete. It covers return fields, default 30-day window, source provenance, vintage semantics, count/filter limitations, and the confidentiality constraint, leaving no critical gap for an agent to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Even though schema description coverage is 100%, the description meaningfully extends parameter semantics with contract rules: `referencia` is required for calendar horizons and refused for rolling horizons; `suavizada` only applies to rolling horizons; `top5: true` is valid across all five horizons. It also clarifies the meaning of `referencia` versus `coletadoEm`, and explains why empty results are common when the indicator is requested in the wrong horizon.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description starts with a specific verb and resource: 'Consulta as expectativas de mercado do boletim Focus para UM indicador', and enumerates the five horizons. It also distinguishes itself by name from bcb_focus_selic and bcb_serie_valores, so an agent can tell exactly what this tool covers.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly provides 'Quando usar' and 'Quando NÃO usar' sections, naming the sibling tools bcb_focus_selic and bcb_serie_valores for excluded cases. It also instructs the agent to call bcb_focus_referencias when the exact indicator text is unknown, and warns that the valid indicator set changes by horizon.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bcb_focus_referenciasIndicadores e referências do FocusARead-onlyIdempotentInspect
Lista, POR ESCOPO, os indicadores e as referências que o Focus efetivamente publica, para você usar o texto EXATO em bcb_focus_expectativas e em bcb_focus_selic. Escopo = os cinco horizontes de bcb_focus_expectativas mais 'selic', que não é horizonte: o eixo dela é a reunião do Copom, e quem a consome é bcb_focus_selic. Cada bloco diz em tool quem o consome. Quando usar: antes da primeira consulta ao Focus, ou quando uma consulta volta vazia — a causa mais comum não é o dado faltar, é o indicador não existir NAQUELE escopo (a fonte publica 9 indicadores no mensal e 26 no anual: 'PIB Total', por exemplo, não existe no mensal) ou a referência estar num formato diferente do publicado. Quando NÃO usar: para os valores das expectativas em si. Sem escopo, consulta os seis e devolve tudo; com escopo, consulta só aquele. Retorna: escopos (para cada um: tool que o consome, formatoReferencia, exigeReferencia, temTop5, indicadores, referencias, urlConsulta e disponivel), mais indicadores e referencias como união de todos, janela, totalRegistros e consultadoEm. Se algum escopo não responder, os demais voltam mesmo assim, com falhas preenchido. Fonte: Expectativas de Mercado (Focus) do Banco Central do Brasil, via Olinda OData. O Focus é vintage por construção: coletadoEm é a data da coleta e referencia é o alvo da expectativa — a mesma referência aparece em muitas coletas, e é isso que permite ver a expectativa mudar no tempo. A contagem é feita do nosso lado porque a fonte ignora $count; e o filtro é obrigatório por construção porque consulta sem filtro não completa na origem. Microdados por instituição NÃO são expostos: a fonte desativou esse recurso por risco de quebra de confidencialidade.
| Name | Required | Description | Default |
|---|---|---|---|
| escopo | No | Restringe a descoberta a um escopo (opcional). 'selic' descobre as reuniões do Copom para bcb_focus_selic; os demais são os horizontes de bcb_focus_expectativas. | |
| indicador | No | Filtrar por um indicador específico, para ver em quais escopos ele existe (opcional) |
Output Schema
| Name | Required | Description |
|---|---|---|
| falhas | No | Escopos que não responderam nesta consulta |
| filtro | No | Filtro pedido; nulo onde o parâmetro não foi informado |
| janela | Yes | Janela de coleta observada para montar as listas |
| escopos | Yes | Um bloco por escopo: regras do contrato mais o que a fonte publica nele |
| observacao | No | |
| provenance | Yes | Bloco de proveniência (contrato v1.1): fonte, URL, competência, extração, diagnóstico de origem, citação e licença |
| attribution | Yes | URLs canônicas das fontes desta resposta (lista de atribuição) |
| indicadores | Yes | União dos indicadores de todos os escopos consultados |
| referencias | Yes | União das referências de todos os escopos consultados |
| consultadoEm | Yes | |
| totalRegistros | Yes | |
| observacaoFalhas | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Even though annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint=false, the description adds substantial behavioral detail: partial failure behavior with 'falhas', client-side counting because the source ignores $count, mandatory filtering, vintage semantics of the Focus data, and the non-exposure of microdata. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but tightly organized with bolded cues ('Quando usar', 'Quando NÃO usar', 'Retorna', 'Fonte') and front-loads the core purpose. Every sentence conveys operational or semantic information; there is no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity — multiple scopes, sibling consumers, output schema, and subtle failure modes — the description is complete. It covers return fields, fallback behavior, source limitations, and usage timing, and the output schema already exists for return structure.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and both parameters are described, but the description adds practical semantics beyond the schema: it explains that omitting 'escopo' queries all six scopes, that 'selic' is not a horizon but a Copom-meeting axis, and that 'indicador' filters to show in which scopes an indicator exists. This materially helps correct invocation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description begins with a specific verb-resource pair: 'Lista, POR ESCOPO, os indicadores e as referências que o Focus efetivamente publica'. It also immediately differentiates from siblings by stating the output is meant for use in bcb_focus_expectativas and bcb_focus_selic, making the tool's role unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides explicit 'Quando usar' and 'Quando NÃO usar' sections, stating to use it before the first Focus query or when a query returns empty, and not for expectation values. It also names the consuming sibling tools, giving clear routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bcb_focus_selicExpectativas de Selic (Focus)ARead-onlyIdempotentInspect
Consulta as expectativas de mercado do Focus para a taxa Selic, organizadas pela REUNIÃO do Copom (formato R1/2026 = 1ª reunião de 2026). Devolve média, mediana, desvio padrão, mínimo, máximo e número de respondentes por data de coleta. Quando usar: para 'o que o mercado espera da Selic na próxima reunião' ou a trajetória esperada de juros. Quando NÃO usar: para expectativa de Selic média de um ano civil use bcb_focus_expectativas com horizonte anual; para a Selic REALIZADA use bcb_serie_valores (códigos 432, 1178, 4390). É separada de bcb_focus_expectativas porque o eixo temporal é a reunião do Copom, não o calendário. Retorna: base (consenso|top5), filtro, totalRegistros, expectativas (com referencia = reunião), urlConsulta, consultadoEm e observacaoEixo. Sem datas, a janela padrão é de 30 dias. Fonte: Expectativas de Mercado (Focus) do Banco Central do Brasil, via Olinda OData. O Focus é vintage por construção: coletadoEm é a data da coleta e referencia é o alvo da expectativa — a mesma referência aparece em muitas coletas, e é isso que permite ver a expectativa mudar no tempo. A contagem é feita do nosso lado porque a fonte ignora $count; e o filtro é obrigatório por construção porque consulta sem filtro não completa na origem. Microdados por instituição NÃO são expostos: a fonte desativou esse recurso por risco de quebra de confidencialidade.
| Name | Required | Description | Default |
|---|---|---|---|
| top5 | No | Expectativas do Top 5 em vez do consenso | |
| limite | No | Máximo de coletas a devolver (1-500, padrão 50) | |
| reuniao | No | Reunião do Copom no formato R1/2026 (opcional; sem ela, todas as reuniões da janela) | |
| dataFinal | No | Fim da janela de COLETA (yyyy-MM-dd ou dd/MM/yyyy). Padrão: hoje. | |
| dataInicial | No | Início da janela de COLETA (yyyy-MM-dd ou dd/MM/yyyy). Padrão: 30 dias antes do fim. |
Output Schema
| Name | Required | Description |
|---|---|---|
| base | Yes | |
| filtro | Yes | Filtro efetivamente aplicado; `reuniao` é nula quando não foi informada |
| observacao | No | |
| provenance | Yes | Bloco de proveniência (contrato v1.1): fonte, URL, competência, extração, diagnóstico de origem, citação e licença |
| attribution | Yes | URLs canônicas das fontes desta resposta (lista de atribuição) |
| urlConsulta | Yes | |
| consultadoEm | Yes | |
| expectativas | Yes | |
| observacaoEixo | No | |
| totalRegistros | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the read-only/idempotent annotations, the description discloses the vintage data model (coletadoEm vs referencia), the count being handled client-side because the source ignores $count, the mandatory filter requirement, and the absence of microdata due to confidentiality. These are critical behavioral traits that annotations do not convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but every sentence earns its place: purpose, usage, return fields, default, source, and caveats. It is front-loaded with purpose and usage, and the structure flows logically from what to when to how. No redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the 5 optional parameters and an output schema, the description covers all necessary aspects: selection criteria, alternatives, return fields, default behavior, data source, and important constraints (vintage, count, filter, confidentiality). An agent has everything needed to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with descriptive param definitions, so the baseline is 3. The description adds context beyond the schema: it explains the R1/2026 meeting format, the default 30-day window, and clarifies that dataInicial/dataFinal refer to collection dates, which reinforces the meaning of the time axis. This is meaningful added value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific resource (Focus market expectations for the Selic rate), the verb (consulta), and the organizing axis (Copom meeting). It explicitly distinguishes itself from the sibling bcb_focus_expectativas by the temporal axis, so an agent can select the correct tool without ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides explicit 'Quando usar' and 'Quando NÃO usar' conditions, naming bcb_focus_expectativas for annual average expectations and bcb_serie_valores for realized Selic. This leaves no room for misinterpretation and directly routes to alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bcb_indicadores_atuaisIndicadores econômicos atuaisARead-onlyIdempotentInspect
Atalho que retorna, em uma única chamada, o valor mais recente dos principais indicadores da economia brasileira: Selic (meta do Copom), IPCA mensal, IPCA acumulado 12 meses, dólar comercial de venda (série diária) e IBC-Br. Não recebe parâmetros. Quando usar: para um panorama econômico rápido. Quando NÃO usar: para qualquer outra série, para dados históricos ou para escolher o período use bcb_serie_ultimos ou bcb_serie_valores. Retorna: consultadoEm (timestamp ISO 8601) e indicadores (array com indicador, codigo, data, valor — ou erro no item). Resiliente: cada indicador é buscado de forma independente, então a falha de um não derruba os demais. Comportamento: consome a API pública SGS do Banco Central do Brasil — sem autenticação, chave de API ou cadastro, e sem limite de requisições divulgado (uso é best-effort). Em falha transitória ou timeout a chamada é repetida automaticamente (até 3 tentativas, backoff exponencial); persistindo o erro, retorna isError: true com mensagem em português (HTTP 404 = série inexistente ou sem dados no período solicitado). O resultado vem como JSON tanto em texto quanto em structuredContent (conforme o outputSchema); datas no formato dd/MM/yyyy e valores numéricos (ponto decimal).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| provenance | Yes | Bloco de proveniência (contrato v1.1): fonte, URL, competência, extração, diagnóstico de origem, citação e licença |
| attribution | Yes | URLs canônicas das fontes desta resposta (lista de atribuição) |
| indicadores | Yes | Lista de indicadores com seus valores mais recentes |
| consultadoEm | Yes | Timestamp ISO 8601 da consulta |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark readOnly/idempotent/non-destructive, and the description adds independent per-indicator fetching, automatic retries with exponential backoff, best-effort rate-limit behavior, no authentication requirements, and specific error semantics including 404 mapping. This is strong behavioral disclosure beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but tightly organized in labeled segments, with the core purpose and list of indicators front-loaded before usage, return, and behavior details. Each sentence adds information not implied elsewhere, and the when-to-use/not-to-use guidance is placed prominently.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter, read-only tool with an output schema, the description covers the main use case, exclusions, sibling alternatives, output field names, date/value formats, failure resilience, retry logic, authentication status, and error response contract. An agent has everything needed to invoke and interpret the call correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and the schema already covers this fully, so the description only needs to confirm that no input is required, which it does ('Não recebe parâmetros'). It adds the contextual meaning that the call is a consolidated one-call shortcut, but there is no parameter surface to elaborate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states that the tool returns the most recent values of a fixed set of Brazilian economic indicators in one call, naming Selic, IPCA, dollar, and IBC-Br. It distinguishes itself from siblings by saying when not to use it and pointing to bcb_serie_ultimos/bcb_serie_valores.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives an explicit 'Quando usar' condition (quick economic overview) and an explicit 'Quando NÃO usar' condition plus named alternative tools for other series, historical data, or period selection. This leaves no ambiguity about when the tool should be selected.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bcb_serie_metadadosMetadados da sérieARead-onlyIdempotentInspect
Obtém a descrição de UMA série do BCB (nome, periodicidade, categoria, fonte e último valor), sem trazer a série histórica. Quando usar: para confirmar o que uma série representa e com que frequência é publicada antes de consultar os dados. Quando NÃO usar: para os valores em si use bcb_serie_valores ou bcb_serie_ultimos. Retorna: codigo, nome, periodicidade, categoria, fonte, ultimoValor e URLs diretas da API (urlConsulta, urlUltimos10). Limite da fonte: a API do SGS NÃO publica endpoint de metadados por série — não há unidade de medida disponível. Nome e categoria vêm do catálogo curado do servidor (135 séries verificadas contra a origem) e, fora dele, a periodicidade é inferida do espaçamento das observações, sinalizada por periodicidadeInferida. Comportamento: consome a API pública SGS do Banco Central do Brasil — sem autenticação, chave de API ou cadastro, e sem limite de requisições divulgado (uso é best-effort). Em falha transitória ou timeout a chamada é repetida automaticamente (até 3 tentativas, backoff exponencial); persistindo o erro, retorna isError: true com mensagem em português (HTTP 404 = série inexistente ou sem dados no período solicitado). O resultado vem como JSON tanto em texto quanto em structuredContent (conforme o outputSchema); datas no formato dd/MM/yyyy e valores numéricos (ponto decimal).
| Name | Required | Description | Default |
|---|---|---|---|
| codigo | Yes | Código da série no SGS/BCB |
Output Schema
| Name | Required | Description |
|---|---|---|
| nome | Yes | Nome da série |
| fonte | Yes | Fonte dos dados |
| codigo | Yes | Código da série no SGS/BCB |
| categoria | No | Categoria econômica |
| observacao | No | Observação sobre a origem dos metadados |
| provenance | Yes | Um bloco por procedência que contribuiu com esta resposta (contrato v1.1; licenças nunca se fundem) |
| attribution | Yes | URLs canônicas das fontes desta resposta (lista de atribuição) |
| ultimoValor | No | Última observação disponível |
| urlConsulta | No | URL da API do BCB para consulta completa |
| urlUltimos10 | No | URL da API do BCB para os últimos 10 valores |
| periodicidade | No | Periodicidade da série |
| periodicidadeInferida | No | Presente e true quando a periodicidade foi inferida do espaçamento das observações |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark read-only/idempotent, and the description adds substantial context: no auth or API key, no published rate limit, automatic retries with backoff, Portuguese error messages, and the 404 meaning. It also discloses the metadata limitation (no unit, inferred periodicity).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Although longer than minimal, the description is organized into clear sections and every sentence adds information not present in the schema or annotations. The main purpose and exclusions are front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers return fields, output format, date format, error behavior, retries, authentication, and source limitations. With an output schema present, nothing needed to invoke the tool correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single parameter codigo is already fully described in the schema ('Código da série no SGS/BCB'), so the description does not need to add parameter semantics. With 100% schema coverage, the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: it obtains the description of one BCB series (name, frequency, category, source, last value) and explicitly excludes the historical series. It distinguishes itself from value-returning siblings by naming what it does not do.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It includes explicit 'Quando usar' and 'Quando NÃO usar' sections, directing the agent to bcb_serie_valores or bcb_serie_ultimos for actual values. This is exactly the when/when-not guidance required.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bcb_series_popularesListar séries popularesARead-onlyIdempotentInspect
Lista o catálogo interno curado de 135 séries econômicas do BCB com seus códigos, agrupadas por categoria (Juros, Inflação, Câmbio, Atividade Econômica, Emprego, Fiscal, Setor Externo, Crédito, Agregados Monetários, Poupança); aceita filtro por categoria. Quando usar: para navegar/descobrir as séries disponíveis por tema. Quando NÃO usar: para busca por palavra-chave use bcb_buscar_serie; esta ferramenta não busca valores. Retorna: totalSeries, categorias (nº de categorias) e series — objeto agrupado por categoria quando sem filtro, ou array plano quando filtrado por categoria; cada item tem codigo, nome, categoria, periodicidade e fonteNome. Catálogo local: não faz chamada de rede. Procedência: fonteNome = 'portal' quando o nome é transcrito do dataset da série no Portal de Dados Abertos do BCB (82 séries, com unidade), e 'medido' quando a série não tem dataset lá — nesse caso o nome é herdado e o que foi verificado contra a origem é a periodicidade e a ordem de grandeza. Expectativas do Focus NÃO estão aqui: use bcb_focus_expectativas.
| Name | Required | Description | Default |
|---|---|---|---|
| categoria | No | Filtrar por categoria: Juros, Inflação, Câmbio, Atividade Econômica, Emprego, Fiscal, Setor Externo, Crédito, Agregados Monetários, Poupança, Índices de Mercado, Expectativas |
Output Schema
| Name | Required | Description |
|---|---|---|
| series | Yes | Séries encontradas. Objeto agrupado por categoria quando sem filtro; array plano quando filtrado por categoria. |
| categorias | Yes | Quantidade de categorias distintas |
| observacao | No | Dica de uso |
| provenance | Yes | Bloco de proveniência (contrato v1.1): fonte, URL, competência, extração, diagnóstico de origem, citação e licença |
| attribution | Yes | URLs canônicas das fontes desta resposta (lista de atribuição) |
| totalSeries | Yes | Quantidade total de séries retornadas |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the safe-read annotations, the description adds meaningful behavioral context: the catalog is local and makes no network call, and provenance is detailed through `fonteNome` with 'portal' vs 'medido' distinctions. It also transparently discloses verification limits for non-portal series and the exact return structure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is longer than average but front-loads the core purpose and usage guidance before return details and provenance. Most sentences earn their place, though the provenance section is somewhat verbose and could be tightened without losing essential information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a catalog-listing tool with an output schema and safety annotations, the description covers everything an agent needs: scope, filtering behavior, return shape, local/no-network behavior, provenance meaning, and exclusions. No critical call-time decision is left unanswered.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already documents the `categoria` parameter and its allowed values at 100% coverage, so the baseline is 3. The description adds extra semantic value by explaining how the parameter changes the output shape: grouped object without filter, flat array when filtered, which is not present in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Lista o catálogo interno curado de 135 séries econômicas do BCB com seus códigos', and clarifies grouping by category and optional filtering. It also distinguishes itself from siblings by explicitly stating it does not search values and does not contain Focus expectations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit 'Quando usar' and 'Quando NÃO usar' guidance, routing keyword searches to bcb_buscar_serie and Focus-related queries to bcb_focus_expectativas. This leaves no ambiguity about when to select this tool over its siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bcb_serie_ultimosÚltimos valores da sérieARead-onlyIdempotentInspect
Obtém as últimas N observações de UMA série temporal do BCB (mais recentes primeiro a partir do fim da série). Quando usar: para ver os dados mais recentes sem precisar calcular datas (ex.: últimos 12 meses do IPCA). Quantidade entre 1 e 1000 (padrão 10). Quando NÃO usar: para um intervalo de datas ou o histórico completo use bcb_serie_valores. Retorna: objeto serie, totalRegistros e dados (array de {data, valor}); sem dados, totalRegistros = 0 com observacao. Acima de 20: o endpoint nativo do BCB rejeita N > 20 em qualquer periodicidade, então o servidor descobre a periodicidade da série e busca por janela de datas, devolvendo os N últimos pontos. Comportamento: consome a API pública SGS do Banco Central do Brasil — sem autenticação, chave de API ou cadastro, e sem limite de requisições divulgado (uso é best-effort). Em falha transitória ou timeout a chamada é repetida automaticamente (até 3 tentativas, backoff exponencial); persistindo o erro, retorna isError: true com mensagem em português (HTTP 404 = série inexistente ou sem dados no período solicitado). O resultado vem como JSON tanto em texto quanto em structuredContent (conforme o outputSchema); datas no formato dd/MM/yyyy e valores numéricos (ponto decimal).
| Name | Required | Description | Default |
|---|---|---|---|
| codigo | Yes | Código da série no SGS/BCB | |
| quantidade | No | Quantidade de valores a retornar (1-1000, padrão: 10). A API do BCB tem teto de 20 no endpoint nativo; acima disso o servidor busca por janela de datas e devolve os N últimos. |
Output Schema
| Name | Required | Description |
|---|---|---|
| dados | Yes | Observações mais recentes |
| serie | Yes | Identificação da série temporal |
| chunking | No | Presente quando a consulta foi fatiada em várias requisições à origem, por causa do limite de 10 anos por janela em séries diárias. As fatias são fundidas e ordenadas antes de responder. |
| observacao | No | Mensagem informativa (ex.: quando não há dados) |
| provenance | Yes | Bloco de proveniência (contrato v1.1): fonte, URL, competência, extração, diagnóstico de origem, citação e licença |
| attribution | Yes | URLs canônicas das fontes desta resposta (lista de atribuição) |
| totalRegistros | Yes | Quantidade de observações retornadas |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true, openWorldHint=true, idempotentHint=true, and destructiveHint=false, but the description adds substantial behavioral context beyond these: the native BCB API limit of 20 and the server's workaround for larger N, automatic retry logic (up to 3 attempts with exponential backoff), error response shape with isError flag and HTTP 404 mapping, and output format details (JSON, dd/MM/yyyy dates, decimal point). This enriches the agent's understanding of side effects and failure modes well beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is fairly long but well-structured with clear sections (purpose, usage, return info, behavior, error handling). Every sentence carries necessary information—there is no filler. The length is justified by the complexity of the tool's behavior (limit handling, retries, error responses). It is front-loaded with the core purpose, making it easy to scan.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with only 2 parameters, an output schema, and rich annotations, the description covers all essential aspects: when to use, when not, parameter limits, native API constraints, retry behavior, error handling, and output structure. The agent has everything needed to call this tool correctly and interpret results, including edge cases like empty data (totalRegistros=0 with observacao).
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Both parameters are already fully described in the schema (100% coverage), so the baseline is 3. The description adds significant extra context for 'quantidade' by explaining the native endpoint cap of 20 and the server-side workaround that fetches by date window to return the N most recent points. This is not present in the schema and is crucial for correct usage, raising the score above baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Obtém as últimas N observações de UMA série temporal do BCB', clearly stating the scope and distinguishing it from the sibling bcb_serie_valores by noting it returns the most recent values without date calculation. The purpose is unambiguous and immediately differentiates from alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states 'Quando usar' (when to use) with a concrete example (últimos 12 meses do IPCA) and 'Quando NÃO usar' (when not to use), naming the exact alternative tool bcb_serie_valores for date ranges or full history. This provides clear selection criteria for the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bcb_serie_valoresConsultar valores da sérieARead-onlyIdempotentInspect
Consulta o histórico de valores de UMA série temporal do BCB pelo código SGS, opcionalmente limitado por um intervalo de datas (dataInicial/dataFinal). Quando usar: para obter a série histórica completa ou uma janela de datas específica. Quando NÃO usar: para apenas os pontos mais recentes use bcb_serie_ultimos; para a variação percentual use bcb_variacao; para comparar várias séries use bcb_comparar; se não souber o código, descubra-o antes com bcb_buscar_serie ou bcb_series_populares. Retorna: objeto serie (codigo, nome, categoria, periodicidade), totalRegistros, periodoInicial, periodoFinal e dados (array de {data, valor}); quando não há dados, totalRegistros = 0 e uma observacao explicativa. Períodos longos: a API do BCB limita séries DIÁRIAS a 10 anos por consulta e recusa janela aberta (HTTP 406). Isso é tratado automaticamente — a janela é fatiada em requisições de até 3 anos e o resultado vem fundido e ordenado, com chunking na resposta dizendo quantas janelas foram usadas; se o período pedido estava aberto numa série diária, janelaAplicada diz qual janela foi usada e por quê. Harmonização: frequencia (mensal|trimestral|anual) reamostra a série antes de responder, com a convenção escolhida em agregacao; a resposta traz harmonizacao com derived: true e a nota do cálculo. Comportamento: consome a API pública SGS do Banco Central do Brasil — sem autenticação, chave de API ou cadastro, e sem limite de requisições divulgado (uso é best-effort). Em falha transitória ou timeout a chamada é repetida automaticamente (até 3 tentativas, backoff exponencial); persistindo o erro, retorna isError: true com mensagem em português (HTTP 404 = série inexistente ou sem dados no período solicitado). O resultado vem como JSON tanto em texto quanto em structuredContent (conforme o outputSchema); datas no formato dd/MM/yyyy e valores numéricos (ponto decimal).
| Name | Required | Description | Default |
|---|---|---|---|
| codigo | Yes | Código da série no SGS/BCB (ex: 433 para IPCA mensal, 11 para Selic) | |
| agregacao | No | Como agregar os valores de cada período quando `frequencia` é informada. `ultimo` (padrão) serve a nível de preço, taxa e índice; `soma` a fluxo; `acumulada` a séries que JÁ SÃO variação percentual (IPCA mensal, por exemplo), compondo geometricamente — somar 12 variações mensais NÃO dá a inflação do ano. | ultimo |
| dataFinal | No | Data final no formato yyyy-MM-dd ou dd/MM/yyyy (opcional) | |
| frequencia | No | Opcional: reamostra a série para esta frequência antes de responder (só agrega para períodos MAIORES; pedir frequência mais fina que a da série é recusado). Útil para comparar séries de periodicidades diferentes. | |
| dataInicial | No | Data inicial no formato yyyy-MM-dd ou dd/MM/yyyy (opcional) |
Output Schema
| Name | Required | Description |
|---|---|---|
| dados | Yes | Observações históricas |
| serie | Yes | Identificação da série temporal |
| chunking | No | Presente quando a consulta foi fatiada em várias requisições à origem, por causa do limite de 10 anos por janela em séries diárias. As fatias são fundidas e ordenadas antes de responder. |
| observacao | No | Mensagem informativa (ex.: quando não há dados) |
| provenance | Yes | Bloco de proveniência (contrato v1.1): fonte, URL, competência, extração, diagnóstico de origem, citação e licença |
| attribution | Yes | URLs canônicas das fontes desta resposta (lista de atribuição) |
| harmonizacao | No | Presente quando `frequencia` foi informada: descreve a reamostragem aplicada. Valor DERIVADO — calculado por este servidor, não publicado pelo Banco Central. |
| periodoFinal | No | Data da última observação |
| janelaAplicada | No | Presente quando o período pedido estava aberto numa série diária e o servidor aplicou uma janela própria (a origem recusa janela aberta em série diária com HTTP 406). |
| periodoInicial | No | Data da primeira observação |
| totalRegistros | Yes | Quantidade de observações retornadas |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint=false. The description greatly expands on them: it discloses the lack of authentication, best-effort rate limits, automatic retry with backoff, chunking behavior for long daily windows, harmonization conventions, and error mapping (404, 406). No contradiction with annotations is present.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Long but information-dense, with clear topical sections ('Quando usar', 'Quando NÃO usar', 'Retorna', 'Períodos longos', 'Harmonização', 'Comportamento'). The purpose and routing guidance are front-loaded; every later sentence covers a behavioral or response detail essential for correct use. The length is justified by the tool's complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity and the presence of a full output schema, the description still covers all necessary invocation context: response shape, date formats, error handling, retry policy, API constraints, harmonization, and sibling routing. An agent has everything needed to call the tool correctly and interpret its result.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and schema descriptions are already detailed, so the baseline is 3. The description adds meaningful operational semantics beyond the schema: it explains how dataInicial/dataFinal interact with the BCB API's daily-series limit (10-year cap, open-window refusal) and how the tool auto-chunks into 3-year requests. This gives the agent a real operational understanding it could not get from the schema alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States the specific action ('consulta o histórico de valores'), the resource (série temporal do BCB pelo código SGS), and the optional date-window scoping. The 'Quando NÃO usar' section explicitly contrasts this tool with bcb_serie_ultimos, bcb_variacao, bcb_comparar, and bcb_buscar_serie, so an agent can reliably distinguish it from siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit 'Quando usar' (full history or date window) and 'Quando NÃO usar' instructions naming five sibling tools and the conditions that route to them. This is the strongest possible guidance: the agent knows exactly when to pick this tool over alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bcb_variacaoVariação percentual da sérieARead-onlyIdempotentInspect
Calcula a variação percentual de UMA série no período, mais estatísticas descritivas. Para série de NÍVEL (dólar, Selic, dívida, produção) é a variação entre o primeiro e o último ponto; para série que JÁ É uma variação por período (IPCA 433, INPC 188, IGP-M 189 e demais índices de preço mensais do catálogo; Selic/CDI acumulados no mês 4390/4391; rentabilidade da poupança 25/195) é o ACUMULADO do período por encadeamento — "quanto o IPCA acumulou em 2024" ou "quanto a Selic rendeu em 2024" é esta tool. O campo analise.metodo diz qual das duas contas foi feita; código fora do catálogo curado é tratado como nível. Série de acumulado móvel (IPCA em 12 meses, 13522) é recusada com orientação — o valor publicado já é a resposta. O período pode ser definido por datas (dataInicial/dataFinal) OU pelos últimos N períodos (parâmetro periodos, que tem precedência e ignora as datas). Quando usar: para medir tendência/variação/acumulado de uma única série. Quando NÃO usar: para comparar várias séries use bcb_comparar; para os valores brutos use bcb_serie_valores. Requer ao menos 2 observações no período (senão retorna isError). Retorna: serie, periodo (dataInicial, dataFinal, totalPeriodos), analise (metodo, valorInicial, valorFinal, diferencaAbsoluta — nula quando encadeado —, variacaoPercentual, variacaoFormatada) e estatisticas (maximo, minimo, media, amplitude). Períodos longos são tratados automaticamente: janela diária acima de 10 anos é fatiada (a API do BCB responde 406) e periodos acima de 20 é atendido por janela de datas; chunking e janelaAplicada aparecem na resposta quando isso acontece. Comportamento: consome a API pública SGS do Banco Central do Brasil — sem autenticação, chave de API ou cadastro, e sem limite de requisições divulgado (uso é best-effort). Em falha transitória ou timeout a chamada é repetida automaticamente (até 3 tentativas, backoff exponencial); persistindo o erro, retorna isError: true com mensagem em português (HTTP 404 = série inexistente ou sem dados no período solicitado). O resultado vem como JSON tanto em texto quanto em structuredContent (conforme o outputSchema); datas no formato dd/MM/yyyy e valores numéricos (ponto decimal).
| Name | Required | Description | Default |
|---|---|---|---|
| codigo | Yes | Código da série no SGS/BCB | |
| periodos | No | Alternativa: calcular variação dos últimos N períodos (ignora datas se informado). Acima de 20 o servidor busca por janela de datas, porque o endpoint nativo do BCB tem esse teto. | |
| dataFinal | No | Data final (yyyy-MM-dd ou dd/MM/yyyy). Se não informada, usa o último valor disponível. | |
| dataInicial | No | Data inicial (yyyy-MM-dd ou dd/MM/yyyy). Se não informada, usa o primeiro valor disponível. |
Output Schema
| Name | Required | Description |
|---|---|---|
| serie | Yes | Identificação da série |
| analise | Yes | Resultado da variação no período. Em `metodo: "nivel"` é a variação entre o primeiro e o último valor; em `metodo: "encadeamento"` (série que já é variação por período, como IPCA e IGP-M mensais) é o acumulado composto de todas as observações |
| periodo | Yes | Janela temporal analisada |
| chunking | No | Presente quando a consulta foi fatiada em várias requisições à origem, por causa do limite de 10 anos por janela em séries diárias. As fatias são fundidas e ordenadas antes de responder. |
| derivacao | Yes | Origem dos números calculados: o que é derivado, por qual motor e com quais convenções |
| provenance | Yes | Bloco de proveniência (contrato v1.1): fonte, URL, competência, extração, diagnóstico de origem, citação e licença |
| attribution | Yes | URLs canônicas das fontes desta resposta (lista de atribuição) |
| estatisticas | Yes | Estatísticas descritivas dos valores no período |
| janelaAplicada | No | Presente quando o período pedido estava aberto numa série diária e o servidor aplicou uma janela própria (a origem recusa janela aberta em série diária com HTTP 406). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false. The description adds substantial behavioral context: the chaining method for already-variation series, automatic slicing of windows over 10 years (BCB API returns 406), periodos >20 handled by date window, retry with exponential backoff up to 3 attempts, isError semantics, HTTP 404 meaning, and no-auth best-effort API consumption. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long, but the tool is genuinely complex with two calculation methods, edge cases, and error scenarios. It is front-loaded with the core purpose and usage guidance, then proceeds logically through methodology, behavior, and response. No filler sentences, and every section earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with this complexity, the description is remarkably complete: method selection rules, period definition precedence, long-period handling, authentication requirements, retry/error behavior, and a summary of the response structure. An output schema exists, so return values are already structured, and the description still supplements it. Nothing an agent needs to invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description goes beyond the schema by clarifying that periodos takes precedence and ignores dates, dataInicial/dataFinal default to first/last available values when omitted, and periodos >20 triggers a different fetch mechanism. These details materially improve parameter understanding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Starts with a specific verb and resource: 'Calcula a variação percentual de UMA série no período, mais estatísticas descritivas.' It explicitly limits scope to a single series and names sibling alternatives (bcb_comparar for multi-series, bcb_serie_valores for raw values), making differentiation from siblings immediate.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Contains explicit 'Quando usar' and 'Quando NÃO usar' sections with named alternatives. It also gives decision criteria for when this tool handles accumulated indices (IPCA, Selic, etc.) versus level series, so an agent can decide correctly without guessing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fetchDocumento para Deep ResearchARead-onlyIdempotentInspect
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 Banco Central do Brasil time series (SGS: interest rates, inflation, exchange rates, credit, fiscal and external sector — the curated catalog plus the open data portal index) catalog. Only ids returned by search are valid; an unknown id returns an error.
The bcb_* tools remain the tools for data queries.
Behavior: read-only and idempotent — a live GET against the public source when the document needs it.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Identificador de um documento devolvido por `search` |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | Identificador único do documento no servidor; é o que `fetch` recebe |
| url | Yes | URL pública canônica do documento — a citação do ChatGPT depende dela |
| text | Yes | Conteúdo integral do documento, legível (Markdown) |
| title | Yes | Título legível do documento |
| metadata | No | Pares chave/valor adicionais sobre o documento (tipo, fonte, período…) |
| provenance | Yes | Um bloco por procedência que contribuiu com esta resposta (contrato v1.1; licenças nunca se fundem) |
| attribution | Yes | URLs canônicas das fontes desta resposta (lista de atribuição) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and non-destructive behavior; the description adds value by explaining the live GET behavior against the public source and the error condition for unknown ids. It also clarifies the output format, which is useful beyond the annotation metadata.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core behavior and output shape, then adds context about the catalog and sibling tools. It is somewhat dense but each sentence contributes useful information, and the structure is logical: behavior, context, exclusions, and behavior note.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter read-only tool with rich annotations and an output schema, the description covers everything needed to invoke it correctly: where the id comes from, what the output contains, error behavior, and relationship to sibling tools. No critical gap remains.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already documents `id` as an identifier from `search` with 100% coverage, so the baseline is 3. The description adds meaningful behavioral semantics: only valid search-returned ids work and unknown ids error, which helps the agent understand the parameter's constraints beyond the schema text.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Returns the full document for an id obtained from `search`', and specifies the exact output shape. It also distinguishes itself from sibling tools by positioning itself as the companion of `search` and explicitly stating that `bcb_*` tools are for data queries.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear usage context: use after `search`, only ids returned by `search` are valid, and unknown ids produce an error. It also provides an exclusion by directing data-query needs to the `bcb_*` tools, so an agent knows when not to call this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
searchBusca para Deep ResearchARead-onlyIdempotentInspect
Searches the Banco Central do Brasil time series (SGS: interest rates, inflation, exchange rates, credit, fiscal and external sector — the curated catalog plus the open data portal index) catalog and returns up to 10 matching documents as { id, title, url }, ordered by relevance (an empty list means nothing matched).
This tool exists for the OpenAI Deep Research contract: ChatGPT deep research, company knowledge and research workflows over the Responses API require exactly the tools search and fetch. Pass one of the returned ids to fetch to read the document.
For direct questions and for data (values, series, rankings) prefer the bcb_* tools, which return the actual data with provenance — this is a catalog index, not a data query.
Query: natural language or keywords, Portuguese or English; accents and case are ignored.
Behavior: read-only and idempotent — the catalog comes from the public source and is cached in memory.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Termos de busca em linguagem natural ou palavras-chave (acentos e caixa são ignorados) |
Output Schema
| Name | Required | Description |
|---|---|---|
| results | Yes | Documentos encontrados, em ordem de relevância |
| provenance | Yes | Um bloco por procedência que contribuiu com esta resposta (contrato v1.1; licenças nunca se fundem) |
| attribution | Yes | URLs canônicas das fontes desta resposta (lista de atribuição) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only and idempotent safety, and the description adds value by specifying the 10-result cap, relevance ordering, empty-list meaning, language/case behavior, and in-memory caching of the public catalog. It does not contradict the annotations and provides useful operational detail beyond them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core search behavior and uses short labelled paragraphs for contract role, routing, query semantics, and behavior. It is slightly repetitive in places (read-only/idempotent is repeated from annotations, and 'catalog index, not a data query' appears twice), but overall each section has a clear role.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter, read-only search tool with annotations covering safety and an output schema present, the description is complete. It covers result format and limit, empty-result behavior, relationship to sibling tools, and the follow-up step with `fetch`; nothing needed to invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 100% schema coverage, the description did not need to repeat the query parameter, but it adds meaning by clarifying that the query accepts natural language or keywords and that both Portuguese and English are supported, with accents and case ignored. This goes beyond the schema's own description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Searches the Banco Central do Brasil time series ... catalog' and returns up to 10 documents as { id, title, url }. It explicitly contrasts itself with bcb_* data tools and positions itself as the catalog-search companion to `fetch`, so an agent can distinguish it from siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit routing: it says this is for Deep Research workflows with `search`/`fetch`, and 'For direct questions and for data ... prefer the `bcb_*` tools'. It also instructs to pass returned ids to `fetch`, leaving no ambiguity about when to choose this tool.
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.
17 tool updates
v1.15.0- Changed
bcb_buscar_serie9 fields changed- changed
Output schema / properties / provenance / descriptionPrevious value: -"Um bloco por procedência que contribuiu com esta resposta (contrato v1.0; licenças nunca se fundem)"New value: +"Um bloco por procedência que contribuiu com esta resposta (contrato v1.1; licenças nunca se fundem)" - changed
Output schema / properties / provenance / items / descriptionPrevious value: -"Bloco de proveniência (contrato v1.0): fonte, URL, competência, extração e licença"New value: +"Bloco de proveniência (contrato v1.1): fonte, URL, competência, extração, diagnóstico de origem, citação e licença" - changed
Output schema / properties / provenance / items / properties / citation / descriptionPrevious value: -"Citação pronta para uso"New value: +"Citação/atribuição pronta para uso" - changed
Output schema / properties / provenance / items / properties / data_vintage / descriptionPrevious value: -"Competência do dado segundo a fonte; null quando a fonte não expõe"New value: +"Competência/vintage do dado segundo a fonte; null quando a fonte não expõe" - changed
Output schema / properties / provenance / items / properties / license / descriptionPrevious value: -"Regime legal do dado"New value: +"Regime legal do dado (id SPDX quando há, senão o nome da licença)" - added
Output schema / properties / provenance / items / properties / retrievalAdded value: +{ + "description": "Diagnóstico de origem da chamada: como o dado foi obtido. Medição real do servidor; unstable=true pede ao agente que trate o dado como obtido com dificuldade; null quando o servidor não mede", + "oneOf": [ + { + "additionalProperties": false, + "description": "Diagnóstico de origem da chamada: como o dado foi obtido. Medição real do servidor; unstable=true pede ao agente que trate o dado como obtido com dificuldade", + "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", + "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)", + "minimum": 1, + "type": "integer" + }, + "requests": { + "description": "Idas distintas à origem que compõem esta resposta (fatias, páginas)", + "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" + } + ] +} - changed
Output schema / properties / provenance / items / properties / retrieved_at / descriptionPrevious value: -"Instante REAL da extração na origem (ISO-8601, horário de Brasília). Resposta servida de cache mantém o instante do fetch ORIGINAL, que é a data de extração relevante."New value: +"Instante REAL da extração na origem (ISO-8601, fuso do servidor). Resposta servida de cache mantém o instante do fetch original, que é a data de extração relevante" - changed
Output schema / properties / provenance / items / properties / source_url / descriptionPrevious value: -"URL canônica que reproduz a consulta"New value: +"URL canônica que reproduz a consulta na fonte" - changed
Output schema / properties / provenance / items / requiredPrevious value: -[ - "source", - "source_url", - "data_vintage", - "retrieved_at", - "citation", - "license" -]New value: +[ + "source", + "source_url", + "data_vintage", + "retrieved_at", + "retrieval", + "citation", + "license" +]
- Changed
bcb_cambio_cotacao9 fields changed- changed
Output schema / properties / provenance / descriptionPrevious value: -"Um bloco por procedência que contribuiu com esta resposta (contrato v1.0; licenças nunca se fundem)"New value: +"Um bloco por procedência que contribuiu com esta resposta (contrato v1.1; licenças nunca se fundem)" - changed
Output schema / properties / provenance / items / descriptionPrevious value: -"Bloco de proveniência (contrato v1.0): fonte, URL, competência, extração e licença"New value: +"Bloco de proveniência (contrato v1.1): fonte, URL, competência, extração, diagnóstico de origem, citação e licença" - changed
Output schema / properties / provenance / items / properties / citation / descriptionPrevious value: -"Citação pronta para uso"New value: +"Citação/atribuição pronta para uso" - changed
Output schema / properties / provenance / items / properties / data_vintage / descriptionPrevious value: -"Competência do dado segundo a fonte; null quando a fonte não expõe"New value: +"Competência/vintage do dado segundo a fonte; null quando a fonte não expõe" - changed
Output schema / properties / provenance / items / properties / license / descriptionPrevious value: -"Regime legal do dado"New value: +"Regime legal do dado (id SPDX quando há, senão o nome da licença)" - added
Output schema / properties / provenance / items / properties / retrievalAdded value: +{ + "description": "Diagnóstico de origem da chamada: como o dado foi obtido. Medição real do servidor; unstable=true pede ao agente que trate o dado como obtido com dificuldade; null quando o servidor não mede", + "oneOf": [ + { + "additionalProperties": false, + "description": "Diagnóstico de origem da chamada: como o dado foi obtido. Medição real do servidor; unstable=true pede ao agente que trate o dado como obtido com dificuldade", + "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", + "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)", + "minimum": 1, + "type": "integer" + }, + "requests": { + "description": "Idas distintas à origem que compõem esta resposta (fatias, páginas)", + "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" + } + ] +} - changed
Output schema / properties / provenance / items / properties / retrieved_at / descriptionPrevious value: -"Instante REAL da extração na origem (ISO-8601, horário de Brasília). Resposta servida de cache mantém o instante do fetch ORIGINAL, que é a data de extração relevante."New value: +"Instante REAL da extração na origem (ISO-8601, fuso do servidor). Resposta servida de cache mantém o instante do fetch original, que é a data de extração relevante" - changed
Output schema / properties / provenance / items / properties / source_url / descriptionPrevious value: -"URL canônica que reproduz a consulta"New value: +"URL canônica que reproduz a consulta na fonte" - changed
Output schema / properties / provenance / items / requiredPrevious value: -[ - "source", - "source_url", - "data_vintage", - "retrieved_at", - "citation", - "license" -]New value: +[ + "source", + "source_url", + "data_vintage", + "retrieved_at", + "retrieval", + "citation", + "license" +]
- Changed
bcb_cambio_moedas8 fields changed- changed
Output schema / properties / provenance / descriptionPrevious value: -"Bloco de proveniência (contrato v1.0): fonte, URL, competência, extração e licença"New value: +"Bloco de proveniência (contrato v1.1): fonte, URL, competência, extração, diagnóstico de origem, citação e licença" - changed
Output schema / properties / provenance / properties / citation / descriptionPrevious value: -"Citação pronta para uso"New value: +"Citação/atribuição pronta para uso" - changed
Output schema / properties / provenance / properties / data_vintage / descriptionPrevious value: -"Competência do dado segundo a fonte; null quando a fonte não expõe"New value: +"Competência/vintage do dado segundo a fonte; null quando a fonte não expõe" - changed
Output schema / properties / provenance / properties / license / descriptionPrevious value: -"Regime legal do dado"New value: +"Regime legal do dado (id SPDX quando há, senão o nome da licença)" - added
Output schema / properties / provenance / properties / retrievalAdded value: +{ + "description": "Diagnóstico de origem da chamada: como o dado foi obtido. Medição real do servidor; unstable=true pede ao agente que trate o dado como obtido com dificuldade; null quando o servidor não mede", + "oneOf": [ + { + "additionalProperties": false, + "description": "Diagnóstico de origem da chamada: como o dado foi obtido. Medição real do servidor; unstable=true pede ao agente que trate o dado como obtido com dificuldade", + "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", + "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)", + "minimum": 1, + "type": "integer" + }, + "requests": { + "description": "Idas distintas à origem que compõem esta resposta (fatias, páginas)", + "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" + } + ] +} - changed
Output schema / properties / provenance / properties / retrieved_at / descriptionPrevious value: -"Instante REAL da extração na origem (ISO-8601, horário de Brasília). Resposta servida de cache mantém o instante do fetch ORIGINAL, que é a data de extração relevante."New value: +"Instante REAL da extração na origem (ISO-8601, fuso do servidor). Resposta servida de cache mantém o instante do fetch original, que é a data de extração relevante" - changed
Output schema / properties / provenance / properties / source_url / descriptionPrevious value: -"URL canônica que reproduz a consulta"New value: +"URL canônica que reproduz a consulta na fonte" - changed
Output schema / properties / provenance / requiredPrevious value: -[ - "source", - "source_url", - "data_vintage", - "retrieved_at", - "citation", - "license" -]New value: +[ + "source", + "source_url", + "data_vintage", + "retrieved_at", + "retrieval", + "citation", + "license" +]
- Changed
bcb_comparar8 fields changed- changed
Output schema / properties / provenance / descriptionPrevious value: -"Bloco de proveniência (contrato v1.0): fonte, URL, competência, extração e licença"New value: +"Bloco de proveniência (contrato v1.1): fonte, URL, competência, extração, diagnóstico de origem, citação e licença" - changed
Output schema / properties / provenance / properties / citation / descriptionPrevious value: -"Citação pronta para uso"New value: +"Citação/atribuição pronta para uso" - changed
Output schema / properties / provenance / properties / data_vintage / descriptionPrevious value: -"Competência do dado segundo a fonte; null quando a fonte não expõe"New value: +"Competência/vintage do dado segundo a fonte; null quando a fonte não expõe" - changed
Output schema / properties / provenance / properties / license / descriptionPrevious value: -"Regime legal do dado"New value: +"Regime legal do dado (id SPDX quando há, senão o nome da licença)" - added
Output schema / properties / provenance / properties / retrievalAdded value: +{ + "description": "Diagnóstico de origem da chamada: como o dado foi obtido. Medição real do servidor; unstable=true pede ao agente que trate o dado como obtido com dificuldade; null quando o servidor não mede", + "oneOf": [ + { + "additionalProperties": false, + "description": "Diagnóstico de origem da chamada: como o dado foi obtido. Medição real do servidor; unstable=true pede ao agente que trate o dado como obtido com dificuldade", + "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", + "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)", + "minimum": 1, + "type": "integer" + }, + "requests": { + "description": "Idas distintas à origem que compõem esta resposta (fatias, páginas)", + "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" + } + ] +} - changed
Output schema / properties / provenance / properties / retrieved_at / descriptionPrevious value: -"Instante REAL da extração na origem (ISO-8601, horário de Brasília). Resposta servida de cache mantém o instante do fetch ORIGINAL, que é a data de extração relevante."New value: +"Instante REAL da extração na origem (ISO-8601, fuso do servidor). Resposta servida de cache mantém o instante do fetch original, que é a data de extração relevante" - changed
Output schema / properties / provenance / properties / source_url / descriptionPrevious value: -"URL canônica que reproduz a consulta"New value: +"URL canônica que reproduz a consulta na fonte" - changed
Output schema / properties / provenance / requiredPrevious value: -[ - "source", - "source_url", - "data_vintage", - "retrieved_at", - "citation", - "license" -]New value: +[ + "source", + "source_url", + "data_vintage", + "retrieved_at", + "retrieval", + "citation", + "license" +]
- Changed
bcb_correlacao8 fields changed- changed
Output schema / properties / provenance / descriptionPrevious value: -"Bloco de proveniência (contrato v1.0): fonte, URL, competência, extração e licença"New value: +"Bloco de proveniência (contrato v1.1): fonte, URL, competência, extração, diagnóstico de origem, citação e licença" - changed
Output schema / properties / provenance / properties / citation / descriptionPrevious value: -"Citação pronta para uso"New value: +"Citação/atribuição pronta para uso" - changed
Output schema / properties / provenance / properties / data_vintage / descriptionPrevious value: -"Competência do dado segundo a fonte; null quando a fonte não expõe"New value: +"Competência/vintage do dado segundo a fonte; null quando a fonte não expõe" - changed
Output schema / properties / provenance / properties / license / descriptionPrevious value: -"Regime legal do dado"New value: +"Regime legal do dado (id SPDX quando há, senão o nome da licença)" - added
Output schema / properties / provenance / properties / retrievalAdded value: +{ + "description": "Diagnóstico de origem da chamada: como o dado foi obtido. Medição real do servidor; unstable=true pede ao agente que trate o dado como obtido com dificuldade; null quando o servidor não mede", + "oneOf": [ + { + "additionalProperties": false, + "description": "Diagnóstico de origem da chamada: como o dado foi obtido. Medição real do servidor; unstable=true pede ao agente que trate o dado como obtido com dificuldade", + "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", + "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)", + "minimum": 1, + "type": "integer" + }, + "requests": { + "description": "Idas distintas à origem que compõem esta resposta (fatias, páginas)", + "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" + } + ] +} - changed
Output schema / properties / provenance / properties / retrieved_at / descriptionPrevious value: -"Instante REAL da extração na origem (ISO-8601, horário de Brasília). Resposta servida de cache mantém o instante do fetch ORIGINAL, que é a data de extração relevante."New value: +"Instante REAL da extração na origem (ISO-8601, fuso do servidor). Resposta servida de cache mantém o instante do fetch original, que é a data de extração relevante" - changed
Output schema / properties / provenance / properties / source_url / descriptionPrevious value: -"URL canônica que reproduz a consulta"New value: +"URL canônica que reproduz a consulta na fonte" - changed
Output schema / properties / provenance / requiredPrevious value: -[ - "source", - "source_url", - "data_vintage", - "retrieved_at", - "citation", - "license" -]New value: +[ + "source", + "source_url", + "data_vintage", + "retrieved_at", + "retrieval", + "citation", + "license" +]
- Changed
bcb_deflacionar8 fields changed- changed
Output schema / properties / provenance / descriptionPrevious value: -"Bloco de proveniência (contrato v1.0): fonte, URL, competência, extração e licença"New value: +"Bloco de proveniência (contrato v1.1): fonte, URL, competência, extração, diagnóstico de origem, citação e licença" - changed
Output schema / properties / provenance / properties / citation / descriptionPrevious value: -"Citação pronta para uso"New value: +"Citação/atribuição pronta para uso" - changed
Output schema / properties / provenance / properties / data_vintage / descriptionPrevious value: -"Competência do dado segundo a fonte; null quando a fonte não expõe"New value: +"Competência/vintage do dado segundo a fonte; null quando a fonte não expõe" - changed
Output schema / properties / provenance / properties / license / descriptionPrevious value: -"Regime legal do dado"New value: +"Regime legal do dado (id SPDX quando há, senão o nome da licença)" - added
Output schema / properties / provenance / properties / retrievalAdded value: +{ + "description": "Diagnóstico de origem da chamada: como o dado foi obtido. Medição real do servidor; unstable=true pede ao agente que trate o dado como obtido com dificuldade; null quando o servidor não mede", + "oneOf": [ + { + "additionalProperties": false, + "description": "Diagnóstico de origem da chamada: como o dado foi obtido. Medição real do servidor; unstable=true pede ao agente que trate o dado como obtido com dificuldade", + "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", + "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)", + "minimum": 1, + "type": "integer" + }, + "requests": { + "description": "Idas distintas à origem que compõem esta resposta (fatias, páginas)", + "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" + } + ] +} - changed
Output schema / properties / provenance / properties / retrieved_at / descriptionPrevious value: -"Instante REAL da extração na origem (ISO-8601, horário de Brasília). Resposta servida de cache mantém o instante do fetch ORIGINAL, que é a data de extração relevante."New value: +"Instante REAL da extração na origem (ISO-8601, fuso do servidor). Resposta servida de cache mantém o instante do fetch original, que é a data de extração relevante" - changed
Output schema / properties / provenance / properties / source_url / descriptionPrevious value: -"URL canônica que reproduz a consulta"New value: +"URL canônica que reproduz a consulta na fonte" - changed
Output schema / properties / provenance / requiredPrevious value: -[ - "source", - "source_url", - "data_vintage", - "retrieved_at", - "citation", - "license" -]New value: +[ + "source", + "source_url", + "data_vintage", + "retrieved_at", + "retrieval", + "citation", + "license" +]
- Changed
bcb_focus_expectativas8 fields changed- changed
Output schema / properties / provenance / descriptionPrevious value: -"Bloco de proveniência (contrato v1.0): fonte, URL, competência, extração e licença"New value: +"Bloco de proveniência (contrato v1.1): fonte, URL, competência, extração, diagnóstico de origem, citação e licença" - changed
Output schema / properties / provenance / properties / citation / descriptionPrevious value: -"Citação pronta para uso"New value: +"Citação/atribuição pronta para uso" - changed
Output schema / properties / provenance / properties / data_vintage / descriptionPrevious value: -"Competência do dado segundo a fonte; null quando a fonte não expõe"New value: +"Competência/vintage do dado segundo a fonte; null quando a fonte não expõe" - changed
Output schema / properties / provenance / properties / license / descriptionPrevious value: -"Regime legal do dado"New value: +"Regime legal do dado (id SPDX quando há, senão o nome da licença)" - added
Output schema / properties / provenance / properties / retrievalAdded value: +{ + "description": "Diagnóstico de origem da chamada: como o dado foi obtido. Medição real do servidor; unstable=true pede ao agente que trate o dado como obtido com dificuldade; null quando o servidor não mede", + "oneOf": [ + { + "additionalProperties": false, + "description": "Diagnóstico de origem da chamada: como o dado foi obtido. Medição real do servidor; unstable=true pede ao agente que trate o dado como obtido com dificuldade", + "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", + "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)", + "minimum": 1, + "type": "integer" + }, + "requests": { + "description": "Idas distintas à origem que compõem esta resposta (fatias, páginas)", + "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" + } + ] +} - changed
Output schema / properties / provenance / properties / retrieved_at / descriptionPrevious value: -"Instante REAL da extração na origem (ISO-8601, horário de Brasília). Resposta servida de cache mantém o instante do fetch ORIGINAL, que é a data de extração relevante."New value: +"Instante REAL da extração na origem (ISO-8601, fuso do servidor). Resposta servida de cache mantém o instante do fetch original, que é a data de extração relevante" - changed
Output schema / properties / provenance / properties / source_url / descriptionPrevious value: -"URL canônica que reproduz a consulta"New value: +"URL canônica que reproduz a consulta na fonte" - changed
Output schema / properties / provenance / requiredPrevious value: -[ - "source", - "source_url", - "data_vintage", - "retrieved_at", - "citation", - "license" -]New value: +[ + "source", + "source_url", + "data_vintage", + "retrieved_at", + "retrieval", + "citation", + "license" +]
- Changed
bcb_focus_referencias8 fields changed- changed
Output schema / properties / provenance / descriptionPrevious value: -"Bloco de proveniência (contrato v1.0): fonte, URL, competência, extração e licença"New value: +"Bloco de proveniência (contrato v1.1): fonte, URL, competência, extração, diagnóstico de origem, citação e licença" - changed
Output schema / properties / provenance / properties / citation / descriptionPrevious value: -"Citação pronta para uso"New value: +"Citação/atribuição pronta para uso" - changed
Output schema / properties / provenance / properties / data_vintage / descriptionPrevious value: -"Competência do dado segundo a fonte; null quando a fonte não expõe"New value: +"Competência/vintage do dado segundo a fonte; null quando a fonte não expõe" - changed
Output schema / properties / provenance / properties / license / descriptionPrevious value: -"Regime legal do dado"New value: +"Regime legal do dado (id SPDX quando há, senão o nome da licença)" - added
Output schema / properties / provenance / properties / retrievalAdded value: +{ + "description": "Diagnóstico de origem da chamada: como o dado foi obtido. Medição real do servidor; unstable=true pede ao agente que trate o dado como obtido com dificuldade; null quando o servidor não mede", + "oneOf": [ + { + "additionalProperties": false, + "description": "Diagnóstico de origem da chamada: como o dado foi obtido. Medição real do servidor; unstable=true pede ao agente que trate o dado como obtido com dificuldade", + "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", + "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)", + "minimum": 1, + "type": "integer" + }, + "requests": { + "description": "Idas distintas à origem que compõem esta resposta (fatias, páginas)", + "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" + } + ] +} - changed
Output schema / properties / provenance / properties / retrieved_at / descriptionPrevious value: -"Instante REAL da extração na origem (ISO-8601, horário de Brasília). Resposta servida de cache mantém o instante do fetch ORIGINAL, que é a data de extração relevante."New value: +"Instante REAL da extração na origem (ISO-8601, fuso do servidor). Resposta servida de cache mantém o instante do fetch original, que é a data de extração relevante" - changed
Output schema / properties / provenance / properties / source_url / descriptionPrevious value: -"URL canônica que reproduz a consulta"New value: +"URL canônica que reproduz a consulta na fonte" - changed
Output schema / properties / provenance / requiredPrevious value: -[ - "source", - "source_url", - "data_vintage", - "retrieved_at", - "citation", - "license" -]New value: +[ + "source", + "source_url", + "data_vintage", + "retrieved_at", + "retrieval", + "citation", + "license" +]
- Changed
bcb_focus_selic8 fields changed- changed
Output schema / properties / provenance / descriptionPrevious value: -"Bloco de proveniência (contrato v1.0): fonte, URL, competência, extração e licença"New value: +"Bloco de proveniência (contrato v1.1): fonte, URL, competência, extração, diagnóstico de origem, citação e licença" - changed
Output schema / properties / provenance / properties / citation / descriptionPrevious value: -"Citação pronta para uso"New value: +"Citação/atribuição pronta para uso" - changed
Output schema / properties / provenance / properties / data_vintage / descriptionPrevious value: -"Competência do dado segundo a fonte; null quando a fonte não expõe"New value: +"Competência/vintage do dado segundo a fonte; null quando a fonte não expõe" - changed
Output schema / properties / provenance / properties / license / descriptionPrevious value: -"Regime legal do dado"New value: +"Regime legal do dado (id SPDX quando há, senão o nome da licença)" - added
Output schema / properties / provenance / properties / retrievalAdded value: +{ + "description": "Diagnóstico de origem da chamada: como o dado foi obtido. Medição real do servidor; unstable=true pede ao agente que trate o dado como obtido com dificuldade; null quando o servidor não mede", + "oneOf": [ + { + "additionalProperties": false, + "description": "Diagnóstico de origem da chamada: como o dado foi obtido. Medição real do servidor; unstable=true pede ao agente que trate o dado como obtido com dificuldade", + "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", + "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)", + "minimum": 1, + "type": "integer" + }, + "requests": { + "description": "Idas distintas à origem que compõem esta resposta (fatias, páginas)", + "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" + } + ] +} - changed
Output schema / properties / provenance / properties / retrieved_at / descriptionPrevious value: -"Instante REAL da extração na origem (ISO-8601, horário de Brasília). Resposta servida de cache mantém o instante do fetch ORIGINAL, que é a data de extração relevante."New value: +"Instante REAL da extração na origem (ISO-8601, fuso do servidor). Resposta servida de cache mantém o instante do fetch original, que é a data de extração relevante" - changed
Output schema / properties / provenance / properties / source_url / descriptionPrevious value: -"URL canônica que reproduz a consulta"New value: +"URL canônica que reproduz a consulta na fonte" - changed
Output schema / properties / provenance / requiredPrevious value: -[ - "source", - "source_url", - "data_vintage", - "retrieved_at", - "citation", - "license" -]New value: +[ + "source", + "source_url", + "data_vintage", + "retrieved_at", + "retrieval", + "citation", + "license" +]
- Changed
bcb_indicadores_atuais8 fields changed- changed
Output schema / properties / provenance / descriptionPrevious value: -"Bloco de proveniência (contrato v1.0): fonte, URL, competência, extração e licença"New value: +"Bloco de proveniência (contrato v1.1): fonte, URL, competência, extração, diagnóstico de origem, citação e licença" - changed
Output schema / properties / provenance / properties / citation / descriptionPrevious value: -"Citação pronta para uso"New value: +"Citação/atribuição pronta para uso" - changed
Output schema / properties / provenance / properties / data_vintage / descriptionPrevious value: -"Competência do dado segundo a fonte; null quando a fonte não expõe"New value: +"Competência/vintage do dado segundo a fonte; null quando a fonte não expõe" - changed
Output schema / properties / provenance / properties / license / descriptionPrevious value: -"Regime legal do dado"New value: +"Regime legal do dado (id SPDX quando há, senão o nome da licença)" - added
Output schema / properties / provenance / properties / retrievalAdded value: +{ + "description": "Diagnóstico de origem da chamada: como o dado foi obtido. Medição real do servidor; unstable=true pede ao agente que trate o dado como obtido com dificuldade; null quando o servidor não mede", + "oneOf": [ + { + "additionalProperties": false, + "description": "Diagnóstico de origem da chamada: como o dado foi obtido. Medição real do servidor; unstable=true pede ao agente que trate o dado como obtido com dificuldade", + "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", + "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)", + "minimum": 1, + "type": "integer" + }, + "requests": { + "description": "Idas distintas à origem que compõem esta resposta (fatias, páginas)", + "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" + } + ] +} - changed
Output schema / properties / provenance / properties / retrieved_at / descriptionPrevious value: -"Instante REAL da extração na origem (ISO-8601, horário de Brasília). Resposta servida de cache mantém o instante do fetch ORIGINAL, que é a data de extração relevante."New value: +"Instante REAL da extração na origem (ISO-8601, fuso do servidor). Resposta servida de cache mantém o instante do fetch original, que é a data de extração relevante" - changed
Output schema / properties / provenance / properties / source_url / descriptionPrevious value: -"URL canônica que reproduz a consulta"New value: +"URL canônica que reproduz a consulta na fonte" - changed
Output schema / properties / provenance / requiredPrevious value: -[ - "source", - "source_url", - "data_vintage", - "retrieved_at", - "citation", - "license" -]New value: +[ + "source", + "source_url", + "data_vintage", + "retrieved_at", + "retrieval", + "citation", + "license" +]
- Changed
bcb_serie_metadados9 fields changed- changed
Output schema / properties / provenance / descriptionPrevious value: -"Um bloco por procedência que contribuiu com esta resposta (contrato v1.0; licenças nunca se fundem)"New value: +"Um bloco por procedência que contribuiu com esta resposta (contrato v1.1; licenças nunca se fundem)" - changed
Output schema / properties / provenance / items / descriptionPrevious value: -"Bloco de proveniência (contrato v1.0): fonte, URL, competência, extração e licença"New value: +"Bloco de proveniência (contrato v1.1): fonte, URL, competência, extração, diagnóstico de origem, citação e licença" - changed
Output schema / properties / provenance / items / properties / citation / descriptionPrevious value: -"Citação pronta para uso"New value: +"Citação/atribuição pronta para uso" - changed
Output schema / properties / provenance / items / properties / data_vintage / descriptionPrevious value: -"Competência do dado segundo a fonte; null quando a fonte não expõe"New value: +"Competência/vintage do dado segundo a fonte; null quando a fonte não expõe" - changed
Output schema / properties / provenance / items / properties / license / descriptionPrevious value: -"Regime legal do dado"New value: +"Regime legal do dado (id SPDX quando há, senão o nome da licença)" - added
Output schema / properties / provenance / items / properties / retrievalAdded value: +{ + "description": "Diagnóstico de origem da chamada: como o dado foi obtido. Medição real do servidor; unstable=true pede ao agente que trate o dado como obtido com dificuldade; null quando o servidor não mede", + "oneOf": [ + { + "additionalProperties": false, + "description": "Diagnóstico de origem da chamada: como o dado foi obtido. Medição real do servidor; unstable=true pede ao agente que trate o dado como obtido com dificuldade", + "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", + "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)", + "minimum": 1, + "type": "integer" + }, + "requests": { + "description": "Idas distintas à origem que compõem esta resposta (fatias, páginas)", + "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" + } + ] +} - changed
Output schema / properties / provenance / items / properties / retrieved_at / descriptionPrevious value: -"Instante REAL da extração na origem (ISO-8601, horário de Brasília). Resposta servida de cache mantém o instante do fetch ORIGINAL, que é a data de extração relevante."New value: +"Instante REAL da extração na origem (ISO-8601, fuso do servidor). Resposta servida de cache mantém o instante do fetch original, que é a data de extração relevante" - changed
Output schema / properties / provenance / items / properties / source_url / descriptionPrevious value: -"URL canônica que reproduz a consulta"New value: +"URL canônica que reproduz a consulta na fonte" - changed
Output schema / properties / provenance / items / requiredPrevious value: -[ - "source", - "source_url", - "data_vintage", - "retrieved_at", - "citation", - "license" -]New value: +[ + "source", + "source_url", + "data_vintage", + "retrieved_at", + "retrieval", + "citation", + "license" +]
- Changed
bcb_serie_ultimos8 fields changed- changed
Output schema / properties / provenance / descriptionPrevious value: -"Bloco de proveniência (contrato v1.0): fonte, URL, competência, extração e licença"New value: +"Bloco de proveniência (contrato v1.1): fonte, URL, competência, extração, diagnóstico de origem, citação e licença" - changed
Output schema / properties / provenance / properties / citation / descriptionPrevious value: -"Citação pronta para uso"New value: +"Citação/atribuição pronta para uso" - changed
Output schema / properties / provenance / properties / data_vintage / descriptionPrevious value: -"Competência do dado segundo a fonte; null quando a fonte não expõe"New value: +"Competência/vintage do dado segundo a fonte; null quando a fonte não expõe" - changed
Output schema / properties / provenance / properties / license / descriptionPrevious value: -"Regime legal do dado"New value: +"Regime legal do dado (id SPDX quando há, senão o nome da licença)" - added
Output schema / properties / provenance / properties / retrievalAdded value: +{ + "description": "Diagnóstico de origem da chamada: como o dado foi obtido. Medição real do servidor; unstable=true pede ao agente que trate o dado como obtido com dificuldade; null quando o servidor não mede", + "oneOf": [ + { + "additionalProperties": false, + "description": "Diagnóstico de origem da chamada: como o dado foi obtido. Medição real do servidor; unstable=true pede ao agente que trate o dado como obtido com dificuldade", + "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", + "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)", + "minimum": 1, + "type": "integer" + }, + "requests": { + "description": "Idas distintas à origem que compõem esta resposta (fatias, páginas)", + "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" + } + ] +} - changed
Output schema / properties / provenance / properties / retrieved_at / descriptionPrevious value: -"Instante REAL da extração na origem (ISO-8601, horário de Brasília). Resposta servida de cache mantém o instante do fetch ORIGINAL, que é a data de extração relevante."New value: +"Instante REAL da extração na origem (ISO-8601, fuso do servidor). Resposta servida de cache mantém o instante do fetch original, que é a data de extração relevante" - changed
Output schema / properties / provenance / properties / source_url / descriptionPrevious value: -"URL canônica que reproduz a consulta"New value: +"URL canônica que reproduz a consulta na fonte" - changed
Output schema / properties / provenance / requiredPrevious value: -[ - "source", - "source_url", - "data_vintage", - "retrieved_at", - "citation", - "license" -]New value: +[ + "source", + "source_url", + "data_vintage", + "retrieved_at", + "retrieval", + "citation", + "license" +]
- Changed
bcb_serie_valores8 fields changed- changed
Output schema / properties / provenance / descriptionPrevious value: -"Bloco de proveniência (contrato v1.0): fonte, URL, competência, extração e licença"New value: +"Bloco de proveniência (contrato v1.1): fonte, URL, competência, extração, diagnóstico de origem, citação e licença" - changed
Output schema / properties / provenance / properties / citation / descriptionPrevious value: -"Citação pronta para uso"New value: +"Citação/atribuição pronta para uso" - changed
Output schema / properties / provenance / properties / data_vintage / descriptionPrevious value: -"Competência do dado segundo a fonte; null quando a fonte não expõe"New value: +"Competência/vintage do dado segundo a fonte; null quando a fonte não expõe" - changed
Output schema / properties / provenance / properties / license / descriptionPrevious value: -"Regime legal do dado"New value: +"Regime legal do dado (id SPDX quando há, senão o nome da licença)" - added
Output schema / properties / provenance / properties / retrievalAdded value: +{ + "description": "Diagnóstico de origem da chamada: como o dado foi obtido. Medição real do servidor; unstable=true pede ao agente que trate o dado como obtido com dificuldade; null quando o servidor não mede", + "oneOf": [ + { + "additionalProperties": false, + "description": "Diagnóstico de origem da chamada: como o dado foi obtido. Medição real do servidor; unstable=true pede ao agente que trate o dado como obtido com dificuldade", + "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", + "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)", + "minimum": 1, + "type": "integer" + }, + "requests": { + "description": "Idas distintas à origem que compõem esta resposta (fatias, páginas)", + "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" + } + ] +} - changed
Output schema / properties / provenance / properties / retrieved_at / descriptionPrevious value: -"Instante REAL da extração na origem (ISO-8601, horário de Brasília). Resposta servida de cache mantém o instante do fetch ORIGINAL, que é a data de extração relevante."New value: +"Instante REAL da extração na origem (ISO-8601, fuso do servidor). Resposta servida de cache mantém o instante do fetch original, que é a data de extração relevante" - changed
Output schema / properties / provenance / properties / source_url / descriptionPrevious value: -"URL canônica que reproduz a consulta"New value: +"URL canônica que reproduz a consulta na fonte" - changed
Output schema / properties / provenance / requiredPrevious value: -[ - "source", - "source_url", - "data_vintage", - "retrieved_at", - "citation", - "license" -]New value: +[ + "source", + "source_url", + "data_vintage", + "retrieved_at", + "retrieval", + "citation", + "license" +]
- Changed
bcb_series_populares8 fields changed- changed
Output schema / properties / provenance / descriptionPrevious value: -"Bloco de proveniência (contrato v1.0): fonte, URL, competência, extração e licença"New value: +"Bloco de proveniência (contrato v1.1): fonte, URL, competência, extração, diagnóstico de origem, citação e licença" - changed
Output schema / properties / provenance / properties / citation / descriptionPrevious value: -"Citação pronta para uso"New value: +"Citação/atribuição pronta para uso" - changed
Output schema / properties / provenance / properties / data_vintage / descriptionPrevious value: -"Competência do dado segundo a fonte; null quando a fonte não expõe"New value: +"Competência/vintage do dado segundo a fonte; null quando a fonte não expõe" - changed
Output schema / properties / provenance / properties / license / descriptionPrevious value: -"Regime legal do dado"New value: +"Regime legal do dado (id SPDX quando há, senão o nome da licença)" - added
Output schema / properties / provenance / properties / retrievalAdded value: +{ + "description": "Diagnóstico de origem da chamada: como o dado foi obtido. Medição real do servidor; unstable=true pede ao agente que trate o dado como obtido com dificuldade; null quando o servidor não mede", + "oneOf": [ + { + "additionalProperties": false, + "description": "Diagnóstico de origem da chamada: como o dado foi obtido. Medição real do servidor; unstable=true pede ao agente que trate o dado como obtido com dificuldade", + "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", + "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)", + "minimum": 1, + "type": "integer" + }, + "requests": { + "description": "Idas distintas à origem que compõem esta resposta (fatias, páginas)", + "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" + } + ] +} - changed
Output schema / properties / provenance / properties / retrieved_at / descriptionPrevious value: -"Instante REAL da extração na origem (ISO-8601, horário de Brasília). Resposta servida de cache mantém o instante do fetch ORIGINAL, que é a data de extração relevante."New value: +"Instante REAL da extração na origem (ISO-8601, fuso do servidor). Resposta servida de cache mantém o instante do fetch original, que é a data de extração relevante" - changed
Output schema / properties / provenance / properties / source_url / descriptionPrevious value: -"URL canônica que reproduz a consulta"New value: +"URL canônica que reproduz a consulta na fonte" - changed
Output schema / properties / provenance / requiredPrevious value: -[ - "source", - "source_url", - "data_vintage", - "retrieved_at", - "citation", - "license" -]New value: +[ + "source", + "source_url", + "data_vintage", + "retrieved_at", + "retrieval", + "citation", + "license" +]
- Changed
bcb_variacao8 fields changed- changed
Output schema / properties / provenance / descriptionPrevious value: -"Bloco de proveniência (contrato v1.0): fonte, URL, competência, extração e licença"New value: +"Bloco de proveniência (contrato v1.1): fonte, URL, competência, extração, diagnóstico de origem, citação e licença" - changed
Output schema / properties / provenance / properties / citation / descriptionPrevious value: -"Citação pronta para uso"New value: +"Citação/atribuição pronta para uso" - changed
Output schema / properties / provenance / properties / data_vintage / descriptionPrevious value: -"Competência do dado segundo a fonte; null quando a fonte não expõe"New value: +"Competência/vintage do dado segundo a fonte; null quando a fonte não expõe" - changed
Output schema / properties / provenance / properties / license / descriptionPrevious value: -"Regime legal do dado"New value: +"Regime legal do dado (id SPDX quando há, senão o nome da licença)" - added
Output schema / properties / provenance / properties / retrievalAdded value: +{ + "description": "Diagnóstico de origem da chamada: como o dado foi obtido. Medição real do servidor; unstable=true pede ao agente que trate o dado como obtido com dificuldade; null quando o servidor não mede", + "oneOf": [ + { + "additionalProperties": false, + "description": "Diagnóstico de origem da chamada: como o dado foi obtido. Medição real do servidor; unstable=true pede ao agente que trate o dado como obtido com dificuldade", + "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", + "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)", + "minimum": 1, + "type": "integer" + }, + "requests": { + "description": "Idas distintas à origem que compõem esta resposta (fatias, páginas)", + "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" + } + ] +} - changed
Output schema / properties / provenance / properties / retrieved_at / descriptionPrevious value: -"Instante REAL da extração na origem (ISO-8601, horário de Brasília). Resposta servida de cache mantém o instante do fetch ORIGINAL, que é a data de extração relevante."New value: +"Instante REAL da extração na origem (ISO-8601, fuso do servidor). Resposta servida de cache mantém o instante do fetch original, que é a data de extração relevante" - changed
Output schema / properties / provenance / properties / source_url / descriptionPrevious value: -"URL canônica que reproduz a consulta"New value: +"URL canônica que reproduz a consulta na fonte" - changed
Output schema / properties / provenance / requiredPrevious value: -[ - "source", - "source_url", - "data_vintage", - "retrieved_at", - "citation", - "license" -]New value: +[ + "source", + "source_url", + "data_vintage", + "retrieved_at", + "retrieval", + "citation", + "license" +]
- Changed
fetch9 fields changed- changed
Output schema / properties / provenance / descriptionPrevious value: -"Um bloco por procedência que contribuiu com esta resposta (contrato v1.0; licenças nunca se fundem)"New value: +"Um bloco por procedência que contribuiu com esta resposta (contrato v1.1; licenças nunca se fundem)" - changed
Output schema / properties / provenance / items / descriptionPrevious value: -"Bloco de proveniência (contrato v1.0): fonte, URL, competência, extração e licença"New value: +"Bloco de proveniência (contrato v1.1): fonte, URL, competência, extração, diagnóstico de origem, citação e licença" - changed
Output schema / properties / provenance / items / properties / citation / descriptionPrevious value: -"Citação pronta para uso"New value: +"Citação/atribuição pronta para uso" - changed
Output schema / properties / provenance / items / properties / data_vintage / descriptionPrevious value: -"Competência do dado segundo a fonte; null quando a fonte não expõe"New value: +"Competência/vintage do dado segundo a fonte; null quando a fonte não expõe" - changed
Output schema / properties / provenance / items / properties / license / descriptionPrevious value: -"Regime legal do dado"New value: +"Regime legal do dado (id SPDX quando há, senão o nome da licença)" - added
Output schema / properties / provenance / items / properties / retrievalAdded value: +{ + "description": "Diagnóstico de origem da chamada: como o dado foi obtido. Medição real do servidor; unstable=true pede ao agente que trate o dado como obtido com dificuldade; null quando o servidor não mede", + "oneOf": [ + { + "additionalProperties": false, + "description": "Diagnóstico de origem da chamada: como o dado foi obtido. Medição real do servidor; unstable=true pede ao agente que trate o dado como obtido com dificuldade", + "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", + "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)", + "minimum": 1, + "type": "integer" + }, + "requests": { + "description": "Idas distintas à origem que compõem esta resposta (fatias, páginas)", + "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" + } + ] +} - changed
Output schema / properties / provenance / items / properties / retrieved_at / descriptionPrevious value: -"Instante REAL da extração na origem (ISO-8601, horário de Brasília). Resposta servida de cache mantém o instante do fetch ORIGINAL, que é a data de extração relevante."New value: +"Instante REAL da extração na origem (ISO-8601, fuso do servidor). Resposta servida de cache mantém o instante do fetch original, que é a data de extração relevante" - changed
Output schema / properties / provenance / items / properties / source_url / descriptionPrevious value: -"URL canônica que reproduz a consulta"New value: +"URL canônica que reproduz a consulta na fonte" - changed
Output schema / properties / provenance / items / requiredPrevious value: -[ - "source", - "source_url", - "data_vintage", - "retrieved_at", - "citation", - "license" -]New value: +[ + "source", + "source_url", + "data_vintage", + "retrieved_at", + "retrieval", + "citation", + "license" +]
- Changed
search9 fields changed- changed
Output schema / properties / provenance / descriptionPrevious value: -"Um bloco por procedência que contribuiu com esta resposta (contrato v1.0; licenças nunca se fundem)"New value: +"Um bloco por procedência que contribuiu com esta resposta (contrato v1.1; licenças nunca se fundem)" - changed
Output schema / properties / provenance / items / descriptionPrevious value: -"Bloco de proveniência (contrato v1.0): fonte, URL, competência, extração e licença"New value: +"Bloco de proveniência (contrato v1.1): fonte, URL, competência, extração, diagnóstico de origem, citação e licença" - changed
Output schema / properties / provenance / items / properties / citation / descriptionPrevious value: -"Citação pronta para uso"New value: +"Citação/atribuição pronta para uso" - changed
Output schema / properties / provenance / items / properties / data_vintage / descriptionPrevious value: -"Competência do dado segundo a fonte; null quando a fonte não expõe"New value: +"Competência/vintage do dado segundo a fonte; null quando a fonte não expõe" - changed
Output schema / properties / provenance / items / properties / license / descriptionPrevious value: -"Regime legal do dado"New value: +"Regime legal do dado (id SPDX quando há, senão o nome da licença)" - added
Output schema / properties / provenance / items / properties / retrievalAdded value: +{ + "description": "Diagnóstico de origem da chamada: como o dado foi obtido. Medição real do servidor; unstable=true pede ao agente que trate o dado como obtido com dificuldade; null quando o servidor não mede", + "oneOf": [ + { + "additionalProperties": false, + "description": "Diagnóstico de origem da chamada: como o dado foi obtido. Medição real do servidor; unstable=true pede ao agente que trate o dado como obtido com dificuldade", + "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", + "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)", + "minimum": 1, + "type": "integer" + }, + "requests": { + "description": "Idas distintas à origem que compõem esta resposta (fatias, páginas)", + "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" + } + ] +} - changed
Output schema / properties / provenance / items / properties / retrieved_at / descriptionPrevious value: -"Instante REAL da extração na origem (ISO-8601, horário de Brasília). Resposta servida de cache mantém o instante do fetch ORIGINAL, que é a data de extração relevante."New value: +"Instante REAL da extração na origem (ISO-8601, fuso do servidor). Resposta servida de cache mantém o instante do fetch original, que é a data de extração relevante" - changed
Output schema / properties / provenance / items / properties / source_url / descriptionPrevious value: -"URL canônica que reproduz a consulta"New value: +"URL canônica que reproduz a consulta na fonte" - changed
Output schema / properties / provenance / items / requiredPrevious value: -[ - "source", - "source_url", - "data_vintage", - "retrieved_at", - "citation", - "license" -]New value: +[ + "source", + "source_url", + "data_vintage", + "retrieved_at", + "retrieval", + "citation", + "license" +]
3 tool updates
v1.12.1- Changed
bcb_buscar_serie2 fields changed- changed
Input schema / properties / termo / descriptionPrevious value: -"Termo de busca (mínimo 2 caracteres) ou o código da série. Vários termos são combinados com E."New value: +"Termo de busca (mínimo 2 caracteres) ou o código da série. Vários termos são combinados com E, sem distinção de acento; a palavra de todo dia é traduzida para a do BCB (déficit→resultado primário, calote→inadimplência, desemprego→desocupação) e a resposta diz quando isso aconteceu (notasVocabulario)." - added
Output schema / properties / notasVocabularioAdded value: +{ + "description": "Quando um termo foi ampliado para a palavra que o BCB usa (déficit→resultado primário), diz qual", + "items": { + "type": "string" + }, + "type": "array" +}
- Added
fetch - Added
search
15 tool updates
v1.9.2- Changed
bcb_buscar_serie4 fields changed- added
Output schema / properties / attributionAdded value: +{ + "description": "URLs canônicas das fontes desta resposta (lista de atribuição)", + "items": { + "type": "string" + }, + "type": "array" +} - added
Output schema / properties / provenanceAdded value: +{ + "description": "Um bloco por procedência que contribuiu com esta resposta (contrato v1.0; licenças nunca se fundem)", + "items": { + "additionalProperties": false, + "description": "Bloco de proveniência (contrato v1.0): fonte, URL, competência, extração e licença", + "properties": { + "citation": { + "description": "Citação pronta para uso", + "type": "string" + }, + "data_vintage": { + "description": "Competência do dado segundo a fonte; null quando a fonte não expõe", + "type": [ + "string", + "null" + ] + }, + "license": { + "description": "Regime legal do dado", + "type": [ + "string", + "null" + ] + }, + "retrieved_at": { + "description": "Instante REAL da extração na origem (ISO-8601, horário de Brasília). Resposta servida de cache mantém o instante do fetch ORIGINAL, que é a data de extração relevante.", + "type": "string" + }, + "source": { + "description": "Fonte oficial do dado", + "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" + }, + "type": "array" +} - added
Output schema / properties / series / items / properties / fonteNomeAdded value: +{ + "description": "Só quando `origem` = curado. 'portal' = nome transcrito do dataset da série no Portal de Dados Abertos do BCB; 'medido' = série sem dataset no portal, nome herdado e apenas periodicidade e ordem de grandeza verificadas contra a origem.", + "enum": [ + "portal", + "medido" + ], + "type": "string" +} - changed
Output schema / requiredPrevious value: -[ - "termo", - "totalEncontradas", - "series", - "catalogo" -]New value: +[ + "termo", + "totalEncontradas", + "series", + "catalogo", + "provenance", + "attribution" +]
- Changed
bcb_cambio_cotacao3 fields changed- added
Output schema / properties / attributionAdded value: +{ + "description": "URLs canônicas das fontes desta resposta (lista de atribuição)", + "items": { + "type": "string" + }, + "type": "array" +} - added
Output schema / properties / provenanceAdded value: +{ + "description": "Um bloco por procedência que contribuiu com esta resposta (contrato v1.0; licenças nunca se fundem)", + "items": { + "additionalProperties": false, + "description": "Bloco de proveniência (contrato v1.0): fonte, URL, competência, extração e licença", + "properties": { + "citation": { + "description": "Citação pronta para uso", + "type": "string" + }, + "data_vintage": { + "description": "Competência do dado segundo a fonte; null quando a fonte não expõe", + "type": [ + "string", + "null" + ] + }, + "license": { + "description": "Regime legal do dado", + "type": [ + "string", + "null" + ] + }, + "retrieved_at": { + "description": "Instante REAL da extração na origem (ISO-8601, horário de Brasília). Resposta servida de cache mantém o instante do fetch ORIGINAL, que é a data de extração relevante.", + "type": "string" + }, + "source": { + "description": "Fonte oficial do dado", + "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" + }, + "type": "array" +} - changed
Output schema / requiredPrevious value: -[ - "moeda", - "periodo", - "totalRegistros", - "cotacoes", - "disclaimer", - "urlConsulta", - "consultadoEm" -]New value: +[ + "moeda", + "periodo", + "totalRegistros", + "cotacoes", + "disclaimer", + "urlConsulta", + "consultadoEm", + "provenance", + "attribution" +]
- Changed
bcb_cambio_moedas3 fields changed- added
Output schema / properties / attributionAdded value: +{ + "description": "URLs canônicas das fontes desta resposta (lista de atribuição)", + "items": { + "type": "string" + }, + "type": "array" +} - added
Output schema / properties / provenanceAdded value: +{ + "additionalProperties": false, + "description": "Bloco de proveniência (contrato v1.0): fonte, URL, competência, extração e licença", + "properties": { + "citation": { + "description": "Citação pronta para uso", + "type": "string" + }, + "data_vintage": { + "description": "Competência do dado segundo a fonte; null quando a fonte não expõe", + "type": [ + "string", + "null" + ] + }, + "license": { + "description": "Regime legal do dado", + "type": [ + "string", + "null" + ] + }, + "retrieved_at": { + "description": "Instante REAL da extração na origem (ISO-8601, horário de Brasília). Resposta servida de cache mantém o instante do fetch ORIGINAL, que é a data de extração relevante.", + "type": "string" + }, + "source": { + "description": "Fonte oficial do dado", + "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" +} - changed
Output schema / requiredPrevious value: -[ - "totalMoedas", - "moedas", - "disclaimer", - "urlConsulta", - "consultadoEm" -]New value: +[ + "totalMoedas", + "moedas", + "disclaimer", + "urlConsulta", + "consultadoEm", + "provenance", + "attribution" +]
- Changed
bcb_comparar5 fields changed- added
Output schema / properties / attributionAdded value: +{ + "description": "URLs canônicas das fontes desta resposta (lista de atribuição)", + "items": { + "type": "string" + }, + "type": "array" +} - added
Output schema / properties / provenanceAdded value: +{ + "additionalProperties": false, + "description": "Bloco de proveniência (contrato v1.0): fonte, URL, competência, extração e licença", + "properties": { + "citation": { + "description": "Citação pronta para uso", + "type": "string" + }, + "data_vintage": { + "description": "Competência do dado segundo a fonte; null quando a fonte não expõe", + "type": [ + "string", + "null" + ] + }, + "license": { + "description": "Regime legal do dado", + "type": [ + "string", + "null" + ] + }, + "retrieved_at": { + "description": "Instante REAL da extração na origem (ISO-8601, horário de Brasília). Resposta servida de cache mantém o instante do fetch ORIGINAL, que é a data de extração relevante.", + "type": "string" + }, + "source": { + "description": "Fonte oficial do dado", + "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" +} - added
Output schema / properties / ranking / items / properties / metodoAdded value: +{ + "description": "Como a variação foi medida: `nivel` = (último − primeiro) / primeiro, para série de nível; `encadeamento` = acumulado composto de todas as observações, para série que já é uma variação percentual por período (IPCA, INPC, IGP-M mensais e os núcleos/grupos do IPCA do catálogo; Selic e CDI acumulados no mês, 4390/4391; rentabilidade da poupança, 25/195 — nesta, uma observação por mês). A detecção cobre as séries de variação do catálogo curado; código fora dele é tratado como nível.", + "enum": [ + "nivel", + "encadeamento" + ], + "type": "string" +} - added
Output schema / properties / ranking / items / properties / variacaoPercentual / descriptionAdded value: +"Variação entre as pontas (metodo nivel) ou acumulado encadeado do período (metodo encadeamento), em %" - changed
Output schema / requiredPrevious value: -[ - "periodo", - "totalSeries", - "seriesComDados", - "seriesComErro", - "ranking", - "erros", - "derivacao" -]New value: +[ + "periodo", + "totalSeries", + "seriesComDados", + "seriesComErro", + "ranking", + "erros", + "derivacao", + "provenance", + "attribution" +]
- Changed
bcb_correlacao3 fields changed- added
Output schema / properties / attributionAdded value: +{ + "description": "URLs canônicas das fontes desta resposta (lista de atribuição)", + "items": { + "type": "string" + }, + "type": "array" +} - added
Output schema / properties / provenanceAdded value: +{ + "additionalProperties": false, + "description": "Bloco de proveniência (contrato v1.0): fonte, URL, competência, extração e licença", + "properties": { + "citation": { + "description": "Citação pronta para uso", + "type": "string" + }, + "data_vintage": { + "description": "Competência do dado segundo a fonte; null quando a fonte não expõe", + "type": [ + "string", + "null" + ] + }, + "license": { + "description": "Regime legal do dado", + "type": [ + "string", + "null" + ] + }, + "retrieved_at": { + "description": "Instante REAL da extração na origem (ISO-8601, horário de Brasília). Resposta servida de cache mantém o instante do fetch ORIGINAL, que é a data de extração relevante.", + "type": "string" + }, + "source": { + "description": "Fonte oficial do dado", + "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" +} - changed
Output schema / requiredPrevious value: -[ - "periodo", - "metodo", - "base", - "series", - "alinhamento", - "pares", - "erros", - "derivacao" -]New value: +[ + "periodo", + "metodo", + "base", + "series", + "alinhamento", + "pares", + "erros", + "derivacao", + "provenance", + "attribution" +]
- Changed
bcb_deflacionar3 fields changed- added
Output schema / properties / attributionAdded value: +{ + "description": "URLs canônicas das fontes desta resposta (lista de atribuição)", + "items": { + "type": "string" + }, + "type": "array" +} - added
Output schema / properties / provenanceAdded value: +{ + "additionalProperties": false, + "description": "Bloco de proveniência (contrato v1.0): fonte, URL, competência, extração e licença", + "properties": { + "citation": { + "description": "Citação pronta para uso", + "type": "string" + }, + "data_vintage": { + "description": "Competência do dado segundo a fonte; null quando a fonte não expõe", + "type": [ + "string", + "null" + ] + }, + "license": { + "description": "Regime legal do dado", + "type": [ + "string", + "null" + ] + }, + "retrieved_at": { + "description": "Instante REAL da extração na origem (ISO-8601, horário de Brasília). Resposta servida de cache mantém o instante do fetch ORIGINAL, que é a data de extração relevante.", + "type": "string" + }, + "source": { + "description": "Fonte oficial do dado", + "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" +} - changed
Output schema / requiredPrevious value: -[ - "serie", - "deflator", - "base", - "periodo", - "dados", - "variacao", - "derivacao" -]New value: +[ + "serie", + "deflator", + "base", + "periodo", + "dados", + "variacao", + "derivacao", + "provenance", + "attribution" +]
- Changed
bcb_focus_expectativas3 fields changed- added
Output schema / properties / attributionAdded value: +{ + "description": "URLs canônicas das fontes desta resposta (lista de atribuição)", + "items": { + "type": "string" + }, + "type": "array" +} - added
Output schema / properties / provenanceAdded value: +{ + "additionalProperties": false, + "description": "Bloco de proveniência (contrato v1.0): fonte, URL, competência, extração e licença", + "properties": { + "citation": { + "description": "Citação pronta para uso", + "type": "string" + }, + "data_vintage": { + "description": "Competência do dado segundo a fonte; null quando a fonte não expõe", + "type": [ + "string", + "null" + ] + }, + "license": { + "description": "Regime legal do dado", + "type": [ + "string", + "null" + ] + }, + "retrieved_at": { + "description": "Instante REAL da extração na origem (ISO-8601, horário de Brasília). Resposta servida de cache mantém o instante do fetch ORIGINAL, que é a data de extração relevante.", + "type": "string" + }, + "source": { + "description": "Fonte oficial do dado", + "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" +} - changed
Output schema / requiredPrevious value: -[ - "indicador", - "horizonte", - "base", - "filtro", - "totalRegistros", - "expectativas", - "urlConsulta", - "consultadoEm" -]New value: +[ + "indicador", + "horizonte", + "base", + "filtro", + "totalRegistros", + "expectativas", + "urlConsulta", + "consultadoEm", + "provenance", + "attribution" +]
- Changed
bcb_focus_referencias3 fields changed- added
Output schema / properties / attributionAdded value: +{ + "description": "URLs canônicas das fontes desta resposta (lista de atribuição)", + "items": { + "type": "string" + }, + "type": "array" +} - added
Output schema / properties / provenanceAdded value: +{ + "additionalProperties": false, + "description": "Bloco de proveniência (contrato v1.0): fonte, URL, competência, extração e licença", + "properties": { + "citation": { + "description": "Citação pronta para uso", + "type": "string" + }, + "data_vintage": { + "description": "Competência do dado segundo a fonte; null quando a fonte não expõe", + "type": [ + "string", + "null" + ] + }, + "license": { + "description": "Regime legal do dado", + "type": [ + "string", + "null" + ] + }, + "retrieved_at": { + "description": "Instante REAL da extração na origem (ISO-8601, horário de Brasília). Resposta servida de cache mantém o instante do fetch ORIGINAL, que é a data de extração relevante.", + "type": "string" + }, + "source": { + "description": "Fonte oficial do dado", + "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" +} - changed
Output schema / requiredPrevious value: -[ - "indicadores", - "referencias", - "escopos", - "janela", - "totalRegistros", - "consultadoEm" -]New value: +[ + "indicadores", + "referencias", + "escopos", + "janela", + "totalRegistros", + "consultadoEm", + "provenance", + "attribution" +]
- Changed
bcb_focus_selic3 fields changed- added
Output schema / properties / attributionAdded value: +{ + "description": "URLs canônicas das fontes desta resposta (lista de atribuição)", + "items": { + "type": "string" + }, + "type": "array" +} - added
Output schema / properties / provenanceAdded value: +{ + "additionalProperties": false, + "description": "Bloco de proveniência (contrato v1.0): fonte, URL, competência, extração e licença", + "properties": { + "citation": { + "description": "Citação pronta para uso", + "type": "string" + }, + "data_vintage": { + "description": "Competência do dado segundo a fonte; null quando a fonte não expõe", + "type": [ + "string", + "null" + ] + }, + "license": { + "description": "Regime legal do dado", + "type": [ + "string", + "null" + ] + }, + "retrieved_at": { + "description": "Instante REAL da extração na origem (ISO-8601, horário de Brasília). Resposta servida de cache mantém o instante do fetch ORIGINAL, que é a data de extração relevante.", + "type": "string" + }, + "source": { + "description": "Fonte oficial do dado", + "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" +} - changed
Output schema / requiredPrevious value: -[ - "base", - "filtro", - "totalRegistros", - "expectativas", - "urlConsulta", - "consultadoEm" -]New value: +[ + "base", + "filtro", + "totalRegistros", + "expectativas", + "urlConsulta", + "consultadoEm", + "provenance", + "attribution" +]
- Changed
bcb_indicadores_atuais3 fields changed- added
Output schema / properties / attributionAdded value: +{ + "description": "URLs canônicas das fontes desta resposta (lista de atribuição)", + "items": { + "type": "string" + }, + "type": "array" +} - added
Output schema / properties / provenanceAdded value: +{ + "additionalProperties": false, + "description": "Bloco de proveniência (contrato v1.0): fonte, URL, competência, extração e licença", + "properties": { + "citation": { + "description": "Citação pronta para uso", + "type": "string" + }, + "data_vintage": { + "description": "Competência do dado segundo a fonte; null quando a fonte não expõe", + "type": [ + "string", + "null" + ] + }, + "license": { + "description": "Regime legal do dado", + "type": [ + "string", + "null" + ] + }, + "retrieved_at": { + "description": "Instante REAL da extração na origem (ISO-8601, horário de Brasília). Resposta servida de cache mantém o instante do fetch ORIGINAL, que é a data de extração relevante.", + "type": "string" + }, + "source": { + "description": "Fonte oficial do dado", + "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" +} - changed
Output schema / requiredPrevious value: -[ - "consultadoEm", - "indicadores" -]New value: +[ + "consultadoEm", + "indicadores", + "provenance", + "attribution" +]
- Changed
bcb_serie_metadados3 fields changed- added
Output schema / properties / attributionAdded value: +{ + "description": "URLs canônicas das fontes desta resposta (lista de atribuição)", + "items": { + "type": "string" + }, + "type": "array" +} - added
Output schema / properties / provenanceAdded value: +{ + "description": "Um bloco por procedência que contribuiu com esta resposta (contrato v1.0; licenças nunca se fundem)", + "items": { + "additionalProperties": false, + "description": "Bloco de proveniência (contrato v1.0): fonte, URL, competência, extração e licença", + "properties": { + "citation": { + "description": "Citação pronta para uso", + "type": "string" + }, + "data_vintage": { + "description": "Competência do dado segundo a fonte; null quando a fonte não expõe", + "type": [ + "string", + "null" + ] + }, + "license": { + "description": "Regime legal do dado", + "type": [ + "string", + "null" + ] + }, + "retrieved_at": { + "description": "Instante REAL da extração na origem (ISO-8601, horário de Brasília). Resposta servida de cache mantém o instante do fetch ORIGINAL, que é a data de extração relevante.", + "type": "string" + }, + "source": { + "description": "Fonte oficial do dado", + "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" + }, + "type": "array" +} - changed
Output schema / requiredPrevious value: -[ - "codigo", - "nome", - "fonte" -]New value: +[ + "codigo", + "nome", + "fonte", + "provenance", + "attribution" +]
- Changed
bcb_serie_ultimos3 fields changed- added
Output schema / properties / attributionAdded value: +{ + "description": "URLs canônicas das fontes desta resposta (lista de atribuição)", + "items": { + "type": "string" + }, + "type": "array" +} - added
Output schema / properties / provenanceAdded value: +{ + "additionalProperties": false, + "description": "Bloco de proveniência (contrato v1.0): fonte, URL, competência, extração e licença", + "properties": { + "citation": { + "description": "Citação pronta para uso", + "type": "string" + }, + "data_vintage": { + "description": "Competência do dado segundo a fonte; null quando a fonte não expõe", + "type": [ + "string", + "null" + ] + }, + "license": { + "description": "Regime legal do dado", + "type": [ + "string", + "null" + ] + }, + "retrieved_at": { + "description": "Instante REAL da extração na origem (ISO-8601, horário de Brasília). Resposta servida de cache mantém o instante do fetch ORIGINAL, que é a data de extração relevante.", + "type": "string" + }, + "source": { + "description": "Fonte oficial do dado", + "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" +} - changed
Output schema / requiredPrevious value: -[ - "serie", - "totalRegistros", - "dados" -]New value: +[ + "serie", + "totalRegistros", + "dados", + "provenance", + "attribution" +]
- Changed
bcb_serie_valores3 fields changed- added
Output schema / properties / attributionAdded value: +{ + "description": "URLs canônicas das fontes desta resposta (lista de atribuição)", + "items": { + "type": "string" + }, + "type": "array" +} - added
Output schema / properties / provenanceAdded value: +{ + "additionalProperties": false, + "description": "Bloco de proveniência (contrato v1.0): fonte, URL, competência, extração e licença", + "properties": { + "citation": { + "description": "Citação pronta para uso", + "type": "string" + }, + "data_vintage": { + "description": "Competência do dado segundo a fonte; null quando a fonte não expõe", + "type": [ + "string", + "null" + ] + }, + "license": { + "description": "Regime legal do dado", + "type": [ + "string", + "null" + ] + }, + "retrieved_at": { + "description": "Instante REAL da extração na origem (ISO-8601, horário de Brasília). Resposta servida de cache mantém o instante do fetch ORIGINAL, que é a data de extração relevante.", + "type": "string" + }, + "source": { + "description": "Fonte oficial do dado", + "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" +} - changed
Output schema / requiredPrevious value: -[ - "serie", - "totalRegistros", - "dados" -]New value: +[ + "serie", + "totalRegistros", + "dados", + "provenance", + "attribution" +]
- Changed
bcb_series_populares4 fields changed- added
Output schema / properties / attributionAdded value: +{ + "description": "URLs canônicas das fontes desta resposta (lista de atribuição)", + "items": { + "type": "string" + }, + "type": "array" +} - added
Output schema / properties / provenanceAdded value: +{ + "additionalProperties": false, + "description": "Bloco de proveniência (contrato v1.0): fonte, URL, competência, extração e licença", + "properties": { + "citation": { + "description": "Citação pronta para uso", + "type": "string" + }, + "data_vintage": { + "description": "Competência do dado segundo a fonte; null quando a fonte não expõe", + "type": [ + "string", + "null" + ] + }, + "license": { + "description": "Regime legal do dado", + "type": [ + "string", + "null" + ] + }, + "retrieved_at": { + "description": "Instante REAL da extração na origem (ISO-8601, horário de Brasília). Resposta servida de cache mantém o instante do fetch ORIGINAL, que é a data de extração relevante.", + "type": "string" + }, + "source": { + "description": "Fonte oficial do dado", + "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" +} - changed
Output schema / properties / series / anyOfPrevious value: -[ - { - "items": { - "additionalProperties": false, - "description": "Identificação da série temporal", - "properties": { - "categoria": { - "description": "Categoria econômica", - "type": "string" - }, - "codigo": { - "description": "Código da série no SGS/BCB", - "type": "number" - }, - "nome": { - "description": "Nome da série", - "type": "string" - }, - "periodicidade": { - "description": "Periodicidade (Diária, Mensal, etc.)", - "type": "string" - } - }, - "required": [ - "codigo", - "nome" - ], - "type": "object" - }, - "type": "array" - }, - { - "additionalProperties": { - "items": { - "additionalProperties": false, - "description": "Identificação da série temporal", - "properties": { - "categoria": { - "description": "Categoria econômica", - "type": "string" - }, - "codigo": { - "description": "Código da série no SGS/BCB", - "type": "number" - }, - "nome": { - "description": "Nome da série", - "type": "string" - }, - "periodicidade": { - "description": "Periodicidade (Diária, Mensal, etc.)", - "type": "string" - } - }, - "required": [ - "codigo", - "nome" - ], - "type": "object" - }, - "type": "array" - }, - "type": "object" - } -]New value: +[ + { + "items": { + "additionalProperties": false, + "description": "Identificação da série temporal", + "properties": { + "categoria": { + "description": "Categoria econômica", + "type": "string" + }, + "codigo": { + "description": "Código da série no SGS/BCB", + "type": "number" + }, + "fonteNome": { + "description": "Procedência do `nome`: 'portal' = transcrito do dataset da série no Portal de Dados Abertos do BCB; 'medido' = a série não tem dataset no portal, o nome é herdado e só a periodicidade e a ordem de grandeza foram verificadas contra a origem.", + "enum": [ + "portal", + "medido" + ], + "type": "string" + }, + "nome": { + "description": "Nome da série", + "type": "string" + }, + "periodicidade": { + "description": "Periodicidade (Diária, Mensal, etc.)", + "type": "string" + }, + "unidade": { + "description": "Unidade de medida publicada pelo portal. Ausente nas séries sem dataset (fonteNome 'medido').", + "type": "string" + } + }, + "required": [ + "codigo", + "nome" + ], + "type": "object" + }, + "type": "array" + }, + { + "additionalProperties": { + "items": { + "additionalProperties": false, + "description": "Identificação da série temporal", + "properties": { + "categoria": { + "description": "Categoria econômica", + "type": "string" + }, + "codigo": { + "description": "Código da série no SGS/BCB", + "type": "number" + }, + "fonteNome": { + "description": "Procedência do `nome`: 'portal' = transcrito do dataset da série no Portal de Dados Abertos do BCB; 'medido' = a série não tem dataset no portal, o nome é herdado e só a periodicidade e a ordem de grandeza foram verificadas contra a origem.", + "enum": [ + "portal", + "medido" + ], + "type": "string" + }, + "nome": { + "description": "Nome da série", + "type": "string" + }, + "periodicidade": { + "description": "Periodicidade (Diária, Mensal, etc.)", + "type": "string" + }, + "unidade": { + "description": "Unidade de medida publicada pelo portal. Ausente nas séries sem dataset (fonteNome 'medido').", + "type": "string" + } + }, + "required": [ + "codigo", + "nome" + ], + "type": "object" + }, + "type": "array" + }, + "type": "object" + } +] - changed
Output schema / requiredPrevious value: -[ - "totalSeries", - "categorias", - "series" -]New value: +[ + "totalSeries", + "categorias", + "series", + "provenance", + "attribution" +]
- Changed
bcb_variacao11 fields changed- changed
Output schema / properties / analise / descriptionPrevious value: -"Resultado da variação entre o primeiro e o último valor"New value: +"Resultado da variação no período. Em `metodo: \"nivel\"` é a variação entre o primeiro e o último valor; em `metodo: \"encadeamento\"` (série que já é variação por período, como IPCA e IGP-M mensais) é o acumulado composto de todas as observações" - added
Output schema / properties / analise / properties / diferencaAbsoluta / descriptionAdded value: +"valorFinal − valorInicial em série de nível; NULO em série encadeada, onde não se aplica" - changed
Output schema / properties / analise / properties / diferencaAbsoluta / typePrevious value: -"number"New value: +[ + "number", + "null" +] - added
Output schema / properties / analise / properties / metodoAdded value: +{ + "description": "Como a variação foi medida: `nivel` = (último − primeiro) / primeiro, para série de nível; `encadeamento` = acumulado composto de todas as observações, para série que já é uma variação percentual por período (IPCA, INPC, IGP-M mensais e os núcleos/grupos do IPCA do catálogo; Selic e CDI acumulados no mês, 4390/4391; rentabilidade da poupança, 25/195 — nesta, uma observação por mês). A detecção cobre as séries de variação do catálogo curado; código fora dele é tratado como nível.", + "enum": [ + "nivel", + "encadeamento" + ], + "type": "string" +} - added
Output schema / properties / analise / properties / valorFinal / descriptionAdded value: +"Última observação do período, verbatim da fonte" - added
Output schema / properties / analise / properties / valorInicial / descriptionAdded value: +"Primeira observação do período, verbatim da fonte" - added
Output schema / properties / analise / properties / variacaoPercentual / descriptionAdded value: +"Variação (nível) ou acumulado (encadeamento), em %" - changed
Output schema / properties / analise / requiredPrevious value: -[ - "valorInicial", - "valorFinal", - "diferencaAbsoluta", - "variacaoPercentual", - "variacaoFormatada" -]New value: +[ + "metodo", + "valorInicial", + "valorFinal", + "diferencaAbsoluta", + "variacaoPercentual", + "variacaoFormatada" +] - added
Output schema / properties / attributionAdded value: +{ + "description": "URLs canônicas das fontes desta resposta (lista de atribuição)", + "items": { + "type": "string" + }, + "type": "array" +} - added
Output schema / properties / provenanceAdded value: +{ + "additionalProperties": false, + "description": "Bloco de proveniência (contrato v1.0): fonte, URL, competência, extração e licença", + "properties": { + "citation": { + "description": "Citação pronta para uso", + "type": "string" + }, + "data_vintage": { + "description": "Competência do dado segundo a fonte; null quando a fonte não expõe", + "type": [ + "string", + "null" + ] + }, + "license": { + "description": "Regime legal do dado", + "type": [ + "string", + "null" + ] + }, + "retrieved_at": { + "description": "Instante REAL da extração na origem (ISO-8601, horário de Brasília). Resposta servida de cache mantém o instante do fetch ORIGINAL, que é a data de extração relevante.", + "type": "string" + }, + "source": { + "description": "Fonte oficial do dado", + "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" +} - changed
Output schema / requiredPrevious value: -[ - "serie", - "periodo", - "analise", - "estatisticas", - "derivacao" -]New value: +[ + "serie", + "periodo", + "analise", + "estatisticas", + "derivacao", + "provenance", + "attribution" +]
15 tool updates
v1.6.0- Changed
bcb_buscar_serie16 fields changed- removed
Input schema / $schemaRemoved value: -"http://json-schema.org/draft-07/schema#" - added
Input schema / properties / limiteAdded value: +{ + "default": 20, + "description": "Máximo de séries a devolver (1-100, padrão: 20). `totalEncontradas` traz o total antes do corte.", + "maximum": 100, + "minimum": 1, + "type": "number" +} - changed
Input schema / properties / termo / descriptionPrevious value: -"Termo de busca (mínimo 2 caracteres)"New value: +"Termo de busca (mínimo 2 caracteres) ou o código da série. Vários termos são combinados com E." - removed
Output schema / $schemaRemoved value: -"http://json-schema.org/draft-07/schema#" - added
Output schema / properties / avisosAdded value: +{ + "description": "Avisos de degradação (índice vencido ou indisponível)", + "items": { + "type": "string" + }, + "type": "array" +} - added
Output schema / properties / catalogoAdded value: +{ + "additionalProperties": false, + "description": "Proveniência do índice usado na busca", + "properties": { + "cobertura": { + "description": "Limite explícito de cobertura do índice", + "type": "string" + }, + "obtidoEm": { + "description": "Timestamp ISO 8601 em que o índice do portal foi obtido", + "type": "string" + }, + "origem": { + "description": "Camadas consultadas", + "type": "string" + }, + "seriesIndexadas": { + "description": "Quantidade de séries no índice consultado", + "type": "number" + } + }, + "required": [ + "origem", + "seriesIndexadas", + "cobertura" + ], + "type": "object" +} - added
Output schema / properties / observacaoAdded value: +{ + "description": "Aviso de corte quando há mais resultados que `limite`", + "type": "string" +} - changed
Output schema / properties / series / descriptionPrevious value: -"Séries que correspondem ao termo"New value: +"Séries que correspondem ao termo — as do catálogo curado primeiro" - changed
Output schema / properties / series / items / properties / categoria / descriptionPrevious value: -"Categoria econômica"New value: +"Categoria econômica (só no catálogo curado)" - added
Output schema / properties / series / items / properties / datasetAdded value: +{ + "description": "Página do dataset no portal de dados abertos (só quando `origem` = indice)", + "type": "string" +} - changed
Output schema / properties / series / items / properties / nome / descriptionPrevious value: -"Nome da série"New value: +"Nome da série (revisado quando `origem` = curado; derivado do slug do portal quando = indice)" - added
Output schema / properties / series / items / properties / origemAdded value: +{ + "description": "Camada de onde veio o achado", + "enum": [ + "curado", + "indice" + ], + "type": "string" +} - changed
Output schema / properties / series / items / properties / periodicidade / descriptionPrevious value: -"Periodicidade da série"New value: +"Periodicidade (só no catálogo curado)" - changed
Output schema / properties / series / items / requiredPrevious value: -[ - "codigo", - "nome" -]New value: +[ + "codigo", + "nome", + "origem" +] - changed
Output schema / properties / totalEncontradas / descriptionPrevious value: -"Quantidade de séries encontradas"New value: +"Quantidade de séries encontradas, antes do corte por `limite`" - changed
Output schema / requiredPrevious value: -[ - "termo", - "totalEncontradas", - "series" -]New value: +[ + "termo", + "totalEncontradas", + "series", + "catalogo" +]
- Added
bcb_cambio_cotacao - Added
bcb_cambio_moedas - Changed
bcb_comparar9 fields changed- removed
Input schema / $schemaRemoved value: -"http://json-schema.org/draft-07/schema#" - added
Input schema / properties / agregacaoAdded value: +{ + "default": "ultimo", + "description": "Como agregar os valores de cada período quando `frequencia` é informada. `ultimo` (padrão) serve a nível de preço, taxa e índice; `soma` a fluxo; `acumulada` a séries que JÁ SÃO variação percentual (IPCA mensal, por exemplo), compondo geometricamente — somar 12 variações mensais NÃO dá a inflação do ano.", + "enum": [ + "ultimo", + "primeiro", + "media", + "soma", + "acumulada" + ], + "type": "string" +} - added
Input schema / properties / frequenciaAdded value: +{ + "description": "Opcional: reamostra a série para esta frequência antes de responder (só agrega para períodos MAIORES; pedir frequência mais fina que a da série é recusado). Útil para comparar séries de periodicidades diferentes.", + "enum": [ + "mensal", + "trimestral", + "anual" + ], + "type": "string" +} - removed
Output schema / $schemaRemoved value: -"http://json-schema.org/draft-07/schema#" - added
Output schema / properties / avisoAdded value: +{ + "description": "Presente quando as séries comparadas têm periodicidades diferentes e nenhuma harmonização foi pedida — os números do ranking, nesse caso, não são diretamente comparáveis entre si.", + "type": "string" +} - added
Output schema / properties / derivacaoAdded value: +{ + "additionalProperties": false, + "description": "Origem dos números calculados: o que é derivado, por qual motor e com quais convenções", + "properties": { + "derived": { + "description": "Sempre true: há número calculado nesta resposta", + "type": "boolean" + }, + "motor": { + "description": "Componente que computou a estatística", + "type": "string" + }, + "nota": { + "description": "Convenções de cálculo e arredondamento, em prosa", + "type": "string" + } + }, + "required": [ + "derived", + "motor", + "nota" + ], + "type": "object" +} - added
Output schema / properties / harmonizacaoAdded value: +{ + "additionalProperties": false, + "description": "Presente quando `frequencia` foi informada: descreve a reamostragem aplicada. Valor DERIVADO — calculado por este servidor, não publicado pelo Banco Central.", + "properties": { + "agregacao": { + "description": "Convenção usada para agregar os valores de cada período", + "enum": [ + "ultimo", + "primeiro", + "media", + "soma", + "acumulada" + ], + "type": "string" + }, + "derived": { + "description": "Sempre true: o valor é derivado, não publicado pela fonte", + "type": "boolean" + }, + "frequencia": { + "description": "Frequência de destino", + "enum": [ + "mensal", + "trimestral", + "anual" + ], + "type": "string" + }, + "nota": { + "description": "Descrição em prosa do que foi calculado", + "type": "string" + }, + "observacoesOriginais": { + "description": "Observações antes da agregação", + "type": "number" + } + }, + "required": [ + "frequencia", + "agregacao", + "derived", + "nota" + ], + "type": "object" +} - added
Output schema / properties / ranking / items / properties / posicao / descriptionAdded value: +"Posição no ranking" - changed
Output schema / requiredPrevious value: -[ - "periodo", - "totalSeries", - "seriesComDados", - "seriesComErro", - "ranking", - "erros" -]New value: +[ + "periodo", + "totalSeries", + "seriesComDados", + "seriesComErro", + "ranking", + "erros", + "derivacao" +]
- Added
bcb_correlacao - Added
bcb_deflacionar - Added
bcb_focus_expectativas - Added
bcb_focus_referencias - Added
bcb_focus_selic - Changed
bcb_indicadores_atuais5 fields changed- removed
Input schema / $schemaRemoved value: -"http://json-schema.org/draft-07/schema#" - added
Input schema / additionalPropertiesAdded value: +false - removed
Output schema / $schemaRemoved value: -"http://json-schema.org/draft-07/schema#" - changed
Output schema / properties / indicadores / descriptionPrevious value: -"Indicadores com seus valores mais recentes"New value: +"Lista de indicadores com seus valores mais recentes" - changed
Output schema / properties / indicadores / items / properties / erro / descriptionPrevious value: -"Mensagem de erro quando indisponível"New value: +"Mensagem de erro quando o indicador não pôde ser obtido"
- Changed
bcb_serie_metadados6 fields changed- removed
Input schema / $schemaRemoved value: -"http://json-schema.org/draft-07/schema#" - removed
Output schema / $schemaRemoved value: -"http://json-schema.org/draft-07/schema#" - removed
Output schema / properties / especialRemoved value: -{ - "description": "Indica se é uma série especial", - "type": "boolean" -} - added
Output schema / properties / periodicidadeInferidaAdded value: +{ + "description": "Presente e true quando a periodicidade foi inferida do espaçamento das observações", + "type": "boolean" +} - changed
Output schema / properties / ultimoValor / descriptionPrevious value: -"Última observação disponível (fallback)"New value: +"Última observação disponível" - removed
Output schema / properties / unidadeRemoved value: -{ - "description": "Unidade de medida", - "type": "string" -}
- Changed
bcb_serie_ultimos7 fields changed- removed
Input schema / $schemaRemoved value: -"http://json-schema.org/draft-07/schema#" - changed
Input schema / properties / quantidade / descriptionPrevious value: -"Quantidade de valores a retornar (1-1000, padrão: 10)"New value: +"Quantidade de valores a retornar (1-1000, padrão: 10). A API do BCB tem teto de 20 no endpoint nativo; acima disso o servidor busca por janela de datas e devolve os N últimos." - removed
Output schema / $schemaRemoved value: -"http://json-schema.org/draft-07/schema#" - added
Output schema / properties / chunkingAdded value: +{ + "additionalProperties": false, + "description": "Presente quando a consulta foi fatiada em várias requisições à origem, por causa do limite de 10 anos por janela em séries diárias. As fatias são fundidas e ordenadas antes de responder.", + "properties": { + "fatiaAnos": { + "description": "Largura máxima de cada janela, em anos", + "type": "number" + }, + "janelas": { + "description": "Quantidade de janelas consultadas", + "type": "number" + } + }, + "required": [ + "janelas", + "fatiaAnos" + ], + "type": "object" +} - added
Output schema / properties / serie / descriptionAdded value: +"Identificação da série temporal" - changed
Output schema / properties / serie / properties / periodicidade / descriptionPrevious value: -"Periodicidade da série"New value: +"Periodicidade (Diária, Mensal, etc.)" - added
Output schema / properties / serie / properties / periodicidadeInferidaAdded value: +{ + "description": "Presente e true quando a periodicidade foi inferida do espaçamento das observações, e não lida do catálogo — a API do SGS não publica metadados de série.", + "type": "boolean" +}
- Changed
bcb_serie_valores11 fields changed- removed
Input schema / $schemaRemoved value: -"http://json-schema.org/draft-07/schema#" - added
Input schema / properties / agregacaoAdded value: +{ + "default": "ultimo", + "description": "Como agregar os valores de cada período quando `frequencia` é informada. `ultimo` (padrão) serve a nível de preço, taxa e índice; `soma` a fluxo; `acumulada` a séries que JÁ SÃO variação percentual (IPCA mensal, por exemplo), compondo geometricamente — somar 12 variações mensais NÃO dá a inflação do ano.", + "enum": [ + "ultimo", + "primeiro", + "media", + "soma", + "acumulada" + ], + "type": "string" +} - added
Input schema / properties / frequenciaAdded value: +{ + "description": "Opcional: reamostra a série para esta frequência antes de responder (só agrega para períodos MAIORES; pedir frequência mais fina que a da série é recusado). Útil para comparar séries de periodicidades diferentes.", + "enum": [ + "mensal", + "trimestral", + "anual" + ], + "type": "string" +} - removed
Output schema / $schemaRemoved value: -"http://json-schema.org/draft-07/schema#" - added
Output schema / properties / chunkingAdded value: +{ + "additionalProperties": false, + "description": "Presente quando a consulta foi fatiada em várias requisições à origem, por causa do limite de 10 anos por janela em séries diárias. As fatias são fundidas e ordenadas antes de responder.", + "properties": { + "fatiaAnos": { + "description": "Largura máxima de cada janela, em anos", + "type": "number" + }, + "janelas": { + "description": "Quantidade de janelas consultadas", + "type": "number" + } + }, + "required": [ + "janelas", + "fatiaAnos" + ], + "type": "object" +} - added
Output schema / properties / dados / items / properties / observacoesAdded value: +{ + "description": "Só em resposta harmonizada: observações de origem agregadas neste ponto", + "type": "number" +} - added
Output schema / properties / harmonizacaoAdded value: +{ + "additionalProperties": false, + "description": "Presente quando `frequencia` foi informada: descreve a reamostragem aplicada. Valor DERIVADO — calculado por este servidor, não publicado pelo Banco Central.", + "properties": { + "agregacao": { + "description": "Convenção usada para agregar os valores de cada período", + "enum": [ + "ultimo", + "primeiro", + "media", + "soma", + "acumulada" + ], + "type": "string" + }, + "derived": { + "description": "Sempre true: o valor é derivado, não publicado pela fonte", + "type": "boolean" + }, + "frequencia": { + "description": "Frequência de destino", + "enum": [ + "mensal", + "trimestral", + "anual" + ], + "type": "string" + }, + "nota": { + "description": "Descrição em prosa do que foi calculado", + "type": "string" + }, + "observacoesOriginais": { + "description": "Observações antes da agregação", + "type": "number" + } + }, + "required": [ + "frequencia", + "agregacao", + "derived", + "nota" + ], + "type": "object" +} - added
Output schema / properties / janelaAplicadaAdded value: +{ + "additionalProperties": false, + "description": "Presente quando o período pedido estava aberto numa série diária e o servidor aplicou uma janela própria (a origem recusa janela aberta em série diária com HTTP 406).", + "properties": { + "dataFinal": { + "description": "Fim da janela efetivamente consultada (dd/MM/yyyy)", + "type": "string" + }, + "dataInicial": { + "description": "Início da janela efetivamente consultada (dd/MM/yyyy)", + "type": "string" + }, + "motivo": { + "description": "Por que a janela foi aplicada e como pedir outra", + "type": "string" + } + }, + "required": [ + "dataInicial", + "dataFinal", + "motivo" + ], + "type": "object" +} - added
Output schema / properties / serie / descriptionAdded value: +"Identificação da série temporal" - changed
Output schema / properties / serie / properties / periodicidade / descriptionPrevious value: -"Periodicidade da série"New value: +"Periodicidade (Diária, Mensal, etc.)" - added
Output schema / properties / serie / properties / periodicidadeInferidaAdded value: +{ + "description": "Presente e true quando a periodicidade foi inferida do espaçamento das observações, e não lida do catálogo — a API do SGS não publica metadados de série.", + "type": "boolean" +}
- Changed
bcb_series_populares4 fields changed- removed
Input schema / $schemaRemoved value: -"http://json-schema.org/draft-07/schema#" - removed
Output schema / $schemaRemoved value: -"http://json-schema.org/draft-07/schema#" - changed
Output schema / properties / series / anyOfPrevious value: -[ - { - "items": { - "additionalProperties": false, - "properties": { - "categoria": { - "description": "Categoria econômica", - "type": "string" - }, - "codigo": { - "description": "Código da série no SGS/BCB", - "type": "number" - }, - "nome": { - "description": "Nome da série", - "type": "string" - }, - "periodicidade": { - "description": "Periodicidade da série", - "type": "string" - } - }, - "required": [ - "codigo", - "nome" - ], - "type": "object" - }, - "type": "array" - }, - { - "additionalProperties": { - "items": { - "$ref": "#/properties/series/anyOf/0/items" - }, - "type": "array" - }, - "type": "object" - } -]New value: +[ + { + "items": { + "additionalProperties": false, + "description": "Identificação da série temporal", + "properties": { + "categoria": { + "description": "Categoria econômica", + "type": "string" + }, + "codigo": { + "description": "Código da série no SGS/BCB", + "type": "number" + }, + "nome": { + "description": "Nome da série", + "type": "string" + }, + "periodicidade": { + "description": "Periodicidade (Diária, Mensal, etc.)", + "type": "string" + } + }, + "required": [ + "codigo", + "nome" + ], + "type": "object" + }, + "type": "array" + }, + { + "additionalProperties": { + "items": { + "additionalProperties": false, + "description": "Identificação da série temporal", + "properties": { + "categoria": { + "description": "Categoria econômica", + "type": "string" + }, + "codigo": { + "description": "Código da série no SGS/BCB", + "type": "number" + }, + "nome": { + "description": "Nome da série", + "type": "string" + }, + "periodicidade": { + "description": "Periodicidade (Diária, Mensal, etc.)", + "type": "string" + } + }, + "required": [ + "codigo", + "nome" + ], + "type": "object" + }, + "type": "array" + }, + "type": "object" + } +] - changed
Output schema / properties / series / descriptionPrevious value: -"Séries encontradas (array quando filtrado; objeto agrupado por categoria caso contrário)"New value: +"Séries encontradas. Objeto agrupado por categoria quando sem filtro; array plano quando filtrado por categoria."
- Changed
bcb_variacao7 fields changed- removed
Input schema / $schemaRemoved value: -"http://json-schema.org/draft-07/schema#" - changed
Input schema / properties / periodos / descriptionPrevious value: -"Alternativa: calcular variação dos últimos N períodos (ignora datas se informado)"New value: +"Alternativa: calcular variação dos últimos N períodos (ignora datas se informado). Acima de 20 o servidor busca por janela de datas, porque o endpoint nativo do BCB tem esse teto." - removed
Output schema / $schemaRemoved value: -"http://json-schema.org/draft-07/schema#" - added
Output schema / properties / chunkingAdded value: +{ + "additionalProperties": false, + "description": "Presente quando a consulta foi fatiada em várias requisições à origem, por causa do limite de 10 anos por janela em séries diárias. As fatias são fundidas e ordenadas antes de responder.", + "properties": { + "fatiaAnos": { + "description": "Largura máxima de cada janela, em anos", + "type": "number" + }, + "janelas": { + "description": "Quantidade de janelas consultadas", + "type": "number" + } + }, + "required": [ + "janelas", + "fatiaAnos" + ], + "type": "object" +} - added
Output schema / properties / derivacaoAdded value: +{ + "additionalProperties": false, + "description": "Origem dos números calculados: o que é derivado, por qual motor e com quais convenções", + "properties": { + "derived": { + "description": "Sempre true: há número calculado nesta resposta", + "type": "boolean" + }, + "motor": { + "description": "Componente que computou a estatística", + "type": "string" + }, + "nota": { + "description": "Convenções de cálculo e arredondamento, em prosa", + "type": "string" + } + }, + "required": [ + "derived", + "motor", + "nota" + ], + "type": "object" +} - added
Output schema / properties / janelaAplicadaAdded value: +{ + "additionalProperties": false, + "description": "Presente quando o período pedido estava aberto numa série diária e o servidor aplicou uma janela própria (a origem recusa janela aberta em série diária com HTTP 406).", + "properties": { + "dataFinal": { + "description": "Fim da janela efetivamente consultada (dd/MM/yyyy)", + "type": "string" + }, + "dataInicial": { + "description": "Início da janela efetivamente consultada (dd/MM/yyyy)", + "type": "string" + }, + "motivo": { + "description": "Por que a janela foi aplicada e como pedir outra", + "type": "string" + } + }, + "required": [ + "dataInicial", + "dataFinal", + "motivo" + ], + "type": "object" +} - changed
Output schema / requiredPrevious value: -[ - "serie", - "periodo", - "analise", - "estatisticas" -]New value: +[ + "serie", + "periodo", + "analise", + "estatisticas", + "derivacao" +]
8 tool updates
v1.3.5- Changed
bcb_buscar_serie1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "mensagem": { + "description": "Mensagem exibida quando nada é encontrado", + "type": "string" + }, + "series": { + "description": "Séries que correspondem ao termo", + "items": { + "additionalProperties": false, + "properties": { + "categoria": { + "description": "Categoria econômica", + "type": "string" + }, + "codigo": { + "description": "Código da série no SGS/BCB", + "type": "number" + }, + "nome": { + "description": "Nome da série", + "type": "string" + }, + "periodicidade": { + "description": "Periodicidade da série", + "type": "string" + } + }, + "required": [ + "codigo", + "nome" + ], + "type": "object" + }, + "type": "array" + }, + "sugestao": { + "description": "Sugestões de termos alternativos", + "type": "string" + }, + "termo": { + "description": "Termo pesquisado", + "type": "string" + }, + "totalEncontradas": { + "description": "Quantidade de séries encontradas", + "type": "number" + } + }, + "required": [ + "termo", + "totalEncontradas", + "series" + ], + "type": "object" +}
- Changed
bcb_comparar1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "erros": { + "description": "Séries que não retornaram dados, com o motivo", + "items": { + "additionalProperties": false, + "properties": { + "codigo": { + "type": "number" + }, + "erro": { + "type": "string" + }, + "nome": { + "type": "string" + } + }, + "required": [ + "codigo", + "erro" + ], + "type": "object" + }, + "type": "array" + }, + "periodo": { + "additionalProperties": false, + "description": "Janela temporal comparada", + "properties": { + "dataFinal": { + "type": "string" + }, + "dataInicial": { + "type": "string" + } + }, + "required": [ + "dataInicial", + "dataFinal" + ], + "type": "object" + }, + "ranking": { + "description": "Séries ordenadas pela variação percentual (maior para menor)", + "items": { + "additionalProperties": false, + "properties": { + "categoria": { + "type": "string" + }, + "codigo": { + "type": "number" + }, + "maximo": { + "type": "number" + }, + "media": { + "type": "number" + }, + "minimo": { + "type": "number" + }, + "nome": { + "type": "string" + }, + "periodicidade": { + "type": "string" + }, + "posicao": { + "type": "number" + }, + "totalRegistros": { + "type": "number" + }, + "valorFinal": { + "type": "number" + }, + "valorInicial": { + "type": "number" + }, + "variacaoFormatada": { + "type": "string" + }, + "variacaoPercentual": { + "type": "number" + } + }, + "required": [ + "posicao", + "codigo", + "nome" + ], + "type": "object" + }, + "type": "array" + }, + "seriesComDados": { + "description": "Quantidade de séries com dados no período", + "type": "number" + }, + "seriesComErro": { + "description": "Quantidade de séries sem dados ou com erro", + "type": "number" + }, + "totalSeries": { + "description": "Quantidade de séries solicitadas", + "type": "number" + } + }, + "required": [ + "periodo", + "totalSeries", + "seriesComDados", + "seriesComErro", + "ranking", + "erros" + ], + "type": "object" +}
- Changed
bcb_indicadores_atuais1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "consultadoEm": { + "description": "Timestamp ISO 8601 da consulta", + "type": "string" + }, + "indicadores": { + "description": "Indicadores com seus valores mais recentes", + "items": { + "additionalProperties": false, + "properties": { + "codigo": { + "description": "Código da série no SGS/BCB", + "type": "number" + }, + "data": { + "description": "Data da observação", + "type": "string" + }, + "erro": { + "description": "Mensagem de erro quando indisponível", + "type": "string" + }, + "indicador": { + "description": "Nome do indicador", + "type": "string" + }, + "valor": { + "description": "Valor mais recente", + "type": "number" + } + }, + "required": [ + "indicador", + "codigo" + ], + "type": "object" + }, + "type": "array" + } + }, + "required": [ + "consultadoEm", + "indicadores" + ], + "type": "object" +}
- Changed
bcb_serie_metadados1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "categoria": { + "description": "Categoria econômica", + "type": "string" + }, + "codigo": { + "description": "Código da série no SGS/BCB", + "type": "number" + }, + "especial": { + "description": "Indica se é uma série especial", + "type": "boolean" + }, + "fonte": { + "description": "Fonte dos dados", + "type": "string" + }, + "nome": { + "description": "Nome da série", + "type": "string" + }, + "observacao": { + "description": "Observação sobre a origem dos metadados", + "type": "string" + }, + "periodicidade": { + "description": "Periodicidade da série", + "type": "string" + }, + "ultimoValor": { + "additionalProperties": false, + "description": "Última observação disponível (fallback)", + "properties": { + "data": { + "description": "Data da observação (dd/MM/yyyy)", + "type": "string" + }, + "valor": { + "description": "Valor numérico da observação", + "type": "number" + } + }, + "required": [ + "data", + "valor" + ], + "type": "object" + }, + "unidade": { + "description": "Unidade de medida", + "type": "string" + }, + "urlConsulta": { + "description": "URL da API do BCB para consulta completa", + "type": "string" + }, + "urlUltimos10": { + "description": "URL da API do BCB para os últimos 10 valores", + "type": "string" + } + }, + "required": [ + "codigo", + "nome", + "fonte" + ], + "type": "object" +}
- Changed
bcb_serie_ultimos1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "dados": { + "description": "Observações mais recentes", + "items": { + "additionalProperties": false, + "properties": { + "data": { + "description": "Data da observação (dd/MM/yyyy)", + "type": "string" + }, + "valor": { + "description": "Valor numérico da observação", + "type": "number" + } + }, + "required": [ + "data", + "valor" + ], + "type": "object" + }, + "type": "array" + }, + "observacao": { + "description": "Mensagem informativa (ex.: quando não há dados)", + "type": "string" + }, + "serie": { + "additionalProperties": false, + "properties": { + "categoria": { + "description": "Categoria econômica", + "type": "string" + }, + "codigo": { + "description": "Código da série no SGS/BCB", + "type": "number" + }, + "nome": { + "description": "Nome da série", + "type": "string" + }, + "periodicidade": { + "description": "Periodicidade da série", + "type": "string" + } + }, + "required": [ + "codigo", + "nome" + ], + "type": "object" + }, + "totalRegistros": { + "description": "Quantidade de observações retornadas", + "type": "number" + } + }, + "required": [ + "serie", + "totalRegistros", + "dados" + ], + "type": "object" +}
- Changed
bcb_serie_valores1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "dados": { + "description": "Observações históricas", + "items": { + "additionalProperties": false, + "properties": { + "data": { + "description": "Data da observação (dd/MM/yyyy)", + "type": "string" + }, + "valor": { + "description": "Valor numérico da observação", + "type": "number" + } + }, + "required": [ + "data", + "valor" + ], + "type": "object" + }, + "type": "array" + }, + "observacao": { + "description": "Mensagem informativa (ex.: quando não há dados)", + "type": "string" + }, + "periodoFinal": { + "description": "Data da última observação", + "type": "string" + }, + "periodoInicial": { + "description": "Data da primeira observação", + "type": "string" + }, + "serie": { + "additionalProperties": false, + "properties": { + "categoria": { + "description": "Categoria econômica", + "type": "string" + }, + "codigo": { + "description": "Código da série no SGS/BCB", + "type": "number" + }, + "nome": { + "description": "Nome da série", + "type": "string" + }, + "periodicidade": { + "description": "Periodicidade da série", + "type": "string" + } + }, + "required": [ + "codigo", + "nome" + ], + "type": "object" + }, + "totalRegistros": { + "description": "Quantidade de observações retornadas", + "type": "number" + } + }, + "required": [ + "serie", + "totalRegistros", + "dados" + ], + "type": "object" +}
- Changed
bcb_series_populares1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "categorias": { + "description": "Quantidade de categorias distintas", + "type": "number" + }, + "observacao": { + "description": "Dica de uso", + "type": "string" + }, + "series": { + "anyOf": [ + { + "items": { + "additionalProperties": false, + "properties": { + "categoria": { + "description": "Categoria econômica", + "type": "string" + }, + "codigo": { + "description": "Código da série no SGS/BCB", + "type": "number" + }, + "nome": { + "description": "Nome da série", + "type": "string" + }, + "periodicidade": { + "description": "Periodicidade da série", + "type": "string" + } + }, + "required": [ + "codigo", + "nome" + ], + "type": "object" + }, + "type": "array" + }, + { + "additionalProperties": { + "items": { + "$ref": "#/properties/series/anyOf/0/items" + }, + "type": "array" + }, + "type": "object" + } + ], + "description": "Séries encontradas (array quando filtrado; objeto agrupado por categoria caso contrário)" + }, + "totalSeries": { + "description": "Quantidade total de séries retornadas", + "type": "number" + } + }, + "required": [ + "totalSeries", + "categorias", + "series" + ], + "type": "object" +}
- Changed
bcb_variacao1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "analise": { + "additionalProperties": false, + "description": "Resultado da variação entre o primeiro e o último valor", + "properties": { + "diferencaAbsoluta": { + "type": "number" + }, + "valorFinal": { + "type": "number" + }, + "valorInicial": { + "type": "number" + }, + "variacaoFormatada": { + "type": "string" + }, + "variacaoPercentual": { + "type": "number" + } + }, + "required": [ + "valorInicial", + "valorFinal", + "diferencaAbsoluta", + "variacaoPercentual", + "variacaoFormatada" + ], + "type": "object" + }, + "estatisticas": { + "additionalProperties": false, + "description": "Estatísticas descritivas dos valores no período", + "properties": { + "amplitude": { + "type": "number" + }, + "maximo": { + "type": "number" + }, + "media": { + "type": "number" + }, + "minimo": { + "type": "number" + } + }, + "required": [ + "maximo", + "minimo", + "media", + "amplitude" + ], + "type": "object" + }, + "periodo": { + "additionalProperties": false, + "description": "Janela temporal analisada", + "properties": { + "dataFinal": { + "type": "string" + }, + "dataInicial": { + "type": "string" + }, + "totalPeriodos": { + "type": "number" + } + }, + "required": [ + "dataInicial", + "dataFinal", + "totalPeriodos" + ], + "type": "object" + }, + "serie": { + "additionalProperties": false, + "description": "Identificação da série", + "properties": { + "categoria": { + "type": "string" + }, + "codigo": { + "type": "number" + }, + "nome": { + "type": "string" + } + }, + "required": [ + "codigo", + "nome" + ], + "type": "object" + } + }, + "required": [ + "serie", + "periodo", + "analise", + "estatisticas" + ], + "type": "object" +}
8 tool updates
v1.0.0- First observed
bcb_buscar_serie - First observed
bcb_comparar - First observed
bcb_indicadores_atuais - First observed
bcb_serie_metadados - First observed
bcb_serie_ultimos - First observed
bcb_serie_valores - First observed
bcb_series_populares - First observed
bcb_variacao
TDQS
Scored across 17 tools
The descriptions are unusually explicit, with 'Quando usar / Quando NÃO usar' sections that steer selection between the closely related bcb_serie_valores, bcb_serie_ultimos, bcb_variacao, bcb_comparar and bcb_correlacao. The only real overlap is between bcb_buscar_serie and the generic search tool, both of which search the series catalog; descriptions distinguish them (code discovery vs. Deep Research contract) but an agent could still hesitate there.
Nearly every tool follows a clean bcb_<domain>_<action> snake_case pattern (bcb_serie_valores, bcb_focus_selic, bcb_cambio_cotacao), with predictable prefixes grouping series, focus and cambio families. The bare 'search' and 'fetch' break the convention, though their generic naming is mandated by the OpenAI Deep Research contract and is flagged as such.
17 tools is on the heavy side but each maps to a distinct analytical capability (discovery, raw data, variation, comparison, correlation, deflation, Focus, FX, plus the required search/fetch pair), so nothing feels redundant. It lands at the upper bound of comfortable rather than being bloated.
The surface covers the full lifecycle: discovering series (bcb_buscar_serie, bcb_series_populares), inspecting metadata and values, deriving analytics (variation, comparison, correlation, deflation), plus dedicated Focus expectations and FX calibration tools and the search/fetch document pair. No obvious operational gap remains for the stated SGS/Focus/PTAX domain.
Maintenance
Related MCP Connectors
MCP server for Brazilian Federal Senate open data (legislative, administrative, e-Cidadania).
Banco Central de Reserva del Perú (BCRP) statistics series API MCP. Keyless.
INEGI MCP — Mexico's national statistics office (INEGI) Indicators API.
Argentina 'Series de Tiempo' MCP — national time-series API (apis.datos.gob.ar).
Related MCP Servers
- AlicenseBqualityDmaintenanceA Model Context Protocol server that provides tools to search and retrieve economic data series from the Federal Reserve Economic Data (FRED) API.2455 npm11AGPL 3.0
- AlicenseCqualityBmaintenanceEnables AI assistants to access and analyze financial data including stock information, company fundamentals, and market insights through the Financial Modeling Prep API.100279 npm149TypeScriptApache 2.0
- AlicenseNot gradedqualityCmaintenanceProvides AI assistants with access to comprehensive financial data including real-time stock quotes, company fundamentals, financial statements, market analysis, SEC filings, and economic indicators through 253+ tools across 24 categories.279 npmApache 2.0
- AlicenseAqualityAmaintenanceThis server provides access to IBGE's public APIs, enabling AI assistants to query geographic, demographic, and statistical data from Brazil.23801 npm11MIT