关于 SanAlert
SanAlert 是供 AI 助手使用的本地 MCP 服务,可查询波兰城镇或坐标对应的 SanAlert 推断空袭威胁级别。地点查询留在本机,并将缺失或过期数据与平静级别区分;它不是官方警报系统。
主要功能
- 01查询城镇或坐标的级别
- 02返回级别、原因和数据可靠性
- 03提供当前省份的 RCB 和 RSO 消息
- 04地点查询保留在本机
适用场景
- 01查看波兰城镇的 SanAlert 推断级别
- 02检查数据年龄及级别不可用的原因
MCP 相关
本地服务通过 stdio 与兼容的 AI 助手通信,并提供 `sanalert_level` 工具。另有远程 MCP 服务提供全波兰概况,且不接收地点信息。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
1收录的工具列表 · 更新于 1 周前
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| place | any | 否 | SanAlert 的城镇之一,例如 Przemyśl、Lublin、Rzeszów 或 Chełm(波兰字母可选)。提供坐标时请省略此项。 |
| language | enum | 否 | level_name 和 say 所用的语言。pl | en | uk |
| latitude | any | 否 | 地点的纬度,单位为度。 |
| longitude | any | 否 | 地点的经度,单位为度。 |
详细介绍
面向 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-AgentSanAlert-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。
| 字段 | 含义 |
|---|---|
level | quiet、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.
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。