Skip to main content
Glama

bus_arrival

Retrieve real-time bus arrival details for a specific bus stop in Singapore, including estimated times, bus locations, and crowding levels. Optional filtering by bus service number.

Instructions

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.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
busStopCodeYesThe unique 5-digit bus stop code
serviceNoNoOptional bus service number to filter results

Implementation Reference

  • Handler function for the 'bus_arrival' tool. Calls the LTA BusArrival API with busStopCode and optional serviceNo, returns JSON response or error.
    case "bus_arrival": { const { busStopCode, serviceNo } = request.params.arguments as { busStopCode: string; serviceNo?: string; }; try { const response = await axios.get('https://datamall2.mytransport.sg/ltaodataservice/v3/BusArrival', { params: { BusStopCode: busStopCode, ...(serviceNo && { ServiceNo: serviceNo }) }, headers: { 'AccountKey': process.env.LTA_API_KEY!, 'accept': 'application/json' } }); return { content: [{ type: "text", text: JSON.stringify(response.data, null, 2) }] }; } catch (error) { if (axios.isAxiosError(error)) { return { content: [{ type: "text", text: `LTA API error: ${error.response?.data?.Message ?? error.message}` }], isError: true }; } throw error; } }
  • Input schema definition for the 'bus_arrival' tool, including properties for busStopCode (required) and serviceNo (optional).
    name: "bus_arrival", description: "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.", inputSchema: { type: "object", properties: { busStopCode: { type: "string", description: "The unique 5-digit bus stop code" }, serviceNo: { type: "string", description: "Optional bus service number to filter results" } }, required: ["busStopCode"] } },
  • src/index.ts:47-129 (registration)
    Registers the 'bus_arrival' tool (among others) in the ListToolsRequestSchema handler.
    this.server.setRequestHandler(ListToolsRequestSchema, async () => { return { tools: [{ name: "bus_arrival", description: "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.", inputSchema: { type: "object", properties: { busStopCode: { type: "string", description: "The unique 5-digit bus stop code" }, serviceNo: { type: "string", description: "Optional bus service number to filter results" } }, required: ["busStopCode"] } }, { name: "station_crowding", description: "Get real-time MRT/LRT station crowdedness level for a particular train network line. Updates every 10 minutes.", inputSchema: { type: "object", properties: { trainLine: { type: "string", description: "Code of train network line (CCL, CEL, CGL, DTL, EWL, NEL, NSL, BPL, SLRT, PLRT, TEL)", enum: ["CCL", "CEL", "CGL", "DTL", "EWL", "NEL", "NSL", "BPL", "SLRT", "PLRT", "TEL"] } }, required: ["trainLine"] } }, { name: "train_alerts", description: "Get real-time train service alerts including service disruptions and shuttle services. Updates when there are changes.", inputSchema: { type: "object", properties: {} // No parameters needed } }, { name: "carpark_availability", description: "Get real-time availability of parking lots for HDB, LTA, and URA carparks. Updates every minute.", inputSchema: { type: "object", properties: {} // No parameters needed } }, { name: "travel_times", description: "Get estimated travel times on expressway segments. Updates every 5 minutes.", inputSchema: { type: "object", properties: {} // No parameters needed } }, { name: "traffic_incidents", description: "Get current road incidents including accidents, roadworks, and heavy traffic. Updates every 2 minutes.", inputSchema: { type: "object", properties: {} // No parameters needed } }, { name: "station_crowd_forecast", description: "Get forecasted MRT/LRT station crowdedness levels in 30-minute intervals.", inputSchema: { type: "object", properties: { trainLine: { type: "string", description: "Code of train network line (CCL, CEL, CGL, DTL, EWL, NEL, NSL, BPL, SLRT, PLRT, TEL)", enum: ["CCL", "CEL", "CGL", "DTL", "EWL", "NEL", "NSL", "BPL", "SLRT", "PLRT", "TEL"] } }, required: ["trainLine"] } }] };

Other Tools

Related Tools

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/arjunkmrm/mcp-sg-lta'

If you have feedback or need assistance with the MCP directory API, please join our Discord server