mcp-brasil-public-apis
MCP Server connecting AI agents to 28 Brazilian public APIs covering economy, legislation, transparency, judiciary, elections, environment, health, and more
Best use case
mcp-brasil-public-apis is best used when you need a repeatable AI agent workflow instead of a one-off prompt.
MCP Server connecting AI agents to 28 Brazilian public APIs covering economy, legislation, transparency, judiciary, elections, environment, health, and more
Teams using mcp-brasil-public-apis should expect a more consistent output, faster repeated execution, less prompt rewriting.
When to use this skill
- You want a reusable workflow that can be run more than once with consistent structure.
When not to use this skill
- You only need a quick one-off answer and do not need a reusable workflow.
- You cannot install or maintain the underlying files, dependencies, or repository context.
Installation
Claude Code / Cursor / Codex
Manual Installation
- Download SKILL.md from GitHub
- Place it in
.claude/skills/mcp-brasil-public-apis/SKILL.mdinside your project - Restart your AI agent — it will auto-discover the skill
How mcp-brasil-public-apis Compares
| Feature / Agent | mcp-brasil-public-apis | Standard Approach |
|---|---|---|
| Platform Support | Not specified | Limited / Varies |
| Context Awareness | High | Baseline |
| Installation Complexity | Unknown | N/A |
Frequently Asked Questions
What does this skill do?
MCP Server connecting AI agents to 28 Brazilian public APIs covering economy, legislation, transparency, judiciary, elections, environment, health, and more
Where can I find the source code?
You can find the source code on GitHub using the link provided at the top of the page.
SKILL.md Source
# mcp-brasil: MCP Server for 28 Brazilian Public APIs
> Skill by [ara.so](https://ara.so) — Daily 2026 Skills collection.
`mcp-brasil` is a [Model Context Protocol (MCP)](https://modelcontextprotocol.io/) server that exposes 213 tools, 55 resources, and 45 prompts across 28 Brazilian public APIs — letting AI agents (Claude, GPT, Copilot, Cursor, etc.) query government data in natural language. 26 APIs require no key; only 2 need free registrations.
---
## Installation
```bash
# pip
pip install mcp-brasil
# uv (recommended)
uv add mcp-brasil
```
---
## Quick Setup by Client
### Claude Desktop
Add to `~/Library/Application Support/Claude/claude_desktop_config.json` (macOS) or `%APPDATA%\Claude\claude_desktop_config.json` (Windows):
```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"
}
}
}
}
```
### VS Code / Cursor
Create `.vscode/mcp.json` in your project root:
```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 Code CLI
```bash
claude mcp add mcp-brasil -- uvx --from mcp-brasil python -m mcp_brasil.server
```
### HTTP Transport (other clients)
```bash
fastmcp run mcp_brasil.server:mcp --transport http --port 8000
# Server at http://localhost:8000/mcp
```
---
## Environment Variables
Create a `.env` file or export in your shell:
```bash
# Optional — 26 other APIs work without any keys
TRANSPARENCIA_API_KEY=your_key_here # https://portaldatransparencia.gov.br/api-de-dados/cadastrar-email
DATAJUD_API_KEY=your_key_here # https://datajud-wiki.cnj.jus.br/api-publica/acesso
# Tuning
MCP_BRASIL_TOOL_SEARCH=bm25 # bm25 | code_mode | none (default: bm25)
MCP_BRASIL_HTTP_TIMEOUT=30.0 # seconds
MCP_BRASIL_HTTP_MAX_RETRIES=3
```
---
## API Coverage (28 Features, 213 Tools)
| Category | Feature Key | API | Tools |
|---|---|---|---|
| Economic | `ibge` | IBGE — states, municipalities, statistics | 9 |
| Economic | `bacen` | Banco Central — Selic, IPCA, FX, PIB, 190+ series | 9 |
| Legislative | `camara` | Câmara dos Deputados — deputies, bills, votes, expenses | 10 |
| Legislative | `senado` | Senado Federal — senators, bills, votes, committees | 26 |
| Transparency | `transparencia` | Portal da Transparência — contracts, spending, sanctions | 18 |
| Transparency | `tcu` | TCU — rulings, ineligible bidders | 8 |
| TCE (states) | `tce_sp/rj/rs/sc/pe/ce/rn/pi/to` | 9 State audit courts | 39 |
| Judiciary | `datajud` | DataJud/CNJ — court cases, movements | 7 |
| Judiciary | `jurisprudencia` | STF, STJ, TST — rulings, precedents | 6 |
| Electoral | `tse` | TSE — elections, candidates, campaign finance | 15 |
| Environment | `inpe` | INPE — wildfires, deforestation | 4 |
| Environment | `ana` | ANA — hydrological stations, reservoirs | 3 |
| Health | `saude` | CNES/DataSUS — facilities, professionals, beds | 4 |
| Oceanography | `tabua_mares` | Tide tables for Brazilian ports | 7 |
| Procurement | `pncp` | PNCP — public contracts (Lei 14.133/2021) | 6 |
| Procurement | `dadosabertos` | ComprasNet/SIASG | 8 |
| Utilities | `brasilapi` | CEP, CNPJ, DDD, banks, FX, FIPE, PIX | 16 |
| Utilities | `dados_abertos` | dados.gov.br — dataset catalog | 4 |
| Utilities | `diario_oficial` | Official gazettes from 5,000+ cities | 4 |
| Utilities | `transferegov` | Parliamentary PIX transfers | 5 |
| AI Agent | `redator` | Draft official documents with real data | 5 |
---
## Meta-Tools (Root Server)
Four special tools are always available regardless of feature:
| Tool | Description |
|---|---|
| `listar_features` | List all 28 features with descriptions |
| `recomendar_tools` | BM25 search — get relevant tools for a query |
| `planejar_consulta` | Build multi-API execution plan for a complex query |
| `executar_lote` | Run multiple tool calls in parallel in one request |
---
## Development Commands
```bash
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/prompts
```
---
## Architecture: Package by Feature + Auto-Registry
```
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/
```
**Auto-registry**: The root `server.py` scans for `FEATURE_META` in `__init__.py` and `mcp: FastMCP` in `server.py` — no manual registration needed.
---
## Adding a New Feature
```bash
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` — Required export
```python
from mcp_brasil._shared.types import FeatureMeta
FEATURE_META = FeatureMeta(
name="myfeature",
description="Short description of the API",
tags=["category"],
requires_key=False,
)
```
### `server.py` — Required export
```python
from fastmcp import FastMCP
from .tools import register_tools
mcp = FastMCP("myfeature")
register_tools(mcp)
```
### `client.py` — Async HTTP pattern
```python
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.py` — Pydantic v2 models
```python
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.py` — Tool registration
```python
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.py` — Test pattern
```python
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
# 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"
```
---
## Common Usage Patterns
### Pattern 1: Cross-reference with `planejar_consulta`
Ask the agent to plan a multi-API query:
```
"Crie um plano de consulta para analisar o deputado federal João Silva:
gastos, votações, proposições e financiamento de campanha."
```
The `planejar_consulta` meta-tool returns a structured execution plan combining `camara`, `tse`, and `transparencia` tools.
### Pattern 2: Parallel execution with `executar_lote`
```
"Execute em paralelo: taxa Selic atual, IPCA dos últimos 12 meses,
e câmbio USD/BRL de hoje."
```
`executar_lote` fires all three `bacen` tool calls concurrently.
### Pattern 3: Smart discovery with `recomendar_tools`
```
"Quais tools devo usar para investigar contratos suspeitos em licitações municipais?"
```
BM25 search filters the 213 tools to return only relevant ones (e.g., `tce_sp`, `pncp`, `tcu`, `transparencia`).
### Pattern 4: Direct tool calls in code
```python
import 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())
```
### Pattern 5: Using brasilapi for CNPJ/CEP lookup
```python
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. Paulista
```
---
## Natural Language Query Examples
Once the server is connected to your AI client:
```
# Economic analysis
"Qual a tendência da taxa Selic nos últimos 12 meses? Compare com IPCA."
# Legislative research
"Quais projetos de lei sobre IA tramitaram na Câmara em 2024? Quem foram os autores?"
# Transparency / anti-corruption
"Quais os 10 maiores contratos do governo federal em 2024?"
# Cross-state comparison
"Compare gastos per capita com saúde em SP e MG cruzando TCE-SP e IBGE."
# Judiciary
"Busque processos sobre licitação irregular no TCU. Quais as penalidades?"
# Electoral finance
"Quais os maiores doadores da campanha do candidato X?"
# Environment
"Quantos focos de queimada foram registrados no Cerrado em agosto 2024?"
# Document generation (redator feature)
"Redija um ofício solicitando informações sobre o contrato 001/2024
com dados reais do Portal da Transparência."
```
---
## Troubleshooting
### Server not starting
```bash
# Verify installation
python -m mcp_brasil.server --help
# Check uvx finds the package
uvx --from mcp-brasil python -c "import mcp_brasil; print(mcp_brasil.__version__)"
```
### API returning 401/403
- `transparencia` and `datajud` silently degrade without keys — set `TRANSPARENCIA_API_KEY` and `DATAJUD_API_KEY` for full access
- Keys are free: [Transparência](https://portaldatransparencia.gov.br/api-de-dados/cadastrar-email) | [DataJud](https://datajud-wiki.cnj.jus.br/api-publica/acesso)
### Too many tools visible (context overflow)
Set `MCP_BRASIL_TOOL_SEARCH=bm25` (default) — only tools relevant to the current query are surfaced. Use `code_mode` to expose all tools, or `none` to disable filtering.
### Timeout errors on slow government APIs
```bash
MCP_BRASIL_HTTP_TIMEOUT=60.0 # increase timeout
MCP_BRASIL_HTTP_MAX_RETRIES=5 # increase retries
```
### Feature not auto-discovered
Ensure your feature folder exports both:
- `FEATURE_META` in `__init__.py`
- `mcp: FastMCP` instance in `server.py`
Run `make inspect` to verify your feature appears in the tool list.
### Running tests for a specific feature
```bash
make test-feature F=bacen
make test-feature F=transparencia
```
---
## Key Design Principles
1. **Async everywhere** — `httpx` async client, all tools are `async def`
2. **Pydantic v2** — all API responses validated through typed schemas
3. **Rate limiting with backoff** — built into `_shared/http.py`, transparent to feature code
4. **Zero manual registration** — add a folder → it's discovered automatically
5. **BM25 smart filtering** — prevents context window bloat from 213 tools
6. **Graceful degradation** — APIs requiring keys still work (with reduced limits) without themRelated Skills
awesome-free-llm-apis
Reference guide for permanent free-tier LLM APIs with rate limits, model lists, and OpenAI-compatible integration patterns.
```markdown
---
zeroboot-vm-sandbox
Sub-millisecond VM sandboxes for AI agents using copy-on-write KVM forking via Zeroboot
yourvpndead-vpn-detection
Android app that detects VPN/proxy servers (VLESS/xray/sing-box) via local SOCKS5 vulnerability, exposing exit IPs and server configs without root
xata-postgres-platform
Expert skill for Xata open-source cloud-native Postgres platform with copy-on-write branching, scale-to-zero, and Kubernetes deployment
x-mentor-skill-nuwa
AI-powered X (Twitter) content strategy skill that distills methodologies from 6 top creators + open-source algorithm data into actionable writing, growth, and monetization guidance.
wx-favorites-report
End-to-end pipeline to extract, decrypt, and visualize WeChat Mac favorites from encrypted SQLite DB into an interactive HTML report.
wterm-web-terminal
Web terminal emulator with Zig/WASM core, DOM rendering, and React/vanilla JS bindings
worldmonitor-intelligence-dashboard
Real-time global intelligence dashboard with AI-powered news aggregation, geopolitical monitoring, and infrastructure tracking
witr-process-inspector
CLI and TUI tool that explains why processes, services, and ports are running by tracing causality chains across supervisors, containers, and shells.
wildworld-dataset
WildWorld large-scale action-conditioned world modeling dataset with 108M+ frames from a photorealistic ARPG game, featuring per-frame annotations, 450+ actions, and explicit state information for generative world modeling research.
whatcable-macos-usb-inspector
macOS menu bar app that identifies USB-C cable capabilities and charging diagnostics using IOKit