Skip to main content
Glama
anoopt

TfL Journey Status MCP Server

get_line_status_detail

Check real-time status and disruption details for specific London Underground lines to plan journeys and avoid delays.

Instructions

Get the status and details of a TfL line.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
lineIdYesThe identifier of the line to query (e.g., victoria, central).
app_keyNoOptional application key for authentication.

Implementation Reference

  • Handler function that executes the tool logic: fetches detailed status from TfL API for the specified line ID.
    const executeFunction = async ({ lineId, app_key }) => {
      if (!lineId) {
        throw new Error('lineId is required');
      }
    
      const params = new URLSearchParams([['detail', 'true']]);
      if (app_key) {
        params.append('app_key', app_key);
      }
    
      const url = `https://api.tfl.gov.uk/Line/${encodeURIComponent(lineId)}/Status?${params.toString()}`;
      
      try {
        const response = await fetch(url, {
          method: 'GET',
          headers: {
            'Content-Type': 'application/json'
          }
        });
    
        if (!response.ok) {
          const errorData = await response.json();
          throw new Error(JSON.stringify(errorData));
        }
    
        return await response.json();
      } catch (error) {
        console.error('Error fetching status and details:', error);
        return {
          error: `An error occurred while fetching status and details: ${error instanceof Error ? error.message : JSON.stringify(error)}`
        };
      }
    };
  • Tool definition object `apiTool` containing the schema (name, description, parameters) and reference to handler function.
    const apiTool = {
      function: executeFunction,
      definition: {
        type: 'function',
        function: {
          name: 'get_line_status_detail',
          description: 'Get the status and details of a TfL line.',
          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 authentication.'
              }
            },
            required: ['lineId']
          }
        }
      }
    };
  • tools/paths.js:1-5 (registration)
    toolPaths array registers the paths to tool files, including status-detail.js, used by discoverTools.
    export const toolPaths = [
      'tfl/status.js',
      'tfl/status-detail.js',
      'tfl/journey-planner.js'
    ];
  • lib/tools.js:7-30 (registration)
    discoverTools function loads apiTool from each path (including status-detail.js) and returns array of tools for MCP server registration.
    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;
      });
    }

Tool Definition Quality

Score is being calculated. Check back soon.

Install Server

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

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