Mcp Server 12306 について
MCP Server 12306 は、中国の 12306 鉄道乗車券データを照会する Model Context Protocol ベースのサーバーです。AI アシスタントやスクリプト、端末からの利用を想定し、公式公開インターフェースの空席、運賃、駅、経由、乗り換え情報を標準化されたツールとして提供します。
主な機能
- 01列車、座席、時刻による空席の一括照会
- 02席種ごとの運賃のリアルタイム照会
- 03中国語、ピンイン、三字コードによる駅の曖昧検索
- 04公式の乗り換え案の自動ページ取得
- 05列車の停車駅と発着時刻の照会
- 06現在時刻と相対日付の計算
活用シーン
- 01AI アシスタントに指定日の空席と運賃を確認させる
- 02経路計画スクリプトに乗り換え案と停車時刻を渡す
- 03リモートデプロイ後に複数のクライアントで照会サービスを共有する
MCP 対応
stdio または Streamable HTTP で動作する MCP サーバーで、MCP クライアントに 7 つの照会ツールを公開します。ツールのスキーマは HTTP の /schema/tools エンドポイントと同じ元データから生成されます。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
7掲載時のツール一覧 · 3 週間前に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| from_station | string | はい | 出発駅名 |
| to_station | string | はい | 到着駅名 |
| train_date | string | はい | 出発日、形式:YYYY-MM-DD |
詳細
🚄 MCP Server 12306
Model Context Protocol(MCP)に基づく 12306 列車チケット検索サービス
空席 / 運賃 / 駅 / 停車駅 / 乗り換え / 時刻の6つの検索機能に対応しており、すぐに使い始められます。AI アシスタント、自動化スクリプト、スマート端末などの用途に適しています。
📑 目次
✨ 機能
| カテゴリ | 機能 |
|---|---|
| 🎫 空席検索 | 空席 / 列車 / 座席 / 時刻をまとめて検索でき、列車による絞り込みにも対応 |
| 💰 運賃検索 | 各列車・各座席クラスの運賃をリアルタイムで検索(ビジネスクラスから立席まで網羅) |
| 🏙️ 駅検索 | 全国 3382 以上の駅を収録。中国語 / ピンイン / ピンイン略称 / 3文字コードによるあいまい検索に対応 |
| 🔄 乗り換え検索 | 公式の乗り換えプランを自動でページ取得し、完全な経路と待ち時間を返します |
| 🛤️ 停車駅検索 | 指定した列車の全停車駅と発着時刻を検索 |
| 🕐 時刻ツール | 任意のタイムゾーンの現在時刻と相対日付を取得し、旅行日の選択を支援 |
| 🔌 2つのトランスポートモード | Stdio(ローカル)| Streamable HTTP(リモート)。同じコアインスタンスを共有 |
| 🔄 プロトコルの自動ネゴシエーション | MCP SDK v2 に基づき、ハンドシェイク時代(2025-11-25)と現代のプロトコル(2026-07-28)に自動で対応 |
🚀 クイックスタート
環境要件
| 依存関係 | 要件 |
|---|---|
| Python | >= 3.10, < 3.14 |
| パッケージマネージャー | uv(推奨)または pip / pipx |
| ネットワーク | 12306 の公式 API にアクセスできること |
💡
uvの使用をおすすめします。環境を分離でき、インストールが速く、ロックファイルで依存関係のバージョンを管理できます。
方法1:Stdio モード(ローカルクライアント向け)
MCP サーバーは標準入出力を通じてクライアントと通信するため、ネットワークポートを使用しません。Claude Desktop、Cursor などのローカル MCP クライアントに適しています。
インストール:
# uvx(推荐,环境隔离)
uvx mcp-server-12306
# 或 pip / pipx
pip install mcp-server-12306
クライアントの設定(claude_desktop_config.json など):
{
"mcpServers": {
"12306": {
"command": "uvx",
"args": ["mcp-server-12306"]
}
}
}
その他のインストール方法(クリックして展開)
pipx:
{
"mcpServers": {
"12306": {
"command": "pipx",
"args": ["run", "--no-cache", "mcp-server-12306"]
}
}
}
ローカルソースコード(開発時のデバッグ用):
git clone https://github.com/drfccv/mcp-server-12306.git
cd mcp-server-12306
uv sync
{
"mcpServers": {
"12306": {
"command": "uv",
"args": ["--directory", "/path/to/mcp-server-12306", "run", "mcp-server-12306"]
}
}
}
方法2:Streamable HTTP モード(リモートデプロイ)
サーバーは Web サービスを起動し(デフォルトのポートは
8000)、MCP Streamable HTTP プロトコルで通信します。POSTで JSON-RPC を送信し、GETでストリーミング応答を購読し、DELETEでセッションを終了します。
起動:
# 安装后直接启动
mcp-12306
# 或本地源码启动
uv run python scripts/start_server.py
クライアントの設定:
{
"mcpServers": {
"12306": {
"url": "http://localhost:8000/mcp"
}
}
}
組み込み HTTP エンドポイント:
| エンドポイント | メソッド | 説明 |
|---|---|---|
/mcp | POST / GET / DELETE | MCP Streamable HTTP プロトコルの入口 |
/health | GET | ヘルスチェック(読み込み済みの駅数、アクティブなセッション数を含む) |
/schema/tools | GET | すべてのツールの JSON Schema |
/ | GET | サービス情報(バージョン、プロトコルバージョン、エンドポイント) |
方法3:Docker デプロイ
# 拉取镜像并运行(默认端口 8000)
docker run -d -p 8000:8000 --name mcp-server-12306 drfccv/mcp-server-12306:latest
# 自定义端口
docker run -d -p 8080:8000 \
-e SERVER_HOST=0.0.0.0 \
-e SERVER_PORT=8000 \
--name mcp-server-12306 \
drfccv/mcp-server-12306:latest
🛠️ 工具一览
| 工具名 | 功能 | 必填参数 |
|---|---|---|
query-tickets | 余票 / 车次 / 座席 / 时刻一站式查询 | from_station、to_station、train_date |
query-ticket-price | 实时查询车次票价 | from_station、to_station、train_date |
search-stations | 车站模糊搜索(中文 / 拼音 / 简拼 / 三字码) | query |
query-transfer | 中转换乘方案查询 | from_station、to_station、train_date |
get-train-route-stations | 查询列车经停站及时刻表 | train_no、from_station、to_station、train_date |
get-train-no-by-train-code | 车次号 → 官方唯一编号 | train_code、from_station、to_station、train_date |
get-current-time | 当前时间与相对日期(辅助选日期) | 无 |
📖 每个工具的参数说明、返回示例、调用示例详见 📚 详细文档。
⚙️ 配置项
通过环境变量或项目根目录 .env 文件配置:
| 环境变量 | 默认值 | 说明 |
|---|---|---|
SERVER_HOST | 0.0.0.0 | HTTP 监听地址 |
SERVER_PORT | 8000 | HTTP 监听端口 |
DEBUG | false | 调试模式 |
LOG_LEVEL | INFO | 日志级别(DEBUG / INFO / WARNING / ERROR) |
# 示例:.env
SERVER_HOST=127.0.0.1
SERVER_PORT=8000
LOG_LEVEL=INFO
🏗️ 项目结构
mcp-server-12306/
├── src/mcp_12306/ # 主包
│ ├── server.py # 核心 Server(工具注册与分发,双传输共享)
│ ├── stdio_server.py # Stdio 传输层 + CLI 入口
│ ├── http_server.py # Streamable HTTP 传输层 + HTTP 端点
│ ├── services/ # 业务逻辑
│ │ ├── station_service.py # 车站数据服务(加载/搜索/编码转换)
│ │ └── ticket_service.py # 票务查询核心(7 个工具实现)
│ ├── utils/ # 配置与日期工具
│ │ ├── config.py # pydantic-settings 配置
│ │ └── date_utils.py # 日期校验工具
│ └── resources/ # 静态资源(车站数据 station_name.js)
├── scripts/ # 运维脚本
│ ├── start_server.py # HTTP 模式一键启动(环境自检)
│ └── update_stations.py # 更新车站数据
├── docs/ # 工具详细文档
├── pyproject.toml # 项目元数据 / 依赖 / 构建配置
├── Dockerfile # 多阶段构建(python:3.12-alpine)
├── server.json # MCP 注册表元数据
└── uv.lock # 依赖锁文件
🧑💻 开发指南
# 1. 克隆并初始化
git clone https://github.com/drfccv/mcp-server-12306.git
cd mcp-server-12306
uv sync
# 2. 类型检查(mypy,严格模式)
uv run mypy src scripts
# 3. 代码格式化
uv run black src scripts
uv run isort src scripts
# 4. 构建与发布
uv run python -m build
uv run twine upload dist/*
架构要点:
server.py是传输无关的核心模块——工具注册(TOOL_HANDLERS)与业务分发(call_tool)都在此,stdio 与 HTTP 复用同一实例,保证两种模式行为完全一致。- 工具 Schema 单一来源于
ticket_service.MCP_TOOLS,HTTP 的/schema/tools端点与 MCP 工具列表同源。 - 网络请求统一走
_request_with_retry(自动重试 + init 会话保持),业务错误与网络错误分离处理。
📚 详细文档
| 文档 | 内容 |
|---|---|
| query_tickets.md | 余票 / 车次 / 座席 / 时刻一站式查询 |
| query_ticket_price.md | 实时票价查询 |
| search_stations.md | 车站智能搜索 |
| query_transfer.md | 中转换乘方案 |
| get_train_route_stations.md | 列车经停站查询 |
| get_current_time.md | 当前时间与相对日期 |
每份文档均包含:功能说明、实现方法、请求参数、返回示例与典型调用方式。
⚠️ 免责声明
- 本项目仅供学习、研究与技术交流,严禁用于任何商业用途。
- 本项目不存储、不篡改、不传播任何 12306 官方数据,仅作为官方公开接口的智能聚合与转发。
- 使用本项目造成的任何后果(包括但不限于账号封禁、数据异常、法律风险等)均由使用者本人承担,项目作者不承担任何责任。
- 请遵守中国法律法规及 12306 官方相关规定,合理合规使用。
📄 License
⭐ 如果这个项目对你有帮助,欢迎 Star 支持!
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。