mcpField
D
DPOLens

DPOLens

远程服务
dpolens.com法律与政务3今天更新

关于 DPOLens

DPOLens 是面向开发者及隐私政策负责人的开源 MCP 服务,让 AI 助手查询组织政策和适用法律。它返回带来源与版本信息的原文条款,并提供仪表板用于审核和发布政策。

主要功能

  1. 01搜索法律和组织政策
  2. 02返回带版本引用的原文条款
  3. 03加载 GDPR 和 UAE PDPL 法律包
  4. 04解析并管理 DOCX 与 Markdown 政策版本
  5. 05记录治理日志和查询日志

适用场景

  1. 01编码时核对数据保留规则
  2. 02验证助手引用的法律条款
  3. 03审核并发布更新后的隐私政策
  4. 04审计政策访问和版本变更

MCP 相关

MCP 服务向 AI 客户端提供政策搜索以及文档和条款读取功能。工具包括 search_policies、get_clause、list_documents 和 get_document。

配置

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

服务地址https://mcp.dpolens.com/
一键复制安装命令
Claude CodeTerminal
Cursor.cursor/mcp.json
VS Code.vscode/mcp.json
Claude Desktopclaude_desktop_config.json
Windsurf~/.codeium/windsurf/mcp_config.json

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

工具

详细介绍



DPOLens

DPOLens 是一个开源 MCP 服务,可将贵组织的隐私政策和法律条文提供给 AI 编码助手,并附上精确、带版本信息的引文。

CI 许可证:Apache-2.0

快速开始 · 文档 · 连接 AI 助手 · 搜索评分 · 参与贡献

说明

预发布版本。 0.1.0-rc.3 是 0.1.0 的候选发布版本,运行 docker compose up 时会下载镜像。在 1.0 发布之前,接口(HTTP API、包格式、数据库架构)可能会随时变更,恕不另行通知。 当前已有的功能中有详细说明;关注此代码库即可了解 0.1.0 的发布情况。

快速开始

你需要 Git、带 Compose 的 Docker,以及支持 MCP 的 AI 助手(Claude Code、Cursor 或 VS Code)。

git clone https://github.com/alkhatibdev/dpolens.git
cd dpolens

printf 'DPOLENS_OWNER_PASSWORD=%s\nDPOLENS_APP_PASSWORD=%s\n' \
  "$(openssl rand -hex 24)" "$(openssl rand -hex 24)" > .env

docker compose up -d
docker compose exec api dpolens init

init 会要求你提供电子邮箱、姓名、密码,以及适用于贵组织的法律。然后登录 http://localhost:8080 的仪表板,在 Tokens 下创建令牌,并使用该令牌将 AI 助手连接到 http://localhost:8765/mcp。 快速开始包含全部步骤; 连接 AI 助手介绍了 Claude Code、Cursor 和 VS Code 的配置。

为什么要做这个项目

大多数星期里,你都会编写涉及他人个人数据的代码。你为了调试问题而记录电子邮箱。你新增一个电话号码列。你决定删除的账户要在数据库中保留九十天,因为你觉得九十天听起来差不多。

这些决定都有相应规则,组织也必须为违反规则承担责任。大多数开发者从未读过这些规则。我们不是律师,入职第一天也没人会把保留政策交给我们,而法律篇幅很长,写的不是给我们这类人看的。

如今,AI 助手编写了大量此类代码。它速度很快,语气也很肯定,却从未见过贵组织的政策。它对法律的了解只是训练时留下的模糊印象:听起来似乎正确,但远不足以据此采取行动。

因此,涉及个人数据的代码写得越来越多、越来越快,而编写它的工具对规则的了解甚至不如你。

DPOLens 的作用

它为 AI 助手提供了查询规则的途径,并返回确切的条文,而不是对条文的模糊记忆。

面向开发者。 DPOLens 运行 MCP 服务,让 AI 助手在你工作时进行查询。返回内容是条文原文,以及它的出处:所属文档、版本和该版本的生效日期。关于第 17 条的说法可以一键核实,关于贵组织保留政策的说法也终于可以核实。

面向 DPO、法务和政策负责人。 提供一个 Web 仪表板,可上传政策、检查解析结果、发布不可变版本、选择适用法律,以及查看日志。

它有两点胜过直接询问模型:

  1. 它了解贵组织自己的政策:这是通用模型无法了解的内容,无论模型变得多么强大。
  2. 它提供真实引文:引文摘自带版本信息的来源,并标注信任等级,而不是模型对某个条款编号的记忆。

