MCP server for Polish train connections and station information via Koleo API
Server has 14 well-named tools with consistent verb_noun patterns (search_, get_, tool_ prefix). All tools have descriptions (avg ~100 chars, within baseline 34-392 range). Input schemas are visible and properly typed in function signatures. However, critical gaps: (1) No output schemas documented, LLMs cannot predict response structure for planning; (2) Parameter descriptions are minimal (avg ~50 chars vs baseline 72); (3) No error handling guidance, tools return JSON strings with no recovery hints; (4) No pagination support despite tools like search_connections returning lists; (5) No input validation or constraint documentation (e.g., 'stations' array must be exactly 2 elements, but not enforced or clearly stated). Tool names are clear and action-oriented, but descriptions lack WHEN/WHY context and dependency hints.
Get all trains (both departures and arrivals) at a station, sorted by time.
Get upcoming train arrivals at a station.
List all available train brands/operators (IC, REG, EIC, KM, etc.).
List all train carriers (PKP Intercity, POLREGIO, etc.).
Get upcoming train departures from a station.
Get realtime timetable for a train, including actual vs scheduled times. Requires authentication in config.
Get raw seat availability for a connection by connection_id, train_nr, and place_type.
No output schemas documented. Tools return JSON strings via json.dumps(), but LLMs cannot predict response structure for multi-step planning. E.g., does search_stations return {id, name, slug, type} or {stations: [{...}]}? This forces trial-and-error parsing.
No pagination support. Tools like search_connections and search_stations return lists but lack limit/offset/page parameters and total_count in response. Large result sets will blow context windows.
Parameter constraints not enforced or documented. E.g., tool_get_seat_stats requires 'stations' to be exactly 2 elements, but no validation or clear constraint in description. tool_search_connections 'length' defaults to 5 but no min/max bounds stated.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 53 | 2026-07-28+ | v2 |
Check seat occupancy statistics for a train on a given route segment.
Get detailed info about a station: address, opening hours, available facilities.
Get a train's route and stops by its internal Koleo ID.
Get all dates when a specific train runs (operating calendar).
Get the full route and stop schedule for a train by brand and number.
Search for train connections between two stations.
Search for train stations by name. Returns station IDs, slugs, and types.
No error handling guidance. Tools return json.dumps() of API responses with no recovery hints. If a station name is invalid or API fails, LLM gets raw error with no actionable next step (e.g., 'Try search_stations() first').
Parameter descriptions lack context. E.g., 'date' param in multiple tools says 'ISO datetime. Defaults to now.' but does not explain timezone handling, whether past dates are allowed, or what 'now' means in the Koleo API context.