mcpField
S
Swiss Grounding

Swiss Grounding

远程服务
github.com法律与政务05 周前更新

关于 Swiss Grounding

Swiss Grounding 是一款 MCP 服务,让助手依据瑞士联邦、州及市镇官方信息回答问题。它提供公共服务、法律、交通等领域的工具,回答附带来源,并支持五种语言。

主要功能

  1. 01引用官方机构来源作答
  2. 02覆盖联邦、州和市镇信息
  3. 03搜索并实时读取页面
  4. 04法律、交通及公共服务工具
  5. 05支持五种语言

适用场景

  1. 01查询瑞士办事流程、规则和费用
  2. 02查找现行联邦法律或公共交通信息
  3. 03查询当地假期、保费或垃圾收集日期
  4. 04依据主管机构信息获取答案

MCP 相关

提供 13 个只读工具,包括官方信息搜索、页面读取和专题查询。MCP 客户端可通过 stdio 或 Streamable HTTP 连接。

配置

远程服务无需本地安装。选择你使用的客户端,复制配置或使用一键安装。

服务地址https://swiss-grounding-mcp-542630986415.europe-west6.run.app/mcp
一键复制安装命令
Claude CodeTerminal
Cursor.cursor/mcp.json
VS Code.vscode/mcp.json
Claude Desktopclaude_desktop_config.json
Windsurf~/.codeium/windsurf/mcp_config.json

命令在终端中运行;JSON 粘贴到对应客户端的 MCP 配置后重启。需要授权的服务会在首次连接时提示登录。

安装包
ocighcr.io/gastaan/swiss-grounding-mcp:0.1.1

工具

详细介绍

README 配图

Swiss Grounding MCP

关于瑞士的问题,答案附有来源。

一个 MCP 服务,让 AI 助手基于瑞士联邦、州和市镇的官方信息作答,
支持德语、法语、意大利语、罗曼什语和英语,并在每个回答中注明相关主管机构。

Live on Google Cloud Run Hosted endpoint check CI MCP Registry Docker image

立即体验

打开线上服务的二维码
扫码即可在手机上打开

运行于苏黎世的 Google Cloud Run(europe-west6),由 main 部署。
公开且只读:无需注册,无需 API 密钥。

线上服务: swiss-grounding-mcp-542630986415.europe-west6.run.app
MCP 端点(Streamable HTTP):
https://swiss-grounding-mcp-542630986415.europe-west6.run.app/mcp
运行状况: /health

只需一行即可将其添加到助手中,例如 Claude Code(其他客户端):

claude mcp add --transport http swiss https://swiss-grounding-mcp-542630986415.europe-west6.run.app/mcp

空闲时会缩至零,因此暂停后收到的第一个请求会启动一个实例(约需 2 秒;混合搜索约 10 秒后启动,此期间会提供关键词搜索答案)。服务按客户端限流,拒绝浏览器来源,并且每 6 小时检查一次。托管实例运行的是本仓库中的代码,该代码也可在本地运行。

工作原理

架构:AI 助手向 Swiss Grounding MCP 发送一次工具调用,后者从 13 个只读工具中选择一个,解析地点,礼貌地获取官方联邦、州和市镇数据,并返回一条带引用的答案

向通用助手询问瑞士相关问题,它可能会回答错误州份的信息、过时网页上的信息,或邻国的信息。Swiss Grounding MCP 为它提供主管机构自己的数据:

  1. 一次工具调用。 助手选择 13 个只读工具之一。地点名称可以使用人们惯用的写法: Genf, Ginevra, Genève、Schuls → Scuol、8003、Bahnhofstrasse 1, Zürich。
  2. 正确的主管机构。 答案来自负责的层级(联邦机构、州或市镇),通过包含 10,630 个官方页面的预建索引(关键词 + 多语言语义搜索)、实时联邦 API 和市镇开放数据获取。
  3. 礼貌且可靠。 默认遵守 robots.txt 和使用条款,控制请求频率并缓存数据;如果数据源不可用,则提供注明日期的副本,或指出该数据源。
  4. 一条带引用的答案。 每个工具都返回相同的约定,其中包含原文摘录和五种状态之一,告知助手应如何处理:
okneeds_contextnot_coverednot_foundsource_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/1711/1134 个链接中有 94%
网页搜索,不使用服务端11/177/1167 个链接中有 72%
仅依靠模型知识6/173/1128 个回答中有 1 个链接

使用此服务端时,回答所需的调用次数和时间也只有网页搜索的一半(每个问题 1.2 次对 2.4 次调用,14 秒对 28 秒)。网页搜索通常能找到正确数值,但也会混入比价网站、新闻和旅游页面,并对官方数据进行取整;不使用任何工具时,模型大多会拒绝回答,或依据过时知识作答。

**不同评测设置的结果:**2 个 MCP 客户端 × 2 个大模型,测试 5 个已发布的示例问题和我们自拟的 11 个问题(德语/法语/意大利语/罗曼什语/英语,包括追问、超出范围和未涵盖的案例),测试日期为 2026-09-25:

客户端 + 大模型已发布的示例全部 16 个问题平均工具调用次数
Claude Code + Sonnet5/515/161.0
Claude Code + Haiku5/513/160.9
OpenCode + gpt-5.4-mini5/515/161.4
OpenCode + gpt-4.1-mini5/514/161.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_ROBOTStrue遵守每个被抓取网站的 robots.txt(RFC 9309),并在每次重定向时检查。设为 false 可禁用。
SGM_RESPECT_TERMStrue遵守 data/source_terms.json 中记录的使用条款:对于不允许自动访问的主机,绝不进行抓取。设为 false 可禁用。

缓存、超时、离线模式、Bearer 令牌、速率限制、允许的来源和日志记录请参阅 docs/configuration.md。

文档

  • 响应约定与工具:每个工具返回的 JSON、五种状态、地点处理方式以及全部 13 个工具
  • 配置与运维:所有设置、HTTP 安全性、缓存与数据源使用规范、监控以及托管实例
  • 搜索:关键词和语义排序及其测得的质量
  • 评估:挑战自检、端到端运行以及所有已知的遗漏
  • 开发:架构、数据及其每周更新、添加数据源和测试

为 Swiss AI Weeks 2026 苏黎世举办的 Swisscom myAI 挑战赛 Swiss Grounding MCP 打造。

评论

支持 Markdown

第一次接触 MCP?

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

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