Skip to main content
Glama

Regiojet MCP

An MCP server that lets AI assistants search, book and cancel RegioJet train and bus tickets.

PyPI PyPI downloads Python FastMCP License: MIT

What is this?

A FastMCP server for the RegioJet Affiliate API. It finds stations, searches connections and shows routes, prices and free seats. If you give it an account token, it can also book tickets, pay for them from your RegioJet credit and cancel them.

Related MCP server: mcp-tfl-journey

Quick Start

Run it from PyPI with uvx. You don't need a checkout.

Claude Code

claude mcp add regiojet -- uvx regiojet-mcp
# with account tools (booking, payment, cancellation):
claude mcp add regiojet -e REGIOJET_API_KEY=<token> -- uvx regiojet-mcp

Other MCP clients (Claude Desktop, Cursor, ...)

{
  "mcpServers": {
    "regiojet": {
      "command": "uvx",
      "args": ["regiojet-mcp"],
      "env": { "REGIOJET_API_KEY": "<token>" }
    }
  }
}

Leave out env if you only need the read-only tools.

Standalone

uvx regiojet-mcp                                    # stdio
REGIOJET_MCP_TRANSPORT=http uvx regiojet-mcp        # http on 127.0.0.1:8000

Tools

Search and reference data

These tools are read-only and don't need a token.

Tool

Description

find_locations

Resolve city/station names (any language, diacritics optional) to ids

search_routes

Connections between two locations on a date, paginated via cursor + page

get_route_detail

Sections (lines, platforms, transfers) and price per seat class

get_free_seats

Free seats per vehicle for a seat class

list_tariffs, list_seat_classes, list_vehicle_standards, list_carriers, list_action_prices

Reference data (cached)

get_ticket

Existing ticket by account code + ticket id

Account

These tools need REGIOJET_API_KEY.

Tool

Description

get_account

Name, default tariff, credit balance

list_my_tickets, get_my_ticket

Tickets on the account, filterable by state

create_reservation

Reserve seats (UNPAID until paid, expires at expiration_date)

pay_ticket_with_credit

Pay UNPAID tickets from account credit (spends money)

cancel_ticket

Cancel a reservation or paid ticket (cancel charges may apply)

Resources

regiojet://tariffs, regiojet://seat-classes

Booking flow

flowchart LR
    A[find_locations] --> B[search_routes]
    B --> C[get_route_detail]
    C -->|price_source per seat class| D[get_free_seats]
    D --> E[create_reservation]
    E --> F[pay_ticket_with_credit]
    E --> G[cancel_ticket]
    F --> G

Configuration

When you run it with uvx, set variables through your MCP client's env. When you run it from a checkout with uv run, you can put them in a .env file in the server's working directory instead.

Env var

Default

Notes

REGIOJET_API_KEY

unset

RegioJet customer account token (sent as Bearer). Enables account tools

REGIOJET_USER / REGIOJET_PASSWORD

unset

HTTP Basic auth for affiliate accounts. Ignored when REGIOJET_API_KEY is set

REGIOJET_BASE_URL

https://brn-ybus-pubapi.sa.cz/restapi

REGIOJET_LANG

en

REGIOJET_CURRENCY

EUR

REGIOJET_TIMEOUT

20

Seconds

REGIOJET_MCP_TRANSPORT / _HOST / _PORT

stdio / 127.0.0.1 / 8000

Development

uv sync                                             # install with dev dependencies
uv run regiojet-mcp                                 # run from source (stdio)
REGIOJET_MCP_TRANSPORT=http uv run regiojet-mcp     # run from source (http)
uv run fastmcp dev inspector server.py              # MCP Inspector in the browser
uv run pytest                                       # tests

To use a local checkout in Claude Code:

claude mcp add regiojet -- uv run --directory /path/to/regiojet-mcp regiojet-mcp

Project structure

regiojet-mcp/
├── src/
│   └── regiojet_mcp/
│       ├── __init__.py      # entry point, transport selection
│       ├── client.py        # async HTTP client for the RegioJet API
│       ├── config.py        # settings from environment
│       └── server.py        # MCP tools and resources
├── tests/
│   └── test_tools.py
├── fastmcp.json             # FastMCP project config
├── LICENCE
├── pyproject.toml
├── server.py                # entry point for `fastmcp run` / `fastmcp dev`
└── uv.lock

