关于 Open Waters AIS
Open Waters AIS 汇集社区网络、政府数据和志愿接收站的实时 AIS 船舶信息。它提供按船舶、区域或位置查询的 MCP 服务,也提供流式接口和覆盖范围信息。
主要功能
- 01按 MMSI 或名称搜索船舶
- 02查询区域及附近船舶
- 03实时 AIS 消息流
- 04查看数据源与覆盖范围
- 05为事件提供来源和许可信息
适用场景
- 01查找特定船舶的实时位置
- 02查看指定区域的船舶交通
- 03监测船舶周边交通
- 04检查数据来源及覆盖状况
MCP 相关
Open Waters AIS 在 MCP 上提供只读工具,可按 MMSI、区域、位置或名称查询船舶,并查看覆盖范围。
配置
远程服务无需本地安装。选择你使用的客户端,复制配置或使用一键安装。
https://ais.openwaters.io/mcpclaude mcp add --transport http io-openwaters-ais https://ais.openwaters.io/mcp{"mcpServers":{"io-openwaters-ais":{"type":"http","url":"https://ais.openwaters.io/mcp"}}}在 Cursor 中打开{"servers":{"io-openwaters-ais":{"type":"http","url":"https://ais.openwaters.io/mcp"}}}在 VS Code 中打开{"mcpServers":{"io-openwaters-ais":{"type":"http","url":"https://ais.openwaters.io/mcp"}}}{"mcpServers":{"io-openwaters-ais":{"serverUrl":"https://ais.openwaters.io/mcp"}}}命令在终端中运行;JSON 粘贴到对应客户端的 MCP 配置后重启。需要授权的服务会在首次连接时提示登录。
工具
详细介绍
aiscast
通过边界框实时传输 AIS 船舶交通数据,数据来自社区网络、开放政府数据源和志愿者接收站。它是 Open Waters 的一部分。公共实例为 ais.openwaters.io。实时地图位于 openwaters.io/ais/vessels。
这是一个 Beta 版。没有 SLA。覆盖范围不均。部分来源的再分发条款尚未确定(参见覆盖范围)。实时状态和运行时间历史记录请见 status.openwaters.io。
用法
aisstream.io 客户端。 aiscast 在 wss://ais.openwaters.io/v0/stream 上使用 aisstream.io 的协议:订阅消息相同,MessageType / MetaData / Message 帧也相同。更改主机名,并将 aiscast 令牌用作 APIKey。现有代码可继续使用:aisstream-ts、官方 Go/Python/JS 示例,以及 signalk-aisstream。
原生 API(完整参考)。
wss://ais.openwaters.io/v1/stream:发送{"type":"subscribe","bbox":[[minLat,minLon,maxLat,maxLon]]}或{"type":"subscribe","mmsi":[368168720]}(也可以两者都发)。馈送器和合作伙伴令牌还可通过"imo":[9241061]按 IMO 编号跟踪船舶。你会收到每条已解码 AIS 消息对应的一个 JSON 事件。每个事件都包含来源、站点、接收时间、原始语句和解码后的字段。添加"snapshot":true,可先获取订阅中已跟踪的每艘船舶的最新已知消息,然后接收实时交通数据。订阅无需令牌。GET https://ais.openwaters.io/v1/vessels?bbox=minLat,minLon,maxLat,maxLon(或?mmsi=a,b,c):返回当前视野中所有船舶的 GeoJSON。每艘船舶都包含其最后位置、名称、类型、航向、速度、艏向、旗帜,以及 aiscast 上次收到其信号的时间和来源;静态数据收到后,还会包含 IMO 编号、呼号、目的地、预计抵达时间、吃水、长度、宽度,以及 AIS 天线到船首、船尾、左舷和右舷的距离。无需令牌。GET https://ais.openwaters.io/v1/stations:返回 aiscast 正在接收的所有来源,以及消息计数和数据时效。
AI 助手。 https://ais.openwaters.io/mcp 是一个 MCP(Model Context Protocol)服务,提供五种只读工具:按 MMSI 查询船舶、查询区域内的船舶、查询某个点附近或另一艘船附近的船舶、按名称搜索,以及查询覆盖范围。无需登录。Claude Code:claude mcp add --transport http open-waters-ais https://ais.openwaters.io/mcp。Claude.ai、ChatGPT、Cursor 和 VS Code 可将该 URL 作为自定义连接器或 mcp.json 条目;各平台的设置说明见 API 参考。在 Authorization: Bearer 标头中提供令牌可提高匿名使用限制。
令牌。 /v0/stream 需要令牌。个人令牌可自行获取,且永不过期。请使用令牌页面,或生成 Ed25519 密钥对,并向 POST https://ais.openwaters.io/v1/keys 发送 {"pubkey":"<base64url public key>"},使用该密钥签名,具体方式请参见 API 参考。响应内容就是你的令牌。该令牌对应个人层级:2 个流、50 条消息/秒,以及 20°×20° 的区域。使用同一令牌馈送数据后,它会自动成为馈送器令牌。
层级和限制请见 docs/limits.md。如需高于馈送器层级的额度,或用于商业用途,请发送邮件至 [email protected]。
事件中包含 source,因此你可以区分实时志愿者接收站、政府数据源和聚合数据。synthesized: true 表示 aiscast 将非 NMEA 来源的数据重新编码为消息。
贡献数据
如果你运行着 AIS 接收器,欢迎在此发送数据。aiscast 会将数据重新提供给所有人,将其与公开馈送及其他所有站点的数据去重,并将志愿者接收到的数据分享给 AISHub,作为我们对其社区网络的贡献。只有志愿者站点直接接收到的数据才会发送给 AISHub;公开馈送和合成消息不会发送。你也可以继续为其他网络贡献数据。贡献条款请参阅贡献者协议。
- AIS-catcher(首选:经过身份验证、实时传输,可在任何 NAT 后运行):在 openwaters.io/ais/token 获取令牌(点击一次即可,令牌会保留在浏览器中),然后运行
AIS-catcher ... -Q wssmqtt://x:<token>@ais.openwaters.io:443/v1/stream MSGFORMAT NMEA。每条消息解码后都会通过 MQTT 发送,使用与 JSON 流相同的 WebSocket 地址。你的数据会显示为source: station:<station id>。在令牌页面为站点命名;在命名之前,站点会以其接收信号所覆盖区域中离交通流量最近的城镇命名。AIS-catcher 的 HTTP 输出也可使用:-H https://ais.openwaters.io/v1/receive USERPWD x:<token> GZIP on INTERVAL 5,每五秒以同一站点身份发送一批数据。 - UDP(无需令牌):使用 AIS-catcher
-u udp.ais.openwaters.io 10110、将主机设为udp.ais.openwaters.io且端口设为10110的 docker-shipfeeder,或任何发送纯!AIVDM/!AIVDO语句的 NMEA 转发器(欢迎附带 TAG 块)。你的站点会显示为udp:<id>,这是根据你的地址生成的密钥哈希,绝不会显示地址本身。如果发送方的!AIVDO语句能识别出船只,aiscast 会改用该 MMSI 为站点生成密钥。 - Signal K:在
ais-forwarder中添加 UDP 目标udp.ais.openwaters.io:10110(转发 AIVDM 和 AIVDO)。或者安装signalk-aiscast插件。无需令牌。插件会分享接收器收到的数据,以及来自应答器的位置;若没有 AIS 应答器,则根据 Signal K 生成位置。没有接收器时,它会显示 aiscast 的船舶流量。
你的站点页面为 https://openwaters.io/ais/stations/<your id>,站点列表中列出了所有站点。页面会显示接收到的船只、覆盖范围、消息数量,以及其他站点更早收到的消息数量。GET /v1/stations/{id} 会返回相同的数据。数据馈送端可以通过 wss://ais.openwaters.io/v1/nmea 获取去重后的原始流。
覆盖范围
| 来源 | 位置 | 新鲜度 |
|---|---|---|
| Kystverket | 挪威海岸外 40–60 海里 | 实时 |
| BarentsWatch | 挪威专属经济区、斯瓦尔巴群岛、扬马延岛(卫星接收器 + 海上接收器) | 实时 |
| Fintraffic Digitraffic | 芬兰水域 | 实时 |
| 志愿接收器 | 所在位置(首个站点位于 Buzzards Bay / Vineyard Sound) | 实时 |
| AISHub aggregate | 全球陆地接收范围,约 5 万艘船舶 | 延迟约一分钟 |
| aisstream.io | 全球范围,服务运行时可用 | 实时,但经常宕机 |
AISHub 及其贡献者让我们得以实现大部分全球陆地覆盖。我们会回传志愿者接收的数据,并在每条来自其聚合数据的事件中注明 AISHub。
/v1/stats 会报告每个来源从广播到抵达的当前延迟(以秒为单位的 delay.p50 和 delay.p99)。
每条事件都会标明其来源。docs/policy.md 列出了本项目有意不使用的来源及其原因。
许可与署名
许可按来源而定。aiscast 不会为聚合数据重新授权。aiscast 会按照事件来源的条款重新提供每条事件。因此,每条事件、每艘船舶和每个归档小时都包含 source,并且每条 /v1 事件都带有 license 标签和 attribution 署名信息。每条署名信息都以 “Open Waters AIS (https://openwaters.io/ais/)” 开头;有自己条款的来源会在其后附上署名信息。如果你展示或再分发这些数据,请展示每条事件附带的 attribution 信息。/v1/vessels 会在要素集合中以顶层 attribution 成员的形式提供相同的署名信息,每个当前存在的来源各一条。下表提供了相同的信息,供参考。
| 来源 | 许可证 | 你必须做什么 |
|---|---|---|
| Kystverket | NLOD 2.0 | 标注来源:“包含由挪威海岸管理局分发、依据挪威开放政府数据许可(NLOD)提供的数据。”NLOD 不可再许可,因此会直接约束你。 |
| BarentsWatch | 根据 BarentsWatch API 条款采用 NLOD | 标注来源:“数据由 BarentsWatch 提供。”它与 Kystverket 使用的是同一 AIS Norge 数据,因此也适用 Kystverket 的来源标注要求。 |
| Fintraffic Digitraffic | CC BY 4.0 | 标注来源:“来源:Fintraffic / digitraffic.fi,许可证 CC 4.0 BY。” |
| 志愿者接收站 | 贡献者协议依据 CC0 将接收数据贡献至公有领域,并依据 ODbL 发布汇总数据 | 标注来源“Open Waters AIS(https://openwaters.io/ais/)”。单条接收数据采用 CC0。汇总数据采用 ODbL。 |
| AISHub 汇总数据 | AISHub 条款及任何适用的书面协议 | 标注来源为 AISHub 贡献者,并保留 source: aishub。再利用和再分发必须遵循适用条款。 |
| aisstream.io | 未公布条款 | 尽力而为,可能会消失。source: aisstream。 |
| Wikidata 船舶信息 | CC0 1.0 | 无需操作。/v1/vessels/{mmsi} 中的 wikidata 对象以及 MCP get_vessels 会通过 license: CC0-1.0 说明这一点。其 image 和 commons_category 链接指向的 Commons 照片各自采用其自身的许可证。 |
| 美国海岸警卫队 PSIX | 公有领域(美国政府作品) | 无需操作。/v1/vessels/{mmsi} 中的 uscg 对象以及 MCP get_vessels 会在其 license 字段中说明这一点。 |
| AMSA 船舶登记册 | CC BY 4.0 | 标注来源:“© 澳大利亚海事安全局”。/v1/vessels/{mmsi} 中的 sources.amsa 条目以及 MCP get_vessels 会通过 license: CC-BY-4.0 标注该许可证。 |
| MarineCadastre | 公有领域(美国政府作品);NOAA 将其 2024 年发布内容标注为 CC0 | 无需标注。基于该数据的航迹历史会标注来源:“美国海岸警卫队全国 AIS 数据,经由 MarineCadastre.gov(NOAA 和 BOEM)提供。”并保留 source: marinecadastre。 |
| 丹麦海事局 | 可依据丹麦公共部门信息法再利用;数据管理政策禁止以会导致私人个体身份可被识别的方式组合数据 | 基于该数据的航迹历史会标注来源“丹麦海事局。”并保留 source: dma。 |
aiscast 自身的代码采用 MIT 许可。aiscast 使用带密钥的哈希而非地址来识别 UDP 站点(发送 !AIVDO 的站点以其 MMSI 作为密钥,其位置包含在它共享的数据中)。/v1/stations 上的站点标签,以及船舶搜索和 /v1/vessels/{mmsi} 中的 near,会显示来自 GeoNames 的最近城镇名称;GeoNames 采用 CC BY 4.0 许可。归档会按来源保留原始接收数据,因此项目可以清除任何来源的数据。docs/policy.md 说明了完整立场:包括贡献者协议的内容、隐私规则,以及项目计划如何在不重新许可数据的情况下为自身提供资金。 |
贡献
开发者和运营者请参阅 CONTRIBUTING.md。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。