计划纳入 v0.1

  • 使用 docker compose up,无需任何 API 密钥,也无需任何大模型。搜索在容器内使用小型多语言嵌入模型,通过 CPU 运行
  • 将法律作为数据包,首次启动时加载包含示例组织政策的数据包:目前支持 GDPR 和 UAE PDPL,后续会随着更多数据包发布而增加
  • MCP 服务:search_policies、get_clause、list_documents、get_document, 并提供适用于 Claude Code 和 Cursor 的一键设置
  • 仪表板:上传、审核和发布 DOCX 与 Markdown 政策,并提供版本 历史记录和差异对比
  • 两种日志:一份防篡改的治理日志,以及一份移除 PII 的查询日志,展示政策如何被查阅,同时避免演变成对开发者的监控
  • 公布评测分数,并在 CI 中衡量搜索是否确实找到了正确 条款,包括阿拉伯语和跨语言问题

阿拉伯语和英语都同等重要。UAE PDPL 的权威文本为阿拉伯语版,并且是首发数据包。

它真的能找到正确的条款吗?

法律留出问题recall@595% 置信区间
GDPR30 个,来自 ICO 和 EDPB 指南0.770.60 至 0.90
阿联酋的数据保护法19 个主题,每个主题分别用阿拉伯语和英语提问0.550.37 至 0.74
用阿拉伯语提问的 GDPR 问题相同的 30 个问题,用阿拉伯语提问0.300.13 至 0.47

以上数据使用 multilingual-e5-small 和 convex fusion 测得,测量日期为 2026 年 10 月 14 日。这意味着对于 GDPR,指南所指向的条款有 77% 的时候出现在前五个答案中。这并不意味着 DPOLens 能正确回答 77% 的隐私问题。仅用阿拉伯语提问时,阿联酋法律的得分为 0.42;用英语提问时为 0.68。GDPR 没有阿拉伯语文本,因此关于 GDPR 的阿拉伯语问题必须跨语言检索,找到对应条款的概率要低得多。 evals/retrieval.md 介绍了测量方法、所有受测配置,以及供你自行复现这些数据的命令。

AI 助手真的会使用它吗?

在涉及个人数据的任务中,Claude Code 搭配 DPOLens 插件,在 36 次运行中的 36 次 都会先搜索再编写代码;在不涉及个人数据的任务中,这一比例为 45 次运行中的 3 次:共 30 个留出任务,每个任务运行三次,使用 Claude Code 2.1.288 和 claude-sonnet-5-5,测量日期为 2026 年 10 月 8 日和 9 日。

这意味着,当被要求存储司机核验过的 ID,或将客户的电子邮件添加到分析事件中时,它每次都会先查阅规则再修改代码;而当被要求对产品列表排序或添加深色主题时,它不会进行搜索。这并不意味着每个 AI 助手都会如此:只有 Claude Code 经过了测量,而且某项任务是否应触发搜索,取决于判断;每项任务旁边都记录了相应判断。evals/trigger-test.md 介绍了测量方法、任务,以及供你自行运行测试的命令。

目前已有的内容

以下命令是命令行,可在容器内运行(docker compose exec api dpolens ...),也可在源码检出目录中运行。

GDPR 已从 EUR-Lex 的结构化 XML 转换为可供审核的数据包,其中包含 99 条条款和 173 条序言,并作为不可变版本加载到 Postgres 中,建立了 BM25 和语义搜索索引,现已可供搜索:

dpolens pack load packs/gdpr
dpolens index build
dpolens search "how long can we keep a deleted user's data"
dpolens clause show gdpr:art-17 --subtree

阿联酋《个人数据保护法》(2021 年第(45)号联邦法令)数据包包含 31 条阿拉伯语条款(以阿拉伯语为准)及其官方英语译文。两种文本使用相同的键,因此引用在两种语言中都指向同一条款;用英语阅读条款时,也会注明以阿拉伯语版本为准,并附上阿拉伯语原文:

dpolens pack load packs/uae-pdpl
dpolens clause show uae-pdpl:art-23 --lang en

文本依据阿联酋立法门户网站上的官方 PDF,每条条款都经过对照核查:英语逐词核对,阿拉伯语逐字核对。 packs/uae-pdpl/SOURCE.md 说明了具体方法,并列出每份 PDF 的校验和。 法律会按自己的时间表推出新版本,与 DPOLens 的发布相互独立,每个版本都会作为数据包存档发布。dpolens pack update 会显示哪些法律有更新版本,而 dpolens pack update gdpr 会在原版本旁加载新版本,因此引用旧文本时仍会显示该文本。无法连接互联网的服务则改为导入存档。除非有人执行这些操作之一(包括升级 DPOLens),否则实例所用法律的版本不会改变;每个已加载的版本都会写入治理日志。法律及其版本 说明了具体方法:

dpolens pack update
dpolens pack update gdpr
dpolens pack import dpolens-pack-gdpr-2026.2.tar.gz

管理员会选择适用于组织的法律。搜索范围包括这些法律和组织自己的政策,不会涉及其他内容。因此,不在欧盟且在欧盟没有客户的公司,永远不会得到基于 GDPR 的回答;AI 助手询问 GDPR 时,也会被告知它不是组织采用的法律。在有人选择之前,不会搜索任何内容。仪表板会在有权选择的人登录时询问其选择;之后可通过 Selected laws 更改选择,并将随升级新增的法律标记为新法律。每次更改都会写入治理日志,命令行也能执行此操作:

dpolens laws list
dpolens laws select uae-pdpl
dpolens search "can we send customer data abroad"

组织自己的政策(Word 或 Markdown 文件)也会被读取并拆分为条款,每条都有一个键和逐字保留的文本。条款树并非由 AI 模型生成,而是根据文件的标题样式、自动编号和列表,再结合条款类型以及文本中写出的编号生成;如果这些内容不一致,系统会标记出来,交由审核人员处理,而不会自行猜测。表格中的每一行都会成为一条条款;封面页、目录页或版本表则会被排除在搜索范围之外。命令行可显示你电脑上文件的解析结果,不会存储任何内容:

dpolens policy parse retention-policy.docx --slug acme-retention

上传后,政策会成为草稿,不会参与搜索。有人会对照文件检查其标记;仪表板会在条款旁显示读取文件时的内容,以便处理这些标记。如果解析器错误读取了某条条款,审核人员可以在不改动任何文字的情况下修正:拆分条款、与前一条合并、将其设为标题或正文,或者调整其层级。发布后,版本将永不更改:自生效之日起,搜索既可按原文查找,也可在工作器完成嵌入后按含义查找。新版本会逐条与前一版本进行匹配;对于需要人工确认的匹配(例如条款编号发生变化),系统会标记出来供审核人员处理。审核人员既可以确认匹配,也可以指出匹配有误;还可以指出某条新条款与一条不再沿用的旧条款其实是同一规则。当两条条款的大部分文字相同时,审核流程会询问是否属于这种情况。条款键沿用政策中印刷的编号,引用会注明版本,因此,引用版本 1 中的 4.2 时,仍会显示所引用的规则,并指出该规则在当前生效版本中的位置。库会列出每个版本,可查看任一版本当时的内容,也可比较任意两个版本。每个版本的源文件都会保留;每次读取时都会核对其哈希值。归档政策会将其移出搜索范围,但不会删除任何内容。每个步骤都会写入治理日志:

dpolens policy upload retention-policy.docx --slug acme-retention --effective-date 2026-01-01
dpolens policy draft acme-retention
dpolens policy fix acme-retention 4.1 split --before "4.2"
dpolens policy accept acme-retention --all
dpolens policy publish acme-retention
dpolens policy revise acme-retention retention-policy-v2.docx --effective-date 2026-07-01
dpolens policy compare acme-retention 1 2

新实例会附带一份虚构的示例政策,因此在导入自己的政策前,就有内容可供搜索。

自有政策 介绍了条款、键和标记的判定方式,以及政策从上传到归档的处理过程。

用户、角色和治理日志是所有界面进行身份验证和记录的依据。仪表板可管理人员、角色和令牌,也可检查和导出治理日志;命令行同样可以执行这些操作。在终端中运行命令时,系统会询问尚未提供的内容;角色和权限等列表可用方向键和空格键选择;脚本则可通过相同的标志传入参数:

dpolens user create --email [email protected] --name "Your Name" --role Admin
dpolens user set-password [email protected]
dpolens token create --email [email protected] --name laptop --permission documents.read
dpolens role list
dpolens governance verify
dpolens governance export ./export-2026-09

权限是在代码中固定定义的列表,而角色是数据,因此组织可以自行创建“Legal”,无需等待发布。Admin、DPO 和 Developer 是预设角色,并且可以编辑;没有任何预设角色可以查看是谁提出了问题,包括 Admin 在内:必须主动为某个角色授予这项权限。管理员通过为角色启用这项权限来授予访问权,治理日志会记录由谁在何时执行了操作。

治理日志采用只追加和哈希链设计。应用程序的数据库角色对其仅拥有 INSERT 和 SELECT 权限,不拥有其他权限;无论由谁操作,触发器都会拒绝更新、删除或截断操作;导出文件无需 DPOLens 参与,即可单独验证。docs/governance-log.md 是规范,其中包含哈希计算方法,因此可以使用本项目之外的工具检查导出内容。

