科隆开放数据MCP服务器
一个模型上下文协议(MCP)服务器,提供对科隆开放数据API的无缝访问。使用Node.js、TypeScript和 @模型上下文协议/sdk,该服务器使人工智能助手和工具能够与德国科隆市的实时数据进行交互。
](https://www.npmjs.com/package/cologne-open-data-mcp)  
🌟 特性
- 实时数据访问:实时停车可用性、共享单车站、莱茵河水位等
- 类型安全:完全类型化,使用TypeScript和Zod模式验证
- 安全:内置SSRF保护、请求超时和标头注入预防
- MCP兼容:适用于Claude Desktop、Cursor和其他MCP兼容客户端
- 有据可查:全面的API文档和使用示例
- 生产准备就绪:错误处理、日志记录和超时管理
🌐 部署选项
此MCP服务器支持两种模式:
- 本地STDIO模式 -适用于Claude Desktop和本地MCP客户端
- Web SSE模式 -用于Render等平台上的web部署
看 部署.md 了解详细的部署说明。
📋 可用工具
| 工具名称 | 描述 | 数据源 |
|---|---|---|
health | 服务器状态检查 | - |
http.get_json | JSON/REST端点的通用HTTP GET | 任何URL |
koeln.parking | 当前停车设施可用性 | 科隆停车场API |
koeln.baustellen_caps | 建筑工地WFS能力 | 科隆GeoPortal |
koeln.rheinpegel | 莱茵河水位 | 科隆水位服务 |
koeln.kvb_rad.stations | KVB共享单车站 | Nextbike API |
koeln.oparl.bodies | 政治机构名单 | 科隆奥林匹克公园 |
koeln.oparl.body | 单一政治机构细节 | 科隆奥林匹克公园 |
🚀 快速开始
安装
npm install cologne-open-data-mcp或全局安装:
npm install -g cologne-open-data-mcpClaude Desktop(STDIO)的本地使用
- 编辑您的Claude Desktop配置文件:
- macOS: ~/Library/Application Support/Claude/claude_desktop_config.json - 视窗: %APPDATA%\Claude\claude_desktop_config.json
- 添加服务器配置:
{
"mcpServers": {
"cologne-open-data": {
"command": "npx",
"args": ["cologne-open-data-mcp"]
}
}
}- 重新启动克劳德桌面
Web部署(SSE模式)
对于Render或类似平台上的生产部署:
- 部署以渲染:
- 跟随 部署.md 指南 - 使用 render.yaml 配置包括 - 服务器将在 https://your-app.onrender.com
- 连接到SSE端点:
import { SSEClientTransport } from '@modelcontextprotocol/sdk/client/sse.js';
const transport = new SSEClientTransport(
new URL('https://your-app.onrender.com/sse')
);- 测试部署:
# Health check
curl https://your-app.onrender.com/health与其他MCP客户端(STDIO)一起使用
服务器通过STDIO通信,可以与任何兼容MCP的客户端集成:
import { StdioClientTransport } from '@modelcontextprotocol/sdk/client/stdio.js';
import { spawn } from 'child_process';
const transport = new StdioClientTransport({
command: 'npx',
args: ['cologne-open-data-mcp']
});🛠️ 发展
先决条件
- Node.js>=18.0.0
- npm或纱线
设置
- 克隆存储库:
git clone https://github.com/ErtanOz/Cologne-Open-Data-Mcp.git
cd Cologne-Open-Data-Mcp- 安装依赖项:
npm install- (可选)配置自定义API终结点:
cp .env.example .env
# Edit .env with your preferred endpoints- 在开发模式下运行:
npm run dev- 生产建设:
npm run build
npm start🔧 配置
环境变量可以在 .env 文件:
PARKING_URL=https://www.stadt-koeln.de/externe-dienste/open-data/parking.php
BAUSTELLEN_WFS=https://geoportal.stadt-koeln.de/wss/service/baustellen_wfs/guest?SERVICE=WFS&REQUEST=GetCapabilities
RHEINPEGEL_URL=https://www.stadt-koeln.de/interne-dienste/hochwasser/pegel_ws.php
NEXTBIKE_URL=https://api.nextbike.net/maps/nextbike-live.xml?city=14
OPARL_BODIES_URL=https://buergerinfo.stadt-koeln.de/oparl/bodies📖 API示例
检查服务器运行状况
// Input
{
"tool": "health",
"arguments": {
"echo": "Hello MCP Server"
}
}
// Output
"Hello MCP Server"获取停车数据
// Input
{
"tool": "koeln.parking",
"arguments": {}
}
// Output (example)
{
"source": "https://www.stadt-koeln.de/externe-dienste/open-data/parking.php",
"payload": [
{
"name": "Parkhaus Am Dom",
"free": 245,
"total": 550,
"status": "open"
}
// ... more parking facilities
]
}获取KVB自行车站
// Input
{
"tool": "koeln.kvb_rad.stations",
"arguments": {
"limit": 10,
"onlyActive": true
}
}
// Output (example)
{
"source": "https://api.nextbike.net/maps/nextbike-live.xml?city=14",
"totalStations": 287,
"returnedStations": 10,
"stations": [
{
"id": "123456",
"name": "Hauptbahnhof",
"bikes": 8,
"freeRacks": 12,
"active": true,
"lat": 50.9429,
"lng": 6.9589
}
// ... more stations
]
}通用HTTP GET
// Input
{
"tool": "http.get_json",
"arguments": {
"url": "https://api.example.com/data",
"headers": {
"Accept": "application/json"
}
}
}🔒 安全特性
- SSRF保护:验证URL以防止对localhost和私有IP范围的请求
- 请求超时:所有HTTP请求超时10秒
- 防止集管注入:对自定义标头进行消毒
- 类型验证:对所有输入进行Zod模式验证
- 错误处理:全面的错误消息,不会暴露敏感信息
🐳 Docker部署
A. Dockerfile 包含用于容器化部署的:
# Build the image
docker build -t cologne-open-data-mcp .
# Run the container
docker run -i cologne-open-data-mcp📂 项目结构
Cologne-Open-Data-Mcp/
├── src/
│ ├── server.ts # MCP server initialization
│ └── tools/ # Tool implementations
│ ├── health.ts # Health check
│ ├── http_get.ts # Generic HTTP GET
│ ├── parking.ts # Parking data
│ ├── baustellen.ts # Construction sites
│ ├── rheinpegel.ts # Rhine water level
│ ├── kvb_rad.ts # Bike-sharing stations
│ ├── oparl_bodies.ts # Political bodies
│ ├── types.ts # Type definitions
│ └── utils.ts # Utility functions
├── dist/ # Compiled JavaScript (generated)
├── package.json
├── tsconfig.json
├── LICENSE
└── README.md🤝 贡献
欢迎投稿!请随时提交拉取请求。
- 分叉存储库
- 创建功能分支(
git checkout -b feature/AmazingFeature) - 提交您的更改(
git commit -m 'Add some AmazingFeature') - 推到分支(
git push origin feature/AmazingFeature) - 打开拉取请求
📄 许可证
此项目根据MIT许可证获得许可-请参阅 许可证 文件以获取详细信息。
🙏 致谢
📞 支持
- 问题:
- 讨论:
⚠️ 重要提示
关于ChatGPT兼容性
ChatGPT不支持MCP。 此服务器设计用于:
- ✅ 克劳德桌面(拟人)
- ✅ 光标IDE
- ✅ 其他MCP兼容客户端
对于ChatGPT集成,您需要使用OpenAPI规范创建一个单独的REST API包装器。
部署模式
- STDIO模式:本地桌面使用(克劳德桌面等)
- SSE模式:Web部署(渲染、云平台)
🗺️ 路线图
- \[x\] STDIO传输供本地使用
- \[x\] 用于web部署的SSE传输
- \[x\] 渲染部署配置
- \[\]添加更多科隆开放数据源
- \[\]实施缓存以提高性能
- \[\]添加速率限制功能
- \[\]创建全面的测试套件
- \[\]添加监控和指标
- \[\]支持其他数据格式
______________________________________________________________________
由以下材料制成❤️ 科隆社区
