Skip to main content
Glama

⚠️ DEPRECATED β€” use swisstopo-mcp instead

This server has been consolidated into swisstopo-mcp and is no longer maintained. Every capability it offered now exists there, including the one it used to have exclusively β€” the official REFRAME coordinate conversion.

Why: both servers wrapped the same api3.geo.admin.ch endpoints and overlapped in five core tools (layer search, identify, find, height, elevation profile). Maintaining two servers for one data source meant double the audits, double the CVE bumps, and an unclear choice for users. The rationale and the migration steps are documented in docs/merge-plan-swiss-geodata-mcp.md.

This repository will be archived. The code below still works, but it receives no further fixes or dependency updates. See Migration below.

πŸ‡¨πŸ‡­ Part of the Swiss Public Data MCP Portfolio

πŸ—ΊοΈ swiss-geodata-mcp

CI PyPI Python License: MIT swiss-public-data-mcp

MCP server for Swiss federal geodata (geo.admin.ch).

Connects AI models to the federal geodata infrastructure: ~700 layers discoverable by keyword, spatial identify at any point, building zones (ARE), municipality lookup (swissBOUNDARIES3D), terrain heights and elevation profiles (swissALTI3D), and WGS84↔LV95 coordinate conversion. Part of the swiss-public-data-mcp portfolio. Private project, independent of any employer or institutional affiliation.

πŸ‡©πŸ‡ͺ Deutsche Version


Demo query (anchor example)

In which building zone is the school building at Seilergraben 76 in Zurich,
and how high above sea level is it?

β†’ geo_zoning_at(2683531, 1247914) + geo_height(2683531, 1247914) returns the harmonised ARE zone and 411 m a.s.l. β€” verified live 2026-07-24.

Combined with swiss-housing-mcp:

What applies at this address?

β†’ address_to_egid("Seilergraben 76 ZΓΌrich") (housing) delivers the LV95 coordinates β†’ geo_zoning_at + geo_municipality_at (geodata) deliver zone and municipality. If the GWR is the address book, geo.admin.ch is the atlas.


Related MCP server: swiss-food-safety-mcp

Tools (9)

Tool

Description

Data source

geo_search_layers

Keyword search over the ~700-layer federal catalogue

geo.admin.ch SearchServer

geo_identify

What is at this LV95 point? (any layer)

geo.admin.ch MapServer identify

geo_find

Find features on a layer by attribute value

geo.admin.ch MapServer find

geo_municipality_at

Municipality + canton containing a point

swissBOUNDARIES3D

geo_zoning_at

Building zone(s) at a point

ch.are.bauzonen (ARE)

geo_height

Terrain height at a point

swissALTI3D height service

geo_elevation_profile

Elevation profile along a line

geo.admin.ch profile service

geo_layer_info

Queryable fields + legend (plain text) for a layer

geo.admin.ch MapServer

geo_convert_coordinates

WGS84 ↔ LV95 conversion

geodesy.geo.admin.ch reframe

geo_search_layers is the discovery entry point that scales the whole catalogue without one tool per layer; geo_layer_info then reveals a layer's queryable fields for geo_find.

Tool annotations (MCP hints)

All tools are read-only (readOnlyHint: βœ…, destructiveHint: βœ—) and query live upstream services (openWorldHint: βœ…). None are idempotent in the strict caching sense, as upstream data may change between calls.

Architecture decision

This server uses Architecture A (Live-API-only) β€” a deliberate deviation from the portfolio's dump-first default, documented per portfolio convention:

  • The federal geodata infrastructure spans ~700 layers and terabytes; dump-caching is neither feasible nor useful.

  • api3.geo.admin.ch is built exactly for point/feature queries and answered every probe reliably without authentication (live probe 2026-07-24: SearchServer, identify, find, height, profile, legend, layer metadata, reframe β€” all HTTP 200, No-Auth).

  • Consequence: no local cache, no TTL logic; every response carries provenance: live_api.

Live probe findings (2026-07-24)

Endpoint

HTTP

Status

Note

SearchServer type=layers

200

βœ… works

catalogue full-text searchable

