Loading...
Loading...
Compare original and translation side by side
Skill by ara.so — Daily 2026 Skills collection.
mcp-brasil由ara.so开发的Skill——Daily 2026 Skills合集。
mcp-brasilundefinedundefined
---
---~/Library/Application Support/Claude/claude_desktop_config.json%APPDATA%\Claude\claude_desktop_config.json{
"mcpServers": {
"mcp-brasil": {
"command": "uvx",
"args": ["--from", "mcp-brasil", "python", "-m", "mcp_brasil.server"],
"env": {
"TRANSPARENCIA_API_KEY": "$TRANSPARENCIA_API_KEY",
"DATAJUD_API_KEY": "$DATAJUD_API_KEY"
}
}
}
}~/Library/Application Support/Claude/claude_desktop_config.json%APPDATA%\Claude\claude_desktop_config.json{
"mcpServers": {
"mcp-brasil": {
"command": "uvx",
"args": ["--from", "mcp-brasil", "python", "-m", "mcp_brasil.server"],
"env": {
"TRANSPARENCIA_API_KEY": "$TRANSPARENCIA_API_KEY",
"DATAJUD_API_KEY": "$DATAJUD_API_KEY"
}
}
}
}.vscode/mcp.json{
"servers": {
"mcp-brasil": {
"command": "uvx",
"args": ["--from", "mcp-brasil", "python", "-m", "mcp_brasil.server"],
"env": {
"TRANSPARENCIA_API_KEY": "$TRANSPARENCIA_API_KEY",
"DATAJUD_API_KEY": "$DATAJUD_API_KEY"
}
}
}
}.vscode/mcp.json{
"servers": {
"mcp-brasil": {
"command": "uvx",
"args": ["--from", "mcp-brasil", "python", "-m", "mcp_brasil.server"],
"env": {
"TRANSPARENCIA_API_KEY": "$TRANSPARENCIA_API_KEY",
"DATAJUD_API_KEY": "$DATAJUD_API_KEY"
}
}
}
}claude mcp add mcp-brasil -- uvx --from mcp-brasil python -m mcp_brasil.serverclaude mcp add mcp-brasil -- uvx --from mcp-brasil python -m mcp_brasil.serverfastmcp run mcp_brasil.server:mcp --transport http --port 8000fastmcp run mcp_brasil.server:mcp --transport http --port 8000
---
---.envundefined.envundefined
---
---| Category | Feature Key | API | Tools |
|---|---|---|---|
| Economic | | IBGE — states, municipalities, statistics | 9 |
| Economic | | Banco Central — Selic, IPCA, FX, PIB, 190+ series | 9 |
| Legislative | | Câmara dos Deputados — deputies, bills, votes, expenses | 10 |
| Legislative | | Senado Federal — senators, bills, votes, committees | 26 |
| Transparency | | Portal da Transparência — contracts, spending, sanctions | 18 |
| Transparency | | TCU — rulings, ineligible bidders | 8 |
| TCE (states) | | 9 State audit courts | 39 |
| Judiciary | | DataJud/CNJ — court cases, movements | 7 |
| Judiciary | | STF, STJ, TST — rulings, precedents | 6 |
| Electoral | | TSE — elections, candidates, campaign finance | 15 |
| Environment | | INPE — wildfires, deforestation | 4 |
| Environment | | ANA — hydrological stations, reservoirs | 3 |
| Health | | CNES/DataSUS — facilities, professionals, beds | 4 |
| Oceanography | | Tide tables for Brazilian ports | 7 |
| Procurement | | PNCP — public contracts (Lei 14.133/2021) | 6 |
| Procurement | | ComprasNet/SIASG | 8 |
| Utilities | | CEP, CNPJ, DDD, banks, FX, FIPE, PIX | 16 |
| Utilities | | dados.gov.br — dataset catalog | 4 |
| Utilities | | Official gazettes from 5,000+ cities | 4 |
| Utilities | | Parliamentary PIX transfers | 5 |
| AI Agent | | Draft official documents with real data | 5 |
| 分类 | 功能标识 | API | 工具数量 |
|---|---|---|---|
| 经济 | | IBGE——州、市、统计数据 | 9 |
| 经济 | | 巴西中央银行——Selic利率、IPCA指数、汇率、GDP等190+系列数据 | 9 |
| 立法 | | 众议院——众议员、法案、投票、开支 | 10 |
| 立法 | | 联邦参议院——参议员、法案、投票、委员会 | 26 |
| 透明度 | | 透明度门户——合同、支出、处罚 | 18 |
| 透明度 | | 联邦审计法院——裁决、不合格投标人 | 8 |
| 州审计法院 | | 9个州级审计法院 | 39 |
| 司法 | | DataJud/CNJ——案件、动态 | 7 |
| 司法 | | 联邦最高法院、高等法院、劳动最高法院——裁决、判例 | 6 |
| 选举 | | 最高选举法院——选举、候选人、竞选资金 | 15 |
| 环境 | | 国家空间研究院——野火、森林砍伐 | 4 |
| 环境 | | 国家水资源局——水文站、水库 | 3 |
| 健康 | | CNES/DataSUS——医疗机构、专业人员、床位 | 4 |
| 海洋学 | | 巴西港口潮汐表 | 7 |
| 采购 | | PNCP——公共合同(依据第14.133/2021号法律) | 6 |
| 采购 | | ComprasNet/SIASG系统 | 8 |
| 实用工具 | | CEP、CNPJ、DDD、银行、汇率、FIPE、PIX | 16 |
| 实用工具 | | dados.gov.br——数据集目录 | 4 |
| 实用工具 | | 5000+城市的官方公报 | 4 |
| 实用工具 | | 议会PIX转账 | 5 |
| AI Agent | | 使用真实数据起草官方文件 | 5 |
| Tool | Description |
|---|---|
| List all 28 features with descriptions |
| BM25 search — get relevant tools for a query |
| Build multi-API execution plan for a complex query |
| Run multiple tool calls in parallel in one request |
| 工具 | 描述 |
|---|---|
| 列出所有28类功能及其描述 |
| BM25搜索——获取与查询相关的工具 |
| 为复杂查询构建多API执行计划 |
| 在一次请求中并行运行多个工具调用 |
git clone https://github.com/jxnxts/mcp-brasil.git
cd mcp-brasil
make dev # Install all dependencies (prod + dev)
make test # Run all tests
make test-feature F=ibge # Test a single feature
make lint # Lint + format check
make ruff # Auto-fix lint + format
make types # mypy strict mode
make ci # lint + types + test (full CI)
make run # Start server (stdio transport)
make serve # Start server (HTTP :8000)
make inspect # List all tools/resources/promptsgit clone https://github.com/jxnxts/mcp-brasil.git
cd mcp-brasil
make dev # 安装所有依赖(生产+开发)
make test # 运行所有测试
make test-feature F=ibge # 测试单个功能
make lint # 代码检查+格式校验
make ruff # 自动修复代码检查+格式问题
make types # mypy严格模式检查
make ci # 代码检查+类型检查+测试(完整CI流程)
make run # 启动服务器(stdio传输)
make serve # 启动服务器(HTTP端口8000)
make inspect # 列出所有工具/资源/提示词src/mcp_brasil/
├── server.py # Auto-discovers features — never edit manually
├── _shared/ # Shared HTTP client, rate limiting, BM25
├── data/ # 27 API features
│ ├── ibge/
│ │ ├── __init__.py # exports FEATURE_META
│ │ ├── server.py # FastMCP instance (exports `mcp`)
│ │ ├── tools.py # Tool implementations
│ │ ├── client.py # Async HTTP via httpx
│ │ ├── schemas.py # Pydantic v2 models
│ │ └── constants.py # Base URLs, codes
│ ├── bacen/
│ └── ...
└── agentes/ # Intelligent agent features
└── redator/server.pyFEATURE_META__init__.pymcp: FastMCPserver.pysrc/mcp_brasil/
├── server.py # 自动发现功能——请勿手动编辑
├── _shared/ # 共享HTTP客户端、速率限制、BM25
├── data/ # 27个API功能模块
│ ├── ibge/
│ │ ├── __init__.py # 导出FEATURE_META
│ │ ├── server.py # FastMCP实例(导出`mcp`)
│ │ ├── tools.py # 工具实现
│ │ ├── client.py # 基于httpx的异步HTTP客户端
│ │ ├── schemas.py # Pydantic v2模型
│ │ └── constants.py # 基础URL、编码
│ ├── bacen/
│ └── ...
└── agentes/ # 智能Agent功能模块
└── redator/server.py__init__.pyFEATURE_METAserver.pymcp: FastMCPmkdir src/mcp_brasil/data/myfeature
touch src/mcp_brasil/data/myfeature/{__init__.py,server.py,tools.py,client.py,schemas.py,constants.py}mkdir src/mcp_brasil/data/myfeature
touch src/mcp_brasil/data/myfeature/{__init__.py,server.py,tools.py,client.py,schemas.py,constants.py}__init__.py__init__.pyfrom mcp_brasil._shared.types import FeatureMeta
FEATURE_META = FeatureMeta(
name="myfeature",
description="Short description of the API",
tags=["category"],
requires_key=False,
)from mcp_brasil._shared.types import FeatureMeta
FEATURE_META = FeatureMeta(
name="myfeature",
description="Short description of the API",
tags=["category"],
requires_key=False,
)server.pyserver.pyfrom fastmcp import FastMCP
from .tools import register_tools
mcp = FastMCP("myfeature")
register_tools(mcp)from fastmcp import FastMCP
from .tools import register_tools
mcp = FastMCP("myfeature")
register_tools(mcp)client.pyclient.pyimport httpx
from mcp_brasil._shared.http import get_client
BASE_URL = "https://api.example.gov.br"
async def fetch_data(endpoint: str, params: dict) -> dict:
async with get_client() as client:
response = await client.get(f"{BASE_URL}/{endpoint}", params=params)
response.raise_for_status()
return response.json()import httpx
from mcp_brasil._shared.http import get_client
BASE_URL = "https://api.example.gov.br"
async def fetch_data(endpoint: str, params: dict) -> dict:
async with get_client() as client:
response = await client.get(f"{BASE_URL}/{endpoint}", params=params)
response.raise_for_status()
return response.json()schemas.pyschemas.pyfrom pydantic import BaseModel, Field
from typing import Optional
class MyResult(BaseModel):
id: str
name: str
value: Optional[float] = Field(None, description="Numeric value")from pydantic import BaseModel, Field
from typing import Optional
class MyResult(BaseModel):
id: str
name: str
value: Optional[float] = Field(None, description="Numeric value")tools.pytools.pyfrom fastmcp import FastMCP
from .client import fetch_data
from .schemas import MyResult
def register_tools(mcp: FastMCP) -> None:
@mcp.tool(description="Busca dados do endpoint X")
async def buscar_dados(
codigo: str,
ano: int = 2024,
) -> list[MyResult]:
"""Retorna dados do endpoint X para o código fornecido."""
raw = await fetch_data("endpoint-x", {"codigo": codigo, "ano": ano})
return [MyResult(**item) for item in raw.get("data", [])]from fastmcp import FastMCP
from .client import fetch_data
from .schemas import MyResult
def register_tools(mcp: FastMCP) -> None:
@mcp.tool(description="Busca dados do endpoint X")
async def buscar_dados(
codigo: str,
ano: int = 2024,
) -> list[MyResult]:
"""Retorna dados do endpoint X para o código fornecido."""
raw = await fetch_data("endpoint-x", {"codigo": codigo, "ano": ano})
return [MyResult(**item) for item in raw.get("data", [])]tests/data/myfeature/test_tools.pytests/data/myfeature/test_tools.pyimport pytest
from unittest.mock import AsyncMock, patch
from mcp_brasil.data.myfeature.tools import register_tools
from fastmcp import FastMCP
@pytest.fixture
def mcp():
server = FastMCP("test-myfeature")
register_tools(server)
return server
@pytest.mark.asyncio
async def test_buscar_dados(mcp):
mock_response = {"data": [{"id": "001", "name": "Test", "value": 42.0}]}
with patch("mcp_brasil.data.myfeature.client.fetch_data", new_callable=AsyncMock) as mock:
mock.return_value = mock_response
# call via mcp tool invocation or directly
from mcp_brasil.data.myfeature.tools import buscar_dados
result = await buscar_dados(codigo="001")
assert len(result) == 1
assert result[0].name == "Test"import pytest
from unittest.mock import AsyncMock, patch
from mcp_brasil.data.myfeature.tools import register_tools
from fastmcp import FastMCP
@pytest.fixture
def mcp():
server = FastMCP("test-myfeature")
register_tools(server)
return server
@pytest.mark.asyncio
async def test_buscar_dados(mcp):
mock_response = {"data": [{"id": "001", "name": "Test", "value": 42.0}]}
with patch("mcp_brasil.data.myfeature.client.fetch_data", new_callable=AsyncMock) as mock:
mock.return_value = mock_response
# 通过mcp工具调用或直接调用
from mcp_brasil.data.myfeature.tools import buscar_dados
result = await buscar_dados(codigo="001")
assert len(result) == 1
assert result[0].name == "Test"planejar_consultaplanejar_consulta"Crie um plano de consulta para analisar o deputado federal João Silva:
gastos, votações, proposições e financiamento de campanha."planejar_consultacamaratsetransparencia"创建一个查询计划,用于分析联邦众议员若昂·席尔瓦的支出、投票记录、提案及竞选资金情况。"planejar_consultacamaratsetransparenciaexecutar_loteexecutar_lote"Execute em paralelo: taxa Selic atual, IPCA dos últimos 12 meses,
e câmbio USD/BRL de hoje."executar_lotebacen"并行执行:当前Selic利率、过去12个月的IPCA指数,以及今日美元/巴西雷亚尔汇率。"executar_lotebacenrecomendar_toolsrecomendar_tools"Quais tools devo usar para investigar contratos suspeitos em licitações municipais?"tce_sppncptcutransparencia"我应该使用哪些工具来调查市政招标中的可疑合同?"tce_sppncptcutransparenciaimport asyncio
from mcp_brasil.data.bacen.tools import buscar_serie_temporal
from mcp_brasil.data.ibge.tools import buscar_municipios
async def main():
# Selic rate last 12 months
selic = await buscar_serie_temporal(codigo="432", ultimos=12)
# All municipalities in São Paulo state
municipios = await buscar_municipios(uf="SP")
print(f"Selic entries: {len(selic)}")
print(f"SP municipalities: {len(municipios)}")
asyncio.run(main())import asyncio
from mcp_brasil.data.bacen.tools import buscar_serie_temporal
from mcp_brasil.data.ibge.tools import buscar_municipios
async def main():
# 过去12个月的Selic利率
selic = await buscar_serie_temporal(codigo="432", ultimos=12)
# 圣保罗州的所有城市
municipios = await buscar_municipios(uf="SP")
print(f"Selic记录数: {len(selic)}")
print(f"圣保罗州城市数量: {len(municipios)}")
asyncio.run(main())from mcp_brasil.data.brasilapi.tools import consultar_cnpj, consultar_cep
async def lookup():
empresa = await consultar_cnpj(cnpj="00000000000191") # Banco do Brasil
endereco = await consultar_cep(cep="01310100") # Av. Paulistafrom mcp_brasil.data.brasilapi.tools import consultar_cnpj, consultar_cep
async def lookup():
empresa = await consultar_cnpj(cnpj="00000000000191") # 巴西银行
endereco = await consultar_cep(cep="01310100") # 保利斯塔大道undefinedundefined
---
---undefinedundefinedundefinedundefinedtransparenciadatajudTRANSPARENCIA_API_KEYDATAJUD_API_KEYtransparenciadatajudTRANSPARENCIA_API_KEYDATAJUD_API_KEYMCP_BRASIL_TOOL_SEARCH=bm25code_modenoneMCP_BRASIL_TOOL_SEARCH=bm25code_modenoneMCP_BRASIL_HTTP_TIMEOUT=60.0 # increase timeout
MCP_BRASIL_HTTP_MAX_RETRIES=5 # increase retriesMCP_BRASIL_HTTP_TIMEOUT=60.0 # 增加超时时间
MCP_BRASIL_HTTP_MAX_RETRIES=5 # 增加重试次数FEATURE_META__init__.pymcp: FastMCPserver.pymake inspect__init__.pyFEATURE_METAserver.pymcp: FastMCPmake inspectmake test-feature F=bacen
make test-feature F=transparenciamake test-feature F=bacen
make test-feature F=transparenciahttpxasync def_shared/http.pyhttpxasync def_shared/http.py