flaviometro-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., "@flaviometro-mcpquais senadores eleitos ainda não citaram o Flávio?"
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.
flaviometro-mcp
Servidor MCP (Model Context Protocol) local para consultar, direto do seu assistente de IA, os dados públicos do Flaviômetro, o site que acompanha ao vivo quais deputados, senadores, governadores e prefeitos do PL e aliados falam do Flávio Bolsonaro nas redes sociais.
Com ele você pergunta em português ao Claude (ou a outro cliente MCP) coisas como "quais senadores eleitos ainda não citaram o Flávio?" e recebe a resposta calculada em cima dos dados mais recentes do site.
Projeto não oficial. Este repositório não tem nenhuma ligação com o Flaviômetro, seus autores, o PL, o Flávio Bolsonaro ou qualquer campanha. Ele não é mantido, endossado nem revisado pelo site.
Este projeto também não tem ligação com o TSE nem com o OpenCNPJ, usados pela ferramenta contato_campanha.
O Flaviômetro não oferece uma API pública. Este servidor lê o mesmo arquivo JSON que o navegador baixa ao abrir o site. Se o site mudar o formato, o servidor pode parar de funcionar sem aviso. Os números e classificações são do Flaviômetro; este projeto só os organiza.
Sumário
Related MCP server: mcp-brasil
O que dá para fazer
Ver o panorama geral: quantos políticos monitorados pediram voto, quantos só citaram, quantos postaram sem citar e quantos não postaram nada.
Filtrar políticos por nome, estado, cargo, partido, situação eleitoral e município.
Descobrir quem ficou em silêncio (postou no período, mas não falou do Flávio).
Abrir a ficha de um político: redes monitoradas, números por rede e os posts mais recentes em que citou o Flávio.
Listar e buscar posts por rede, período, texto da legenda ou trecho falado em vídeo.
Montar rankings por posts, pedidos de voto, visualizações ou interações.
Agregar os números por estado, partido, cargo, rede social ou dia.
Obter o contato da campanha de um candidato de 2026: o CNPJ de campanha (TSE) e o e-mail, telefone e endereço registrados na Receita Federal (via OpenCNPJ).
Ferramentas disponíveis
Ferramenta | Para que serve | Principais parâmetros |
| Panorama do período, geral e por cargo |
|
| Lista políticos com filtros e status em relação ao Flávio |
|
| Ficha completa de um político e seus posts recentes |
|
| Posts captados, com filtros e ordenação | filtros de político, |
| Quem mais citou o Flávio segundo uma métrica |
|
| Números agregados por grupo |
|
| CNPJ de campanha (TSE) e e-mail/endereço registrados na Receita (OpenCNPJ) |
|
| Explica os códigos e a metodologia | — |
| Força novo download, ignorando o cache | — |
Datas aceitam AAAA-MM-DD (interpretadas no horário de Brasília) ou ISO 8601 completo.
Requisitos
Node.js 20.18.1 ou mais recente (testado no 22)
Um cliente compatível com MCP: Claude Desktop, Claude Code, OpenCode, Cursor, VS Code, etc.
Instalação
git clone <url-deste-repositorio> flaviometro-mcp
cd flaviometro-mcp
npm install
npm run buildIsso gera o servidor em dist/index.js. Anote o caminho absoluto desse arquivo, ele vai na configuração do cliente. Para descobrir:
echo "$(pwd)/dist/index.js"Configurando no seu cliente MCP
O servidor usa transporte stdio: o cliente inicia o processo e conversa com ele pela entrada e saída padrão. Não há porta nem servidor web.
Claude Code
claude mcp add flaviometro -- node /caminho/absoluto/flaviometro-mcp/dist/index.jsConfira com claude mcp list, ou digite /mcp dentro de uma sessão.
Em todos os exemplos abaixo, troque /caminho/absoluto/flaviometro-mcp/dist/index.js pelo caminho que você anotou na instalação. Caminhos relativos e ~ não funcionam.
Claude Desktop
Abra o Claude Desktop e vá em Configurações → Desenvolvedor → Editar configuração. Isso abre (ou cria) o arquivo:
macOS:
~/Library/Application Support/Claude/claude_desktop_config.jsonWindows:
%APPDATA%\Claude\claude_desktop_config.json
Adicione o servidor dentro de
mcpServers. Se o arquivo já tiver outros servidores, inclua só a entradaflaviometro:{ "mcpServers": { "flaviometro": { "command": "node", "args": ["/caminho/absoluto/flaviometro-mcp/dist/index.js"] } } }No Windows, escape as barras:
"C:\\Users\\voce\\flaviometro-mcp\\dist\\index.js".Feche o Claude Desktop por completo (no macOS,
Cmd+Q; só fechar a janela não basta) e abra de novo.Na caixa de mensagem, clique no ícone de ferramentas/conectores: o
flaviometrodeve aparecer com as 9 ferramentas. Na primeira vez que uma for usada, o Claude pede sua permissão.
Não apareceu? Em Configurações → Desenvolvedor o servidor aparece com o status e um botão para ver os logs. O erro mais comum é
nodenão ser encontrado: nesse caso, use o caminho completo do Node emcommand(descubra comwhich nodeno macOS/Linux ouwhere nodeno Windows).
OpenCode
O OpenCode lê os servidores MCP da chave mcp do arquivo de configuração. Escolha onde colocar:
Global (vale para todos os projetos):
~/.config/opencode/opencode.jsonSó em um projeto:
opencode.jsonna raiz do projeto
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"flaviometro": {
"type": "local",
"command": ["node", "/caminho/absoluto/flaviometro-mcp/dist/index.js"],
"enabled": true
}
}
}Repare que, diferente dos outros clientes, no OpenCode o command é uma lista com o executável e os argumentos juntos. Variáveis de ambiente vão na chave environment:
"flaviometro": {
"type": "local",
"command": ["node", "/caminho/absoluto/flaviometro-mcp/dist/index.js"],
"enabled": true,
"environment": { "FLAVIOMETRO_CACHE_TTL_SEGUNDOS": "600" }
}Se o arquivo já existir, junte a chave mcp com o que já estiver lá. Depois, reinicie o OpenCode e confira com:
opencode mcp listO primeiro carregamento baixa alguns megabytes do site. Se o OpenCode reclamar de tempo esgotado ao listar as ferramentas, adicione
"timeout": 20000na entrada do servidor.
Cursor
O Cursor lê os servidores de um arquivo mcp.json:
Global (vale para todos os projetos):
~/.cursor/mcp.jsonSó em um projeto:
.cursor/mcp.jsonna raiz do projeto
{
"mcpServers": {
"flaviometro": {
"type": "stdio",
"command": "node",
"args": ["/caminho/absoluto/flaviometro-mcp/dist/index.js"]
}
}
}Variáveis de ambiente vão na chave env, como no Claude Desktop.
Depois de salvar:
Abra as configurações do Cursor na área de MCP e confira se o
flaviometroaparece com a chave ligada. Servidores desligados não carregam nem aparecem no chat.No chat em modo Agent, faça uma pergunta como "me dá um resumo do Flaviômetro". O Cursor pede confirmação antes de rodar cada ferramenta.
Deu erro? Abra o painel Output (
Cmd+Shift+Uno macOS,Ctrl+Shift+Uno Windows/Linux) e escolha MCP Logs na lista. Ali aparecem a inicialização do servidor, as chamadas e os erros.
Outros clientes
Qualquer cliente que aceite servidores MCP via stdio funciona com o mesmo par command + args. No VS Code, por exemplo, o arquivo é .vscode/mcp.json e a chave é servers no lugar de mcpServers.
Testando sem cliente
O MCP Inspector abre uma interface web para chamar as ferramentas na mão:
npm run inspectorExemplos de perguntas
Depois de configurado, é só conversar normalmente:
"Me dá um resumo do Flaviômetro de hoje."
"Quais senadores eleitos em 2026 postaram nos últimos dias mas não citaram o Flávio?"
"Ranking dos 10 deputados federais de SP que mais pediram voto para o Flávio."
"Como está o deputado Fulano de Tal? Mostra os últimos posts dele citando o Flávio."
"Compara os partidos: qual tem a maior proporção de políticos que já citaram o Flávio?"
"Quais vídeos mencionam o Flávio só na fala, e não na legenda? Traz os trechos."
"Quantos posts pedindo voto saíram por dia desde 08/10?"
"Quais prefeitos do Rio de Janeiro já pediram voto?"
"Qual é o e-mail da campanha do candidato Fulano de Tal?"
Variáveis de ambiente
Todas são opcionais.
Variável | Padrão | Descrição |
|
| Por quanto tempo os dados ficam em cache na memória antes de novo download |
|
| Endereço base do site (útil para testes ou espelhos) |
| — | Valor de |
|
| Por quanto tempo as bases do TSE e as consultas ao OpenCNPJ ficam em cache |
|
| Endereço da API do OpenCNPJ |
| — | Proxy usado para acessar o site (veja Usando um proxy) |
| — | Variáveis de proxy padrão do sistema, usadas se |
Exemplo no Claude Desktop:
{
"mcpServers": {
"flaviometro": {
"command": "node",
"args": ["/caminho/absoluto/flaviometro-mcp/dist/index.js"],
"env": { "FLAVIOMETRO_CACHE_TTL_SEGUNDOS": "600" }
}
}
}Usando um proxy
O proxy vale para todas as conexões do servidor: Flaviômetro, TSE e OpenCNPJ.
Se você está atrás de um proxy corporativo, quer sair por outro IP ou passar o tráfego por um túnel SSH, o servidor pode acessar o Flaviômetro por um proxy HTTP, HTTPS ou SOCKS5.
Ordem de prioridade
FLAVIOMETRO_PROXY: se estiver definida, vale ela e só ela.HTTPS_PROXY/HTTP_PROXY(maiúsculas ou minúsculas): as variáveis padrão do sistema, respeitandoNO_PROXY.Nenhuma das duas: conexão direta.
Para ignorar o proxy do sistema só neste servidor, use FLAVIOMETRO_PROXY=desligado.
Formatos aceitos
Tipo | Exemplo |
HTTP |
|
HTTP com usuário e senha |
|
HTTPS (conexão TLS até o proxy) |
|
SOCKS5 |
|
SOCKS5 com usuário e senha |
|
Desativar |
|
Caracteres especiais no usuário ou na senha (@, :, /, #...) precisam estar codificados em URL. Por exemplo, p@ss vira p%40ss.
Exemplos de configuração
Claude Desktop / Cursor (chave env):
{
"mcpServers": {
"flaviometro": {
"command": "node",
"args": ["/caminho/absoluto/flaviometro-mcp/dist/index.js"],
"env": { "FLAVIOMETRO_PROXY": "http://usuario:senha@proxy.empresa.com.br:3128" }
}
}
}OpenCode (chave environment):
"flaviometro": {
"type": "local",
"command": ["node", "/caminho/absoluto/flaviometro-mcp/dist/index.js"],
"enabled": true,
"environment": { "FLAVIOMETRO_PROXY": "socks5://127.0.0.1:1080" }
}Claude Code:
claude mcp add flaviometro -e FLAVIOMETRO_PROXY=http://proxy.empresa.com.br:3128 \
-- node /caminho/absoluto/flaviometro-mcp/dist/index.jsTúnel SSH como proxy SOCKS5: abra o túnel num terminal e aponte o servidor para ele.
ssh -D 1080 -N usuario@seu-servidor.com
# e use FLAVIOMETRO_PROXY=socks5://127.0.0.1:1080Conferindo se o proxy está em uso
A ferramenta
atualizar_dadosmostra no campoproxyqual configuração está ativa. Usuário e senha aparecem mascarados (http://***@host:3128).A mesma informação sai no log de inicialização do servidor (stderr), visível nos logs do seu cliente MCP.
Se o proxy estiver fora do ar ou mal configurado, as ferramentas respondem com o erro detalhado (por exemplo,
Não consegui acessar https://flaviometro.com/ via proxy HTTP http://127.0.0.1:3128: connect ECONNREFUSED) em vez de travar.
O suporte a SOCKS5 vem do undici e ainda é marcado como experimental por lá. Por isso aparece um
ExperimentalWarningno log. É só um aviso e não afeta o funcionamento. Proxies com autenticação NTLM/Kerberos não são suportados diretamente; nesses casos, use um intermediário local como o Px ou o CNTLM.
De onde vêm os dados
O servidor faz duas requisições, as mesmas que o navegador faz ao abrir o site:
https://flaviometro.com/: a página inicial traz embutido o cadastro dos políticos monitorados (window.ELEITOS: nome, cargo, UF, partido, número, votos, redes) e a versão atual do site (window.VERSAO).https://flaviometro.com/dados/feed.json?v=<versão>: um JSON de alguns megabytes com todos os posts monitorados no período, já classificados pelo site.
O cadastro é lido como dado: o servidor recorta o objeto do HTML e o converte para JSON, sem executar nenhum JavaScript da página.
Os dados ficam em memória pelo tempo do cache (5 minutos por padrão). Chamadas seguidas não geram novos downloads. Se um download falhar e já houver dados em cache, o servidor responde com o cache anterior.
┌──────────────┐ stdio ┌──────────────────┐ HTTPS ┌──────────────────────┐
│ Cliente MCP │ ──────▶ │ flaviometro-mcp │ ──────▶ │ flaviometro.com │
│ (Claude etc.)│ ◀────── │ cache + análise │ ◀────── │ / e /dados/feed │
└──────────────┘ └──────────────────┘ └──────────────────────┘Contato da campanha (TSE + OpenCNPJ)
A ferramenta contato_campanha cruza três fontes públicas para chegar ao contato oficial da campanha de um candidato:
Flaviômetro TSE (dados abertos) OpenCNPJ (Receita Federal)
sq do candidato ──▶ cadastro de candidatos 2026 ──▶ CNPJ ──▶ e-mail, telefone, endereço
+ CNPJs de campanha 2026Cadastro de candidatos 2026 (
consulta_cand_2026.zip, no Portal de Dados Abertos do TSE): pelosq, o servidor encontra o nome completo, o cargo, a coligação e o resultado.CNPJs de campanha 2026 (
CNPJ_campanha_2026.zip, no dataset de prestação de contas): todo candidato recebe um CNPJ de campanha com a razão socialELEICAO 2026 <NOME COMPLETO> <CARGO>. Como esse arquivo não traz osq, o vínculo é feito pelo nome completo + cargo.OpenCNPJ: com o CNPJ, a API pública e gratuita do OpenCNPJ devolve o cadastro na Receita Federal, com o e-mail que a campanha informou.
Exemplo de resposta (resumida, com dados fictícios):
{
"candidato": {
"nome_completo": "FULANO DE TAL DA SILVA",
"cargo": "DEPUTADO FEDERAL",
"uf": "SP",
"resultado": "ELEITO",
"link_divulgacandcontas": "https://divulgacandcontas.tse.jus.br/divulga/#/candidato/SUDESTE/SP/20322002026/250000000000/2026/SP"
},
"campanha": {
"cnpj": "00.000.000/0001-00",
"vinculo": "exata",
"situacao_cadastral": "Ativa",
"email": "contato@exemplo.com.br",
"endereco": "RUA EXEMPLO, 100, CENTRO, SAO PAULO/SP, CEP 01000-000"
}
}Como o vínculo é feito. O campo vinculo diz quão confiável é o casamento entre candidato e CNPJ:
exata: nome completo e cargo idênticos nos dois arquivos do TSE (é o caso de 988 dos 1.000 candidatos de 2026 monitorados pelo Flaviômetro).aproximada (nome parecido, mesma UF): os dois arquivos do TSE grafam o nome de jeitos diferentes ("THYAGO" e "TYAGO", "SILVA COSTA" e "SILVA DA COSTA"). O servidor procura nomes parecidos no mesmo cargo e só aceita se a UF do CNPJ na Receita bater com a do candidato. A resposta mostra a razão social encontrada para você conferir.
O que não é coberto:
Prefeitos e senadores em mandato: não disputaram 2026, então não têm CNPJ de campanha nas bases de 2026.
Dados pessoais: o cadastro do TSE também traz CPF, título de eleitor e data de nascimento. O servidor descarta esses campos na leitura; eles nunca chegam ao modelo.
Página do DivulgaCandContas: o link é montado para você abrir no navegador, mas o servidor não lê essa página. O TSE bloqueia acesso automatizado a ela (HTTP 403), por isso o servidor usa os arquivos de dados abertos. O código de eleição do link (
20322002026) é o do 1º turno; para candidatos do 2º turno a página pode ser outra.
O e-mail e o telefone são os que a campanhainformou à Receita Federal ao registrar o CNPJ. Muitas vezes são do contador, do escritório de advocacia ou da equipe, não do candidato. Telefones vêm vazios com frequência.
Na primeira chamada, o servidor baixa cerca de 6 MB do TSE, o que leva alguns segundos. Depois disso, as bases ficam em cache por 6 horas (configurável).
Glossário dos códigos
Nível de citação de cada post (campo flavio no feed):
Valor | Significado |
| Não citou o Flávio |
| Citou o Flávio pelo nome, @, hashtag ou o 22 como voto |
| Pediu voto no Flávio ("vote 22", "dia 25 é Flávio"...) |
Vídeos também contam pelo que é falado. Nesses casos o post vem marcado como citado_na_fala_do_video e traz o trecho_transcrito.
Cargos: gov governador(a) · sen senador(a) · fed deputado(a) federal · est deputado(a) estadual · pref prefeito(a)
Situação: eleito eleito(a) em 2026 · 2t disputa o 2º turno · mandato em mandato (não disputou em 2026)
Redes: ig Instagram · fb Facebook · x X/Twitter · th Threads · yt YouTube · tt TikTok · kw Kwai · tg Telegram
sq: código sequencial do candidato no TSE, usado como identificador único de cada político.
Limitações conhecidas
Depende da estrutura do site. Se o Flaviômetro mudar o HTML ou o formato do feed, o servidor quebra até ser ajustado.
A classificação é do site. Se um post foi classificado errado lá, ele aparece errado aqui. Este projeto não reclassifica nada.
Janela limitada. O feed só cobre um período recente (informado em
feed_cobre_desdenoresumo_geral), não o histórico completo.Posts sem citação vêm resumidos. Para posts de nível
0, o feed só informa que existiram (data e rede), sem texto, link ou métricas.Métricas incompletas. Visualizações, curtidas e compartilhamentos dependem do que cada rede expõe e podem vir
null.Números podem divergir do site. O site aplica filtros visuais próprios (e agrupa versões do mesmo conteúdo publicado em várias redes). Aqui cada post conta individualmente.
Vínculo com o CNPJ por nome. O arquivo de CNPJs do TSE não traz o código do candidato. Homônimos no mesmo cargo são desempatados pela UF, e vínculos aproximados vêm sinalizados.
Campo
cobertura. O feed traz um par de datas por político cujo significado exato não é documentado. Ele aparece comocobertura_informada_pelo_feede deve ser tratado como indicativo.
Desenvolvimento
npm run dev # recompila a cada alteração
npm run build # compila para dist/
npm run inspector # abre o MCP Inspector apontando para dist/index.jsEstrutura:
src/
├── index.ts # registro das ferramentas MCP e transporte stdio
├── fonte.ts # download (com suporte a proxy), extração do cadastro e cache
├── analise.ts # agregações, filtros, rótulos e formatação em pt-BR
└── tse.ts # bases do TSE, vínculo candidato ↔ CNPJ e consulta ao OpenCNPJLogs vão para stderr, já que stdout é reservado ao protocolo MCP.
Uso responsável
O servidor é feito para uso pessoal e local. Ele baixa o feed no máximo uma vez a cada intervalo de cache e se identifica com um
User-Agentpróprio. Evite reduzir o cache a valores muito baixos.O site marca suas páginas como
noindex. Respeite a infraestrutura de quem mantém o Flaviômetro e não use este projeto para raspagem em massa nem para republicar os dados como se fossem seus.Ao divulgar números obtidos por aqui, cite o Flaviômetro como fonte e deixe claro que a extração foi feita por uma ferramenta não oficial.
Os dados tratam de figuras públicas e posts públicos, mas use o bom senso: confira no post original antes de afirmar qualquer coisa sobre alguém.
Os contatos de campanha são dados públicos, mas continuam protegidos pela LGPD. Use para contato legítimo (imprensa, pesquisa, fiscalização) e não para envio em massa, spam ou montagem de listas. A ferramenta consulta um candidato por vez de propósito.
O OpenCNPJ é um projeto gratuito e sem fins lucrativos, feito para consultas pontuais. Não use este servidor para varrer CNPJs em lote.
Licença
MIT. Vale para o código deste repositório, não para os dados do Flaviômetro, do TSE ou do OpenCNPJ, que pertencem aos seus respectivos responsáveis.
Available Tools
9 toolsatualizar_dadosAtualizar dadosA
Força um novo download do feed do Flaviômetro, ignorando o cache local.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry the full behavioral burden. It does disclose the key trait — that it bypasses the local cache and forces a network download — which tells the agent results may differ from cached reads. It omits whether this mutates only local state or also hits the remote service, whether it can fail/rate-limit, and how long it may take.
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?
A single sentence with the operative verb ('Força um novo download') front-loaded and the cache-bypass qualifier trailing it. Nothing is wasted and nothing needs reordering.
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 tool this is close to sufficient, but there is no output schema and no annotations, so the description should say what happens after the refresh — whether it returns the fresh data, only an acknowledgement, or requires a follow-up call to resumo_geral/listar_posts. That omission leaves the agent guessing about next steps.
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 takes zero parameters and the schema has no properties, so there is no parameter semantics to document. The baseline of 4 applies; the description correctly implies no inputs are needed.
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 action and target: force a fresh download of the Flaviômetro feed, bypassing the local cache. That is far more concrete than the generic name/title 'Atualizar dados', so the description does the differentiating work. It doesn't name a sibling, which keeps it just 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?
Using it implicitly means 'I want fresh data rather than cached data', and that condition is conveyed by 'ignorando o cache local'. However, there is no explicit when-to-use/when-not guidance, no mention of cost or latency that would deter an agent from calling it before every read, and no pointer to the sibling read tools that consume the refreshed feed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
buscar_politicosBuscar políticosA
Lista políticos monitorados com filtros (nome, UF, cargo, partido, situação, município) e pelo comportamento em relação ao Flávio (pediu voto, citou, não citou, sem posts). Útil para perguntas como 'quais deputados federais do PL de SP não citaram o Flávio?'.
| Name | Required | Description | Default |
|---|---|---|---|
| uf | No | Sigla do estado, ex.: SP | |
| ate | No | Fim do período (AAAA-MM-DD ou ISO 8601, horário de Brasília) | |
| nome | No | Parte do nome (sem diferenciar acentos/maiúsculas) ou o código sq exato | |
| cargo | No | gov = governador(a), sen = senador(a), fed = deputado(a) federal, est = deputado(a) estadual, pref = prefeito(a) | |
| desde | No | Início do período (AAAA-MM-DD ou ISO 8601, horário de Brasília) | |
| limite | No | ||
| status | No | pediu_voto = pediu voto ao menos uma vez; citou = citou mas nunca pediu voto; nao_citou = postou no período sem citar; sem_posts = nenhum post captado | |
| partido | No | Sigla do partido, ex.: PL, NOVO, UNIÃO | |
| situacao | No | eleito = eleito(a) em 2026, 2t = disputa o 2º turno, mandato = em mandato (não disputou em 2026) | |
| municipio | No | Município (só se aplica a prefeitos) | |
| ordenar_por | No | Critério de ordenação (numéricos em ordem decrescente) | nome |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. 'Lista' implies a read-only operation and the description explains the semantics of the behavior dimension, but it says nothing about result volume, pagination/limite behavior, or what an empty result means.
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, zero waste: capability first, then a concrete example. The example earns its place by tying filters to a realistic query.
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 an 11-parameter, all-optional filter tool with no output schema and no annotations, the description conveys what can be filtered and what the behavior codes mean at a high level. What remains uncovered (result shape, pagination beyond 'limite', behavior with zero matches) is minor but not fully absent.
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 91%, so nearly every parameter's meaning is already documented in the schema. The description repeats the filter list (nome, UF, cargo, partido, situação, município) and the four behavior categories without adding syntax, defaults, or interaction rules beyond what the schema provides.
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 políticos monitorados') and enumerates the filter dimensions, including the distinctive behavior filter relative to Flávio. The scope is unambiguous and clearly different from a detail or ranking tool, though no sibling is named explicitly.
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 example question ('quais deputados federais do PL de SP não citaram o Flávio?') gives concrete usage context that maps directly onto the filters, so an agent knows when this tool fits. It stops short of stating exclusions or naming alternatives like detalhes_politico or ranking.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
contato_campanhaContato da campanha (TSE + Receita)A
Busca o CNPJ de campanha de um candidato de 2026 nos dados abertos do TSE e consulta esse CNPJ no OpenCNPJ (base da Receita Federal) para obter o e-mail, telefone e endereço registrados pela campanha. Também traz coligação, resultado e o link da página do candidato no DivulgaCandContas. Funciona para quem disputou 2026 (governadores, senadores e deputados); não cobre prefeitos nem senadores em mandato. Consulta um político por vez.
| Name | Required | Description | Default |
|---|---|---|---|
| politico | Yes | Nome (ou parte dele) ou código sq do candidato |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the load and does well: it discloses the two external data sources, the exact fields returned, the coverage boundary, and the one-at-a-time constraint. It omits failure behavior — what happens when the candidate is not found in TSE or the CNPJ is missing from OpenCNPJ (error vs. partial result) — which matters for a chained lookup.
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 main action is front-loaded in the first sentence, followed by the supplementary payload, scope limits, and cardinality constraint. Efficient overall, though the scope sentence ('não cobre prefeitos nem senadores em mandato') sits slightly at odds with the earlier mention of senadores and could be tightened.
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, no-output-schema lookup, the description explains both sources and enumerates the returned fields, so an agent knows what it will get. The remaining gap is behavior on missing or ambiguous matches, which is the one thing an agent cannot infer here.
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 schema already explains that 'politico' accepts a name, partial name, or sq code. The description only adds the constraint that only one politician can be queried per call; it adds nothing about matching behavior for partial names or ambiguity resolution.
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 concrete two-step operation: fetch the candidate's 2026 campaign CNPJ from TSE open data, then look that CNPJ up in OpenCNPJ (Receita Federal) for email, phone and address. It also names the extra payload (coligação, resultado, DivulgaCandContas link), which makes it clearly distinct from generic siblings like buscar_politicos or detalhes_politico.
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 explicit applicability and exclusions: works for 2026 governor/senator/deputy candidates, does not cover mayors or sitting senators, and handles one politician per call. It never names an alternative sibling (e.g. detalhes_politico) for the excluded cases, so it stops short of full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
detalhes_politicoDetalhes de um políticoB
Ficha completa de um político: cargo, partido, votos, redes monitoradas, janela de cobertura, estatísticas por rede e os posts mais recentes em que citou o Flávio.
| Name | Required | Description | Default |
|---|---|---|---|
| posts | No | Quantos posts recentes citando o Flávio incluir | |
| politico | Yes | Nome (ou parte dele) ou código sq | |
| incluir_posts_sem_citacao | No | Inclui também posts que não citam o Flávio |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the burden here. It does meaningfully disclose the return payload (which stands in for the missing output schema), but it says nothing about read-only behavior, pagination, error handling for an unmatched 'politico', or the cost of setting a high posts value.
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?
A single tight sentence with no filler, and the core concept ('Ficha completa de um político') is front-loaded. The trailing enumeration of fields is a dense list, but each item is informative rather than redundant.
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 no output schema and no annotations, the field enumeration is the main thing that makes this callable, and it covers the payload well; the three input parameters are fully documented in the schema. The remaining gap is edge-case behavior (not found, ambiguous name), which the description leaves unstated.
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 schema already defines all three parameters, including the posts default/max of 100 and incluir_posts_sem_citacao. The description only hints at the posts parameter via 'os posts mais recentes em que citou o Flávio' and adds nothing about name matching or the sq code.
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?
It clearly says this returns a complete profile ('ficha completa') of a politician and enumerates exactly what the profile contains: cargo, partido, votos, redes monitoradas, janela de cobertura, estatísticas por rede, posts recentes. That makes the purpose readable without the schema, but the description never contrasts it with siblings like buscar_politicos (search), listar_posts or estatisticas_agrupadas, which could partly overlap.
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 guidance on when to use this tool instead of buscar_politicos, listar_posts or estatisticas_agrupadas. An agent must infer that this is the 'one politician, all details' call, and nothing says what to do if the name is ambiguous or the politician is not found.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
estatisticas_agrupadasEstatísticas agrupadasB
Agrega os números por estado, partido, cargo, rede social ou dia: quantos políticos citaram/pediram voto e quantos posts citando o Flávio houve em cada grupo.
| Name | Required | Description | Default |
|---|---|---|---|
| uf | No | Sigla do estado, ex.: SP | |
| ate | No | Fim do período (AAAA-MM-DD ou ISO 8601, horário de Brasília) | |
| nome | No | Parte do nome (sem diferenciar acentos/maiúsculas) ou o código sq exato | |
| cargo | No | gov = governador(a), sen = senador(a), fed = deputado(a) federal, est = deputado(a) estadual, pref = prefeito(a) | |
| desde | No | Início do período (AAAA-MM-DD ou ISO 8601, horário de Brasília) | |
| partido | No | Sigla do partido, ex.: PL, NOVO, UNIÃO | |
| situacao | No | eleito = eleito(a) em 2026, 2t = disputa o 2º turno, mandato = em mandato (não disputou em 2026) | |
| municipio | No | Município (só se aplica a prefeitos) | |
| agrupar_por | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses the aggregation semantics and the two metrics counted per group, but it does not explicitly state that the operation is read-only, nor does it describe permissions, side effects, or output 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 definition is a single front-loaded sentence with no wasted words. It efficiently states the aggregation behavior and the metrics before listing grouping dimensions.
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 9-parameter aggregation tool with no annotations and no output schema, the description is adequate but incomplete. It explains the core aggregation and metrics, but it lacks usage guidance versus siblings and does not describe the return shape beyond raw counts per group.
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 high at 89%, so the schema already documents most parameters. The description maps several grouping choices (state, party, office, social network, day), but it omits the situacao grouping option and does not explain the filter parameters.
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 aggregates counts by group and names the metrics (politicians who cited/requested vote and posts citing Flávio). It is clear what the tool computes, but it does not explicitly distinguish itself from siblings such as ranking or resumo_geral.
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 alternatives like ranking or resumo_geral. The grouping dimensions imply a grouped-statistics use case, but the description provides no exclusions or routing advice.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
legendaLegenda dos códigosA
Explica os códigos usados nos dados (cargos, situações, redes, níveis de citação) e a metodologia.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It discloses the content categories covered (cargos, situações, redes, níveis de citação) and methodology, but does not describe the return format or whether the response is text, structured data, or exhaustive.
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?
A single, front-loaded sentence that lists the relevant code types and methodology without filler. Every element contributes to understanding the tool's scope.
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 simple, zero-parameter explanatory tool with no output schema, the description is nearly complete: it says what codes and methodology are explained. It could be slightly richer by indicating the return format, but the essential scope is clear.
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, so parameter semantics are not a concern. The baseline for zero-parameter tools is 4, and the description appropriately does not need to explain inputs.
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 ('Explica') and resource ('códigos usados nos dados... e a metodologia'), making clear it is an explanatory/metadata tool. It does not explicitly name or contrast with sibling tools, but its purpose is distinct from data-retrieval siblings like buscar_politicos or ranking.
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 implies the tool is for understanding codes and methodology, but it gives no explicit guidance on when to use it versus alternatives or prerequisites. No when/when-not conditions or sibling references are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
listar_postsListar postsB
Lista posts captados pelo Flaviômetro com filtros por político, rede, nível de citação, período e texto. Por padrão traz só posts que citam o Flávio, do mais recente para o mais antigo.
| Name | Required | Description | Default |
|---|---|---|---|
| uf | No | Sigla do estado, ex.: SP | |
| ate | No | Fim do período (AAAA-MM-DD ou ISO 8601, horário de Brasília) | |
| nome | No | Parte do nome (sem diferenciar acentos/maiúsculas) ou o código sq exato | |
| rede | No | ig = Instagram, fb = Facebook, x = X/Twitter, th = Threads, yt = YouTube, tt = TikTok, kw = Kwai, tg = Telegram | |
| cargo | No | gov = governador(a), sen = senador(a), fed = deputado(a) federal, est = deputado(a) estadual, pref = prefeito(a) | |
| desde | No | Início do período (AAAA-MM-DD ou ISO 8601, horário de Brasília) | |
| texto | No | Busca no texto da legenda e no trecho transcrito | |
| limite | No | ||
| partido | No | Sigla do partido, ex.: PL, NOVO, UNIÃO | |
| situacao | No | eleito = eleito(a) em 2026, 2t = disputa o 2º turno, mandato = em mandato (não disputou em 2026) | |
| municipio | No | Município (só se aplica a prefeitos) | |
| ordenar_por | No | recentes | |
| nivel_minimo | No | 0 = todos os posts, 1 = citou o Flávio, 2 = só pedidos de voto | |
| somente_fala_em_video | No | Só posts em que a citação foi detectada na fala do vídeo |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It does disclose two important behavioral facts beyond the schema: results are silently limited to posts citing Flávio by default, and default ordering is newest-first. That is genuinely useful for a read tool that would otherwise appear to return everything. However, pagination, result-set size limits, and the returned record shape are not mentioned.
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, no filler, and the default-scope caveat is placed prominently. Slightly more could be front-loaded, but it is efficient and readable.
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 14-parameter read tool with no annotations and no output schema, the description covers the most critical surprise (default filtering to Flávio citations) but leaves out what a post record contains and how to page through results. The schema carries most of the parameter burden, so this is adequate without being 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?
Schema coverage is 86%, so the schema already documents nearly every parameter including enums and defaults; baseline is 3. The description's mention of filter categories (político, rede, nível de citação, período, texto) only restates what the schema shows in more detail, adding no new semantics.
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 posts captados pelo Flaviômetro') plus the filter axes it supports, which is enough to distinguish it from siblings like ranking or estatisticas_agrupadas that also deal with posts/politicians. It does not explicitly name a sibling, 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?
The description implies the use case (browsing individual posts with filters) and clarifies the default scope, but never says when to prefer this over ranking, estatisticas_agrupadas, or detalhes_politico. Usage is inferable rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rankingRanking de políticosB
Ranking dos políticos que mais citaram o Flávio segundo uma métrica (posts citando, pedidos de voto, views ou interações dos posts citando). Aceita os mesmos filtros de buscar_politicos.
| Name | Required | Description | Default |
|---|---|---|---|
| uf | No | Sigla do estado, ex.: SP | |
| ate | No | Fim do período (AAAA-MM-DD ou ISO 8601, horário de Brasília) | |
| nome | No | Parte do nome (sem diferenciar acentos/maiúsculas) ou o código sq exato | |
| cargo | No | gov = governador(a), sen = senador(a), fed = deputado(a) federal, est = deputado(a) estadual, pref = prefeito(a) | |
| desde | No | Início do período (AAAA-MM-DD ou ISO 8601, horário de Brasília) | |
| limite | No | ||
| metrica | No | posts_citando | |
| partido | No | Sigla do partido, ex.: PL, NOVO, UNIÃO | |
| situacao | No | eleito = eleito(a) em 2026, 2t = disputa o 2º turno, mandato = em mandato (não disputou em 2026) | |
| municipio | No | Município (só se aplica a prefeitos) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden and largely fails to. It never confirms this is a read-only operation, never states sort direction, tie-breaking, or pagination behavior, and gives no indication of the response shape despite there being no output schema. The only behavioral hint ('que mais citaram') implies descending order but leaves it unstated.
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 ranking measures, with the metric list and filter pointer following. No filler. Slightly terse to the point of omitting needed information, but nothing is redundant.
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 10-parameter tool with no annotations and no output schema, the description covers the 'what' adequately but not the 'what comes back'. An agent knows it gets a ranking of politicians by a chosen metric, but not the fields per entry (position, metric value, name, party) or ordering guarantees. This is minimum viable rather than 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?
Schema description coverage is 80%, so most parameters (uf, desde, ate, nome, cargo, partido, situacao, municipio) are already documented in the schema, and metrica's four values are in the schema enum. The description adds no per-parameter meaning beyond repeating the metric names. Baseline 3 applies when the schema does the heavy lifting.
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 — ranks politicians by how much they cited Flávio — and enumerates the four metrics that define the ranking, so the agent knows exactly what the output orders. It also references the buscar_politicos filter set, which separates it from the plain search sibling. It does not differentiate itself from estatisticas_agrupadas, which is the closest ambiguous alternative.
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?
"Aceita os mesmos filtros de buscar_politicos" gives useful context about the filter model but is a schema hint, not usage guidance. There is no statement of when to pick ranking over buscar_politicos or estatisticas_agrupadas, nor any exclusion. Usage is only implied by the word 'Ranking'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
resumo_geralResumo geralA
Panorama do Flaviômetro: quantos políticos monitorados citaram o Flávio, quantos pediram voto, quantos ficaram em silêncio, totais de posts e quebra por cargo. Use como ponto de partida.
| Name | Required | Description | Default |
|---|---|---|---|
| ate | No | Fim do período (AAAA-MM-DD ou ISO 8601, horário de Brasília) | |
| desde | No | Início do período (AAAA-MM-DD ou ISO 8601, horário de Brasília) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It does disclose the shape of the returned metrics in prose, which is valuable since there is no output schema, but it says nothing about the read-only nature, permission requirements, aggregation basis, or how the silent/cited classifications are determined.
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: the first front-loads exactly what the panorama contains, the second gives the usage cue. No filler and nothing redundant.
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-required-parameter, read-only aggregate with no output schema, the description successfully conveys what comes back and when to reach for it. The main residual gap is the total silence on the optional date-range filter, which an agent might not realize applies to this 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 100% — both 'desde' and 'ate' are documented in the schema with format and timezone (horário de Brasília). The description never mentions the period filter, so it adds nothing beyond the schema. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description enumerates concretely what the tool returns: counts of monitored politicians who cited Flávio, asked for votes, or stayed silent, plus post totals and a breakdown by office. That is a specific, differentiated role versus detail-oriented siblings such as detalhes_politico or listar_posts. It stops short of an explicit verb+resource framing (it is a noun phrase, 'Panorama do Flaviômetro'), so it is clear but not exemplary.
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?
'Use como ponto de partida' gives a clear contextual instruction: call this first, then drill down with the more specific siblings. There are no explicit exclusions or named alternatives, but the positioning as an entry point is unambiguous for an agent orienting itself.
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.
9 tool updates
v0.1.0- First observed
atualizar_dados - First observed
buscar_politicos - First observed
contato_campanha - First observed
detalhes_politico - First observed
estatisticas_agrupadas - First observed
legenda - First observed
listar_posts - First observed
ranking - First observed
resumo_geral
TDQS
Scored across 9 tools
Most tools target clearly different outputs: overview dashboard, filtered politician search, single-politician detail, post listing, ranking, grouped aggregation, and a campaign-contact lookup. The main soft overlaps are resumo_geral vs estatisticas_agrupadas (both aggregate numbers) and ranking vs buscar_politicos (ranking explicitly reuses the same filters), but descriptions make the distinction between a fixed panorama, a configurable aggregation, and an ordered list reasonably clear.
All names are snake_case in Portuguese, which is consistent, but the conventions mix: verb_noun (buscar_politicos, atualizar_dados, listar_posts) alongside bare nouns (resumo_geral, ranking, legenda, contato_campanha, estatisticas_agrupadas) and noun_noun (detalhes_politico). Still readable and predictable enough to guess intent.
Nine tools is a good size for a monitoring/analytics server, with each analysis angle (overview, search, detail, posts, ranking, grouped stats) earning its place. Minor ding for atualizar_dados being a maintenance-only tool and contato_campanha belonging to a distinct TSE/OpenCNPJ domain.
The read-only analytics surface is well covered: summary, filtered search, per-politician detail, post listing, ranking, grouped aggregation, code glossary, and a data refresh. Gaps are minor, such as no per-politician time-series/evolution tool and no direct post-detail or comparison operation, but agents can work around these with existing filters.
Maintenance
Related MCP Connectors
Brazilian company and person data by CNPJ/CPF: registry, partners, tax status, sanctions, lawsuits.
Brazilian business data for AI agents. Public company dossiers by CNPJ.
WhatsApp Business + CNPJ enrichment (71M RFB) for Brazilian AI workflows.
Brazilian company data & sanctions screening for AI agents. Certified. Pay-per-call x402.
Related MCP Servers
- AlicenseBqualityNot gradedmaintenanceEnables interaction with the Brazilian Chamber of Deputies Open Data API, providing access to information about legislators, legislative proposals, voting records, events, committees, and parliamentary activities through 57 typed and validated tools.63-
- 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
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to query Brazilian Senate data including senators, bills, voting records, committees, and plenary sessions through natural language.10 npm6MIT
- 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