MCP server for Metro-North schedules, stations, service alerts, and real-time departures
Metro-North MCP has 11 well-named tools with consistent verb_noun patterns (get_*, search_*, plan_*). All tools have descriptions (avg ~80 chars, within baseline 34-392 range). Input schemas are present and typed for all tools. However, descriptions are terse and lack context for LLM selection, most are single-sentence statements without WHEN/WHY guidance. Parameter descriptions exist but are minimal (avg ~40 chars vs baseline 72). Output schemas are not documented in the source. Error handling and recovery guidance are absent. No tool annotations (readOnlyHint, destructiveHint, idempotentHint) despite all tools being READ_ONLY. Composition is sound, tools are single-responsibility and chainable (e.g., search_stations → get_station_info → get_departures). Security posture is good: no secrets in parameters, all tools are read-only, no destructive operations.
Get elevator and escalator outage information for Metro-North stations
Get upcoming departures from a station
Get the first and last trains of the day for a route
Get the schedule for a specific route on a given date
Get current service alerts for routes or stations
Get detailed information about a specific station
Get schedule for trips between two specific stations
Get overall system status including GTFS data freshness and cache information
Descriptions lack LLM-selection context. Most are single-sentence statements (avg 80 chars) without WHEN to use, WHAT it returns, or dependencies. E.g., 'Get upcoming departures from a station' does not explain when to call it vs get_route_schedule or plan_metro_north_trip.
Output schemas not documented. Source code shows input schemas but no return type definitions. LLMs cannot plan downstream calls or extract fields without knowing what each tool returns.
Inferred effective spec: 2026-07-28+.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 60 | 2026-07-28+ | v2 |
Get detailed information about a specific trip including all stops
Plan a trip between two stations with optional transfers and real-time information
Search for stations by name or partial name
No tool annotations despite all tools being read-only. Missing readOnlyHint annotations prevent LLMs from understanding which tools are safe to call without confirmation.
Parameter descriptions are minimal (avg 40 chars vs baseline 72). E.g., 'Direction of travel (inbound/outbound)' lacks guidance on when each is valid or what happens if omitted.
No error handling or recovery guidance in tool definitions. If a station name is invalid or a trip_id does not exist, LLMs have no guidance on what to do next.