Skip to main content
Glama
FelipeYabiko

copom-mcp

by FelipeYabiko

copom-mcp

CI Python MCP License

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

server.py

RAG com citações: corpus de 13 mil parágrafos, extraídos de HTML e PDF de 28 anos de formatos

parsing.py, corpus.py

Busca híbrida: BM25 próprio + embeddings locais (fastembed), combinados por Reciprocal Rank Fusion

search.py

Extração estruturada com o Claude: few-shot, prompt caching, Batch API, fallback em recusas, custo por chamada

extract.py

Evals: 25 perguntas com gabarito para a busca e comparação da extração com a meta Selic oficial

evals/

Desenvolvimento com o Claude Code: CLAUDE.md, hooks, skills, subagente revisor, .mcp.json e @claude no GitHub

.claude/, CLAUDE.md

Entrega: pacote com o corpus embutido, CI que testa o wheel e publicação no PyPI por trusted publishing

.github/workflows/

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

Claude 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

buscar_atas

Busca parágrafos sobre um tema, com filtros de período e reunião. Devolve trechos prontos para citar

ler_ata

Texto de uma ata por seção e parágrafo, com a decisão de juros

listar_reunioes

Reuniões com a meta Selic antes e depois e a decisão (alta, corte ou manutenção); as 50 mais recentes, ou limite

consultar_indicador

Séries oficiais do BCB: meta Selic, IPCA (mensal e 12 meses), IGP-M e dólar PTAX

analise_reuniao

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_atas ensina 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.json

Provedor

Modelo padrão

Observação

groq

openai/gpt-oss-120b

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

gemini

gemini-3.5-flash-lite

Aceita atas longas e vai com o exemplo; o melhor para rodar o corpus inteiro

openrouter

escolha com --modelo

Modelos gratuitos têm sufixo :free e mudam com frequência

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 web

Comando

O que faz

copom-mcp

Servidor MCP por stdio (é o que os clientes executam)

copom-mcp servir --http

Servidor por Streamable HTTP

copom-mcp atualizar

Baixa atas novas para ~/.local/share/copom-mcp

copom-mcp extrair [reuniões] [--lote]

Análise estruturada com o Claude (Batch API com --lote)

copom-mcp extrair --provedor groq [--limite N]

A mesma análise num provedor gratuito (groq, gemini ou openrouter)

python scripts/build_corpus.py

Regenera o corpus que vai no pacote

Abrindo o repositório no Claude Code, ele já vem configurado:

  • Hooks: ruff depois de cada edição e testes antes de encerrar uma tarefa.

  • Skills: /nova-serie, /avaliar-busca e /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 tools
analise_reuniaoAnálise estruturada de uma reuniãoA
Read-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.

NameRequiredDescriptionDefault
reuniaoYesNúmero da reunião

Output Schema

NameRequiredDescription
tomYesduro (hawkish): preocupação com inflação, viés de aperto; brando (dovish): viés de afrouxamento
decisaoYes
unanimeYes
selic_novaYesMeta Selic decidida, em % ao ano
riscos_altaYesRiscos de alta para a inflação citados na ata
riscos_baixaYesRiscos de baixa para a inflação citados na ata
fatores_decisaoYes3 a 5 argumentos principais, cada um citando o parágrafo (§N)
justificativa_tomYes
orientacao_futuraYesO que o Copom sinaliza sobre os próximos passos
votos_divergentesYesQuem votou diferente e o que defendeu; vazio se unânime
paragrafos_citadosYes
variacao_pontos_baseYesNegativo para corte. Ex.: -25

TDQS

A4.4/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists so return values need no explanation, and the description 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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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

NameRequiredDescriptionDefault
ateNoAAAA, AAAA-MM ou AAAA-MM-DD
desdeNoAAAA, AAAA-MM ou AAAA-MM-DD
limiteNo
reuniaoNoRestringe a uma reunião
consultaYesTema ou pergunta, em português. Ex.: 'inflação de serviços'

Output Schema

NameRequiredDescription
consultaYes
resultadosYes
modo_de_buscaYes

TDQS

A4.2/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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

NameRequiredDescriptionDefault
fimNoAAAA, AAAA-MM ou AAAA-MM-DD; padrão: hoje
inicioYesAAAA, AAAA-MM ou AAAA-MM-DD
indicadorYes

Output Schema

NameRequiredDescription
nomeYes
fonteYes
pontosYes
unidadeYes
indicadorYes
periodicidadeYes

TDQS

A3.7/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, 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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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 CopomB
Read-only

Devolve o texto de uma ata, organizado por seção e parágrafo, com a decisão de juros da reunião.

NameRequiredDescriptionDefault
secaoNoTrecho do título da seção, para ler só ela
reuniaoYesNúmero da reunião. Ex.: 281

Output Schema

NameRequiredDescription
secoesYes
reuniaoYes

TDQS

B3.4/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists and annotations 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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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

NameRequiredDescriptionDefault
ateNoAAAA, AAAA-MM ou AAAA-MM-DD
desdeNoAAAA, AAAA-MM ou AAAA-MM-DD
limiteNoMáximo de reuniões, as mais recentes
decisaoNo

Output Schema

NameRequiredDescription
totalYes
reunioesYes

TDQS

A3.9/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values 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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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.

  1. 5 tool updatesv0.1.0
    • First observedanalise_reuniao
    • First observedbuscar_atas
    • First observedconsultar_indicador
    • First observedler_ata
    • First observedlistar_reunioes

TDQS

A3.9/5.0

Scored across 5 tools

Disambiguation4/5

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.

Naming Consistency4/5

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.

Tool Count5/5

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.

Completeness4/5

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

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    Not graded
    maintenance
    Connects 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
  • A
    license
    A
    quality
    C
    maintenance
    Enables 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.
    15
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Provides 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
  • A
    license
    A
    quality
    A
    maintenance
    Enables 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.
    14
    39 PyPI
    2
    MIT