China 12306 Train Tickets MCP

cn.pianam.mcp由 mcp.pianam.cn 發布官方發布者v1.0.0更新於 Oct 24, 2026

MCP server for China Railway 12306 ticket availability: schedules and seats by Chinese station name.

已驗證Streamable HTTP可網頁執行位置與生活網頁搜尋與抓取

概覽

AI 產生的概覽

一個唯讀的 MCP 伺服器,讓助理依中文車站名與日期查詢中國鐵路 12306 的車次時刻與各席別剩餘座位。

可以做什麼
依出發與抵達的中文城市或車站名及日期查詢車次,回傳車次號、出發抵達車站與時間、行車時間,以及商務座、一等座、二等座、軟臥、硬臥、硬座、無座等剩餘座位。日期留空預設查明天,格式須為 YYYY-MM-DD,12306 預售期通常為 15 天。模糊搜尋車站名,協助在多車站城市中確認準確站名。
適用情境
適合需要查詢中國高鐵或一般列車班次與剩餘座位、為行程做比較,或不確定某城市該用哪個車站時使用。它為唯讀,適合規劃與比較,不適合直接購票。
執行需求
託管端點只需在 MCP 用戶端填入網址,無需帳號或 API Key。自架需要 Python 及 mcp、uvicorn、starlette 相依套件,或使用 Docker;伺服器預設監聽 127.0.0.1:8003,可用 MCP_HOST、MCP_PORT、MCP_ALLOWED_HOSTS、MCP_ALLOWED_ORIGINS 調整。需要能連線至 12306 的公開查詢介面。
安裝前請注意
它不能訂票或購票,購票須透過 12306 官方應用程式或網站。查詢會送往 12306 公開介面;使用託管端點時還會經過第三方服務,該服務依 IP 限制每分鐘 200 次請求。結果快取 300 秒,剩餘座位可能略有延遲。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 China 12306 Train Tickets MCP,將其新增到工作區。
  2. 為需要使用其工具的對話啟用該服務。

Web executable,透過 Streamable HTTP。 遠端服務在工作區中設定後即可從網頁執行環境執行。

交給代理程式安裝

把這段提示詞貼上到 Claude Code、Codex、Cursor 等代理程式,或 SourceWeft 對話中。代理程式會讀取該伺服器的安裝指南,先向你展示發布者、端點和登入方式,經你同意後再把它新增到你的客戶端。金鑰不會寫進任何命令。

閱讀 https://sourceweft.com/mcp/cn.pianam.mcp%2F12306-train-mcp/install.md,並按其中說明把這個 MCP 伺服器接入我的客戶端。修改任何設定之前,先告訴我它的發布者、端點和登入方式,等我確認。不要把 API 金鑰寫進命令或我會提交的檔案;問我金鑰應從哪裡取得。

檢視代理程式所依據的安裝指南

其他 MCP 客戶端

把它新增到你客戶端的 mcpServers 設定中。

{
  "mcpServers": {
    "china-12306-train-tickets": {
      "type": "http",
      "url": "https://mcp.pianam.cn/train-mcp/mcp"
    }
  }
}

README

China 12306 Train Tickets MCP

[License: MIT] [MCP] [Remote]

Query China Railway 12306 ticket availability from any MCP client — train schedules and remaining seats by Chinese station name and date. Read-only, no booking, no account.

  • Try it in 30 seconds: a free public MCP endpoint is already running — just paste the URL into your MCP client (no install, no API key).
  • Or self-host: a single Python file, stdlib HTTP + FastMCP, zero paid dependencies.

⚡ Use the hosted endpoint (no setup)

https://mcp.pianam.cn/train-mcp/mcp

Transport: Streamable HTTP (MCP 2025-03-26 compatible). No authentication required.

🔌 Client configuration

Add this to your MCP client's mcpServers configuration (Claude Desktop claude_desktop_config.json, Cursor mcp.json, Cline, Cherry Studio, etc.):

json
{  "mcpServers": {    "12306-train": {      "type": "http",      "url": "https://mcp.pianam.cn/train-mcp/mcp"    }  }}

Clients that do not accept "type": "http" (some Cherry Studio / older Cline versions) accept the same entry with just "url".

🧰 Tools

ToolParametersReturns
query_train_tickets(from_city, to_city, date="")from_city / to_city: Chinese city or station names, e.g. "青岛", "北京南".
date: YYYY-MM-DD; empty defaults to tomorrow. 12306's booking window is usually 15 days.
Train list with train number, departure/arrival stations & times, duration, and remaining seats per class (business/first/second class, soft/hard sleeper, hard seat, no-seat).
search_station(keyword)keyword: e.g. "北京".Fuzzy-matches station names (returns up to 30: 北京, 北京南, 北京西, 北京北 …) when you are not sure which station to use.

