游乐游手机版
首页/AI热点日报/热点详情

MCP协议12306购票搜索服务器项目解析与配置流程

类型:热点整理2026-07-13
深入探索基于MCP协议的12306购票搜索服务器高效解决方案,打造智能化购票体验。核心内容:1 12306-mcp项目功能特点及查询12306购票信息详解2 列车信息过滤与过站查询功能介绍3 技术架构解析与12306-MCP服务原理深度剖析 近期在GitHub上备受关注的一个开源项目——123

深入探索基于MCP协议的12306购票搜索服务器高效解决方案,打造智能化购票体验。
核心内容:
1. 12306-mcp项目功能特点及查询12306购票信息详解
2. 列车信息过滤与过站查询功能介绍
3. 技术架构解析与12306-MCP服务原理深度剖析

基于MCP协议的12306购票搜索服务器项目解析(附配置流程)!

近期在GitHub上备受关注的一个开源项目——12306-mcp,基于Model Context Protocol(MCP)协议构建,专门为12306购票搜索服务器量身打造。


简单来说,该项目使大语言模型能够通过MCP接口直接查询12306的购票数据,从而显著提升整体购票体验与搜索效率。



12306-mcp核心功能亮点


实时查询12306购票信息:核心功能在于实时获取12306官方票务数据。后端与官方系统无缝对接,可完整返回车次、发车时间、到达时间、座位类型、票价等关键信息。

智能过滤列车信息:用户可根据出行计划,按出发地、目的地、出行日期、车次类型等条件灵活筛选结果,无需在大量车次中手动翻找。

便捷过站查询:想知道哪些列车途经某个特定站点?该功能非常实用。对于需要中途换乘或有特殊站点偏好的旅行者,只需输入站点名称,即可返回所有经过该站的车次列表。

