关于 Swiss Grounding
Swiss Grounding 是一款 MCP 服务,让助手依据瑞士联邦、州及市镇官方信息回答问题。它提供公共服务、法律、交通等领域的工具,回答附带来源,并支持五种语言。
主要功能
- 01引用官方机构来源作答
- 02覆盖联邦、州和市镇信息
- 03搜索并实时读取页面
- 04法律、交通及公共服务工具
- 05支持五种语言
适用场景
- 01查询瑞士办事流程、规则和费用
- 02查找现行联邦法律或公共交通信息
- 03查询当地假期、保费或垃圾收集日期
- 04依据主管机构信息获取答案
MCP 相关
提供 13 个只读工具,包括官方信息搜索、页面读取和专题查询。MCP 客户端可通过 stdio 或 Streamable HTTP 连接。
配置
远程服务无需本地安装。选择你使用的客户端,复制配置或使用一键安装。
https://swiss-grounding-mcp-542630986415.europe-west6.run.app/mcpclaude mcp add --transport http soheil1lotfi-swiss-grounding https://swiss-grounding-mcp-542630986415.europe-west6.run.app/mcp{"mcpServers":{"soheil1lotfi-swiss-grounding":{"type":"http","url":"https://swiss-grounding-mcp-542630986415.europe-west6.run.app/mcp"}}}在 Cursor 中打开{"servers":{"soheil1lotfi-swiss-grounding":{"type":"http","url":"https://swiss-grounding-mcp-542630986415.europe-west6.run.app/mcp"}}}在 VS Code 中打开{"mcpServers":{"soheil1lotfi-swiss-grounding":{"type":"http","url":"https://swiss-grounding-mcp-542630986415.europe-west6.run.app/mcp"}}}{"mcpServers":{"soheil1lotfi-swiss-grounding":{"serverUrl":"https://swiss-grounding-mcp-542630986415.europe-west6.run.app/mcp"}}}命令在终端中运行;JSON 粘贴到对应客户端的 MCP 配置后重启。需要授权的服务会在首次连接时提示登录。
ghcr.io/gastaan/swiss-grounding-mcp:0.1.1stdio工具
详细介绍
Swiss Grounding MCP
关于瑞士的问题,答案附有来源。
一个 MCP 服务,让 AI 助手基于瑞士联邦、州和市镇的官方信息作答,
支持德语、法语、意大利语、罗曼什语和英语,并在每个回答中注明相关主管机构。
立即体验
|
扫码即可在手机上打开 |
运行于苏黎世的 Google Cloud Run( 线上服务: swiss-grounding-mcp-542630986415.europe-west6.run.app |
只需一行即可将其添加到助手中,例如 Claude Code(其他客户端):
claude mcp add --transport http swiss https://swiss-grounding-mcp-542630986415.europe-west6.run.app/mcp
空闲时会缩至零,因此暂停后收到的第一个请求会启动一个实例(约需 2 秒;混合搜索约 10 秒后启动,此期间会提供关键词搜索答案)。服务按客户端限流,拒绝浏览器来源,并且每 6 小时检查一次。托管实例运行的是本仓库中的代码,该代码也可在本地运行。
工作原理
向通用助手询问瑞士相关问题,它可能会回答错误州份的信息、过时网页上的信息,或邻国的信息。Swiss Grounding MCP 为它提供主管机构自己的数据:
- 一次工具调用。 助手选择 13 个只读工具之一。地点名称可以使用人们惯用的写法: Genf, Ginevra, Genève、Schuls → Scuol、8003、Bahnhofstrasse 1, Zürich。
- 正确的主管机构。 答案来自负责的层级(联邦机构、州或市镇),通过包含 10,630 个官方页面的预建索引(关键词 + 多语言语义搜索)、实时联邦 API 和市镇开放数据获取。
- 礼貌且可靠。 默认遵守 robots.txt 和使用条款,控制请求频率并缓存数据;如果数据源不可用,则提供注明日期的副本,或指出该数据源。
- 一条带引用的答案。 每个工具都返回相同的约定,其中包含原文摘录和五种状态之一,告知助手应如何处理:
ok | needs_context | not_covered | not_found | source_error |
|---|---|---|---|---|
| 提供答案及来源 | 反问一个明确的问题 | 说明问题不属于瑞士范围或服务范围 | 说明没有找到结果,绝不猜测 | 指出不可用的数据源 |
覆盖范围
声明的范围:服务会回答什么问题、涉及哪个区域、依据哪个权威来源。助手也可以使用 swiss_coverage 工具读取此信息。
| 主题和工具 | 地理范围 | 来源(权威机构) | 数据时效性 |
|---|---|---|---|
办事流程、规定、费用、期限 — 许可证和移民、搬迁和登记、税务、社会保险(AHV/IV)、失业、驾驶执照和车辆、海关和包裹、学校、住房、投票、民事状态……search_official_info read_official_page | 联邦(ch.ch 提供德语、法语、意大利语、罗曼什语和英语内容,联邦办公室、AHV/IV、arbeit.swiss),23 个州的门户网站(见下方限制),以及卢塞恩、卢加诺、温特图尔、比尔/比ienne、圣加仑、伯尔尼、日内瓦、洛桑和图恩的城市网页 | 10,630 个官方网页 / 46,952 段内容的全文索引,以及对任意官方网页的实时读取 | 索引构建于 2026-09-25,每周刷新;read_official_page 获取实时文本 |
联邦法律 — 任意法律及条款的当前合并版本swiss_federal_law | 联邦 | Fedlex(联邦总理府) | 实时;当前生效版本 |
强制医疗保险保费 — 按市镇、年龄、自付额和保险模式提供最便宜的报价health_insurance_premiums | 全部 2,110 个市镇(保费区域) | FOPH 保费开放数据(与 priminfo.admin.ch 使用相同数据) | 2026 年保费;FOPH 于 9 月底发布 2027 年保费后添加 |
学校和公共假日swiss_holidays | 全部 26 个州;在有公布数据的地方提供市镇级信息(例如 Scuol、Zürich) | OpenHolidays(汇总的官方列表)、EDK 列表、市镇网站 | 2025–2027 |
垃圾收集日期waste_collection | 苏黎世市(按邮政编码)、巴塞尔/Riehen/Bettingen(按地址)、圣加仑(按街道);按收集区域:温特图尔、乌斯特、韦齐孔、迪本多夫、霍尔根、韦德斯维尔、阿德利斯维尔、塔尔维尔及另外 12 个地区 | 市镇开放数据(通过 OpenERZ 提供的 ERZ Zürich、data.bs.ch、daten.stadt.sg.ch) | 实时,未来 120 天 |
公共交通 — 路线和出发时刻表public_transport | 全瑞士 | 官方时刻表(通过 transport.opendata.ch 提供的 opentransportdata.swiss) | 实时 |
联邦全民投票 — 即将表决的议题、结果(全国及州级)federal_votes | 联邦 | FSO 投票日开放数据、联邦总理府 | 实时 |
抵押贷款参考利率(租金)和 SNB 汇率swiss_rates | 联邦 | BWO;Swiss National Bank | 实时(缓存 6 小时) |
公司注册信息 — UID、法定住所、商业登记和增值税状态company_register | 全瑞士 | 联邦 UID 登记册(FSO) | 实时 |
地点信息 — 市镇、州、BFS 编号、邮政编码、人口、官方网站swiss_place_info | 全部 2,110 个市镇、26 个州 | BFS 登记册和 STATPOP、swisstopo、Wikidata(网站) | 人口数据为 2025 年;登记册更新于 2026-09-25 |
当前天气测量数据current_weather | 最近的 MeteoSwiss 自动气象站 | MeteoSwiss 开放数据 | 实时(10 分钟间隔数据) |
未涵盖的内容和已知限制
- 瑞士以外的任何内容,例如康斯坦茨的德国 Rundfunkbeitrag:服务端会说明这一点。
- GR、BL 和 SH 州会屏蔽自动化客户端,或不向其提供文本,因此这些州的州级页面未纳入索引(ch.ch 和联邦页面仍可用;
read_official_page会如实报告屏蔽情况)。VS(7 个页面)、TI(45 个)和 TG(52 个)仅部分纳入索引。 - 市政网站页面已为上述九座城市建立索引(每座 120–250 个页面;洛桑 66 个,图恩 32 个)。苏黎世仅有少数页面,贝林佐纳和弗里堡尚无页面(下次刷新时会抓取弗里堡自己的域名 ville-fribourg.ch)。对于其他市镇,服务端会返回官方网站,并可实时读取指定页面。
- 垃圾回收日历仅在市镇发布开放数据时提供;其他情况下,服务端会说明这一点并链接到市镇网站。节假日、保费和地点信息涵盖所有市镇。
- 州法律文本、个人税务计算和天气预报不在提供范围内。
- 学校假期数据来自汇总官方列表的 OpenHolidays。如果索引中有主管机构自己的日历(例如 ge.ch、bern.ch 和 Scuol 学校),则会优先引用该页面,并同时列出 EDK 列表和市镇网站链接。如果某个州发布了多种学校类型的假期安排,则会标注学校类型(伯尔尼州:德语区和法语区学校)。
- 抵达后在洛桑登记的相关信息较为薄弱:该市居民办公室的页面未纳入索引。
- **跨语言问题:**如果提问所用语言与地点页面的语言不同,系统会先返回语言提示,而不是页面;助手必须重新搜索。在此类问题的端到端测试中(用法语询问伯尔尼),Sonnet 遵循提示并根据伯尔尼页面作答;Haiku 在 4 次测试中有 1 次这样做。
- 默认情况下,搜索基于关键词。启用可选的
semantic扩展后,搜索会采用混合模式,也能找到措辞不同或使用其他语言编写的页面,但仍会漏掉一些页面(测量结果);嵌入模型不支持罗曼什语。
结果
**使用和不使用此服务端的对比。**将同样的 28 个问题(已发布的 5 个示例、我们自拟的 12 个问题,以及组织方提供的 11 个练习案例)以三种仅工具不同的方式提交给使用 Sonnet 的 Claude Code:
| 模式 | 17 个问题 | 练习案例 | 指向瑞士官方机构的链接 |
|---|---|---|---|
| 使用此服务端 | 16/17 | 11/11 | 34 个链接中有 94% |
| 网页搜索,不使用服务端 | 11/17 | 7/11 | 67 个链接中有 72% |
| 仅依靠模型知识 | 6/17 | 3/11 | 28 个回答中有 1 个链接 |
使用此服务端时,回答所需的调用次数和时间也只有网页搜索的一半(每个问题 1.2 次对 2.4 次调用,14 秒对 28 秒)。网页搜索通常能找到正确数值,但也会混入比价网站、新闻和旅游页面,并对官方数据进行取整;不使用任何工具时,模型大多会拒绝回答,或依据过时知识作答。
**不同评测设置的结果:**2 个 MCP 客户端 × 2 个大模型,测试 5 个已发布的示例问题和我们自拟的 11 个问题(德语/法语/意大利语/罗曼什语/英语,包括追问、超出范围和未涵盖的案例),测试日期为 2026-09-25:
| 客户端 + 大模型 | 已发布的示例 | 全部 16 个问题 | 平均工具调用次数 |
|---|---|---|---|
| Claude Code + Sonnet | 5/5 | 15/16 | 1.0 |
| Claude Code + Haiku | 5/5 | 13/16 | 0.9 |
| OpenCode + gpt-5.4-mini | 5/5 | 15/16 | 1.4 |
| OpenCode + gpt-4.1-mini | 5/5 | 14/16 | 1.0 |
在组织方的练习题集中:Sonnet 为 11/11,Haiku 为 10/11。对于 38 个带标签的问题,混合搜索有 25 个能找到相关官方页面(仅关键词搜索时为 19 个);对于没有相关页面的 5 个问题,则不会误报其他页面。所有未命中案例均列于 docs/evaluation.md。
自行运行
需要 uv(它会安装 Python 3.13)。任何数据源都不需要 API 密钥或凭据。
git clone https://github.com/Gastaan/swiss-grounding-mcp && cd swiss-grounding-mcp
uv sync --extra semantic # dependencies, with hybrid search
uv run --extra semantic swiss-grounding-mcp # stdio (for local MCP clients)
uv run --extra semantic swiss-grounding-mcp --transport http --port 8000 # HTTP: http://localhost:8000/mcp
curl localhost:8000/health # "search": "hybrid (…)"
预构建的数据(市镇名录、医疗保险费、搜索索引、段落向量)已包含在仓库中,由 scripts/ 中的脚本构建并每周更新(了解详情)。首次启动时会解压索引(约 1 秒),并在后台下载小型嵌入模型(约 240 MB,一次性下载;模型就绪前,搜索会使用关键词)。如需更轻量的安装且不使用混合搜索,可从命令和客户端配置中移除 --extra semantic(了解变更内容)。
**Docker:**已发布的镜像(约 1.4 GB,包含混合搜索及其模型)以非特权用户身份运行,且运行时不会下载任何内容。
docker run -p 8000:8000 ghcr.io/gastaan/swiss-grounding-mcp # HTTP: http://localhost:8000/mcp
docker run -i --rm ghcr.io/gastaan/swiss-grounding-mcp --transport stdio # for a client that starts the server
或者,使用 docker build -t swiss-grounding-mcp . 构建。如果端口可从受信任网络之外访问,请添加 -e SGM_AUTH_TOKEN=<secret>(HTTP 安全性)。无需克隆(关键词搜索):uvx --from git+https://github.com/Gastaan/swiss-grounding-mcp swiss-grounding-mcp。
连接 MCP 客户端
任何支持通过 stdio 或 Streamable HTTP 使用 MCP 的客户端都可以使用。已使用 Claude Code、OpenCode、MCP Inspector CLI 和 FastMCP 客户端进行测试,包括旧版 initialize 握手(协议 2025-06-18)和无状态的 2026-07-28 协议。对于托管服务,请将其 /mcp URL 添加为远程(HTTP)服务。对于克隆的仓库,请使用绝对路径,并替换 /path/to/swiss-grounding-mcp。服务会向客户端发送用法 instructions。
Claude Code
claude mcp add swiss -- uv run --extra semantic --directory /path/to/swiss-grounding-mcp swiss-grounding-mcp
claude mcp add --transport http swiss-http http://localhost:8000/mcp
OpenCode · opencode.json
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"swiss": {"type": "local", "command": ["uv", "run", "--extra", "semantic", "--directory", "/path/to/swiss-grounding-mcp", "swiss-grounding-mcp"], "enabled": true, "timeout": 30000},
"swiss-http": {"type": "remote", "url": "http://localhost:8000/mcp", "enabled": false, "timeout": 30000}
}
}
Claude Desktop · claude_desktop_config.json
填写 uv 的完整路径(例如通过 which uv 获取):
{"mcpServers": {"swiss": {"command": "/full/path/to/uv", "args": ["run", "--extra", "semantic", "--directory", "/path/to/swiss-grounding-mcp", "swiss-grounding-mcp"]}}}
VS Code · .vscode/mcp.json
{"servers": {"swiss": {"type": "stdio", "command": "uv", "args": ["run", "--extra", "semantic", "--directory", "/path/to/swiss-grounding-mcp", "swiss-grounding-mcp"]}}}
Cursor · .cursor/mcp.json
{"mcpServers": {"swiss": {"command": "uv", "args": ["run", "--extra", "semantic", "--directory", "/path/to/swiss-grounding-mcp", "swiss-grounding-mcp"]}}}
提示
将客户端的请求超时设为 30 秒或更长。OpenCode 默认只等待 5 秒,而官方数据源响应较慢时可能需要更久;服务会在
SGM_TOOL_TIMEOUT(30 秒)内结束每次工具调用,并返回清晰的source_error,因此将客户端超时设为 30 秒即可收到该响应。
配置
无需配置。默认启用对 robots.txt 和使用条款的遵守,也可以将其关闭:
| 变量 | 默认值 | 含义 |
|---|---|---|
SGM_RESPECT_ROBOTS | true | 遵守每个被抓取网站的 robots.txt(RFC 9309),并在每次重定向时检查。设为 false 可禁用。 |
SGM_RESPECT_TERMS | true | 遵守 data/source_terms.json 中记录的使用条款:对于不允许自动访问的主机,绝不进行抓取。设为 false 可禁用。 |
缓存、超时、离线模式、Bearer 令牌、速率限制、允许的来源和日志记录请参阅 docs/configuration.md。
文档
- 响应约定与工具:每个工具返回的 JSON、五种状态、地点处理方式以及全部 13 个工具
- 配置与运维:所有设置、HTTP 安全性、缓存与数据源使用规范、监控以及托管实例
- 搜索:关键词和语义排序及其测得的质量
- 评估:挑战自检、端到端运行以及所有已知的遗漏
- 开发:架构、数据及其每周更新、添加数据源和测试
为 Swiss AI Weeks 2026 苏黎世举办的 Swisscom myAI 挑战赛 Swiss Grounding MCP 打造。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。