Skip to main content
Glama

get-stations-code-in-city

Find all railway stations and their codes in a Chinese city to identify departure or arrival points for train travel planning.

Instructions

通过中文城市名查询该城市 所有 火车站的名称及其对应的 station_code,结果是一个包含多个车站信息的列表。当用户想了解一个城市有哪些火车站,或者不确定具体从哪个车站出发/到达时可以使用此接口。

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
cityYes中文城市名称,例如:"北京", "上海"

Implementation Reference

  • The core handler function for the 'get-stations-code-in-city' tool. It validates the city exists in CITY_STATIONS map and returns a JSON string of the city's stations with their codes and names, or an error message.
    async ({ city }) => {
      if (!(city in CITY_STATIONS)) {
        return {
          content: [{ type: 'text', text: 'Error: City not found. ' }],
        };
      }
      return {
        content: [{ type: 'text', text: JSON.stringify(CITY_STATIONS[city]) }],
      };
    }
  • src/index.ts:591-607 (registration)
    The server.tool registration call that defines the tool name, description, input schema (city: string), and inline handler function.
    server.tool(
      'get-stations-code-in-city',
      '通过中文城市名查询该城市 **所有** 火车站的名称及其对应的 `station_code`,结果是一个包含多个车站信息的列表。当用户想了解一个城市有哪些火车站,或者不确定具体从哪个车站出发/到达时可以使用此接口。',
      {
        city: z.string().describe('中文城市名称,例如:"北京", "上海"'),
      },
      async ({ city }) => {
        if (!(city in CITY_STATIONS)) {
          return {
            content: [{ type: 'text', text: 'Error: City not found. ' }],
          };
        }
        return {
          content: [{ type: 'text', text: JSON.stringify(CITY_STATIONS[city]) }],
        };
      }
    );
  • Zod schema for the input parameter 'city', a required string describing the Chinese city name.
    city: z.string().describe('中文城市名称,例如:"北京", "上海"'),
  • Helper constant CITY_STATIONS: Maps Chinese city names to arrays of {station_code, station_name} for all stations in that city, built dynamically from the STATIONS data.
    const CITY_STATIONS: Record<
      string,
      { station_code: string; station_name: string }[]
    > = (() => {
      const result: Record<
        string,
        { station_code: string; station_name: string }[]
      > = {};
      for (const station of Object.values(STATIONS)) {
        const city = station.city;
        if (!result[city]) {
          result[city] = [];
        }
        result[city].push({
          station_code: station.station_code,
          station_name: station.station_name,
        });
      }
      return result;
    })(); //以城市名名为键,位于该城市的的所有Station列表的记录
  • Helper function getStations() that fetches and parses all station data from 12306 website, used to populate STATIONS which feeds into CITY_STATIONS.
    async function getStations(): Promise<Record<string, StationData>> {
      const html = await make12306Request<string>(WEB_URL);
      if (html == null) {
        throw new Error('Error: get 12306 web page failed.');
      }
      const match = html.match('.(/script/core/common/station_name.+?.js)');
      if (match == null) {
        throw new Error('Error: get station name js file failed.');
      }
      const stationNameJSFilePath = match[0];
      const stationNameJS = await make12306Request<string>(
        new URL(stationNameJSFilePath, WEB_URL)
      );
      if (stationNameJS == null) {
        throw new Error('Error: get station name js file failed.');
      }
      const rawData = eval(stationNameJS.replace('var station_names =', ''));
      const stationsData = parseStationsData(rawData);
      // 加上缺失的车站信息
      for (const station of MISSING_STATIONS) {
        if (!stationsData[station.station_code]) {
          stationsData[station.station_code] = station;
        }
      }
      return stationsData;
    }

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/freestylefly/12306-mcp'

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