🚀 MCP Conceal
MCP Concealは、Claude、ChatGPT、Geminiなどの外部AIプロバイダにデータが到達する前に、個人識別情報(PII)を疑似匿名化するMCPプロキシです。これにより、AI分析に必要な意味とデータ関係を維持しながら、敏感な情報を保護することができます。
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分析に必要な意味とデータ関係を維持します。例えば、john.smith@acme.com は mike.wilson@techcorp.com に変換され、構造を維持しながら敏感な情報を保護します。
🚀 クイックスタート
前提条件
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
✨ 主な機能
- MCP Concealは、外部AIプロバイダにデータが到達する前に、PIIを疑似匿名化します。
- 疑似匿名化を行うことで、AI分析に必要な意味とデータ関係を維持します。
- 複数の検出モードを提供し、パフォーマンス要件とデータの複雑さに応じて選択できます。
📦 インストール
事前ビルド済みバイナリのダウンロード
- リリースページ にアクセスします。
- あなたのプラットフォーム用のバイナリをダウンロードします。
| プラットフォーム |
バイナリ |
| 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に追加する
ソースからのビルド
git clone https://github.com/gbrigandi/mcp-server-conceal
cd mcp-server-conceal
cargo build --release
バイナリの場所: target/release/mcp-server-conceal
📚 ドキュメント
設定
完全な設定リファレンスは以下の通りです。
[detection]
mode = "regex_llm"
enabled = true
confidence_threshold = 0.8
[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"
seed = 12345
consistency = true
[mapping]
database_path = "mappings.db"
retention_days = 90
[llm]
model = "llama3.2:3b"
endpoint = "http://localhost:11434"
timeout_seconds = 180
prompt_template = "default"
[llm_cache]
enabled = true
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 - 500ms
- 設定:
mode = "regex_llm"
Regex Only
高ボリュームでレイテンシに敏感なアプリケーションに最適:
- パターンマッチングのみを使用し、AI分析は行いません。
- 使用する場合: 明確に定義されたPIIパターンがあり、応答時間が10ms未満必要な場合
- トレードオフ: 「私の口座番号はABC123です」のような文脈上のPIIを見逃す可能性があります。
- 設定:
mode = "regex"
LLM Only
複雑で非構造化データに最適:
- AIによる検出で、微妙なPIIパターンをキャッチします。
- 使用する場合: 速度よりも精度が重要な場合
- パフォーマンス: リクエストあたり約200 - 1000ms
- 設定:
mode = "llm"
💻 使用例
基本的な使用法
mcp-server-conceal \
--target-command python3 \
--target-args "my-mcp-server.py" \
--config mcp-server-conceal.toml
高度な使用法
Claude Desktopとの統合
Claude Desktopを設定して、MCPサーバーをプロキシするようにします。
{
"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
🔧 技術詳細
MCP Concealは、外部AIプロバイダにデータが到達する前に、PIIを疑似匿名化することで、敏感な情報を保護します。疑似匿名化により、AI分析に必要な意味とデータ関係を維持します。
検出モードには、RegexLlm、Regex Only、LLM Onlyの3つがあり、パフォーマンス要件とデータの複雑さに応じて選択できます。
トラブルシューティング
デバッグログを有効にします。
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ファイルを参照してください。