Model Context Protocol server for LTA DataMall API providing real-time Singapore transport data including bus arrivals, train crowding, traffic incidents, and carpark availability
Server defines 7 tools with complete input schemas and descriptions. Naming follows verb_noun pattern (bus_arrival, station_crowding, etc.). Descriptions are present (avg ~120 chars) but lack actionable context, they state WHAT but not WHEN to use or prerequisites. Parameters are typed with enums where appropriate (trainLine), but several tools accept no parameters and lack output schema documentation. Error handling returns API errors but does not guide recovery. No tool annotations (readOnlyHint, idempotentHint). Output is raw JSON from LTA API, not shaped for agent consumption.
Get real-time bus arrival information for a specific bus stop and optionally a specific service number. Returns estimated arrival times, bus locations, and crowding levels.
Get real-time availability of parking lots for HDB, LTA, and URA carparks. Updates every minute.
Get forecasted MRT/LRT station crowdedness levels in 30-minute intervals.
Get real-time MRT/LRT station crowdedness level for a particular train network line. Updates every 10 minutes.
Get current road incidents including accidents, roadworks, and heavy traffic. Updates every 2 minutes.
Get real-time train service alerts including service disruptions and shuttle services. Updates when there are changes.
No output schema documentation. Tools return raw LTA API JSON without describing field structure, types, or which fields agents should extract. LLMs cannot plan downstream calls or validate responses.
Descriptions lack actionable context. They state WHAT (e.g., 'Get real-time bus arrival') but not WHEN to use it or prerequisites. Missing dependency hints like 'Requires a valid 5-digit bus stop code; use search_bus_stops() if unknown.'
No tool annotations. Tools lack readOnlyHint, destructiveHint, or idempotentHint. Agents cannot determine if a tool is safe to retry or has side effects.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 51 | 2026-07-28+ | v2 |
Get estimated travel times on expressway segments. Updates every 5 minutes.
Error handling does not guide recovery. Errors return raw API messages (e.g., 'LTA API error: ...') without suggesting next steps. Should return 'Invalid bus stop code. Try search_bus_stops() with a partial name or area.'
No pagination or result limits documented. Tools returning lists (e.g., carpark_availability, traffic_incidents) do not specify max results or pagination strategy. Large responses risk context window exhaustion.