Wraps the Singapore LTA DataMall API to give your AI assistant real-time access to bus arrivals, MRT station crowding, train service alerts, carpark availability, and traffic incidents. This is a self-hosted fork that runs over HTTP instead of stdio, so you can connect remotely without installing anything locally. Ships with a shared API key so you can start querying immediately, though you can register your own LTA key through their companion service to avoid rate limits. Includes a bus stop search tool that looks up the 5-digit codes by name or landmark, which saves you from manually hunting them down. Eight tools total covering the major transport data categories Singapore publishes.
🚌 Access Singapore's real-time transport data through AI assistants — bus arrivals, train crowding, traffic incidents, and more!
This is an enhanced fork of arjunkmrm/lta-mcp, rebuilt for self-hosted VPS deployment with zero-friction onboarding — no API key required to get started!
Copy this configuration to your MCP client (Claude Desktop, Cursor, Windsurf, etc.):
Claude Desktop (claude_desktop_config.json):
{
"mcpServers": {
"lta-datamall": {
"transport": "streamable-http",
"url": "https://mcp.techmavie.digital/ltadatamallsg/mcp"
}
}
}
Cursor/Windsurf (MCP settings):
{
"lta-datamall": {
"transport": "streamable-http",
"url": "https://mcp.techmavie.digital/ltadatamallsg/mcp"
}
}
Once configured, you can ask your AI assistant things like:
By default, this server uses a shared LTA DataMall API key for convenience. To avoid rate limiting during heavy usage, you can register your own key via the MCP Key Service:
usr_XXXXXXXX key{
"mcpServers": {
"lta-datamall": {
"transport": "streamable-http",
"url": "https://mcp.techmavie.digital/ltadatamallsg/mcp/usr_YOUR_KEY_HERE"
}
}
}
Alternatively, use the query parameter format: /mcp?api_key=usr_YOUR_KEY_HERE
Note: Registering an LTA API key is optional even with the key service — you can register without one and still use the server's default quota.
This MCP server provides 8 tools for accessing Singapore transport data:
| Tool | Description | Update Frequency |
|---|---|---|
bus_stop_search | Look up bus stop codes by name, road, or landmark | Cached (24h) |
bus_arrival | Real-time bus arrival times, locations & crowding | Real-time |
station_crowding | MRT/LRT station crowdedness levels | Every 10 min |
station_crowd_forecast | Predicted station crowding (30-min intervals) | Periodic |
train_alerts | Service disruptions & shuttle bus info | On change |
carpark_availability | HDB, LTA & URA carpark lot availability | Every 1 min |
travel_times | Expressway travel time estimates | Every 5 min |
traffic_incidents | Accidents, roadworks & heavy traffic | Every 2 min |
bus_stop_searchSearch for bus stop codes by name, road, or landmark. Use this to find the 5-digit bus stop code needed for bus_arrival.
| Parameter | Type | Required | Description |
|---|---|---|---|
query | string | ✅ | Search query (e.g., "Marsiling Mall", "Orchard", "Victoria St") |
limit | number | ❌ | Max results to return (default: 10, max: 20) |
The bus stop database (~5,500 stops) is loaded on first search and cached for 24 hours.
bus_arrivalGet real-time bus arrival information for any bus stop in Singapore.
| Parameter | Type | Required | Description |
|---|---|---|---|
busStopCode | string | ✅ | 5-digit bus stop code (e.g., "83139") |
serviceNo | string | ❌ | Filter by specific bus service (e.g., "143") |
station_crowdingCheck how crowded MRT/LRT stations are right now.
| Parameter | Type | Required | Description |
|---|---|---|---|
trainLine | enum | ✅ | Train line code (see below) |
station_crowd_forecastGet predicted crowding levels for the next few hours.
| Parameter | Type | Required | Description |
|---|---|---|---|
trainLine | enum | ✅ | Train line code (see below) |
Supported Train Lines:
| Code | Line Name |
|---|---|
NSL | North-South Line |
EWL | East-West Line |
NEL | North-East Line |
CCL | Circle Line |
DTL | Downtown Line |
TEL | Thomson-East Coast Line |
BPL | Bukit Panjang LRT |
SLRT | Sengkang LRT |
PLRT | Punggol LRT |
CEL | Circle Line Extension |
CGL | Changi Airport Branch |
train_alertsGet current train service alerts (no parameters required).
carpark_availabilityGet real-time carpark availability across Singapore (no parameters required).
travel_timesGet estimated travel times on expressways (no parameters required).
traffic_incidentsGet current road incidents (no parameters required).
This fork introduces major improvements over the original repository:
| Aspect | Original | This Fork |
|---|---|---|
| Hosting | Smithery cloud | Self-hosted VPS |
| Transport | stdio (local only) | Streamable HTTP (remote) |
| API Key | Required | Optional (server default) |
| Deployment | Manual | Auto via GitHub Actions |
| SDK Version | 0.5.0 | 1.11.0+ |
New HTTP Server (src/http-server.ts)
Zero-Friction Onboarding
Bus Stop Search (src/bus-stops-cache.ts)
MCP Key Service Integration (src/utils/key-service.ts)
usr_xxx keysProduction Infrastructure
| Endpoint | Method | Description |
|---|---|---|
/ | GET | Server information and available tools |
/health | GET | Health check (for monitoring) |
/mcp | POST | MCP protocol endpoint (server default key) |
/mcp/:userKey | POST | MCP protocol endpoint (key-service auth) |
/analytics | GET | Usage analytics (JSON) |
/analytics/dashboard | GET | Analytics dashboard (HTML) |
/.well-known/mcp/server-card.json | GET | Smithery server discovery |
/.well-known/mcp-config | GET | MCP client configuration schema |
Want to host your own instance? Here's what you need:
| File | Purpose |
|---|---|
Dockerfile | Container build configuration |
docker-compose.yml | Docker orchestration |
deploy/nginx-mcp.conf | Nginx reverse proxy config |
.github/workflows/deploy-vps.yml | Auto-deployment workflow |
| Variable | Required | Default | Description |
|---|---|---|---|
LTA_API_KEY | ✅ | — | Your LTA DataMall API key |
KEY_SERVICE_URL | ❌ | — | MCP Key Service resolve endpoint (enables /mcp/:userKey route) |
KEY_SERVICE_TOKEN | ❌ | — | Bearer token for key service (unique per server) |
PORT | ❌ | 8080 | Server port |
HOST | ❌ | 0.0.0.0 | Server host |
Set these in your repository settings:
VPS_HOST — Your VPS IP addressVPS_USERNAME — SSH usernameVPS_SSH_KEY — Private SSH keyVPS_PORT — SSH port (usually 22)LTA_API_KEY — Your LTA DataMall API keyKEY_SERVICE_URL — MCP Key Service resolve endpoint (optional)KEY_SERVICE_TOKEN — Bearer token for key service (optional)MIT License — See LICENSE file for details.
io.github.infoinlet-marketplace/mcp-observability
betterdb-inc/monitor
com.mcparmory/datadog
thotischner/observability-mcp
io.github.tantiope/datadog-mcp
io.github.us-all/datadog