dutch-gov-mcp
# dutch-gov-mcp
Unofficial MCP server for Dutch government open data. Query thousands of public datasets, official statistics, and the business registry from **data.overheid.nl**, **CBS** (Statistics Netherlands), and **KVK** (Chamber of Commerce) directly through AI conversation.
Inspired by [France's official MCP server for data.gouv.fr](https://github.com/datagouv/datagouv-mcp) — the first government MCP server. This project brings the same playbook to the Netherlands.
No API key. No auth. 14 tools. Drop it into Claude Desktop and ask.
## What you can do
Ask an AI things like:
- *"What datasets are available about housing prices in the Netherlands?"*
- *"Show me CBS population statistics — what's the dataset identifier and what dimensions does it have?"*
- *"Which Dutch government organizations publish environmental data?"*
- *"Query CBS dataset 83765NED for the first 20 observations about Amsterdam neighborhoods."*
- *"Find unemployment data on both data.overheid.nl and CBS and compare what's available."*
The agent discovers datasets, inspects metadata, and queries rows — all through natural conversation.
## Data sources
### data.overheid.nl — National Open Data Portal (7 tools)
CKAN-based catalog of thousands of public datasets: tax, real estate, environment, transport, health. CC-0 licensed metadata.
| Tool | Purpose |
|------|---------|
| `search_datasets` | Full-text search with optional Solr filters |
| `get_dataset` | Full metadata for one dataset |
| `list_resources` | Files in a dataset |
| `get_resource` | Details for a specific file |
| `list_organizations` | Browse publishers |
| `get_organization` | Details for one publisher |
| `list_tags` | Browse available tags |
### CBS — Centraal Bureau voor de Statistiek (5 tools)
Official Dutch statistics via OData v4: population, economy, trade, housing, labor.
| Tool | Purpose |
|------|---------|
| `search_cbs_datasets` | Search the CBS catalog |
| `get_cbs_dataset` | Dataset metadata + dimension list |
| `get_cbs_dimensions` | Dimension definitions with sample values |
| `query_cbs_data` | Query observations with `$select`, `$filter`, pagination |
| `list_cbs_themes` | Browse statistical themes |
CBS datasets can contain millions of rows. `query_cbs_data` returns one page at a time with a `next_offset` hint — ask for more when you need it.
### KVK — Chamber of Commerce (2 tools)
Lookup basic company info and filed financial statements by KVK number. Uses KVK's free open-data endpoints.
| Tool | Purpose |
|------|---------|
| `lookup_company` | Basic company info by KVK number |
| `lookup_company_finances` | Filed financial statement metadata by KVK number |
**Limitations** (free dataset only):
- Lookup by 8-digit KVK number only — **no search by name, location, or SBI code** (that requires a paid KVK subscription)
- Only **BV** (private limited) and **NV** (public limited) companies included — no sole proprietorships, VOFs, etc.
- Postal codes truncated to the first 2 digits (privacy)
- Rate limit: 100 requests per 5 minutes
## Installation
### Claude Desktop (from PyPI — recommended)
Add to `~/Library/Application Support/Claude/claude_desktop_config.json`:
```json
{
"mcpServers": {
"dutch-gov-mcp": {
"command": "uvx",
"args": ["dutch-mcp-server"]
}
}
}
```
Restart Claude Desktop. The tools appear in the MCP picker.
### Claude Desktop (from source)
```json
{
"mcpServers": {
"dutch-gov-mcp": {
"command": "uv",
"args": ["--directory", "/absolute/path/to/dutch-gov-mcp", "run", "dutch-gov-mcp"]
}
}
}
```
### Local development
```bash
git clone https://github.com/<you>/dutch-gov-mcp
cd dutch-gov-mcp
uv sync
uv run dutch-gov-mcp # stdio server
uv run pytest -m 'not integration'
```
Python 3.11+ required.
### Install from PyPI
```bash
pip install dutch-mcp-server
```
## Examples
**Search data.overheid.nl:**
```
search_datasets(query="woningen", max_results=3)
→ {"count": 482, "results": [{"name": "...", "title": "Verkoop woningen", "organization": "...", "tags": [...]}]}
```
**CBS — find, inspect, query:**
```
search_cbs_datasets(query="bevolking")
→ [{"Identifier": "83765NED", "Title": "Kerncijfers wijken en buurten 2017", ...}]
get_cbs_dimensions(dataset_id="83765NED")
→ [{"Identifier": "WijkenEnBuurten", "Title": "Wijken en buurten", "sample_values": [...]}]
query_cbs_data(dataset_id="83765NED", max_results=5)
→ {"rows": [...], "returned": 5, "total": 1617279, "more_available": true, "next_offset": 5}
```
## Future data sources
Planned for future sprints:
- **RDW** — Vehicle registration
- **Kadaster BAG** — Addresses and buildings
- **PDOK** — Geospatial / GIS
## Why this exists
France defined what "government AI readiness" looks like. Every government sits on massive public data behind unusable APIs. MCP makes that data accessible to agents. Unofficial, open-source, MIT-licensed.
## License
MIT
TDQS
Scored across 14 tools
Most tools have distinct purposes, such as get_cbs_dataset vs. get_dataset for CBS-specific vs. general metadata, and lookup_company vs. lookup_company_finances for different company data types. However, some overlap exists between search_cbs_datasets and search_datasets, which could cause confusion despite their CBS vs. general focus.
All tool names follow a consistent verb_noun pattern using snake_case, with clear prefixes like 'get_', 'list_', 'lookup_', 'query_', and 'search_' that align with their actions. This uniformity makes the tool set predictable and easy to navigate.
With 14 tools, the server is well-scoped for its domain of Dutch government data access, covering CBS statistics, company lookups, and general dataset searches. Each tool serves a specific function without redundancy, making the count appropriate for the server's purpose.
The tool set provides comprehensive coverage for querying and retrieving Dutch government data, including metadata, dimensions, resources, and statistical queries. A minor gap is the lack of update or delete operations, but this is reasonable for a read-only data access server, and agents can work around this limitation.