Skip to main content

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ätze
  • zurich_get_dataset – Vollständige Metadaten und Download-URLs eines Datensatzes
  • zurich_datastore_query – Tabellarische Daten direkt abfragen (Filter, Sortierung)
  • zurich_datastore_sql – SQL-Abfragen auf dem DataStore
  • zurich_list_categories – 19 thematische Kategorien durchsuchen
  • zurich_list_tags – Tags für thematische Suche

Echtzeit-Umweltdaten

  • zurich_weather_live – 🌤️ Aktuelle Wetterdaten (Temperatur, Feuchte, Druck, Regen) von 5 UGZ-Stationen
  • zurich_air_quality – 🌬️ Live-Luftqualität (NO₂, O₃, PM10, PM2.5) mit WHO-Grenzwerten
  • zurich_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 auflisten
  • zurich_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, Datenstruktur
  • zurich_catalog_stats – Katalog-Übersicht mit Statistiken
  • zurich_find_school_data – Kuratierte Suche nach schulrelevanten Datensätzen

MCP Resources

  • zurich://dataset/{name} – Datensatz-Metadaten
  • zurich://category/{group_id} – Kategorie-Details
  • zurich://parking – Aktuelle Parkplatzdaten
  • zurich://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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

zurich_opendata_mcp-0.2.0.tar.gz (64.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

zurich_opendata_mcp-0.2.0-py3-none-any.whl (30.4 kB view details)

Uploaded Python 3

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

Hashes for zurich_opendata_mcp-0.2.0.tar.gz
Algorithm Hash digest
SHA256 fb057b29adb4de43d382423392052f33b187d5df598330ea4a8bf7fc1f5457fc
MD5 d03d998c9d3b2df5c6810b9131af21da
BLAKE2b-256 efd554e90978182e6ef8613a06f125a698c354de3ae8fc860b9cf349c780cfad

See more details on using hashes here.

Provenance

The following attestation bundles were made for zurich_opendata_mcp-0.2.0.tar.gz:

Publisher: publish.yml on malkreide/zurich-opendata-mcp

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file zurich_opendata_mcp-0.2.0-py3-none-any.whl.

File metadata

File hashes

Hashes for zurich_opendata_mcp-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 0368edb09335cbf4b825f81291e10b8fd8ae5511d3d176c9267fbff201ee090c
MD5 781561dc7497ddbda031050021db8538
BLAKE2b-256 6a7f10b4d8e63a27a46a7346ecefa7c071db5f5c1a96fe685c6d7b67e3cb57c0

See more details on using hashes here.

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

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page