📡 Data sources, caching & limits

  • Data comes from 12306's own public query endpoints (kyfw.12306.cn/otn/leftTicket/...) — read-only queries only; this server cannot book tickets, please buy via the official 12306 app/website.
  • Station code table cached locally for 7 days; ticket queries cached for 300 seconds.
  • No API key, no login required.
  • The hosted endpoint is rate-limited to 200 requests / minute / IP.

🐢 Self-hosting

bash
git clone https://github.com/boy-373/12306-train-mcp.gitcd 12306-train-mcppip install -r requirements.txtpython train_mcp_server.py# the server listens on 127.0.0.1:8003 by default; override with:#   MCP_HOST=0.0.0.0 MCP_PORT=9000 python train_mcp_server.py#   MCP_ALLOWED_HOSTS="your-domain.com,127.0.0.1:*"#   MCP_ALLOWED_ORIGINS="https://your-domain.com"

Then point your MCP client at http://127.0.0.1:8003/mcp. No API keys or accounts are ever required.

🐳 Self-host with Docker

Option A — pull the pre-built image (fastest, no build):

bash
docker run -d -p 8000:8000 --name 12306-train-mcp ghcr.io/boy-373/12306-train-mcp:latest

Option B — build from source:

bash
git clone https://github.com/boy-373/12306-train-mcp.gitcd 12306-train-mcpdocker build -t 12306-train-mcp .docker run -d -p 8000:8000 --name 12306-train-mcp 12306-train-mcp

Then point your MCP client at http://127.0.0.1:8000/mcp. The container listens on 0.0.0.0:8000 by default (override with -e MCP_PORT=9000 and adjust -p accordingly). No API keys or accounts required.

  • train_stations.json — bundled 12306 station name → telegraph-code table (auto-refreshed from 12306 every 7 days).

🗂️ Files

  • train_mcp_server.py — the MCP server (FastMCP, Streamable HTTP transport).
  • rate_limit.py — lightweight per-IP sliding-window rate-limit middleware (200 req/min default).
  • requirements.txt — mcp, uvicorn, starlette.
  • server.json — official MCP Registry manifest (remote server entry, ready to publish with mcp-publisher).
  • smithery.yaml / glama.json — directory listing metadata.

🧯 Parameter guide & common errors (read this if a call fails)

query_train_tickets(from_city, to_city, date="")

ParameterWhat to passNotes
from_city / to_cityChinese station or city names, e.g. "青岛", "北京", "上海虹桥"A city name works when the city has one main station; for multi-station cities use the exact station name. Not sure? Call search_station("北京") first — it returns 北京/北京南/北京西/北京北…
dateYYYY-MM-DD, e.g. "2026-09-20"Optional — defaults to tomorrow when empty. 12306's pre-sale window is 15 days (dates further out return an error or empty results).

Why you may get an HTTP 400 / error result:

  1. Bad date format — must be exactly YYYY-MM-DD (2026/09/20, 2026年9月20日, Sep 20 all fail).
  2. Station name not found — typo, pinyin ("qingdao"), or a vague nickname the code table doesn't contain. Fix: call search_station with a keyword and copy the exact name.
  3. City-level name for a multi-station city — e.g. "北京" usually resolves to 北京 station, but if you want a specific station pass "北京南" / "北京西" explicitly.
  4. Date outside the 15-day pre-sale window — 12306 has not released those tickets yet.

Correct call examples:

query_train_tickets(from_city="青岛", to_city="北京", date="2026-09-20")query_train_tickets(from_city="北京南", to_city="上海虹桥")        # date omitted -> tomorrowsearch_station(keyword="上海")                                   # -> 上海/上海南/上海虹桥/上海西…

A successful response returns 车次总数 plus a 车次 list (train number, departure/arrival station & time, duration, and remaining seats per class). An unrecognized station returns {"error": "出发站「…」无法识别,可用 search_station 工具查车站名"} — simply re-call with the exact name.


🧯 参数说明与常见错误(调用失败先看这里)

query_train_tickets(from_city, to_city, date="") 参数说明

参数填什么注意
from_city / to_city中文车站名或城市名,如 "青岛"、"北京"、"上海虹桥"城市只有一个主车站时填城市名即可;多车站城市建议填具体车站名。不确定时先调 search_station("北京"),会返回 北京/北京南/北京西/北京北 等准确站名
dateYYYY-MM-DD 格式,如 "2026-09-20"可留空,留空默认查明天;12306 预售期通常为 15 天,超出预售期的日期会查询失败或无结果

返回 400 / 错误结果的常见原因:

  1. 日期格式错误:必须严格为 YYYY-MM-DD,2026/09/20、2026年9月20日、Sep 20 等写法都会失败;
  2. 站名不存在:错别字、拼音(如 "qingdao")、或码表中没有的俗称都会无法识别。解决方法:先用 search_station 关键词搜索,复制返回的准确站名;
  3. 多车站城市用了城市通称:如 "北京" 一般能匹配到「北京」站,但要去特定车站请明确传 "北京南"、"北京西" 等;
  4. 日期超出 15 天预售期:12306 尚未放票,查询会返回失败提示。

