get_line_status
Check real-time status and disruptions for London Underground lines using Transport for London data. Query specific tube lines to get current service information for journey planning.
Instructions
Get the status of a TfL line from the Transport for London Unified API.
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| lineId | Yes | The identifier of the line to query (e.g., victoria, central). | |
| app_key | No | Optional application key for the API. |
Implementation Reference
- tools/tfl/status.js:9-39 (handler)The core handler function `executeFunction` that fetches the current status of a specified TfL line from the TfL API, handling parameters and errors.const executeFunction = async ({ lineId, app_key }) => { if (!lineId) { throw new Error('lineId is required'); } const params = new URLSearchParams(); if (app_key) { params.append('app_key', app_key); } const query = params.toString(); const url = `https://api.tfl.gov.uk/Line/${encodeURIComponent(lineId)}/Status${query ? `?${query}` : ''}`; try { const response = await fetch(url, { method: 'GET' }); if (!response.ok) { const errorData = await response.json(); throw new Error(JSON.stringify(errorData)); } return await response.json(); } catch (error) { console.error('Error fetching the status:', error); return { error: `An error occurred while fetching the status: ${error instanceof Error ? error.message : JSON.stringify(error)}` }; } };
- tools/tfl/status.js:45-68 (schema)The `apiTool` object defining the tool's schema, including name, description, input parameters schema with lineId required and app_key optional.const apiTool = { function: executeFunction, definition: { type: 'function', function: { name: 'get_line_status', description: 'Get the status of a TfL line from the Transport for London Unified API.', parameters: { type: 'object', properties: { lineId: { type: 'string', description: 'The identifier of the line to query (e.g., victoria, central).' }, app_key: { type: 'string', description: 'Optional application key for the API.' } }, required: ['lineId'] } } } };
- lib/tools.js:7-30 (registration)The `discoverTools` function that dynamically loads the `apiTool` exports from tool files listed in toolPaths, enabling registration of get_line_status among others for the MCP server.export async function discoverTools() { const tools = await Promise.all( toolPaths.map(async (file) => { const { apiTool } = await import(`../tools/${file}`); return { ...apiTool, path: file }; }) ); // deduplicate tool names const nameCounts = {}; return tools.map((tool) => { const name = tool.definition?.function?.name; if (!name) return tool; nameCounts[name] = (nameCounts[name] || 0) + 1; if (nameCounts[name] > 1) { tool.definition.function.name = `${name}_${nameCounts[name]}`; } return tool; }); }
- tools/paths.js:1-5 (registration)The `toolPaths` array listing 'tfl/status.js' which provides the get_line_status tool, used by discoverTools for automatic registration.export const toolPaths = [ 'tfl/status.js', 'tfl/status-detail.js', 'tfl/journey-planner.js' ];