MCP server for Kartverket's open APIs: Norwegian addresses, place names, and elevation data.
Four well-named, read-only tools with clear descriptions (avg 180 chars, within baseline 194). All tools have complete input schemas with proper types, ranges, and defaults. Naming follows verb_noun pattern (search_*, address_at_point, elevation_at_point). Descriptions explain WHAT, WHEN, and WHAT IS RETURNED. Output schemas are implicitly documented via formatters. Key gaps: no tool annotations (readOnlyHint missing despite all being read-only), no output schema formally declared in tool definitions, and error handling is minimal (generic McpError without recovery guidance). Parameters are well-constrained (min/max on limit/radius). No security issues (read-only, no secrets). Composition is clean, each tool has one responsibility.
Reverse geocode: find the addresses closest to a latitude/longitude in Norway. Use when the user has coordinates and wants to know what is there.
Get ground elevation in metres at a coordinate in Norway, from the national 1m digital terrain model. Returns elevation above sea level and the terrain type (open ground, forest, water, etc.).
Search Norwegian addresses by free text. Returns matching addresses with coordinates (EPSG:4258 / WGS84), postcode, postal area, municipality, and cadastre number (gårdsnummer/bruksnummer). Use when the user gives a street name or a full or partial address and needs the canonical record.
Search Norway's official place-name registry (Sentralt stedsnavnregister / SSR). Covers farms, islands, mountains, fjords, lakes, urban areas, and other named natural features — not street addresses. Use for named places that aren't street addresses.
No tool annotations (readOnlyHint) despite all tools being read-only. LLMs cannot infer safety from tool names alone.
Output schemas not formally documented in tool definitions. Formatters (formatAddresses, formatPlacenames, formatElevation) exist but are not exposed as schema declarations. LLMs cannot plan downstream calls without knowing return structure.
Error handling is generic (McpError with ErrorCode.InternalError). No recovery guidance. E.g., 'Geonorge 404' tells LLM nothing about whether to retry, call a different tool, or ask user.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 63 | 2026-07-28+ | v2 |
Parameter descriptions lack format/constraint details. E.g., 'Latitude (EPSG:4258 / WGS84)' does not specify valid range (-90 to 90). LLMs may pass out-of-range values.
elevation_at_point returns error object on no data ('error': '...') instead of structured error. Inconsistent with other tools' error handling via McpError.