Live Amtrak train tracking via the community Amtraker API (api-v3.amtraker.com, a mirror of Amtrak's own track-a-train feed)
Four well-defined tools with clear, detailed descriptions (150 - 250 chars each) and complete JSON Schema input definitions. All tools are read-only, reducing risk. Naming follows verb_noun convention (amtrak_*). Parameters have type and description. However, output schemas are not documented, LLMs cannot predict response structure for chaining. No error handling guidance (e.g., what to do if train/station not found). Parameter descriptions lack format constraints (e.g., 'train number format: 1 - 4 digits' or 'station code: exactly 3 uppercase letters'). No pagination guidance despite tools returning lists. Missing tool annotations (readOnlyHint present implicitly via Risk field, but not in schema).
Summary of ALL currently active Amtrak trains grouped by route — "how many Amtrak trains are running right now", "which Amtrak routes have delays", national system overview. Returns per route: active train count, train numbers, and the worst delay in minutes. Compact; live from a community mirror of Amtrak's tracking feed. Example: amtrak_routes_active({})
Amtrak station departures/arrivals board — upcoming trains at a station. "What trains are arriving at Chicago Union?", "next train at CHI", "station board for Denver". Accepts a 3-letter Amtrak station code ("CHI", "NYP", "LAX") or a station name ("Chicago", "Portland"). Returns trains currently en route to that station with route, scheduled vs estimated arrival, delay minutes, and status. Live community mirror of Amtrak tracking (api-v3.amtraker.com). Example: amtrak_station_board({ station: "CHI" })
Amtrak station lookup by code or name — station name, 3-letter code, city/state, street address, timezone, coordinates, and how many trains are currently inbound. "Where is the Amtrak station in Denver?", "what is station code NYP". Example: amtrak_station_info({ station: "Denver" })
Live Amtrak train status and GPS tracking — "where is my Amtrak train", "is train 6 late", "track the California Zephyr". Accepts a train number ("6", "2150") or route name ("Coast Starlight", "Empire Builder"). Returns each active instance of that train: current GPS position, speed, heading, timeliness, next station with ETA and delay minutes, and origin/destination scheduled vs actual times. Data is a community mirror of Amtrak's own tracking feed (api-v3.amtraker.com); positions update about every few minutes. Example: amtrak_train_status({ train: "6" })
Output schemas not documented. LLMs cannot predict response structure (fields, types, nesting) for downstream chaining or data extraction. Responses include Train/Station/TrainStop interfaces defined in code but not exposed to the agent.
Parameter format constraints missing. 'train' accepts 'train number (e.g. "6", "2150") or route name' but no regex/enum/pattern. 'station' accepts '3-letter code or name' but no validation hint. LLMs may pass invalid formats (e.g., 'train 6a' or 'station CHICAGO').
No error recovery guidance. Code shows API returns [] with HTTP 200 for unknown trains/stations, but tool descriptions do not explain this behavior or suggest fallback actions (e.g., 'If no results, try amtrak_routes_active to see active trains').
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 60 | 2026-07-28+ | v2 |
Pagination not addressed. amtrak_station_board accepts 'limit' (1 - 15) but no offset/cursor or total count documented. amtrak_routes_active returns all routes with no limit control, could be large and blow context window.
Tool annotations missing from schema. Risk field in metadata shows 'READ_ONLY' but inputSchema lacks readOnlyHint annotation. Modern MCP spec expects tool annotations in the schema for LLM safety reasoning.