MCP Dados Brasil

io.github.lucianoon由 GitHub 账号 lucianoon 发布v0.6.0更新于 Oct 24, 2026

Servidor MCP com dados oficiais brasileiros: IBGE, Banco Central, INMET, Câmara e Senado.

概览

AI 生成的概览

该 MCP 服务器为 AI 助手提供查询巴西官方公开数据的工具:IBGE 统计、央行指标、INMET 气象以及众议院和参议院的立法数据。

可以做什么
  • 查询 IBGE 人口、GDP、市镇信息及任意 SIDRA 汇总数据
  • 查询央行序列(Selic、IPCA、CDI)、PTAX 汇率、货币列表和 Focus 市场预期
  • 列出 INMET 气象站并获取逐小时观测数据
  • 检索众议院议员、法案、投票、议程和立法进展
  • 获取参议员、立法议题和记名投票结果
适用场景
适合在助手对话中直接获取巴西官方统计数据、经济指标、气象观测或立法信息,无需自己编写 API 调用。适用于处理巴西公开数据的分析师、记者和研究人员。
运行要求
以 Python 包形式通过 uvx 本地运行(或从源码用 uv 运行);多数数据源无需 API 密钥。INMET 逐小时观测数据需要从 INMET 获取的 INMET_TOKEN 环境变量。需要能访问官方 API 的网络。可选 HTTP 模式使用 MCP_TRANSPORTE、MCP_HOST、MCP_PORTA 和 MCP_AUTH_TOKEN。
安装前请注意
对公开 API 只做只读查询,但在 HTTP 模式下若未设置 MCP_AUTH_TOKEN 则没有身份验证:任何能访问该端口的人都能调用全部工具、消耗你的 API 配额并使用你的 INMET_TOKEN。纯 HTTP 下令牌以明文传输,应使用 TLS 反向代理并避免将端口暴露到公网。INMET_TOKEN 属于机密,勿放入共享配置。

安装

在 SourceWeft 中

  1. 打开 控制台中的 MCP Dados Brasil,将其添加到工作区。
  2. 为需要使用其工具的对话启用该服务。

Desktop only,通过 STDIO。 STDIO 服务会启动本地进程,因此需要 SourceWeft 桌面宿主。

其他 MCP 客户端

参照 仓库 中的启动说明。

README

mcp-dados-br

[CI] [Integração] [PyPI] [Python] [Licença: MIT]

English version

Servidor MCP (Model Context Protocol) que expõe dados públicos brasileiros como ferramentas para assistentes de IA: Claude Desktop, Claude Code, Cursor e qualquer cliente MCP.

Instalação

A forma mais simples, sem instalar nada permanentemente:

bash
uvx mcp-dados-br

Configuração no Claude Desktop:

json
{  "mcpServers": {    "dados-brasil": {      "command": "uvx",      "args": ["mcp-dados-br"]    }  }}

Ou no Claude Code:

bash
claude mcp add dados-brasil -- uvx mcp-dados-br

A partir do código-fonte

bash
git clone https://github.com/lucianoon/mcp-dados-brcd mcp-dados-bruv sync

Ferramentas disponíveis

FonteToolsDescrição
IBGE/SIDRAibge_populacao, ibge_pib, ibge_municipios, ibge_sidraPopulação, PIB, busca de municípios e consulta genérica a qualquer agregado SIDRA
Banco Centralbcb_serie, bcb_cambio, bcb_moedas, bcb_focusSéries SGS com atalhos nomeados (selic, ipca, cdi...), cotações PTAX, lista de moedas e expectativas do Boletim Focus
INMETinmet_estacoes, inmet_dadosLista de estações meteorológicas e dados horários observados (dados observacionais exigem token)
Câmara dos Deputadoscamara_deputados, camara_detalhes_deputado, camara_proposicoes, camara_votacoes_proposicao, camara_agenda, camara_tramitacaoDeputados, proposições, votações, agenda e tramitações
Senado Federalsenado_senadores, senado_materias, senado_votacoesSenadores em exercício, matérias legislativas e votações nominais com placar

