返回市场
数据库-MCP服务器

数据库-MCP服务器

作者:PaulvonBerg7 星标更新:2025-08-08

项目介绍

德国铁路MCP服务器

一个全面的模型上下文协议(MCP)服务器,提供统一访问德国铁路(DB)和德国移动性API。使用Python、FastAPI和FastMCP构建,以实现与Claude Desktop和其他MCP客户端的无缝集成。

该服务器已准备好进行本地和云部署。要连接运行中的MCP服务器,请在您的MCP客户端中添加以下URL:https://db-mcp.datamonkey.tech/mcp

🚀 功能特性

  • 🚄 完整铁路数据:车站、时刻表、实时中断信息及停车设施
  • 🤖 MCP协议:完全支持工具、提示和资源
  • 🛡️ 生产就绪:安全头、速率限制、输入验证
  • 🏗️ 模块化架构:干净、可维护的代码库结构
  • ☁️ 云原生:设计用于Google Cloud Run部署
  • 📚 丰富文档:全面指南和参考材料

📋 快速开始(开发者指南 - 用户指南见下)

先决条件

  • Python 3.11+
  • 德国铁路API凭证(获取它们
  • Google Cloud账户(用于部署)

本地开发

  1. 克隆并设置:

    git clone <repository-url>
    cd deutsche-bahn-mcp-server
    python3 -m venv .venv
    source .venv/bin/activate  # 在Windows上:.venv\Scripts\activate
    pip install -r requirements.txt
    
  2. 配置环境:

    cp .env.example .env
    

    接下来,编辑新的.env文件,填入您的DB API凭证。有关每个变量的详情,请参阅“配置”部分。

  3. 运行服务器:

    python main.py
    # 服务器可用地址:http://localhost:8080
    

🎯 实时服务器使用指南

德国铁路MCP服务器已在https://db-mcp.datamonkey.tech上线,随时可以使用。请按照以下逐步指南开始在Claude中访问德国铁路数据。

🖥️ Claude Desktop设置

步骤1:找到您的配置文件

  • macOS~/Library/Application Support/Claude/claude_desktop_config.json
  • Windows:%APPDATA%\Claude\claude_desktop_config.json
  • Linux~/.config/Claude/claude_desktop_config.json

步骤2:编辑配置 打开文件并添加德国铁路服务器:

{
  "mcpServers": {
    "deutschebahn": {
      "command": "npx",
      "args": [
        "-y", "mcp-remote",
        "https://db-mcp.datamonkey.tech/mcp",
        "--transport", "http-only"
      ]
    }
  }
}

步骤3:重启Claude Desktop

  • 完全关闭Claude Desktop
  • 重新打开应用程序
  • 您应该能在MCP部分看到“德国铁路MCP服务器”

步骤4:测试连接 询问Claude:“柏林有哪些火车站?”

🌐 Claude.ai Web使用

步骤1:开始对话 前往claude.ai并开始新对话。

步骤2:添加MCP服务器 点击“搜索和工具 > 添加连接器 > 管理连接器” 选择“添加自定义连接器” 输入名称,例如:“德国铁路MCP服务器” 输入远程MCP服务器URL:https://db-mcp.datamonkey.tech/mcp

步骤3:立即测试 尝试询问:“查找法兰克福附近的火车站,并检查法兰克福中央车站是否有当前延误。”

📱 快速示例

一旦连接成功,尝试这些实用示例:

🔍 车站搜索

  • “查找慕尼黑的所有火车站”
  • “距离坐标52.5200, 13.4050 5公里内的车站有哪些?”

🚄 实时信息

  • “柏林中央车站现在有延误吗?”
  • “显示今天下午3点汉堡中央车站的发车时间表”

♿ 无障碍规划

  • “从慕尼黑到汉堡的无障碍旅行是否可行?”
  • “科隆中央车站有哪些无障碍服务?”

🅿️ 停车信息

  • “明天上午10点在法兰克福中央车站有哪些停车位?”
  • “查找杜塞尔多夫主站附近的停车场”

🗺️ 旅行规划

  • “帮我规划从柏林到德累斯顿的无障碍旅行”
  • “巴伐利亚的主要铁路枢纽有哪些?”

🔧 连接故障排除

Claude Desktop问题:

问题:MCP部分未显示服务器

  • 验证配置文件中的JSON语法(使用JSON验证器)
  • 确保完全重启了Claude Desktop
  • 检查文件保存在正确的位置

问题:连接超时

  • 验证互联网连接
  • 尝试:curl https://db-mcp.datamonkey.tech/mcp/ping 终端
  • 如果curl失败,可能存在网络限制

问题:“命令未找到”错误

  • 确保安装了Node.js和npm
  • 尝试运行:npm install -g mcp-remote

Claude.ai Web问题:

问题:“无法连接到MCP服务器”

  • 网络版可能需要明确的MCP服务器支持
  • 尝试让Claude帮助您逐步连接
  • 替代方案:使用特定工具调用,如询问车站信息

一般问题:

服务器状态检查:

# 测试服务器是否响应
curl https://db-mcp.datamonkey.tech/health

# 测试MCP端点
curl https://db-mcp.datamonkey.tech/mcp/ping

速率限制:

  • 服务器允许每分钟60次请求,每小时1000次请求
  • 如果超出限制,请等待并重试
  • 考虑使用具体查询而不是广泛搜索

🛠️ 可用功能

🔧 工具(13个可用)

车站数据

  • get_station_by_name(name, limit=10) - 通过名称搜索车站,带有回退过滤
  • get_stations_by_position(lat, lon, radius=2.0) - 使用智能区域过滤查找附近车站

时刻表及中断

  • get_planned_timetable(eva_number, date, hour) - 计划的出发/到达时间
  • get_recent_timetable_changes(eva_number) - 实时更新(最后2分钟)
  • get_full_timetable_changes(eva_number) - 所有已知未来中断

停车信息

  • get_parking_by_station(stop_place_id) - 车站附近的停车设施
  • search_parking_facilities(station_name) - 通过车站名称搜索停车设施,使用真实API
  • get_parking_prognoses(facility_id, datetime) - 停车位可用预测

无障碍服务

  • find_facilities(station_number, type, state) - 电梯、扶梯状态
  • get_facilities_by_station(station_number) - 完整设施概览
  • get_szentralen_by_location(lat, lon) - 使用区域过滤的移动服务中心
  • search_szentralen(limit, offset) - 服务中心搜索,带分页

💬 交互式提示(7个可用)

  • accessibility_check - 车站间无障碍旅行验证
  • parking_prognosis - 车站停车设施可用预测
  • recent_timetable_changes - 实时延误和服务中断
  • planned_timetable_window - 特定时间段的列车时刻表
  • station_services - 完整车站信息及设施
  • nearby_stations - 查找地理坐标附近的铁路车站
  • current_disruptions - 综合服务中断概述

📚 参考资源(5个可用)

  • file://reference/station-categories - 德国铁路车站分类指南
  • file://reference/train-types - 完整的德国列车类型指南(ICE、IC、RE等)
  • file://stations/major-hubs - 德国最重要的铁路车站列表
  • file://services/accessibility-guide - 综合无障碍服务指南
  • file://status/current-disruptions - 系统范围内的中断概述

🏗️ 架构

├── main.py                    # FastAPI应用程序入口点
├── server_instance.py         # 共享MCP服务器实例
├── mcp_server.py             # 服务器设置和模块注册
├── utils.py                  # 共享实用程序和验证
├── config.py                 # 配置和密钥管理
├── models.py                 # Pydantic数据模型
├── rate_limiter.py           # 安全:速率限制
├── tools/                    # MCP工具
│   ├── station_tools.py      # 车站搜索和查找
│   ├── timetable_tools.py    # 时刻表和中断
│   ├── parking_tools.py      # 停车设施
│   └── facility_tools.py     # 无障碍服务
├── resources/                # MCP资源
│   └── travel_resources.py   # 旅行指南和参考资料
└── prompts/                  # MCP提示
    └── travel_prompts.py      # 互动旅行协助

🎯 智能地理过滤

服务器实现了智能区域过滤以最大化API效率和结果相关性:

坐标到区域映射

  • 联邦州检测:将坐标映射到德国联邦州(巴伐利亚、黑森等)
  • 边界地区处理:包括邻近州的地点
  • 基于城市的过滤:使用相关州内的主要城市进行有针对性的搜索

增强车站搜索

  • 区域预筛选get_stations_by_position()从相关联邦州获取车站,而不是随机1000个
  • 回退机制get_station_by_name()使用API搜索字符串和客户端侧回退
  • 距离计算:使用实际坐标进行精确的哈弗辛距离计算

S-Zentralen区域过滤

  • 城市匹配:根据坐标确定的区域筛选S-Zentralen
  • 州到城市的映射:联邦州到主要城市的综合映射
  • 相关结果:返回区域服务中心,而不是所有德国中心

🔒 安全特性

  • 速率限制:每分钟60次请求,每小时1000次请求
  • 输入验证:全面的清理和验证
  • 安全头:XSS、CSRF、内容类型保护
  • 错误清理:不泄露敏感信息
  • 仅HTTPS:安全传输层
  • CORS保护:控制跨源访问

🚀 部署

Google Cloud Run(推荐)

部署您自己的德国铁路MCP服务器实例,按以下步骤操作:

先决条件

基本部署(默认Cloud Run URL)

  1. 设置密钥:

    # 创建您的DB API凭证密钥
    echo "your_db_api_key" | gcloud secrets create DB_API_KEY --data-file=-
    echo "your_db_api_secret" | gcloud secrets create DB_API_SECRET --data-file=-
    
  2. 部署服务:

    # 克隆仓库
    git clone https://github.com/your-repo/deutsche-bahn-mcp-server
    cd deutsche-bahn-mcp-server
    
    # 部署到Cloud Run
    gcloud run deploy deutschebahn-mcp-server \\
      --source . \\
      --region europe-west3 \\
      --allow-unauthenticated \\
      --port 8080
    
  3. 授予密钥访问权限:

    # 获取部署输出中的服务帐户电子邮件
    gcloud projects add-iam-policy-binding YOUR_PROJECT_ID \\
      --member="serviceAccount:your-service-account@your-project.iam.gserviceaccount.com" \\
      --role="roles/secretmanager.secretAccessor"
    
  4. 使用您的MCP服务器: 您的服务器将在提供的Cloud Run URL上可用,例如: https://deutscheb.ahn-mcp-server-123456789.region.run.app/mcp

自定义域名部署(生产)

对于带有自定义域名和增强安全性的生产使用:

  1. 遵循上述基本部署步骤1-3

  2. 设置自定义域名和负载均衡器(参见Google Cloud负载均衡器文档

  3. 使用自定义域名重新部署:

    gcloud run deploy deutschebahn-mcp-server \\
      --source . \\
      --region europe-west3 \\
      --allow-unauthenticated \\
      --port 8080 \\
      --set-env-vars CUSTOM_DOMAIN=your-domain.com
    

Docker(本地开发)

# 构建镜像
docker build -t deutschebahn-mcp-server .

# 使用您的API凭证本地运行
docker run -p 8080:8080 \\
  -e DB_API_KEY=your_db_api_key \\
  -e DB_API_SECRET=your_db_api_secret \\
  deutschebahn-mcp-server

# 服务器可用地址:http://localhost:8080/mcp

部署注意事项

  • 默认部署:使用Cloud Run内置的HTTPS,并允许从生成的URL访问
  • 自定义域名:仅限于您的特定域名访问,阻止直接访问Cloud Run URL
  • API凭证:始终存储在Google Secret Manager中,不在环境变量或代码中存储
  • 速率限制:内置保护(每分钟60次请求,每小时1000次请求)

部署故障排除

Secret Manager访问问题:

# 验证密钥存在
gcloud secrets list

# 检查服务帐户权限
gcloud projects get-iam-policy YOUR_PROJECT_ID \\
  --flatten="bindings[].members" \\
  --filter="bindings.members:*gserviceaccount.com"

连接问题:

# 测试已部署的服务
curl https://your-service-url/health

# 查看日志
gcloud run logs read --service=deutschebahn-mcp-server --region=your-region

📖 使用示例

智能地理车站搜索

# 询问Claude:“查找靠近慕尼黑市中心的火车站”
# 使用:get_stations_by_position(48.1351, 11.5820)
# → 智能区域过滤返回相关的巴伐利亚车站

增强车站搜索

# 询问Claude:“查找法兰克福的火车站”
# 使用:get_station_by_name("Frankfurt")
# → API搜索字符串参数,带有智能回退

区域服务中心

# 询问Claude:“查找柏林附近的移动服务中心”
# 使用:get_szentralen_by_location(52.5200, 13.4050)
# → 返回柏林/勃兰登堡S-Zentralen,使用城市过滤

实时中断

# 询问Claude:“柏林中央车站现在有延误吗?”
# 使用:recent_timetable_changes提示

准确停车搜索

# 询问Claude:“查找法兰克福中央车站的停车位”
# 使用:search_parking_facilities("Frankfurt Hauptbahnhof")
# → 使用真实API的stationName参数获得准确结果

🧪 开发

运行测试

# 安装开发依赖
pip install -r requirements-dev.txt

# 运行测试
pytest tests/

# 带覆盖率运行
pytest --cov=. tests/

代码质量

# 格式化代码
black .

# 代码检查
flake8 .

# 类型检查
mypy .

使用MCP Inspector进行本地测试

# 安装MCP Inspector
npm install -g @modelcontextprotocol/inspector

# 检查本地服务器
mcp-inspector http://localhost:8080/mcp

🤝 贡献

我们欢迎社区贡献!请参阅我们的CONTRIBUTING.md指南以获取详细信息。

贡献者快速入门

  1. 分叉仓库
  2. 创建功能分支:git checkout -b feature-name
  3. 编写更改并添加测试
  4. 遵循我们的开发指南
  5. 提交拉取请求

归属请求

如果您在自己的项目中使用了这项工作、代码或概念,请提供适当的归属:

基于Paul von Berg的德国铁路MCP服务器
https://github.com/PaulvonBerg/db-mcp-server

感谢您!

⚙️ 配置

服务器通过环境变量进行配置。对于本地开发,在根目录创建一个.env文件,复制.env.example模板。对于云部署,这些值通过Google Secret Manager或直接在服务上设置。

查看.env.example文件中的注释,了解哪些凭证应放置在哪里,以避免混淆。

环境变量

变量描述来源 / 备注
DB_API_KEY您的德国铁路API 客户端ID必需。在.env(本地)或DB_API_KEY密钥(云)中设置。
DB_API_SECRET您的德国铁路API 密钥(秘密)必需。在.env(本地)或DB_API_SECRET密钥(云)中设置。
GCP_PROJECT_ID您的Google Cloud项目ID云部署所需。如果未设置,则自动检测。