License

MIT © Petr Václavek

Available Tools

16 tools
cancel_ticketCancel TicketA
Destructive

Cancel a reservation or a paid ticket. Paid tickets may incur cancel_charge (see get_my_ticket). Confirm with the user first.

NameRequiredDescriptionDefault
langNoResponse language; defaults to server setting.
ticket_idYes
refund_to_original_sourceNoRefund a paid ticket to the card it was paid with instead of account credit.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true and readOnlyHint=false, so the mutation profile is covered. The description adds genuinely non-structured context: that paid tickets incur a cancel_charge and that user confirmation is expected. It does not state whether cancellation is reversible or what happens to ancillary items, keeping it from a 5.

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?

Two short sentences, front-loaded with the action and its scope, followed by the cost caveat and the confirmation requirement. Nothing is wasted and no sentence repeats a structured field.

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 destructive mutation with an output schema present, the description covers the essential agent-facing concerns: cost of cancellation, where to check it, and the need to confirm. Irreversibility and post-cancellation state are left implicit, but the destructive hint partially covers that.

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 67%, so most parameters are already documented in the schema (lang and refund_to_original_source both carry descriptions). The description adds no meaning to ticket_id or to the refund routing choice, so it neither compensates for the gap nor adds value over the schema.

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 ('Cancel') and resource ('a reservation or a paid ticket'), which clearly separates it from creation-oriented siblings like create_reservation and read-only ones like get_my_ticket. It does not explicitly name a sibling alternative, but the scope is unambiguous.

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

Usage Guidelines4/5

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

Gives a concrete operating instruction ('Confirm with the user first') and routes the agent to get_my_ticket to inspect cancel_charge before acting on paid tickets. It lacks an explicit 'do not use when...' exclusion, but the context for safe use is clear.

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

create_reservationCreate ReservationA

Reserve seats on the logged-in account. The reservation is UNPAID and expires at expiration_date unless paid (pay_ticket_with_credit, or in the RegioJet app/web) or cancelled first.

NameRequiredDescriptionDefault
langNoResponse language; defaults to server setting.
tariffsNoPassenger tariff per traveller, e.g. ['REGULAR', 'REGULAR', 'CHILD_UNDER_12']. See list_tariffs.
currencyNoPrice currency; defaults to server setting.
route_idYesRoute id from search_routes.
sectionsYesEvery section of the route from get_route_detail, optionally with chosen seats.
seat_classYesseat_class from get_route_detail price_classes.
price_sourceYesprice_source of the chosen seat class from get_route_detail.

Output Schema

NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare this is a non-read-only, non-destructive, open-world operation, so the safety profile is covered. The description adds genuinely non-obvious behavior the annotations cannot convey: the reservation is created UNPAID and auto-expires at expiration_date unless paid or cancelled, which is critical for an agent to act on. It omits failure modes such as sold-out seats or what errors look like, keeping it below a 5.

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?

Two short sentences with zero filler: the action and its state come first, followed by the expiry/payment consequence. Capitalized UNPAID properly emphasizes the condition an agent must not miss.

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 a full output schema and annotations present, the description does not need to explain return values, and it covers the lifecycle an agent must know. The main residual gap is behavior when the requested seats or class are unavailable, plus the absent link between expiration_date and how the agent should track it afterward.

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 each parameter already documenting its source (route_id from search_routes, sections from get_route_detail, seat_class from price_classes, etc.), so the baseline is 3. The description adds no parameter-level detail, and it references expiration_date, which is not an input parameter, so an agent gets no extra guidance on how to populate the four required fields.

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 opens with a specific verb and resource ('Reserve seats') scoped to the logged-in account, then states the resulting object's state (UNPAID) and lifecycle. No sibling tool creates reservations, so ambiguity with get_ticket, search_routes, or cancel_ticket is low.

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

Usage Guidelines4/5

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

It clearly situates the call in a workflow by naming the follow-up alternatives (pay_ticket_with_credit or the app/web, or cancel), which tells the agent what to do next after reserving. It stops short of explicit when-not-to-use guidance or prerequisites such as needing a route_id from search_routes first, which the schema handles instead.

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

find_locationsFind LocationsA
Read-only