MapServer identify (bauzonen, boundaries)

200

βœ… works

tolerance 0 works for polygon layers

height service

200

βœ… works

value arrives as JSON string

profile.json (GET + geom)

200

βœ… works

COMB/DTM2/DTM25 altitudes

MapServer {layer}/legend

200

⚠️ HTML

stripped to plain text in geo_layer_info

reframe wgs84↔lv95

200

βœ… works

coordinates arrive as JSON strings

Miss on identify/find

200

⚠️ soft

empty results array β€” not an HTTP error

Quick start

Claude Desktop

{
  "mcpServers": {
    "swiss-geodata": {
      "command": "uvx",
      "args": ["swiss-geodata-mcp"]
    }
  }
}

Cloud / Render.com (Streamable HTTP)

SWISS_GEODATA_TRANSPORT=streamable-http PORT=8000 swiss-geodata-mcp

Configuration

Variable

Default

Purpose

SWISS_GEODATA_TRANSPORT

stdio

stdio | streamable-http | sse

HOST / PORT

127.0.0.1 / 8000

HTTP binding (cloud transports only). Defaults to loopback; set HOST=0.0.0.0 explicitly to expose all interfaces in a cloud deployment.

No API keys β€” Phase 1 is authentication-free.

Example queries

School planning

  • Β«Which building zone applies at our planned school extension site?Β» β†’ geo_zoning_at

  • Β«Which municipality and canton is this coordinate in?Β» β†’ geo_municipality_at (bridges to BFS numbers used by swiss-statistics-mcp and swiss-housing-mcp)

  • Β«How steep is the school route between these two points?Β» β†’ geo_elevation_profile

Layer discovery

  • Β«Is there federal data on noise exposure?Β» β†’ geo_search_layers("lΓ€rm") β†’ geo_layer_info β†’ geo_identify

See EXAMPLES.md for use cases grouped by audience (schools, parents, general public, developers) and a tool-selection reference table.

Testing

PYTHONPATH=src pytest tests/ -m "not live"   # CI-safe (respx-mocked)
PYTHONPATH=src pytest tests/ -m live         # against real upstream

Project structure

swiss-geodata-mcp/
β”œβ”€β”€ src/swiss_geodata_mcp/
β”‚   β”œβ”€β”€ server.py      # FastMCP tools (9, prefix geo_*)
β”‚   β”œβ”€β”€ geoadmin.py    # geo.admin.ch client + retry + normalisation
β”‚   β”œβ”€β”€ models.py      # Pydantic v2 envelopes (source + provenance)
β”‚   └── __main__.py    # Dual-transport entry point
β”œβ”€β”€ tests/             # respx-mocked + @pytest.mark.live
└── .github/workflows/ # CI + OIDC PyPI publish

Known limitations

  • Registers live elsewhere: building/dwelling entities (EGID/EWID) belong to swiss-housing-mcp; this server is the spatial layer (zones, boundaries, heights). Deliberate separation to avoid twin servers.

  • The harmonised zoning layer (ch.are.bauzonen) is an ARE synthesis; legally binding is only the cantonal/communal Nutzungsplanung (noted in every geo_zoning_at response).

  • School-district polygons are municipal data (β†’ zurich-opendata-mcp), not federal; this server provides municipality boundaries, not Schulkreise.

  • geo_identify result counts are capped upstream; area-wide aggregations are out of scope here (see buildings_in_bbox in swiss-housing-mcp for the register case).

  • Coordinates must be LV95; WGS84 input fails fast with a pointer to geo_convert_coordinates.

Changelog

See CHANGELOG.md

Contributing

Contributions are welcome β€” see CONTRIBUTING.md for how to report bugs, suggest a new layer, or submit code.

Security

This is a read-only, no-PII, public-open-data server. See SECURITY.md for the security posture and how to report a vulnerability.

License

MIT License β€” see LICENSE. Data: Swiss federal geodata infrastructure (geo.admin.ch / swisstopo and publishing federal offices), open government data with attribution.

Author

malkreide Β· GitHub


Migration to swisstopo-mcp

Replace this server in your MCP client config:

// before
{ "swiss-geodata": { "command": "uvx", "args": ["swiss-geodata-mcp"] } }
// after
{ "swisstopo":     { "command": "uvx", "args": ["swisstopo-mcp"] } }

Tool mapping

this server

swisstopo-mcp

note

geo_search_layers

swisstopo_search_layers

β€”

geo_identify

swisstopo_identify_features

β€”

geo_find

swisstopo_find_features

β€”

geo_height

swisstopo_get_height

β€”

geo_elevation_profile

swisstopo_elevation_profile

takes a coordinate string; set coordinate_system="lv95" for LV95 support points

geo_zoning_at

swisstopo_zoning_at

the non-binding ARE caveat now travels on every result record

geo_municipality_at

swisstopo_municipality_at

BFS number is named bfs_commune_number and normalised to int

geo_layer_info

swisstopo_layer_info

β€”

geo_convert_coordinates

swisstopo_convert_coordinates

same direction values; same REFRAME service

Two differences worth knowing

Coordinates. This server was LV95-only and rejected WGS84. swisstopo-mcp accepts either lat/lon (WGS84) or easting/northing (LV95) on the point-based tools β€” pass one pair, not both. Existing LV95 call sites keep working; the argument names are the same.

Response shape. This server returned a JSON string (GeoEnvelope) with the payload under result. swisstopo-mcp returns a structured ToolResponse: records live in results (plural, always a list), with count, match_type, source, license and a Markdown summary alongside. Code that parsed result needs to read results.

Available Tools

9 tools
geo_convert_coordinatesA
Read-only

Convert coordinates between WGS84 (lon/lat) and LV95 (geodesy.geo.admin.ch reframe).

For 'wgs84_to_lv95', easting=longitude and northing=latitude. Data source: swisstopo reframe service.

ParametersJSON Schema
NameRequiredDescriptionDefault
paramsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations provide readOnlyHint=true, so the safety profile is covered. The description adds the data source (swisstopo reframe service) and the easting/northing conventional mapping, which adds some context. However, it doesn't disclose output format, error behavior, or accuracy/precision details. With readOnlyHint=true covering the read-only nature, a 3 is appropriate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences with zero waste. The first sentence states the core purpose, the second clarifies the critical easting/northing mapping detail for WGS84 direction. No redundant phrasing.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The operation is a simple stateless coordinate conversion with clear annotations (readOnlyHint=true, idempotentHint=false). The description plus schema fully cover what the agent needs. The easting/northing mapping clarification and data source reference are valuable additions. An output schema exists, so return format details are not the description's burden.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% for the top-level 'params' parameter, but the nested schema fields (easting, northing, direction) each have thorough descriptions explaining the LV95 vs WGS84 duality. The description adds the critical clarification that for wgs84_to_lv95, easting=longitude and northing=latitude, which complements the schema. Since the schema itself is rich, the description's incremental value is moderate β€” a 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb+resource: 'Convert coordinates between WGS84 (lon/lat) and LV95'. Clearly distinguishes from siblings β€” none of the sibling tools (geo_search_layers, geo_height, geo_identify, etc.) deal with coordinate conversion, so this tool's purpose is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains the direction semantics ('for wgs84_to_lv95, easting=longitude and northing=latitude') and names the data source, providing clear operational context. However, it doesn't explicitly state when to use this vs an alternative or mention exclusions/limitations (e.g., no elevation handling β€” which is covered by sibling geo_height). Usage context is implied but not explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

geo_elevation_profileB
Read-only

Elevation profile along a line between two LV95 points (geo.admin.ch profile service).

