MCP server for high-speed train ticket querying and booking with AI assistant integration
This server has 2 tools with basic schemas and descriptions, but falls short of production quality. Both tools have reasonable JSON Schema input definitions and brief descriptions, but lack critical details: no output schemas documented, no error handling guidance, no parameter descriptions beyond names, and missing validation rules. The naming follows verb-noun convention (query-ticket, buy-ticket), which is acceptable. However, parameter descriptions are absent, LLMs cannot understand what 'seatLevel' means without a description explaining seat class options. The buy-ticket tool is marked IRREVERSIBLE but has no confirmation step, dry-run, or safety guardrails documented. No tool has structured output specifications, pagination support, or recovery guidance. The server uses HTTP transport (mcp-spring-webmvc), which is current. However, there is no evidence of tool annotations (readOnlyHint, destructiveHint), stateless request handling per-spec, or current MCP patterns like MRTR (Multi Round-Trip Requests) for confirmation flows.
Purchase high-speed train ticket
Query high-speed train tickets
Parameter descriptions missing. Input schemas define startStation, endStation, seatLevel, numSeats as strings/numbers, but no descriptions explain what they mean (e.g., is seatLevel an enum of valid seat classes? What format are station names?).
Output schemas not documented. Neither tool specifies what fields are returned (e.g., does query-ticket return ticket_id, price, departure_time?). LLMs cannot plan downstream calls without knowing response structure.
buy-ticket is marked IRREVERSIBLE but has no confirmation step, dry-run option, or safety guardrails. Agents can trigger actual ticket purchases without review. Should implement MRTR (Multi Round-Trip Requests) with a confirmation step.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | D | 56 | <=2025-11-25 | v2 |
| 2026-03-09 | F | 38 | - | v1 |
seatLevel parameter lacks constraints. No enum or validation guidance provided. LLMs may pass invalid seat classes (e.g., '商务座' vs 'business'). Description should specify valid seat class options or reference an enum.
No error handling guidance. If a station name is invalid, ticket not available, or purchase fails, responses provide no recovery hints. LLMs cannot self-correct or suggest alternatives.
No tool annotations (destructiveHint, readOnlyHint). buy-ticket is clearly destructive/irreversible but not annotated. query-ticket is read-only but not annotated. This prevents clients from applying appropriate safety policies.
Station names require human-friendly resolution but tool accepts raw strings. If a user says 'Beijing', should the tool accept 'Beijing', 'BJS', or '北京'? No guidance on how to resolve ambiguous or alternate names.
query-ticket lacks pagination. No mention of limit, offset, page, or next_cursor. If there are many tickets, the response could be huge, wasting tokens and overwhelming context.