Find RegioJet cities and stations by name. Use returned id+type as from/to in search_routes.

Prefer CITY ids for searching (covers all stations in the city); STATION ids are needed for route detail/seats.

NameRequiredDescriptionDefault
langNoResponse language; defaults to server setting.
limitNo
queryYesCity or station name, any language, diacritics optional (e.g. 'Praha', 'Wien', 'Brno hl. n.').
station_typeNoOnly locations with this station type.

Output Schema

NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already establish that this is a read-only, open-world lookup. The description adds meaningful behavioral context beyond that: results are location identifiers plus types, city IDs cover all stations, and station IDs matter for route detail and seat operations. It does not cover pagination or result limits, but the core downstream behavior is well disclosed.

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 short, front-loaded, and structured around one main action followed by a practical usage rule. Every sentence contributes either purpose, integration guidance, or ID-type selection advice.

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?

Given that an output schema exists and annotations cover safety, the description provides enough context for an agent to call this lookup and use its results correctly. Minor gaps around limit behavior and language handling are acceptable because those are largely covered by the input schema.

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 75%, with query, lang, and station_type documented while limit is not described in the schema. The description reinforces name-based lookup and the city/station distinction, but it does not add much parameter-level guidance beyond what the schema already provides.

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: find RegioJet cities and stations by name. It clearly distinguishes this lookup tool from route-search and ticket siblings by identifying its role as the source of from/to location IDs.

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

Usage Guidelines5/5

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

It explicitly says to use the returned id and type as from/to in search_routes, and gives a concrete decision rule: prefer CITY ids for searching, STATION ids for route detail/seats. This tells the agent when to choose each location type and how the result feeds a specific sibling tool.

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

get_accountGet AccountA
Read-only

Get the logged-in RegioJet account: name, default tariff and credit balance.

NameRequiredDescriptionDefault
langNoResponse language; defaults to server setting.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description contributes the 'logged-in' scoping detail, implying auth comes from the session rather than parameters, but adds nothing about caching, freshness or error behavior for an unauthenticated call.

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 the resource first and the returned fields after the colon. No filler, no redundancy.

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, argument-free read with an output schema and read-only annotations, the description covers purpose and payload adequately. The only minor omission is any mention of the optional language parameter or behavior when not logged in.

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?

With one optional parameter at 100% schema description coverage, the schema already documents 'lang' and its default fully. 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?

States a specific verb and resource ('Get the logged-in RegioJet account') and enumerates the key fields returned (name, default tariff, credit balance), so the agent knows exactly what comes back. It does not explicitly distinguish itself from siblings, though no sibling overlaps in scope since the others deal with tickets, routes and seats.

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?

Use is implied by the content (fetch name, tariff, credit balance), and the 'logged-in' framing signals it applies to the current session only. There is no explicit when-to-use or when-not guidance and no reference to any alternative tool.

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

get_free_seatsGet Free SeatsA
Read-only

Get free seats per vehicle (carriage/bus) offering the given seat class, for each section of a route.

Double-decker buses are one vehicle with several decks; seats are listed per deck.

NameRequiredDescriptionDefault
langNoResponse language; defaults to server setting.
tariffsNoPassenger tariff per traveller, e.g. ['REGULAR', 'REGULAR', 'CHILD_UNDER_12']. See list_tariffs.
sectionsYesSections from get_route_detail (section_id, departure_station_id, arrival_station_id).
seat_classYesseat_class key from get_route_detail price_classes, e.g. 'TRAIN_LOW_COST', 'C0'.
include_seat_numbersNoList individual free seat numbers per vehicle.

Output Schema

NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so safety is covered. The description adds real, non-obvious domain behavior beyond that: results are grouped per vehicle (carriage/bus) and per route section, and double-decker buses are treated as one vehicle with seats listed per deck — a detail an agent could easily misinterpret as separate vehicles.

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?

Two sentences, front-loaded with the core operation, followed by one sentence that resolves a specific modeling ambiguity. No filler or redundancy.

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?

Return values are covered by the output schema and all five parameters are documented, so the description only needs to frame the operation and result grouping, which it does. A minor gap remains: it does not clarify that this is an availability read with no hold placed, which matters before an agent calls create_reservation.

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 every parameter documented in the schema, including cross-references to get_route_detail and list_tariffs. The description adds no parameter-level meaning, so baseline 3 applies.

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?

