io.github.malkreide/swisstopo-mcp
Swiss federal geodata: geocoding, height, STAC, WMTS, OEREB and more
Versions
0.1.3latestTools 20
swisstopo_convert_coordinates Rechnet Koordinaten amtlich zwischen WGS84 und LV95 um (swisstopo REFRAME). <use_case>Wenn Koordinaten in LV95 (EPSG:2056) vorliegen und für die übrigen Tools nach WGS84 gebracht werden müssen — oder umgekehrt für den Katasterbezug, wo Zentimeter zählen.</use_case> <important_notes>Achsenreihenfolge beachten: REFRAME benennt beide Eingaben easting/northing. Bei wgs84_to_lv95 ist easting der LÄNGENgrad und northing der BREITENgrad — umgekehrt zur lat/lon-Reihenfolge der übrigen Tools. Vertauschte Achsen werden abgewiesen, nicht stillschweigend umgerechnet.</important_notes>
swisstopo_geocode Wandelt eine Adresse, einen Ortsnamen oder eine PLZ in Koordinaten um (Geocoding). <use_case>Startpunkt für ortsbezogene Abfragen: Adresse → Koordinaten, die danach an swisstopo_get_height, swisstopo_map_query (operation='features_at_point') oder swisstopo_get_egrid übergeben werden.</use_case>
swisstopo_reverse_geocode Findet die nächstgelegene Adresse zu gegebenen WGS84-Koordinaten (Reverse Geocoding). <use_case>Koordinaten aus Karte oder GPS in eine lesbare Adresse auflösen.</use_case>
swisstopo_map_query Fragt den nationalen Swisstopo-Kartenkatalog ab (500+ Layer): Layer finden, Felder ansehen, Features abfragen. <use_case>Der übliche Ablauf ist eine Kette: operation='search_layers' liefert Layer-IDs, operation='layer_info' zeigt deren abfragbare Felder, danach operation='features_at_point' (räumlich) oder 'features_by_attribute' (nach Attributwert), und operation='feature_by_id' holt ein einzelnes Feature vollständig.</use_case> <important_notes>Genau eine operation pro Aufruf. Felder, die zu einer anderen operation gehören, werden abgelehnt statt ignoriert — die Fehlermeldung nennt die zulässigen.</important_notes> <important_notes>Für Bauzone bzw. Gemeinde gibt es direkte Tools (swisstopo_zoning_at, swisstopo_municipality_at). 'features_at_point' nur nutzen, wenn zusätzliche Rohattribute gebraucht werden oder ein anderer Layer gefragt ist.</important_notes> <important_notes>Das ist der nationale Katalog von api3.geo.admin.ch. Für interkantonale und kantonale Quellen ist swisstopo_list_available_layers → swisstopo_query_geodata zuständig, für herunterladbare Datensätze swisstopo_search_geodata.</important_notes>
swisstopo_search_geodata Durchsucht den STAC-Katalog nach herunterladbaren Geodaten. <use_case>Findet Orthophotos, Höhenmodelle (swissALTI3D), 3D-Gebäude und historische Karten zum Download.</use_case> <important_notes>Liefert Collections/Metadaten; Download-Links via swisstopo_get_collection.</important_notes>
swisstopo_get_collection Ruft Detailinformationen und Download-Links einer STAC-Collection ab. <use_case>Zweiter Schritt nach swisstopo_search_geodata, um Assets/Download-URLs einer Collection zu erhalten.</use_case>
swisstopo_map_url Generiert eine teilbare map.geo.admin.ch-URL zum Öffnen im Browser. <use_case>Einen Kartenausschnitt mit optionalen Layern als Link bereitstellen (kein Datenabruf).</use_case>
swisstopo_get_height Gibt die Höhe über Meer (m ü. M.) an einer Koordinate zurück. <use_case>Punkthöhe für eine Adresse/Koordinate; für Linien siehe swisstopo_elevation_profile.</use_case> <important_notes>Koordinaten entweder als lat/lon (WGS84) ODER als easting/northing (LV95) angeben — nicht beides.</important_notes>
swisstopo_elevation_profile Berechnet ein Höhenprofil entlang einer Linie aus mehreren Koordinatenpaaren. <use_case>Höhenverlauf z.B. für Wander-/Schulweg-Analysen.</use_case> <important_notes>Benötigt ≥2 Koordinatenpaare. Standard ist WGS84 ('lat1,lon1;lat2,lon2;…'); für LV95 coordinate_system='lv95' setzen und die Paare als 'easting,northing' übergeben.</important_notes>
swisstopo_zoning_at Gibt die harmonisierte Bauzone an einer Koordinate zurück (ch.are.bauzonen, ARE). <use_case>«Welche Bauzone gilt hier?» in einem Aufruf — ohne vorher die Layer-ID via swisstopo_map_query erst suchen zu müssen.</use_case> <important_notes>Der harmonisierte ARE-Layer ist eine Synthese für die schweizweite Vergleichbarkeit und NICHT rechtsverbindlich — verbindlich ist allein die kantonale/kommunale Nutzungsplanung. Der Hinweis steht in jedem Resultat. Koordinaten als lat/lon (WGS84) oder easting/northing (LV95).</important_notes>
swisstopo_municipality_at Gibt Gemeinde, BFS-Nummer und Kanton an einer Koordinate zurück (swissBOUNDARIES3D). <use_case>Koordinate → amtliche BFS-Gemeindenummer, der Join-Key zu swiss-statistics-mcp und zurich-opendata-mcp.</use_case> <important_notes>Der Layer führt eine Fläche pro historischem Jahrgang; es wird der aktuelle Stand zurückgegeben. Auf einer Gemeindegrenze oder ausserhalb der Schweiz bleibt das Resultat leer.</important_notes>
swisstopo_get_egrid Ermittelt die EGRID (Grundstück-ID) aus Koordinaten für einen bestimmten Kanton. <use_case>Grundstück-ID (EGRID) zu einer Koordinate, wenn die ID selbst gebraucht wird. Für die Beschränkungen direkt swisstopo_oereb_at nutzen — das löst den EGRID intern auf.</use_case> <important_notes>Erfordert einen unterstützten Kanton (z.B. ZH, BE).</important_notes>
swisstopo_get_oereb_extract Ruft öffentlich-rechtliche Eigentumsbeschränkungen (ÖREB) für ein Grundstück (EGRID) ab. <use_case>ÖREB-Auszug zu einem bereits bekannten EGRID. Wer von einer Koordinate ausgeht, nimmt swisstopo_oereb_at — das erledigt beide Schritte in einem Aufruf.</use_case> <important_notes>Erfordert einen unterstützten Kanton.</important_notes>
swisstopo_oereb_at Gibt die ÖREB-Eigentumsbeschränkungen an einer Koordinate zurück (ein Aufruf). <use_case>«Welche Beschränkungen gelten auf diesem Grundstück?» — löst den EGRID intern auf. Das ist der normale Weg; swisstopo_get_egrid braucht es nur, wer die Parzellen-ID selbst benötigt.</use_case> <important_notes>Nur für Kantone mit angebundenem ÖREB-Dienst (siehe SWISSTOPO_OEREB_CANTONS). Koordinaten als lat/lon (WGS84) oder easting/northing (LV95).</important_notes>
list_available_layers_tool Discovery-Tool: listet die Layer-Kennungen, die swisstopo_query_geodata akzeptiert. <use_case>Erster Schritt vor swisstopo_query_geodata: herausfinden, welche Datensätze (Strassenverzeichnis, ÖREB-Verfügbarkeit, interkantonale geodienste.ch-Topics) verfügbar und ohne Vertrag frei nutzbar sind. Für konkrete geodienste-Kennungen einen Kanton angeben (z.B. canton='ZH').</use_case>
query_geodata_tool Einheitliche Fassade über mehrere Geodaten-Quellen anhand einer Layer-Kennung. <use_case>Ein Tool für drei Quellen: 'strassenverzeichnis' (Strassen um einen Punkt), 'oereb-verfuegbarkeit' (ÖREB-Status/Zuständigkeit an einem Punkt) und 'geodienste:<topic>:<KANTON>' (interkantonale Basisgeodaten via OGC API Features). Genau eine Ortsangabe (point | bbox | commune) übergeben.</use_case> <important_notes>Gültige Layer-Kennungen via swisstopo_list_available_layers. geodienste-Layer erfordern bbox oder point (mit radius_m).</important_notes>
query_osm_features_tool Findet OpenStreetMap-POIs (Schulen, Spielplätze, Apotheken …) im Umkreis. <use_case>Beantwortet «Welche Schulhäuser/Spielplätze liegen im Umkreis von R Metern um diesen Punkt/diese Adresse?». Ergänzt die amtlichen swisstopo-Daten um Points-of-Interest aus OpenStreetMap.</use_case> <important_notes>Quelle OpenStreetMap (ODbL, © OpenStreetMap contributors), nicht swisstopo. Overpass hat Rate-Limits/Timeouts — kleiner Radius bevorzugt; bei Überlastung kommt eine sprechende Fehlermeldung statt Daten.</important_notes>
lookup_postal_code_tool Löst eine Schweizer PLZ in Ort, Gemeinde, Bezirk und Kanton auf (OpenPLZ, amtlich). <use_case>Beantwortet «Zu welcher Gemeinde/welchem Kanton gehört PLZ 8001?» und liefert die BFS-Gemeindenummer (`bfs_commune_number`).</use_case> <important_notes>`bfs_commune_number` ist der amtliche Join-Schlüssel zu BFS-Statistikdaten (swiss-statistics-mcp) und zu zurich-opendata-mcp. Quelle OpenPLZ (BFS/swisstopo OGD), nicht die swisstopo-Geodaten. Eine unbekannte PLZ liefert eine leere Trefferliste mit erklärendem Hinweis.</important_notes>
find_commune_tool Löst Gemeinden auf: Name→BFS-Nummer, BFS-Nummer→Name, oder alle Gemeinden eines Kantons/Bezirks. <use_case>Vier Modi (genau einen Parameter angeben): `name` (Name → BFS-Nummer), `bfs_number` (BFS-Nummer → Gemeinde), `canton` (alle Gemeinden eines Kantons) oder `district` (alle Gemeinden eines Bezirks). Beantwortet z.B. «Welche Gemeinden liegen im Bezirk Uster und wie lauten ihre BFS-Nummern?».</use_case> <important_notes>`bfs_commune_number` ist der amtliche Join-Schlüssel zu BFS-Statistikdaten (swiss-statistics-mcp). `canton` akzeptiert Kürzel ('ZH') oder BFS-Nummer ('1') — die Kürzel→Schlüssel-Auflösung erfolgt serverseitig, weil der Pfad sonst still eine leere Liste liefert. Gemeindelisten sind vollständig (interne Pagination), nicht auf 10 Einträge gekürzt.</important_notes>
search_address_tool Volltextsuche über Schweizer Strassen und Ortschaften (OpenPLZ FullTextSearch). <use_case>Findet Strassen und Orte zu einem freien Suchbegriff und liefert je Treffer Gemeinde und BFS-Nummer, wenn vorhanden.</use_case> <important_notes>Quelle OpenPLZ (BFS/swisstopo OGD). Ergebnisse sind paginiert (max. 50/Abfrage); die Gesamttrefferzahl wird ausgewiesen. Für die exakte PLZ→Gemeinde-Auflösung ist swisstopo_lookup_postal_code präziser.</important_notes>
Permissions 4
network medium filesystem low shell high env_vars low