Skip to main content
Glama
anoopt

TfL Journey Status MCP Server

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
NameRequiredDescriptionDefault
lineIdYesThe identifier of the line to query (e.g., victoria, central).
app_keyNoOptional application key for the API.

Implementation Reference

  • 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)}`
        };
      }
    };
  • 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'
    ];

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/anoopt/london-tfl-journey-status-mcp-server'

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