Uses a specific verb (get) and resource (free seats) with an explicit scope: per vehicle offering the given seat class, per route section. This is clearly distinguishable from siblings like get_route_detail (which supplies the inputs) and list_seat_classes (which enumerates class keys).

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 itself never says when to call this versus alternatives or what prerequisite flow applies. The ordering hint exists only implicitly via the schema note that sections come from get_route_detail and seat_class comes from price_classes, so usage is inferred rather than stated.

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

get_my_ticketGet My TicketA
Read-only

Get one ticket of the logged-in account: state, seats, price, unpaid amount, cancel conditions.

NameRequiredDescriptionDefault
langNoResponse language; defaults to server setting.
currencyNoPrice currency; defaults to server setting.
ticket_idYes

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.7/5.0
Behavior4/5

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

Beyond the readOnlyHint annotation, the description provides rich behavioral context by listing the specific data fields returned ('state, seats, price, unpaid amount, cancel conditions'). This informs the agent about the successful response structure.

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 definition is highly concise and front-loads the core function and scope in a single, powerful sentence with no unnecessary fluff.

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 lookup tool, the definition is reasonably complete as it specifies the key information returned (price, state, etc.). It is adequate for the task but doesn't specify how optional parameters like `lang` influence the data beyond existence.

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?

The schema coverage is moderate (67%), meaning there is room for improvement. However, since the description adds no specific meaning or constraints to the parameters (`ticket_id`, `lang`, `currency`), it receives the baseline score.

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 clearly states the action ('Get one ticket') and the scope ('of the logged-in account'). While it doesn't explicitly state it requires a specific ID, the combination of the name and description is specific and distinct from listing tickets.

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 usage by focusing on the retrieved data, but it does not explicitly guide the agent on when to choose this over similar sibling tools like `list_my_tickets` or `get_ticket`.

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

get_route_detailGet Route DetailB
Read-only

Get a route's sections (trains/buses, lines, platforms, transfers) and price per seat class.

NameRequiredDescriptionDefault
langNoResponse language; defaults to server setting.
tariffsNoPassenger tariff per traveller, e.g. ['REGULAR', 'REGULAR', 'CHILD_UNDER_12']. See list_tariffs.
currencyNoPrice currency; defaults to server setting.
route_idYesRoute id from search_routes.
to_station_idYesarrival_station_id from search_routes (station, not city).
from_station_idYesdeparture_station_id from search_routes (station, not city).

Output Schema

NameRequiredDescription

No output parameters

TDQS

B3.3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds the shape of what comes back (sections with platforms/transfers plus per-seat-class pricing), which is useful context, but it omits that prices depend on the tariffs/currency parameters and says nothing about failures when a route has no through-fare.

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 with the resource front-loaded and no filler; every clause (sections, vehicle types, platforms, transfers, per-seat-class pricing) contributes information.

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?

