Mcp Proxy For Pii Pseudo Anonymization について
MCP Concealは、MCPクライアントと対象サーバーの間で個人情報を検出し、外部AIプロバイダーへ届く前に仮名化するプロキシです。意味やデータ間の関係を保つよう、構造の近い偽データに置き換えます。
主な機能
- 01MCPリクエストとレスポンスの中継
- 02正規表現とLLMによる個人情報検出
- 03機微データを偽データに置換
- 04繰り返しデータの対応関係を維持
- 05検出プロンプトのカスタマイズ
活用シーン
- 01個人情報を含むデータの外部AI利用
- 02構造化・非構造化テキストのプライバシー処理
- 03繰り返すリクエストでの仮名の一貫性維持
MCP 対応
MCPクライアントと対象MCPサーバーを中継し、レスポンス内の個人情報を外部AIプロバイダーへ届く前に仮名化します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
MCP Conceal
Claude、ChatGPT、Gemini などの外部 AI プロバイダーにデータが届く前に、PII を仮名化する MCP プロキシです。
sequenceDiagram
participant C as AI Client (Claude)
participant P as MCP Conceal
participant S as Your MCP Server
C->>P: Request
P->>S: Request
S->>P: Response with PII
P->>P: PII Detection
P->>P: Pseudo-Anonymization
P->>P: Consistent Mapping
P->>C: Sanitized Response
MCP Conceal は、AI 分析に必要な意味やデータ間の関係を保つため、マスキングではなく仮名化を行います。例:[email protected] は [email protected] に置き換えられ、機密情報を保護しながら構造を維持します。
インストール
ビルド済みバイナリのダウンロード
- リリースページにアクセスします
- お使いのプラットフォーム用のバイナリをダウンロードします:
| プラットフォーム | バイナリ |
|---|---|
| Linux x64 | mcp-server-conceal-linux-amd64 |
| macOS Intel | mcp-server-conceal-macos-amd64 |
| macOS Apple Silicon | mcp-server-conceal-macos-aarch64 |
| Windows x64 | mcp-server-conceal-windows-amd64.exe |
- 実行可能にします:
chmod +x mcp-server-conceal-*(Linux/macOS) - PATH に追加します:
- Linux/macOS:
mv mcp-server-conceal-* /usr/local/bin/mcp-server-conceal - Windows:PATH 内のディレクトリに移動するか、現在のディレクトリを PATH に追加します
- Linux/macOS:
ソースからビルド
git clone https://github.com/gbrigandi/mcp-server-conceal
cd mcp-server-conceal
cargo build --release
バイナリの場所:target/release/mcp-server-conceal
クイックスタート
前提条件
LLM ベースの PII 検出のために Ollama をインストールします:
- Ollama をインストールします:ollama.ai
- モデルを取得します:
ollama pull llama3.2:3b - 確認します:
curl http://localhost:11434/api/version
基本的な使い方
最小構成の mcp-server-conceal.toml を作成します:
[detection]
mode = "regex_llm"
[llm]
model = "llama3.2:3b"
endpoint = "http://localhost:11434"
使用可能なすべてのオプションについては、設定セクションを参照してください。
プロキシとして実行します:
mcp-server-conceal \
--target-command python3 \
--target-args "my-mcp-server.py" \
--config mcp-server-conceal.toml
設定
設定の完全なリファレンス:
[detection]
mode = "regex_llm" # Detection strategy: regex, llm, regex_llm
enabled = true
confidence_threshold = 0.8 # Detection confidence threshold (0.0-1.0)
[detection.patterns]
email = "\\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Z|a-z]{2,}\\b"
phone = "\\b(?:\\+?1[-\\.\\s]?)?(?:\\(?[0-9]{3}\\)?[-\\.\\s]?)?[0-9]{3}[-\\.\\s]?[0-9]{4}\\b"
ssn = "\\b\\d{3}-\\d{2}-\\d{4}\\b"
credit_card = "\\b\\d{4}[-\\s]?\\d{4}[-\\s]?\\d{4}[-\\s]?\\d{4}\\b"
ip_address = "\\b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\b"
url = "https?://[^\\s/$.?#].[^\\s]*"
[faker]
locale = "en_US" # Locale for generating realistic fake PII data
seed = 12345 # Seed ensures consistent anonymization across restarts
consistency = true # Same real PII always maps to same fake data
[mapping]
database_path = "mappings.db" # SQLite database storing real-to-fake mappings
retention_days = 90 # Delete old mappings after N days
[llm]
model = "llama3.2:3b" # Ollama model for PII detection
endpoint = "http://localhost:11434"
timeout_seconds = 180
prompt_template = "default" # Template for PII detection prompts
[llm_cache]
enabled = true # Cache LLM detection results for performance
database_path = "llm_cache.db"
max_text_length = 2000
設定のガイドライン
検出設定:
confidence_threshold:値を低く(0.6)すると、より多くの PII を検出できますが、誤検出も増えます。値を高く(0.9)すると精度は上がりますが、一部の PII を見逃す可能性があります。mode:レイテンシと精度の要件に応じて選択します(以下の検出モードを参照)
Faker 設定:
locale:「en_US」はアメリカの氏名や住所、「en_GB」はイギリスの氏名や住所などを使用します。生成される偽データのリアリティに影響しますseed:同じ実データが同じ偽データに対応するように、デプロイ間で一貫した値を使用しますconsistency:データ間の関係を維持するため、常にtrueのままにしてください
マッピング設定:
retention_days:データの一貫性とストレージのバランスを取ります。期間を短く(30 日)するとストレージを削減できますが、繰り返し使われるデータの匿名化に一貫性がなくなる場合がありますdatabase_path:データベースの場所に関する問題を避けるため、本番環境では絶対パスを使用します
検出モード
パフォーマンス要件とデータの複雑さに基づいて、検出方式を選択します:
RegexLlm(デフォルト)
本番環境に最適 — 速度と精度を両立します:
- フェーズ 1:高速な正規表現で一般的なパターン(メールアドレス、電話番号、SSN)を検出します
- フェーズ 2:LLM が残りのテキストを分析し、複雑な PII を検出します
- 使用する場合:妥当なパフォーマンスを維持しつつ、包括的な検出が必要な場合
- パフォーマンス:テキストサイズに応じて、リクエストごとに約 100~500 ミリ秒
- 設定:
mode = "regex_llm"
Regex のみ
大量処理やレイテンシに敏感なアプリケーションに最適:
- パターンマッチングのみを使用します。AI 分析は行いません
- 使用する場合:PII のパターンが明確に定義されており、10 ミリ秒未満の応答が必要な場合
- トレードオフ:「口座番号は ABC123 です」のような文脈に依存する PII を見逃す可能性があります
- 設定:
mode = "regex"
LLM のみ
複雑で構造化されていないデータに最適:
- AI を活用した検出により、微妙な PII のパターンも検出します
- 使用する場合:速度よりも精度が重要な場合
- パフォーマンス:リクエストごとに約 200~1000 ミリ秒
- 設定:
mode = "llm"
高度な使い方
Claude Desktop との統合
MCP サーバーをプロキシするように Claude Desktop を設定します:
{
"mcpServers": {
"database": {
"command": "mcp-server-conceal",
"args": [
"--target-command", "python3",
"--target-args", "database-server.py --host localhost",
"--config", "/path/to/mcp-server-conceal.toml"
],
"env": {
"DATABASE_URL": "postgresql://localhost/mydb"
}
}
}
}
カスタム LLM プロンプト
特定のドメイン向けに検出プロンプトをカスタマイズします。
テンプレートの場所:
- Linux:
~/.local/share/mcp-server-conceal/prompts/ - macOS:
~/Library/Application Support/com.mcp-server-conceal.mcp-server-conceal/prompts/ - Windows:
%LOCALAPPDATA%\\com.mcp-server-conceal\\mcp-server-conceal\\data\\prompts\\
使用方法:
- MCP Conceal を一度実行し、プロンプトディレクトリに
default.mdを自動生成します。mcp-server-conceal --target-command echo --target-args "test" --config mcp-server-conceal.toml - コピーします:
cp default.md healthcare.md - ドメイン固有の PII パターンに合わせてテンプレートを編集します。
- 設定します:
prompt_template = "healthcare"
環境変数
環境変数をターゲットプロセスに渡します。
mcp-server-conceal \
--target-command node \
--target-args "server.js" \
--target-cwd "/path/to/server" \
--target-env "DATABASE_URL=postgresql://localhost/mydb" \
--target-env "API_KEY=secret123" \
--config mcp-server-conceal.toml
トラブルシューティング
デバッグログを有効にします。
RUST_LOG=debug mcp-server-conceal \
--target-command python3 \
--target-args server.py \
--config mcp-server-conceal.toml
よくある問題:
- 設定内の正規表現パターンが無効
- Ollama の接続問題
- データベースファイルの権限
- プロンプトテンプレートが見つからない
セキュリティ
マッピングデータベース: 実データと偽データの対応関係という機密情報が含まれています。適切なファイル権限を設定して保護してください。
LLM 統合: LLM ベースの検出モードを使用する場合は、信頼できるインフラストラクチャ上で Ollama を実行してください。
コントリビューション
コントリビューションを歓迎します!以下の手順に従って始めてください。
開発環境のセットアップ
前提条件:
- Rust をインストールします:https://rustup.rs/
- サポート対象の Rust の最小バージョン:1.70+
-
クローンしてセットアップします:
git clone https://github.com/gbrigandi/mcp-server-conceal cd mcp-server-conceal -
開発モードでビルドします:
cargo build cargo test -
開発ツールをインストールします:
rustup component add clippy rustfmt -
デバッグログを有効にして実行します:
RUST_LOG=debug cargo run -- --target-command cat --target-args test.txt --config mcp-server-conceal.toml
テスト
- ユニットテスト:
cargo test - 統合テスト:
cargo test --test integration_test - リンティング:
cargo clippy - フォーマット:
cargo fmt
変更の提出
- リポジトリをフォークします
- フィーチャーブランチを作成します:
git checkout -b feature-name - 変更を加えてテストを追加します
- すべてのテストが通ることを確認します:
cargo test - コードをフォーマットします:
cargo fmt - 明確な説明を添えてプルリクエストを提出します
ライセンス
MIT License - 詳細は LICENSE file を参照してください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。