{
  "markdown": "# IBGE Brasil MCP Server\n\n[![npm version](https://img.shields.io/npm/v/ibge-br-mcp.svg)](https://www.npmjs.com/package/ibge-br-mcp)\n[![npm downloads](https://img.shields.io/npm/dm/ibge-br-mcp.svg)](https://www.npmjs.com/package/ibge-br-mcp)\n[![node](https://img.shields.io/node/v/ibge-br-mcp)](https://www.npmjs.com/package/ibge-br-mcp)\n[![MCP Registry](https://img.shields.io/badge/MCP-Registry-blue)](https://registry.modelcontextprotocol.io)\n[![LobeHub](https://lobehub.com/badge/mcp/sidneybissoli-ibge-br-mcp)](https://lobehub.com/mcp/sidneybissoli-ibge-br-mcp)\n[![smithery badge](https://smithery.ai/badge/sidneybissoli/ibge-br-mcp)](https://smithery.ai/server/sidneybissoli/ibge-br-mcp)\n[![ibge-br-mcp MCP server](https://glama.ai/mcp/servers/@SidneyBissoli/ibge-br-mcp/badges/score.svg)](https://glama.ai/mcp/servers/@SidneyBissoli/ibge-br-mcp)\n[![CI](https://github.com/SidneyBissoli/ibge-br-mcp/actions/workflows/ci.yml/badge.svg)](https://github.com/SidneyBissoli/ibge-br-mcp/actions/workflows/ci.yml)\n[![Coverage](https://img.shields.io/badge/coverage-%E2%89%A588%25-brightgreen.svg)](https://github.com/SidneyBissoli/ibge-br-mcp/blob/main/vitest.config.ts)\n[![GitHub stars](https://img.shields.io/github/stars/SidneyBissoli/ibge-br-mcp?style=flat&logo=github)](https://github.com/SidneyBissoli/ibge-br-mcp)\n[![GitHub Sponsors](https://img.shields.io/github/sponsors/SidneyBissoli?logo=githubsponsors&label=Sponsor&color=db61a2)](https://github.com/sponsors/SidneyBissoli)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n\n**Live, exact Brazilian public data for your AI assistant — with provenance, not guesswork.**\n\nAsk an LLM _\"what was Belo Horizonte's population in the 2022 Census?\"_ and you get a plausible number from its training data: maybe right, maybe outdated, with no source. `ibge-br-mcp` instead has your assistant query the official **IBGE** APIs in real time — returning the exact figure together with the table and period it came from.\n\n🇧🇷 [Leia em Português](README.pt-BR.md)\n\nThis server implements the [Model Context Protocol (MCP)](https://modelcontextprotocol.io/) to give AI assistants live, structured access to Brazil's public geographic, demographic, economic, and health data — sourced from the IBGE APIs (including health indicators served through IBGE's SIDRA system).\n\n## See it in action\n\nAsk your assistant, in English or Portuguese:\n\n- *\"What was Belo Horizonte's population in the 2022 Census?\"* → `ibge_cidades` / `ibge_censo`\n- *\"List the municipalities of Espírito Santo.\"* → `ibge_municipios`\n- *\"Compare GDP across the Southeast state capitals.\"* → `ibge_comparar`\n\nThe answers come live from the official IBGE APIs — exact figures with the table and period they came from, not numbers guessed from training data.\n\nWant to see a whole analysis rather than a single answer? The\n[**end-to-end demo**](docs/demo.md) works one real question — *which state grew\nmost between the 2010 and 2022 Censuses, and what drove it* — from first call to\nconclusion, with every figure as it came back. The\n[**practical examples**](examples/README.md) are seven shorter recipes, including\nranking all 5,570 municipalities in a single call.\n\n## Features\n\n- **23 tools** covering all major IBGE data domains — 21 `ibge_*` data tools plus `search`/`fetch` for ChatGPT Deep Research\n- **Provenance block on every response** — source, canonical URL, reference\n  period, real extraction timestamp, ready-to-use citation, and legal regime\n  (see [Data provenance](#data-provenance))\n- **Reference resources & analysis prompts** (MCP catalogs + ready-made templates)\n- **565 automated tests** — 88% overall coverage, 92% across the tools\n- **Automatic caching** with configurable TTL for optimal performance\n- **Retry mechanism** with exponential backoff for network resilience\n- **Comprehensive validation** for all input parameters\n- **Standardized error handling** with helpful suggestions\n- **Full TypeScript support** with strict typing\n\n📖 **Article (in Portuguese):** [Como achar a tabela certa no SIDRA — e como saber que é a certa](docs/artigo-sidra-tabela-certa.pt-BR.md) — finding the right SIDRA table, the metadata that settles it, a full worked example on 2022 Census data, and the four traps that cost the most. Also published on the site, in Portuguese and English: [sidneybissoli.com](https://sidneybissoli.com/en/blog/posts/sidra-tabela-certa/).\n\n🔌 **Tutorial:** [Querying SIDRA through MCP in Claude and ChatGPT](https://sidneybissoli.com/en/blog/posts/sidra-via-mcp/) — how to connect this server in claude.ai, Claude Desktop, Claude Code, ChatGPT (developer mode and Deep Research), Cursor, VS Code and Gemini CLI, then one real query end to end with the provenance block it returns. [Em português](https://sidneybissoli.com/blog/posts/sidra-via-mcp/).\n\n## Data provenance\n\nSince v3.3.0 every successful tool response carries a **provenance block**\n([portfolio contract v1.0](https://www.npmjs.com/package/@sbissoli/mcp-provenance)),\nso each number is citable, auditable, and reproducible. The block is emitted on\nthree channels:\n\n1. `structuredContent.provenance` (parseable, visible to the model) — exactly\n   six keys: `source` (the IBGE API queried), `source_url` (canonical URL that\n   reproduces the query), `data_vintage` (reference period when the source\n   exposes one; `null` otherwise), `retrieved_at` (the REAL upstream extraction\n   instant, preserved across cache hits, Brasília time), `citation`\n   (\"Fonte: IBGE — [pesquisa/tabela], [URL], extraído em [data].\"), and\n   `license` — plus `attribution`, the canonical list of source URLs.\n2. `_meta` under `br.com.sidneybissoli.ibge/provenance` and `.../attribution`\n   (out-of-band mirror for audit/UI, zero model tokens).\n3. A compact text footer appended to the Markdown, for text-only clients.\n\nThe IBGE APIs declare no license of their own; the legal regime is Brazil's\nopen-data framework — Lei 12.527/2011 (LAI) and Decreto 8.777/2016\n(unrestricted reuse, free use, obligation limited to crediting the source).\nStatistics-mode responses (`estatisticas=true`) and `ibge_comparar` are marked\n`derived` with an explanatory note in the canonical block, since the\naggregates are computed server-side from the raw IBGE values.\n\n## Available Tools\n\n### Localities & Geography\n| Tool | Description |\n|:-----|:------------|\n| `ibge_estados` | List Brazilian states with region filtering |\n| `ibge_municipios` | List municipalities by state or search by name |\n| `ibge_localidade` | Get details of a locality by IBGE code |\n| `ibge_geocodigo` | Decode IBGE codes or search codes by name |\n| `ibge_vizinhos` | Find neighboring municipalities |\n\n### Statistical Data (SIDRA)\n| Tool | Description |\n|:-----|:------------|\n| `ibge_sidra` | Query SIDRA tables (Census, PNAD, GDP, etc.) |\n| `ibge_sidra_tabelas` | List and search available SIDRA tables |\n| `ibge_sidra_metadados` | Get table metadata (variables, periods, levels) |\n| `ibge_pesquisas` | List IBGE research surveys and their tables |\n\n### Economic & Social Indicators\n| Tool | Description |\n|:-----|:------------|\n| `ibge_indicadores` | Economic and social indicators (GDP, IPCA, unemployment) |\n| `ibge_censo` | Census data (1970-2022) with 16 themes |\n| `ibge_comparar` | Compare indicators across localities with rankings |\n\n### Municipal Data (Cidades@)\n| Tool | Description |\n|:-----|:------------|\n| `ibge_cidades` | Municipal indicators (population, HDI, GDP per capita, etc.) |\n\n### International Data\n| Tool | Description |\n|:-----|:------------|\n| `ibge_paises` | Country data following UN M49 methodology |\n\n### Demographics\n| Tool | Description |\n|:-----|:------------|\n| `ibge_nomes` | Name frequency and rankings in Brazil |\n\n### Classifications\n| Tool | Description |\n|:-----|:------------|\n| `ibge_cnae` | CNAE (National Classification of Economic Activities) |\n\n### Maps & Geographic Meshes\n| Tool | Description |\n|:-----|:------------|\n| `ibge_malhas` | Geographic meshes (GeoJSON, TopoJSON, SVG) |\n| `ibge_malhas_tema` | Thematic meshes (biomes, Legal Amazon, semi-arid) |\n\n### Health\n| Tool | Description |\n|:-----|:------------|\n| `ibge_datasaude` | Health indicators via IBGE's SIDRA |\n\n### News & Calendar\n| Tool | Description |\n|:-----|:------------|\n| `ibge_noticias` | IBGE news and press releases |\n| `ibge_calendario` | IBGE release and collection calendar |\n\n### ChatGPT Deep Research\n| Tool | Description |\n|:-----|:------------|\n| `search` | Searches the IBGE catalog (SIDRA tables, municipalities, known indicators) — OpenAI Deep Research contract |\n| `fetch` | Returns one catalog document (table metadata, municipality hierarchy + population, indicator series) with its public URL for citation |\n\nThe two are the only tools without the `ibge_` prefix: their names are fixed by the OpenAI contract. For data queries keep using the `ibge_*` tools.\n\n## Which tool should I use?\n\nWith 23 tools, several can touch the same topic. Quick guide for the common overlaps:\n\n### Population & demographics\n\n| You want… | Use |\n|:----------|:----|\n| A single municipality/state panel (population, HDI, GDP…) | `ibge_cidades` |\n| Census data or historical series (1970–2022) | `ibge_censo` |\n| Rank/compare 2–10 localities on one indicator | `ibge_comparar` |\n| A macro indicator time series (GDP, IPCA, unemployment…) | `ibge_indicadores` |\n| A specific SIDRA table / fine control | `ibge_sidra` |\n| The largest/smallest/mean/median across a whole table | `ibge_sidra`/`ibge_censo`/`ibge_indicadores`/`ibge_datasaude` with `estatisticas=true` |\n\n### Economic indicators\n\n| You want… | Use |\n|:----------|:----|\n| IPCA, INPC, GDP, unemployment (IBGE, primary source) | `ibge_indicadores` |\n\n### Localities & codes\n\n| You want… | Use |\n|:----------|:----|\n| List/search municipalities | `ibge_municipios` |\n| List states | `ibge_estados` |\n| Resolve a name→code at any level, or decode a code's structure | `ibge_geocodigo` |\n| Full record of one locality you already have the code for | `ibge_localidade` |\n| Neighboring municipalities | `ibge_vizinhos` |\n\n### SIDRA workflow\n\nDiscover → inspect → query: `ibge_pesquisas` / `ibge_sidra_tabelas` (find a table) → `ibge_sidra_metadados` (its structure) → `ibge_sidra` (query). For common data, the wrappers above (`ibge_censo`, `ibge_indicadores`, `ibge_comparar`, `ibge_cidades`) are usually easier.\n\n### Maps (meshes)\n\n| You want… | Use |\n|:----------|:----|\n| Administrative outlines (Brazil/region/state/municipality) | `ibge_malhas` |\n| Thematic areas (biomes, Legal Amazon, semi-arid, metro regions) | `ibge_malhas_tema` |\n\n## Installation\n\n### Prerequisites\n\n- Node.js 22.x or higher (`engines.node`)\n- npm or yarn\n\n### From npm (recommended)\n\n```bash\nnpm install -g ibge-br-mcp\n```\n\n### From source\n\n```bash\n# Clone the repository\ngit clone https://github.com/SidneyBissoli/ibge-br-mcp.git\ncd ibge-br-mcp\n\n# Install dependencies\nnpm install\n\n# Build the project\nnpm run build\n```\n\n## Configuration\n\n### Remote endpoint (nothing to install)\n\nThe server is also hosted, with the same tools, over Streamable HTTP and without a key:\n\n```\nhttps://ibge.sidneybissoli.com/mcp\n```\n\nIt works with any client that accepts a remote MCP server — a custom connector in claude.ai (Settings → Connectors → Add custom connector), `claude mcp add --transport http ibge https://ibge.sidneybissoli.com/mcp` in Claude Code, an app in ChatGPT, the `mcp.json` of Cursor and VS Code. The step-by-step for each client is in the [tutorial](https://sidneybissoli.com/en/blog/posts/sidra-via-mcp/). The sections below cover the local form, via `npx`.\n\n### Claude Desktop\n\nAdd to your Claude Desktop configuration file (`claude_desktop_config.json`):\n\n```json\n{\n  \"mcpServers\": {\n    \"ibge-br-mcp\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"ibge-br-mcp\"]\n    }\n  }\n}\n```\n\nOr if installed from source:\n\n```json\n{\n  \"mcpServers\": {\n    \"ibge-br-mcp\": {\n      \"command\": \"node\",\n      \"args\": [\"/path/to/ibge-br-mcp/dist/index.js\"]\n    }\n  }\n}\n```\n\n### Claude Code\n\n```json\n{\n  \"mcpServers\": {\n    \"ibge-br-mcp\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"ibge-br-mcp\"]\n    }\n  }\n}\n```\n\n### ChatGPT (Deep Research)\n\nChatGPT deep research (and company knowledge, and research workflows over the Responses API) only uses an MCP server that exposes exactly `search` and `fetch` — this server does, on top of the `ibge_*` tools. Point the connector at the hosted endpoint, no key required:\n\n```\nhttps://ibge.sidneybissoli.com/mcp\n```\n\n`search` ranks the query against SIDRA tables, municipalities and the known indicators and returns `{ id, title, url }`; `fetch` returns the document as readable Markdown with the canonical public URL (sidra.ibge.gov.br or cidades.ibge.gov.br), which is what ChatGPT cites. Both carry the same provenance block as every other tool. In ChatGPT's developer mode (Settings → Security and login → Developer mode) any tool is callable — the `ibge_*` tools remain the ones to use for data.\n\n## Tool Usage Examples\n\n### ibge_estados\n\nList all Brazilian states.\n\n```\n# List all states\nibge_estados\n\n# States in Northeast region\nibge_estados(regiao=\"NE\")\n\n# States sorted by abbreviation\nibge_estados(ordenar=\"sigla\")\n```\n\n### ibge_municipios\n\nList Brazilian municipalities.\n\n```\n# Municipalities of São Paulo state\nibge_municipios(uf=\"SP\")\n\n# Search municipalities by name\nibge_municipios(busca=\"Campinas\")\n\n# Municipalities in MG containing \"Belo\"\nibge_municipios(uf=\"MG\", busca=\"Belo\")\n```\n\n### ibge_cidades\n\nQuery municipal indicators (similar to Cidades@ portal).\n\n```\n# Panorama of São Paulo\nibge_cidades(tipo=\"panorama\", municipio=\"3550308\")\n\n# Population history\nibge_cidades(tipo=\"historico\", municipio=\"3550308\", indicador=\"populacao\")\n\n# List available research\nibge_cidades(tipo=\"pesquisas\")\n```\n\n**Available indicators:** populacao, area, densidade, pib_per_capita, idh, escolarizacao, mortalidade, salario_medio, receitas, despesas\n\n### ibge_paises\n\nQuery international country data.\n\n```\n# List all countries\nibge_paises(tipo=\"listar\")\n\n# Brazil details\nibge_paises(tipo=\"detalhes\", pais=\"BR\")\n\n# Search countries\nibge_paises(tipo=\"buscar\", busca=\"Argentina\")\n\n# Countries in Americas\nibge_paises(tipo=\"listar\", regiao=\"americas\")\n```\n\n**Regions:** americas, europa, africa, asia, oceania\n\n### ibge_sidra\n\nQuery SIDRA tables (IBGE's Automatic Recovery System).\n\n```\n# Brazil population in 2023\nibge_sidra(tabela=\"6579\", periodos=\"2023\")\n\n# Population by state\nibge_sidra(tabela=\"6579\", nivel_territorial=\"3\", periodos=\"2023\")\n\n# Census 2022 for São Paulo municipality\nibge_sidra(tabela=\"9514\", nivel_territorial=\"6\", localidades=\"3550308\")\n```\n\n**Common tables:**\n| Code | Description |\n|-----:|:------------|\n| 6579 | Population estimates (annual) |\n| 9514 | Census 2022 population |\n| 4714 | Unemployment rate (PNAD) |\n| 6706 | GDP at current prices |\n\n**Territorial levels:**\n| Code | Level |\n|-----:|:------|\n| 1 | Brazil |\n| 2 | Region (North, Northeast, etc.) |\n| 3 | State (UF) |\n| 6 | Municipality |\n| 7 | Metropolitan Region |\n| 106 | Health Region |\n| 127 | Legal Amazon |\n| 128 | Semi-arid |\n\n**Statistics mode** (also on `ibge_censo`, `ibge_indicadores`, `ibge_datasaude`):\nfor largest/smallest/mean/median/distribution/ranking questions, pass\n`estatisticas=true` — the server computes the full distribution (min/max/mean/\nmedian/std-dev/labeled percentiles) over **all** rows before pagination and\nreturns `top`/`bottom` rankings (`topN`, default 10). `agruparPor=\"<column\nlabel>\"` ranks groups by descending sum, each with its own mini-distribution.\n\n```\n# Which state has the largest estimated population?\nibge_sidra(tabela=\"6579\", nivel_territorial=\"3\", estatisticas=true)\n\n# Census 2022 population distribution grouped by state\nibge_censo(ano=\"2022\", tema=\"populacao\", nivel_territorial=\"3\", estatisticas=true, agruparPor=\"Unidade da Federação\")\n```\n\n### ibge_censo\n\nQuery Census data (1970-2022).\n\n```\n# Population Census 2022\nibge_censo(ano=\"2022\", tema=\"populacao\")\n\n# Historical population series\nibge_censo(ano=\"todos\", tema=\"populacao\")\n\n# Literacy by state in 2010\nibge_censo(ano=\"2010\", tema=\"alfabetizacao\", nivel_territorial=\"3\")\n```\n\n**Available themes:** populacao, alfabetizacao, domicilios, idade_sexo, religiao, cor_raca, rendimento, migracao, educacao, trabalho\n\n### ibge_indicadores\n\nQuery economic and social indicators.\n\n```\n# GDP\nibge_indicadores(indicador=\"pib\")\n\n# IPCA last 12 months\nibge_indicadores(indicador=\"ipca\", periodos=\"last 12\")\n\n# Unemployment by state\nibge_indicadores(indicador=\"desemprego\", nivel_territorial=\"3\")\n\n# List all indicators\nibge_indicadores(indicador=\"listar\")\n```\n\n**Available indicators:**\n| Category | Indicators |\n|:---------|:-----------|\n| Economic | pib, pib_variacao, pib_per_capita, industria, comercio, servicos |\n| Prices | ipca, ipca_acumulado, inpc |\n| Labor | desemprego, ocupacao, rendimento, informalidade |\n| Population | populacao, densidade |\n| Agriculture | agricultura, pecuaria |\n\n### ibge_nomes\n\nQuery name frequency and rankings.\n\n```\n# Frequency of \"Maria\"\nibge_nomes(tipo=\"frequencia\", nomes=\"Maria\")\n\n# Compare names\nibge_nomes(tipo=\"frequencia\", nomes=\"João,José,Pedro\")\n\n# Ranking of names in 2000s\nibge_nomes(tipo=\"ranking\", decada=2000)\n\n# Female names ranking\nibge_nomes(tipo=\"ranking\", sexo=\"F\")\n```\n\n### ibge_malhas\n\nGet geographic meshes (maps).\n\n```\n# Brazil with states\nibge_malhas(localidade=\"BR\", resolucao=\"2\")\n\n# São Paulo with municipalities\nibge_malhas(localidade=\"SP\", resolucao=\"5\")\n\n# Specific municipality\nibge_malhas(localidade=\"3550308\")\n\n# SVG format\nibge_malhas(localidade=\"BR\", formato=\"svg\")\n```\n\n**Resolution levels:**\n| Value | Internal Divisions |\n|:-----:|:-------------------|\n| 0 | No divisions (outline only) |\n| 2 | States |\n| 5 | Municipalities |\n\n### ibge_datasaude\n\nQuery Brazilian health indicators served through IBGE's SIDRA (some originally produced by DataSUS, e.g. mortality and births).\n\n```\n# Infant mortality in Brazil\nibge_datasaude(indicador=\"mortalidade_infantil\")\n\n# Life expectancy by state\nibge_datasaude(indicador=\"esperanca_vida\", nivel_territorial=\"3\")\n\n# List indicators\nibge_datasaude(indicador=\"listar\")\n```\n\n**Available indicators:** mortalidade_infantil, esperanca_vida, nascidos_vivos, obitos, fecundidade, saneamento_agua, saneamento_esgoto, plano_saude\n\n## APIs Used\n\n### IBGE APIs\n\n- **Localities**: `servicodados.ibge.gov.br/api/v1/localidades`\n- **Names**: `servicodados.ibge.gov.br/api/v2/censos/nomes`\n- **Aggregates/SIDRA**: `servicodados.ibge.gov.br/api/v3/agregados`\n- **SIDRA API**: `apisidra.ibge.gov.br/values`\n- **Meshes**: `servicodados.ibge.gov.br/api/v3/malhas`\n- **News**: `servicodados.ibge.gov.br/api/v3/noticias`\n- **Population**: `servicodados.ibge.gov.br/api/v1/projecoes/populacao`\n- **CNAE**: `servicodados.ibge.gov.br/api/v2/cnae`\n- **Calendar**: `servicodados.ibge.gov.br/api/v3/calendario`\n- **Countries**: `servicodados.ibge.gov.br/api/v1/paises`\n- **Research**: `servicodados.ibge.gov.br/api/v1/pesquisas`\n\n## Development\n\n```bash\n# Build\nnpm run build\n\n# Watch mode\nnpm run watch\n\n# Run tests\nnpm test\n\n# Run tests in watch mode\nnpm run test:watch\n\n# Lint\nnpm run lint\n\n# Format\nnpm run format\n\n# Test with MCP inspector\nnpm run inspector\n```\n\n## Project Structure\n\n```\nibge-br-mcp/\n├── src/\n│   ├── index.ts              # Main MCP server\n│   ├── types.ts              # TypeScript types\n│   ├── config.ts             # Configuration and constants\n│   ├── cache.ts              # Request caching system\n│   ├── retry.ts              # Retry with exponential backoff\n│   ├── errors.ts             # Standardized error handling\n│   ├── validation.ts         # Input validation helpers\n│   ├── metrics.ts            # Metrics and logging\n│   ├── utils/\n│   │   └── formatters.ts     # Formatting utilities\n│   └── tools/\n│       ├── index.ts          # Tool exports\n│       ├── estados.ts        # ibge_estados\n│       ├── municipios.ts     # ibge_municipios\n│       ├── localidade.ts     # ibge_localidade\n│       ├── geocodigo.ts      # ibge_geocodigo\n│       ├── censo.ts          # ibge_censo\n│       ├── sidra.ts          # ibge_sidra\n│       ├── sidra-tabelas.ts  # ibge_sidra_tabelas\n│       ├── sidra-metadados.ts# ibge_sidra_metadados\n│       ├── indicadores.ts    # ibge_indicadores\n│       ├── cnae.ts           # ibge_cnae\n│       ├── calendario.ts     # ibge_calendario\n│       ├── comparar.ts       # ibge_comparar\n│       ├── malhas.ts         # ibge_malhas\n│       ├── malhas-tema.ts    # ibge_malhas_tema\n│       ├── vizinhos.ts       # ibge_vizinhos\n│       ├── datasaude.ts      # ibge_datasaude\n│       ├── pesquisas.ts      # ibge_pesquisas\n│       ├── nomes.ts          # ibge_nomes\n│       ├── noticias.ts       # ibge_noticias\n│       ├── paises.ts         # ibge_paises\n│       └── cidades.ts        # ibge_cidades\n├── tests/                    # Test files\n├── dist/                     # Compiled files\n├── package.json\n├── tsconfig.json\n├── vitest.config.ts\n└── README.md\n```\n\n## Testing\n\nThe project includes a comprehensive test suite with 565 tests covering:\n\n- Validation functions\n- Retry mechanism\n- Formatting utilities\n- Error handling\n- Cache operations\n- Integration tests with mocks\n\n```bash\nnpm test\n```\n\n## Quality Assurance\n\nThis project maintains high code quality standards:\n\n- **565 automated tests** covering validation, caching, retry logic, formatting, and integrations\n- **88% overall test coverage** — cache and validation modules above 97%\n- **ESLint** for code linting with zero warnings\n- **Prettier** for consistent code formatting\n- **TypeScript strict mode** for type safety\n- **Automated CI/CD** via GitHub Actions\n\nRun tests locally:\n```bash\n# Run all tests\nnpm test\n\n# Run tests with coverage\nnpm run test:coverage\n\n# Run linter\nnpm run lint\n```\n\n## License\n\nMIT\n\n## Author\n\nSidney da Silva Pereira Bissoli\n\n## References\n\n- [IBGE - Data Service](https://servicodados.ibge.gov.br/api/docs/)\n- [SIDRA - IBGE Automatic Recovery System](https://sidra.ibge.gov.br/)\n- [Model Context Protocol](https://modelcontextprotocol.io/)\n- [MCP TypeScript SDK](https://github.com/modelcontextprotocol/typescript-sdk)\n",
  "bytes": 22166,
  "sha": "daa328645536804b1d69c743c7844b6b4e5e267e083972cd95ce9259bccd52c5",
  "repo_slug": "sidneybissoli/ibge-br-mcp",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_io_github_sidneybissoli_ibge_br_mcp_20bb1c5d/readme"
}