mcpField
D
Deliverd Screen

Deliverd Screen

本地服务
deliverd.dev安全1今天更新

关于 Deliverd Screen

Deliverd Screen 是供团队和开发者在将提示词发送给 AI 模型前检查文本的本地工具包。它可检测个人信息、机密和自定义词项,以可还原的占位符替换匹配内容,并提供 MCP 工具、命令行及集成方式。

主要功能

  1. 01检测个人信息和机密
  2. 02用可还原占位符替换匹配内容
  3. 03添加自定义机密词项
  4. 04提供命令行及提交前或 CI 检查
  5. 05集成 Vercel AI SDK 和可选 Purview

适用场景

  1. 01发送提示词前替换其中的身份信息
  2. 02通过 MCP 避免机密进入 Agent 上下文
  3. 03在提交前或 CI 中检查文档
  4. 04应用自定义词项和可选的 Purview 规则

MCP 相关

MCP 服务提供 `screen_text` 工具,返回判定结果和脱敏文本,不会返回被替换的值。配置后也可执行可选的 Microsoft Purview 检查。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"deliverd-dev-deliverd-screen": {
"command": "npx",
"args": [
"-y",
"@deliverd/screen"
]
}
}
}
启动命令npx -y @deliverd/screen

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
npm@deliverd/screen0.2.0

工具

1

收录的工具列表 · 更新于 3 天前

参数类型必填说明
textstring是要检查的文本。
termsarray否不要发送的自定义词语:clients、code names。
personalDataboolean否目标是否可以接收个人数据。默认值为 false。
classificationenum否目标可以接收的最高分类级别。默认值为 internal。public | internal | confidential | restricted

详细介绍

Deliverd Screen

发送前检查每条提示词。 在文本发送给 AI 模型之前,查找并遮蔽个人数据、秘密信息和你自己的机密术语。

  • 本地运行。 无需账户、密钥或网络调用。文本不会离开你的进程,除非你启用可选的 Microsoft Purview 检查;此时文本只会发送到你自己的 Microsoft 租户。
  • 可还原。 值会替换为占位符,例如 [EMAIL_1](同一个值在全文中会使用同一个占位符),而 restore() 会在模型的回答中将其还原。
  • 自行提供用于识别人名的模型。 模式无法查找人名,但模型可以。可接入 Hugging Face token 分类器、Presidio,或任何输出格式相同的模型。
  • 无依赖项。 MIT。
npm install @deliverd/screen
import { screen } from "@deliverd/screen";

const checked = await screen("Reply to [email protected] about IBAN IE29AIBK93115212345678");
checked.verdict; // "redact"
checked.text;    // "Reply to [EMAIL_1] about IBAN [IBAN_1]"

const answer = await model.generate(checked.text);
checked.restore(answer); // the real values, back in the answer

可查找的内容

电子邮件地址、电话号码、IBAN、支付卡号(经 Luhn 算法校验)、英国 National Insurance 号码、爱尔兰 PPS 号码(校验字符)、美国 Social Security 号码、IP 地址(v4 和 v6)、出生日期、API 密钥和令牌(AWS、GitHub、Slack、Stripe、Anthropic、OpenAI、Google、JWT 等)、私钥、连接字符串和 .env 文件中的密码、标记健康或宗教等特殊类别数据的词语,以及你自己的 terms。

四种判定结果

默认情况下,模型可以接收内部数据,但不能接收个人数据。对于已获准接收更多数据的模型,可传入 allow: { personalData: true, classification: "confidential" }。

判定结果操作
allow发送 text,即原文。
redact发送 text,其中无法发送给模型的内容已替换为占位符。
ask由人工决定(默认适用于特殊类别数据)。allowed 为 false。
deny不发送任何内容。默认拒绝秘密信息。

人名:接入模型

import { pipeline } from "@huggingface/transformers";
import { tokenClassifier, presidio } from "@deliverd/screen/adapters";

const ner = await pipeline("token-classification", "Xenova/bert-base-NER");
const checked = await screen(prompt, { detectors: [tokenClassifier((t) => ner(t))] });

// or a Presidio analyzer you run yourself:
// docker run -p 5002:3000 mcr.microsoft.com/presidio-analyzer
await screen(prompt, { detectors: [presidio({ url: "http://localhost:5002" })] });