ParametersJSON Schema
NameRequiredDescriptionDefault
paramsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint=true, destructiveHint=false, idempotentHint=false, openWorldHint=true. The description adds the LV95 coordinate system constraint and the 'profile service' nature, which is useful context beyond annotations. However, it doesn't disclose behaviors like the number of sample points (covered by schema), service limits, or what happens with out-of-Switzerland coordinates.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single sentence, front-loaded with purpose. It's efficient and wastes no words, though it could arguably include more substance in the same space (e.g., mentioning nb_points or output format). For a one-line description, it's acceptable but minimal.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return-value documentation burden is reduced. The description explains the coordinate system (LV95) and the service (geo.admin.ch). However, with 0% schema description coverage and no parameter detail in the description, the agent must rely entirely on field-level hints in the schema for the 4 coordinates plus nb_points. The description is adequate but not rich for a tool with this many semantic parameters.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%. The description does not compensate by explaining any parameters. The 'params' wrapper object contains 4 required coordinates plus a default nb_points, but the tool description provides zero parameter-level detail beyond what the schema states. The description only mentions 'two LV95 points' generically without explaining easter/northing structure or the nb_points control.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states 'Elevation profile along a line between two LV95 points' with a specific verb (profile) and resource (elevation along a line). It clearly names the geo.admin.ch profile service as the backend. However, it doesn't explicitly distinguish from sibling tools like geo_height, though the purpose is distinct enough that a capable agent would infer the difference.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage context (elevation profile for line segments between two LV95 coordinates) but provides no explicit 'when to use' or 'when not to use' guidance. It doesn't mention alternatives such as geo_height for single-point elevation queries, nor does it state when choosing between these tools would be appropriate.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

geo_findA
Read-only

Find features on a layer by attribute value (geo.admin.ch MapServer find).

Use geo_layer_info first to see a layer's queryable fields. Data source: geo.admin.ch MapServer.

ParametersJSON Schema
NameRequiredDescriptionDefault
paramsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, openWorldHint=true, destructiveHint=false, covering the safety profile. The description adds meaningful context: the data source (geo.admin.ch MapServer find), which helps set expectations about the underlying service. It doesn't describe pagination or error behaviors, but for a read-only query tool with solid annotations, this adds appropriate value beyond the structured fields.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences, tightly focused. The first sentence states the purpose; the second provides the key prerequisite (geo_layer_info) and source. Zero filler or redundancy β€” every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Has an output schema, so return-value documentation isn't needed in the description. The 1-parameter nested input with full schema documentation and the geo_layer_info prerequisite cover the essential usage context. It doesn't mention query syntax specifics (wildcards, exact-match behavior), but for a straightforward find tool with an output schema and good annotations, this is reasonably complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, meaning the description must compensate. It mentions 'by attribute value' and names the data source, but all three parameters (search_field, search_text, limit) are fully described in the schema with examples and defaults. The schema carries the heavy lifting for parameter explanation; the description offers only marginal framing value.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clear verb+resource+mechanism: 'Find features on a layer by attribute value' with an explicit backend source (geo.admin.ch MapServer find). The description distinguishes this from siblings like geo_identify (point-based) and geo_zoning_at (location-based) by stating it searches by attribute value. The purpose is fully specific.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description advises using geo_layer_info first to see queryable fields, providing a clear prerequisite for usage. It identifies the data source context. However, it doesn't explicitly state when NOT to use this tool or name specific alternative tools for exclusion, though the prerequisite guidance is genuinely helpful context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

geo_heightA
Read-only

Terrain height (m a.s.l.) at an LV95 point (swissALTI3D height service).

ParametersJSON Schema
NameRequiredDescriptionDefault
paramsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, destructiveHint=false, idempotentHint=false, and openWorldHint=true. The description adds the LV95 coordinate system requirement and the swissALTI3D data source, which is useful context beyond annotations. Specifying 'm a.s.l.' clarifies the height datum format.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One concise sentence, zero waste. Front-loads the purpose well. Though it's arguably too terse given zero parameter coverage and a single parameter that is itself a nested object.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The output schema exists (though not shown in full here), annotations cover safety profile, and the core behavior (single point height query) is straightforward. For a simple point-lookup tool this is reasonably complete. Main gap is not explaining that the 'params' argument is the point object, but the schema handles that.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, and the description says nothing about the parameters directly. The schema itself has well-documented params (easting/northing with examples), so the schema does heavy lifting here. But since coverage is 0%, the description doesn't compensate at all - it never mentions that the single 'params' object requires easting and northing coordinates.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clear verb+resource: returns terrain height at a point in LV95 coordinate system, sourced from swissALTI3D service. It's specific and unambiguous. However, it doesn't explicitly distinguish from sibling geo_elevation_profile (which is profile, not single point) or geo_identify, though the 'at an LV95 point' scoping is fairly clear.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies use case: get a single height value at a coordinate point. It is close to sibling geo_elevation_profile but doesn't explicitly state when to use this vs the profile tool. No when-not-to-use or explicit alternatives given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

