Skip to main content
Glama

lux-nav

Open navigation for Luxembourg, built for people and AI agents: walking, cycling, e-bike, Vel'OH! bike share and public transport, with hill-aware timings, because Luxembourg is hilly.

  • MCP endpoint for AI agents: https://lux-nav.lisel-hub.workers.dev/mcp (Streamable HTTP, stateless, no sign-up)

  • REST API: the same host, under /v1/…

Unofficial project. Not affiliated with mobiliteit.lu, the public transport administration, Vel'OH!/JCDecaux or the City of Luxembourg.

For AI agents

Add the MCP endpoint as a remote MCP server in Claude, ChatGPT or any MCP client. The server supplies its own instructions; places can be names ("Hamilius", "Maison du Savoir, Belval") or lat,lon.

Tool

What it does

plan_trip

Compares walking, cycling, e-bike, Vel'OH! and public transport between two places: time, distance, climbing, live bikes and docks, next departures.

get_route

Turn-by-turn walking, cycling or e-bike directions, with climb, descent and elevation range.

search_places

Addresses, stops, buildings and landmarks in and around Luxembourg.

bike_share_near

Nearest Vel'OH! stations with live bikes, e-bikes and free docks.

departures_near

Live departures from the nearest bus, tram or train stop.

Example prompt: "I'm at the Gare and need to be at the Philharmonie in 20 minutes. Should I walk or take a Vel'OH!?"

Related MCP server: norway-location-transport-mcp

REST API

GET /v1/places?q=Hamilius&lang=en
GET /v1/reverse?at=lat,lon
GET /v1/plan?from=49.6000,6.1334&to=49.6185,6.1440[&modes=walk,bike,ebike,bikeshare,transit]
GET /v1/route?from=lat,lon&to=lat,lon&mode=walk|bike|ebike
GET /v1/bikeshare[?near=lat,lon]
GET /v1/departures?near=lat,lon

Responses are JSON. CORS is open, and each client may make 30 requests per minute.

How it works

lux-nav runs on Cloudflare Workers. It doesn't run its own routing engine; it combines open services and caches their responses:

Data

Source

Places

Photon (OpenStreetMap)

Walking and cycling routes

FOSSGIS OSRM (OpenStreetMap foot and bike profiles)

Elevation and climbing

Open-Meteo Elevation API

Vel'OH! availability

CityBikes

Live departures

mobiliteit-lu-mcp (mobiliteit.lu open data), called over MCP

Durations add an uphill penalty: about 1 minute per 10 m climbed on foot, per 12 m by bike, and per 40 m on an e-bike. E-bike riding is estimated 20 % faster than a regular bike. Vel'OH! bikes are electric-assisted and are timed that way.

Known limits

  • Public transport: mobiliteit.lu's open data provides departures but no journey planner, so lux-nav shows the nearest stop and its live departures, not a full bus or train itinerary.

  • Fair use: the upstream services are free, shared and rate-limited. At scale, lux-nav should run its own routing and geocoding instances; the provider modules in src/providers/ are built to be swapped.

Development

npm install
npx wrangler types
npm test
npx wrangler dev

Live departures need MOBILITEIT_MCP_TOKEN (a wrangler secret) for the endpoint configured in MOBILITEIT_MCP_URL.

Licence

Code: Apache-2.0. Data © OpenStreetMap contributors (ODbL) and the respective providers.

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables AI agents to access real-time public transport data for Moscow and the Moscow region, aggregating and reconciling information from multiple sources. Provides tools for finding stops, live arrival boards, vehicle tracking, route details, and ETA calculations.
    MIT
  • A
    license
    A
    quality
    C
    maintenance
    Enables AI agents to search for stops and stations across all Norwegian public transport and to fetch real-time departure data — planned versus expected times, delays, platform, operator, and disruption messages — with no API key required. Covers bus, tram, metro, train, and ferry nationwide through Entur's open APIs, with filtering by line, destination, and future departure time.
    2
    MIT