Skip to main content
Glama

πŸš‚ irctc-mcp β€” Indian Railways Model Context Protocol (MCP) Server

irctc.dev MCP Protocol Zero Dependency

Official Model Context Protocol (MCP) server for irctc.dev. Connects Cursor, Windsurf, Claude Code, and Claude Desktop to authoritative Indian Railways real-time telemetry with sub-second execution.

When you ask your AI IDE:

"Check if my train 12557 is on time" or "Are there vacant seats on Rajdhani from Delhi to Patna?"

Your AI agent automatically invokes irctc-mcp tools to inspect live PRS reservation charts, seat availability forecasts, and GPS delay metrics.


⚑ 1-Minute Quickstart

1. Cursor IDE Integration (.cursor/mcp.json)

Add the following to your project's .cursor/mcp.json or global Cursor settings:

{
  "mcpServers": {
    "irctc": {
      "command": "npx",
      "args": ["-y", "irctc-mcp"],
      "env": {
        "IRCTC_API_KEY": "YOUR_IRCTC_DEV_API_KEY"
      }
    }
  }
}

(Get 10,000 Free Credits in 5 seconds at https://irctc.dev/dashboard)

2. Claude Desktop (claude_desktop_config.json)

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json

  • Windows: %APPDATA%\Claude\claude_desktop_config.json

{
  "mcpServers": {
    "indian-railways": {
      "command": "npx",
      "args": ["-y", "irctc-mcp"],
      "env": {
        "IRCTC_API_KEY": "YOUR_IRCTC_DEV_API_KEY"
      }
    }
  }
}

3. Claude Code CLI

claude mcp add irctc-mcp -- npx -y irctc-mcp

4. Windsurf / Cascade

Add to ~/.codeium/windsurf/mcp_config.json:

{
  "mcpServers": {
    "irctc": {
      "command": "npx",
      "args": ["-y", "irctc-mcp"],
      "env": {
        "IRCTC_API_KEY": "YOUR_IRCTC_DEV_API_KEY"
      }
    }
  }
}

Related MCP server: db-mcp

πŸ› οΈ Available Agent Tools (14 Production Tools)

Tool Name

Parameters

Capabilities

check_pnr

pnr (10-digit string)

Real-time passenger manifest, coach & berth allocations (S4 65 LOWER), confirmation probability, and chart status.

get_live_running_status

train_no (string), date? (YYYY-MM-DD)

Live GPS train running position, current delay in minutes, next halt, platform numbers, and estimated timings.

search_trains

from (station code), to (station code), date?

Direct trains between any two stations with duration, distance in km, running days, and base fares.

check_seat_availability

train_no, from, to, date (DD-MM-YYYY), class_code?, quota?

Official 14-day continuous calendar forecast across travel classes (3A, 2A, SL) and quotas (GN, TQ, PT).

get_vacant_berths_post_chart

train_no, boarding_station, date?, class_code?

Post-charting vacant berths from online reservation charts for Current Booking and TTE allocation.

get_train_fare

train_no, from, to, class_code?, quota?

Calculate official IRCTC train fare breakdown across travel classes (1A, 2A, 3A, 3E, SL, CC, 2S) and quotas.

get_train_schedule

train_no

Full train route schedule, intermediate halt stations, arrival/departure timings, stop durations, and distance.

get_train_by_number

train_no

Quick train basic details by train number, including train name, type, origin, destination, and running days.

search_trains_by_name

name (min 2 chars)

Partial name train search (e.g., "Rajdhani", "Vande Bharat", "Shatabdi", "Garib Rath").

get_station_timetable

station_code, date

Station timetable: arrivals & departures board of all trains passing through a station on a given date.

search_stations

query

Fast autocomplete search for Indian Railways stations by station code or city name.

get_station_by_code

station_code

Detailed station information by station code (e.g. "NDLS"), including station name, state, and railway division.

get_cancelled_trains

none

Real-time list of today's cancelled, fully cancelled, and partially cancelled Indian Railways trains.

get_engine_health

none

Check irctc.dev Rail Engine health, offline corpus status, and in-memory index performance.


πŸ’‘ Example Prompts to Ask Your AI Agent

  • "Is PNR 2265248473 confirmed? What are the coach and berth numbers?"

  • "What is the current delay and next station for train 12557 today?"

  • "Find all trains from New Delhi (NDLS) to Patna (PNBE) for this Friday."

  • "Check 14-day 3A seat availability for train 12557 from NKE to ANVT starting 17-11-2026."

  • "Are there any vacant berths on Vande Bharat 26501 departing Gorakhpur?"


πŸ” Environment Variables

Variable

Description

Default

IRCTC_API_KEY

Your secret API key from irctc.dev. If omitted, checks ~/.irctc/config.json or uses anonymous free daily quota.

null

IRCTC_API_BASE_URL

Production Rail Engine Gateway.

https://api.irctc.dev


πŸ“„ License

MIT Β© IRCTC API Platform

Available Tools

14 tools
check_pnrA

Check real-time Indian Railways PNR status, passenger manifest, coach & berth allocations (e.g. S4 65 LOWER BERTH), confirmation probability, and chart preparation status.

NameRequiredDescriptionDefault
pnrYesThe 10-digit Indian Railways PNR reservation number (e.g. "2265248473").

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden. It does disclose that the data is 'real-time' and that chart preparation status is included, which tells the agent results are live and state-dependent, but it says nothing about failure modes (invalid/not-found PNR), auth or rate limits, or how the response is structured.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One front-loaded sentence led by the verb and resource, followed by a tight enumeration of returned data points. The 'S4 65 LOWER BERTH' example is short and clarifies output format rather than padding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no annotations and no output schema, the description is the only source of behavioral and return-value context, and it only names data categories without describing shape or error behavior. Adequate for an agent to decide to call it, but thin on what it will get back and when it will fail.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There is a single parameter with 100% schema coverage, so the schema already defines 'pnr' as a 10-digit reservation number with an example. The description adds nothing about the parameter beyond what the schema documents, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (check) and a specific resource (Indian Railways PNR status) and enumerates exactly what data comes back β€” manifest, coach/berth, confirmation probability, chart status β€” which implicitly separates it from siblings like get_live_running_status and get_vacant_berths_post_chart. It stops short of naming any sibling explicitly, so an agent must infer the boundary.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied: you need a PNR, therefore you call this. There is no statement of when to prefer it over check_seat_availability or get_vacant_berths_post_chart, and no note about pre- vs post-chart relevance despite mentioning chart preparation.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

check_seat_availabilityA

Fetch official 14-day continuous seat availability calendar forecast across travel classes (1A, 2A, 3A, 3E, SL) and quotas (GN, TQ, PT, LD) directly from PRS.

NameRequiredDescriptionDefault
toYesDestination station code (e.g. "ANVT").
dateYesJourney date in DD-MM-YYYY format (e.g. "17-11-2026").
fromYesOrigin station code (e.g. "NKE").
quotaNoBooking quota code ("GN" for General, "TQ" for Tatkal, "PT" for Premium Tatkal). Defaults to "GN".GN
train_noYesThe 5-digit train number (e.g. "12557").
class_codeNoTravel class code (e.g. "3A", "2A", "1A", "SL"). Defaults to "3A".3A

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden; it usefully discloses the upstream source (PRS) and that the output is a 14-day continuous calendar rather than a single-date snapshot. It does not clarify whether the required 'date' parameter anchors the start of the window, nor does it mention permissions, rate limits, or data freshness.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single dense sentence, front-loaded with the verb and the key scoping facts (14-day continuous, PRS, classes, quotas). No filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 6-parameter, no-annotation, no-output-schema tool, the description covers source and window but leaves the response shape and the multi-date/date-parameter relationship unexplained. Adequate but with notable gaps for a forecasting tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3; the description still adds value by enumerating class codes including 3E and quota codes including LD, which the schema examples omit. It does not resolve how 'date' interacts with the 14-day window, which is the main semantic gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Names a specific verb and resource ('Fetch ... seat availability calendar forecast') plus a precise scope (14-day continuous, across travel classes and quotas, from PRS). This clearly separates it from siblings like search_trains or get_vacant_berths_post_chart, which concern different data.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The '14-day continuous ... calendar' framing and 'official ... from PRS' hint at when this is the right tool (pre-booking, multi-date forecast) versus post-chart vacancy, but no sibling is named and no when-not/exclusion is stated. Usage is inferable rather than specified.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_cancelled_trainsA

Get real-time list of today's cancelled, fully cancelled, and partially cancelled Indian Railways trains.

NameRequiredDescriptionDefault

No parameters

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral disclosure burden. It usefully states that results are real-time and limited to today's cancellations, including fully and partially cancelled categories, but it does not describe permissions, response structure, rate limits, or empty-result behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence with no redundant or filler text. Every part contributes to clarifying the resource, freshness, time scope, and cancellation categories.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a no-parameter, no-output-schema tool, the description gives enough context to understand what the tool returns: a real-time list of today's cancelled trains, split into fully and partially cancelled categories. It could be stronger with explicit usage guidance or return-format detail, but the low complexity makes the current description largely adequate.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so there is no parameter semantics burden. The description correctly avoids discussing nonexistent inputs, and the empty input schema is consistent with the description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: get today's cancelled Indian Railways trains. It also scopes the data to real-time, today-only, and distinguishes fully cancelled from partially cancelled trains. The uniqueness of the resource makes it clearly distinguishable from sibling tools like get_live_running_status or check_pnr.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies the tool is for users asking about today's train cancellations, but it does not explicitly state when to use it versus alternatives. No exclusions or related-tool routing guidance is provided, so the agent must infer usage from the purpose statement.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_engine_healthA

Check irctc.dev Rail Engine health, offline corpus status, and in-memory index performance.

NameRequiredDescriptionDefault

No parameters

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of behavioral disclosure. 'Check' strongly implies a read-only diagnostic operation, and the description names what is inspected, but it does not clarify side effects, whether it makes network calls, auth requirements, latency, or what the response contains.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence that names the action and the three inspected areas. Every phrase contributes to tool selection, with no filler or repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter health/status tool with no output schema, the description gives enough information to select it and understand its broad scope. The main remaining gap is that it does not characterize the return value, but with no arguments and a clearly diagnostic purpose, this is a minor omission.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so there is no parameter semantics to explain and the baseline score of 4 applies. The description does not need to compensate for undocumented inputs.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses the specific verb 'Check' with a clear resource, 'irctc.dev Rail Engine health,' and enumerates three target areas: health, offline corpus status, and in-memory index performance. This is clearly distinct from the sibling tools, which are all train/PNR/station queries, though it does not explicitly name a sibling to differentiate itself.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The word 'Check' implies a diagnostic or status-inspection use case, so the intended usage is reasonably inferable. However, the description does not state when an agent should call this tool, such as when other Rail Engine calls fail or when corpus/index status is relevant, and there are no explicit exclusions or alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_live_running_statusA

Get real-time live running GPS status of any Indian Railways train, including current delay in minutes, last crossed station, upcoming halts, platform numbers, and estimated arrival/departure times.

NameRequiredDescriptionDefault
dateNoOptional departure date in YYYY-MM-DD format. Defaults to today.
train_noYesThe 4-5 digit train number (e.g. "12557" for Sapt Kranti Express, "12309" for Rajdhani).

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations exist, so the description carries the full burden; it does disclose the payload contents (delay, last crossed station, platforms, ETA/ETD), which is valuable given there is no output schema. It omits behavioral traits that matter: data freshness/refresh cadence, what happens for trains not currently running or not yet departed, and whether the optional date changes the live semantics.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no filler. The enumerated return fields earn their place because no output schema exists to convey them.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 2-parameter live-lookup tool with no annotations and no output schema, the description covers purpose and returns adequately. The remaining gap is edge-case behavior (train not running, stale data, date vs 'live' interaction), which an agent would need to call this reliably.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, with both train_no and date fully documented including formats and a default, so the schema already does the heavy lifting. The description adds no parameter-level meaning beyond what the schema states, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb ('Get') and resource ('real-time live running GPS status of any Indian Railways train'), plus an enumeration of the returned data. The word 'live/real-time' implicitly contrasts with static siblings like get_train_schedule and get_station_timetable, but no sibling is named, so differentiation is left to inference.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'real-time live running status' implies you should use it while a train is en route, but the description never states when to prefer it over get_train_schedule or get_station_timetable, nor any prerequisite such as the train having departed.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_station_by_codeB

Get detailed station information by station code, including station name, state, and railway division.

NameRequiredDescriptionDefault
station_codeYesStation code (e.g. "NDLS", "PNBE", "BTI").

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden. It implies a read-only lookup and lists some returned fields, but it does not mention error behavior for invalid codes, rate limits, authentication, or whether results are cached. For a simple lookup this is adequate but incomplete.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

It is a single efficient sentence with the primary action front-loaded. Every clause earns its place by naming the lookup key and the returned information. It could be slightly tighter but is well structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema and no annotations, so the description must compensate. It names three returned fields (station name, state, railway division), which is useful, but it does not describe the full response shape or failure cases. For a one-parameter lookup this is minimally adequate.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and the schema already defines station_code with examples such as "NDLS". The description adds no format rules, case sensitivity, or validation beyond what the schema provides, so baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: get detailed station information by station code. It also names the returned fields (name, state, division). It does not explicitly distinguish itself from the sibling search_stations, but the by-code lookup scope is clear.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'by station code' implies this is a single-record lookup rather than a search, which gives some usage guidance. However, the description never says when to use this instead of search_stations or get_station_timetable, and it lists no alternatives or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_station_timetableA

Get all trains passing through, arriving at, or departing from a station on a given date (station timetable / arrivals & departures board).

NameRequiredDescriptionDefault
dateYesDate in YYYY-MM-DD or DD-MM-YYYY format (e.g. "2026-10-30").
station_codeYesStation code (e.g. "NDLS" for New Delhi, "PNBE" for Patna).

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are supplied, so the description carries the full burden. It does disclose scope (all trains, station-level, single date, includes through/arriving/departing), which implies a read-only query, but it says nothing about whether results are scheduled vs. real-time, ordering, result volume, or paging β€” meaningful gaps for an unannotated tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single sentence with the core operation front-loaded and the parenthetical alias placed at the end for disambiguation. No filler and nothing to trim.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter read tool with fully documented schema, this is nearly complete β€” the agent knows the scope and inputs. The only shortfall is that, with no output schema, the description never indicates what fields the timetable entries contain or how many results to expect.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with both station_code and date formats (YYYY-MM-DD / DD-MM-YYYY) spelled out in the schema. The description only restates that a station and a date are required, adding no format or semantic detail beyond the schema, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb and resource ('Get all trains passing through, arriving at, or departing from a station'), and the parenthetical 'station timetable / arrivals & departures board' removes ambiguity. It implicitly separates itself from the train-centric sibling get_train_schedule by being station-scoped, though it never names that sibling.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is inferable from the phrasing β€” an agent would pick this for an arrivals/departures board rather than a train's schedule β€” but there is no explicit when-to-use, when-not, or pointer to alternatives like get_train_schedule or get_live_running_status.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_train_by_numberA

Get quick train basic details by train number, including official train name, train type, origin, destination, running days, and total distance.

NameRequiredDescriptionDefault
train_noYesThe 4-5 digit train number (e.g. "12557").

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations, so the description carries the full burden; it signals the response is 'quick ... basic details', implicitly distinguishing it from live/real-time tools like get_live_running_status. However, it never states that it is a read-only lookup, how it behaves for an invalid train number, or whether running-day data can vary β€” meaningful gaps for a zero-annotation tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One well-formed sentence with the resource and returned fields front-loaded and no filler. It could be slightly tighter ('quick train basic details' is redundant with 'official train name...'), but it is efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter lookup with no output schema, enumerating the returned fields compensates well and tells the agent what it will get back. Missing only edge-case behavior (invalid numbers, static vs. live data scope) to be fully complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the single train_no parameter already documents its 4-5 digit format with an example. The description adds no further parameter meaning, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clear verb+resource: retrieves basic train details by number, and enumerates the fields returned (name, type, origin, destination, running days, distance). It does not explicitly contrast with search_trains or search_trains_by_name, so sibling differentiation is only implicit via 'by train number'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied by the phrase 'by train number' β€” the agent must infer it should be used when a numeric train ID is known rather than a name or route. No alternatives (search_trains_by_name, search_trains, get_live_running_status) are named or excluded.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_train_fareA

Calculate official IRCTC train fare breakdown across travel classes (1A, 2A, 3A, 3E, SL, CC, 2S) and quotas between origin and destination stations.

NameRequiredDescriptionDefault
toYesDestination station code (e.g. "MFP").
fromYesOrigin station code (e.g. "ANVT").
quotaNoBooking quota code ("GN", "TQ", "PT"). Defaults to "GN".GN
train_noYesThe 4-5 digit train number (e.g. "12557").
class_codeNoOptional travel class filter (e.g. "all", "3A", "2A", "SL"). Defaults to "all".all

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden. It signals the data source ('official IRCTC') and that multiple class/quotas are computed by default, but says nothing about whether fares are live or static, whether any authentication or rate limits apply, or how the breakdown is structured.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with zero filler: the action, the scope (classes, quotas, origin/destination), and the authoritative source are all packed in without repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

All required inputs are documented and there is no output schema, so the description should ideally hint at what the 'breakdown' contains (base fare, reservation charge, GST, etc.) and its likely shape per class. It names the concept but not the returned structure, leaving a moderate gap for a 5-parameter tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so all five parameters, their defaults, and example values are already documented in the schema. The description reinforces the class-code set (1A, 2A, 3A, 3E, SL, CC, 2S) and quota concept but adds no syntax or format meaning beyond the schema, making the baseline 3 correct.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Calculate') plus resource ('official IRCTC train fare breakdown') and enumerates the covered classes and quotas between stations, so the agent knows exactly what is returned. It does not explicitly differentiate from siblings, though none of the listed siblings (PNR, availability, schedule) overlap with fare calculation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied by the verb and resource – there is no explicit 'use this when…' or 'do not use this for…' guidance, and no note on prerequisites such as whether the train must exist or the quota must be valid. An agent can infer the context from the name, but nothing is stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_train_scheduleA

Get full train route schedule, intermediate halt stations, arrival/departure timings, stop durations, and total distance in km.

NameRequiredDescriptionDefault
train_noYesThe 4-5 digit train number (e.g. "12557").

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the burden, and 'Get' reasonably signals a read-only lookup. It adds value by disclosing the shape of the result (halts, timings, durations, distance), but says nothing about whether the data is scheduled vs. live, coverage of days of operation, or what happens for an invalid train number.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One sentence, front-loaded with the core action and then a compact enumeration of returned data. No preamble or filler; it could only be improved by adding a short routing clause rather than by trimming.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema and no annotations, the description compensates well by listing the fields the caller will receive. Minor gaps remain (time format, timezone/day-of-week behavior, error semantics), but for a one-parameter lookup this is close to sufficient.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and there is a single required parameter whose schema entry already gives the format and an example ("12557"). The description adds no additional meaning about train_no, which is acceptable given the schema does the work.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Starts with a specific verb ('Get') and resource ('full train route schedule') and enumerates what is returned: intermediate halts, arrival/departure timings, stop durations, and distance in km. That enumeration differentiates it in practice from get_live_running_status or get_station_timetable, though it never names a sibling explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The use case (fetch the static route/timetable of one train by number) is strongly implied by the field list, so an agent can infer when to reach for it. There is no explicit when-to-use statement, no exclusions, and no pointer to get_live_running_status for real-time position, which is the most likely confusion point.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_vacant_berths_post_chartB

Find real-time vacant berths and seats after chart preparation from online reservation charts for Current Booking and TTE allocation onboard.

NameRequiredDescriptionDefault
dateNoJourney date in YYYY-MM-DD format. Defaults to today.
train_noYesThe 5-digit train number (e.g. "26501" or "12557").
class_codeNoTravel class filter (e.g. "ALL", "3A", "2A", "CC", "SL"). Defaults to "ALL".ALL
boarding_stationYesBoarding station code (e.g. "GKP" or "NKE").

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does disclose meaningful traits: the data is real-time, sourced from online reservation charts, and only valid post-chart-preparation. However, it does not say what happens if the chart is not yet prepared, whether data is scoped per train/date, or what the response contains.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single sentence with the key qualifier ('after chart preparation') front-loaded and no filler. The trailing jargon ('Current Booking and TTE allocation onboard') is dense but still conveys who uses the data.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 4-parameter read tool with no annotations and no output schema, the description establishes purpose and timing but leaves gaps: no statement of what happens pre-chart, no hint at return shape (per-class vacancy counts?), and no linkage to the sibling availability tool. Adequate but not complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all four parameters (date, train_no, class_code, boarding_station) are already documented with formats and defaults. The description adds no parameter-level meaning such as how boarding_station affects the returned vacancy pool, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb ('Find') plus resource ('real-time vacant berths and seats') with a clear temporal scope ('after chart preparation'). It implicitly separates itself from check_seat_availability by emphasizing post-chart data from reservation charts, but never names that sibling, so an agent must infer the distinction.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'after chart preparation' and 'Current Booking and TTE allocation onboard' implies the usage context, but there is no explicit when-to-use versus when-to-use-alternative guidance. An agent cannot tell from the text whether to prefer check_seat_availability before the chart is prepared.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_stationsA

Autocomplete search Indian Railways stations by station code or partial city name (e.g. "NDLS", "delhi", "patna").

NameRequiredDescriptionDefault
queryYesSearch string for station code or city name (e.g. "delhi").

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden, and "Autocomplete" does signal partial/fuzzy matching and that multiple results may come back. However, it says nothing about result limits, ranking, case sensitivity, or empty-result behavior for a lookup tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One sentence, front-loaded with the verb and resource, with the examples placed where they clarify the input domain. Zero waste.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple one-parameter lookup with no output schema, the definition covers what the tool is and what input it takes. It omits what comes back (a list of station code/name pairs) and how partial matches are ranked, which would help an agent consume the result.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the single parameter is fully documented, so the schema does the heavy lifting. The description's examples ("NDLS", "delhi", "patna") mostly repeat the schema's own example rather than adding format or matching semantics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb and resource ("Autocomplete search Indian Railways stations") and scopes the input domain to station code or partial city name, which an agent can distinguish from general train search siblings. It doesn't explicitly name the near-neighbor get_station_by_code, so it stops short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The word "autocomplete" plus the partial-name examples imply the discovery/browse use case, but there is no explicit statement of when to prefer this over get_station_by_code or search_trains. Usage context is only inferable, not stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_trainsA

Search running trains between any two Indian Railways station codes with departure/arrival times, travel duration, distance in kilometers, running days, and base fare estimates.

NameRequiredDescriptionDefault
toYesDestination station code (e.g. "BTI" for Bathinda, "CSMT" for Mumbai).
dateNoOptional journey date in YYYY-MM-DD format (e.g. "2026-11-15").
fromYesOrigin station code (e.g. "NDLS" for New Delhi, "PNBE" for Patna).

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations exist, so the description carries the full burden, and it does disclose what the response contains (departure/arrival times, duration, distance, running days, fare estimates) in lieu of an output schema. It omits limits, pagination, result caps, and what happens for invalid or ambiguous station codes.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single sentence with the verb and scope front-loaded followed by the returned fields; no filler or repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 3-parameter read-only lookup with full schema coverage, the description covers purpose and return content adequately. The only gaps are edge-case behavior and any routing guidance against the many sibling lookup tools.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with per-parameter descriptions and examples, so the schema already defines from/to/date fully. The description adds the semantic that both are station codes but never mentions the optional date parameter or its format.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Names a specific verb (search) and resource (trains) plus the exact scoping mechanism: two Indian Railways station codes. This implicitly separates it from search_trains_by_name and get_train_by_number, but no sibling is named explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied by the phrase 'between any two Indian Railways station codes'; there is no statement of when to prefer this over search_trains_by_name, get_train_schedule, or get_live_running_status, and no prerequisites or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_trains_by_nameA

Search Indian Railways trains by train name query (partial match, e.g. "Rajdhani", "Shatabdi", "Vande Bharat", "Garib Rath").

NameRequiredDescriptionDefault
nameYesTrain name to search for (minimum 2 characters, e.g. "rajdhani").

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It usefully discloses partial-match behavior and gives examples, but it does not describe result limits, case sensitivity, pagination, or what the response contains.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single efficient sentence with the core action and matching mode front-loaded. The examples add clarity without bloating the definition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple one-parameter search tool with no output schema, the description is sufficient to invoke it correctly. It leaves out return-shape and result-limit details, which are minor but would help an agent understand what to expect.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the single parameter is already documented as a train name with a two-character minimum. The description adds partial-match semantics and examples, but no additional formatting or matching details beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: search Indian Railways trains by train name query. The partial-match examples (β€œRajdhani”, β€œShatabdi”, etc.) make clear this is name-based lookup, distinguishing it from get_train_by_number.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use it by specifying name-query partial matching, but it does not explicitly contrast with sibling tools such as search_trains or get_train_by_number. An agent can infer the use case, but alternatives are not routed.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 14 tool updatesv1.0.0
    • First observedcheck_pnr
    • First observedcheck_seat_availability
    • First observedget_cancelled_trains
    • First observedget_engine_health
    • First observedget_live_running_status
    • First observedget_station_by_code
    • First observedget_station_timetable
    • First observedget_train_by_number
    • First observedget_train_fare
    • First observedget_train_schedule
    • First observedget_vacant_berths_post_chart
    • First observedsearch_stations
    • First observedsearch_trains
    • First observedsearch_trains_by_name

TDQS

A3.9/5.0

Scored across 14 tools

Disambiguation5/5

Each tool targets a clearly distinct railway query: PNR status, train details, live running, route search, seat availability, vacant berths, fare, schedule, station timetable, station lookup, cancellations, and engine health. The few superficially similar tools (search_trains vs. search_trains_by_name, get_train_by_number vs. get_train_schedule) are cleanly separated by their descriptions.

Naming Consistency5/5

All names use consistent snake_case with a clear verb prefix (check_, get_, search_) followed by the resource or action. No mixed casing or conflicting verb styles appear across the set.

Tool Count5/5

With 14 tools, the server stays within a well-scoped range for an Indian Railways information service. Each tool covers a distinct query type and none appear redundant or unnecessary.

Completeness4/5

The surface covers most core railway inquiry workflows: PNR, train search, schedules, live status, fares, availability, station data, and cancellations. Minor gaps exist for adjacent cases like rescheduled/diverted trains or booking-related actions, but the core informational lifecycle is strong.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables real-time Indian Railways information retrieval, including live train running status, station schedules, and upcoming arrivals/departures.
    ISC
  • A
    license
    A
    quality
    D
    maintenance
    An MCP server that exposes the Deutsche Bahn public transport API to any MCP-compatible client (Claude Desktop, Cursor, Cline, Continue, etc.). Five tools cover station search, departures, journey planning, trip details, and nearby stations.
    6
    1
    MIT
  • A
    license
    A
    quality
    D
    maintenance
    An (unofficial) MCP server for the Deutsche Bahn Timetables API β€” station search, planned departures, and real-time changes (delays, platform changes, cancellations) as tools for Claude and other MCP clients.
    4
    2
    MIT
  • A
    license
    A
    quality
    D
    maintenance
    MCP server for Indian Railways data, enabling AI agents to search trains, get schedules, live status, PNR info, and more without an API key.
    11
    5 npm
    MIT