Belgian rail (SNCB/NMBS) real-time via the community iRail API
Four well-defined tools with complete input schemas, strong descriptions (150 - 250 chars each), and clear parameter documentation. Tool names follow verb_noun convention (irail_*). All parameters have type and description. Station aliasing and fuzzy matching are well-documented. Output schemas are not explicitly documented in the source, which is the primary gap. Error handling is mentioned in comments but not formalized in tool definitions. No tool annotations (readOnlyHint, destructiveHint) despite all tools being read-only.
Current disturbances, incidents, and planned works on the Belgian rail network (SNCB NMBS Infrabel) — strikes, track works, line closures affecting Belgian train service. Returns title, summary, type (planned or disturbance), link, and last-updated time. Example: irail_disturbances({})
Plan a train journey between two Belgian stations — SNCB NMBS route planner with legs, transfers, live delays, and platforms per leg. Answers "next train from Brussels to Antwerp", "how do I get from Ghent to Liège by rail". Optional depart_at or arrive_by as ISO datetime ("2026-07-20T09:00") or time ("09:00"), interpreted in Belgian local time. Example: irail_journey({ from: "Brussels-South", to: "Antwerp-Central" })
Live departures board at a Belgian train station — Belgian train times SNCB NMBS. Brussels Antwerp Ghent departures with train number, destination, scheduled time, delay in minutes, platform, and canceled flag. Set type to "arrival" for the arrivals board. Station names accept English exonyms and fuzzy input ("Brussels-South", "Antwerp-Central", "Liège-Guillemins"). Example: irail_liveboard({ station: "Brussels-South" })
Track one Belgian train by its number — is my Belgian train delayed. All stops with scheduled vs actual times, per-stop delay in minutes, platforms, current delay, and live position. Accepts "IC 1832", "IC1832", or "BE.NMBS.IC1832". Train numbers come from irail_liveboard or irail_journey. Example: irail_train({ id: "IC1832" })
Output schemas not documented. Tool descriptions explain what is returned (e.g., 'train number, destination, scheduled time, delay in minutes, platform, canceled flag') but formal JSON Schema output types are absent. LLMs cannot plan downstream operations without knowing response structure.
Tool annotations missing. All four tools are read-only (no state modification), but readOnlyHint is not set in tool definitions. This forces LLMs to infer safety from descriptions rather than machine-readable metadata.
Error handling not formalized in tool definitions. Code comments describe API quirks (303 redirects, fuzzy station matching, delay in seconds) and error cases (RequestedStopNotFoundException), but tool definitions do not document error responses or recovery guidance for LLMs.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 63 | 2026-07-28+ | v2 |
Parameter constraints not fully formalized. 'limit' parameters describe ranges (1 - 50, 1 - 6) in descriptions but lack JSON Schema minValue/maxValue. 'type' enum is correct, but 'date' and 'depart_at'/'arrive_by' formats lack pattern or format declarations.
Transport mechanism not visible in source. package.json and index.ts do not show how the server exposes tools (HTTP, STDIO, SSE). Without explicit transport declaration, protocol readiness cannot be fully assessed.