{
  "markdown": "# mcp-belgium\n\n[![npm version](https://img.shields.io/npm/v/mcp-belgium?style=flat&logo=npm)](https://www.npmjs.com/package/mcp-belgium)\n[![npm downloads](https://img.shields.io/npm/dt/mcp-belgium?style=flat&logo=npm)](https://www.npmjs.com/package/mcp-belgium)\n[![CI](https://img.shields.io/github/actions/workflow/status/lacausecrypto/mcp-belgium/ci.yml?branch=main&style=flat&label=ci)](https://github.com/lacausecrypto/mcp-belgium/actions/workflows/ci.yml)\n[![license](https://img.shields.io/github/license/lacausecrypto/mcp-belgium?style=flat)](./LICENSE)\n[![node](https://img.shields.io/badge/node-%3E%3D22-43853d?style=flat&logo=node.js&logoColor=white)](https://nodejs.org/)\n[![pnpm](https://img.shields.io/badge/pnpm-9.15.4-F69220?style=flat&logo=pnpm&logoColor=white)](https://pnpm.io/)\n[![typescript](https://img.shields.io/badge/TypeScript-5.7.x-3178C6?style=flat&logo=typescript&logoColor=white)](https://www.typescriptlang.org/)\n[![mcp](https://img.shields.io/badge/MCP-stdio%20%2B%20Streamable%20HTTP-111827?style=flat)](https://modelcontextprotocol.io/)\n\nOne MCP server for Belgian public APIs.\n\n`mcp-belgium` is the public entry point. It exposes a single aggregated MCP server that bundles Belgian transport, official statistics, open data, addresses, weather, air quality, and geospatial services behind one install and one client config entry.\n\nThe package is also prepared for publication to the official MCP Registry under `io.github.lacausecrypto/mcp-belgium`.\n\n## Why use it\n\n- one npm package\n- one MCP server entry in your client config\n- namespaced tools like `irail_*`, `statbel_*`, `best_*`, `kmi_*`, `urban_*`, and `urbis_*`\n- built-in catalog tools, resources, and a prompt so the LLM can discover the right Belgian domain before calling tools\n- explicit limitation surfaces when an upstream requires a key or has changed contract\n\n## Install\n\nRun directly:\n\n```bash\nnpx -y mcp-belgium\n```\n\nWith pnpm:\n\n```bash\npnpm dlx mcp-belgium\n```\n\nGlobal install:\n\n```bash\npnpm add -g mcp-belgium\nmcp-belgium\n```\n\nDefault transport is `stdio`, which is what desktop MCP clients expect.\n\n## Claude Desktop\n\n```json\n{\n  \"mcpServers\": {\n    \"belgium\": {\n      \"command\": \"npx\",\n      \"args\": [\n        \"-y\",\n        \"mcp-belgium\"\n      ],\n      \"env\": {\n        \"LOG_LEVEL\": \"silent\"\n      }\n    }\n  }\n}\n```\n\nOptional env vars:\n\n- `STIB_API_KEY`: enables live STIB/MIVB tools\n- `CBEAPI_KEY`: enables live KBO/BCE company registry tools\n- `MCP_TRANSPORT=http`: runs the server over Streamable HTTP\n- `PORT_BELGIUM=3017`: sets the HTTP port for the aggregated server\n\n## What the LLM gets\n\nAlongside the domain tools, `mcp-belgium` exposes a discovery layer:\n\n- `belgium_catalog_overview`\n- `belgium_list_domains`\n- `belgium_describe_domain`\n- `belgium://catalog`\n- `belgium://catalog.json`\n- `belgium://domain/{domain}`\n- `belgium_capability_guide`\n\nThat means the LLM can:\n\n- inspect the Belgian domains available from this single MCP\n- see which domains are live, limited, or key-gated\n- understand what kind of data each domain provides\n- pick the right namespaced tool without guessing\n\n## Main domains\n\n| Prefix | Domain | Status | Auth | Main data |\n| --- | --- | --- | --- | --- |\n| `irail_*` | Belgian rail / iRail | Live | None | stations, connections, liveboards, vehicles, disruptions |\n| `mobility_*` | Belgian mobility / SMOP | Live | None | intermodal trip planning, operators, GTFS references |\n| `stib_*` | STIB/MIVB Brussels transit | Live | API key | waiting times, stops, routes, service messages |\n| `infrabel_*` | Infrabel Open Data | Live | None | rail infrastructure datasets and records |\n| `kbo_*` | Belgian company registry | Live | API key | enterprise search and company details |\n| `best_*` | BeST Belgian addresses | Live | None | addresses, municipalities, streets, postal infos |\n| `statbel_*` | Statbel | Live | None | population, CPI, employment, dataset search |\n| `airquality_*` | IRCELINE air quality | Live | None | stations, live measurements, BelAQI, timeseries |\n| `brussels_*` | Brussels Region open data | Live | None | datasets and records |\n| `wallonia_*` | Wallonia open data | Live | None | datasets and records |\n| `kmi_*` | KMI / IRM GeoServer | Live | None | stations, hourly observations, WFS discovery |\n| `wallonia_geo_*` | Wallonia GeoServices | Live | None | ArcGIS folders, services, layer queries |\n| `urban_*` | urban.brussels WFS | Live | None | feature types, schemas, GeoJSON features |\n| `urbis_*` | URBIS public WMS | Live | None | WMS layer discovery and map URL generation |\n| `datagov_*` | data.gov.be compatibility layer | Limited | None | explicit upstream-changed error surface |\n| `flanders_*` | Datavindplaats compatibility layer | Limited | API key | explicit upstream limitation surface |\n\n## Docs / Wiki\n\nThe repo now includes a `docs/` tree that works as a lightweight public wiki:\n\n- [Docs home](./docs/Home.md)\n- [Installation](./docs/installation.md)\n- [Client configuration](./docs/client-config.md)\n- [Domain catalog](./docs/domains.md)\n- [Development](./docs/development.md)\n- [Release and npm publishing](./docs/release.md)\n\n## Local development\n\nRequirements:\n\n- Node.js >= 22\n- pnpm >= 9\n\nSetup:\n\n```bash\npnpm install\npnpm run build\npnpm run test\npnpm run typecheck\n```\n\nRun the aggregated server over stdio:\n\n```bash\npnpm --filter mcp-belgium start:stdio\n```\n\nRun it over Streamable HTTP:\n\n```bash\nMCP_TRANSPORT=http PORT_BELGIUM=3017 pnpm --filter mcp-belgium start\n```\n\nRun the whole workspace:\n\n```bash\ndocker compose up --build\n```\n\n## Monorepo shape\n\n- `packages/core`: shared HTTP, retry, cache, rate limiting, XML helpers, and MCP response helpers\n- `packages/mcp-belgium`: public aggregated entry point\n- `packages/mcp-*`: domain-specific packages kept modular for maintenance, testing, and isolated validation\n\nThe public consumer path is `mcp-belgium`. Internal workspace packages stay modular for development, but the published `mcp-belgium` package bundles them so end users install only one npm package.\n\n## Upstream caveats\n\nThis project wraps public upstream APIs. Some Belgian portals change authentication or endpoint contracts over time. When an upstream is no longer publicly compatible, this project prefers explicit, machine-readable limitation errors over silent failure.\n\nCurrent examples:\n\n- `mcp-stib` requires `STIB_API_KEY`\n- `mcp-kbo` requires `CBEAPI_KEY`\n- `mcp-data-gov-be` preserves the old tool contract but returns an explicit upstream-changed error\n- `mcp-opendata-flanders` preserves the old tool contract but returns an explicit API-key limitation\n\n## Validation\n\nCurrent workspace checks:\n\n- `pnpm run build`\n- `pnpm run test`\n- `pnpm run typecheck`\n- `pnpm audit --prod`\n\n## License\n\nMIT. See [LICENSE](./LICENSE).\n",
  "bytes": 6755,
  "sha": "74c44d8b8084afddc6f9e158de3f0326cfc54aa01f3c74d5a8039477944e823c",
  "repo_slug": "lacausecrypto/mcp-belgium",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_io_github_lacausecrypto_mcp_belgium_08ed4a9a/readme"
}