Todas as fontes são APIs oficiais abertas — nenhuma chave de API necessária, exceto os dados horários do INMET (veja abaixo).

Configuração

Claude Desktop / Cursor

Adicione ao arquivo de configuração (claude_desktop_config.json ou mcp.json):

json
{  "mcpServers": {    "mcp-dados-br": {      "command": "uv",      "args": ["run", "--directory", "/caminho/para/mcp-dados-br", "mcp-dados-br"]    }  }}

Claude Code

bash
claude mcp add mcp-dados-br -- uv run --directory /caminho/para/mcp-dados-br mcp-dados-br

Token opcional do INMET

A listagem de estações (inmet_estacoes) é aberta. Já os dados horários observados (inmet_dados) exigem um token fornecido pelo INMET — solicite em portal.inmet.gov.br e configure a variável de ambiente no cliente MCP:

json
{  "mcpServers": {    "mcp-dados-br": {      "command": "uv",      "args": ["run", "--directory", "/caminho/para/mcp-dados-br", "mcp-dados-br"],      "env": { "INMET_TOKEN": "seu-token" }    }  }}

Sem o token, as demais 18 ferramentas funcionam normalmente.

Transporte streamable-http

Além do stdio padrão, o servidor pode rodar em modo HTTP remoto:

bash
MCP_TRANSPORTE=streamable-http MCP_PORTA=8000 mcp-dados-br

Aponte clientes para http://localhost:8000/mcp. Útil para Docker ou compartilhar o servidor na rede local. Por padrão o servidor escuta só em 127.0.0.1; defina MCP_HOST=0.0.0.0 para aceitar conexões de outras máquinas (a imagem Docker já faz isso).

VariávelPadrãoFunção
MCP_TRANSPORTEstdiostreamable-http liga o modo HTTP
MCP_HOST127.0.0.1Interface de escuta (0.0.0.0 na imagem Docker)
MCP_PORTA8000Porta HTTP
MCP_AUTH_TOKENvazioSe definido, exige Authorization: Bearer <token> em toda requisição

Autenticação (bearer opcional)

Risco: sem MCP_AUTH_TOKEN, o modo HTTP não tem autenticação. Escutando em 0.0.0.0 (como na imagem Docker), qualquer pessoa que alcance a porta pode chamar as 19 tools, consumir a sua cota nas APIs públicas e usar o seu INMET_TOKEN. O servidor registra um aviso no log quando sobe assim. Não publique a porta na internet sem token e prefira um proxy reverso com TLS na frente: sobre HTTP puro o token trafega em texto claro.

Gere um token longo e aleatório e passe-o ao servidor:

bash
export MCP_AUTH_TOKEN="$(python -c 'import secrets; print(secrets.token_urlsafe(32))')"MCP_TRANSPORTE=streamable-http mcp-dados-br

Requisições sem o cabeçalho, com outro esquema ou com token diferente recebem 401 com WWW-Authenticate: Bearer. A comparação usa secrets.compare_digest (tempo constante). No cliente, envie o cabeçalho, por exemplo no Claude Code:

bash
claude mcp add --transport http dados-brasil http://localhost:8000/mcp \  --header "Authorization: Bearer $MCP_AUTH_TOKEN"

Em stdio o token não se aplica: o processo só fala com o cliente que o iniciou.

Docker

bash
docker build -t mcp-dados-br .docker run -p 8000:8000 \  -e MCP_AUTH_TOKEN="$MCP_AUTH_TOKEN" \  -e INMET_TOKEN=seu-token \  mcp-dados-br

Para uso só na própria máquina, publique a porta apenas no loopback: docker run -p 127.0.0.1:8000:8000 mcp-dados-br.

Exemplos de uso

Depois de configurar, pergunte diretamente ao assistente:

  • "Qual foi o IPCA dos últimos 6 meses?"
  • "O que o mercado espera para a Selic nas próximas reuniões?" (Boletim Focus)
  • "Quem são os deputados federais de Minas Gerais do partido X?"
  • "Qual a população de São Paulo em 2022? E o PIB?"
  • "Como está o dólar PTAX nos últimos dias?"
  • "Busque projetos de lei de 2025 sobre saúde mental"
  • "O que está na agenda da Câmara esta semana?"
  • "Como o Senado votou a PEC X? Qual o placar?"
  • "Quem são os senadores de Minas Gerais?"
  • "Quais estações automáticas do INMET existem no Amazonas?"

