copom-mcp
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@copom-mcpcompare the tone of the last two Copom meetings"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
copom-mcp
Servidor MCP (Model Context Protocol) que dá a assistentes de IA, como Claude Desktop, Claude Code, Cursor e VS Code, acesso às 261 atas do Copom (de 1998 até hoje) e aos indicadores oficiais do Banco Central do Brasil. Pergunte em português e receba respostas com citação do parágrafo e da reunião de onde veio cada afirmação.
"Como o Copom passou a falar das tarifas americanas em 2025?" "Compare o tom das duas últimas reuniões." "Em quais reuniões houve voto divergente e o que a minoria defendia?"
Não precisa de chave de API: o servidor só entrega os dados, e quem responde é o assistente que você já usa.
O que tem aqui
Conceito | Onde |
Servidor MCP com ferramentas, recursos e prompts, saída estruturada (schemas Pydantic) e anotações | |
RAG com citações: corpus de 13 mil parágrafos, extraídos de HTML e PDF de 28 anos de formatos | |
Busca híbrida: BM25 próprio + embeddings locais (fastembed), combinados por Reciprocal Rank Fusion | |
Extração estruturada com o Claude: few-shot, prompt caching, Batch API, fallback em recusas, custo por chamada | |
Evals: 25 perguntas com gabarito para a busca e comparação da extração com a meta Selic oficial | |
Desenvolvimento com o Claude Code: | |
Entrega: pacote com o corpus embutido, CI que testa o wheel e publicação no PyPI por trusted publishing |
Related MCP server: MCP Brazil Public Data
Instalação
Precisa do uv (pip install uv) ou de Python 3.11+.
Claude Code
claude mcp add copom -- uvx --from git+https://github.com/FelipeYabiko/copom-mcp copom-mcpClaude Desktop: em Configurações → Desenvolvedor → Editar configuração, adicione:
{
"mcpServers": {
"copom": {
"command": "uvx",
"args": ["--from", "git+https://github.com/FelipeYabiko/copom-mcp", "copom-mcp"]
}
}
}Busca semântica (opcional). A instalação padrão usa só palavras-chave e é leve. Para a busca híbrida, use
copom-mcp[semantic] no lugar de copom-mcp. Na primeira vez, o servidor baixa um modelo de ~220 MB e gera os
embeddings, o que leva alguns minutos, em segundo plano: ele responde ao cliente na hora e busca só por
palavras-chave até o índice ficar pronto (o campo modo_de_busca mostra o estado).
Ferramentas
Ferramenta | O que faz |
| Busca parágrafos sobre um tema, com filtros de período e reunião. Devolve trechos prontos para citar |
| Texto de uma ata por seção e parágrafo, com a decisão de juros |
| Reuniões com a meta Selic antes e depois e a decisão (alta, corte ou manutenção); as 50 mais recentes, ou |
| Séries oficiais do BCB: meta Selic, IPCA (mensal e 12 meses), IGP-M e dólar PTAX |
| Análise estruturada gerada por IA (Gemini 3.5 Flash-Lite): tom, fatores, riscos e orientação futura |
Também há recursos (copom://reunioes, copom://atas/{reuniao}) e prompts (analisar_reuniao,
comparar_reunioes).
Saída real de listar_reunioes(desde="2026"):
276ª 2026-01-28 15.00% → 15.00% manutenção (+0 pb)
277ª 2026-03-18 15.00% → 14.75% corte (-25 pb)
278ª 2026-04-29 14.75% → 14.50% corte (-25 pb)
279ª 2026-06-17 14.50% → 14.25% corte (-25 pb)
280ª 2026-08-05 14.25% → 14.00% corte (-25 pb)
281ª 2026-09-16 14.00% → 13.75% corte (-25 pb)E de buscar_atas("choque de tarifas comércio internacional", desde="2025"):
271ª (2025-06-18) B) Cenários e análise de riscos §6: O cenário externo mostra-se adverso e particularmente
incerto. O Comitê avaliou que houve alguns desenvolvimentos que permitiriam a conclusão de uma melhora no
cenário internacional, como a reversão parcial das tarifas, mas...
270ª (2025-05-07) B) Cenários e análise de riscos §7: O cenário externo mostra-se adverso e particularmente
incerto. O choque de tarifas e o choque de incerteza, apesar de todas as tentativas de mensuração...Avaliação
Busca
25 perguntas, cada uma com um gabarito em forma de expressão regular sobre o texto das atas. "Diretas" usam a palavra que está no texto; "paráfrases" descrevem o tema com outras palavras (por exemplo, "guerra comercial" quando a ata diz "choque de tarifas").
Modo | hit@5 | precisão@5 | MRR@10 | hit@5 (diretas) | hit@5 (paráfrases) |
BM25 (padrão) | 0,72 | 0,54 | 0,64 | 0,90 | 0,60 |
Híbrida + MiniLM multilíngue (220 MB) | 0,76 | 0,53 | 0,63 | 1,00 | 0,60 |
Híbrida + potion multilíngue (estático) | 0,72 | 0,49 | 0,61 | 0,90 | 0,60 |
Híbrida + EmbeddingGemma 300M (1,2 GB) | 0,72 | 0,50 | 0,71 | 1,00 | 0,53 |
O que os números mostram:
Os embeddings pequenos quase não ajudam nas paráfrases. O MiniLM lê só 128 tokens, e os parágrafos têm até 450. O EmbeddingGemma, maior e mais recente, põe o resultado certo mais no topo (melhor MRR) e acerta todas as diretas, mas erra mais paráfrases, pesa 1,2 GB e levou 49 minutos para indexar o corpus na CPU. Nenhum modelo ganhou com folga, então o padrão é o MiniLM: o melhor hit@5 com 220 MB.
Num servidor MCP, quem escreve a busca é o modelo. Por isso a descrição de
buscar_atasensina o vocabulário do Copom e sugere várias buscas curtas. Na prática, isso resolve boa parte das paráfrases sem nenhum modelo extra.O CI roda o eval do BM25 e falha se a qualidade cair abaixo da linha de base.
Para reproduzir: python evals/run_busca.py (adicione --semantica --modelo <nome> para os outros).
Extração
copom-mcp extrair (com ANTHROPIC_API_KEY) analisa cada ata com o Claude e python evals/run_extracao.py
compara a decisão, a nova Selic e a variação com a série oficial do BCB, além de somar custo, uso de cache e
latência. A ata usada como exemplo no prompt fica fora da conta, para não inflar o resultado.
Com --lote, o id do lote fica em evals/results/lote-pendente.json assim que ele é criado. Se o programa
parar durante a espera (até 24 h), o lote segue na Anthropic: rodar de novo com --lote retoma o mesmo lote
em vez de criar e pagar outro, e o modo sem --lote se recusa a rodar enquanto houver um pendente.
Testar sem custo. A mesma extração roda em provedores com plano gratuito, pela API compatível com a da OpenAI: mesmo schema e mesmas instruções, com a resposta validada pelo Pydantic e uma nova tentativa quando vem fora do schema. Sem prompt caching nem Batch API, que são da Anthropic.
export GROQ_API_KEY=... # ou GEMINI_API_KEY / OPENROUTER_API_KEY
copom-mcp extrair --provedor groq --limite 5 # as 5 atas mais recentes que faltam
python evals/run_extracao.py --analises evals/results/analises-groq.jsonProvedor | Modelo padrão | Observação |
|
| Rápido, mas o plano gratuito tem poucos tokens por minuto: vai sem a ata de exemplo, e as atas longas (quase todas antes de 2016) não cabem |
|
| Aceita atas longas e vai com o exemplo; o melhor para rodar o corpus inteiro |
| escolha com | Modelos gratuitos têm sufixo |
As análises vão para evals/results/analises-<provedor>.json (fora do Git), a não ser que --saida indique
outro arquivo. O 429 por minuto é respeitado (retry-after); cota do dia esgotada, chave inválida ou três atas
seguidas com erro param a execução, que continua de onde parou na próxima vez.
As análises do pacote (src/copom_mcp/data/analises.json, lidas por analise_reuniao) foram geradas
assim, com o Gemini, para as 248 reuniões com decisão:
copom-mcp extrair --provedor gemini --saida src/copom_mcp/data/analises.json. No eval, a decisão e a nova
Selic batem com a série oficial em todas as 247 avaliadas, e todas as citações (§N) existem na ata. A variação
em pontos-base acerta 96,8%: em 8 atas (2005-2006 e 2013), o modelo escreve ±25 pb onde o passo foi maior.
Desenvolvimento
git clone https://github.com/FelipeYabiko/copom-mcp.git && cd copom-mcp
python -m venv .venv && source .venv/bin/activate
pip install -e ".[dev]"
pytest -q # 25 testes, sem internet
copom-mcp buscar "inflação de serviços" # testar a busca no terminal
npx @modelcontextprotocol/inspector .venv/bin/copom-mcp # testar o servidor numa interface webComando | O que faz |
| Servidor MCP por stdio (é o que os clientes executam) |
| Servidor por Streamable HTTP |
| Baixa atas novas para |
| Análise estruturada com o Claude (Batch API com |
| A mesma análise num provedor gratuito ( |
| Regenera o corpus que vai no pacote |
Abrindo o repositório no Claude Code, ele já vem configurado:
Hooks:
ruffdepois de cada edição e testes antes de encerrar uma tarefa.Skills:
/nova-serie,/avaliar-buscae/atualizar-corpus.Subagente:
revisor, que revisa com o checklist do projeto.Servidor MCP: o próprio servidor, via
.mcp.json.
Comentar @claude numa issue ou PR aciona a Claude Code GitHub Action, depois de instalar o app e configurar o
segredo ANTHROPIC_API_KEY.
Quer entender cada conceito em detalhe? Veja o guia de estudo.
Fonte dos dados
Atas e séries: Banco Central do Brasil, dados públicos. Este projeto não tem vínculo com o Banco Central. Atas anteriores a ~2008 não numeram os parágrafos; nelas, o número do parágrafo é a ordem no texto.
Licença
MIT
Available Tools
5 toolsanalise_reuniaoAnálise estruturada de uma reuniãoARead-only
Análise gerada por IA (Gemini 3.5 Flash-Lite) de uma ata: decisão, tom (duro/neutro/brando),
fatores, riscos e orientação futura, com os parágrafos citados. Tom e fatores são interpretação do
modelo: para conferir, leia a ata com ler_ata. Para os números oficiais (Selic antes e depois,
variação), use listar_reunioes.
| Name | Required | Description | Default |
|---|---|---|---|
| reuniao | Yes | Número da reunião |
Output Schema
| Name | Required | Description |
|---|---|---|
| tom | Yes | duro (hawkish): preocupação com inflação, viés de aperto; brando (dovish): viés de afrouxamento |
| decisao | Yes | |
| unanime | Yes | |
| selic_nova | Yes | Meta Selic decidida, em % ao ano |
| riscos_alta | Yes | Riscos de alta para a inflação citados na ata |
| riscos_baixa | Yes | Riscos de baixa para a inflação citados na ata |
| fatores_decisao | Yes | 3 a 5 argumentos principais, cada um citando o parágrafo (§N) |
| justificativa_tom | Yes | |
| orientacao_futura | Yes | O que o Copom sinaliza sobre os próximos passos |
| votos_divergentes | Yes | Quem votou diferente e o que defendeu; vazio se unânime |
| paragrafos_citados | Yes | |
| variacao_pontos_base | Yes | Negativo para corte. Ex.: -25 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false, so safety is covered. The description adds genuinely useful context beyond that: the output is model interpretation (Gemini 3.5 Flash-Lite), tone and factors are subjective and should be cross-checked. It does not mention latency or cost of the AI call, which would have made it a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with what the analysis contains before the verification guidance. Dense but every clause carries information; the model name is arguably dispensable but minor.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return values need no explanation, and the description still summarizes the analysis contents. Trust caveats and sibling routing are covered, leaving nothing an agent needs in order to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single parameter 'reuniao' is documented in the schema as the meeting number. The description adds no additional meaning about the parameter (e.g., valid range or where to obtain the number), so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource: an AI-generated analysis of a meeting minute, enumerating exactly what it returns (decisão, tom, fatores, riscos, orientação futura, parágrafos citados). This distinguishes it clearly from siblings like ler_ata (raw text) and listar_reunioes (official numbers).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes the agent: use ler_ata to verify the interpretation against the source minute, and use listar_reunioes for official numbers (Selic before/after, change). It states both the tool's role and the alternatives for adjacent needs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
buscar_atasBuscar nas atas do CopomARead-only
Busca parágrafos das atas do Copom sobre um tema. Devolve trechos com reunião, data, seção e
parágrafo para citar. Combine com desde/ate para comparar períodos.
As atas usam linguagem técnica: se a primeira busca não trouxer o tema, tente o vocabulário do Copom (ex.: "choque de tarifas" em vez de "guerra comercial", "desancoragem das expectativas" em vez de "inflação fora do controle") ou faça várias buscas curtas.
| Name | Required | Description | Default |
|---|---|---|---|
| ate | No | AAAA, AAAA-MM ou AAAA-MM-DD | |
| desde | No | AAAA, AAAA-MM ou AAAA-MM-DD | |
| limite | No | ||
| reuniao | No | Restringe a uma reunião | |
| consulta | Yes | Tema ou pergunta, em português. Ex.: 'inflação de serviços' |
Output Schema
| Name | Required | Description |
|---|---|---|
| consulta | Yes | |
| resultados | Yes | |
| modo_de_busca | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false, and the description adds value beyond that by disclosing the shape of returned excerpts and the query-retry behavior for technical vocabulary. It does not discuss result limits, ranking, or empty-result behavior beyond the retry hint.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short paragraphs, front-loaded with what is returned, followed by actionable retrieval advice. Every sentence carries weight, including the concrete vocabulary substitution examples.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema covering return shape and annotations covering the safety profile, the description fills the remaining gaps: query strategy and excerpt usability for citation. It leaves the paging/limite behavior to the schema, which is acceptable but slightly thin for a search tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 80%, so desde/ate formats, reuniao restriction and the consulta example are already documented. The description adds usage meaning for desde/ate ('comparar períodos') but says nothing about limite or how parameters combine, so the schema still carries most of the burden.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Busca parágrafos das atas do Copom') plus the scope ('sobre um tema') and the returned unit ('trechos com reunião, data, seção e parágrafo para citar'). The paragraph-level theme search is naturally distinct from siblings like ler_ata (full meeting) and listar_reunioes (meeting listing), so an agent can route without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete operational guidance: combine with desde/ate to compare periods, and if the first search misses, retry with Copom-specific vocabulary or split into several short searches. No sibling is named as an alternative or exclusion, which keeps it from a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
consultar_indicadorConsultar indicador do Banco CentralARead-only
Série oficial do Banco Central (SGS) entre duas datas. Séries diárias longas (mais de 400 pontos) voltam com o último valor de cada mês, para caber na conversa.
| Name | Required | Description | Default |
|---|---|---|---|
| fim | No | AAAA, AAAA-MM ou AAAA-MM-DD; padrão: hoje | |
| inicio | Yes | AAAA, AAAA-MM ou AAAA-MM-DD | |
| indicador | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| nome | Yes | |
| fonte | Yes | |
| pontos | Yes | |
| unidade | Yes | |
| indicador | Yes | |
| periodicidade | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and openWorldHint, so safety is covered. The description adds genuinely useful behavior beyond the schema: long daily series (>400 points) are automatically downsampled to the last value of each month to fit the conversation context — a transformation the agent must know to interpret results correctly.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the resource and source, followed by the downsampling caveat. No wasted words, though the truncation rule could be stated slightly more crisply (e.g., naming the threshold as automatic aggregation).
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return-value documentation is unnecessary, and annotations cover the safety profile. The description fills the most important remaining gap — the monthly downsampling for long daily series — so an agent can interpret results; only minor gaps remain (frequency defaults, whether values are level or change).
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 67%: inicio and fim are documented in the schema with accepted formats, but the five enum values for indicador carry no explanation in either place. The description reinforces the two-date range concept and "AAAA" granularity indirectly, but does not add syntax or semantic detail beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States the specific resource and source: "Série oficial do Banco Central (SGS) entre duas datas", which tells an agent it retrieves official BCB time-series data over a date range. The implicit verb (query/retrieve) is clear from the name, and the sibling tools (atas, reuniões) make the domain distinction obvious.
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 is only implied: it is the sole indicator-query tool among meeting-related siblings, so selection is unambiguous by default. However, there is no explicit statement of when to prefer it, what "indicador" codes mean, or what to expect if the range is invalid — guidance remains implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ler_ataLer uma ata do CopomBRead-only
Devolve o texto de uma ata, organizado por seção e parágrafo, com a decisão de juros da reunião.
| Name | Required | Description | Default |
|---|---|---|---|
| secao | No | Trecho do título da seção, para ler só ela | |
| reuniao | Yes | Número da reunião. Ex.: 281 |
Output Schema
| Name | Required | Description |
|---|---|---|
| secoes | Yes | |
| reuniao | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already establish that this is a read-only, closed-world operation. The description adds useful context about the return structure (section/paragraph organization and interest-rate decision), but it does not discuss error behavior, permissions, or retrieval limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no wasted wording. It efficiently states the resource, the output organization, and the key content included.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists and annotations cover the safety profile, so the description need not explain return values in detail. It adequately states the content and structure of the result, though it would be stronger with guidance on how this differs from buscar_atas.
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 both parameters are already documented in the schema. The description does not add meaning beyond the schema for 'reuniao' or 'secao', so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: it returns the text of a meeting minute, organized by section and paragraph, including the interest-rate decision. This is clear, but it does not explicitly distinguish the tool from the sibling buscar_atas, which likely also deals with minutes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit guidance on when to use this tool versus buscar_atas or analise_reuniao. The required 'reuniao' parameter implies retrieving a specific meeting's minutes, but the description gives no exclusions, alternatives, or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
listar_reunioesListar reuniões e decisõesARead-only
Lista reuniões do Copom com a meta Selic antes e depois e a decisão (alta, corte ou manutenção).
Devolve as limite reuniões mais recentes que atendem aos filtros; total conta todas. Para períodos
antigos, use desde/ate em vez de aumentar o limite.
| Name | Required | Description | Default |
|---|---|---|---|
| ate | No | AAAA, AAAA-MM ou AAAA-MM-DD | |
| desde | No | AAAA, AAAA-MM ou AAAA-MM-DD | |
| limite | No | Máximo de reuniões, as mais recentes | |
| decisao | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| total | Yes | |
| reunioes | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false, so safety is covered. The description adds genuine behavior beyond that: results are truncated to the `limite` most recent matches while `total` counts all matching meetings, which is exactly the kind of truncation disclosure 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?
Two short paragraphs, zero filler. The returned fields are named first, then the truncation/pagination rule, then the fallback advice — properly 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?
An output schema exists, so return values needn't be explained, and annotations cover the safety profile. The description supplies the one non-obvious thing (most-recent truncation with `total` for full count); only explicit sibling routing 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 75% and already documents date formats and the enum values for `decisao`. The description still adds meaning: `limite` selects the most recent N (not an arbitrary N) and the date bounds are the correct lever for older data, going beyond the schema's bare 'Máximo de reuniões, as mais recentes'.
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 ('Lista reuniões do Copom') and even names the payload fields returned (meta Selic antes/depois and the decision). It does not explicitly distinguish itself from siblings like buscar_atas or analise_reuniao, so it falls short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives real operational guidance — use `desde`/`ate` rather than inflating `limite` for old periods — which tells the agent how to navigate the result window. However, it never says when to use this tool instead of buscar_atas, ler_ata or analise_reuniao, so sibling routing is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
5 tool updates
v0.1.0- First observed
analise_reuniao - First observed
buscar_atas - First observed
consultar_indicador - First observed
ler_ata - First observed
listar_reunioes
TDQS
Scored across 5 tools
The tools mostly target distinct needs: searching minute excerpts, reading a full minute, listing meetings, querying SGS series, and generating AI analysis. There is mild overlap between `analise_reuniao` and `ler_ata`/`buscar_atas`, and between `listar_reunioes` and `consultar_indicador` for Selic-related data, but the descriptions provide enough guidance to differentiate them.
Four tools follow a clear Portuguese verb_noun pattern (`buscar_atas`, `ler_ata`, `listar_reunioes`, `consultar_indicador`). `analise_reuniao` deviates slightly by using a noun-like form instead of an infinitive verb, but the overall convention remains readable and predictable.
Five tools is well-scoped for a Copom minutes and indicators server. Each tool covers a distinct workflow need, and there is no obvious redundancy or missing slot that would require more tools.
The surface covers searching, reading, meeting listing, indicator querying, and AI-assisted analysis for the Copom domain. A minor gap is that `consultar_indicador` likely requires known SGS series codes without a discovery tool, but core workflows are otherwise supported.
Maintenance
Related MCP Connectors
Banco Central do Brasil (BCB): SGS series, Focus expectations, PTAX, stats + provenance. 17 tools.
Brazil Macroeconomic and Financial Data AI Platform for AI agents.
Brazilian public data API for AI agents. BCB, IBGE, CVM, B3, compliance. x402 payments on Base.
Discover, resolve, and query official Brazilian economic data with semantic search and provenance.
Related MCP Servers
- AlicenseNot gradedqualityNot gradedmaintenanceConnects AI agents to 28 Brazilian public APIs, providing over 200 tools to access data on economy, legislation, transparency, and the judiciary. It enables complex queries and cross-referencing of government datasets like IBGE, the Central Bank, and the National Congress through natural language.MIT
- AlicenseAqualityCmaintenanceEnables lookup of Brazilian public data including companies (CNPJ), postal codes (CEP), banking, economy, geography, and more through 15 tools and 2 guided prompts, powered by BrasilAPI with no API key required.15MIT
- AlicenseNot gradedqualityCmaintenanceProvides point-in-time Brazilian market data and official statistics, enabling accurate backtesting and AI agent access to vintage, unrevised data, as well as Brazilian financial primitives like PIX code generation and business day calculations.MIT
- AlicenseAqualityAmaintenanceEnables AI assistants to query Brazilian public data from IBGE, Banco Central, INMET, and Câmara dos Deputados, including population, economic indicators, weather observations, and legislative information, without requiring API keys for most tools.1439 PyPI2MIT