mcp-hsl
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@mcp-hslWhen are the next departures from Kamppi?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
mcp-hsl
MCP server exposing Greater Helsinki (HSL) public-transport data from Digitransit. Covers Helsinki, Espoo, Vantaa, Kauniainen, Kerava, Kirkkonummi, Sipoo, Siuntio, and Tuusula.
Lets an LLM host (Claude Desktop, Claude Code, Cursor, etc.) answer live-transit questions like "next tram from Kamppi to Töölö" or "plan a trip from Otaniemi to Kallio at 5pm".
Prerequisites
Node.js 20.6 or newer (uses native
--env-file).A free Digitransit subscription key (see below).
Related MCP server: gtfs-pro-mcp
Getting a Digitransit API key
Digitransit publishes HSL data through an Azure API Management portal. The key is free and easy to obtain.
Go to https://portal-api.digitransit.fi/ and click Sign up (top rig ht).
Verify your email and sign in.
Open Products → pick Digitransit API (the free tier).
Click Subscribe, give the subscription a name (e.g.
mcp-hsl), and confirm.Under Profile → Subscriptions, reveal the Primary key. That's you r
DIGITRANSIT_SUBSCRIPTION_KEY.
The free tier has generous rate limits (see https://digitransit.fi/en/developers/api-registration/ for current numbers). Keep the key private — treat it like a password.
Quick start (from npm)
// Claude Desktop / Claude Code MCP config
{
"mcpServers": {
"helsinki-transit": {
"command": "npx",
"args": ["-y", "mcp-hsl"],
"env": {
"DIGITRANSIT_SUBSCRIPTION_KEY": "your-key-here"
}
}
}
}Restart the client. The server should appear as Connected.
Local development
git clone <this-repo>
cd mcp-hsl
npm install
cp .env.example .env # then fill in DIGITRANSIT_SUBSCRIPTION_KEY
npm run buildRun against your own build:
{
"mcpServers": {
"helsinki-transit": {
"command": "node",
"args": [
"--env-file=/absolute/path/to/mcp-hsl/.env",
"/absolute/path/to/mcp-hsl/build/stdio.js"
]
}
}
}The server exits immediately with a clear message if DIGITRANSIT_SUBSCRIPTION_KEY is missing.
Tools
Name | Purpose | Key inputs |
| Place / address → coordinates |
|
| Route between two places |
|
| Next departures from a stop |
|
All three call Digitransit's HSL routing API. plan_journey geocodes both endpoints internally; stop_departures looks up a stop by name if you don't have the HSL ID.
plan_journey modes
Filter transit modes with the modes array: BUS, TRAM, RAIL, SUBWAY, FERRY. Omit to allow any. departureTime is an ISO 8601 timestamp with offset (e.g. 2026-08-13T17:00:00+03:00); defaults to now.
stop_departures name lookup
HSL stop IDs look like HSL:1140447. If you pass stopName and it matches multiple stops (e.g. Kamppi has several platform IDs), the tool returns the candidate list — the LLM then re-calls with the specific stopId.
Example prompts
"Geocode 'Kamppi metro station' in Helsinki."
"When are the next departures from Kamppi?"
"Plan a tram journey from Kamppi to Töölö."
"Get me from Otaniemi to Kallio around 5pm today, no bus."
"Kamppista Töölöön seuraava ratikka?"
Design notes
Transport-agnostic core.
src/server.tsexposes abuildServer()factory that registers tools without touching any transport. To add HTTP later, add a new entry point that callsbuildServer()and wires it toStreamableHTTPServerTransport.Output for LLMs. Tool results are compact plain-text tables/blocks — enough for the model to reason over without wasting tokens on raw GraphQL responses.
Multilingual. Digitransit returns Finnish and Swedish names side by side; the LLM handles user-facing language.
Real-time. Journey legs and departures include real-time state (
SCHEDULED,UPDATED,CANCELED) so the model can distinguish "on time" from "delayed 3 min".
Attribution
Data © Helsinki Region Transport (HSL) and other producers, provided by Digitransit under Creative Commons BY 4.0. This project is not affiliated with HSL or Digitransit.
License
MIT — see LICENSE.
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 Servers
- Alicense-qualityDmaintenanceAn MCP server for interacting with the Berlin Public Transport (BVG) API to search for locations and plan journeys. It provides real-time access to departures, arrivals, trip details, and vehicle tracking within Berlin's transit network.MIT
- Alicense-qualityBmaintenanceMCP server that provides tools for querying live transit data (stops, departures, routes, vehicles, alerts) from any WP GTFS Pro site, enabling AI assistants to answer rider questions.14GPL 2.0
- Flicense-qualityCmaintenanceMCP server providing real-time public transport data for Tomsk, including routes, schedules, stops with lazy OSM enrichment, nearby stop search, and a routing prompt for LLMs.
- AlicenseAqualityAmaintenanceMCP server for Atlanta MARTA real-time transit data, enabling queries about train arrivals and bus positions via natural language.4MIT
Related MCP Connectors
MCP server for AI dialogue using various LLM models via AceDataCloud
Hosted MCP server for LLM cost estimation, model comparison, and budget-aware routing.
Hosted MCP server exposing US hospital procedure cost data to AI assistants
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/devusvulgaris/mcp-hsl'
If you have feedback or need assistance with the MCP directory API, please join our Discord server