关于 Légifrance (unofficial)
Légifrance (unofficial) 是一个只读 Rust MCP 服务,通过 PISTE API 搜索和读取法国法律及判例。它返回带来源的引文,并支持引文解析与核验,适用于法律检索和文档审阅。
主要功能
- 01搜索法律、法典、判决和协议
- 02读取法律文本与司法判决
- 03解析并核验法律引文
- 04比较不同日期的条文版本
- 05分段读取以控制响应长度
适用场景
- 01按关键词查找法国法规或判例
- 02获取条文或判决及其来源
- 03核验法律文书草稿中的引文
- 04比较条文在两个日期的内容
MCP 相关
提供 13 个只读工具、覆盖范围资源、法律文本资源模板、三个法语提示词及参数补全功能,并通过 PISTE 查询 Légifrance。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
mcp-legifrance
非官方项目,与 DILA 无关联。未获 DILA 认可,亦与其无关。
代码仓库:https://github.com/muchiny/mcp-legifrance
使用 Rust 编写的 MCP 服务,用于查询法国官方法律(法律、法典、判例、集体协议):它以只读方式读取 PISTE 门户的 Légifrance API,并返回 Légifrance 发布的原文,同时附上引文和来源地址。该服务面向 MCP 2026-07-28 规范,并兼容使用 2025-11-25 和 2025-06-18 版本的客户端。
未签名的二进制文件。 二进制文件和 MCPB 捆绑包均未使用任何证书签名(Windows 上未使用 Authenticode 签名,macOS 上也未进行公证)。在 Windows 上,Smart App Control 可能会拦截可执行文件:请勿禁用它,请改用 Docker 镜像或 WSL。在 macOS 上,Gatekeeper 可能会要求确认。SHA-256 校验和及 GitHub 来源证明可用于验证您安装的内容(请参阅验证下载)。
状态。 本页面介绍 0.3.0 版本。安装命令将在
v0.3.0标签和对应的 GitHub release 发布后生效;在此之前,只能从代码仓库克隆版本进行编译。
目录
- 服务的功能
- 安装前:PISTE 应用程序
- 按渠道安装
- 客户端配置
- 环境变量
- 离线模式(DILA 本地索引)
- 联系的主机
- 署名、数据许可和非关联声明
- 从 fr-eli-mcp 迁移
- 隐私与安全
- 尚未验证的事项
- 开发与贡献
服务的功能
十三个工具,全部为只读(readOnlyHint),会通过网络查询 Légifrance(openWorldHint):
| 工具 | 作用 |
|---|---|
fr_search | 在某个资料库中按关键词搜索:LODA(法律和法令)、CODE、JURI(最高法院和上诉法院)、CONSTIT、CETAT、CNIL、KALI(集体协议)或 ACCO(企业协议)。支持分页、日期筛选和查询指定日期有效的版本。 |
fr_get_act | 查询指定日期法律、法令或法典的目录。 |
fr_get_text | 查询条文内容,支持渐进式读取(见下文)。 |
fr_get_decision | 查询司法裁决(最高法院、宪法委员会、国务委员会、上诉法院、行政法院)。 |
fr_get_deliberation | 查询 CNIL 的审议决定。 |
fr_get_convention | 查询集体协议的元数据和目录。 |
fr_get_company_agreement | 仅查询企业协议的元数据(正文以附件形式提供)。 |
fr_coverage | 查询服务的覆盖范围及不覆盖内容、PISTE 环境、配置状态、来源和查询日期。 |
fr_resolve | 将自由格式的引文(“《民法典》第 1240 条”、“Cass. civ. 1re, 4 juin 2025, n° 24-13.470”、ECLI)转换为 Légifrance 标识符,并提供置信度。不会猜测或捏造信息。 |
fr_verify_citations | 对照 Légifrance 核验文本中的所有法律引文(最多 20 000 个字符,例如回复草稿):法典、法律、法令、裁决、ECLI、CNIL 审议决定和集体协议。 |
fr_get_related | 查询条文或裁决的法律关联:所引文本、引用该条文或裁决的文本,以及提及的判例。 |
fr_diff_article | 比较条文在两个日期的版本:列出删去和新增的段落,并提供少量上下文。 |
fr_search_all | 同时搜索多个资料库:按资料库分组,返回每个资料库的最佳结果及结果总数。 |
渐进式返回。 为节省模型上下文,超过 1 200 个字符的文本会先以摘要形式返回。如需完整内容,请请求 detail: "full",然后使用 offset = next_offset 继续读取;focus 可提取与指定词语匹配的段落。单次响应的紧凑 JSON 永远不会超过 45 000 个字符。
资源、提示词和补全。 除工具外,服务还提供资源 legifrance://coverage、四种资源模板(legifrance://act/{text_id}、legifrance://article/{article_id}、legifrance://code/{code}/article/{num}、legifrance://decision/{decision_id})、三个法语提示词(analyser_decision、etat_du_droit、verifier_citations)及其参数补全功能。
编译选项,未包含在已发布的二进制文件中。 本地 Streamable HTTP 传输(--features http、serve-http 子命令,仅限环回地址,令牌存储在 LF_MCP_HTTP_TOKEN 中)已包含在代码中,可按需编译,但不会随二进制文件、Docker 镜像和 MCPB 包一起发布。
离线模式,自 1.0.0 起包含在已发布的二进制文件中。 DILA 本地索引(dila 功能,仅包含 LEGI 资料库,通过 LF_DILA_DIR 启用)可使用 build-dila-index 子命令构建,详见离线模式(DILA 本地索引)。本地索引是一个快照,可能滞后于 Légifrance,因此绝不能据此证明某篇文本不存在。CHANGELOG 按版本说明了每次发布所包含的内容。
协议。 支持 MCP 2026-07-28(“现代”协议),以及同一二进制文件中的 2025-11-25 和 2025-06-18(“旧版”协议)。不提供 2025-03-26 版本。启动时不会进行任何网络调用:首次调用工具时才会进行 PISTE 身份验证。
安装前:PISTE 应用
每位用户都要提供自己的凭据:本项目不提供任何凭据,且 PISTE 的使用条款禁止分享您的凭据。以下步骤只需完成一次:
- 在 https://piste.gouv.fr 创建实名账户,并接受 PISTE 的使用条款。
- 在目录中选择 Légifrance API,并接受其使用条款(免费访问)。
- 每个环境创建一个应用:一个用于沙盒环境(
sandbox),一个用于production。在应用的 “OAuth Credentials” 部分记录client_id和client_secret。
沙盒环境的凭据在生产环境中无效(PISTE 会返回 invalid_client)。服务默认以 sandbox 模式启动;沙盒可能返回与生产环境不同的数据,且不提供任何服务承诺。如需使用生产环境,请参阅切换到生产环境。
如果您的密钥泄露,请立即在 PISTE 上重置,然后通知 DILA 和 AIFE。
按渠道安装
| 渠道 | 适用对象 | 命令或操作 | 完整性 |
|---|---|---|---|
| 安装程序(Release 压缩包) | 熟悉终端的法律工作者和开发者 | curl … | sh(Linux、macOS);irm … | iex(Windows) | HTTPS;SHA-256 校验和及证明,未签名 |
| MCPB Bundle | Claude Desktop | 双击 mcp-legifrance-0.3.0.mcpb | 客户端验证 fileSha256;未签名 |
| Docker 镜像 | 隔离环境、VS Code(扩展市场)、Docker Desktop | docker run -i --rm … | 摘要、证明 |
cargo install --git | Rust 开发者 | 从仓库在本地按标签编译 | 通过 --locked 强制使用 Cargo.lock;未签名 |
二进制文件适用平台:Linux x86_64 和 aarch64(gnu 和 musl)、macOS x86_64 和 aarch64、Windows x86_64。Windows on ARM64 不是目标平台:x86_64 二进制文件可通过模拟运行(未经验证)。
该服务也已登记在 MCP 注册表中,名称为 io.github.muchiny/mcp-legifrance(软件包 mcpb 和 oci)。
安装程序(Linux、macOS、Windows)
# Linux, macOS
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/muchiny/mcp-legifrance/releases/download/v0.3.0/mcp-legifrance-installer.sh | sh
# Windows
powershell -c "irm https://github.com/muchiny/mcp-legifrance/releases/download/v0.3.0/mcp-legifrance-installer.ps1 | iex"
二进制文件将安装到 ~/.mcp-legifrance/bin/mcp-legifrance(Windows:用户文件夹中的 .mcp-legifrance\bin 目录,文件名为 mcp-legifrance.exe),并将该目录添加到 PATH。已经打开的图形应用(Claude Desktop、VS Code)看不到新的 PATH:请重启应用,或在配置中提供绝对路径,例如下文中的示例。安装程序不会自动更新:如需更换版本,请使用所需标签重新运行安装程序。
验证下载文件
您也可以不运行下载的脚本,而是从Release 页面下载适用于您目标平台的压缩包,验证后再解压:
# somme SHA-256 : comparez le résultat à la ligne correspondante du fichier sha256.sum de la release
sha256sum mcp-legifrance-x86_64-unknown-linux-gnu.tar.xz # macOS : shasum -a 256 ; Windows : Get-FileHash
# provenance : l'archive a été construite par la CI de ce dépôt
gh attestation verify mcp-legifrance-x86_64-unknown-linux-gnu.tar.xz --repo muchiny/mcp-legifrance
压缩包名称遵循 mcp-legifrance-<cible>.tar.xz 格式(Windows 为 .zip)。每个压缩包都包含二进制文件、许可证、NOTICE 文件、第三方许可证、本页面和变更日志。
MCPB Bundle(Claude Desktop)
- 从 Release 页面下载
mcp-legifrance-0.3.0.mcpb。 - 双击该文件,或将其拖入 Claude Desktop 的扩展设置中。
- 填写要求的三个字段:PISTE 客户端 ID、PISTE 客户端密钥(两者均由客户端的安全存储保管)以及环境(默认为
sandbox)。
一个 Bundle 适用于所有平台;启动时会选择正确的二进制文件。如果您不是开发者,这是最简单的方式:无需编写 JSON 配置。
Image Docker
docker pull ghcr.io/muchiny/mcp-legifrance:0.3.0
# vérification de la configuration (aucun secret sur la ligne de commande : -e NOM sans valeur)
docker run --rm -e LF_PISTE_CLIENT_ID -e LF_PISTE_CLIENT_SECRET ghcr.io/muchiny/mcp-legifrance:0.3.0 check-config
该镜像公开、精简(distroless),以非 root 用户身份运行,支持 linux/amd64 和 linux/arm64。-i 必不可少:客户端通过标准输入和标准输出与服务通信。审计日志写入 /data/audit;请挂载命名卷以便保留日志(示例见下文)。该镜像适用于本地使用。
cargo install --git
cargo install --git https://github.com/muchiny/mcp-legifrance --tag v0.3.0 --locked mcp-legifrance
- 前提条件:Rust 工具链版本至少为 1.88,并且需要 C 编译器。当前 TLS 提供方(aws-lc)在某些平台上可能需要其他构建工具(尚未在 Linux 以外的平台上确认)。
- 必须指定软件包名称(
mcp-legifrance):仓库中包含多个软件包。--locked会强制使用项目指定的依赖版本。 - 二进制文件会放在 Cargo 安装目录中的
bin目录下(默认为~/.cargo/bin),且未签名。 - 不要在不带
--git的情况下运行cargo install mcp-legifrance:该项目在 0.x 版本阶段不会发布到 crates.io;即使存在同名 crate,也不是这个项目。
验证安装
mcp-legifrance --version
mcp-legifrance check-config # lit l'environnement, n'appelle aucun service
mcp-legifrance check-config --online # obtient un jeton OAuth auprès de PISTE, sans appeler l'API
check-config 会为每个变量显示一行信息(名称、来源、值、状态),绝不显示机密信息(显示「set (n characters)」;客户端标识符会截断为 4 个字符),随后显示警告和问题。退出代码:0 一切正常;2 配置无效;3 PISTE 拒绝凭据;4 网络错误。
客户端配置
通用原则:
- 客户端中的服务名称:
legifrance(推荐)。例如,在 Claude Code 中,工具会显示为mcp__legifrance__fr_search。 - 命令:
mcp-legifrance,并带上参数serve(这是默认行为;写明该参数可避免歧义)。请使用二进制文件的绝对路径:图形应用不一定会继承你的PATH,而且 JSON 文件中的~不会展开。以下示例假设使用安装程序(/home/alice/.mcp-legifrance/bin/mcp-legifrance);请调整路径。 - 机密信息:服务会从其环境中读取
LF_PISTE_CLIENT_ID和LF_PISTE_CLIENT_SECRET。命令行选项不会传递这些信息(参数会出现在进程列表中)。按安全性从高到低排列:客户端的安全存储(MCPB、VS Code 提示);由机密信息管理器提供的环境变量;在配置文件中明文填写,应该避免,且绝不能纳入版本控制。 - 诊断:如有疑问,请在与客户端相同的环境中运行
mcp-legifrance check-config --online。
客户端语法摘自其官方文档,日期为 2026-10-29。尚未在每种客户端的实际安装中进行测试(参见尚未验证的内容)。
Claude Code
在项目根目录创建 .mcp.json 文件。Claude Code 会将 ${NOM} 替换为对应的环境变量:该文件不包含任何机密信息,可以纳入版本控制。
{
"mcpServers": {
"legifrance": {
"type": "stdio",
"command": "/home/alice/.mcp-legifrance/bin/mcp-legifrance",
"args": ["serve"],
"env": {
"LF_PISTE_ENV": "sandbox",
"LF_PISTE_CLIENT_ID": "${LF_PISTE_CLIENT_ID}",
"LF_PISTE_CLIENT_SECRET": "${LF_PISTE_CLIENT_SECRET}"
}
}
}
}
在启动 Claude Code 的 shell 环境中设置这两个变量。也可以通过命令行添加相同的配置项:claude mcp add-json legifrance '<json>',其中 <json> 是上文 legifrance 配置项的内容(使用 --scope user 可应用于所有会话)。请避免使用 claude mcp add --env LF_PISTE_CLIENT_SECRET=…:机密信息会留在 shell 历史记录中。验证方式:运行 claude mcp list,然后在会话中运行 /mcp。
Claude Desktop
- 推荐方式:MCPB 捆绑包(上文)。
- 手动配置:配置文件
claude_desktop_config.json(macOS 上位于~/Library/Application Support/Claude/;Windows 上位于用户应用数据中的Claude文件夹,即AppData\Roaming\Claude)。其中的机密信息会以明文形式保存。
{
"mcpServers": {
"legifrance": {
"command": "/Users/alice/.mcp-legifrance/bin/mcp-legifrance",
"args": ["serve"],
"env": {
"LF_PISTE_ENV": "sandbox",
"LF_PISTE_CLIENT_ID": "<votre client_id>",
"LF_PISTE_CLIENT_SECRET": "<votre client_secret>"
}
}
}
}
VS Code
文件 .vscode/mcp.json。带有 password: true 的 promptString 提示会在首次启动时询问凭据,并由 VS Code 保存;不会写入文件。
{
"inputs": [
{ "type": "promptString", "id": "lf-client-id", "description": "PISTE client ID", "password": true },
{ "type": "promptString", "id": "lf-client-secret", "description": "PISTE client secret", "password": true }
],
"servers": {
"legifrance": {
"type": "stdio",
"command": "/home/alice/.mcp-legifrance/bin/mcp-legifrance",
"args": ["serve"],
"env": {
"LF_PISTE_ENV": "sandbox",
"LF_PISTE_CLIENT_ID": "${input:lf-client-id}",
"LF_PISTE_CLIENT_SECRET": "${input:lf-client-secret}"
}
}
}
}
- VS Code 也会读取工作区根目录下的
.mcp.json文件,但不支持inputs或变量替换:不要在其中放入密钥。 - 使用环境文件的变体:
"envFile": "${workspaceFolder}/.env.legifrance",该文件已被 git 忽略。 - 工具声明为只读,但可访问外部世界:VS Code 可能会在传递结果前请求确认。其确切行为尚未经过测量。
- 只能从 VS Code 的 MCP 扩展库安装 Docker 包。
Cursor
文件为 ~/.cursor/mcp.json(全局)或 .cursor/mcp.json(项目级)。格式和变量替换未经验证;密钥以明文保存。
{
"mcpServers": {
"legifrance": {
"command": "/home/alice/.mcp-legifrance/bin/mcp-legifrance",
"args": ["serve"],
"env": { "LF_PISTE_CLIENT_ID": "<votre client_id>", "LF_PISTE_CLIENT_SECRET": "<votre client_secret>" }
}
}
}
Docker 变体(所有客户端)
{
"mcpServers": {
"legifrance": {
"command": "docker",
"args": ["run", "-i", "--rm",
"-e", "LF_PISTE_CLIENT_ID", "-e", "LF_PISTE_CLIENT_SECRET", "-e", "LF_PISTE_ENV",
"-v", "mcp-legifrance-audit:/data/audit",
"ghcr.io/muchiny/mcp-legifrance:0.3.0"],
"env": {
"LF_PISTE_CLIENT_ID": "${LF_PISTE_CLIENT_ID}",
"LF_PISTE_CLIENT_SECRET": "${LF_PISTE_CLIENT_SECRET}",
"LF_PISTE_ENV": "sandbox"
}
}
}
}
客户端将变量设置到 docker 进程上,由其通过 -e NOM 传递给容器。env 中的 ${…} 替换由 Claude Code 提供;其他客户端请使用各自的提示或值。Smart App Control 阻止二进制文件时,这也是 Windows 下的备用方案。
Windows
- 在 JSON 中,将反斜杠加倍:
"C:\\Users\\alice\\.mcp-legifrance\\bin\\mcp-legifrance.exe"。不要使用cmd /c:这是原生可执行文件。 - 安装程序运行完毕后,重启客户端(
PATH已更新到用户注册表中),或提供绝对路径。 - 不要使用
setx写入密钥:它会以明文形式存储在注册表和 PowerShell 历史记录中。请优先使用 MCPB 包或 VS Code 提示。 - Windows 下审计日志的默认路径尚未验证:
check-config会显示实际路径。
切换到生产环境
- 创建一个生产环境 PISTE 应用,并订阅 Légifrance API。
- 设置
LF_PISTE_ENV=production和该应用的凭据。 - 运行
mcp-legifrance check-config --online。 - 调用
fr_coverage:显示的环境应为production。
项目从未调用过生产环境地址(oauth.piste.gouv.fr、api.piste.gouv.fr):这些地址有文档说明,但未经验证。
环境变量
配置仅来自环境(不读取任何文件,也不使用远程配置)。启动时读取一次:修改后请重启服务。空值或仅含空白字符的值均视为不存在。
常用设置
| 变量 | 作用 | 取值与默认值 |
|---|---|---|
LF_PISTE_CLIENT_ID | 您的 PISTE 应用的 OAuth 标识符 | 必填 |
LF_PISTE_CLIENT_SECRET | 同一应用的 OAuth 密钥 | 必填,绝不显示 |
LF_PISTE_ENV | PISTE 环境 | sandbox(默认)或 production |
LF_PISTE_OAUTH_URL、LF_PISTE_BASE_URL | 覆盖 PISTE 地址(不建议:请优先使用 LF_PISTE_ENV) | 见下方规则 |
LF_AUDIT_DIR | 审计日志目录 | 绝对路径(开头的 ~/ 会展开);默认:用户数据目录下的 mcp-legifrance/audit 子目录 |
LF_AUDIT_MODE | 无法写入日志时的处理方式 | strict(默认:工具调用失败并返回 [audit_error])或 best-effort |
LF_LOG | 日志过滤器(tracing 语法),写入 stderr | 默认:info;网络和 MCP 库使用 warn |
LF_HTTP_TIMEOUT_S | 每次 PISTE 请求的超时时间,单位为秒 | 1 至 300,默认 40 |
LF_TOOL_DEADLINE_S | 每次工具调用的总超时时间,单位为秒 | 1 至 600,默认 60 |
地址覆盖规则:必须使用 https(仅允许向 127.0.0.1、::1 和 localhost 使用 http);地址中不得包含用户标识、参数或片段。除四个官方主机外的主机也可使用,但会显示 CustomHost 警告(启动时、在 check-config 中以及 fr_coverage 的缺漏信息中)。属于另一个环境的官方主机将触发 EnvMismatch 问题:服务绝不会根据地址推断环境,而是要求设置 LF_PISTE_ENV=production。
请勿在 LF_LOG 中为 rmcp 启用 debug 或 trace:此时该库会记录完整响应。
高级设置
以下四项设置不会出现在 server.json 或 MCPB bundle 清单中。要使用它们,请将其添加到客户端的 env 块中。无效值不会阻止启动:系统会应用默认值并记录警告,check-config 会显示生效值。
| 变量 | 作用 | 取值与默认值 |
|---|---|---|
LF_PISTE_RPS | 向 PISTE 发出的每秒请求数 | 1 至 100,默认 5 |
LF_PISTE_BURST | 限流器允许的突发请求数 | 1 至 100,默认 10 |
LF_PISTE_CONCURRENCY | 同时进行中的请求数 | 1 至 16,默认 4 |
LF_PISTE_MOJIBAKE_REPAIR | 修复重音字符损坏的文本 | on(默认)或 off |
配置无效:降级模式
如果 PISTE 配置无效(环境未知、地址被拒绝、缺少凭据),服务仍会启动:每个 PISTE 工具都会返回 [config_error] …,且不会发起网络请求;fr_coverage 和 check-config 会说明问题。
从 fr-eli-mcp 继承的变量
这些名称来自本项目重写的 Python 服务(NOTICE)。此处记录这些名称以便迁移。
| 继承的变量 | 行为 | 替代项 |
|---|---|---|
FR_ELI_CLIENT_ID | 如果未设置 LF_PISTE_CLIENT_ID,则读取此变量,并在 stderr 上显示弃用警告;如果两者都存在,则以 LF_PISTE_CLIENT_ID 为准 | LF_PISTE_CLIENT_ID |
FR_ELI_CLIENT_SECRET | 同上 | LF_PISTE_CLIENT_SECRET |
FR_ELI_OAUTH_URL | 同上 | LF_PISTE_ENV,或 LF_PISTE_OAUTH_URL |
FR_ELI_BASE_URL | 同上 | LF_PISTE_ENV,或 LF_PISTE_BASE_URL |
FR_ELI_AUDIT_DIR | 同上 | LF_AUDIT_DIR |
FR_ELI_CACHE_DIR | 从不读取:不再使用磁盘缓存。若已设置,启动时以及在 check-config 中会显示「ignored」警告 | 无 |
FR_ELI_RUNTIME_URL | 从不读取:不再使用远程配置。显示「ignored」警告 | 无 |
FR_ELI_ENV | 从不读取(原项目也没有使用此变量)。显示「ignored」警告 | LF_PISTE_ENV |
PISTE_CLIENT_ID、PISTE_CLIENT_SECRET | 从不读取(原项目的文档错误地提及了这些变量)。显示「ignored」警告 | LF_PISTE_CLIENT_ID、LF_PISTE_CLIENT_SECRET |
警告的形式为 FR_ELI_ENV ignored: it is never read;对于出于兼容性而读取的变量,则为 FR_ELI_CLIENT_ID is deprecated: use LF_PISTE_CLIENT_ID。警告中绝不会包含变量的值。
离线模式(DILA 本地索引)
可选:服务器不调用 PISTE,而是读取 Légifrance 法典、法律和法令的本地副本(DILA 开放数据中的 LEGI 数据集)。这样,您无需创建 PISTE 账户,也不会有请求离开您的计算机。这份副本不包含司法裁决、CNIL 的审议、集体协议和企业协议:这些工具会返回 [config_error],并要求使用 PISTE。定义 LF_DILA_DIR 后,服务器绝不会回退到 PISTE。
所需空间(根据 2026-10-31 的真实归档测得:1 个 2025-07-13 的完整文件和 481 个更新文件):需下载 3.1 GB 归档,随后生成 3.6 GB 索引(2,405,838 份文档,没有拒绝任何成员),总共约需 7 GB 磁盘空间。使用未优化的开发版二进制文件构建耗时 1 小时 10 分钟,最多使用 3.6 GB 内存;尚未测量使用发布版二进制文件时的耗时。
分三个步骤。
-
使用仓库中的脚本下载归档(bash 和
curl;单个连接,过程中会暂停,可恢复下载):scripts/fetch-dila-dumps.sh ~/dila/archives -
构建索引(不访问网络;不会在磁盘上解压任何内容;重新运行命令只会应用新增内容):
mcp-legifrance build-dila-index --archives ~/dila/archives --index ~/dila/index -
在 MCP 客户端的配置中声明索引,以其取代 PISTE 变量,并使用绝对路径:
LF_DILA_DIR=/chemin/absolu/vers/dila/index。使用mcp-legifrance check-config进行验证。
须知。
- 这是一个快照:下载文件之后发布的文本不会包含在内,缺失内容会标记为
unresolvable,而不会标记为not_found。响应中尚未标明快照日期;索引目录中的registry.tsv文件会列出已应用的归档。 - 如需更新,请重新执行步骤 1 和 2。DILA 发布新的完整文件后,索引会从头重建。客户端正在读取同一索引时,请勿运行
build-dila-index。 - 脚本使用 bash:尚未在 Windows 上测试(可使用 WSL 或 Git Bash)。MCPB 捆绑包不提供此设置,Docker 镜像挂载索引的方式也尚未测试。
- 数据许可。 DILA 的说明要求注明来源(DILA)、下载地址、文件名和日期。如有疑问,请注明:“来源:DILA,LEGI 数据库,Légifrance,文件
<nom>(日期:<date>),https://echanges.dila.gouv.fr/OPENDATA/LEGI/”。相关说明引用了 Licence Ouverte 2.0,而 data.gouv.fr 门户引用的是 2014 年版:目前尚未厘清两者差异(见docs/recherche/10-dumps-dila.md§8)。
联系的主机
服务仅在下列情况下联系以下主机。不会收集遥测数据、创建账户、在线检查版本或自动更新。
| 组件 | 主机 | 时间 |
|---|---|---|
二进制文件,LF_PISTE_ENV=sandbox(默认) | sandbox-oauth.piste.gouv.fr、sandbox-api.piste.gouv.fr | 首次调用工具时,不会在启动时联系 |
二进制文件,LF_PISTE_ENV=production | oauth.piste.gouv.fr、api.piste.gouv.fr(本项目从未调用:未经验证) | 同上 |
使用 LF_PISTE_OAUTH_URL 或 LF_PISTE_BASE_URL 的二进制文件 | 您提供的主机(https,或仅指向环回地址的 http);如果不是四个官方主机之一,则会发出 CustomHost 警告 | 同上 |
check-config --online | 所选环境的 OAuth 主机:仅请求令牌,从不调用 API | 按需 |
| Shell 和 PowerShell 安装程序、MCPB 包、归档文件 | github.com 以及 GitHub 重定向至的发布文件下载主机 | 安装时 |
cargo install --git | github.com(克隆指定标签的仓库)、index.crates.io 和 static.crates.io(依赖项) | 安装时 |
| Docker 镜像 | ghcr.io | 执行 docker pull 时 |
| DILA 转储文件下载脚本(版本 1.0,不含二进制文件) | echanges.dila.gouv.fr | 用户明确运行时 |
在企业代理后运行时,二进制文件会使用系统代理;尚未验证是否支持常见代理环境变量。发行版安装程序声明支持常见代理环境变量。
署名、数据许可和非隶属关系
数据来源。 提供的内容来自 Légifrance(https://www.legifrance.gouv.fr),该服务由法律与行政信息局(DILA)提供,通过 PISTE 门户的 Légifrance API 获取。这些内容可根据开放许可证 2.0(Etalab)重复使用。应采用以下署名:
来源:Légifrance / DILA — 开放许可证 2.0
查阅日期。 引用或重新发布通过本服务获取的文本时,也请注明查阅日期。工具 fr_coverage 会提供该日期:其 consulted_on 字段给出当天日期(Europe/Paris 时区),attribution 字段包含上述署名。服务说明也会注明来源和许可证。开放许可证要求注明许可方和最后更新日期;服务没有可靠的文档更新日期字段,因此以查阅日期代替。默认采用全局署名即可的理解,但尚未得到确认。
文本的效力。 只有经电子签名的《官方公报》版本具有法律效力:本服务的响应不具有法律约束力,也不构成法律意见。司法裁决以化名化形式发布,CNIL 的决定则经过隐去处理;本服务不会对其中任何一项进行还原。
非隶属关系。 本项目并非由 DILA 或运营 PISTE 的 AIFE,亦非任何公共机构开发、批准或支持。「Légifrance」指法律公共发布服务:产品名为 mcp-legifrance,标题中标有「(unofficial)」,且不使用任何 Légifrance 或法国政府标志。与 DILA、AIFE 或任何法国公共机构均无隶属关系,亦未获其认可。
代码许可证。 Apache-2.0 (LICENSE),版权所有者 Loïc Wernert。本项目是对 matematicsolutions/fr-eli-mcp(commit d3b5b13,Apache-2.0)的 Rust 重写,并沿用了经改编的文本和测试 fixture:请参阅 NOTICE。未从任何采用 AGPL 许可证的项目中复制代码。二进制文件所链接的第三方库许可证汇总在仓库根目录提供的第三方许可证文件以及每个归档文件中。
从 fr-eli-mcp 迁移
适用于 Python 参考实现(fr-eli-mcp)的用户。逐字段的完整说明见 docs/plan/annexes/A-parite.md §6。
- 命令:在客户端配置中,将
fr-eli-mcp(或uvx fr-eli-mcp)替换为mcp-legifrance。服务名称及其注册表名称也会改变(io.github.muchiny/mcp-legifrance)。 - 变量:将
FR_ELI_CLIENT_ID和FR_ELI_CLIENT_SECRET重命名为LF_PISTE_CLIENT_ID和LF_PISTE_CLIENT_SECRET(旧名称仍可使用,但会发出警告)。删除FR_ELI_CACHE_DIR、FR_ELI_RUNTIME_URL、FR_ELI_ENV、PISTE_CLIENT_ID和PISTE_CLIENT_SECRET,这些变量不会产生任何效果。 - 生产环境:设置
LF_PISTE_ENV=production,并删除地址覆盖项。若将地址覆盖到生产环境却未设置此变量,服务将进入降级模式(EnvMismatch)。 - 验证:运行
mcp-legifrance check-config,然后添加--online以测试凭据。 - 输出:读取
citation(原为human_readable_citation);eli_uri、eli_note和dataset_note已不存在;缺失的值表现为缺少键,而不是null;不要依赖title。目录表称为toc(而非articles),并通过toc_offset = next_toc_offset分页。其他字段也已重命名(date、convention_id、date_publication、path、gaps等):请参阅完整说明。 - 文本阅读:超过 1 200 个字符时,默认响应为摘要;请设置
detail: "full"并循环使用offset = next_offset,或使用focus。 - 错误:前缀
[code]表示错误类型。除了invalid_arg、not_found、upstream_error和config_error,还新增了两个代码:rate_limited(等待指定时间后重试)和audit_error。切勿重试config_error或audit_error。 - 审计:目录和文件名均已更改(
mcp-legifrance.jsonl);新增了三个键;其哈希和指标无法与参考实现中的数据比较。 - 客户端:最低要求为协议版本 2025-06-18。
隐私与安全
- 发送到网络的内容:您的搜索请求和文档标识符,以及您的 PISTE 凭据,通过 PISTE(AIFE)发送至 Légifrance API(DILA)。不会发送其他内容(见联系的主机)。
- 保留在您的计算机上的内容:JSONL 格式的审计日志(
mcp-legifrance.jsonl,带轮换),每次工具调用写入一行,无论调用结果如何。日志包含参数的 SHA-256 哈希,绝不会包含明文搜索请求或任何密钥。在strict模式(默认)下,写入失败会导致调用失败。多个进程可以共用同一目录。 - 日志:仅输出到 stderr;stdout 仅承载协议内容。日志中不会包含密钥或请求文本。
- 返回的文本是数据,而非指令:模型不得执行法律文本要求其执行的操作。
- 详情见:PRIVACY.md(隐私)和 SECURITY.md(通过 GitHub 私密渠道报告漏洞,以及已知限制)。
尚未验证的内容
项目会记录不确定之处,而不是将其隐去。对于 0.3.0:
- 从未调用过 生产环境 PISTE 地址。
- 每个客户端的配置语法均取自其文档,尚未在实际安装环境中验证(优先级:Claude Code 和 VS Code)。Cursor 的格式和 Claude Desktop 的文件位置仍待确认。
- 尚未在 macOS 和 Windows 上的 Claude Desktop 中试用 MCPB 包。
- 尚未在 macOS 和 Windows 上试用
cargo install --git。 - 尚未测量 Windows 上审计日志的默认路径、权限、代理的处理情况,以及 VS Code 对
openWorldHint的行为。 - PISTE 沙箱有时会返回与生产环境不同的数据。
- DILA 本地索引曾使用真实存档构建一次(使用开发二进制耗时 1 小时 10 分钟),并仅在 Linux 上针对少数查询进行了检索:使用发布版二进制所需的时间、在 Windows 和 macOS 上的行为、响应中的快照日期,以及各资料集自身的许可证,均尚未验证。
- 法律条文在
source_url中收到的 Légifrance 地址尚未在浏览器中打开,以确认页面可以显示。 - 2026-10-29,在 PISTE 沙箱中通过了 21 项测试;这并不能说明生产环境的情况,而且 CI 每周只会重跑其中一部分测试。
未解决事项的完整清单见 docs/plan/09-risques-et-questions.md。
开发与贡献
| 语言 | Rust(2024 版,MSRV 1.88,固定使用 1.99.0 工具链),Cargo 工作区 crates/lf-*,二进制 mcp-legifrance |
| 架构 | 六边形架构:纯 lf-domain → lf-application(端口、用例)→ PISTE、缓存、审计、MCP 适配器 → lf-app(二进制) |
| MCP SDK | rmcp 3.5.1 |
| 质量 | 行、区域和函数覆盖率均为 100%,仅有一个明确命名的例外(stdio.rs,负责连接真实的 stdin 和 stdout,由二进制端到端测试覆盖);变异测试:每个 PR 的 diff 仅在风险文件上进行变异测试,其余代码每周测试一次,已知仍有存活且未解决的变异体;make ci 是完整性证明 |
- CONTRIBUTING.md:开发流程、质量门槛、贡献许可规则。
- docs/plan/:计划入口和阅读顺序;docs/plan/00-decisions.md:规范性决策;docs/plan/07-feuille-de-route.md:里程碑和任务。
- docs/adr/:架构决策;docs/recherche/:附有来源的研究笔记。
- CHANGELOG.md:各版本包含的内容。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。