traintrack-mcp
MCP server for Indian Railways data, enabling AI agents to search trains, get schedules, live status, PNR info, and more without an API key.
README
TrainTrack MCP
An MCP server for TrainTrack that gives AI agents access to Indian Railways train search, schedules, live status, trains between stations, station data, and PNR status.
It uses the MCP stdio transport, requires no API key, and talks to https://traintrack.stupidlabs.lol/ by default. TrainTrack uses unofficial NTES/Indian Railways data, which may occasionally be delayed, incomplete, or unavailable. Confirm time-sensitive journey details through official railway channels.
Requirements
- Node.js 18 or newer
- An MCP-compatible client
Installation
After the package is published:
npm install --global traintrack-mcp
To run it directly from a source checkout:
npm install
npm start
MCP client configuration
No environment variables are required for the hosted TrainTrack API.
Claude Desktop, Claude Code, Cline, and compatible clients
Add this to the client's MCP configuration:
{
"mcpServers": {
"traintrack": {
"command": "npx",
"args": ["-y", "traintrack-mcp"]
}
}
}
Codex
Add this to ~/.codex/config.toml:
[mcp_servers.traintrack]
command = "npx"
args = ["-y", "traintrack-mcp"]
tool_timeout_sec = 60
OpenCode
Add this to ~/.config/opencode/opencode.json:
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"traintrack": {
"type": "local",
"command": ["npx", "-y", "traintrack-mcp"],
"enabled": true
}
}
}
Configuration
| Environment variable | Default | Description |
|---|---|---|
TRAINTRACK_BASE_URL |
https://traintrack.stupidlabs.lol |
TrainTrack deployment to use. http and https URLs are supported, including deployments under a path. |
TRAINTRACK_TIMEOUT_MS |
30000 |
Positive request timeout in milliseconds. |
For example:
{
"mcpServers": {
"traintrack": {
"command": "npx",
"args": ["-y", "traintrack-mcp"],
"env": {
"TRAINTRACK_BASE_URL": "https://trains.example.com/"
}
}
}
}
Tools
| Tool | Inputs | What it returns |
|---|---|---|
search_trains |
query |
Trains matching a name, number, or text |
get_train_info |
train_number |
Train identity, endpoints, and running instances |
get_train_schedule |
train_number, optional date |
Scheduled stops, times, running days, and coordinates |
get_train_live_status |
train_number, optional date |
Live stops, delays, platforms, current reported position, and route geometry |
find_trains_between_stations |
from, to, optional sort |
Direct trains between two station codes |
get_train_exceptions |
train_number |
Exceptional service information such as cancellations or diversions |
get_pnr_status |
pnr |
Booking, passenger, train, and chart status |
get_station_coordinates |
code |
Bundled station name and coordinates |
search_stations |
query, optional limit |
Stations matching a name or code |
track_trains |
train_numbers |
Batched live tracking for up to 10 trains |
check_traintrack_health |
none | Public API availability and service status |
Dates use DD-MMM-YYYY, for example 26-Jul-2026. Train numbers contain 4–6 digits, station codes contain 1–10 letters or digits, and a PNR contains exactly 10 digits.
Rate limits
TrainTrack applies these default limits per client IP and per endpoint. This MCP server does not add another rate limiter. An upstream 429 response is returned to the MCP client as a tool error with its HTTP status, response details, and X-Request-ID when available.
| Operation | Default upstream limit |
|---|---|
| Train search | 60/minute |
| Train information | 30/minute |
| Train schedule | 20/minute |
| Live train status | 12/minute |
| Trains between stations | 20/minute |
| Train exceptions | 20/minute |
| PNR status | 2/minute |
| Station coordinates | 120/minute |
| Station search | 120/minute |
| Batched live tracking | 6/minute |
| Health check | 120/minute |
The hosted service also protects its railway-data provider from overload, so temporary 502 errors can occur even before a client endpoint limit is reached. Wait briefly before retrying a 429 or 502 response.
Cache and data freshness
Caching happens in TrainTrack, not in this MCP process. The MCP tools return the upstream response unchanged, including its cached field. A response with "cached": true came from an earlier identical request or was shared with a simultaneous identical request; it does not mean the data was just refreshed.
| Data | Maximum default cache window |
|---|---|
| Live running status | 45 seconds |
| Train exceptions/service updates | 5 minutes |
| Train information | 30 minutes |
| Current running instance | 30 minutes |
| Trains between stations | 30 minutes |
| Train search | 12 hours |
| Train schedules | 12 hours |
PNR results are never stored in the result cache. Identical simultaneous PNR requests may still share one in-flight lookup. Treat PNRs as sensitive travel information and avoid putting real values in shared logs, screenshots, or telemetry.
See the hosted TrainTrack API documentation for the full API behavior.
Development
npm install
npm run check
npm test
The project uses ESM throughout and relies on Node's built-in Fetch API.
Author
Nitin Bansal (freakynit) — nitinbansal85@gmail.com
License
Recommended Servers
playwright-mcp
A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.
Magic Component Platform (MCP)
An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.
Audiense Insights MCP Server
Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.
VeyraX MCP
Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.
graphlit-mcp-server
The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.
Kagi MCP Server
An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.
E2B
Using MCP to run code via e2b.
Neon Database
MCP server for interacting with Neon Management API and databases
Exa Search
A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.
Qdrant Server
This repository is an example of how to create a MCP server for Qdrant, a vector search engine.