An MCP-compatible server for querying public transport data in Europe (UK, CH, BE, NO).
The server registers 22 tools across 6 European transport systems (CH, UK, BE, NO, PT, VBB). All tools have descriptive names following verb_resource convention (search_*, get_*, nearby_*). Descriptions are present and detailed (average ~180 chars), explaining WHAT each tool does and WHEN to use it. Input schemas are well-defined with proper JSON Schema types, ranges, and validation constraints (min/max for coordinates, string lengths). However, output schemas are not documented, the rubric requires 'Document the output schema. LLMs need to know what fields to expect.' Additionally, parameter descriptions occasionally reference example values (e.g. 'Example: Zürich HB') which the rubric warns against ('LLMs tend to reuse example values literally'). Error handling is minimal, no actionable recovery guidance is visible in the source. All tools are READ_ONLY (safe), but no error classification or tool annotations (readOnlyHint, destructiveHint) are present.
Get live departure board for a Belgian train station.
Get details about a specific Belgian train vehicle by its ID.
Search train connections in Belgium between two stations. Powered by iRail API for real-time routes and schedules.
Search for Belgian train stations by name.
Get departure board for a Swiss train station with real-time information.
Find nearby Swiss train stations based on coordinates (latitude, longitude).
Search for train connections in Switzerland between two stations. Uses transport.opendata.ch API to provide real-time connection data including departure times, duration, platforms, and transfers.
Output schemas not documented. The rubric requires 'Document the output schema. LLMs need to know what fields to expect so they can plan downstream tool calls and extract the right data.' None of the 22 tools have documented return types or field structures visible in the source.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | C | 64 | <=2025-11-25 | v2 |
| 2026-03-09 | F | 23 | - | v1 |
Search for Swiss train stations by name or location.
Find nearest StopPlaces for a coordinate (lat, lon) within a radius in meters.
Autocomplete search across stops/addresses/POIs in Norway via Entur Geocoder.
Upcoming departures for a StopPlace ID (e.g., 'NSR:StopPlace:58368').
Door-to-door trip planning between two StopPlaces (NSR IDs).
Get the departure board for a stop in the Lisbon or Porto metro area. Needs a stop id from pt_search_stations. Returns upcoming departures with line, headsign and real-time times. Data via Transitous (https://transitous.org), a best-effort, volunteer-run service; usage policy: https://transitous.org/api/.
Find stops/stations near coordinates in the Lisbon or Porto metro area. Returns the closest stops with id, name and coordinates. Data via Transitous (https://transitous.org), a best-effort, volunteer-run service; usage policy: https://transitous.org/api/.
Plan a public transport connection between two points in the Lisbon or Porto metro area. Origin and destination are either stop ids (from pt_search_stations) or 'lat,lon' coordinates. Returns itineraries with legs, lines, times and transfers. Data via Transitous (https://transitous.org), a best-effort, volunteer-run service; usage policy: https://transitous.org/api/.
Search for stops/stations in Portugal by name. Covers the Lisbon and Porto metro areas (metro, buses, trams, suburban rail) via Transitous. Returns stop id, name and coordinates - use the id with pt_search_connections and pt_get_departures. Data via Transitous (https://transitous.org), a best-effort, volunteer-run service; usage policy: https://transitous.org/api/.
Get live departure information for a UK train station using its CRS code (e.g., 'PAD' for London Paddington, 'MAN' for Manchester Piccadilly). Uses the TransportAPI station timetables endpoint with live data.
Get arrivals at a stop/station in Berlin/Brandenburg. Returns real-time arrival information including delays, platform, and line details.
Get departures at a stop/station in Berlin/Brandenburg. Returns real-time departure information including delays, platform, and line details.
Find stops/stations near a location in Berlin/Brandenburg by coordinates. Returns nearby stops with distance information.
Search for journeys between two locations in Berlin/Brandenburg. Returns connections with real-time data, transfers, duration, and line information. Supports departure or arrival time based planning.
Search for stops/stations, POIs and addresses in Berlin/Brandenburg. Uses v6.vbb.transport.rest API to find locations matching a query. Returns location details including ID, name, coordinates, and available transport products.
Example values in parameter descriptions. The rubric warns: 'Do not put example values in the description. LLMs tend to reuse example values literally rather than adapting to the actual context.' All tools include example values (e.g. 'Example: Zürich HB', 'Example: PAD') which may cause LLMs to use these literally in real calls.
No error handling with recovery guidance. The rubric requires: 'Error responses must tell the LLM what to do next.' No actionable error messages or error classification (retryable, user-fixable, fatal) visible in source code.
No tool annotations (toolAnnotations: false). The rubric rewards 'tool annotations (readOnlyHint/destructiveHint/idempotentHint)' as part of current spec patterns. All 22 tools are READ_ONLY but lack explicit readOnlyHint annotation, missing clarity to the LLM about idempotence and safety.
Pagination limits may be insufficient for large results. Several tools accept limit/results parameters capped at 10 - 50, but tools like 'pt_search_stations' and 'vbb_search_locations' cap at 50. The rubric requires: 'Tools returning lists should accept page/offset and limit parameters and return a total count or next_cursor.' No next_cursor or offset-based pagination visible.