公共交通服务API

RapidKL MCP Server是一个基于FastMCP的MCP服务,提供票价查询、站点搜索、行程规划和完整站点资源的地理服务端点。

  • by philyeolabs
  • Python
  • 本地部署
  • 1 星标
  • 更新于
在 GitHub 查看 philyeolabs/RapidKL_MCP

使用说明

RapidKL MCP服务器

基于FastMCP的MCP服务公开了RapidKL(MYRAPID)地理服务端点,用于票价、车站搜索、行程规划和全站资源。

特性

  • 工具: get_fare(frm: str, to: str)
    返回两个车站标识符(成人、现金、无现金、优惠、标准)之间的票价。
  • 工具: get_stations(input: str)
    按地点或车站名称搜索车站;返回格式化的名称、id、类别和坐标。
  • 工具: get_journey_planner(from_long: float, from_lat: float, to_long: float, to_lat: float, mode: str, journey_type: str, departure_datetime: str)
    请求坐标之间的行程计划。接受出发时间为 YYYY-MM-DD 或 YYYY-MM-DD HH:MM:SS.
  • 资源: get_all_stations()
    获取全站有效载荷,并返回人类可读的路线和站点列表(跳过空占位符)。

需求

  • Python 3.10+
  • 包装:
    • httpx
    • 主控程序

安装:

python -m pip install httpx mcp

使用的端点

基础MYRAPID地理服务: https://jp.mapit.myrapid.com.my/endpoint/geoservice

服务使用的通用端点:

  • /geocode --被使用 get_stations
  • /fares --被使用 get_fare
  • /journeyPlanner --被使用 get_journey_planner
  • /stations --被使用 get_all_stations

正在运行(Windows)

从存储库根目录:

python c:\Dev\RapidKL_MCP\server.py

该脚本运行FastMCP服务器 mcp.run(transport='stdio').使用MCP兼容客户端调用工具/资源。

用法说明

  • make_myrapid_request(url) 执行超时30秒的HTTP GET请求,并返回解析后的JSON(或 None 错误)。
  • 处理程序接受已经解析为字典或JSON字符串的响应,并尝试对其进行规范化。
  • get_all_stations() 细节:
    • 验证顶层结构(success, message, data).
    • 将每条路线及其站点格式化为可读的多行字符串。
    • 跳过中经常出现的空占位符对象 stops.
    • 使可访问性标准化(isOKU)分为“可访问”/“不可访问”。
    • 显示站点id、名称、坐标和行程计数(如果可用)。

示例输出(截断)

get_fare:

Adult Fare: $2.40
Cash Fare: $2.40
Cashless Fare: $2.00
Concession Fare: $1.20
Standard Fare: $2.40

获取状态:

Station Name: Bandar Utama
Station ID: poi_12345
Category: MRT
Coordinates: (3.142857, 101.606666)
Latitude : 3.142857
Longitude: 101.606666

get_all_stations(路由摘录):

Route: MRT Putrajaya Line (PYL, MRT)
--------------------------------------------------
  Stop: KWASA DAMANSARA (ID: PY01)
    Coordinates: (3.1763324, 101.5721456)
    Accessibility: Accessible
    Trips known: 0

get_journey_planner(路线摘要摘录):

Journey from (3.142857, 101.606666) to (3.076, 101.607)
Departure: 2025-10-27 08:00:00

Route 1:
  Estimated Arrival: 2025-10-27 09:00:00
  Total Duration: 3600 seconds (60.0 minutes)
  Fare (Adult/Cash/Cashless/Concession): RM2.4/RM2.4/RM2.0/RM1.2
  Legs:
    Leg 1 (Transit):
      Route: MRT Putrajaya Line (PYL)
      Departure: 2025-10-27 08:05:00
      Arrival: 2025-10-27 08:45:00
      Stops:
        - Station A (ID: S123)
        - Station B (ID: S124)

错误处理和日志记录

  • 处理程序返回网络、解析或API错误的描述性错误字符串。
  • get_stations 和 get_journey_planner 配置 logging 在 DEBUG 运行时诊断级别。

开发说明

  • 代码使用Python 3.10+联合类型语法(dict[str, Any] | None).
  • 添加测试以验证边缘情况的解析:缺少字段、坐标格式错误、 isOKU,占位符停止对象。
  • 当MYRAPID API更改结构时,更新相应处理程序中的解析逻辑。

贡献

  • 提高解析的健壮性,添加单元测试,或扩展格式以包含API返回的其他字段。