The catalogue tools chain into the data tools: a search returns resource IDs and the SQL tool runs a SELECT straight against them, so nothing has to land on disk first. Live feeds sit beside the archive, each on its own cadence — ten-minute lake readings, hourly air quality, yearly VBZ passenger counts — and the tool descriptions are written in German while the interface works in either language. Three tool names are deprecated aliases of the council-resolution tools and go away at the next major release; use the zurich_strb_ names.
A client for the City of Zurich's public data across six APIs: the CKAN catalogue and DataStore, the WFS geoportal, city council and parliament records, the tourism API, and several live measurement feeds. 23 tools plus three deprecated aliases, and five URI-templated resources.
- Full-text search with Solr syntax across the catalogue's 900+ datasets, and a dataset's full metadata, licence, update interval, formats and download URLs one call further on (zurich_search_datasets, zurich_get_dataset).
- Two ways into the tabular data itself: filtered queries returning a table with its field information, and SQL with joins and aggregation — SELECT only (zurich_datastore_query, zurich_datastore_sql).
- Ways to browse rather than search: 19 thematic categories with dataset counts, tag lookup, catalogue statistics by category, format and tag, and a curated search across education-related data (zurich_list_categories, zurich_list_tags, zurich_catalog_stats, zurich_find_school_data).
- An analysis pass that combines a search with the update frequency and field schema of what it found, so you can tell how current and how complete a dataset really is (zurich_analyze_datasets).
- Geoportal layers listed with their IDs and WFS typenames, and their features returned as GeoJSON with properties such as name, address and category (zurich_geo_layers, zurich_geo_features).
- Live environmental readings: temperature, humidity, pressure and rain from four UGZ stations, air quality as NO, NO2, NOx, O3, PM10 and PM2.5 with WHO thresholds, and lake data from Tiefenbrunnen and Mythenquai at ten-minute intervals (zurich_weather_live, zurich_air_quality, zurich_water_weather).
- Live and historic mobility: free spaces and capacity across 36 parking garages, hourly pedestrian counts at three points on the Bahnhofstrasse, and VBZ boarding and alighting figures per line and stop (zurich_parking_live, zurich_pedestrian_traffic, zurich_vbz_passengers).
- The political record: public council resolutions searched by title with department and date filters, listed by department, or fetched by their NNNN/YYYY number, plus parliamentary business and council members by party and commission (zurich_strb_search, zurich_strb_by_department, zurich_strb_detail, zurich_parliament_search, zurich_parliament_members).
- Attractions, restaurants, hotels, activities and events from Zurich Tourism, in Schema.org shapes (zurich_tourism).
No account and no key — all six APIs are public. Python 3.11 or newer, and mcp[cli] 2.x specifically: the server uses the 2.x API and cannot run on 1.x. Install from the repository with pip or uv and launch it as `python -m zurich_opendata_mcp.server` or through the installed `zurich-opendata-mcp` command. Use 0.6.0 or newer; 0.5.1 has no working dependency resolution left. The SPARQL tool is not registered unless you set ZURICH_OPENDATA_ENABLE_SPARQL=1, because its endpoint is not in production yet.
One command — uvx zurich-opendata-mcp