geo_identifyA
Read-only

What is at this LV95 point on a given layer? (geo.admin.ch MapServer identify).

Returns the feature attributes at the point. An empty result is a soft miss (nothing at that location), not an error. Data source: geo.admin.ch MapServer.

ParametersJSON Schema
NameRequiredDescriptionDefault
paramsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, openWorldHint=true, idempotentHint=false, destructiveHint=false, so the safety profile is well covered. The description adds useful context about soft-miss vs error semantics, which is genuinely valuable beyond annotations. However, it doesn't disclose behavior around tolerance/limit effects, result count caps, or coordinate system assumptions beyond what annotations and schema provide.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact (three sentences) and front-loaded with the essential question it answers. Every sentence adds value: the purpose, the soft-miss interpretation, and the data source. No wasted words or redundancy with schema/annotations.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has an output schema present, so return format doesn't need explanation. The soft-miss behavior and LV95 framing are well covered, which addresses the main interpretational risks. However, given the nested params structure with 5 fields at 0% schema coverage, the description could note which fields are required (layer, easting, northing) and which are optional (limit, tolerance), though the schema's required list partially covers this.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so there are no inline parameter descriptions to compensate. However, the tool has zero parameters at the top level (the actual params live in a nested 'params' object) β€” the nested IdentifyInput has 5 fields but the description doesn't elaborate on them. The description does provide partial semantic context (LV95 coordinate system) in the main text. With an output schema present and the LV95 framing, a baseline 3 is appropriate, though more per-parameter detail would help.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: identifies feature attributes at an LV95 point on a given layer via geo.admin.ch MapServer. It uses specific verb+resource and distinguishes from siblings (identify vs search/height/layer discovery). The first line frames the question 'What is at this LV95 point on a given layer?' which is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives helpful usage nuance: notes that an empty result is a soft miss (nothing at that location), not an error, which guides interpretation. It also names the data source and implicitly distinguishes from geo_search_layers (which finds layer ids) and geo_find. However, it doesn't explicitly state when NOT to use this tool versus the sibling identify-like tools (geo_municipality_at, geo_zoning_at), missing explicit exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

geo_layer_infoA
Read-only

Queryable fields and legend (plain text) for a layer (geo.admin.ch MapServer).

Reveals the fields you can pass to geo_find as search_field. Data source: geo.admin.ch MapServer.

ParametersJSON Schema
NameRequiredDescriptionDefault
paramsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, openWorldHint=true, and destructiveHint=false, covering the safety profile. The description adds that it returns plain-text legend and queryable fields, which is some additional context, though it doesn't detail the exact output structure or any data source nuances beyond naming the MapServer.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loaded with the primary purpose in the first sentence. It's a few short sentences with no filler, effectively conveying the tool's function and connection to a sibling in minimal space.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With a single parameter, readOnly/openWorld annotations, and an output schema present, the description covers the essential need. It explains the return (fields and legend), connects to geo_find usage, and names the data source. The output schema handles return-value details, so the description doesn't need to.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There is a single parameter with 0% schema description coverage, so the description carries the burden. It does explain that 'layer' is a layer id (with example in the schema 'ch.are.bauzonen'), and the description clarifies the fields come from geo.admin.ch MapServer. The description adds context that the layer's fields are queryable for geo_find, but doesn't elaborate on the legend format.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a clear verb+resource ('Queryable fields and legend (plain text) for a layer') and ties it to the geo.admin.ch MapServer source. It distinguishes itself by mentioning the fields can be used with geo_find, but doesn't explicitly contrast against siblings like geo_search_layers.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains the tool reveals fields that can be passed to geo_find as search_field, which gives clear usage context and connects it to a sibling tool. However, it doesn't explicitly state when NOT to use this tool or list alternative scenarios.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