Desenvolvimento

bash
uv sync --devuv run pytest              # suíte unitária (mocks)uv run pytest -m integration   # consulta as APIs reaisuv run ruff check .uv run mypy src

Logs de depuração: configure MCP_LOG_LEVEL=DEBUG no cliente MCP. Para contribuir, leia o CONTRIBUTING.md.

Arquitetura

src/mcp_dados_br/├── server.py        # Servidor MCP, registro das tools e escolha do transporte├── auth.py          # Middleware ASGI de autenticação bearer (modo HTTP)├── validacao.py     # Validação dos argumentos das tools (UF, moeda, datas, limites)├── saida.py         # Resultado com texto + structuredContent├── http.py          # Cliente HTTP compartilhado, retry e tratamento de erros├── payload.py       # Leitura defensiva das respostas das APIs (fonte e campo no erro)├── cache.py         # Cache TTL em memória para as respostas das APIs└── tools/    ├── ibge.py      # SIDRA v3 + localidades v1    ├── bcb.py       # SGS + Olinda (PTAX e Boletim Focus)    ├── inmet.py     # Estações e dados observacionais    ├── camara.py    # Dados Abertos da Câmara v2    └── senado.py    # Dados Abertos do Senado (LegisSaber)
  • Dois transportes: stdio (padrão dos clientes desktop) e streamable-http (Docker/rede), este com autenticação bearer opcional via MCP_AUTH_TOKEN
  • Validação de entrada antes de montar qualquer URL: UF entre as 27 siglas, moeda ISO 4217 de 3 letras, datas ISO, códigos IBGE/SIDRA numéricos, IDs positivos e limites de dias/ultimas. Os limites também aparecem no inputSchema das tools, e o erro chega ao cliente MCP dizendo o que foi recebido e o que é aceito
  • Cache TTL de 10 minutos por requisição idêntica, com chave inequívoca (JSON ordenado de URL e parâmetros)
  • Retry automático em falhas de rede e em 429/502/503/504
  • Mudança de formato numa API upstream (campo renomeado, tipo trocado) vira erro da tool (isError: true) com a fonte e o campo, ex.: Resposta inesperada de BCB/PTAX: campo 'cotacaoCompra' ausente
  • Saídas formatadas como texto legível pelo modelo; bcb_serie, bcb_cambio e camara_deputados também devolvem structuredContent com outputSchema (datas ISO, valores numéricos), mantendo o texto como fallback
  • User-Agent com a versão instalada do pacote

Roadmap

  • v0.2 — INMET (estações + observacional com token) e Boletim Focus
  • v0.3 — Agenda da Câmara, transporte streamable-http e testes de integração agendados no CI
  • v0.4 — Tramitações, atalhos nomeados no SGS, imagem Docker
  • v0.5 — Publicação no PyPI (uvx mcp-dados-br), MCP Registry e Smithery
  • v0.6 — Validação de entrada, autenticação bearer no modo HTTP e saída estruturada
  • DOU: busca no Diário Oficial da União (aguardando API pública estável)
  • TSE: resultados eleitorais

Licença

MIT

来源:README.md,提交 d530033

工具

0
SourceWeft 尚未在沙箱中启动过该软件包,因此其工具未知。

版本历史

2
  1. v0.6.0最新Sep 23, 2026
  2. v0.5.2Sep 16, 2026

评分

已满足适用检查项的 50%

该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。

  • 近 30 天内可连通25 分

    请保持端点能够响应 MCP 握手;SourceWeft 每 30 天探测一次。

  • 已声明认证方式10 分

    请在注册中心条目中声明凭据请求头,或保持端点能够响应探测,以便判定其认证方式。

  • 已列出工具15 分

    请让服务器在无凭据时响应 tools/list,或发布可在沙箱中无凭据启动的软件包。

  • 描述必需15 分
  • 图标10 分
  • 文档15 分
  • 许可证10 分