MCP server for a self-hosted OpenTripPlanner (OTP) — accurate Kanto rail/subway journey planning and station search over stdio or HTTP
Three tools with complete JSON schemas and descriptions. Naming follows verb_noun pattern (plan_*, suggest_*). Descriptions are domain-specific and contextual (150-250 chars), explaining WHAT, WHEN, and coverage limits. All parameters have types and descriptions. However, descriptions lack explicit error guidance and recovery hints. Output schemas are not formally documented in the code. No tool annotations (readOnlyHint) despite all being read-only operations. Parameter descriptions could be more prescriptive about format constraints.
Plan a public-transit (rail/subway) journey using a self-hosted OpenTripPlanner instance (self-hosted OTP (Kanto rail/subway)). 'from' and 'to' are each a station name (e.g. "新宿") or a "lat,lon" coordinate. Returns ranked itineraries with per-leg lines (line name, stations, minutes), departure/arrival times, and transfer count. Accurate within the covered area (Kanto); returns no route for places outside coverage.
Plan a rail/subway journey and render it as a Yahoo!乗換案内-style vertical timeline (an inline interactive view on claude.ai). The view shows stations, departure/arrival times, line names in their official colors, and transfer points stacked vertically; the same itinerary is also returned as text. 'from' and 'to' are each a station name (e.g. "新宿") or a "lat,lon" coordinate. By default shows the best (fastest) itinerary; use 'routeIndex' to pick another. Prefer this over plan_journey when a visual route is helpful.
Autocomplete station names against the self-hosted OpenTripPlanner instance (self-hosted OTP (Kanto rail/subway)). Returns matching stations with coordinates. Use to resolve or disambiguate a name before plan_journey.
No tool annotations (readOnlyHint/destructiveHint/idempotentHint) despite all tools being read-only. Agents cannot infer safety properties without explicit hints.
Output schemas not formally documented in code. Descriptions mention return structure (itineraries, stations, coordinates) but no JSON Schema for response objects. LLMs cannot reliably parse or chain results.
Parameter descriptions lack format constraints. 'from' and 'to' accept 'station name or lat,lon' but no regex pattern or example format provided. LLMs may pass invalid coordinates or malformed strings.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 63 | 2025-06-18+ | v2 |
No error recovery guidance in descriptions. Tool descriptions state coverage limits ('Accurate within Kanto; returns no route for places outside coverage') but do not guide LLM on what to do when a query fails or returns empty.
plan_route_map description mentions 'Yahoo!乗換案内-style vertical timeline' and 'inline interactive view on claude.ai' but does not explain when to prefer it over plan_journey. Disambiguation guidance is implicit, not explicit.