Six parameters, three required, with an output schema and annotations already supplied, so return values and safety needn't be in the description. Still, for a pricing/segment tool the description should note that tariffs and currency alter the price output and that station-level (not city-level) ids are mandatory, both of which it leaves entirely to the schema.

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%, including enum values for lang, currency, the tariffs list format, and the explicit 'station, not city' warnings on the station ids. The description adds nothing about parameters, so the schema carries the whole burden and 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 ('Get') and resource ('route's sections') plus the content returned: trains/buses, lines, platforms, transfers, and price per seat class. This is clearly distinct from search_routes (which finds routes) and get_ticket (which returns a purchased ticket), though it never names those siblings explicitly.

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

Usage Guidelines2/5

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

No when-to-use or when-not-to-use guidance, and no stated prerequisite that route_id/from_station_id/to_station_id must first come from search_routes. Only the input schema hints at that dependency; the description itself gives the agent nothing about choosing between this and get_ticket or search_routes.

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

get_ticketGet TicketA
Read-only

Get an existing ticket by account code and ticket id.

NameRequiredDescriptionDefault
langNoResponse language; defaults to server setting.
currencyNoPrice currency; defaults to server setting.
ticket_idYes
account_codeYesCustomer account code (from the ticket e-mail/link).

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.6/5.0
Behavior3/5

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

The annotations already establish a non-mutating, open-world read. The description adds that the ticket must already exist and is retrieved by two keys, but provides no further context about access requirements, missing tickets, or other runtime 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 single sentence is direct, front-loaded, and free of filler. Its brevity is appropriate for a simple keyed retrieval operation.

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?

The input schema, annotations, and output schema supply most of the details needed to invoke this simple read correctly. The principal gap is sibling-selection guidance, especially differentiation from get_my_ticket and list_my_tickets.

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?

The description reinforces that account_code and ticket_id jointly identify the ticket, offering modest context for the otherwise undescribed ticket_id. The schema already documents account_code, lang, and currency, and the description adds no identifier sourcing or formatting details.

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 states a specific verb and resource and identifies the two lookup keys: account code and ticket id. It does not explicitly distinguish this operation from the closely related get_my_ticket or list_my_tickets siblings.

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?

Mentioning an existing ticket and both identifiers implies the intended lookup situation, but there is no explicit when-to-use guidance. In particular, it does not explain when get_my_ticket or list_my_tickets would be preferable.

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

list_action_pricesList Action PricesC
Read-only

List marketing actions / promo prices.

NameRequiredDescriptionDefault
langNoResponse language; defaults to server setting.
active_onlyNo

Output Schema

NameRequiredDescription
resultYes

TDQS

C2.4/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true and openWorldHint: true, so the safety profile is covered, but the description adds nothing beyond them. It does not mention that results default to active-only filtering, whether results are paginated, or that the tool reaches an external/remote source — all behavior an agent would benefit from knowing.

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

Conciseness3/5

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

It is certainly concise and front-loaded, but at seven words it is under-specified rather than efficient; the terseness is the problem, not verbosity.

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

Completeness2/5

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

An output schema exists, so return values need not be explained, but for an open-world, default-filtered listing tool the description leaves out the filtering behavior and the language behavior. Given a 2-parameter schema with one undocumented parameter, the definition is too thin to support confident invocation.

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

Parameters2/5

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

Schema coverage is only 50%: lang is documented in the schema, but active_only has no description anywhere. The description does not compensate — neither parameter is mentioned, and the default-true active-only filter, which materially changes results, goes completely unexplained.

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

Purpose3/5

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

The description names a verb ("List") and a resource ("marketing actions / promo prices"), so the general intent is inferable. However, "action prices" is ambiguous and the slash-separated phrasing leaves unclear whether this returns marketing campaigns, promotional fares, or price records. It also does nothing to distinguish itself from the sibling list_tariffs.

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

Usage Guidelines2/5

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

There is no guidance on when to use this tool, no exclusions, and no mention of the obvious alternative list_tariffs, which an agent would plausibly confuse it with given the overlapping price/tariff vocabulary. The agent must guess from the name alone.

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

list_carriersList CarriersB
Read-only

List carriers operating RegioJet connections.

NameRequiredDescriptionDefault
langNoResponse language; defaults to server setting.

Output Schema

NameRequiredDescription
resultYes

TDQS

B3.2/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds nothing beyond that: no indication of whether the list is static reference data, whether it is paginated or filtered, or how carriers relate to the connections mentioned. For a simple read this is tolerable but it is pure restatement.

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 short sentence with the resource front-loaded and no wasted wording. It is efficient, though its brevity borders on under-specification rather than disciplined concision.

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?

An output schema exists, so return values need not be explained, and annotations cover the safety profile. However, for a discovery tool the description leaves open whether carriers are a fixed reference set and how they map onto routes, which is the main thing an agent would want before calling it.

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 optional 'lang' parameter with 100% schema description coverage and an inline enum, so the schema fully documents it. The description mentions no parameter behavior at all, which is acceptable given the high coverage but adds no meaning beyond the schema baseline.

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 gives a specific verb and resource ('List carriers') plus a scope qualifier ('operating RegioJet connections'), so an agent knows exactly what is returned. It does not explicitly differentiate itself from the sibling list_* tools, but the resource noun is distinct enough that confusion is unlikely.

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: the description makes clear this is a reference enumeration of carriers, which an agent can infer is for discovering available carriers. There is no explicit when-to-use, no prerequisites, and no mention of alternatives such as search_routes when the real goal is route planning.

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

list_my_ticketsList My TicketsA
Read-only

List tickets and reservations on the logged-in account, newest first.

NameRequiredDescriptionDefault
langNoResponse language; defaults to server setting.
limitNo
offsetNo
statesNoFilter by ticket state; all if omitted.
currencyNoPrice currency; defaults to server setting.

Output Schema

NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior3/5

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

Beyond readOnlyHint and openWorldHint, the description discloses account-scoped results and newest-first ordering, while "logged-in account" also implies an authentication prerequisite. It adds no detail about pagination behavior, empty results, or authentication failures, so the additional behavioral context is useful but limited.

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 compact sentence front-loads the operation and account scope, then adds the useful ordering guarantee. There is no filler or redundant wording.

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 read-only tool with no required parameters and an output schema, the account scope, ordering, and schema-defined filters are nearly sufficient for correct selection and invocation. Explicit single-ticket alternatives and a brief explanation of limit/offset pagination would address the main remaining gaps.

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?

The description provides no parameter-specific guidance; lang, states, and currency are documented in the schema, while limit and offset rely on their intuitive names, defaults, and bounds. With 60% schema coverage and simple optional parameters, this is adequate but does not compensate for the undocumented pagination fields.

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 verb "List," the resources "tickets and reservations," the logged-in account scope, and the newest-first ordering make the operation clear. It does not explicitly distinguish this collection listing from get_my_ticket or get_ticket for retrieving a single ticket or its details.

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 wording implies use when retrieving the current user's tickets and reservations rather than searching routes, locations, or other catalog data. There is no explicit when-not guidance or direction to get_my_ticket/get_ticket when the agent already has a ticket identifier or needs full details.

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

list_seat_classesList Seat ClassesB
Read-only

List seat classes (Low cost, Standard, Relax, Business, ...) with descriptions.

NameRequiredDescriptionDefault
langNoResponse language; defaults to server setting.

Output Schema

NameRequiredDescription
resultYes

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds the useful detail that results include human-readable descriptions of each class, but says nothing about ordering, scoping (global vs per route/carrier), or localization behavior.

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 tight sentence with the resource front-loaded and no filler. It could be marginally sharper by noting the scope of the list, but nothing is wasted.

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 read-only enumeration tool with an output schema and complete parameter documentation, the description covers what the tool returns and its examples. The main residual gap is whether seat classes are global or contextual to a route/carrier.

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 optional 'lang' parameter is fully documented in the schema itself. The description adds no meaning beyond that, so the baseline of 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 and resource ('List seat classes') and enumerates concrete examples ('Low cost, Standard, Relax, Business, ...') plus the fact that descriptions are returned. This clearly separates it from siblings like list_tariffs or list_carriers, though it never names those alternatives explicitly.

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

Usage Guidelines2/5

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

There is no when-to-use guidance, no mention of prerequisites, and no reference to alternatives such as list_tariffs or get_free_seats. An agent must infer that this is a reference-data lookup used before browsing fares or booking.

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

list_tariffsList TariffsB
Read-only

List passenger tariffs (adult, child, student, senior, ...). Use key in tariffs arguments.

NameRequiredDescriptionDefault
langNoResponse language; defaults to server setting.

Output Schema

NameRequiredDescription
resultYes

TDQS

B3.3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds only that entries carry a `key`, without mentioning whether the tariff catalog is static or remote, how large it is, or whether the language setting affects keys. With annotations and an output schema present, this modest addition is adequate but thin.

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

Conciseness3/5

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

The description is short and front-loaded, which is good, but the second sentence is ambiguous: `key` is not a parameter here, so the instruction reads as a dangling reference. Two sentences is the right size, but one of them is not earning its place as written.

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?

An output schema exists, so return values need no explanation, and the single parameter is fully documented in the schema. However, for a catalog-listing tool in a large sibling set, the definition never clarifies how the returned keys feed into other tools or whether the list is exhaustive/stable across calls.

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 optional parameter with 100% schema description coverage, so the schema already explains `lang` and its default. The description adds nothing about the parameter and instead introduces a `key` reference that is not an input of this tool, which is mildly confusing rather than informative.

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 gives a specific verb and resource ("List passenger tariffs") and enumerates the categories returned (adult, child, student, senior), which separates it from siblings such as list_action_prices and list_seat_classes. It is clear what the tool returns, though it does not explicitly name the siblings it is distinct from.

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?

"Use `key` in tariffs arguments" implies a workflow — call this first to obtain keys consumed by other tools — but the guidance is cryptic and never states when this tool should be preferred over the other list_* siblings. Usage is implied rather than spelled out.

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

list_vehicle_standardsList Vehicle StandardsB
Read-only

List vehicle standards (e.g. YELLOW, FUN_AND_RELAX) with descriptions.

NameRequiredDescriptionDefault
langNoResponse language; defaults to server setting.

Output Schema

NameRequiredDescription
resultYes

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so the agent knows this is a safe read against an open dataset. The description adds the useful detail that each entry comes with a description, but says nothing about whether the list is paginated, how it relates to vehicles/routes, or whether the labels are locale-dependent.

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 front-loaded sentence with no filler, and the inline examples are the most valuable part of it. It is arguably under-specified rather than verbose, but nothing is wasted.

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?

Because an output schema exists, return values need not be described, and the annotations cover the safety profile. Still, the domain role of 'vehicle standards' — whether these are ticket types, fare categories, or vehicle attributes — is left unexplained, which is the main gap for a tool this simple.

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 optional parameter (lang) with 100% schema description coverage, so the schema already carries its meaning. The description contributes nothing about language behavior, which is the baseline-3 case when 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?

The description names a specific verb and resource ('List vehicle standards') and anchors it with concrete example values (YELLOW, FUN_AND_RELAX), so an agent knows exactly what it enumerates. It doesn't differentiate itself from the sibling list_* tools, but since those cover different resources (tariffs, seat classes, carriers) the resource name already distinguishes it.

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?

There is no explicit when-to-use statement and no mention of alternatives, so usage is only implied: call this to resolve standard codes into their descriptions. An agent can infer it is the lookup for values seen elsewhere, but the description never says so.

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

pay_ticket_with_creditPay Ticket With CreditA
Destructive

Pay UNPAID tickets from the account's RegioJet credit. Spends real money: confirm with the user first.

NameRequiredDescriptionDefault
langNoResponse language; defaults to server setting.
ticket_idsYesUNPAID ticket ids from create_reservation.

Output Schema

NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior4/5

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

Annotations already flag destructiveHint=true and openWorldHint=true, but the description adds the material consequence — "Spends real money" — plus a mandatory user-confirmation step, which is behavior an agent cannot read off the hints. It does not cover partial-batch failure or insufficient-balance handling.

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?

Two short sentences: the action and its funding source first, then the safety warning. Nothing is wasted and the most important risk is front-loaded within the second clause.

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?

An output schema exists, so return values need no explanation, and the description covers the essentials for a money-spending mutation: funding source, eligibility, and confirmation. It omits failure modes (insufficient credit, partially paid batches) that matter for a destructive batch operation.

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 both parameters are already documented, including the create_reservation provenance of ticket_ids. The description only reinforces that ids must be UNPAID; baseline 3 applies where the schema does the heavy lifting.

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?

"Pay UNPAID tickets from the account's RegioJet credit" gives a specific verb (pay), resource (tickets) and funding source (account credit), which separates it from create_reservation and cancel_ticket. It does not name any sibling explicitly, so an agent must infer the boundary itself.

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

Usage Guidelines4/5

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

It states the entry condition (tickets must be UNPAID) and a procedural requirement (confirm with the user first), and the schema pins ticket ids to create_reservation output. It stops short of explicit exclusions, e.g. what to do for already-paid tickets or when credit is insufficient.

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

search_routesSearch RoutesB
Read-only

Search RegioJet connections between two locations on a date. Returns route ids for get_route_detail.

NameRequiredDescriptionDefault
langNoResponse language; defaults to server setting.
pageNoPaginate relative to cursor.
to_idYesDestination city or station id from find_locations.
cursorNoCursor from a previous search_routes result.
from_idYesOrigin city or station id from find_locations.
tariffsNoPassenger tariff per traveller, e.g. ['REGULAR', 'REGULAR', 'CHILD_UNDER_12']. See list_tariffs.
to_typeYes
currencyNoPrice currency; defaults to server setting.
from_typeYes
departure_dateNoDeparture date (YYYY-MM-DD). Defaults to today.

Output Schema

NameRequiredDescription
cursorNoPass back to search_routes together with page=FORWARD/BACKWARD to get the next/previous page.
routesYes
currencyYes

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so safety and external-data traits are covered. The description adds that results are route ids rather than full route objects, which meaningfully shapes agent behavior, but it says nothing about pagination, result volume, or that tariffs/currency affect returned price data.

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?

Two sentences, front-loaded with the operation and immediately followed by the return-value/chaining hint; nothing is redundant. It is efficient but leans terse given the tool's 10 parameters.

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 an output schema present, return-shape detail is not required, and the annotations cover the read-only profile. Still, for a 10-parameter search with cursor pagination, tariff lists and currency options, the description omits enough that an agent must fall back entirely on the schema to call it well.

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 80%, so the schema already documents lang, page, cursor, tariffs, currency and departure_date defaults. The description only restates that two locations and a date are involved, adding no new semantics such as how from_type/to_type interact or how cursor paging is used.

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 ('Search RegioJet connections between two locations on a date') and names the follow-up sibling get_route_detail, so an agent knows this is the entry point to a route lookup. It stops short of distinguishing itself from find_locations or get_free_seats, but the core purpose is unambiguous.

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 clause 'Returns route ids for get_route_detail' implies the intended workflow and sequencing, which is useful guidance. However, there is no explicit statement of when to prefer this over alternatives, no prerequisites (e.g. ids must come from find_locations), and no exclusions.

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. 16 tool updatesv0.1.3
    • First observedcancel_ticket
    • First observedcreate_reservation
    • First observedfind_locations
    • First observedget_account
    • First observedget_free_seats
    • First observedget_my_ticket
    • First observedget_route_detail
    • First observedget_ticket
    • First observedlist_action_prices
    • First observedlist_carriers
    • First observedlist_my_tickets
    • First observedlist_seat_classes
    • First observedlist_tariffs
    • First observedlist_vehicle_standards
    • First observedpay_ticket_with_credit
    • First observedsearch_routes

TDQS

A3.5/5.0

Scored across 16 tools

Disambiguation4/5

Most tools have clear, distinct roles: location lookup, route search/detail, seat availability, reference lists, and the account/ticket lifecycle are well separated. The one weak spot is the trio get_ticket / get_my_ticket / list_my_tickets, where the boundary between retrieving 'an existing ticket by account code' and 'one ticket of the logged-in account' requires careful reading of descriptions.

Naming Consistency5/5

All names are snake_case verb_noun (get_ticket, search_routes, list_seat_classes, create_reservation, cancel_ticket), with consistent get_/list_/find_/search_/create_/cancel_/pay_ prefixes. Exceptions like pay_ticket_with_credit still fit the verb-first convention and remain readable.

Tool Count4/5

16 tools is at the upper bound but justified by the domain: five cheap list_* reference lookups (tariffs, seat classes, vehicle standards, carriers, action prices) support the core search/book/pay flow. A couple of the list endpoints (carriers, vehicle standards) are marginally useful, so it is slightly over-scoped rather than well-scoped.

Completeness4/5

The booking lifecycle is well covered end-to-end: locate stations, search routes, inspect detail/seats, reserve, pay with credit, and cancel, plus account and ticket retrieval. The main gap is the absence of a modify/update-reservation operation, forcing users to cancel and recreate; there is also no explicit passenger-detail handling visible in the surface.

Maintenance

ActivityMaintained
ResponsivenessSyncing

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    F
    maintenance
    Enables searching for train connections, stations, and ticket pricing on the Czech railway network via the official České dráhy API. It supports retrieving detailed connection information and passenger discount categories for travel planning.
    5
    5
    MIT
  • A
    license
    B
    quality
    D
    maintenance
    Provides real-time Transport for London journey data, including routes, alerts, and disruptions, allowing AI assistants to search journeys and get station information.
    1
    3 npm
    4
    ISC
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables searching Turkish high-speed train (YHT) tickets via TCDD API. Supports real-time availability, station name resolution, date formatting, and passenger count.
    MIT
  • F
    license
    A
    quality
    D
    maintenance
    Connects AI assistants to Swiss Federal Railways (SBB/CFF/FFS) data: train schedules, station search, ticket prices, and direct ticket purchase links.
    6
    52 npm
    -