正确调用示例:

query_train_tickets(from_city="青岛", to_city="北京", date="2026-09-20")query_train_tickets(from_city="北京南", to_city="上海虹桥")        # date 留空 -> 默认明天search_station(keyword="上海")                                   # 返回 上海/上海南/上海虹桥/上海西…

调用成功会返回 车次总数 和 车次 列表(车次号、出发/到达站与时间、历时、各席别余票);站名无法识别时返回 {"error": "出发站「…」无法识别,可用 search_station 工具查车站名"},换成准确站名重试即可。

🇨🇳 中文使用说明

一句话:直接用中文站名查 12306 余票,数据来自 12306 官方公开查询接口,纯只读。

在线直连地址(免费、无需 Key、开箱即用):https://mcp.pianam.cn/train-mcp/mcp

在 MCP 客户端(Claude Desktop / Cursor / Cherry Studio / Cline 等)的配置里加入:

json
{  "mcpServers": {    "12306-train": {      "type": "http",      "url": "https://mcp.pianam.cn/train-mcp/mcp"    }  }}

工具:

  • query_train_tickets(from_city, to_city, date):查余票。出发/到达站直接给中文城市或车站名(如「青岛」「北京南」),日期格式 YYYY-MM-DD,留空默认明天;返回车次、出发到达时间、历时及商务座/一等座/二等座/软卧/硬卧/硬座/无座等余票。
  • search_station(keyword):不确定城市有哪些车站时模糊搜索站名(如「北京」返回 北京/北京南/北京西/北京北 等)。
  • 仅查票,不能购票;12306 预售期通常 15 天。

服务特性:数据源全部为公开接口、无需注册/付费;服务端内存缓存、失败自动降级/切换备用通道;单 IP 限流 200 次/分钟。

本地部署:

bash
git clone https://github.com/boy-373/12306-train-mcp.gitcd 12306-train-mcppip install -r requirements.txtpython train_mcp_server.py# 默认监听 127.0.0.1:8003,可用环境变量 MCP_HOST / MCP_PORT / MCP_ALLOWED_HOSTS / MCP_ALLOWED_ORIGINS 覆盖

Docker 自托管:

bash
# 方式一:直接拉预构建镜像(最快,无需构建)docker run -d -p 8000:8000 --name 12306-train-mcp ghcr.io/boy-373/12306-train-mcp:latest
# 方式二:从源码构建git clone https://github.com/boy-373/12306-train-mcp.git && cd 12306-train-mcpdocker build -t 12306-train-mcp .docker run -d -p 8000:8000 --name 12306-train-mcp 12306-train-mcp# MCP 地址填:http://127.0.0.1:8000/mcp

容器默认监听 0.0.0.0:8000(可用 -e MCP_PORT=端口 改),无需任何 API Key 或账号。

📄 License

MIT © 2026 boy-373

[12306-train-mcp MCP server]

Install via Smithery

One-click install for Smithery-supported clients (Claude Desktop, Cursor, etc.):

[Smithery]

Or run:

bash
npx -y @smithery/cli install 1561852680/12306-train-mcp --client claude

🔌 Use with Any AI Client — One-Click MCP Gateway

We host a free MCP aggregation gateway: your AI assistant (Cherry Studio, Claude Desktop, Cursor, Cline — any MCP client) discovers and uses MCP tools through a single URL:

https://mcp.pianam.cn/ai/mcp

Add it once, then talk in plain language — the AI automatically searches → inspects → calls the right MCP for you.

  • 🔍 Search across 22,000+ indexed MCP servers (Chinese & English)
  • ⚡ 50+ live hosted MCPs callable directly out of the box (weather, exchange rates, hot trends, IP geo, train tickets…)
  • 📦 GitHub-based MCPs: search finds them with links to install locally
  • ✅ Servers health-checked weekly — alive ones ranked first
  • 🆓 Free to use, no key required

📖 3-step setup guide / 中文接入教程: https://mcp.pianam.cn/ai-gateway

來源:README.md,提交 aab857d

工具

0
SourceWeft 尚未讀取此伺服器的工具。

版本歷史

1
  1. v1.0.0最新Sep 16, 2026

評分

已滿足適用檢查項的 50%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通必需25 分

    請保持端點能夠回應 MCP 握手;SourceWeft 每 30 天探測一次。

  • 已宣告認證方式必需10 分

    請在註冊中心條目中宣告憑證請求標頭,或保持端點能夠回應探測,以便判定其認證方式。

  • 已列出工具15 分

    請讓伺服器在無憑證時回應 tools/list,或發布可在沙箱中無憑證啟動的軟體包。

  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分

其他 Pianam 整合