io.github.malkreide/swisstopo-mcp
PYPI · SWISSTOPO-MCP · SCANNED SEP 20
Swiss federal geodata: geocoding, height, STAC, WMTS, OEREB and more
Available components
How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score → Why this is hard to score →
Supply Chain Security50
- Malware scan not yet available for this package.Unverified
- No known CVEs affecting this package version or its production dependencies.Pass
- Runs hatchling.build at install time, a recognised native-build step with no shell scripting around it. View diagnostics → Pass
- 1 of 53 dependencies flagged as unhealthy. View diagnostics → Partial
Provenance & Transparency35
- Source repository is publicly reachable at the declared URL. View diagnostics → Pass
- Provenance check failed: no build-provenance attestation is published. See how to fix → View diagnostics → Fail
- License check failed: the license (MIT License) isn't a recognized OSI-approved license. See how to fix → Fail
- Actively maintained (last published 48 days ago).Pass
- Publishes a security disclosure policy (SECURITY.md).Pass
Schema Quality & AI Usability78
- 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).Pass
- AI-judged instruction clarity (good).Pass
- Context-footprint check failed: tool/resource definitions use about 3468 tokens (~165/item across 21 items; 20 tools + 1 resources), over budget; trim descriptions and params. See how to fix → Fail
- Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management83
- Stability observed for 25 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage71
- 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
- 0% of tool parameters carry a description.Fail
- Structured output schemas are declared (100% of tools); any adoption earns full credit.Pass
Tool Safety100
- No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
- We read all 20 captured tool definition(s), and no name or description among them implies an irreversible operation.Pass
- An AI judge read all 22 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
- Implements a current MCP spec version (2026-07-28).Pass
How do I install the io.github.malkreide/swisstopo-mcp server?
io.github.malkreide/swisstopo-mcp runs locally as a PyPI package, launched with uvx swisstopo-mcp. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.
pypi · swisstopo-mcp
claude mcp add malkreide-swisstopo-mcp -- uvx swisstopo-mcp
{
"mcpServers": {
"malkreide-swisstopo-mcp": {
"command": "uvx",
"args": [
"swisstopo-mcp"
]
}
}
} {
"servers": {
"malkreide-swisstopo-mcp": {
"command": "uvx",
"args": [
"swisstopo-mcp"
]
}
}
} codex mcp add malkreide-swisstopo-mcp -- uvx swisstopo-mcp
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"malkreide-swisstopo-mcp": {
"type": "local",
"command": [
"uvx",
"swisstopo-mcp"
],
"enabled": true
}
}
} openclaw mcp add malkreide-swisstopo-mcp --command uvx --arg swisstopo-mcp
mcp_servers:
malkreide-swisstopo-mcp:
command: "uvx"
args: ["swisstopo-mcp"] {
"McpServers": {
"malkreide-swisstopo-mcp": {
"Transport": "stdio",
"Command": "uvx",
"Arguments": [
"swisstopo-mcp"
]
}
}
} assistant mcp add malkreide-swisstopo-mcp -t stdio -c uvx -a swisstopo-mcp
{
"mcpServers": {
"malkreide-swisstopo-mcp": {
"command": "uvx",
"args": [
"swisstopo-mcp"
]
}
}
} Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.
- 19 Sept 26 −3
- Stability: pass → 0.80 functional
- 18 Sept 26 +1
- Stability: 0.97 → pass security
- 17 Sept 26 −15
- Malware scan: pass → unverified ▼ security
- 16 Sept 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 90 to 93. That category is still filling its 30-day observation window: 27 days of observed history at the previous scan, 28 at this one. The score rises as the window fills, whether or not the server changes.
- 14 Sept 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 83 to 87. That category is still filling its 30-day observation window: 25 days of observed history at the previous scan, 26 at this one. The score rises as the window fills, whether or not the server changes.
- 12 Sept 26 +12
- Malware scan: unverified → pass ▲ security
- Stability: pass → 0.80 functional
- 11 Sept 26 −14
- Malware scan: pass → unverified ▼ security
- Stability: 0.97 → pass security
- 9 Sept 26 +16
- Malware scan: unverified → pass ▲ security
Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.
Captured 20 Sept 2026 · Analysed pypi/swisstopo-mcp@0.4.1
Provenance No attestation
The registry publishes no build provenance for this version, so there is nothing to verify.
| Result | No attestation |
|---|---|
| Ecosystem | pypi |
Background: How many MCP packages publish verified provenance →
Install scripts 1 script
| Hook | Tier | Command |
|---|---|---|
| build_backend | allowlisted | hatchling.build |
Background: Why install scripts are a supply-chain risk →
Dependencies 53 packages
| Packages resolved | 53 |
|---|---|
| No linked repository | 1 |
| Tree resolution | Complete |
Background: SBOMs and build attestations, explained →
The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →
swisstopo_convert_coordinates ~182
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>
| Name | Type | Req | Description |
|---|---|---|---|
| params | – | yes | – |
| Name | Type | Req | Description |
|---|---|---|---|
| count | integer | – | Number of structured results. |
| is_error | boolean | – | True if this represents a handled error. |
| license | string | – | Data licence. |
| match_type | – | – | exact | fuzzy | none (for search-style tools). |
| note | – | – | Actionable hint when a search returns nothing — what to try next, rather than a bare negative (audit ARCH-003). |
| provenance | string | – | How the data was obtained. |
| results | array | – | Structured result records (machine-readable). |
| retrieved_at | string | – | ISO-8601 retrieval timestamp. |
| source | string | – | Data source attribution. |
| summary | string | yes | Human-readable Markdown summary of the result. |
No examples provided.
swisstopo_elevation_profile ~124
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>
| Name | Type | Req | Description |
|---|---|---|---|
| params | – | yes | – |
| Name | Type | Req | Description |
|---|---|---|---|
| count | integer | – | Number of structured results. |
| is_error | boolean | – | True if this represents a handled error. |
| license | string | – | Data licence. |
| match_type | – | – | exact | fuzzy | none (for search-style tools). |
| note | – | – | Actionable hint when a search returns nothing — what to try next, rather than a bare negative (audit ARCH-003). |
| provenance | string | – | How the data was obtained. |
| results | array | – | Structured result records (machine-readable). |
| retrieved_at | string | – | ISO-8601 retrieval timestamp. |
| source | string | – | Data source attribution. |
| summary | string | yes | Human-readable Markdown summary of the result. |
No examples provided.
swisstopo_find_commune ~248
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>
| Name | Type | Req | Description |
|---|---|---|---|
| params | – | yes | – |
| Name | Type | Req | Description |
|---|---|---|---|
| count | integer | – | Number of structured results. |
| is_error | boolean | – | True if this represents a handled error. |
| license | string | – | Data licence. |
| match_type | – | – | exact | fuzzy | none (for search-style tools). |
| note | – | – | Actionable hint when a search returns nothing — what to try next, rather than a bare negative (audit ARCH-003). |
| provenance | string | – | How the data was obtained. |
| results | array | – | Structured result records (machine-readable). |
| retrieved_at | string | – | ISO-8601 retrieval timestamp. |
| source | string | – | Data source attribution. |
| summary | string | yes | Human-readable Markdown summary of the result. |
No examples provided.
swisstopo_geocode ~98
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>
| Name | Type | Req | Description |
|---|---|---|---|
| params | – | yes | – |
| Name | Type | Req | Description |
|---|---|---|---|
| count | integer | – | Number of structured results. |
| is_error | boolean | – | True if this represents a handled error. |
| license | string | – | Data licence. |
| match_type | – | – | exact | fuzzy | none (for search-style tools). |
| note | – | – | Actionable hint when a search returns nothing — what to try next, rather than a bare negative (audit ARCH-003). |
| provenance | string | – | How the data was obtained. |
| results | array | – | Structured result records (machine-readable). |
| retrieved_at | string | – | ISO-8601 retrieval timestamp. |
| source | string | – | Data source attribution. |
| summary | string | yes | Human-readable Markdown summary of the result. |
No examples provided.
swisstopo_get_collection ~63
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>
| Name | Type | Req | Description |
|---|---|---|---|
| params | – | yes | – |
| Name | Type | Req | Description |
|---|---|---|---|
| count | integer | – | Number of structured results. |
| is_error | boolean | – | True if this represents a handled error. |
| license | string | – | Data licence. |
| match_type | – | – | exact | fuzzy | none (for search-style tools). |
| note | – | – | Actionable hint when a search returns nothing — what to try next, rather than a bare negative (audit ARCH-003). |
| provenance | string | – | How the data was obtained. |
| results | array | – | Structured result records (machine-readable). |
| retrieved_at | string | – | ISO-8601 retrieval timestamp. |
| source | string | – | Data source attribution. |
| summary | string | yes | Human-readable Markdown summary of the result. |
No examples provided.
swisstopo_get_egrid ~116
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>
| Name | Type | Req | Description |
|---|---|---|---|
| params | – | yes | – |
| Name | Type | Req | Description |
|---|---|---|---|
| count | integer | – | Number of structured results. |
| is_error | boolean | – | True if this represents a handled error. |
| license | string | – | Data licence. |
| match_type | – | – | exact | fuzzy | none (for search-style tools). |
| note | – | – | Actionable hint when a search returns nothing — what to try next, rather than a bare negative (audit ARCH-003). |
| provenance | string | – | How the data was obtained. |
| results | array | – | Structured result records (machine-readable). |
| retrieved_at | string | – | ISO-8601 retrieval timestamp. |
| source | string | – | Data source attribution. |
| summary | string | yes | Human-readable Markdown summary of the result. |
No examples provided.
swisstopo_get_height ~104
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>
| Name | Type | Req | Description |
|---|---|---|---|
| params | – | yes | – |
| Name | Type | Req | Description |
|---|---|---|---|
| count | integer | – | Number of structured results. |
| is_error | boolean | – | True if this represents a handled error. |
| license | string | – | Data licence. |
| match_type | – | – | exact | fuzzy | none (for search-style tools). |
| note | – | – | Actionable hint when a search returns nothing — what to try next, rather than a bare negative (audit ARCH-003). |
| provenance | string | – | How the data was obtained. |
| results | array | – | Structured result records (machine-readable). |
| retrieved_at | string | – | ISO-8601 retrieval timestamp. |
| source | string | – | Data source attribution. |
| summary | string | yes | Human-readable Markdown summary of the result. |
No examples provided.
swisstopo_get_oereb_extract ~108
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>
| Name | Type | Req | Description |
|---|---|---|---|
| params | – | yes | – |
| Name | Type | Req | Description |
|---|---|---|---|
| count | integer | – | Number of structured results. |
| is_error | boolean | – | True if this represents a handled error. |
| license | string | – | Data licence. |
| match_type | – | – | exact | fuzzy | none (for search-style tools). |
| note | – | – | Actionable hint when a search returns nothing — what to try next, rather than a bare negative (audit ARCH-003). |
| provenance | string | – | How the data was obtained. |
| results | array | – | Structured result records (machine-readable). |
| retrieved_at | string | – | ISO-8601 retrieval timestamp. |
| source | string | – | Data source attribution. |
| summary | string | yes | Human-readable Markdown summary of the result. |
No examples provided.
swisstopo_list_available_layers ~126
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>
| Name | Type | Req | Description |
|---|---|---|---|
| params | – | yes | – |
| Name | Type | Req | Description |
|---|---|---|---|
| count | integer | – | Number of structured results. |
| is_error | boolean | – | True if this represents a handled error. |
| license | string | – | Data licence. |
| match_type | – | – | exact | fuzzy | none (for search-style tools). |
| note | – | – | Actionable hint when a search returns nothing — what to try next, rather than a bare negative (audit ARCH-003). |
| provenance | string | – | How the data was obtained. |
| results | array | – | Structured result records (machine-readable). |
| retrieved_at | string | – | ISO-8601 retrieval timestamp. |
| source | string | – | Data source attribution. |
| summary | string | yes | Human-readable Markdown summary of the result. |
No examples provided.
swisstopo_lookup_postal_code ~177
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>
| Name | Type | Req | Description |
|---|---|---|---|
| params | – | yes | – |
| Name | Type | Req | Description |
|---|---|---|---|
| count | integer | – | Number of structured results. |
| is_error | boolean | – | True if this represents a handled error. |
| license | string | – | Data licence. |
| match_type | – | – | exact | fuzzy | none (for search-style tools). |
| note | – | – | Actionable hint when a search returns nothing — what to try next, rather than a bare negative (audit ARCH-003). |
| provenance | string | – | How the data was obtained. |
| results | array | – | Structured result records (machine-readable). |
| retrieved_at | string | – | ISO-8601 retrieval timestamp. |
| source | string | – | Data source attribution. |
| summary | string | yes | Human-readable Markdown summary of the result. |
No examples provided.
swisstopo_map_query ~297
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>
| Name | Type | Req | Description |
|---|---|---|---|
| params | – | yes | – |
| Name | Type | Req | Description |
|---|---|---|---|
| count | integer | – | Number of structured results. |
| is_error | boolean | – | True if this represents a handled error. |
| license | string | – | Data licence. |
| match_type | – | – | exact | fuzzy | none (for search-style tools). |
| note | – | – | Actionable hint when a search returns nothing — what to try next, rather than a bare negative (audit ARCH-003). |
| provenance | string | – | How the data was obtained. |
| results | array | – | Structured result records (machine-readable). |
| retrieved_at | string | – | ISO-8601 retrieval timestamp. |
| source | string | – | Data source attribution. |
| summary | string | yes | Human-readable Markdown summary of the result. |
No examples provided.
swisstopo_map_url ~62
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>
| Name | Type | Req | Description |
|---|---|---|---|
| params | – | yes | – |
| Name | Type | Req | Description |
|---|---|---|---|
| count | integer | – | Number of structured results. |
| is_error | boolean | – | True if this represents a handled error. |
| license | string | – | Data licence. |
| match_type | – | – | exact | fuzzy | none (for search-style tools). |
| note | – | – | Actionable hint when a search returns nothing — what to try next, rather than a bare negative (audit ARCH-003). |
| provenance | string | – | How the data was obtained. |
| results | array | – | Structured result records (machine-readable). |
| retrieved_at | string | – | ISO-8601 retrieval timestamp. |
| source | string | – | Data source attribution. |
| summary | string | yes | Human-readable Markdown summary of the result. |
No examples provided.
swisstopo_municipality_at ~127
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>
| Name | Type | Req | Description |
|---|---|---|---|
| params | – | yes | – |
| Name | Type | Req | Description |
|---|---|---|---|
| count | integer | – | Number of structured results. |
| is_error | boolean | – | True if this represents a handled error. |
| license | string | – | Data licence. |
| match_type | – | – | exact | fuzzy | none (for search-style tools). |
| note | – | – | Actionable hint when a search returns nothing — what to try next, rather than a bare negative (audit ARCH-003). |
| provenance | string | – | How the data was obtained. |
| results | array | – | Structured result records (machine-readable). |
| retrieved_at | string | – | ISO-8601 retrieval timestamp. |
| source | string | – | Data source attribution. |
| summary | string | yes | Human-readable Markdown summary of the result. |
No examples provided.
swisstopo_oereb_at ~152
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>
| Name | Type | Req | Description |
|---|---|---|---|
| params | – | yes | – |
| Name | Type | Req | Description |
|---|---|---|---|
| count | integer | – | Number of structured results. |
| is_error | boolean | – | True if this represents a handled error. |
| license | string | – | Data licence. |
| match_type | – | – | exact | fuzzy | none (for search-style tools). |
| note | – | – | Actionable hint when a search returns nothing — what to try next, rather than a bare negative (audit ARCH-003). |
| provenance | string | – | How the data was obtained. |
| results | array | – | Structured result records (machine-readable). |
| retrieved_at | string | – | ISO-8601 retrieval timestamp. |
| source | string | – | Data source attribution. |
| summary | string | yes | Human-readable Markdown summary of the result. |
No examples provided.
swisstopo_query_geodata ~178
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>
| Name | Type | Req | Description |
|---|---|---|---|
| params | – | yes | – |
| Name | Type | Req | Description |
|---|---|---|---|
| count | integer | – | Number of structured results. |
| is_error | boolean | – | True if this represents a handled error. |
| license | string | – | Data licence. |
| match_type | – | – | exact | fuzzy | none (for search-style tools). |
| note | – | – | Actionable hint when a search returns nothing — what to try next, rather than a bare negative (audit ARCH-003). |
| provenance | string | – | How the data was obtained. |
| results | array | – | Structured result records (machine-readable). |
| retrieved_at | string | – | ISO-8601 retrieval timestamp. |
| source | string | – | Data source attribution. |
| summary | string | yes | Human-readable Markdown summary of the result. |
No examples provided.
swisstopo_query_osm_features ~157
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>
| Name | Type | Req | Description |
|---|---|---|---|
| params | – | yes | – |
| Name | Type | Req | Description |
|---|---|---|---|
| count | integer | – | Number of structured results. |
| is_error | boolean | – | True if this represents a handled error. |
| license | string | – | Data licence. |
| match_type | – | – | exact | fuzzy | none (for search-style tools). |
| note | – | – | Actionable hint when a search returns nothing — what to try next, rather than a bare negative (audit ARCH-003). |
| provenance | string | – | How the data was obtained. |
| results | array | – | Structured result records (machine-readable). |
| retrieved_at | string | – | ISO-8601 retrieval timestamp. |
| source | string | – | Data source attribution. |
| summary | string | yes | Human-readable Markdown summary of the result. |
No examples provided.
swisstopo_reverse_geocode ~64
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>
| Name | Type | Req | Description |
|---|---|---|---|
| params | – | yes | – |
| Name | Type | Req | Description |
|---|---|---|---|
| count | integer | – | Number of structured results. |
| is_error | boolean | – | True if this represents a handled error. |
| license | string | – | Data licence. |
| match_type | – | – | exact | fuzzy | none (for search-style tools). |
| note | – | – | Actionable hint when a search returns nothing — what to try next, rather than a bare negative (audit ARCH-003). |
| provenance | string | – | How the data was obtained. |
| results | array | – | Structured result records (machine-readable). |
| retrieved_at | string | – | ISO-8601 retrieval timestamp. |
| source | string | – | Data source attribution. |
| summary | string | yes | Human-readable Markdown summary of the result. |
No examples provided.
swisstopo_search_address ~141
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>
| Name | Type | Req | Description |
|---|---|---|---|
| params | – | yes | – |
| Name | Type | Req | Description |
|---|---|---|---|
| count | integer | – | Number of structured results. |
| is_error | boolean | – | True if this represents a handled error. |
| license | string | – | Data licence. |
| match_type | – | – | exact | fuzzy | none (for search-style tools). |
| note | – | – | Actionable hint when a search returns nothing — what to try next, rather than a bare negative (audit ARCH-003). |
| provenance | string | – | How the data was obtained. |
| results | array | – | Structured result records (machine-readable). |
| retrieved_at | string | – | ISO-8601 retrieval timestamp. |
| source | string | – | Data source attribution. |
| summary | string | yes | Human-readable Markdown summary of the result. |
No examples provided.
swisstopo_search_geodata ~99
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>
| Name | Type | Req | Description |
|---|---|---|---|
| params | – | yes | – |
| Name | Type | Req | Description |
|---|---|---|---|
| count | integer | – | Number of structured results. |
| is_error | boolean | – | True if this represents a handled error. |
| license | string | – | Data licence. |
| match_type | – | – | exact | fuzzy | none (for search-style tools). |
| note | – | – | Actionable hint when a search returns nothing — what to try next, rather than a bare negative (audit ARCH-003). |
| provenance | string | – | How the data was obtained. |
| results | array | – | Structured result records (machine-readable). |
| retrieved_at | string | – | ISO-8601 retrieval timestamp. |
| source | string | – | Data source attribution. |
| summary | string | yes | Human-readable Markdown summary of the result. |
No examples provided.
swisstopo_zoning_at ~158
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>
| Name | Type | Req | Description |
|---|---|---|---|
| params | – | yes | – |
| Name | Type | Req | Description |
|---|---|---|---|
| count | integer | – | Number of structured results. |
| is_error | boolean | – | True if this represents a handled error. |
| license | string | – | Data licence. |
| match_type | – | – | exact | fuzzy | none (for search-style tools). |
| note | – | – | Actionable hint when a search returns nothing — what to try next, rather than a bare negative (audit ARCH-003). |
| provenance | string | – | How the data was obtained. |
| results | array | – | Structured result records (machine-readable). |
| retrieved_at | string | – | ISO-8601 retrieval timestamp. |
| source | string | – | Data source attribution. |
| summary | string | yes | Human-readable Markdown summary of the result. |
No examples provided.
What is the io.github.malkreide/swisstopo-mcp server?
io.github.malkreide/swisstopo-mcp is listed in the public MCP registry as io.github.malkreide/swisstopo-mcp. Swiss federal geodata: geocoding, height, STAC, WMTS, OEREB and more. This page covers its PyPI package (swisstopo-mcp).
Is the io.github.malkreide/swisstopo-mcp server safe to use?
io.github.malkreide/swisstopo-mcp scores 63 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 20 September 2026. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.
What tools does the io.github.malkreide/swisstopo-mcp server expose?
io.github.malkreide/swisstopo-mcp exposes 20 tools: swisstopo_geocode, swisstopo_reverse_geocode, swisstopo_map_query, swisstopo_search_geodata, swisstopo_get_collection, and 15 more. Their descriptions and schemas cost roughly 2,781 tokens of context every time the server is loaded.
Is the io.github.malkreide/swisstopo-mcp server still maintained?
io.github.malkreide/swisstopo-mcp is still listed as active in the MCP registry. We last reached this channel on 20 September 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.