交通数据协议服务器

一个用于与华盛顿州交通部API交互的模型上下文协议服务器,提供轮渡路线和时间表查询功能。

  • by michaelpeterswa
  • Go
  • 混合部署
  • 1 星标
  • 更新于
在 GitHub 查看 michaelpeterswa/mcp-wsdot

使用说明

a model context protocol server for interacting with the washington state department of transportation api

   wsdot库|模型上下文协议|mcp走


发展

先决条件

  • 为了获得最佳的开发体验,请安装 小圆面包 因此可以启动MCP检查器(使用 make mcp)

建筑

  • 请使用 docker compose 在本地运行应用程序。
    • Docker编写说明:
      • docker compose up -d --build && docker compose logs -f -t

使用docker compose运行并检查Grafana http://localhost:3000 用于度量/跟踪。

运输

通过以下方式选择运输方式 TRANSPORT 环境变量:

TRANSPORT 描述
streamablehttp 违约。 当前的MCP HTTP传输。使用此功能远程托管服务器(例如在Kubernetes中)。
stdio 适用于直接启动二进制文件的本地客户端(Claude Desktop,MCP检查器)。
sse 传统的HTTP+SSE传输。 已弃用 根据MCP规范,支持 streamablehttp;只为老客户保留。

streamablehttp 和 sse 接受以下附加配置:

变量 默认值 描述
HTTP_PORT 8080 监听端口(SSE_PORT 当 HTTP_PORT 未设置,用于向后兼容性。)
HTTP_PATH /mcp MCP端点的服务路径(仅限streamablehttp)。
MCP_AUTH_TOKEN (未设置) 设置后,每个MCP请求都必须发送 Authorization: Bearer <token>Unset禁用身份验证。
MCP_STATELESS false 禁用会话跟踪,这样请求就可以在副本之间进行负载平衡,而不会出现粘滞会话。
MCP_HEARTBEAT_INTERVAL 30s 保持空闲流的活动间隔(通过代理/入口提供帮助)。零禁用它
SHUTDOWN_TIMEOUT 15s 在上删除机上请求的宽限期 SIGTERM.

HTTP传输还公开了两个 未认证的 健康端点 Kubernetes探测器: GET /healthz (活性)和 GET /readyz (准备就绪)。

远程托管(Kubernetes)

要在群集中托管此服务器以供远程客户端使用,请运行 集装箱 TRANSPORT=streamablehttp (默认)和不记名代币:

docker run -p 8080:8080 \
  -e WSDOT_API_KEY=<your-key> \
  -e TRANSPORT=streamablehttp \
  -e MCP_AUTH_TOKEN=<a-long-random-token> \
  ghcr.io/michaelpeterswa/mcp-wsdot:latest

然后,客户端连接到 http://<host>:8080/mcp 通过可流式传输的HTTP 传输,将令牌作为 Authorization: Bearer 头球例如, OpenClaw远程MCP服务器条目:

{
  "mcpServers": {
    "wsdot": {
      "transport": "streamable-http",
      "url": "https://wsdot.example.com/mcp",
      "headers": { "Authorization": "Bearer <a-long-random-token>" }
    }
  }
}

用于部署指导——探测路径、端口和整个环境 变量引用——见上表。容器正在监听 :8080 (MCP)和 :8081 (普罗米修斯指标,当 METRICS_ENABLED=true),作为 非root用户,并优雅地消耗 SIGTERM.

当前工具

工具 描述
get_current_time 获取PDT/PST时区的当前时间
get_route_schedules 获取可用渡轮路线的名称和路线id
get_schedules_today_by_route_id 通过路线id获取路线的航行时间

MacOS二进制笔记

如果您从MacOS的发布页面下载二进制文件,则需要将其排除在隔离安全警告之外。为此,请运行以下命令:

xattr -rd com.apple.quarantine <path-to-binary>

示例问题

西雅图至布雷默顿渡轮航线的下三班航班是什么?我今晚能回来的最新消息是什么?

问克劳德桌面3.7 Sonnet

我会帮你找到西雅图到布雷默顿航线的下三班航班,以及今晚的最新回程选择。让我查一下当前的渡轮时刻表。

现在我有了路线信息,让我检查一下西雅图到布雷默顿渡轮路线的具体时间表:

根据日程信息,以下是您要求的详细信息:

接下来从西雅图到布雷默顿的三次航行:

  1. 今天下午12:20(2025年4月20日)-船只:瓦拉瓦拉
  2. 今天下午2:50(2025年4月20日)-船只:瓦拉瓦拉
  3. 今天下午5:30(2025年4月20日)-船只:瓦拉瓦拉

今晚从布雷默顿返回西雅图的最新消息:

今晚从布雷默顿到西雅图的最新航行时间为晚上11:40(23:40)-船只:Walla Walla

所有航班均由残疾人无障碍船只Walla Walla运营。此时间表>是2025年春季服务的一部分,该服务于2025年3月23日至6月14日运行。