关于 fedlex-mcp
fedlex-mcp 是面向 AI 助手的 MCP 服务,可查询瑞士联邦法律、公开咨询和官方术语。它结合了法律检索、咨询期限跟踪及多语言术语查询。
主要功能
- 01搜索联邦法律、出版物、条约和公报
- 02跟踪咨询期限及详情
- 03查询 TERMDAT 术语和定义
- 04分别查询 Fedlex 与 LINDAS SPARQL 端点
- 05支持 stdio 和 Streamable HTTP 传输
适用场景
- 01按主题或 SR 编号查找法律
- 02查看开放咨询及其截止日期
- 03查询法律沿革或即将生效的变更
- 04查找其他语言的官方术语对应词
MCP 相关
向 MCP 客户端提供联邦法律、咨询和 TERMDAT 的 12 个工具及 2 个资源。支持 stdio 和 Streamable HTTP 传输。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
:switzerland: 属于 瑞士公共数据 MCP 项目组合
:balance_scale: fedlex-mcp
瑞士联邦法律、意见征询和官方术语的 MCP 服务——通过 Claude Desktop 或 Claude.ai 搜索 SR、监控意见征询截止日期,并跨国家语言翻译术语
概述
fedlex-mcp 将 AI 助手(Claude)连接到三个瑞士官方 SPARQL 数据源:
- 联邦法律:通过 Fedlex SPARQL 端点获取——《系统汇编》(SR)、《官方汇编》(AS)、《联邦公报》(BBl)和条约。
- 意见征询(Vernehmlassungen):通过同一个 Fedlex 端点(
jolux:Consultation)获取——这是议会审议前的阶段,任何人都可以对草案发表评论。 - TERMDAT:联邦总理府的术语数据库,通过 LINDAS SPARQL 端点获取——提供德语、法语、意大利语、罗曼什语和英语的官方术语对应表达。
这三者都基于 SPARQL,这正是它们共用一个服务而非分成三个的原因:无需引入新的技术栈,只需针对熟悉的模式编写新查询。
**比喻:**联邦法律的 USB-C。Fedlex 告诉你需要回应什么。TERMDAT 告诉你它在其他国家语言中叫什么。
功能
- :balance_scale: 12 个工具、2 个资源,涵盖联邦法律、意见征询和术语
- :mag: 由 SPARQL 提供支持——两个相互隔离的端点(Fedlex + LINDAS),不会相互影响故障
- :globe_with_meridians: 5 种语言——德语、法语、意大利语、罗曼什语,以及用于术语的英语
- :unlock: 无需 API 密钥——所有数据均采用开放再利用许可
- :cloud: 双传输方式——stdio(Claude Desktop)+ Streamable HTTP(云端)
锚点演示查询
“目前有哪些与教育相关的意见征询正在进行,截止日期是什么时候,哪个部门负责——回复时需要用到的关键法语和意大利语术语有哪些?”
一次对话即可通过两个端点串联调用三个工具:
fedlex_get_open_consultations(topic="education")
→ fedlex_get_consultation(event_id="proj/2026/71/cons_1")
→ termdat_lookup_term(term="Volksschule", target_languages=["fr","it"])
每项正在进行的意见征询都包含 deadline、days_remaining(在请求时按照 Europe/Zurich 时区计算,0 表示截止日期就是今天),以及一个推导得出的 status——已过期的意见征询不会显示为正在进行。Fedlex 告诉你需要回应什么以及何时回应;TERMDAT 告诉你其他国家语言中如何称呼它。
使用
topic="education",不要使用keyword="Volksschule"。 Fedlex 意见征询没有主题分类——筛选是对标题进行自由文本匹配,而“Volksschule”这个词在任何意见征询标题中都没有出现。topic筛选器会扩展为一组公开说明的关键词(Bildung、Schule、Berufsbildung、Hochschule、……),并准确报告搜索了哪些词。
前提条件
- Python 3.11+
- uv(推荐)或 pip
安装
通过 uv 的 uvx 运行——无需克隆或手动安装。将其添加到 MCP 客户端配置中(Claude Desktop、Cursor 和 Windsurf 使用 mcpServers;VS Code 则在 .vscode/mcp.json 中使用顶层 servers 键):
{
"mcpServers": {
"fedlex-mcp": {
"command": "uvx",
"args": [
"fedlex-mcp"
]
}
}
}
从源代码安装
# Clone the repository
git clone https://github.com/malkreide/fedlex-mcp.git
cd fedlex-mcp
# Install
pip install -e .
# or with uv:
uv pip install -e .
也可以使用 uvx(无需永久安装):
uvx fedlex-mcp
快速入门
# stdio (for Claude Desktop)
python -m fedlex_mcp.server
# Streamable HTTP (port 8000)
python -m fedlex_mcp.server --http --port 8000
立即在 Claude Desktop 中试用:
“显示所有现行的职业培训联邦法律” “《数据保护法》规定了什么?它仍然有效吗?” “目前有哪些教育相关的咨询正在开放,截止日期是什么时候?” “官方术语中,‘Volksschule’ 的法语和意大利语名称是什么?”
配置
Claude Desktop
编辑 ~/Library/Application Support/Claude/claude_desktop_config.json(macOS)或 %APPDATA%\Claude\claude_desktop_config.json(Windows):
{
"mcpServers": {
"fedlex": {
"command": "python",
"args": ["-m", "fedlex_mcp.server"]
}
}
}
或使用 uvx:
{
"mcpServers": {
"fedlex": {
"command": "uvx",
"args": ["fedlex-mcp"]
}
}
}
配置文件位置:
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Windows:
%APPDATA%\Claude\claude_desktop_config.json
云端部署(用于浏览器访问的 SSE)
通过浏览器中的 claude.ai 使用(例如,在没有本地软件的受管工作站上):
Render.com(推荐):
- 将仓库推送到 GitHub,或在 GitHub 上复刻该仓库
- 在 render.com 上:新建 Web 服务 -> 连接 GitHub 仓库
- 设置启动命令:
python -m fedlex_mcp.server --http --port 8000 - 在 claude.ai 的 Settings -> MCP Servers 中,添加:
https://your-app.onrender.com/sse
“开发者笔记本电脑使用 stdio,浏览器使用 SSE。”
演示
可用工具
| # | 工具 | 来源 | 描述 |
|---|---|---|---|
| 1 | fedlex_search_laws | Fedlex | 按标题关键词搜索《系统汇编》(SR) |
| 2 | fedlex_get_law_by_sr | Fedlex | 按 SR 编号获取法律(例如,235.1 =《数据保护法》) |
| 3 | fedlex_get_recent_publications | Fedlex | 《官方汇编》(AS)的最新出版物 |
| 4 | fedlex_get_upcoming_changes | Fedlex | 即将生效的法律(法律监测) |
| 5 | fedlex_search_gazette | Fedlex | 搜索《联邦公报》(BBl) |
| 6 | fedlex_get_law_history | Fedlex | 法律的所有版本(版本历史) |
| 7 | fedlex_search_treaties | Fedlex | 国际条约(SR 编号以 0. 开头) |
| 8 | fedlex_get_open_consultations | Fedlex | 截止日期监测 — 正在开放的咨询(eventEndDate >= today,Europe/Zurich);每项包含 days_remaining 和推导出的 status,按截止日期由近到远排序;可选 topic/keyword |
| 9 | fedlex_search_consultations | Fedlex | 对咨询标题/描述进行全文搜索,并支持筛选条件(主题、状态、截止日期范围、办公室) |
| 10 | fedlex_get_consultation | Fedlex | 获取单个 eventId 的详情:截止日期、days_remaining、办公室、推导出的状态、文档 |
| 11 | termdat_lookup_term | LINDAS | 术语 → de/fr/it/rm/en 语种对应词,含定义 |
| 12 | termdat_get_concept | LINDAS | 根据 URI 或 ID 获取完整的 TERMDAT 条目 |
示例用例
| 查询 | 工具 |
|---|---|
| “显示所有现行的职业培训联邦法律” | fedlex_search_laws |
| “《数据保护法》规定了什么?” | fedlex_get_law_by_sr |
| “未来 3 个月内有哪些法律生效?” | fedlex_get_upcoming_changes |
| “显示 DSG 的版本历史” | fedlex_get_law_history |
| “有哪些教育相关的咨询正在开放,截止日期是什么时候?” | fedlex_get_open_consultations |
| “查找关于语言法的已结束咨询” | fedlex_search_consultations |
| “提供咨询 proj/2026/71/cons_1 的完整详情和文档” | fedlex_get_consultation |
| “‘Volksschule’ 的法语和意大利语名称是什么?” | termdat_lookup_term |
| “显示 TERMDAT 条目 40109 的完整内容” | termdat_get_concept |
→ 按受众查看更多用例 →
架构
一个服务后端连接两个相互隔离的 SPARQL 端点。独立的 httpx 客户端和超时设置可确保 LINDAS 故障不会导致 fedlex_* 工具中断,反之亦然。
+-------------------+ +------------------------------+ +--------------------------+
| Claude / AI |---->| Fedlex MCP |---->| Fedlex SPARQL Endpoint |
| (MCP Host) |<----| (MCP Server) |<----| fedlex.data.admin.ch |
+-------------------+ | | | (law + consultations) |
| 12 Tools . 2 Resources | +--------------------------+
| Stdio | SSE |
| | +--------------------------+
| Isolated clients: |---->| LINDAS SPARQL Endpoint |
| - Fedlex (law + cons.) |<----| lindas.admin.ch/query |
| - LINDAS (TERMDAT) | | (fch/termdat, TERMDAT) |
| | +--------------------------+
| No authentication required |
+------------------------------+
数据模型
JOLux 本体 — 联邦法律(Fedlex)
jolux:ConsolidationAbstract <- SR entry
+-- jolux:isRealizedBy -> jolux:Expression (URI ends in /de, /fr, /it, /rm)
+-- jolux:title "Federal Act of 19 June 1992 on Data Protection"
+-- jolux:titleShort "DSG"
+-- jolux:historicalLegalId "235.1"
jolux:inForceStatus: .../0 In force · .../1 No longer published in SR · .../3 No longer in force
JOLux 本体 — 意见征询(Fedlex,同一端点)
jolux:Consultation
+-- jolux:eventId "proj/2026/71/cons_1"
+-- jolux:eventTitle multilingual (de/fr/it)
+-- jolux:eventDescription multilingual
+-- jolux:consultationStatus -> vocabulary URI (0..6, /2 = "Laufend"/running)
+-- jolux:foreseenImpactToLegalResource -> the legal resource it will amend (link to SR)
+-- jolux:hasSubTask -> ?t
+-- jolux:eventStartDate <- opened_on
+-- jolux:eventEndDate <- the deadline (xsd:date, calendar day)
+-- jolux:institutionInChargeOfTheEvent <- lead department
+-- jolux:institutionInChargeOfTheEventLevel2 <- lead office
+-- jolux:opinionHasDraftRelatedDocument <- consultation documents
jolux:Consultation 没有主题分类 — 主题筛选仅对 eventTitle 进行自由文本搜索,status 则根据截止日期推导,而非来自源状态字段。
立法生命周期 — 意见征询所处阶段(都在这一个服务中):
Vernehmlassung Bundesblatt (BBl) Systematische Sammlung (SR)
(consultation) ─────► (dispatch / act text) ───► (consolidated law in force)
──────────────── ───────────────────── ───────────────────────────
fedlex_get_open_ fedlex_search_gazette fedlex_search_laws
consultations (eli/fga/…) fedlex_get_law_by_sr
fedlex_search_ fedlex_get_law_history
consultations (eli/cc/…)
fedlex_get_consultation
│ jolux:foreseenImpactToLegalResource
└───────────────────────────────────────────► links a consultation forward
to the SR resource it amends
意见征询阶段是公众最早可以参与的阶段 — 上述工具可回答目前有哪些公开征询,以及截止日期是什么时候,此时草案尚未进入《联邦公报》。
schema.org — 术语(通过 LINDAS 的 TERMDAT,图 fch/termdat)
<concept> = https://register.ld.admin.ch/termdat/40109 (a schema.ld.admin.ch/Term, ValidatedEntry)
+-- schema:name preferred name per language (de/fr/it/en; rm effectively absent)
+-- schema:description multilingual definition
+-- schema:hasPart -> <term> = .../termdat/40109/3/de (synonym/variant, language + position suffix)
SPARQL 端点: https://fedlex.data.admin.ch/sparqlendpoint · https://lindas.admin.ch/query
许可: 根据 fedlex.admin.ch 可免费复用;通过 LINDAS 提供的 TERMDAT 可开放复用。
架构决策
架构 A — 三个数据领域均仅使用实时 SPARQL,与现有 Fedlex 集成保持一致(决策日期:2026-07-18)。
两个来源都是无需身份验证的 SPARQL 端点,延迟也可接受,因此无需提供转储文件或离线回退:如果 Fedlex 端点宕机,服务无论如何都无法运行,而添加缓存只会掩盖问题。LINDAS 是一个独立端点,其故障不得影响 fedlex_* 工具。
**隔离要求:**Fedlex 和 LINDAS 使用独立的 httpx 客户端、超时设置以及错误/状态报告。LINDAS 超时不能导致 fedlex_* 调用失败,反之亦然(由隔离测试覆盖)。
语言
| 代码 | 语言 |
|---|---|
de | 德语(默认,覆盖最完整) |
fr | 法语 |
it | 意大利语 |
rm | 罗曼什语 |
项目结构
fedlex-mcp/
+-- src/fedlex_mcp/
| +-- __init__.py # Package
| +-- server.py # 12 tools, 2 resources (Fedlex + LINDAS)
+-- tests/
| +-- test_server.py # Unit tests (mocked)
+-- .github/workflows/ci.yml # GitHub Actions (Python 3.11/3.12/3.13)
+-- pyproject.toml
+-- CHANGELOG.md
+-- CONTRIBUTING.md # Contributing guide (English)
+-- CONTRIBUTING.de.md # Contributing guide (German)
+-- SECURITY.md # Security policy (English)
+-- SECURITY.de.md # Security policy (German)
+-- LICENSE
+-- README.md # This file (English)
+-- README.de.md # German version
已知限制
- **SPARQL 复杂度:**范围很广的关键词搜索可能会超时(超时设为 45s)
- **语言覆盖:**德语数据最完整;其他语言可能存在缺漏
- **历史数据:**并非所有法律的历史版本都有机器可读的元数据
- **速率限制:**端点可能会限制高频请求
咨询 — 范围与可靠性(依赖前请先阅读)
- 仅限联邦层面。不包括州级咨询。 Fedlex 收录的是联邦(Bund)咨询。州级咨询——对学校主管部门(Schulamt)而言往往更相关——不在 Fedlex 中,也不在此处的覆盖范围内。这是严格的范围界限,不能设法绕过。
- 这不是推送服务。 MCP 基于拉取:服务会按请求回答哪些咨询仍在开放、哪些即将到期。它无法通知、安排或发送提醒。定期查询由你或外部调度器负责,绝非由服务负责。“没有开放的咨询”意味着目前没有开放的咨询,而不是之后也不会有。
- 主题筛选基于自由文本,并不完美。
jolux:Consultation没有主题/分类体系(已于 2026-07-20 在线验证)——筛选仅针对标题进行子字符串搜索。topic="education"会扩展为已披露的关键词并集,并有意扩大匹配范围(过窄的筛选会造成误导,让人误以为没有相关咨询);预计会有一些误报(例如无关标题中包含“Ausbildung”),而对于小众措辞,也可能出现漏报。响应始终会说明搜索了哪些词。 - **覆盖范围/延迟:**约 2,553 项咨询;1960–1991 年的历史语料由联邦档案馆保存,不在范围内。新开放的咨询会按照上游 Fedlex 的发布延迟显示(不是实时)。
- 截止日期按 Europe/Zurich 时区的日历日结束;
days_remaining在请求时计算,绝不缓存。0= 截止日期就是今天。
实时查询结果(已于 2026-07-20 验证):
| 查询 | 状态 | 记录数 | 备注 |
|---|---|---|---|
COUNT(?s) {?s a jolux:Consultation} | 正常 | 2,553 | 完整清单 |
hasSubTask(含开始/结束日期) | 正常 | 2,505 / 2,553 | 48 项没有任何截止日期 |
开放的咨询(eventEndDate >= today) | 正常 | 42 | 截止日期延伸至 2026 年秋季 |
consultation-status 词汇表 | 正常 | 7 个值 | /0../6,/2 = 进行中 |
| 标题包含“volksschule”/“lehrplan” | 正常 | 0 / 0 | 连锚点词本身都无法找到结果 → 请使用 topic |
标题包含“bildung”(单个词)与 topic="education" 并集 | 正常 | 44 vs 66 | 关键词并集的范围更广 |
REGEX(LCASE(?t), "a|b") 交替匹配 | 有问题 | 0 | 此端点会静默返回空结果 → 改用以 OR 串联的 CONTAINS |
- 特例 1——截止日期优先于状态字段。 状态
/2(“Laufend”/进行中)和eventEndDate是两个独立信号。服务根据日期推导status:截止日期已过 ⇒Abgeschlossen,无论来源状态如何声明——因此,已过期的咨询绝不会被列为进行中。当两者不一致时,记录会标记为status_conflict: true,并在status_source中保留原始标签。
TERMDAT (LINDAS) — 调查结果(已于 2026-07-18 验证)
| 查询 | 状态 | 记录数 | 备注 |
|---|---|---|---|
图中 COUNT(DISTINCT ?s) a schema.ld:Term | 正常 | 77,692 | |
schema:name 上的语言标签 | 正常 | de/fr/it/en | 实际上没有 rm(0) |
搜索 schema:name = "Volksschule" | 正常 | 1 | 返回术语 URI …/termdat/40109/3/de |
概念 URI …/termdat/40109 | 正常 | – | 4 个语言变体 + 定义 |
- 特例 2 — 现实核查差异(直言不讳)。 联邦总理府称 TERMDAT 大约有 400,000 条词条。LINDAS 中有 77,692 条。差异原因尚不明确——大概只有经过验证并发布的子集会作为 Linked Data 提供。在术语库中查无结果,并不意味着 TERMDAT 中缺少该术语;这只表示该术语不在 LINDAS 子集中。 每条 TERMDAT 响应都会附带此说明,以免模型得出错误结论。
- 特例 3 — 两级 URI。 概念 URI(
…/termdat/40109)包含首选名称和定义;带有语言/位置后缀的术语 URI(…/termdat/40109/3/de)是通过schema:hasPart关联的同义词/变体。工具接受这两种形式,并在内部将其规范化为概念 ID。
此工具不是什么
- 不是订阅或提醒服务。 它不会监控、通知、发送电子邮件或提醒。它只会在有人查询时作答。任何定期检查都由你或外部调度器在服务之外执行。
- 不是州级来源。 仅提供联邦(Bund)咨询信息——请参阅已知限制。
- 不是法律建议。 它返回公开元数据和官方文件链接。截止日期和状态根据已发布的数据以机械方式推导;对于任何影响决策的事项,请通过链接的 Fedlex 页面进行核实。
作品集中的相关流程
瑞士联邦立法有一系列流程,而此服务涵盖其中一部分——议会前的咨询。完整流程可由三个 MCP 服务表示:
Vernehmlassung → Botschaft → Parlament → Referendum
(consultation) (dispatch) (debate) (popular vote)
fedlex-mcp fedlex-mcp parlament-mcp swiss-democracy-mcp
- 咨询(议会前): 此服务——
fedlex_*consultation*工具。 - 议会阶段:
parlament-mcp——联邦议会中的辩论、动议和投票。 - 全民投票 / 公民复决:
swiss-democracy-mcp——联邦全民投票。咨询是一个独立且更早的阶段——两者没有重叠,但同属立法生命周期。
项目阶段
此服务处于阶段 1(只读)。所有工具均标注为
readOnlyHint: true / destructiveHint: false,且只会查询公开的
Fedlex SPARQL 端点——不具备写入、发送或文件系统操作能力。
| 阶段 | 范围 | 状态 |
|---|---|---|
| 1 — 只读 | 查询 SR/AS/BBl/条约 | ✅ 当前 |
| 2 — 可写入 | (暂无计划) | — |
| 3 — 多 Agent | (暂无计划) | — |
若要转入后续阶段,必须重新进行审计,并在添加任何可写入工具之前,实施审计目录中所述的人工介入控制。
MCP 协议版本
此服务通过同一端点支持两个协议时代。客户端在连接上的首个请求决定适用的协议;之后若声明属于另一个时代,则会被拒绝。
| 时代 | 修订版本 | 适用对象 |
|---|---|---|
initialize 握手 | 2024-11-05 … 2025-11-25 | 当前客户端所使用的版本。服务会返回请求中指定的修订版本;如果请求的版本更新,则返回上限 2025-11-25。 |
| 每请求信封 | 2026-07-28 | 携带 2026-07-28 _meta 信封的请求会开启现代连接。 |
两个修订版本都固定在
tests/test_protocol_version.py 中,并通过已安装的 SDK 进行断言,因此 Dependabot 更新 mcp 时,无法悄然更改任一版本。握手版本上限是通过已组装的 ASGI 栈向实时 initialize 请求进行测量得出的,而不是根据常量名称读取的。
请注意,SDK 的 LATEST_PROTOCOL_VERSION 是 modern
时代的别名,而不是握手时代的别名——仅固定这一项会导致当前客户端实际协商的时代版本继续漂移。
更新策略。 门禁检查失败时,不要盲目修改常量:请阅读两个修订版本之间的规范变更日志,确认服务端仍能正常运行,然后一并更新该常量、本节、README.de.md 和
CHANGELOG.md。
modern 修订版的四项影响体现在此服务中:
- CORS 列出了路由标头。 每个可流式 HTTP 请求都会携带
Mcp-Method、Mcp-Name和Mcp-Protocol-Version,而浏览器只能发送服务端列入允许列表的标头。请参阅server.py中的CORS_ROUTING_HEADERS。 - 列表方法会携带新鲜度提示。
tools/list、resources/list、resources/templates/list和server/discover的响应包含ttlMs300000 和cacheScopepublic(CACHE_HINTS)。resources/read则有意不包含:它会返回联邦法律,客户端不能将已废止的法规视为在五分钟内仍然有效。 - 不发送日志通知。 自
2026-07-28起,日志记录能力已弃用(SEP-2577)。截至 v2.0.1,每个工具都会通过ctx.info()/ctx.error()发送notifications/message——在从未声明logging能力的握手连接上会发送,在 modern 连接上则作为已弃用的调用发送,并被 SDK 丢弃。现在,可观测性由运营方负责(将 structlog 输出到 stderr,可选使用 OpenTelemetry);故障会通过工具结果本身告知调用方(isError: true,见下文)。 serverInfo包含软件包版本。 在2026-07-28中,身份信息会写入每个响应的_meta,而不是在initialize时仅发送一次。截至 v2.0.1,其version为空字符串。
工具故障会携带 isError: true。 规范规定,执行错误(Fedlex 或 LINDAS 无法访问、响应正文不是 JSON)应作为带有 isError: true 的工具结果返回,而不是 JSON-RPC 错误。自 2025-11-25 起,违反输入架构的参数也算作执行错误,因此模型可以修正输入;SDK 会在工具运行前自行处理此类错误,不会返回封装对象——在两个时代中测量结果均如此,未知工具名称也一样。截至 v2.0.1,服务端自身的故障返回时
isError: false,只有封装对象中的 match_type: "error" 才表示发生了错误。封装对象仍通过 structuredContent 传输;“未找到内容”(match_type: "none")是有效答案,不会标记为错误。tests/test_tool_errors.py 会在两个时代中检查每个已注册工具。
较长的 SPARQL 调用会报告进度。 一次调用最长可能需要 45 s,耗时几乎都来自尝试以及尝试之间的退避等待。发送了 progressToken 的客户端每次尝试都会收到一条 notifications/progress——“Anfrage an Fedlex (Versuch 1 von 3)”,重试时则为 “Fedlex: Versuch 2 von 3 nach
HTTP 503”——不会包含 total,因为没有可用的总数,填写就等于凭空捏造。通过可流式 HTTP 使用 2026-07-28 时,响应会切换为 SSE;未提供令牌时则不会发送任何内容。与日志记录不同,服务端到客户端的进度通知并未弃用。请参阅 tests/test_progress.py。
tests/test_modern_era.py 会在线路上测试两个时代:通过组装好的 ASGI 堆栈调用无会话的 server/discover 和 tools/call,并在每个时代中各调用一次工具,确认不会产生日志通知或 SDK 弃用警告。
测试
# Unit tests (no API key required)
PYTHONPATH=src pytest tests/ -m "not live"
# Integration tests (live API calls)
pytest tests/ -m "live"
安全性与限制
- 只读: 所有工具仅执行 SPARQL SELECT 查询——不会在任一端点写入、修改或删除数据。全部 12 个工具均标注为
readOnlyHint: true/destructiveHint: false/idempotentHint: true。 - 不涉及个人数据: Fedlex 保存公开法律、公报和咨询元数据;TERMDAT 保存官方术语。本服务不会处理或存储任何个人身份信息(PII)。
- 速率限制: Fedlex 和 LINDAS SPARQL 端点均为未注明速率限制的公共服务;请谨慎使用
limit参数(默认值为 20,最大值为 100)。本服务对每个端点的每次请求设有 45s 超时,并且只会对暂时性故障进行重试。 - 端点隔离: Fedlex 和 LINDAS 使用独立的客户端和超时设置——LINDAS 服务中断不会影响
fedlex_*工具。 - 数据时效性: 结果反映查询时端点上的数据。本服务不会进行缓存。
- 服务条款: 数据须遵守 fedlex.admin.ch 的再利用条件——允许免费用于商业和其他用途。
- 不作保证: 本服务是社区项目,与瑞士联邦总理府无关。服务可用性取决于上游 SPARQL 端点。
更新日志
参见 CHANGELOG.md
贡献
安全
有关安全状况、加固措施以及如何报告漏洞,请参见 SECURITY.md。
许可证
MIT 许可证——参见 LICENSE
作者
Hayal Oezkan . malkreide
鸣谢与相关项目
- Fedlex: fedlex.admin.ch — 瑞士联邦总理府
- TERMDAT / LINDAS: lindas.admin.ch — 瑞士政府的关联数据服务
- 协议: Model Context Protocol — Anthropic / Linux Foundation
- 相关项目: parlament-mcp — 瑞士联邦议会(议会阶段)
- 相关项目: swiss-democracy-mcp — 瑞士联邦全民投票(公投阶段)
- 相关项目: swiss-cultural-heritage-mcp — 瑞士文化遗产数据
- 相关项目: zurich-opendata-mcp — 苏黎世市开放数据
- 相关项目: swiss-transport-mcp — 瑞士公共交通
- 项目集: Swiss Public Data MCP Portfolio
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。