MCP Server for City of Zurich Open Data – 20 tools for CKAN, geodata, parliament, tourism, SPARQL, and real-time data across 6 APIs
Project description
🏙️ Zurich Open Data MCP Server
🌐 English | Deutsch
MCP (Model Context Protocol) Server für den KI-gestützten Zugriff auf Open Data der Stadt Zürich.
Ermöglicht Claude, ChatGPT und anderen MCP-kompatiblen KI-Assistenten den direkten Zugriff auf 900+ Datensätze, Geodaten, Parlamentsgeschäfte, Tourismusdaten, Linked Data und Echtzeit-Umwelt-/Mobilitätsinformationen der Stadt Zürich. 20 Tools, 6 Resources, 6 APIs.
✨ Features
CKAN Open Data (data.stadt-zuerich.ch)
zurich_search_datasets– Volltextsuche mit Solr-Syntax über 900+ Datensätzezurich_get_dataset– Vollständige Metadaten und Download-URLs eines Datensatzeszurich_datastore_query– Tabellarische Daten direkt abfragen (Filter, Sortierung)zurich_datastore_sql– SQL-Abfragen auf dem DataStorezurich_list_categories– 19 thematische Kategorien durchsuchenzurich_list_tags– Tags für thematische Suche
Echtzeit-Umweltdaten
zurich_weather_live– 🌤️ Aktuelle Wetterdaten (Temperatur, Feuchte, Druck, Regen) von 5 UGZ-Stationenzurich_air_quality– 🌬️ Live-Luftqualität (NO₂, O₃, PM10, PM2.5) mit WHO-Grenzwertenzurich_water_weather– 🌊 Zürichsee-Daten (Wassertemperatur, Pegel, Wind) alle 10 Min.
Echtzeit-Mobilitätsdaten
zurich_pedestrian_traffic– 🚶 Passantenfrequenzen Bahnhofstrasse (3 Standorte, stündlich)zurich_vbz_passengers– 🚊 VBZ-Fahrgastzahlen (800'000+ Datensätze, alle Linien/Haltestellen)zurich_parking_live– 🅿️ Echtzeit-Belegung von 36 Parkhäusern (ParkenDD)
Geoportal (WFS Geodaten)
zurich_geo_layers– 📍 14 verfügbare Geodaten-Layer auflistenzurich_geo_features– 📍 GeoJSON-Features abrufen (Schulanlagen, Quartiere, Spielplätze, Klimadaten u.v.m.)
Gemeinderat (Paris API)
zurich_parliament_search– 🏛️ Gemeinderatsgeschäfte durchsuchen (Interpellationen, Motionen, Postulate)zurich_parliament_members– 🏛️ Ratsmitglieder suchen (Partei, Kommissionen, Mandate)
Zürich Tourismus
zurich_tourism– 🏨 Attraktionen, Restaurants, Hotels, Events (Schema.org-Daten, 4 Sprachen)
Linked Data (SPARQL)
zurich_sparql– 📊 SPARQL-Abfragen auf dem statistischen Linked Data Endpoint
Analyse-Tools
zurich_analyze_datasets– Umfassende Analyse: Relevanz, Aktualität, Datenstrukturzurich_catalog_stats– Katalog-Übersicht mit Statistikenzurich_find_school_data– Kuratierte Suche nach schulrelevanten Datensätzen
MCP Resources
zurich://dataset/{name}– Datensatz-Metadatenzurich://category/{group_id}– Kategorie-Detailszurich://parking– Aktuelle Parkplatzdatenzurich://geo/{layer_id}– GeoJSON-Geodaten (14 Layer)zurich://tourism/categories– Tourismus-Kategorien
🚀 Installation
Voraussetzungen
- Python 3.11+
- pip oder uv
Installation
# Klonen
git clone https://github.com/schulamt-zuerich/zurich-opendata-mcp.git
cd zurich-opendata-mcp
# Installieren
pip install -e .
# Oder mit uv
uv pip install -e .
⚙️ Konfiguration
Claude Desktop
Editiere ~/Library/Application Support/Claude/claude_desktop_config.json (macOS):
{
"mcpServers": {
"zurich-opendata": {
"command": "python",
"args": ["-m", "zurich_opendata_mcp.server"],
"env": {}
}
}
}
Alternativ mit dem installierten Kommando:
{
"mcpServers": {
"zurich-opendata": {
"command": "zurich-opendata-mcp"
}
}
}
Claude Code (CLI)
claude mcp add zurich-opendata -- python -m zurich_opendata_mcp.server
Cursor / VS Code
Füge zu .vscode/settings.json hinzu:
{
"mcpServers": {
"zurich-opendata": {
"command": "python",
"args": ["-m", "zurich_opendata_mcp.server"]
}
}
}
💬 Beispiel-Abfragen
Nach der Konfiguration kannst du in Claude fragen:
Open Data
- «Welche Datensätze gibt es zu Schulen in Zürich?»
- «Zeig mir die Schulferien der Volksschule»
- «Analysiere die verfügbaren Geodaten»
Echtzeit-Daten
- «Wie warm ist es gerade in Zürich?» →
zurich_weather_live - «Wie ist die Luftqualität heute?» →
zurich_air_quality - «Was ist die aktuelle Wassertemperatur im Zürichsee?» →
zurich_water_weather - «Wie viele freie Parkplätze gibt es gerade?» →
zurich_parking_live - «Wie viele Leute sind gerade auf der Bahnhofstrasse?» →
zurich_pedestrian_traffic
Geodaten
- «Zeig mir alle Schulanlagen in Zürich als GeoJSON» →
zurich_geo_features - «Welche Geodaten-Layer gibt es?» →
zurich_geo_layers - «Wo sind die Spielplätze in Zürich?»
Gemeinderat
- «Welche Vorstösse zum Thema Schule gab es im Gemeinderat?» →
zurich_parliament_search - «Welche Ratsmitglieder gehören der SP an?» →
zurich_parliament_members
Tourismus & Statistik
- «Welche Restaurants empfiehlt Zürich Tourismus?» →
zurich_tourism - «Wie hat sich die Bevölkerung Zürichs entwickelt?» →
zurich_sparql
🔗 Datenquellen
| API | Endpoint | Daten |
|---|---|---|
| CKAN | data.stadt-zuerich.ch/api/3/ | 900+ Open Data Datensätze |
| Geoportal WFS | ogd.stadt-zuerich.ch/wfs/geoportal | 14 Geodaten-Layer (GeoJSON) |
| Paris API | gemeinderat-zuerich.ch/api | Parlamentsgeschäfte & Mitglieder |
| Zürich Tourismus | zuerich.com/en/api/v2/data | Attraktionen, Restaurants, Hotels |
| SPARQL | ld.stadt-zuerich.ch/query | Linked Open Data / Statistiken |
| ParkenDD | api.parkendd.de/Zuerich | Echtzeit-Parkplatzbelegung |
📊 Verfügbare Datenkategorien
| Kategorie | ID |
|---|---|
| Arbeit und Erwerb | arbeit-und-erwerb |
| Basiskarten | basiskarten |
| Bauen und Wohnen | bauen-und-wohnen |
| Bevölkerung | bevolkerung |
| Bildung | bildung |
| Energie | energie |
| Finanzen | finanzen |
| Freizeit | freizeit |
| Gesundheit | gesundheit |
| Kriminalität | kriminalitat |
| Kultur | kultur |
| Mobilität | mobilitat |
| Politik | politik |
| Preise | preise |
| Soziales | soziales |
| Tourismus | tourismus |
| Umwelt | umwelt |
| Verwaltung | verwaltung |
| Volkswirtschaft | volkswirtschaft |
📍 Verfügbare Geo-Layer
| Layer-ID | Beschreibung |
|---|---|
schulanlagen |
Schulstandorte (Kindergärten, Schulhäuser, Horte) |
schulkreise |
Schulkreis-Grenzen |
schulwege |
Schulwege und sichere Routen |
stadtkreise |
Stadtkreis-Grenzen |
quartiere |
Statistische Quartiere |
spielplaetze |
Spielplätze und Spielanlagen |
sportanlagen |
Sportanlagen und Schwimmbäder |
klimadaten |
Klimadaten (Temperaturen, Hitzeinseln) |
veloparkierung |
Veloparkierungs-Anlagen |
lehrpfade |
Lehrpfade und Bildungswege |
familienberatung |
Familienberatungs-Treffpunkte |
kreisbuero |
Kreisbüros der Stadt Zürich |
sammelstelle |
Abfall-Sammelstellen |
zweiradparkierung |
Zweiradparkierung |
🏗️ Projektstruktur
zurich-opendata-mcp/
├── src/zurich_opendata_mcp/
│ ├── __init__.py # Package
│ ├── server.py # MCP Server mit 20 Tools & 6 Resources
│ └── api_client.py # HTTP-Client für 6 APIs
├── tests/
│ └── test_integration.py # 20 Integrationstests
├── .github/workflows/ci.yml # GitHub Actions CI
├── pyproject.toml # Projekt-Konfiguration
├── README.md / README_EN.md # Dokumentation (DE/EN)
├── CONTRIBUTING.md / _EN.md # Beitragsrichtlinien (DE/EN)
├── CHANGELOG.md # Änderungsprotokoll
├── LICENSE # MIT
└── claude_desktop_config.json
🧪 Entwicklung
# Dev-Dependencies installieren
pip install -e ".[dev]"
# Integrationstests (gegen Live-APIs)
python tests/test_integration.py
# Linting
ruff check src/
📜 Lizenz
MIT License
🤝 Kontext
Alle genutzten Daten stehen unter offenen Lizenzen (CC0 / Open by Default seit 2021).
Powered by Model Context Protocol • 6 APIs • 20 Tools • 6 Resources
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file zurich_opendata_mcp-0.2.0.tar.gz.
File metadata
- Download URL: zurich_opendata_mcp-0.2.0.tar.gz
- Upload date:
- Size: 64.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
fb057b29adb4de43d382423392052f33b187d5df598330ea4a8bf7fc1f5457fc
|
|
| MD5 |
d03d998c9d3b2df5c6810b9131af21da
|
|
| BLAKE2b-256 |
efd554e90978182e6ef8613a06f125a698c354de3ae8fc860b9cf349c780cfad
|
Provenance
The following attestation bundles were made for zurich_opendata_mcp-0.2.0.tar.gz:
Publisher:
publish.yml on malkreide/zurich-opendata-mcp
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
zurich_opendata_mcp-0.2.0.tar.gz -
Subject digest:
fb057b29adb4de43d382423392052f33b187d5df598330ea4a8bf7fc1f5457fc - Sigstore transparency entry: 1155184557
- Sigstore integration time:
-
Permalink:
malkreide/zurich-opendata-mcp@eb589eb1ed4a5d382c6b52f296f8eefbc97e1811 -
Branch / Tag:
refs/tags/v0.2.0 - Owner: https://github.com/malkreide
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@eb589eb1ed4a5d382c6b52f296f8eefbc97e1811 -
Trigger Event:
release
-
Statement type:
File details
Details for the file zurich_opendata_mcp-0.2.0-py3-none-any.whl.
File metadata
- Download URL: zurich_opendata_mcp-0.2.0-py3-none-any.whl
- Upload date:
- Size: 30.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0368edb09335cbf4b825f81291e10b8fd8ae5511d3d176c9267fbff201ee090c
|
|
| MD5 |
781561dc7497ddbda031050021db8538
|
|
| BLAKE2b-256 |
6a7f10b4d8e63a27a46a7346ecefa7c071db5f5c1a96fe685c6d7b67e3cb57c0
|
Provenance
The following attestation bundles were made for zurich_opendata_mcp-0.2.0-py3-none-any.whl:
Publisher:
publish.yml on malkreide/zurich-opendata-mcp
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
zurich_opendata_mcp-0.2.0-py3-none-any.whl -
Subject digest:
0368edb09335cbf4b825f81291e10b8fd8ae5511d3d176c9267fbff201ee090c - Sigstore transparency entry: 1155184558
- Sigstore integration time:
-
Permalink:
malkreide/zurich-opendata-mcp@eb589eb1ed4a5d382c6b52f296f8eefbc97e1811 -
Branch / Tag:
refs/tags/v0.2.0 - Owner: https://github.com/malkreide
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@eb589eb1ed4a5d382c6b52f296f8eefbc97e1811 -
Trigger Event:
release
-
Statement type: