norway-location-transport-mcp
norway-location-transport-mcp
Ein MCP-Server, der KI-Agenten strukturierten Zugriff auf norwegische öffentliche Verkehrs- und Geodaten bietet, über die kostenlosen Entur- und Kartverket / Geonorge-APIs.
Die beiden Quellen ergänzen sich: Reiseplanung benötigt Geokodierung, Höhenangaben benötigen Adressauflösung, und Verwaltungssuchen verbinden Koordinaten mit Orten. Ein Server beantwortet praktische lokale Fragen – „Wie komme ich von hier nach Bergen?“, „Wie hoch ist die Höhe entlang dieser Wanderung?“, „In welcher Kommune liegt diese Adresse?“, „Gibt es E-Scooter in der Nähe?“.
Beide Datenquellen sind kostenlos, ohne kostenpflichtige Stufen und ohne API-Schlüssel. Entur erfordert nur einen selbstidentifizierenden ET-Client-Name-Header (siehe unten); Kartverket erfordert nichts.
Tools
Standort & Geodaten (Kartverket)
search_address(query?, street?, number?, postal_code?, municipality_number?, max_results)— durchsucht offizielle Adressen nach Freitext oder Feldern; unterstützt den*-Platzhalter. Gibt Koordinaten und Katasternummern zurück.find_addresses_near(latitude, longitude, radius_m, max_results)— alle Adressen innerhalb eines Radius um einen Punkt, mit Entfernungen.validate_address(address)— validiert und normalisiert eine Freitext-Adresse (fuzzy). Gibtvalid, die normalisierte Übereinstimmung und Alternativen zurück.search_place_names(query, max_results)— durchsucht offizielle Ortsnamen; gibt Feature-Typ (Fjell, Innsjø, …), Kommune, Fylke und Koordinaten zurück. Unterstützt*.find_place_names_near(latitude, longitude, radius_m, max_results)— nächste benannte Features zu einem Punkt, mit Entfernungen.get_elevation(latitude, longitude)— Geländehöhe aus dem nationalen Höhenmodell (DTM).get_elevation_profile(path, samples)— Höhenprofil entlang eines Pfads; gibt das Profil plus Gesamtdistanz, Aufstieg und Abstieg zurück.transform_coordinates(x, y, from_epsg, to_epsg)— konvertiert zwischen Referenzsystemen (z. B. WGS84 4326 → UTM33 25833).lookup_admin_unit(latitude?, longitude?, address?)— in welcher Kommune und welchem Fylke eine Koordinate oder Adresse liegt, mit offiziellen Codes.lookup_property(address?, latitude?, longitude?, max_results)— Kataster- (matrikkel) Identifikatoren (kommune / gnr / bnr / fnr) über das offene Adressregister.
Öffentlicher Verkehr (Entur)
resolve_stop_place(query, max_results)— löst einen Ort oder eine Adresse in Entur-Stopp-Orts-IDs auf.find_stops_near(latitude, longitude, radius_m, max_results)— Reverse-Geokodierung einer Koordinate zu den nächsten Stopp-Orten.plan_trip(from_place?/from_latitude/from_longitude, to_place?/to_latitude/to_longitude, date_time?, arrive_by?, transport_modes?, walk_speed?, num_trip_patterns)— plant eine Punkt-zu-Punkt-Reise; filtert nach Verkehrsmittel und Gehgeschwindigkeit. Gibt Reisemuster mit Etappen, Verkehrsmitteln, Dauern und Echtzeitzeiten zurück.get_departures(stop_place_id, count)— nächste Abfahrten von einem Stopp, mit Echtzeitverspätungen, Stornierungen und Bahnsteig.get_realtime_status(stop_place_id? | line_id?)— Echtzeit-Status: für einen Stopp, pünktlich/verspätet/storniert Zählungen; für eine Linie, aktive Fahrzeuge und Verspätungen.get_stop_accessibility(stop_place_id)— Rollstuhlzugang pro Bahnsteig und eine Zusammenfassung. (Siehe Hinweis zur Barrierefreiheit unten.)list_quays(stop_place_id)— alle Bahnsteige (Plattformen) an einem Stopp, mit Codes und Koordinaten.get_fare_zones(stop_place_id)— die Tarifzone(n), zu denen ein Stopp gehört.find_shared_vehicles(latitude, longitude, range_m, form_factors?, count)— frei schwebende geteilte Fahrzeuge (Fahrräder, E-Scooter, Autos, Mopeds) über alle Betreiber.find_docking_stations(latitude, longitude, range_m, count)— Dockingstationen mit verfügbaren Fahrzeugen und freien Docks.get_vehicle_positions(codespace_id?, line_id?, max_results)— Live-Fahrzeugpositionen mit Peilung, Geschwindigkeit und Verspätung.
Tool-Definitionen befinden sich in src/kartverket.ts und src/entur.ts, kombiniert in src/tools.ts und werden von beiden Einstiegspunkten (stdio und HTTP) gemeinsam genutzt.
Setup
npm install
npm run build
npm testnpm test startet den Server über stdio und ruft jedes Tool gegen die Live-APIs auf.
Ausführen
Über stdio (für die meisten MCP-Clients):
node dist/index.jsÜber Streamable HTTP (für HTTP-basierte Clients):
node dist/http.js
# listens on http://localhost:3000/mcp (override with PORT)Die Entur-Client-Name-Anforderung
Enturs Bedingungen verlangen, dass jede Anfrage einen identifizierenden ET-Client-Name-Header trägt, formatiert wie company-app. Dieser Server sendet bei jeder Entur-Anfrage einen solchen. Setzen Sie Ihren eigenen Wert mit der Umgebungsvariable ET_CLIENT_NAME:
ET_CLIENT_NAME="acme-travelbot" node dist/index.jsWenn nicht gesetzt, wird ein Paketstandard verwendet. Kartverket benötigt keinen Header oder Schlüssel.
Verwendung mit Claude Code
claude mcp add norway -- node C:\Users\trond\norway-location-transport-mcp\dist\index.jsFragen Sie dann zum Beispiel: „Planen Sie eine Reise von Oslo S nach Bergen und nennen Sie mir die Höhe des Galdhøpiggen.“
Remote-Version (Cloudflare Workers)
worker/ enthält eine Remote-Bereitstellung: dieselben 21 Tools, bereitgestellt über MCP Streamable HTTP, sodass der Server als claude.ai-Connector hinzugefügt werden kann. Er teilt die Tool-Definitionen mit dem lokalen Server (src/tools.ts nimmt z als Parameter, funktioniert also sowohl mit dem lokalen MCP SDK v1 / zod 3 als auch mit dem SDK v2 / zod 4 des Workers).
cd worker
npm install
npm run dev # local test at http://127.0.0.1:8787/mcp
node test-http.mjsBereitstellen (erfordert ein Cloudflare-Konto und wrangler login):
cd worker
npm run deploySetzen Sie Ihren Entur-Client-Namen als Worker-Variable:
cd worker
npx wrangler secret put ET_CLIENT_NAMENach der Bereitstellung fügen Sie den remotes-Eintrag mit Ihrer workers.dev-URL zu server.json hinzu.
Beispielaufrufe
Nächste Abfahrten von Oslo S abrufen:
{ "name": "get_departures", "arguments": { "stop_place_id": "NSR:StopPlace:59872", "count": 5 } }Eine reine Bus-/Straßenbahn-Reise mit festgelegter Gehgeschwindigkeit planen:
{ "name": "plan_trip", "arguments": {
"from_place": "NSR:StopPlace:59872",
"to_latitude": 59.95, "to_longitude": 10.78,
"transport_modes": ["bus", "tram"], "walk_speed": 1.4
} }Höhenprofil entlang eines kurzen Pfads:
{ "name": "get_elevation_profile", "arguments": {
"path": [{ "latitude": 61.636, "longitude": 8.312 }, { "latitude": 61.64, "longitude": 8.32 }],
"samples": 20
} }Eine WGS84-Koordinate in UTM33 konvertieren:
{ "name": "transform_coordinates", "arguments": { "x": 10.7461, "y": 59.9127, "from_epsg": 4326, "to_epsg": 25833 } }Hinweise und Grenzen
Koordinaten sind überall WGS84-Breitengrad/Längengrad. Die Kartverket-APIs werden mit EPSG 4326 abgefragt, damit die Zahlen übereinstimmen; EUREF89 (4258) weicht in Norwegen um deutlich weniger als einen Meter ab.
Barrierefreiheit: Enturs kostenloser JourneyPlanner bietet Rollstuhlzugang pro Bahnsteig. Detailliertere Ausstattungsinformationen (Aufzüge, taktile Leitsysteme) sind nur in der authentifizierten Stopp-Register-API von Entur verfügbar und hier nicht enthalten; das Tool weist darauf hin.
Ratenbegrenzung von einer der beiden Quellen wird als klarer Fehler angezeigt, der den Agenten auffordert, es erneut zu versuchen.
Namensnennung: Daten von Kartverket / Geonorge und Entur stehen unter NLOD. Nennen Sie die Quellen, wenn Sie die Daten anzeigen.
So funktioniert es
src/index.tsspricht MCP über stdio (JSON-RPC auf stdin/stdout).src/http.tsspricht MCP über Streamable HTTP mit Sitzungsverwaltung. Beide erstellen denselben Server übersrc/server.ts.Jedes Tool deklariert ein Zod-Eingabeschema mit Beschreibungen, die das LLM direkt liest – keine externen Dokumente erforderlich, um ein Tool aufzurufen.
Ergebnisse sind JSON-Text, der auf das reduziert ist, was ein Agent benötigt, nicht die rohen Upstream-Payloads.
Schreiben Sie niemals mit
console.logauf stdout; das beschädigt das stdio-Protokoll. Loggen Sie auf stderr.
Lizenz
MIT © Trond Bjørøy. Daten © Kartverket und Entur, unter NLOD.
This server cannot be installed
Maintenance
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
Entur MCP — Norway public transport, nationwide, all modes (developer.entur.org)
Real-world data for agents: air quality, geocoding, quakes, holidays, web search
US weather, alerts, earthquakes and elevation for AI agents, from NWS/NOAA and USGS. No API keys.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/trondbjoroy/norway-location-transport-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server