检测器是一个将文本转换为 { kind, start, end } 区间的函数,因此任何模型都适用,包括 Perplexity 的 PII-Tracer 和 GLiNER。发布模型前,请检查其许可证。在文本当前所在的位置运行检测器:如果检测器会将文本发送到托管服务,那么文本已经被发送出去了。

Vercel AI SDK

import { generateText, wrapLanguageModel } from "ai";
import { screenMiddleware } from "@deliverd/screen/ai-sdk";

const model = wrapLanguageModel({ model: openai("gpt-5"), middleware: screenMiddleware() });
const { text } = await generateText({ model, prompt });

中间件会一次性检查整段对话,因此同一个值在不同消息中会使用同一个占位符。它会还原回答,包括以流式方式接收、且占位符被拆分到多个数据块中的回答。遇到 deny 或 ask 时,它会抛出 ScreenBlockedError,且不会调用模型。默认适用于 AI SDK 7;对于 AI SDK 6,请传入 specificationVersion: "v3"。

CLI、提交前检查和 CI

cat prompt.txt | npx @deliverd/screen --redact   # the redacted text
npx @deliverd/screen --json notes.txt            # kinds and offsets, never values
npx @deliverd/screen --fail evals/*.jsonl        # exit 1 if anything is found
npx @deliverd/screen --terms clients.txt doc.md  # your own words, one per line

在 GitHub Actions 中,使用 uses: deliverd-dev/deliverd-screen@v0 和 paths: 可运行相同的检查;对于 pre-commit,钩子 ID 为 deliverd-screen。两者都位于 deliverd-dev/deliverd-screen。

MCP

claude mcp add deliverd-screen -- npx -y @deliverd/screen mcp

这会为 Claude Code、Cursor 或 Codex 中的 Agent 提供一个工具 screen_text。它会返回判定结果和已遮蔽的文本,不会返回被替换的值,因此这些值不会通过该工具进入 Agent 的上下文。

Microsoft Purview

如果你的组织使用 Microsoft Purview 编写数据丢失防护规则,这些相同的规则也可以在此处应用于任何模型和任何工具。通过 Purview 检查后,以更严格的判定结果为准:Purview 阻止时会拒绝,警告时则需要确认。

import { entraAppToken, purviewCheck, screen } from "@deliverd/screen";

const purview = purviewCheck({
  token: entraAppToken({ tenantId, clientId, clientSecret }),
  userId: entraObjectIdOfThePerson,
  app: { name: "Claims assistant", entraAppId: clientId },
});
const checked = await screen(prompt, { purview });

这是此软件包中唯一会使用网络的功能,而且只有在你传入它时才会使用:文本会发送到 Microsoft Graph(processContent),且只会发送到你自己的租户。Entra 应用需要 Content.Process.All 权限,并且 DLP 规则必须使用 New-DlpComplianceRule 创建(Purview 不会将仅在门户中创建的规则应用于已在 Entra 中注册的应用)。

对于 MCP 服务,请设置 DELIVERD_PURVIEW_TENANT_ID、DELIVERD_PURVIEW_CLIENT_ID、DELIVERD_PURVIEW_CLIENT_SECRET 和 DELIVERD_PURVIEW_USER_ID(还可选择设置 DELIVERD_PURVIEW_ON_UNAVAILABLE:allow、ask 或 deny)。

一张网,而非证书

结构化标识符可以被可靠地检测出来。名称能否检测出来,取决于你接入的模型。经过脱敏的个人相关文本,在 GDPR 下仍属于个人数据。使用此工具可以减少发送的标识符,但绝不能将其视为提示词已清理干净的证明。

需要由人来决定时

库只能告诉你停止操作。Deliverd 的 Data Gate 会作出决定。@deliverd/sdk 中的 deliverd.screen() 会在你的机器上运行这些相同的检测器,只向 Deliverd 发送计数(“两个电子邮件地址、一个 IBAN”)。最终判定取决于你所在组织的策略,以及其 AI 注册表批准各个模型接收的内容。遇到 ask 时,它会通过 Slack、Teams 或手机向合适的人员提问,并记录每次检查。它使用相同的 detectors。

许可证

MIT。检测器与 Deliverd 的 SDK 共享,并统一使用一组测试向量:packages/conformance/screening.json。

评论

支持 Markdown

第一次接触 MCP?

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

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