phi-redact-mcp
umbryn-mcp
LLMに届く前にテキストからPII/PHIをマスキングするMCPサーバー — セルフホスト、フェイルクローズ、HIPAA対応。
規制対象領域でLLMやエージェントのパイプラインを構築しているチームには、ペイロードがモデルプロバイダーのインフラに入る前にPHI/PIIを取り除く、クリーンでドロップイン可能な手段がありません。umbryn-mcp はその境界です。redact、restore、detect という3つのMCPツールを提供し、機密値を元に戻せるプレースホルダーに置き換え、あなたが管理するインフラ内で完全に実行され、検出があいまいな場合はデータを漏らさずにリクエストをブロックします。
redact("Patient MRN: 1234567, provider NPI 1234567893, ssn 078-05-1120, john.doe@example.com")
redacted_text (safe to send to the model):
"Patient MRN: [MEDICAL_RECORD_NUMBER_1], provider NPI [NPI_1], ssn [US_SSN_1], [EMAIL_ADDRESS_1]"
token_map (kept local, never sent to the model):
[MEDICAL_RECORD_NUMBER_1] → 1234567
[NPI_1] → 1234567893
[US_SSN_1] → 078-05-1120
[EMAIL_ADDRESS_1] → john.doe@example.comマスキング済みテキストをモデルに送信し、token_map はローカルに保持し、後から restore を呼び出して結果を復元してください。ラウンドトリップはバイト単位で正確で、プロパティベースのテストによって実証されています。
存在理由
PHI/PIIマスキングのMCP領域は実在しますが、十分に整備されていません。既存の選択肢は、HIPAA固有の検出機能を持たない薄いPresidioラッパーであり、さらに重要なことに、検出失敗がリクエストをブロックして生データを黙って通すことを防ぐ保証がありません。そのため、チームは自前の境界を実装するか、生データをプロバイダーに送信してBAA(ビジネスアソシエイト契約)に頼るという、実際のコンプライアンスインシデントを引き起こす設計時の誤りに陥ります。
素朴なPresidioラッパー | アプリ内の正規表現 | Cloud DLP API | umbryn-mcp | |
ドロップインMCPツール | 場合による | ❌ | ❌ | ✅ |
不確実な検出に対するフェイルクローズ | ❌ | ❌ | ❌ | ✅ |
HIPAA識別子(NPI、DEA、MBI、MRN、CLIA) | ❌ | 部分的 | 部分的 | ✅ |
元に戻せる(復元) | まれに | 手動 | 一部 | ✅ |
セルフホストで実行し、外部への流出ゼロ | ✅ | ✅ | ❌(外部送信) | ✅ |
重い依存関係なしで動作 | ❌(spaCy必要) | ✅ | n/a | ✅(正規表現エンジン) |
任意のML NER(人名、住所) | ✅ | ✅ | ✅ | ✅( |
作られた理由: MCPは急速に主流化しました。Claude、Cursor、ChatGPT、そして何千ものサーバーに第一級のサポートが組み込まれる一方、PHI/PIIマスキングの領域は、ほとんどメンテナンスされていない複数のラッパーだけが残されていました。このプロジェクトは、単一の誠実で監査可能な円い、フェイルクローズの境界を提供し、依存するマスキングロジックをブラックボックスではなく完全に検査可能な形にすることで、そのギャップを埋めます。
Related MCP server: pii-anonymizer
特徴
3つのツール、1つの境界 —
redact(→ マスキング済みテキスト + 元に戻せるtoken_map)、restore(→ 元のテキスト)、detect(→ 検出エリアのみで変更なし)。構造上のフェイルクローズ — 検出エラーが発生した場合、またはいずれかの検出結果が信頼度しきい値を下回った場合、呼び出しは型付きエラーを返します。不確実さは実行を停止します。検出できた部分だけマスキングして残りを通過させるということはしません。
HIPAA対応検出 — チェックサム検証済みのNPIとDEA、位置情報型のMedicare MBI、コンテキストを使ったMRN、CLIラボIDに加え、標準的なPII(メール、電話、SSN、クレジットカード、IBAN、IP、URL)。
ゼロエグレス、セルフホスト — デフォルトエンジンは純粋な正規表現+チェックサムで、**ネットワーク呼び出しも重い依存関係もありません。**Pythonが動く場所ならどこにでもインストールできます。
任意のMLアップグレード —
pip install "umbryn-mcp[presidio]"を実行するだけで、PERSON/LOCATIONのNERをためのMicrosoft Presidio と spaCy が自動で追加されます。元に戻せて決定的 — 衝突のない型付きプレースホルダーにより、
restore(redact(x)) == xが任意の入力に対して保証されます。同じ入力+設定なら常に同じ出力になります。
使用すべき場合(そして使用すべきでない場合)
umbryn-mcp を使うべき場合:
医療、臨床、財務、またはユーザー生成テキストをサードパーティのLLM APIに送信し、そのプロバイダーのインフラやログにPHI/PIIを残さない必要がある場合。
規制領域でAIエージェントまたはMCPのパイプラインを構築していて、ワンツコールで差し込むことができサニタイズ境界が必要な場合。
後続のステップが機能するように、復元して化できるマスキングが必要な場合:
redact→ モデルへ送信 →restore。方が行で監査できるセルフホストのゼロエグレスな検出器を必要する場合。
電子メールや名前だけでなく、HIPAA固有の識別子(NPI、DEA、Medicare MBI、MRN、CLIA)が必要な場合。
それ以外のケースでは別の方法を選ぶべき:
不可逆的な非識別化/匿名化(トークン化、k-匿名化)が必要 – ここのマスキングは仕様として元に戻せます。
テキスト以外のデータ(画像、音声、PDF、データベース行)をマスキングする必要がある場合 — 対象はテキストのみです。
認定されたコンプライアンス製品を求めています — これは1つの技術的制御であって、コンプライアンスプログラム全体ではありません(【【どこー-----【「ドキュメント」と正直な限界]参照)。
透過プロキシとして、リクエスト経路内のすべてを自動マスキングしたい場合 — v1は明示的なツール呼び出しです。プロキシモードはロードマップにあります。
100%の再現性を保証が必要な場合 — このプロジェクトを含め、検出器はそれを保証できません。
クイックスタート(< 60秒)
pip install umbryn-mcp # zero heavy deps; runs immediately次に、お使いのMCPクライアントに登録します。
Claude Desktop / Claude Code(claude_desktop_config.json、または claude mcp add umbryn-mcp -- umbryn-mcp):
{
"mcpServers": {
"umbryn-mcp": {
"command": "umbryn-mcp"
}
}
}Cursor(.cursor/mcp.json)とVS Codeも同じ形です — すぐコピーできる設定はexamples/を参照してください。
名前や住所の検出も必要ですか?
pip install "umbryn-mcp[presidio]"
python -m spacy download en_core_web_lgサーバーはPresidioを自動検出してアップグレードします — 設定変更は必要不要です。(UMBRYN_ENGINE=regex を設定すると依存不要のエンジンを使用、=presidio にするとML応答を必須にします。)
動作のしくみ
stdioを介してツール呼び出しが届きます。Redactor コアが設定された検出エンジンを実行し、重なりを決定論的に解決し、フェイルクローズのしきい値チェックを適用して、検出されたスパンを復元可能な型付きプレースホルダーに置き換えます。あなたが実行している境界の外に送信されるのは、マスキング済みテキストだけです。
flowchart LR
A[MCP client<br/>Claude · Cursor · agent] -- redact / restore / detect --> B[umbryn-mcp<br/>stdio server]
B --> C[Redactor core<br/>fail-closed · reversible]
C --> D{Detection engine}
D -->|default, zero deps| E[Regex + checksums]
D -->|optional| F[Presidio + spaCy NER]
C -. scrubbed text .-> A
A -- scrubbed text only --> G[(LLM / downstream)]Redactor コアは小さな DetectionEngine インターフェースにだけ依存し、PresidioやMCPに直接依存することはありません。生データと検出エンジンは、あなたが実行する境界内に留まります。外界に出るのはマスキング済みテキストのみです。詳細は docs/ARCHITECTURE.md と docs/THREAT_MODEL.md を参照してください。
ツール
redact(text) → { redacted_text, token_map, entities }
検出されたPHI/PIIを、[NPI_1] のような型付きプレースホルダーに置き換えます。token_mapは、各プレースホルダーを元の値にマップします — こちらは必ずローカルに保持し、モデルに送信しないでください。 entitiesには、検出されたエンティティのタイプ/スパン/スコアが監査用に表示されます。
restore(redacted_text, token_map) → { text }
マスキングを解除し、元のテキストを正確に復元します。プレースホルダーが残っているモデル出力にも安全に呼び出せます。
detect(text) → { entities, count }
テキストを変更せずに、検出されたエンティティ(タイプ、スパン、信頼度)を報告します。redactと違って低信頼度のヒットを報告して端末を開けたままにするため、パイプラインで境界を信頼する前にカバレッジを確認できます。
実際のパイプラインでの使い方
パターンは redact → モデル → restore で、token_mapは開下手元に置きます。
モデルの前でスクラブ。
redact(user_text)を呼びます。LLMにはredacted_textだけを渡します。token_mapはプロセス内に保持し、元の入力と同じように機密扱いにしてください。モデに入れさえてはなりません。モデルにプレースホルダーを扱わせる。 モデルには
[NPI_1]、[US_SSN_1]などが表示されます — 考えられる中立的なトークンで、推論してそのままエコーバックできます。後で復元する。
restore(model_output, token_map)を呼び出して、モデルの応答がユーザーやそのDBに届く前に、実際の値に戻します。ブロックの処理。
redactが[LOW_CONFIDENCE]や[DETECTION_ERROR]を返した場合、境界がデータ漏出を防いだことになります。そのエラーを可視化し、入力を厳しくするかリスクを下げるかを実行し、でも生テキストを先のまま送らないでください。
パイプラインでその境界を本番でどう使うかは、まず代表的な(サンプルの)データで detect(sample_text) を呼び、何が検出されて何がされないかを確認し、しきい値(下記)を許容可能なリスクに合わせてチューニングしてください。
フェイルクローズの正確な動作
すべての redact 呼び出しは2つのしきい値を制御します:
detection_floor(デフォルト0.35) — 感度の境界。これを下回るシグナルはノイズとして扱われます。min_confidence(デフォルト0.5) — 信頼しきい値。
検出はフロアは超えたものの**min_confidence未満**のとき、その呼び出しはフェイルクローズモードになります。確かな部分だけを置き換えて不確実な部分を通すのではなく、[LOW_CONFIDENCE] エラーが返ります。エンジンの処理がエラーになったときは [DETECTION_ERROR] が返ります。いずれのエラーでもマスキング済みテキストを返しません。 両方のしきい値は設定可能です。
設定
すべて任意です。まともなデフォルトなので、設定ゼロで動作します。クライアントの env ブロックで設定します。
変数 | デフォルト | 意味 |
|
|
|
|
| 信頼しきい値。これを下回るとフェイルクローズ |
|
| これより下はノイズとして扱う |
|
| 超える入力は型付きエラーで拒否 |
|
| Presidio エンジンで使う spaCy モデル |
|
|
|
| (未設定) | JSON設定ファイルのパス(下記) |
設定ファイル
フラットな環境変数に収まらない設定は、UMBRYN_CONFIG で JSON ファイルを指定します。上記の値は環境変数がファイル設定より優先されるので、ファイルを共通のベースにして起動時だけをチューニングできます。ファイルが不正(JSONフォルト、未知のしきい値、コンパイルできない正規表現)の場合、静かにで落ちるのではなく、起動時にフェイルクローズします。
{
// Per-entity trust thresholds override min_confidence for that type.
"entity_thresholds": { "PHONE_NUMBER": 0.7, "IP_ADDRESS": 0.9 },
// Entity types to drop entirely — never detected, never redacted.
// (A privacy trade-off you're opting into: a disabled type can leak.)
"disabled_entities": ["URL"],
// Your own recognizers, no fork required. `validator` names a built-in
// check-digit function (luhn, npi, dea, iban, nhs) — config supplies data,
// never code.
"recognizers": [
{
"entity_type": "EMPLOYEE_ID",
"regex": "\\bEMP-\\d{6}\\b",
"base_score": 0.85,
"context": ["employee", "badge"],
"context_required": false
}
],
"audit_log": true
}コピーしてすぐ使えるサンプルは examples/umbryn_config.json にあります。
エンティティカバレッジ
Entity | Regex engine (default) | Presidio engine ( |
Email、電話番号、SSN、クレジットカード、IP、URL | ✅ | ✅ |
NPI(Luhn + 80840 チェックディジット) | ✅ | ✅ |
DEA(チェックディジット) | ✅ | ✅ |
Medicare MBI(位置型) | ✅ | ✅ |
MRN(文脈アンカー型) | ✅ | ✅ |
Medicare HICN(SSN + 受益者コード) | ✅ | ✅ |
CLIA 検査室番号 | ✅ | ✅ |
US ITIN(9XX レンジ構造) | ✅ | ✅ |
UK NHS 番号(mod-11 チェック) | ✅ | ✅ |
カナダの SIN(Luhn チェック) | ✅ | ✅ |
米国の運転免許証(コンテキストアンカー) | ✅ | ✅ |
IBAN(mod-97 / ISO 7064 チェック) | ✅ | ✅ |
氏名 | ❌ | ✅ (spaCy NER) |
住所 / 所在地 | ❌ | ✅ (spaCy NER) |
カスタム認識子(設定による正規表現 + チェックディジット) | ✅ | ✅ |
ベンチマーク
検出品質は主張ではなく測定されています。以下の数値は、デフォルト(依存関係ゼロ)エンジンを 合成評価コーパス に対して実行した結果です — 200 件の生成ドキュメント、約 1,800 のラベル付きスパン、チェックサムに失敗する類似文字列をディストラクタとして織り込み、精度を正直に保っています。python eval/run_eval.py --markdown で再現できます。
Entity | Precision | Recall | F1 | TP | FP | FN |
| 1.00 | 1.00 | 1.00 | 87 | 0 | 0 |
| 1.00 | 1.00 | 1.00 | 105 | 0 | 0 |
| 1.00 | 1.00 | 1.00 | 72 | 0 | 0 |
| 1.00 | 1.00 | 1.00 | 119 | 0 | 0 |
| 1.00 | 1.00 | 1.00 | 144 | 0 | 0 |
| 1.00 | 1.00 | 1.00 | 87 | 0 | 0 |
| 1.00 | 1.00 | 1.00 | 62 | 0 | 0 |
| 1.00 | 1.00 | 1.00 | 200 | 0 | 0 |
| 1.00 | 1.00 | 1.00 | 126 | 0 | 0 |
| 1.00 | 1.00 | 1.00 | 78 | 0 | 0 |
| 0.94 | 1.00 | 0.97 | 200 | 12 | 0 |
| 1.00 | 1.00 | 1.00 | 144 | 0 | 0 |
| 1.00 | 1.00 | 1.00 | 95 | 0 | 0 |
| 1.00 | 1.00 | 1.00 | 81 | 0 | 0 |
| 1.00 | 1.00 | 1.00 | 97 | 0 | 0 |
| 1.00 | 1.00 | 1.00 | 136 | 0 | 0 |
\* = HIPAA 関連識別子であり、CI 品質ゲートの対象です。ゲート対象セットの合計: 精度 0.99、再現率 1.00。 再現率が 0.90 未満または精度が 0.80 未満に低下すると、ゲートはビルドを失敗させます。(NPI の 12 件の誤検出は、たまたま Luhn/80840 チェックディジットを通過する類似の 10 桁の数字です — 意図的な、過剰編集に偏るフェイルセーフなバイアスです。)
これらは、クリーンな書式と近くのコンテキスト語を備えた合成の最良条件です。実際のテキストはもっと乱雑です。 これは回帰のガードレールであり、健全性チェックとして扱ってください。保証ではありません — 常に独自の代表的なデータで評価してください。
スコープと正直な限界
このツールは、ある境界で PHI/PII の露出を減らします。システムを「HIPAA 準拠」にするものではありません。 準拠は、システムと組織全体の特性です — そのポリシー、契約、アクセス制御、監査体制、そして人々 — 単一のライブラリの特性ではありません。umbryn-mcp を実行することは、準拠した設計の一部になり得ますが、認証でも、保証でも、ビジネスアソシエイト契約、リスク評価、または法律相談の代わりでもありません。
具体的には、このプロジェクトは以下を行いません: 100% の検出を保証する(どの検出器もそうではありません)、可逆的なマスキングを超えた非識別化、非テキストデータのカバー、v1 での透過プロキシとしての動作(マスキングは、配線する明示的なツール呼び出しによるものです)。完璧な検出器はありません — 依存する前に、自分の代表データで評価してください。完全な境界、前提、および残存リスクについては docs/THREAT_MODEL.md を、問題の報告については SECURITY.md を参照してください。
貢献方法
貢献は大歓迎です — ここは意図的に、初めてのオープンソース PR を出すのに親しみやすい場所であり、メンテナーは迅速に応答しようと努めています。
最も簡単で価値の高い貢献: 新しい識別子の検出認識器(正規表現 + オプションのチェックディジットバリデータ + テスト)を追加することです。add-a-recognizer イシューフォーム は仕様を兼ねており、CONTRIBUTING.md が 6 つのステップを説明しています。
その他の良い貢献方法: ドキュメントの改善、テストケースやクライアント設定例の追加、または ロードマップ から何かを選ぶことです。good first issues を閲覧するか、提案するためにイシューを開いてください。
git clone https://github.com/Rinava/umbryn-mcp && cd umbryn-mcp
pip install -e ".[dev]"
pytest # fast invariant suite (Presidio faked, sub-second)
ruff check . && mypy src/umbryn_mcp
python eval/run_eval.py完全なガイド — 開発セットアップ、規約、およびフィクスチャの実 PHI 禁止ルール — は CONTRIBUTING.md にあります。貢献することで、あなたの作業が MIT ライセンスであることに同意したことになります。
ライセンス
MIT — Presidio と一致し、再利用を最大化します。Microsoft Presidio(オプション)と MCP Python SDK で構築されています。
umbryn-mcp は Kenda の背後にあるチームによって構築されています。
Available Tools
3 toolsdetectDetect PHI/PIIA
Report the PHI/PII entities found in text without modifying it.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | Text to inspect |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | Yes | Number of entities found |
| entities | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description bears full responsibility. It explicitly states 'without modifying it', which signals non-destructive behavior. However, it lacks details about output format, error handling, or what entities are considered PHI/PII, leaving some behavioral ambiguity.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence of 10 words that front-loads the key purpose. Every word earns its place, with no redundancy or unnecessary detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with one parameter and an output schema (context signal), the description covers the core functionality and non-modifying behavior. It could mention expected output shape or limitations, but the presence of an output schema mitigates the need for extensive return value details.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with a clear parameter description 'Text to inspect'. The description adds context about PHI/PII entities, but this aligns with the tool's purpose rather than enhancing parameter understanding. The schema already sufficiently explains the parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool reports PHI/PII entities without modifying text. It distinguishes itself from sibling tools 'redact' and 'restore' by explicitly noting the non-modifying nature, making its purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not provide explicit guidance on when to use this tool versus the sibling tools 'redact' and 'restore'. While the context implies detection is a prerequisite for redaction, no direct usage instructions or alternatives are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
redactRedact PHI/PIIA
Replace PHI/PII in text with reversible typed placeholders.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | Text to scrub |
Output Schema
| Name | Required | Description |
|---|---|---|
| entities | Yes | What was redacted, for auditing |
| token_map | Yes | placeholder -> original value; keep local, do NOT send to the model |
| redacted_text | Yes | Text with PHI/PII replaced by typed placeholders |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description bears full burden. It discloses that redaction is reversible and uses typed placeholders, but does not elaborate on side effects, permission requirements, or output format details.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence that communicates the core functionality. It is front-loaded and free of superfluous content, though it could benefit from additional context.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple tool (one required parameter, output schema exists), the description provides sufficient context about the redaction operation and its reversible nature. It complements the siblings without needing extra details.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema covers 100% of parameters with a clear 'text' parameter description. The tool description adds minimal extra meaning beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly specifies the action ('Replace'), the resource ('PHI/PII in text'), and the nature of the output ('reversible typed placeholders'). It effectively distinguishes from sibling tools 'detect' and 'restore' by implying the redaction step.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus its siblings ('detect' for identification, 'restore' for reversal). It omits prerequisites, exclusions, or typical workflow context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
restoreRestore redacted textB
Reverse a redaction using its token map, recovering the original text.
| Name | Required | Description | Default |
|---|---|---|---|
| token_map | Yes | placeholder -> original value | |
| redacted_text | Yes | Text containing placeholders |
Output Schema
| Name | Required | Description |
|---|---|---|
| text | Yes | The rehydrated original text |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description must disclose behavioral traits. It only states the core function without mentioning side effects, required permissions, error cases, or behavior when token map is incomplete.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that is clear and efficient, but it could be more structured with separate sections for purpose and usage.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given full schema coverage and an output schema, the description is adequate for a simple tool, but it lacks usage guidelines and behavioral transparency, which are gaps for completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description reuses the schema descriptions for both parameters, adding no additional meaning beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's action ('Reverse'), the resource ('a redaction'), and the method ('using its token map, recovering the original text'). This distinguishes it from sibling tools 'detect' and 'redact'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when you have a redacted text and token map to restore, but it does not explicitly state when to use this tool versus alternatives, nor does it provide prerequisites or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
3 tool updates
v0.1.0- First observed
detect - First observed
redact - First observed
restore
TDQS
Scored across 3 tools
Each tool has a distinct and non-overlapping purpose: detect finds entities, redact replaces them, and restore reverses the redaction. No ambiguity.
All tool names are single verbs (detect, redact, restore) following a consistent pattern, making them easily predictable.
Three tools exactly cover the full PHI redaction workflow (detect, redact, restore) without unnecessary extras or missing steps.
The tool set provides a complete pipeline: detection, redaction with reversible placeholders, and restoration. No obvious gaps for the stated purpose.
Maintenance
Related MCP Connectors
MCP server for detecting and redacting PII (Personally Identifiable Information) in PDF documents.
HealthGuard - 12-tool health/medical AI safety MCP: PII redaction, HIPAA, GDPR Art.9.
Stateless PII redaction over MCP/REST. Free ≤1000 words or $0.01/call; file upload supported.
Hosted MCP server exposing US hospital procedure cost data to AI assistants
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceAn MCP proxy that pseudo-anonymizes PII before data reaches external AI providers like Claude, ChatGPT, or Gemini.18MIT
- FlicenseNot gradedqualityDmaintenanceMCP server for automatic detection and redaction of PII in text, with anonymization and deanonymization capabilities, all local processing.1-
- AlicenseAqualityCmaintenanceMCP server and CLI for detecting, redacting, and auditing PHI in medical text before it is sent to AI agents, with tools for scan, redact, audit, and validate operations.4MIT
- AlicenseAqualityCmaintenanceMCP server and CLI for detecting, redacting, and auditing PHI in medical text before it reaches AI agents.4MIT