Zurich Open Data MCP Server
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Zurich Open Data MCP ServerWhat's the current air quality in Zurich?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
π¨π Part of the Swiss Public Data MCP Portfolio
ποΈ Zurich Open Data MCP Server
π English | Deutsch
An MCP (Model Context Protocol) server providing AI-powered access to Open Data from the City of Zurich, Switzerland.
Enables Claude, ChatGPT, and other MCP-compatible AI assistants to directly query 900+ datasets, geodata, parliamentary proceedings, council resolutions, tourism data, linked data, and real-time environmental and mobility information from the City of Zurich. 24 Tools, 5 Resources, 6 APIs.
Demo
β¨ Features
CKAN Open Data (data.stadt-zuerich.ch)
zurich_search_datasetsβ Full-text search with Solr syntax across 900+ datasetszurich_get_datasetβ Complete metadata and download URLs for a datasetzurich_datastore_queryβ Query tabular data directly (filters, sorting)zurich_datastore_sqlβ SQL queries on the DataStorezurich_list_categoriesβ Browse 19 thematic categorieszurich_list_tagsβ Tag-based thematic search
Real-Time Environmental Data
zurich_weather_liveβ π€οΈ Current weather (temperature, humidity, pressure, rain) from 5 UGZ stationszurich_air_qualityβ π¬οΈ Live air quality (NOβ, Oβ, PM10, PM2.5) with WHO thresholdszurich_water_weatherβ π Lake Zurich data (water temperature, level, wind) every 10 min
Real-Time Mobility Data
zurich_pedestrian_trafficβ πΆ Pedestrian counts on Bahnhofstrasse (3 locations, hourly)zurich_vbz_passengersβ π VBZ public transit ridership (800,000+ records, all lines/stops)zurich_parking_liveβ π ΏοΈ Real-time occupancy of 36 parking garages (ParkenDD)
Geoportal (WFS Geodata)
zurich_geo_layersβ π List 14 available geodata layerszurich_geo_featuresβ π Fetch GeoJSON features (schools, districts, playgrounds, climate data, etc.)
City Parliament (Paris API)
zurich_parliament_searchβ ποΈ Search parliamentary proceedings (interpellations, motions, postulates)zurich_parliament_membersβ ποΈ Search council members (party, commissions, mandates)
Zurich Tourism
zurich_tourismβ π¨ Attractions, restaurants, hotels, events (Schema.org data, 4 languages)
Linked Data (SPARQL)
zurich_sparqlβ π SPARQL queries on the statistical linked data endpoint (currently disabled β endpoint not productive yet)
StadtratsbeschlΓΌsse (Council Resolutions)
search_stadtratsbeschluesseβ π Full-text search of public council resolutions (title, department, date range)get_beschluesse_by_departementβ π List all resolutions of a department (e.g.SSD,FD,PRD)get_stadtratsbeschluss_detailβ π Single resolution byNNNN/YYYYnumber
Analysis Tools
zurich_analyze_datasetsβ Comprehensive analysis: relevance, recency, data structurezurich_catalog_statsβ Catalog overview with statisticszurich_find_school_dataβ Curated search for education-related datasets
MCP Resources
zurich://dataset/{name}β Dataset metadatazurich://category/{group_id}β Category detailszurich://parkingβ Current parking datazurich://geo/{layer_id}β GeoJSON geodata (14 layers)zurich://tourism/categoriesβ Tourism categories
Related MCP server: mcp-swiss
π Installation
Prerequisites
Python 3.11+
pip or uv
Install
# Clone
git clone https://github.com/malkreide/zurich-opendata-mcp.git
cd zurich-opendata-mcp
# Install
pip install -e .
# Or with uv
uv pip install -e .βοΈ Configuration
Claude Desktop
Edit ~/Library/Application Support/Claude/claude_desktop_config.json (macOS):
{
"mcpServers": {
"zurich-opendata": {
"command": "python",
"args": ["-m", "zurich_opendata_mcp.server"],
"env": {}
}
}
}Alternatively, using the installed command:
{
"mcpServers": {
"zurich-opendata": {
"command": "zurich-opendata-mcp"
}
}
}Claude Code (CLI)
claude mcp add zurich-opendata -- python -m zurich_opendata_mcp.serverCursor / VS Code
Add to .vscode/settings.json:
{
"mcpServers": {
"zurich-opendata": {
"command": "python",
"args": ["-m", "zurich_opendata_mcp.server"]
}
}
}π¬ Example Queries
Once configured, you can ask Claude:
Open Data
"What datasets are available about schools in Zurich?"
"Show me school holidays for public schools"
"Analyze the available geodata"
Real-Time Data
"What's the current temperature in Zurich?" β
zurich_weather_live"How is the air quality today?" β
zurich_air_quality"What's the water temperature in Lake Zurich?" β
zurich_water_weather"How many parking spaces are free right now?" β
zurich_parking_live"How many people are on Bahnhofstrasse right now?" β
zurich_pedestrian_traffic
Geodata
"Show me all school facilities in Zurich as GeoJSON" β
zurich_geo_features"What geodata layers are available?" β
zurich_geo_layers"Where are the playgrounds in Zurich?"
City Parliament
"What parliamentary motions about schools were filed?" β
zurich_parliament_search"Which council members belong to the SP party?" β
zurich_parliament_members
Council Resolutions (StadtratsbeschlΓΌsse)
"Find council resolutions about Volksschule from 2025" β
search_stadtratsbeschluesse"List all SSD resolutions in 2025" β
get_beschluesse_by_departement"Show council resolution 1203/2025" β
get_stadtratsbeschluss_detail
Tourism & Statistics
"What restaurants does Zurich Tourism recommend?" β
zurich_tourism"How has Zurich's population evolved?" β
zurich_sparql
π Data Sources
API | Endpoint | Data |
CKAN | data.stadt-zuerich.ch/api/3/ | 900+ open datasets |
Geoportal WFS | ogd.stadt-zuerich.ch/wfs/geoportal | 14 geodata layers (GeoJSON) |
Paris API | gemeinderat-zuerich.ch/api | Parliamentary proceedings & members |
Zurich Tourism | zuerich.com/en/api/v2/data | Attractions, restaurants, hotels |
SPARQL | ld.stadt-zuerich.ch/query | Linked Open Data / statistics |
ParkenDD | api.parkendd.de/Zuerich | Real-time parking occupancy |
π Available Data Categories
Category | ID |
Employment |
|
Base Maps |
|
Construction & Housing |
|
Population |
|
Education |
|
Energy |
|
Finance |
|
Leisure |
|
Health |
|
Crime |
|
Culture |
|
Mobility |
|
Politics |
|
Prices |
|
Social Affairs |
|
Tourism |
|
Environment |
|
Administration |
|
Economy |
|
π Available Geo Layers
Source of truth: GEOPORTAL_LAYERS in src/zurich_opendata_mcp/config.py.
Layer ID | Description |
| School facilities (kindergartens, schools, after-school care) |
| School district boundaries (polygons) |
| School-route crossings and hazard points |
| City district boundaries (polygons) |
| Public playgrounds |
| City district offices |
| Waste collection points |
| Sports facilities |
| Climate data (raster, temperatures, heat islands) |
| Educational trails |
| Polling stations |
| Social centres |
| Bicycle exam routes for schools |
| Family-counselling meeting points |
ποΈ Project Structure
zurich-opendata-mcp/
βββ src/zurich_opendata_mcp/
β βββ __init__.py
β βββ app.py # Shared FastMCP instance
β βββ server.py # Console entry + back-compat re-exports
β βββ config.py # Endpoints, layer maps, resource IDs
β βββ http_client.py # Shared httpx client + CKAN wrapper
β βββ formatters.py # CKANβmodel mapping + Markdown rendering
β βββ models.py # Pydantic structured-output models
β βββ clients/ # API clients: paris, sparql, tourism, wfs
β βββ tools/ # @mcp.tool implementations:
β # catalog, datastore, geo, parliament,
β # realtime, sparql, strb, tourism,
β # resources (zurich:// URIs)
βββ tests/
β βββ test_server.py # Pydantic + integration tests (live-marked)
βββ audits/ # Code-audit reports
βββ .github/workflows/ # ci.yml + publish.yml (Trusted Publisher)
βββ pyproject.toml
βββ README.md / README.de.md
βββ CONTRIBUTING.md / .de.md
βββ SECURITY.md / .de.md
βββ CHANGELOG.md
βββ CLAUDE.md # Project conventions for Claude
βββ LICENSE
βββ claude_desktop_config.jsonπ§ͺ Development
# Install dev dependencies
pip install -e ".[dev]"
# Unit + validation tests (no network)
pytest tests/ -m "not live"
# Live integration tests (against live APIs β opt-in)
pytest tests/ -m live
# Linting
ruff check src/ tests/Safety & Limits
Read-only: All tools perform HTTP GET requests only β no data is written, modified, or deleted.
No personal data: The APIs return open civic datasets (parking occupancy, weather readings, parliamentary proceedings). No personally identifiable information (PII) is processed or stored by this server.
Rate limits: CKAN Solr search and ParkenDD are public APIs without documented rate limits; use
rowsandlimitparameters conservatively. The server enforces a 30s timeout per request.Data freshness: Real-time tools (parking, weather, air quality) reflect the upstream source at query time. No caching is performed by this server.
Terms of service: Data is subject to the ToS of each source β data.stadt-zuerich.ch, ParkenDD, gemeinderat-zuerich.ch. All City of Zurich data is published under CC0 (Open by Default since 2021).
No guarantees: This server is a community project, not affiliated with the City of Zurich or any of the API providers. Availability depends on upstream APIs.
π€ Contributing
Contributions are welcome β see CONTRIBUTING.md (Deutsch).
π Security
Read-only, no PII, no authentication, a fixed set of public-data endpoints. See SECURITY.md (Deutsch) for the full security posture and accepted-risk decisions.
π License
MIT License β see LICENSE. All data used is published under open licenses (CC0 / Open by Default since 2021).
π€ Author
Hayal Oezkan Β· malkreide
Powered by Model Context Protocol β’ 6 APIs β’ 24 Tools β’ 5 Resources
Installation
Run via uv's uvx β no clone or manual install needed. Add to your MCP client config (mcpServers for Claude Desktop, Cursor and Windsurf; use a top-level servers key for VS Code in .vscode/mcp.json):
{
"mcpServers": {
"zurich-opendata-mcp": {
"command": "uvx",
"args": [
"zurich-opendata-mcp"
]
}
}
}Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/malkreide/zurich-opendata-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server