这是一个提供 TMB(巴塞罗那大都会运输)公交站点实时到站信息的 Model Context Protocol (MCP) 服务器。
mkdir tmb-bus-mcp
cd tmb-bus-mcp
npm install
# 复制示例环境文件
cp .env.example .env
# 编辑.env并添加您的凭证
# TMB_APP_ID=your_app_id
# TMB_APP_KEY=your_app_key
npm run build
客户端非常适合用于测试和开发:
# 设置环境变量
export TMB_APP_ID=your_app_id
export TMB_APP_KEY=your_app_key
# 查询特定公交站点
npm run client 2775
# 列出可用工具
npm run client -- list
示例输出:
🚌 公交站点:Pl Espanya - FGC (108)
📅 查询时间:2025年11月6日,上午10:30:00
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🚍 线路H12 (212) → Gornal
方向:返回
下一班车:
• ⏱️ 2分钟(10:32:00)- 公交车#3673
• ⏱️ 16分钟(11:46:00)- 公交车#8531
将服务器添加到您的Claude Desktop配置中:
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
Windows: %APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"tmb-bus": {
"command": "node",
"args": ["/绝对路径/to/tmb-bus-mcp/dist/server.js"],
"env": {
"TMB_APP_ID": "your_app_id",
"TMB_APP_KEY": "your_app_key"
}
}
}
}
然后重启Claude Desktop。现在您可以询问Claude如下问题:
独立运行服务器:
export TMB_APP_ID=your_app_id
export TMB_APP_KEY=your_app_key
npm run host
src/server.ts)核心组件:
get_bus_arrivals工具主要职责:
src/host.ts)一个简单的包装器:
何时使用: 独立部署或无需MCP客户端的测试。
src/client.ts)演示客户端:
何时使用: 测试、开发或作为参考实现。
服务器连接到TMB的iBus API:
端点: https://api.tmb.cat/v1/itransit/bus/parades/{stopCode}
参数:
app_id:您的TMB应用程序IDapp_key:您的TMB应用程序密钥响应结构:
{
timestamp: number, // 查询时间戳
parades: [{
codi_parada: string, // 站点代码
nom_parada: string, // 站点名称
linies_trajectes: [{ // 服务此站点的线路
codi_linia: string, // 线路代码
nom_linia: string, // 线路名称
desti_trajecte: string, // 目的地
id_sentit: number, // 1=出站,2=回站
propers_busos: [{ // 即将到来的公交车
temps_arribada: number, // 到达时间戳
id_bus: number // 公交车标识符
}]
}]
}]
}
项目使用TypeScript并进行严格的类型检查。所有API响应都在src/types.ts中正确地进行了类型定义:
TMBApiResponse:原始API响应结构BusStopInfo:转换后的用户友好格式FormattedBusArrival:单个线路信息尝试这些巴塞罗那公交站点:
2775:随机站点108:Pl Espanya - FGC1:Pl Catalunya2554:Sagrada Famíliaget_bus_arrivals工具┌─────────┐ ┌──────────┐ ┌─────────┐
│ 客户端 │────────▶│ MCP │────────▶│ TMB │
│ (Claude)│ │ 服务器 │ │ API │
└─────────┘ └──────────┘ └─────────┘
▲ │ │
│ ▼ │
│ 转换数据 │
│ │ │
└────────────────────┴────────────────────┘
服务器处理各种错误场景:
.env文件或API凭证.env.example文件展示了没有真实凭证的格式此服务器实现了MCP(模型上下文协议):
get_bus_arrivals{ stopCode: string }要扩展此服务器:
server.ts的getTools()方法中添加新工具handleToolCall()中实现处理器types.ts中的类型MIT
问题? 查看MCP文档:https://modelcontextprotocol.io/