geo_municipality_atA
Read-only

Municipality, BFS number and canton containing an LV95 point (swissBOUNDARIES3D).

The BFS number bridges to the register and statistics servers (swiss-housing-mcp, swiss-statistics-mcp). Data source: swissBOUNDARIES3D.

ParametersJSON Schema
NameRequiredDescriptionDefault
paramsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, openWorldHint=true, and destructiveHint=false, covering the safety profile. The description adds value by noting the data source (swissBOUNDARIES3D) and the BFS-number bridging usage. It does not describe edge cases like points outside Switzerland or at boundaries, which would be useful, but annotations carry the main burden here.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three sentences with zero waste. The first sentence states the core action and output, the second provides integration/bridging context, and the third cites the data source. Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is simple (one point input, well-documented nested schema, read-only), and the description covers the core purpose plus integration value. An output schema exists, so return-format explanation is unnecessary. Could note boundary/outside-Switzerland behavior for completeness, but for a straightforward geospatial lookup with annotations and schema coverage, this is adequate.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% for the top-level params field, but the nested PointInput schema itself has descriptions for easting and northing with example values (2683531, 1247914). The description clarifies the coordinate system (LV95) and confirms both parameters are used for the point lookup. Since the nested schema already documents the parameters well, the description adds marginal value beyond reinforcing the LV95 context.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states exactly what the tool does: returns 'Municipality, BFS number and canton' for a given LV95 point, sourced from swissBOUNDARIES3D. It uses a specific verb+resource structure and clearly distinguishes this from siblings like geo_height (elevation) and geo_zoning_at (zoning) by specifying the geographic lookup behavior.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly specifies this is a point-based lookup (LV95/CH1903+ coordinates), and the mention of the BFS number bridging to register/statistics servers gives useful cross-tool context. While it doesn't explicitly name alternatives or exclusions, the LV95 coordinate requirement implicitly distinguishes it from coordinate-conversion siblings. No explicit 'when-not-to-use' is given, but the geographic lookup purpose is unambiguous.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

geo_search_layersA
Read-only

Keyword-search the ~700-layer federal geodata catalogue (geo.admin.ch SearchServer).

The discovery entry point: returns matching layer ids you can then pass to geo_identify, geo_find or geo_layer_info. Data source: geo.admin.ch SearchServer.

ParametersJSON Schema
NameRequiredDescriptionDefault
paramsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=true, covering the safety and scope profile. The description adds the ~700-layer catalogue scope and the data source (geo.admin.ch SearchServer), which is useful context. However, it doesn't describe pagination, ordering, or whether results are sorted by relevance. With solid annotations in place, a 3 is appropriate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short paragraphs, well front-loaded with the core purpose in the first sentence. The second paragraph adds one valuable line about its pipeline role and one about the data source. Zero waste, every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple discovery/search tool with one required param and a default limit, the description is largely complete. It covers purpose, pipeline role, and data source. It could slightly improve by noting result format details or relevance sorting, but the presence of an output schema relieves the description of explaining return value structure. Minor gap in usage nuance keeps it from a 5.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate, but the two parameters (query, limit) are already well-described in the schema itself (query: 'Keyword(s) to search the layer catalogue'; limit: 'Maximum layers to return', with min/max bounds). The description adds the catalogue scale context but no additional parameter semantics beyond the schema. Baseline 3 is appropriate given the schema carries the load.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states the verb+resource: 'Keyword-search the ~700-layer federal geodata catalogue'. It explicitly frames itself as 'the discovery entry point' returning layer ids for downstream tools, distinguishing it from geo_identify, geo_find, and geo_layer_info by naming them as consumers of its output. This is specific and actionable.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly positions this as the discovery entry point and names the exact downstream tools (geo_identify, geo_find, geo_layer_info) that accept its returned ids, giving clear when-to-use guidance. It explains its role in the pipeline relative to the sibling tools, which all appear to operate on already-identified layers.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

geo_zoning_atB
Read-only

