关于 Amtsblick
Amtsblick 是一个私人开源 MCP 服务,将奥地利市镇位置与天气预报、河流水位数据结合。它面向需要简明本地状况及来源、时间和单位信息的 AI 助手,但并非官方预警服务。
主要功能
- 01按名称、代码或坐标查找市镇
- 02查看天气预报和短时降水
- 03查找附近水位站及河流水位
- 04按州归类水位升高情况
- 05提供来源、许可、时间和单位
适用场景
- 01查询奥地利市镇天气
- 02查找附近水位站及当前水位
- 03查看各州水位升高情况
MCP 相关
向 MCP 客户端提供地点查询、天气、降水和水位工具。响应包含来源与数据处理信息,并注明该服务不是官方预警服务。
配置
远程服务无需本地安装。选择你使用的客户端,复制配置或使用一键安装。
https://amtsblick.aicodelabs.dev/mcpclaude mcp add --transport http haraldrohan-amtsblick https://amtsblick.aicodelabs.dev/mcp{"mcpServers":{"haraldrohan-amtsblick":{"type":"http","url":"https://amtsblick.aicodelabs.dev/mcp"}}}在 Cursor 中打开{"servers":{"haraldrohan-amtsblick":{"type":"http","url":"https://amtsblick.aicodelabs.dev/mcp"}}}在 VS Code 中打开{"mcpServers":{"haraldrohan-amtsblick":{"type":"http","url":"https://amtsblick.aicodelabs.dev/mcp"}}}{"mcpServers":{"haraldrohan-amtsblick":{"serverUrl":"https://amtsblick.aicodelabs.dev/mcp"}}}命令在终端中运行;JSON 粘贴到对应客户端的 MCP 配置后重启。需要授权的服务会在首次连接时提示登录。
工具
8| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| ort | string | 是 | Gemeindename, optional "Name, Bundesland"; oder fünfstellige GKZ; oder Koordinate "Breite, Länge", z. B. "48.04, 14.42". Bei einem Namen gilt die Prognose für den Gemeindemittelpunkt. |
| stunden | integer | 否 | Vorhersagezeitraum in Stunden ab jetzt, 1 bis 61. Standard 48. |
详细介绍
Amtsblick
Amtsblick 是一个 MCP 服务,用于关联奥地利各地的官方数据。AI 助手询问一个市镇后,就能获取相关天气和水位数据——每项数据均附有来源说明、数据时间和单位。
Amtsblick 是一个私人开源项目,并非政府机构的官方服务。
第一阶段涵盖通用核心功能(地点目录、来源说明、缓存、请求配额)、天气模块(GeoSphere Austria)和水文模块(eHYD 水位站)。后续模块将采用相同模式推出。
免责声明。 Amtsblick 不是官方服务,也不是预警服务。回答内容转述第三方数据,可能存在延迟、不完整或错误,也不能替代官方的恶劣天气或洪水预警。应以 GeoSphere Austria 和各州的预警服务为准。软件按“原样”提供,不作任何保证(请参阅 LICENSE);使用者有责任自行确保遵守数据来源的使用条款。 Amtsblick 是一个私人项目。Statistik Austria、GeoSphere Austria、BMLUK 和各州的水文服务部门均未参与本项目,也不认可本项目或其数据处理方式。
工具
| 工具 | 用途 |
|---|---|
ort_finden(text) | 按名称、GKZ 或坐标搜索市镇 |
quellen() | 来源、许可证、说明、上次获取时间和剩余请求配额 |
wetter_prognose(ort, stunden = 48) | 以 6 小时为间隔的预报及每日数据 |
niederschlag_jetzt(ort) | 未来 3 小时的降水量,按 15 分钟为间隔 |
lage_am_ort(ort) | 一次调用获取天气、临近预报和最近的水位站 |
pegel_in_der_naehe(ort, radius_km = 15) | 搜索半径范围内的水位站,按距离排序,最多 20 个 |
pegel_an_gewaesser(gewaesser) | 某条水道上的所有水位站 |
hochwasserlage(bundesland?) | 水流量达到较高水平的水位站,按级别分组 |
ort 可以是市镇名称(允许拼写错误;“St.”和“Sankt”视为相同),可选附加 "名称, 州",也可以是五位数的 GKZ 或坐标 "纬度, 经度"。如果名称有歧义,则返回候选列表,而非数据。
每个回答都是一个简洁的 JSON 对象。开头为 zusammenfassung 字段,末尾为 quellen 和 hinweise 字段。quellen 中的每项都包含来源、带许可证文本链接的许可证、规定的说明、链接、数据集、适用时的 DOI、数据时间,以及 Amtsblick 对数据处理方式的说明。
接入
共有四种方式。托管服务运行于 https://amtsblick.aicodelabs.dev;该软件包可在 NuGet.org 和 MCP Registry 中找到,标识符为 io.github.haraldrohan/amtsblick。
| 方式 | 适用对象 | 前提条件 | 状态 |
|---|---|---|---|
| 通过 URL 添加连接器 | claude.ai、Claude Desktop、Claude 移动版 | 无 | 可用 |
MCP Bundle(.mcpb) | Claude Desktop,本地运行 | 无需 .NET | 可用(预览版) |
通过 dnx 使用 NuGet 软件包 | Claude Code、VS Code、Visual Studio | .NET 10 SDK | 可用(预览版) |
| 从源代码运行 | 开发 | .NET 10 SDK | 可用 |
联系地址
User-Agent 为 Amtsblick/<version> (+<Repo-URL>; <Kontaktadresse>)。联系地址属于各实例的运营者,因此不会列在代码仓库中。本地运行 Amtsblick 的用户可通过环境变量 Amtsblick__Kontakt 设置该地址。
**未设置联系地址时,水文模块不会获取任何数据;**天气和地点搜索仍可正常使用。托管服务的联系地址由运营者设置。
claude.ai、Claude Desktop 和 Claude 移动版:通过 URL 添加连接器
依次选择“设置”→“连接器”→“添加自定义连接器”,并将 URL 设为
https://amtsblick.aicodelabs.dev/mcp。无需登录。
Claude Desktop 本地安装:MCP Bundle
从 GitHub Release 下载
amtsblick-<version>-<plattform>.mcpb 文件并双击。Claude
Desktop 会在安装时询问联系地址。无需安装 .NET。
平台:win-x64、osx-arm64(Apple Silicon)、osx-x64(Intel Mac)、linux-x64;每个约 45 MB。
首次启动时,Amtsblick 会一次性下载 Statistik Austria 的市镇边界数据(约 90 MB 下载量,占用 60 MB 磁盘空间,耗时一到两分钟)。在此之前,工具会提示市镇数据正在加载。之后,数据会存放在 %LOCALAPPDATA%\Amtsblick 或
~/.local/share/Amtsblick 下。
Claude Code
# gehosteter Server
claude mcp add --transport http amtsblick https://amtsblick.aicodelabs.dev/mcp
# lokal über NuGet
claude mcp add amtsblick --env [email protected] -- dnx [email protected] --yes
VS Code 和 Visual Studio
在 .vscode/mcp.json 或 .mcp.json 中:
{
"servers": {
"amtsblick": {
"type": "stdio",
"command": "dnx",
"args": ["[email protected]", "--yes"],
"env": { "Amtsblick__Kontakt": "[email protected]" }
}
}
}
对于托管服务,请改用 { "type": "http", "url": "https://amtsblick.aicodelabs.dev/mcp" }。
当前软件包版本请见 NuGet.org。
从源代码构建
前提条件:.NET 10 SDK。
dotnet build -c Release
dotnet test
服务在没有参数时通过 stdio 启动。要在 Claude Code 中使用,请在根目录下创建 .mcp.json 文件(该文件已从 Git 中排除,因为其中包含联系地址):
{
"mcpServers": {
"amtsblick": {
"type": "stdio",
"command": "dotnet",
"args": ["C:\Pfad\zu\Amtsblick\src\Amtsblick.Server\bin\Release\net10.0\Amtsblick.Server.dll"],
"env": { "Amtsblick__Kontakt": "[email protected]" }
}
}
}
对于 Claude Desktop,请将同一条配置放入 claude_desktop_config.json。只要有客户端加载了该服务,DLL 就会被锁定;在重新构建前,请关闭客户端,或从副本启动服务(dotnet publish -o <Ordner>)。
服务会在首次启动时自行下载市镇数据。也可以手动执行 scripts/import-gemeinden.sh(Windows:scripts\import-gemeinden.ps1);数据会存放在仓库的 data/ 下。
自行托管
# direkt
[email protected] dotnet run --project src/Amtsblick.Server -c Release -- --http
# als Container
docker build -t amtsblick .
docker run --rm -p 8080:8080 -e [email protected] amtsblick
MCP 端点为 /mcp(Streamable HTTP,无状态),状态信息位于 /health。
服务会在 / 提供简短的欢迎页,在 /datenschutz 提供隐私声明。
直接启动时,服务监听 http://localhost:5210;在容器中则监听端口 8080。
- **HTTPS:**由托管服务商或前置反向代理提供;服务本身仅使用 HTTP。
- **无需身份验证:**服务仅读取公开数据。为此,系统会按客户端 IP 限流(
Http:AnfragenProMinute,默认值为 60);超过限制时会返回 429。 - **Origin 检查:**仅接受来自
Http:ErlaubteUrspruenge(默认值为https://claude.ai、https://claude.com)和 localhost 的浏览器请求,否则返回 403。不带 Origin 标头的请求(服务器到服务器)不受限制。 - 主机名:
AllowedHosts应填写公开主机名,而不是*(防止 DNS 重绑定)。在反向代理后运行时,请启用Http:HinterProxy,以便限流使用X-Forwarded-For中的客户端 IP。 - **日志:**仅记录方法、路径、状态码和耗时。不记录 IP 地址、请求内容或地点。
- **预加载水位数据:**容器中已启用
Module:Wasser:Vorladen;数据集每小时获取一次,获取频率仍为每小时一次。 - **自有实例:**自行托管 Amtsblick 的用户即为该实例的运营者。请设置
Http:Betreiber,填写自己的信息,并在构建前用自己的隐私声明替换DATENSCHUTZ.md;仓库中的文件适用于项目所有者运营的实例。
配置
src/Amtsblick.Server/appsettings.json 中的 Amtsblick 节;每项设置也可以通过
环境变量设置(将 : 替换为 __)。
| 设置 | 默认值 | 含义 |
|---|---|---|
Kontakt | 空 | User-Agent 的联系地址;Wasser 模块必填 |
RepoUrl | https://github.com/haraldrohan/Amtsblick | User-Agent 中的项目 URL |
DatenVerzeichnis | 空 | 市镇数据和最新水位的存放位置;为空 = 仓库中的 data/,否则为用户本地应用数据文件夹中的 Amtsblick |
AutoImport | true | 启动时自动加载缺失的市镇数据 |
Module:Wetter:Aktiv | true | Wetter 模块及其 lage_am_ort |
Module:Wasser:Aktiv | true | Wasser 模块 |
Module:Wasser:Vorladen | false | 仅托管时:在后台每小时预加载水位 |
Http:AnfragenProMinute | 60 | HTTP 传输中按客户端 IP 限制的速率 |
Http:ErlaubteUrspruenge | https://claude.ai、https://claude.com | 接受其浏览器请求的来源 |
Http:HinterProxy | false | 从前置代理的 X-Forwarded-For 获取客户端 IP |
Http:Betreiber | 空 | 用于在首页公开显示的运营者姓名、地址和联系方式 |
启动时关闭的模块不会注册:其工具不会显示,也不会进行任何请求。Module:Wasser:Aktiv 还会立即生效:如果在程序文件旁的 appsettings.json 中将该值设为 false,运行期间就会停止所有后续 eHYD 请求,无需重启。
数据来源与许可证声明
仅接入以下获准的数据来源。它们均采用 CC BY 4.0 许可,因此在注明来源的前提下也可自由用于商业用途。数据仍受来源许可约束(参见 NOTICE);代码采用 MIT 许可。
| 来源 | 数据集 | 声明(须逐字采用) | 依据 |
|---|---|---|---|
| Statistik Austria | OGDEXT_GEM_1、OGDEXT_POLBEZ_1 | 数据来源:Statistik Austria — data.statistik.gv.at | 使用条款 |
| GeoSphere Austria | nwp-v2-1h-1km(DOI)、nowcast-v1-15min-1km(DOI) | 数据来源:GeoSphere Austria - https://data.hub.geosphere.at | 使用条款,各数据集的许可证 |
| eHYD(权利人:BMLUK 和各联邦州) | i000501:pegel_aktuell | 数据来源:ehyd.gv.at | INSPIRE 元数据 |
每条回答都会以两种方式履行 CC BY 4.0 的义务:摘要末尾会附上声明、许可证文本链接,以及数据经过换算和汇总或整理的补充说明;quellen 字段中则会详细说明:按要求逐字注明来源、附上许可证文本链接和来源链接,并说明 Amtsblick 做了哪些更改:
- Statistik Austria:根据边界计算市镇中心点,统一区名的拼写,并补充维也纳整体数据。
- GeoSphere Austria:换算单位;此外,针对预测数据,根据 u/v 计算风速,并将数值汇总为时间段和每日数值。
- eHYD:将状态码转换为位置、趋势和时效性信息,补充市镇和距离,并按地点、水体或水位筛选。
转发或发布回答的人须承担提供这些信息的责任。为此,每条 Wetter 回答都会注明“非官方恶劣天气警报。”,每条 Pegel 回答都会注明“非官方警报。请以各州的警报服务为准。”
限制与请求模式
GeoSphere Austria(Wetter)
- Dataset API 的限制:每秒 5 次、每小时 240 次,由整个实例共享;超出后,API 会返回 429。
- Amtsblick 每秒最多发出 4 次请求,并读取
x-ratelimit-remaining-hour和x-ratelimit-remaining-second。可通过quellen()查询当前状态。 - 剩余请求少于 20 次时,只会从缓存中返回结果;响应中会说明这一点。
- 缓存键由数据集和坐标组成,坐标四舍五入至 0.01°;如果使用地名,则采用市镇中心点。预报有效期为 3 小时,或直到元数据报告有更新的运行结果;Nowcast 有效期为 15 分钟。对同一点的并发请求会共享一次数据获取。
- 每个数据集的元数据(
last_forecast_reftime)最多每 15 分钟检查一次。如果 Nowcast 运行结果已超过一小时,niederschlag_jetzt会提示“Nowcast 当前不是最新的”,并改用小时预报。 - 获取失败后,同一点在一分钟内不会再次发起请求。
- 如果 GeoSphere 响应缓慢,工具调用最多等待 8 秒获取数据(等待元数据最多 3 秒),然后用已有数据作答——例如,
niederschlag_jetzt会使用预报中的小时值。数据获取会在后台继续完成,并填充缓存以供下次查询使用;不会为此发起第二次获取。 - 获取的参数:预报
2t, tp, rain, sf, snowlmt, 10u, 10v, 10fg, tcc, sund;Nowcastrr, pt, t2m, ff, fx。单位转换包括 kg/m² → mm(1:1)、m/s → km/h、10u/10v→ 速度和方向、秒 → 分钟。天气符号sy不会输出;降水类型pt仅以原始值提供,因为 GeoSphere 未发布官方代码表。
eHYD (Pegel)
gis.lfrz.gv.at 的 robots.txt 内容为 User-agent: * / Disallow: /。它规范的是对网站的抓取;API 的使用则受此服务公布的许可(CC BY 4.0)约束。Amtsblick 不会抓取网站,而是恰好调用作为开放数据服务公布的端点,并谨慎地遵循以下规则:
- 每 60 分钟最多获取一次完整数据集。 托管版的所有用户共用这次获取。最新数据和上次尝试的时间存储在
data/pegel_aktuell.json中,因此即使重启也会遵守间隔限制——这对 stdio 尤为重要,因为客户端每次启动程序时都会重启服务。使用独立数据目录的多个安装分别计数。 - 首次调用工具时会触发获取,之后 60 分钟内只读取缓存。并发调用会等待同一次获取完成。
- 未调用工具时不会进行获取,即使实例正在运行也一样。后台计时器(
Module:Wasser:Vorladen)用于托管运行,默认关闭。 - 即使尝试失败,也计为当小时的一次获取;不会重试。下一次尝试之前会返回上次的数据,并标记为
veraltet: true。 - 只访问三个固定地址:
/collections(调用一次以获取 Collection ID,之后会将其保存)、/collections/{id}/items,以及仅在 OGC API 不可用时访问 WFS 图层i000501:pegel_aktuell。不会跟踪响应中的链接。如果主机返回 403 或 429,则不会改用第二种方式重试。 - 每个请求都会附带包含联系地址的 User-Agent;未提供联系地址时不会进行获取。
- 可通过配置立即关闭此模块(见上文)。
每个 Pegel 响应都会注明上次获取数据的时间;这些数据可能比水文服务的数据晚最多一小时。水位状态(低水位/中水位、流量增大、洪水等级 1–3)、趋势和数据时效性均取自来源中的 gesamtcode。Amtsblick 不会自行计算预警等级;未记录的代码会显示为“未知”。
两项服务的预先检查记录见 docs/vorab-pruefung.md。
Statistik Austria(市镇)
仅由导入脚本获取,运行期间不会获取。地理数据将维也纳列为 23 个市辖区;Amtsblick 会补充“维也纳”(GKZ 90001),以内城区中心点作为位置,方便用户查找整座城市。
数据保护(隐私政策)
Amtsblick 不会存储请求或用户数据,也不会发送遥测信息。内存中仅保存来源最近获取的数据,磁盘上仅保存市镇数据和最新 Pegel 数据。发送给数据源的只有坐标(四舍五入到 0.01°)或完整数据集获取请求。托管服务器只记录方法、路径、状态码和耗时,不记录 IP 地址。完整说明见 DATENSCHUTZ.md,提供德语和英语版本;托管服务器通过 /datenschutz 提供该说明。
架构
src/Amtsblick.Core Ortsmodell, Quellenvermerk, Cache, HTTP-Basis, Kontingent, Kern-Tools
src/Amtsblick.Modules.Wetter GeoSphere-Adapter und Tools
src/Amtsblick.Modules.Wasser eHYD-Adapter und Tools
src/Amtsblick.Server MCP-Host (stdio und Streamable HTTP), lage_am_ort, Import, NuGet-Paket
tests/ Tests je Projekt; Fixtures sind gespeicherte Antworten der echten Dienste
scripts/ Import der Referenzdaten, Bau der Programmdateien und MCP Bundles
packaging/ Manifest für das MCP Bundle
docs/ Prüfprotokoll, Stand der Auslieferung
infra/ Einrichtung und Beschreibung des Hostings in Azure
data/ importierte Referenzdaten (nicht eingecheckt)
所有测试均可在完全离线的情况下运行。
许可证
贡献指南:CONTRIBUTING.md。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。