zurich-opendata-mcp — MCP server for Zurich open data
Wires Zurich's open data into an AI assistant: weather, air quality, parking, geodata, parliament and tourism. Useful when you want live city data inside the chat.
claude mcp add zurich-opendata-mcp -- uvx zurich-opendata-mcpWhat zurich-opendata-mcp does
The server reaches 900+ datasets on data.stadt-zuerich.ch through CKAN — full-text search, metadata, tabular queries and SQL. Live feeds sit alongside: weather from 4 UGZ stations, air quality with WHO thresholds, Lake Zurich readings every 10 minutes, pedestrian counts on Bahnhofstrasse, and occupancy for 36 parking garages. Geodata comes back as GeoJSON across 14 layers, parliamentary material is searched via the Paris API, and tourism entries follow Schema.org in 4 languages.
There are 23 tools, 5 resources and 6 APIs in total. The zurich_sparql tool stays unregistered by default because the endpoint is not productive yet; turn it on with the environment variable ZURICH_OPENDATA_ENABLE_SPARQL=1. Three older tool names survive as deprecated aliases until the next major release.
Python 3.11+ and mcp[cli] 2.x are required — the server runs on the 2.x API and will not start on mcp 1.x. Take 0.6.0 or newer: 0.5.1 had no upper bound on the dependency, so once mcp 2.0.0 shipped, installs broke with ModuleNotFoundError. No working setup of 0.5.1 is left.
What it helps with
- check the current temperature and humidity in Zurich
- read air quality against WHO thresholds
- find free spaces in city parking garages
- pull schools or playgrounds as GeoJSON
- search council resolutions by department
Example prompts for the agent
- What's the current temperature in Zurich?
- Find council resolutions about Volksschule from 2025
How to install zurich-opendata-mcp
Platform CLI
claude mcp add zurich-opendata-mcp -- uvx zurich-opendata-mcpuvx runs the command named after the package; if the README names another one, use uvx --from zurich-opendata-mcp <command>
Platform CLI
codex mcp add zurich-opendata-mcp -- uvx zurich-opendata-mcpuvx runs the command named after the package; if the README names another one, use uvx --from zurich-opendata-mcp <command>
Config file
{
"mcpServers": {
"zurich-opendata-mcp": {
"command": "uvx",
"args": [
"zurich-opendata-mcp"
]
}
}
}uvx runs the command named after the package; if the README names another one, use uvx --from zurich-opendata-mcp <command>
Config file
{
"servers": {
"zurich-opendata-mcp": {
"type": "stdio",
"command": "uvx",
"args": [
"zurich-opendata-mcp"
]
}
}
}uvx runs the command named after the package; if the README names another one, use uvx --from zurich-opendata-mcp <command>
Platform CLI
gemini mcp add zurich-opendata-mcp uvx zurich-opendata-mcpuvx runs the command named after the package; if the README names another one, use uvx --from zurich-opendata-mcp <command>
Step by step, with commands for each platform: How to add an MCP server to Claude Code, Codex, Cursor, VS Code, Gemini CLI and more
Questions about zurich-opendata-mcp
How do I install zurich-opendata-mcp in Claude Code?
Run claude mcp add zurich-opendata-mcp -- uvx zurich-opendata-mcp.
What does zurich-opendata-mcp do?
It gives an AI assistant access to Zurich open data: weather, air quality, parking, geodata, parliamentary material and tourism.
Why does the server fail on mcp 1.x?
It uses the 2.x API. Version 0.6.0 and newer pins mcp[cli] to >=2.0.0,<3.