Harmonised building zone(s) at an LV95 point (ch.are.bauzonen, ARE).

Returns the harmonised main-use zone type. Data source: ch.are.bauzonen.

ParametersJSON Schema
NameRequiredDescriptionDefault
paramsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint=true, openWorldHint=true, idempotentHint=false, destructiveHint=false, which the description does not contradict. The description adds the data source note (ch.are.bauzonen) and clarifies it returns the 'main-use' zone type. However, it doesn't explain behavior for points outside zoning-covered areas given openWorldHint=true, or detail what happens when no zone exists at the point. With readOnlyHint already declared, some credit for adding data-source context; score 3 is fair.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short paragraphs, one introductory sentence and one return-value sentence. Zero filler or repetition. Could possibly add usage guidance without becoming verbose, but current size is appropriately economical.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present and readOnly annotations set, the tool is reasonably complete for a point-query tool, but openWorldHint=true signals incomplete data that the description could address. It doesn't state what happens at points with no zoning, which is a meaningful gap for a location-based query where unsupported areas likely exist.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% for the nested params, so the description carries the burden. The description mentions LV95 coordinates in its opening phrase, but the schema already documents easting/northing fields with examples. The description does not explain coordinate formats or conventions beyond what the schema states, and does not clarify units or precision expectations for LV95 points.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states it returns 'the harmonised main-use zone type' at an LV95 point, with a specific verb+resource ('building zone(s) at a point'). It names the data source (ch.are.bauzonen, ARE) which adds specificity. It could better distinguish from siblings like geo_municipality_at, but the phrase 'harmonised building zone type' is reasonably clear.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives like geo_identify or geo_municipality_at. It doesn't mention what the openWorldHint implies (data may be incomplete outside certain areas), nor does it state that it requires LV95 coordinates as a prerequisite (which is instead learned from the schema). No exclusions or conditions are given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 9 tool updatesv0.2.0
    • First observedgeo_convert_coordinates
    • First observedgeo_elevation_profile
    • First observedgeo_find
    • First observedgeo_height
    • First observedgeo_identify
    • First observedgeo_layer_info
    • First observedgeo_municipality_at
    • First observedgeo_search_layers
    • First observedgeo_zoning_at

TDQS

A3.7/5.0
Disambiguation5/5

Each tool targets a distinct operation: catalog search, point height, feature identification, attribute find, municipality lookup, zoning lookup, elevation profile, layer metadata, coordinate conversion. The geo_* prefix plus the typed suffix makes each tool's purpose unambiguous, and even the related point-lookup tools (identify, municipality, zoning) are clearly differentiated by what they return.

Naming Consistency4/5

The geo_ prefix is consistent throughout, but the second half mixes nouns (_layer, _height, _identify, _find, _municipality_at, _zoning_at, _elevation_profile, _layer_info, _convert_coordinates). Most tools use a clear noun/action, though identifications/discovery verbs vary. Overall the pattern is predictable and readable.

Tool Count5/5

9 tools is well-scoped for a swiss geodata server covering discovery, lookup, spatial analysis, and coordinate handling. Each tool handles a distinct geodata workflow and none feels redundant or extraneous.

Completeness4/5

The surface covers discovery (search_layers, layer_info), point queries (identify, height, municipality, zoning), feature search (find), geometry analysis (elevation_profile), and coordinate conversion. Minor gaps include no distance/area measurement, no bounding-box search on features, and no direct feature geometry/vector download, but the core spatial query workflows are covered without dead ends.

Maintenance

ActivitySlowing
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    F
    maintenance
    An experimental MCP server providing spatial context for LLMs by interfacing with French Geoplateforme services. It enables tasks such as geocoding, altitude lookups, and querying administrative, cadastral, or urban planning data.
    12
    4
    MIT
  • A
    license
    B
    quality
    A
    maintenance
    An MCP server providing AI-powered access to Open Data from the City of Zurich, enabling queries to 900+ datasets, real-time environmental and mobility data, geodata, parliamentary proceedings, and more.
    26
    8
    MIT

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/malkreide/swiss-geodata-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server