SL – Stockholm public transport

io.github.HashtagsmilePublished by GitHub account Hashtagsmilev0.2.0Updated Nov 4, 2026

Stockholm public transport (SL): live departures, trips to addresses with exits, disruptions.

VerifiedStreamable HTTPWeb executable

Overview

SL – Stockholm public transport's hosted MCP server (sl-mcp.miltonlindblad.workers.dev); no sign-in required; Streamable HTTP; 4 tools.

No AI overview yet: these facts come from the registry entry and the server itself.

Endpoint
sl-mcp.miltonlindblad.workers.dev
Last checked

Installation

In SourceWeft

  1. Open SL – Stockholm public transport in the dashboard and add it to a workspace.
  2. Enable the server for the chats that should use its tools.

Web executable via Streamable HTTP. Remote servers run from the web runtime once configured in a workspace.

Use with an agent

Paste this prompt into Claude Code, Codex, Cursor or another agent — or into SourceWeft chat. The agent reads this server's install guide, shows you its publisher, endpoint and sign-in, and adds it to your client once you agree. Keys never go into a command.

Read https://sourceweft.com/mcp/io.github.Hashtagsmile%2Fsl-mcp/install.md and connect the MCP server it describes to my client. Before changing any config, show me its publisher, endpoint and sign-in method and wait for my OK. Never put an API key in a command or in a file I would commit; ask me where it should come from.

Read the install guide the agent follows

Other MCP clients

Add this to your client's mcpServers config.

{
  "mcpServers": {
    "sl-stockholm-public-transport": {
      "type": "http",
      "url": "https://sl-mcp.miltonlindblad.workers.dev/mcp"
    }
  }
}

README

sl-mcp

[CI] [Release] [License: MIT] [sl-mcp MCP server score]

An MCP server for Stockholm public transport (SL). Connect it to Claude or another MCP client and ask about departures, disruptions and trips in plain Swedish or English.

När går nästa tunnelbana från Slussen mot Ropsten?Är det några störningar på röda linjen?How do I get from Odenplan to Arlanda?Hur tar jag mig från Sundbyberg till Götgatan 76?

It uses SL's open APIs, which don't need an API key.

An answer looks like this:

Gå 08:31 från Sundbybergs centrum, så är du framme på Götgatan 76 kl 08:58.

  1. 08:31 Tunnelbana 10 mot Kungsträdgården från spår 2. Åk 7 stationer till T-Centralen.
  2. 08:47 Byt till tunnelbana 17 mot Skarpnäck från spår 4. Åk 3 stationer till Medborgarplatsen.
  3. 08:52–08:58 Gå ut via uppgång Folkungagatan Götgatan och gå 6 min till Götgatan 76.

Use it without installing

A hosted server runs on Cloudflare Workers. No API key or login is needed:

https://sl-mcp.miltonlindblad.workers.dev/mcp

Add it as a custom connector in claude.ai or ChatGPT, or in any MCP client that supports Streamable HTTP. In Claude Code:

claude mcp add --transport http sl https://sl-mcp.miltonlindblad.workers.dev/mcp

Tools

  • find_stop: search for a stop by name, typos are fine, and get its id
  • get_departures: live departures from a stop with platform or bus stop letter, delays and cancellations. Filter by mode, line or destination
  • get_disruptions: announced disruptions such as track work, broken lifts and replacement buses, by line, mode or metro colour ("grön linje")
  • plan_trip: up to 3 trips between stops or street addresses, leaving or arriving at a given time. Each ride shows platform, stops, crowding and delay, and each walk shows minutes and which station exit to use. You can ask for only some modes (e.g. boat) and for fewest changes or least walking

Prompts

Ready-made questions to pick in your client, e.g. as slash commands:

  • trip: how to get from one place to another, optionally arriving by a given time
  • departures: the next departures from a stop

Install

Requires Node.js 20 or later.

git clone https://github.com/Hashtagsmile/sl-mcp.gitcd sl-mcpnpm installnpm run build

