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
| Name | Required | Description | Default |
|---|---|---|---|
| city | Yes | 中文城市名称,例如:"北京", "上海" |
Implementation Reference
- src/index.ts:597-606 (handler)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]) }], }; } );
- src/index.ts:595-595 (schema)Zod schema for the input parameter 'city', a required string describing the Chinese city name.city: z.string().describe('中文城市名称,例如:"北京", "上海"'),
- src/index.ts:41-60 (helper)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列表的记录
- src/index.ts:1028-1053 (helper)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; }