令牌只显示一次,存储时仅保留其 SHA-256 哈希值。令牌可执行的操作在创建时固定,此后只能收窄:每次请求都会将令牌的权限与其所有者当时拥有的权限取交集,因此,用户失去某个角色或被停用后,其名下所有令牌都会立即受到限制。

HTTP API 是所有界面共用的入口:

uvicorn --factory dpolens.api.app:create_app

curl -X POST http://localhost:8000/v1/search \
  -H "Authorization: Bearer dpol_..." \
  -H "Content-Type: application/json" \
  -d '{"query": "how long can we keep a deleted user'"'"'s data"}'

搜索、单个条款、条款及其子树,以及当前生效的文件;每条结果都包含原文、编号、版本、该版本的生效日期;对于法律,还会包含其所属资料包以及该资料包的核验进度。政策也通过该 API 上传、审核、发布和归档,文件作为请求正文发送。失败时会返回 RFC 9457 问题详情。HTTP API 介绍了身份验证、错误格式和所有路由,而 docs/openapi.json 本身就是 API 契约。

每次调用都会在查询日志中写入一条记录,问题中的个人数据会被移除,且实例会自行强制执行到期清理。遥测数据绝不会包含问题原文。无法防止自身治理日志被改写的实例将拒绝提供服务。

MCP 服务是 AI 助手交互的界面:它提供四个工具、两个命令,以及指导助手在编写涉及个人数据的代码前先进行查询的指引。它不会将你的令牌作为自身凭据接收。它会向 API 查询令牌属于谁,然后使用自身凭据执行操作并注明你的身份,因此查询日志会将问题记录在你名下。MCP 服务 介绍了各项工具、提示词以及每次调用会记录的内容。

仪表板是同一 API 的客户端。用户使用电子邮件地址和密码登录,登录会话保存在 Cookie 中,页面脚本无法读取该 Cookie,其他网站也无法发送该 Cookie。会话在闲置 30 分钟后结束,最长持续 8 小时;每次登录都会记录在治理日志中。资料库会列出每份文件、当前生效的版本以及其具有优先效力的语言;阅读法律时,每次仅显示一种语言的条款。具有两种语言版本的法律会以仪表板所用语言打开,并提供切换到另一种语言的选项,浏览器会为该法律记住所选语言。复制任意编号时,都会得到与 MCP 服务提供给 AI 助手的引用格式相同的条款。搜索范围涵盖所选法律,并可一键限定为其中一部法律、选择日期或查看序言。 任何有权查看的人员都可以从“概览”开始:过去 7 天或 30 天提出了多少个问题,其中多少找到了仍然有效的条款、被引用最多的条款,以及未找到任何内容的问题;每个未命中的问题都可能对应一项尚待编写的政策。问题日志会显示每个问题存储时的原貌,并标出已移除个人数据的位置。除非你拥有查看提问者身份的权限,否则姓名会保持隐藏;每次查看都会记录在治理日志中。只有权查看自己问题的人员,只会看到自己的问题。治理日志以通俗易读的句子呈现,每次打开时都会检查其哈希链,并导出与 dpolens governance export 相同的文件。“设置”会显示实例的配置:问题的保留时长及移除哪些内容、会话何时结束、AI 助手连接到哪里,以及不会使用任何 AI 提供商。 配置列出了每项设置及其更改方法。界面为英文,但设计时考虑了阿拉伯语版本的适配,并且支持手机使用。每个版本的镜像都会发布,支持 amd64 和 arm64,并经过证明;docker compose up 会下载当前检出版本指定的镜像,只有尚未发布的版本才会从源代码构建。版本发布与升级说明了每个版本会发布什么,以及如何检查镜像是否在此处构建。

贡献

法律包是最重要的贡献,因为没有人能独自整理并验证每个司法辖区的隐私法律。有关范围、许可门槛、信任等级以及法律包拉取请求的要求,请参阅 CONTRIBUTING.md。

安全问题应私下报告,切勿在 issue 中披露:SECURITY.md 说明了具体做法。

许可证

代码采用 Apache-2.0 许可证,贡献者须通过 DCO 签署认证,无 CLA。packs/ 使用独立许可证:法律文本沿用其来源的许可证,并在每个包中声明;围绕法律文本的结构化工作(条款键、树结构、评估问题)则采用 CC-BY-4.0 许可证。

评论

支持 Markdown

第一次接触 MCP?

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

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