火车票查询工具是一个基于12306系统的 MCP 工具集,提供了火车票查询、车站信息查询、中转方案查询等功能。工具提供了两层接口:智能工具(用户友好的自然语言接口)和原子工具(技术开发接口)。
智能工具能够理解自然语言输入,自动处理复杂的查询逻辑,是日常使用的首选方式。
智能火车票查询:
智能车站查询:
智能中转查询:
智能出行建议:
AI 助手会根据您的需求自动调用智能工具,为您提供准确的票务信息和出行建议。
自动处理自然语言火车票查询,支持相对日期、车型偏好、时间段筛选等。
特点:
使用示例:
当没有直达车时,自动查找最优中转方案,提供详细的换乘信息。
特点:
使用示例:
处理各种车站相关查询,自动识别查询意图并提供相应信息。
特点:
使用示例:
综合分析直达和中转方案,根据用户偏好提供个性化出行建议。
特点:
使用示例:
原子工具提供了底层的技术接口,适用于系统集成和二次开发。每个原子工具实现单一功能,需要精确的参数输入。
获取当前日期(上海时区)。
参数: 无
使用场景:
获取指定城市的所有火车站信息。
参数:
city (必需): 城市名称使用场景:
获取城市主要车站的编码信息。
参数:
cities (必需): 城市名称,多个城市用"|"分隔使用场景:
根据车站名称获取详细信息。
参数:
station_names (必需): 车站名称,多个车站用"|"分隔使用场景:
根据车站编码获取车站信息。
参数:
station_code (必需): 车站编码使用场景:
查询指定日期和区间的火车票信息。
参数:
date (必需): 出发日期,格式 "YYYY-MM-DD"from_station (必需): 出发车站to_station (必需): 到达车站train_filters (可选): 车次筛选条件sort_by (可选): 排序方式reverse (可选): 是否倒序limit (可选): 结果数量限制使用场景:
查询需要中转的火车票方案。
参数:
date (必需): 出发日期from_station (必需): 出发车站to_station (必需): 到达车站middle_station (可选): 指定中转车站show_wz (可选): 是否显示无座train_filters (可选): 车次筛选条件sort_by (可选): 排序方式reverse (可选): 是否倒序limit (可选): 结果数量限制,默认10使用场景:
查询指定车次的经停站信息。
参数:
train_code (必需): 车次号使用场景:
注:此功能正在开发中
# 获取当前日期
result = await mcp_server.call_tool("get_current_date", {})
# 查询北京的所有车站
result = await mcp_server.call_tool("get_stations_in_city", {
"city": "北京"
})
# 获取多个城市的主要车站
result = await mcp_server.call_tool("get_city_station_code", {
"cities": "北京|上海|广州"
})
# 根据车站名称查询
result = await mcp_server.call_tool("get_station_by_name", {
"station_names": "北京南|上海虹桥"
})
# 根据车站编码查询
result = await mcp_server.call_tool("get_station_by_code", {
"station_code": "VNP"
})
# 基础火车票查询
result = await mcp_server.call_tool("query_train_tickets", {
"date": "2025-07-15",
"from_station": "北京",
"to_station": "上海"
})
# 带筛选条件的查询
result = await mcp_server.call_tool("query_train_tickets", {
"date": "2025-07-15",
"from_station": "北京",
"to_station": "上海",
"train_filters": "G,D", # 只查高铁和动车
"sort_by": "departure_time",
"limit": 10
})
# 中转车票查询
result = await mcp_server.call_tool("query_transfer_tickets", {
"date": "2025-07-15",
"from_station": "北京",
"to_station": "广州",
"limit": 5
})
# 指定中转站查询
result = await mcp_server.call_tool("query_transfer_tickets", {
"date": "2025-07-15",
"from_station": "北京",
"to_station": "广州",
"middle_station": "郑州",
"limit": 5
})
{
"station_code": "VNP",
"station_name": "北京南",
"station_pinyin": "beijingnan",
"city": "北京",
"code": "VNP"
}
{
"start_train_code": "G1",
"from_station": "北京南",
"to_station": "上海虹桥",
"start_time": "09:00",
"arrive_time": "14:28",
"duration": "5:28",
"prices": [
{
"seat_name": "商务座",
"price": "1748",
"num": "3"
},
{
"seat_name": "一等座",
"price": "933",
"num": "有"
}
],
"features": ["WiFi", "充电插座"]
}
{
"start_date": "2025-07-15",
"start_time": "08:00",
"arrive_date": "2025-07-15",
"arrive_time": "20:30",
"from_station_name": "北京南",
"middle_station_name": "郑州东",
"end_station_name": "广州南",
"same_train": false,
"same_station": true,
"wait_time": "2小时15分",
"duration": "12小时30分",
"ticket_list": [
{
"start_train_code": "G79",
"from_station": "北京南",
"to_station": "郑州东",
"start_time": "08:00",
"arrive_time": "11:15",
"duration": "3:15",
"prices": [...]
}
]
}
Railway工具基于MCP(Model Context Protocol)架构,支持灵活的工具集成和扩展。
from src.mcp.tools.railway import get_railway_tools_manager
# 获取工具管理器实例
manager = get_railway_tools_manager()
# 初始化工具(在MCP服务器中调用)
manager.init_tools(add_tool, PropertyList, Property, PropertyType)
开发者可以基于现有原子工具创建新的智能工具:
async def custom_smart_query(self, args: Dict[str, Any]) -> str:
"""自定义智能查询工具"""
# 解析用户输入
query = args.get("query", "")
# 调用原子工具
client = await get_railway_client()
result = await client.query_tickets(...)
# 格式化输出
return self._format_custom_result(result)
Railway工具采用分层架构:
通过火车票查询工具,您可以方便地获取火车票信息,规划出行路线,是出行必备的实用工具。智能工具让日常使用更加便捷,原子工具为开发者提供了强大的集成能力。