项目简介

'chattender-fahrplan-mcp' 是一个创新的服务器应用,它允许大型语言模型(LLM)通过标准化的Model Context Protocol (MCP) 协议,访问并利用瑞士联邦铁路(SBB)的实时列车时刻表信息。它提供了强大的工具,使LLM能够查询特定车站间的列车连接,并以结构化JSON或自然语言描述的形式返回结果。这使得开发者可以轻松地将实时交通数据集成到各种LLM驱动的应用中。

主要功能点

  • 列车时刻表查询: 提供两个工具用于查询瑞士列车时刻表:
    • 'planJourneyJson': 返回详细的列车连接信息(如出发/到达时间、服务类型、运营商、站台、方向)的JSON格式数据,方便LLM进行结构化处理。
    • 'planJourneyText': 返回下一班合适列车连接的单句自然语言描述,易于用户理解。
  • 地点解析: 能够将用户输入的车站名称解析为SBB系统内部的地点ID(UIC),支持德语查询。
  • 与LLM集成: 已与OpenAI OSS GPT、Apertus 8B、Qwen-3 8B等多种LLM进行测试,并提供Jinja模板以优化Prompt渲染。
  • 安全认证: 支持通过'X-API-Key'或'Authorization: Bearer'头进行API密钥认证,确保服务安全。

安装步骤

  1. 环境准备: 确保您的系统已安装Java 21或更高版本。

  2. 克隆仓库: 从GitHub克隆此仓库到本地:

    git clone https://github.com/thpeng/chattender-fahrplan-mcp.git
    cd chattender-fahrplan-mcp
  3. 配置环境变量/系统属性: 在运行前,您需要设置以下关键配置信息。您可以通过环境变量或Java系统属性(使用'-D'前缀)来定义它们:

    • 'JOURNEY_SERVICE_BASE': SBB出行服务的基础URL。例如:'https://api.sbb.ch'。
    • 'MCP_API_KEY': 您为此MCP服务器设置的API密钥。这是MCP客户端连接到此服务器时需要提供的认证密钥。
    • 'JOURNEY_SERVICE_CLIENT_ID': 用于此MCP服务器向SBB出行服务进行OAuth认证的客户端ID。
    • 'JOURNEY_SERVICE_CLIENT_SECRET': 用于此MCP服务器向SBB出行服务进行OAuth认证的客户端密钥。

    推荐以环境变量形式配置,例如(在Linux/macOS中):

    export JOURNEY_SERVICE_BASE="https://api.sbb.ch"
    export MCP_API_KEY="your_secret_mcp_api_key"
    export JOURNEY_SERVICE_CLIENT_ID="your_sbb_client_id"
    export JOURNEY_SERVICE_CLIENT_SECRET="your_sbb_client_secret"
  4. 构建与运行: 使用Maven构建并运行应用程序:

    ./mvnw clean package
    java -jar target/chattender-fahrplan-mcp-*.jar

    或者直接通过Spring Boot运行(此时请确保上述环境变量已设置):

    ./mvnw spring-boot:run

    服务器将在默认端口(通常是8080)启动。

服务器配置(供MCP客户端使用)

以下是MCP客户端连接并启动此服务器所需的配置示例。您的MCP客户端通常会提供一个界面或文件来填写这些信息:

{
  "server_name": "SBB Fahrplan MCP",
  "command": "java",
  "args": [
    "-DJOURNEY_SERVICE_BASE=<您的SBB服务URL>",
    "-DMCP_API_KEY=<您的MCP服务器API密钥>",
    "-DJOURNEY_SERVICE_CLIENT_ID=<您的SBB客户端ID>",
    "-DJOURNEY_SERVICE_CLIENT_SECRET=<您的SBB客户端密钥>",
    "-jar",
    "path/to/chattender-fahrplan-mcp-*.jar"
  ],
  "description": "连接到瑞士SBB列车时刻表查询MCP服务器"
}

参数注释:

  • 'server_name': 给这个MCP服务器连接起一个易于识别的名称,方便在客户端列表中查找。
  • 'command': 启动Java应用程序的命令,这里固定为'java'。
  • 'args': 传递给Java命令的参数列表。
    • '-DJOURNEY_SERVICE_BASE=<您的SBB服务URL>': 设置SBB出行服务API的基础URL。
    • '-DMCP_API_KEY=<您的MCP服务器API密钥>': 设置用于认证此MCP服务器的API密钥。此密钥由您自行定义,MCP客户端在连接时需提供。
    • '-DJOURNEY_SERVICE_CLIENT_ID=<您的SBB客户端ID>': 设置此MCP服务器访问SBB出行服务所需的OAuth客户端ID。
    • '-DJOURNEY_SERVICE_CLIENT_SECRET=<您的SBB客户端密钥>': 设置此MCP服务器访问SBB出行服务所需的OAuth客户端密钥。
    • '-jar': 指示Java运行一个JAR文件。
    • 'path/to/chattender-fahrplan-mcp-*.jar': 替换为'chattender-fahrplan-mcp'项目已构建的可执行JAR文件的实际文件路径和名称(例如,如果您在项目根目录运行,可能是'./target/chattender-fahrplan-mcp-0.0.1-SNAPSHOT.jar')。
  • 'description': 对此MCP服务器连接的简要说明,帮助用户理解其功能。

基本使用方法

一旦服务器成功启动并被MCP客户端连接,LLM就可以通过调用其提供的工具来查询列车时刻表。

  • 示例1: 查询从苏黎世到伯尔尼的列车(JSON格式) LLM可能会生成类似这样的工具调用请求(具体格式取决于MCP客户端和LLM的集成方式):

    {
      "tool_code": "planJourneyJson",
      "tool_input": {
        "from": "Zürich HB",
        "to": "Bern"
      }
    }

    服务器将返回一个包含列车连接详情的JSON响应。

  • 示例2: 查询从伯尔尼到洛桑的下一班列车(自然语言格式) LLM可能会生成类似这样的工具调用请求:

    {
      "tool_code": "planJourneyText",
      "tool_input": {
        "from": "Bern",
        "to": "Lausanne"
      }
    }

    服务器将返回一个简短的自然语言句子,描述最接近的列车连接。

信息

分类

网页与API