MCP server proxy for SL (Stockholms Lokaltrafik) APIs
Config is the same across clients — only the file and path differ.
{
"mcpServers": {
"sl-mcp-server": {
"command": "<see-readme>",
"args": []
}
}
}Are you the author?
Add this badge to your README to show your security score and help users find safe servers.
An MCP server for Stockholm's public transit (SL). Gives AI assistants access to real-time departures, trip planning, deviations, and more via SL's open APIs.
No automated test available for this server. Check the GitHub README for setup instructions.
Five weighted categories — click any category to see the underlying evidence.
No known CVEs.
No package registry to scan.
Be the first to review
Have you used this server?
Share your experience — it helps other developers decide.
Sign in to write a review.
Others in maps
Real-time BART departures, trip planning, fares, stations, and advisories.
A Model Context Protocol (MCP) server providing TomTom's location services, search, routing, and traffic data to AI agents.
MCP server for the VesselAPI — maritime vessel tracking, port events, emissions, and navigation data
Global weather API: forecasts, historical data, marine, ski, astronomy and timezone.
MCP Security Weekly
Get CVE alerts and security updates for Sl Mcp Server and similar servers.
Start a conversation
Ask a question, share a tip, or report an issue.
Sign in to join the discussion.
An MCP server for Stockholm's public transit (SL). Gives AI assistants access to real-time departures, trip planning, deviations, and more via SL's open APIs.
Hosted on Runway at https://sl-mcp-server.pqapp.dev
| Tool | What it does |
|---|---|
trips | Plan a trip between two locations, with active deviations attached to each leg |
departures | Real-time departures from a stop, with in-process filters |
deviations | Traffic disruptions, with opt-in facility (lift/escalator) alerts |
resolve | Turn a free-text name into a canonical site id (all three forms) |
nearest_stops | Find the closest stops to a lat/lon coordinate |
stop_finder | Fuzzy name search across stops, addresses, POIs |
sites | Enumerate SL's ~6500-entry site catalog with substring filter |
lines | Enumerate SL's ~600-entry line catalog with mode / designation filters |
stop_points | Individual platforms, quays, and stands within a site |
transport_authorities | List transport authorities in the region |
system_info | Timetable validity period |
Every tool that returns a large payload has a verbose=false default slim shape and a verbose=true escape hatch for the raw upstream data.
SL hands out four id forms for the same stop; all are interchangeable at the server boundary:
9702 for Jakobsberg. Returned by sites, resolve.best.short_id, nearest_stops.18009702. Returned by stop_finder.properties.stopId, resolve.best.gid_180.300109702. Documented by Trafiklab.9091001000009702. Returned by stop_finder.id, resolve.best.gid_16, and echoed in trips.resolved.Every tool that takes a site parameter (departures.site_id, deviations.site, trips.origin_id / destination_id) normalizes all four forms. Pass 16-digit GIDs as strings — they exceed JS Number.MAX_SAFE_INTEGER and lose precision if passed as numbers.
tripsPlan a trip between two locations. Returns a trimmed, LLM-friendly summary by default; pass verbose=true for the full upstream payload. Every successful response carries a resolved block echoing the actual origin/destination the planner used so callers can detect silent drift.
| Param | Type | Notes |
|---|---|---|
origin | string | Stop/location name. Exactly one of origin / origin_id per side. |
origin_id | string | Any site-id form (see above). Bypasses fuzzy name resolution. Prefer this when you have it. |
destination | string | Same rules as origin. |
destination_id | string | Same rules as origin_id. |
number_of_trips | number | 1–3, default 3. |
time | string | ISO 8601, e.g. 2026-04-22T09:00:00+02:00. Defaults to now. |
time_mode | depart | arrive | Default depart. Only meaningful with time. |
verbose | bool | Default false. Return the raw upstream response (coords, stopSequence, footpath details). |
skip_deviations | bool | Default false. Skip the second /v1/messages call that attaches active deviations to each transit leg. |
Trimmed response shape:
{
"journeys": [
{
"duration": 1860,
"interchanges": 1,
"summary": "Buss 179 → Pendeltåg 43",
"departure": "2026-04-21T21:03:00+02:00",
"arrival": "2026-04-21T21:34:00+02:00",
"legs": [
{
"mode": "bus",
"line": "179",
"direction": "Sollentuna station",
"from": "Vällingby",
"to": "Spånga station",
"departure": "2026-
... [View full README on GitHub](https://github.com/henrrrik/sl-mcp-server#readme)