智能中转查询:针对需要换乘的用户,系统根据出发地与目的地,结合各次列车时刻表,智能推荐最优中转方案,合理规划换乘行程。

    项目技术架构与原理深度解析


    技术架构设计


    前后端分离架构:12306-mcp采用前后端分离设计。前端负责交互展示,后端处理业务逻辑、数据对接以及与12306官方系统的通信。这种架构让模块化开发和后期维护更加便捷,系统的可扩展性也得到显著增强。

    12306-MCP服务运作原理

    服务启动时,通过 getStations() 函数从12306 API获取全国车站信息,构建四个核心索引:

    具体流程如下:

    1. 访问12306首页 (https://www.12306.cn/index/);
    2. 从HTML中提取车站名称JS文件路径;
    3. 下载并解析JS文件,获取原始车站数据;
    4. 补充缺失的车站信息 (MISSING_STATIONS);
    5. 基于车站数据得到四个核心数据结构映射表;
      // 1. 车站id -> 车站信息
      STATIONS: Record        // "AAA": {
      // "station_id": "@aaa",
      // "station_name": "北京北",
      // "station_code": "AAA",
      // "station_pinyin": "beijingbei",
      // "station_short": "aaa",
      // "station_index": "0",
      // "code": "1234",
      // "city": "北京",
      // "r1": "",
      // "r2": ""
      // }
      // 2. 城市名 -> 车站id 和 站名 (可能一个城市多个站)
      CITY_STATIONS: Record // "北京": [{"station_code": "AAA","station_name": "北京北"},{"station_code": "BBB","station_name": "京东"},...]
      // 3. 车站名(与城市名相同,只会有一个) -> 车站id 和 站名
      CITY_CODES: Record      // "北京":{"station_code":"CCC","station_name":"北京"}
      // 4. 车站名 -> 车站id 和 站名
      NAME_STATIONS: Record   // "北京北":{"station_code":"AAA","station_name":"北京北"}

      数据流程与工具关系详解

      车票查询流程:

        用户查询 "后天北京到上海的高铁" - 大模型调用流程:
            ↓
        1. get-current-date() → "2024-01-15" (获取当前日期)
        2. 大模型理解后天日期 → "2024-01-17"
        3. get-station-code-of-citys("北京|上海") → {"北京": {"station_code": "BJP","station_name": "北京"}, "上海": {"station_code": "SHH","station_name": "上海"}}
            ↓
        4. get-tickets(date: "2024-01-17", fromStation: "BJP", toStation: "SHH", trainFilterFlags: "G")
            ↓
        5. 内部数据处理(参数验证, Cookie获取, API调用, 格式化输出文本)
            ↓
        6. 返回格式化的高铁车次信息(车次、时间、价格、余票等)

        中转查询流程:

          用户查询 "深圳到拉萨,经过西安中转"
              ↓
          1. 获取三个城市的车站id
          2. get-interline-tickets(from: "SZQ", to: "LSO", transfer: "XAY")
              ↓
          3. 内部数据处理(参数验证, Cookie获取, API调用, 格式化输出文本)
              ↓
          4. 返回中转方案(第一程 + 第二程)

          经停站查询流程:

            用户查询 "G1次列车经停哪些站"
                ↓
            1. get-train-route-stations(trainNo: "G1", from: "BJP", to: "SHH")
                ↓
            2. 数据处理:parseRouteStationsData() → parseRouteStationsInfo()
                ↓
            3. 返回经停站列表(站名、到达时间、出发时间、停留时间)


            基础工具(Base Tool)


            • get-current-date: 获取上海时区当前日期

              • 返回当前上海时区的时间日期字符串("yyyy-MM-dd")
              • 为其他工具提供准确的查询日期基准
            • get-stations-code-in-city: 查询城市内所有车站(使用 CITY_STATIONS

              • 输入:中文城市名
              • 查找:CITY_STATIONS[city] 获取该城市所有车站列表
              • 返回:包含 station_codestation_name 的数组
            • get-station-code-of-citys: 获取城市代表车站id(使用 CITY_CODES

              • 输入:城市名(支持 "|" 分隔的多个城市)
              • 查找:CITY_CODES[city] 获取与城市同名的主要车站
              • 返回:每个城市对应的代表车站信息
            • get-station-code-by-names: 车站名转车站id(使用 NAME_STATIONS

              • 输入:具体车站名(支持 "|" 分隔的多个车站)
              • 查找:NAME_STATIONS[stationName] 精确匹配车站名
              • 返回:车站id和车站名
            • get-station-by-telecode: 车站id查车站信息(使用 STATIONS

              • 输入:车站id
              • 查找:STATIONS[telecode] 获取完整车站信息
              • 返回:包含拼音、城市等详细信息


            核心工具(Core Tool,输入可通过基础工具获取)


            get-tickets: 查询12306余票信息

              • 输入:出发日期、出发站id、到达站id、车次类型筛选
              • 参数处理:检查日期不早于当前日期,验证车站id存在性, 构造请求入参
              • Cookie 处理:先获取 12306 Cookie 用于身份验证
              • API 调用:访问 /otn/leftTicket/query 接口
              • 数据处理, 车次类型筛选
              • 返回格式化数据
            • get-interline-tickets: 中转换乘查询,支持指定中转站

              • 输入:出发站id、到达站id、中转站id、是否显示无座、车次类型筛选
              • 参数处理:检查日期不早于当前日期,验证车站id存在性, 构造请求入参
              • Cookie 处理:先获取 12306 Cookie 用于身份验证
              • API 调用:访问 /lcquery/queryU 接口
              • 数据处理, 车次类型筛选
              • 返回格式化数据
            • get-train-route-stations: 列车经停站查询

              • 输入:车次编码(可以调用get-tickets获取)、出发站id、到达站id、出发日期
              • 参数处理:检查日期不早于当前日期,验证车站id存在性, 构造请求入参
              • Cookie 处理:先获取 12306 Cookie 用于身份验证
              • API 调用:访问 /otn/czxx/queryByTrainNo 接口
              • 返回格式化数据



            12306-mcp安装配置指南

            CLI 命令行启动

              npm run build
              node ./build/index.js

              MCP Server 配置

                {
                    "mcpServers": {
                        "12306-mcp": {
                            "command": "npx",
                            "args": [
                                "-y",
                                "12306-mcp"
                            ]
                        }
                    }
                }

                效果展示:

                来源:https://www.53ai.com/news/OpenSourceLLM/2025060632804.html

                相关热点

                继续查看同栏目近期热点。

                延伸阅读

                补充最近整理过的热点入口。