Deliverd Screen について
Deliverd Screenは、AIモデルにプロンプトを送る前にテキストを検査する、チームや開発者向けのローカルパッケージです。個人情報や秘密情報、独自の用語を検出して復元可能なプレースホルダーに置き換え、MCPツールやCLI、各種連携を提供します。
主な機能
- 01個人情報と秘密情報の検出
- 02復元可能なプレースホルダーへの置換
- 03独自の機密用語の追加
- 04CLIとコミット前・CIでの検査
- 05Vercel AI SDKと任意のPurview連携
活用シーン
- 01モデルに送る前のプロンプトから識別情報を除去
- 02MCP経由で秘密情報がエージェントのコンテキストに入るのを防止
- 03コミット前やCIでドキュメントを検査
- 04独自用語と任意のPurviewルールを適用
MCP 対応
MCPサーバーは、判定結果とマスキング済みテキストを返す`screen_text`ツールを公開し、置換した値は返しません。設定時には任意でMicrosoft Purviewのチェックも実行できます。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
1掲載時のツール一覧 · 3 日前に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| text | string | はい | 確認するテキスト。 |
| terms | array | いいえ | 送信しない独自の言葉:clients、code names。 |
| personalData | boolean | いいえ | 送信先が個人データを受け取ってよいかどうか。デフォルトは false。 |
| classification | enum | いいえ | 送信先が受け取れる最高の機密区分。デフォルトは internal。public | internal | confidential | restricted |
詳細
Deliverd Screen
すべてのプロンプトを送信前にチェックします。 テキストが AI モデルに送られる前に、個人データや秘密情報、自分で指定した機密語句を見つけてマスキングします。
- ローカルで動作します。 アカウントもキーもネットワーク通信も不要です。オプションの Microsoft Purview チェックを有効にしない限り、テキストがプロセスの外に出ることはありません。有効にした場合も、送信先はご自身の Microsoft テナントのみです。
- 復元できます。 値は
[EMAIL_1]のようなプレースホルダーに置き換えられます(同じ値には全体を通じて同じプレースホルダーが使われます)。restore()を使うと、モデルの回答内で元に戻せます。 - 名前の検出には、お好きなモデルを利用できます。 パターンでは人名を検出できませんが、モデルなら検出できます。Hugging Face のトークン分類器、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 番号(チェック文字)、米国の社会保障番号、IP アドレス(v4 と v6)、生年月日、API キーとトークン(AWS、GitHub、Slack、Stripe、Anthropic、OpenAI、Google、JWT など)、秘密鍵、接続文字列や .env ファイル内のパスワード、健康や宗教などの特別カテゴリーのデータを示す語句、さらに独自の terms を検出します。
4 つの判定結果
デフォルトでは、モデルに内部データを渡せますが、個人データは渡せません。さらに許可したモデルには、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、pre-commit、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 のエージェントに screen_text という 1 つのツールを提供できます。このツールは判定結果とマスキング済みのテキストを返し、置き換えた値は返しません。そのため、ツールを通じて値がエージェントのコンテキストに入ることはありません。
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() は、これらと同じ検出器をお使いのマシンで実行し、件数(「メールアドレス2件、IBAN 1件」)のみを Deliverd に送信します。判定は、所属組織のポリシーと、AI 登録簿で各モデルへの送信が承認されている情報に基づいて返されます。ask の場合は、Slack、Teams、または担当者の電話に適切な相手への確認を送り、すべてのチェックを記録します。ここでも同じ detectors を使用します。
ライセンス
MIT。検出器は Deliverd の SDK と共有され、packages/conformance/screening.json の単一のテストベクトルに準拠しています。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。