Claude Code

claude mcp add sl -- node /path/to/sl-mcp/dist/index.js

Claude Desktop

Add this to claude_desktop_config.json and restart Claude Desktop:

json
{  "mcpServers": {    "sl": {      "command": "node",      "args": ["/path/to/sl-mcp/dist/index.js"]    }  }}

Development

npm run dev       # compile on savenpm test          # run the testsnpm run inspect   # try the tools in the MCP Inspector

The tests use recorded API responses in test/fixtures/, so they don't call SL.

Deploy to Cloudflare Workers

src/worker.ts serves the same tools over HTTP at /mcp.

npx wrangler dev      # run it locally on http://localhost:8787/mcpnpx wrangler deploy   # deploy to your Cloudflare account

Limitations

  • SL returns at most 3 departures per line and direction.
  • Disruption messages are in Swedish only.
  • There is no "nearest stop" search, since SL has no keyless API for it.
  • SL can't plan step-free trips. For a wheelchair, the tools suggest least walking and checking for broken lifts.
  • Addresses work, business names don't: "Götgatan 76" works, "Sellpy" doesn't.
  • Departures reach at most 3 hours ahead. For later, use plan_trip with a time.

Data

Data from SL via Trafiklab.

License

MIT

Source: README.md at commit 9e695dc

Tools

4

find_stop

Find stop

Find Stockholm public transport (SL) stops by name and return their ids, names and transport modes. Use it to get the siteId for get_departures, or a stop id for plan_trip. Not for street addresses: pass those to plan_trip as text instead. A name can match several stops ('Arlanda' gives the train station and bus stops): pick by name and modes, or ask the user. Typos are fine, abbreviations are not: write 'Tekniska högskolan', not 'KTH'. Returns one line per stop: '<id>: <town>, <name> (<modes>)'.

Parameterslimitqueryrequired

get_departures

Get departures

List live departures from one SL stop, soonest first: line, mode, final destination, direction (1 or 2), platform or bus stop letter, minutes or clock time, delay, cancellation and SL's notes. Use it for 'when does the next X leave from Y'. To get from A to B, use plan_trip; for announced track work or broken lifts, use get_disruptions. Real-time data from SL: at most 3 departures per line and direction, up to 3 hours ahead. `towards` matches the final destination only: for a station on the way (e.g. 'mot T-Centralen' from Slussen), leave it out and pick the direction from the results. An unknown siteId gives no departures, not an error.

ParameterslinelimitsiteIdrequiredminutestowardstransportMode

get_disruptions

Get disruptions

List disruptions SL has announced: track work, closed entrances, broken lifts and replacement buses, with the lines affected and until when. Use it to check a line or the stops of a trip before travelling, e.g. lifts for a wheelchair. For live delays and cancelled departures, use get_departures instead. The text is in Swedish, so translate it if needed, and is cut at 800 characters. Results are cached for 1 minute, as SL asks. Leave both filters out to list everything.

ParameterslinestransportMode

plan_trip

Plan trip

Plan trips by SL public transport between two stops or street addresses, leaving or arriving at a given time. Returns up to 3 trips, plus walking all the way when that takes at most 30 min. Each ride lists line, direction, platform, stops, crowding and delay; each walk lists minutes and the station exit (uppgång). Use it for 'how do I get to X' and 'when must I leave'; for departures from one stop, use get_departures. Addresses are fuzzy matched, so the result starts with what each one matched. Times are Stockholm time. Unknown stops, the same stop twice and times outside the timetable give a clear error. SL cannot plan step-free trips: for a wheelchair or pram, use prefer 'least walking' and check get_disruptions for broken lifts at the stops.

ParameterstorequiredfromrequiredtimemodespreferarriveBy

Version history

1
  1. v0.2.0LatestNov 4, 2026

Score

100% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 daysRequired25 pts
  • Auth declaredRequired10 pts
  • Tools listedRequired15 pts
  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts