mcpField
S
SanAlert

SanAlert

本地服务
sanalert.pl地图与出行01 周前更新

关于 SanAlert

SanAlert 是供 AI 助手使用的本地 MCP 服务,可查询波兰城镇或坐标对应的 SanAlert 推断空袭威胁级别。地点查询留在本机,并将缺失或过期数据与平静级别区分;它不是官方警报系统。

主要功能

  1. 01查询城镇或坐标的级别
  2. 02返回级别、原因和数据可靠性
  3. 03提供当前省份的 RCB 和 RSO 消息
  4. 04地点查询保留在本机

适用场景

  1. 01查看波兰城镇的 SanAlert 推断级别
  2. 02检查数据年龄及级别不可用的原因

MCP 相关

本地服务通过 stdio 与兼容的 AI 助手通信,并提供 `sanalert_level` 工具。另有远程 MCP 服务提供全波兰概况,且不接收地点信息。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"plrojek-sanalert": {
"command": "uvx",
"args": [
"sanalert-mcp"
]
}
}
}
启动命令uvx sanalert-mcp

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
pypisanalert-mcp1.0.1

工具

1

收录的工具列表 · 更新于 1 周前

参数类型必填说明
placeany否SanAlert 的城镇之一,例如 Przemyśl、Lublin、Rzeszów 或 Chełm(波兰字母可选)。提供坐标时请省略此项。
languageenum否level_name 和 say 所用的语言。pl | en | uk
latitudeany否地点的纬度,单位为度。
longitudeany否地点的经度,单位为度。

详细介绍

面向 AI 助手的 SanAlert

面向可运行本地 MCP 服务的 AI 助手(Claude Code、Claude Desktop 等),提供波兰某地的非官方空中威胁等级。询问“Przemyśl 的等级是多少?”助手就会返回网站上该地点显示的答案。这不是官方预警系统,不能取代警笛、Alert RCB 或服务部门的指示。

它的功能和发送的数据

  • 它在你的电脑上运行,并通过 stdio 与助手通信。
  • 助手询问某个地点时,它会获取 https://api.sanalert.pl/v1/state,也就是网站和应用读取的同一份公开数据;最多每 5 s 获取一次,并使用 If-None-Match 和 User-Agent SanAlert-MCP/<version>。每次运行时,它还会获取一次公开网格(/v1/grid/1.json),以查找该地点所在的约 11 km 方格及其省份。
  • 它按照 SanAlert 网站和应用采用的规则(sanalert.pl/jak-to-dziala),在该数据中查找地点的等级。地点信息保留在你的电脑上:不会有任何请求携带地点信息,也绝不会在线查询城镇名称。
  • 隐私页面也说明了这一点(sanalert.pl/prywatnosc,“Serwer SanAlert dla asystentów AI”)。 条款(Regulamin, Умови)。

工具

sanalert_level 接受 place(网站列出的城镇之一,如 Przemyśl、Lublin、Rzeszów、Chełm 等;波兰字母可省略,Warsaw 和 Cracow 也可以),或 latitude 和 longitude,以及 language: pl、en 或 uk。

字段含义
levelquiet、activity、approaching、near、no_data 或 out_of_range
level_name、say所选语言中的等级名称和网站在其下方显示的句子
reason_code、kind、km、eta_min、course_known、lost_at、oblast、raion、threat按网站显示的引发该等级的原因
risk、confidence、degraded与状态数据中的内容一致;degraded 表示数据可能有延迟
data、no_data_reasons、data_age_s、generated_at当前是否可以信任该等级,以及无法信任的原因
place城镇或坐标点、所在方格(cell)及省份
official对该省份生效的 RCB 和 RSO 消息;无法确认时为 null
notice、attribution、pass_through无论在哪里展示这些数据,都必须随数据保留的内容

盲区不等于平静。 如果数据缺失、无法读取、时间超过 60 s,或网格无法读取,等级会是 no_data,绝不会是 quiet,并且 say 会说明这一点。数据年龄不会小于服务持有该数据的时长,因此即使电脑时钟落后,API 中断时也不会让旧的“quiet”状态看起来仍然是最新的。位于波兰网格之外的坐标点会返回 out_of_range。不在列表中的名称会触发一条注明列表内容的错误:请改用坐标。

对于整个波兰(汇总状态、过去 24 小时的官方消息、夜间报告、可靠性记录),SanAlert 运行远程 MCP 服务 https://api.sanalert.pl/mcp。 它不接受地点信息。

安装

需要 uv。

Claude Code:

claude mcp add sanalert -- uvx sanalert-mcp
claude mcp add --transport http sanalert-poland https://api.sanalert.pl/mcp      # optional: the whole of Poland

也可以一次安装两者,将其作为 Claude Code 插件:/plugin marketplace add plrojek/agent-skills,然后运行 /plugin install sanalert@plrojek。也可以直接从 GitHub 安装,而非 PyPI: uvx --from git+https://github.com/plrojek/sanalert-mcp sanalert-mcp。

Claude Desktop(claude_desktop_config.json):

{
  "mcpServers": {
    "sanalert": {
      "command": "uvx",
      "args": ["sanalert-mcp"]
    }
  }
}

使用条件

展示或转述数据的人必须始终随数据展示 notice,并为每个 attribution 条目提供可见链接;始终提醒读者以官方空袭警报(警报器、Alert RCB、当局的指示)为准;在级别旁边显示指向 NEPTUN(https://neptun.in.ua)的可见链接,例如“Дані: Карта повітряних тривог — NEPTUN”;绝不能把无数据说成平静,并且要说明该级别是 SanAlert 的推断,而非官方警报。完整内容见:条款和 API 描述。

开发

uv run pytest 运行测试;这些测试都不会联网。

src/sanalert_mcp/ 中有三个文件是生成的,切勿手动编辑:

  • core.py 是 Home Assistant 集成中的 core.py,规则和措辞完全相同;
  • towns.json 是应用的城镇列表(ios/SanAlertKit/Sources/SanAlertKit/Resources/towns-v1.json,由网站的 web/src/lib/cities.ts 生成);
  • api_texts.json 是 API 的 notice、attribution 和透传内容(api/sanalert/state.py、api/sanalert/mcp_server.py)。

python scripts/sync.py 会复制前两个文件;如果存在任何差异,python scripts/sync.py --check 就会失败(CI 会运行此命令)。当 api_texts.json 与 API 不再匹配时,API 的测试会失败。

源文件位于 SanAlert 自有代码库中的 integrations/mcp/;公开代码库(github.com/plrojek/sanalert-mcp)是它的副本,每次发布时都会更新,因此对 core.py 的修复会在下一次发布时到达用户。

许可证

MIT,Applied AI sp. z o.o.

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。