mcpField
M
MCP Security Sanitizer

MCP Security Sanitizer

リモート
github.com/saurabhdrhセキュリティ05 日前に更新
リポジトリ

MCP Security Sanitizer について

MCP Security Sanitizerは、Groqに送る前のメッセージを処理する、ローカル正規表現ベースのMCPサーバーとチャットクライアントです。特定の秘密情報や個人情報のパターンをマスクしますが、すべての機密情報を検出できるとは限りません。

主な機能

  1. 01一般的なAPIキーと秘密情報のマスク
  2. 02メールアドレスと北米の電話番号のマスキング
  3. 03検出した機密パターンの件数集計
  4. 04空でない各メッセージ送信前のツール呼び出し
  5. 05ログでのツール内容の非表示

活用シーン

  1. 01チャット送信前のテスト認証情報のマスキング
  2. 02チャット入力から一般的な連絡先情報を除去
  3. 03テキスト内で検出したリスクの集計

MCP 対応

ローカルSSE MCPサーバーは、一般的な秘密情報や個人情報のマスキングと、検出したリスクの集計を行うツールを提供します。クライアントは空でない各メッセージをGroqに送る前に、2つのマスキングツールを呼び出します。

設定

リモートサーバーはインストール不要です。クライアントを選んで設定をコピーするか、ワンクリックで導入できます。

エンドポイントhttps://mcp-security-sanitizer-server.onrender.com/sse
インストールコマンドをコピー
Claude CodeTerminal
Cursor.cursor/mcp.json
VS Code.vscode/mcp.json
Claude Desktopclaude_desktop_config.json
Windsurf~/.codeium/windsurf/mcp_config.json

コマンドはターミナルで実行し、JSON は各クライアントの MCP 設定に貼り付けて再起動します。認可が必要なサーバーは初回接続時にログインを求めます。

ツール

詳細

MCP Security Sanitizer

小規模な MCP サーバーと、対話型の LangChain/Groq チャットボットです。サーバーは、一般的なシークレットと個人を特定できる情報(PII)をマスキングするローカルの正規表現ベースのツールを公開し、クライアントは各メッセージを言語モデルに送信する前にサニタイズします。

重要な制限事項: 正規表現によるマッチングでは、ここで実装されているパターンのみを認識します。すべてのシークレットや PII 値を検出できる保証はありません。クライアントは、空でないユーザーメッセージを Groq に渡す前に、設定済みの両方のサニタイザーツールが呼び出されることを保証します。システムプロンプトは多層防御であり、強制の仕組みではありません。適切な制御を追加し、お使いの環境で検出範囲を検証せずに、規制対象のデータや極めて機微なデータを送信しないでください。

アーキテクチャ

User input
   |
   v
Python client --MCP/SSE--> local regex scrubbers
   |                         1. mask_api_keys_and_secrets
   |                         2. mask_pii_data
   v
Sanitized text --> LangChain agent --> Groq

サニタイズでは MCP サーバー内のローカルな Python 正規表現を使用し、LLM トークンを0 消費します。クライアントはエージェントを呼び出す前にサニタイザーを同期的に呼び出すため、このチャットフローでは未加工の入力は Groq に送信されません。MCP トランスポートは引き続きネットワーク境界となります。この設定ではサーバーをループバック(127.0.0.1)にバインドしており、ローカル開発を想定しています。

ログインターセプターはツール名と引数のフィールド名を出力しますが、引数と結果の内容はすべて記録しません。そのため、未加工の入力や、機微な情報を含む可能性があるサニタイザーの出力はログに記録されません。

ツール

ツール動作
mask_api_keys_and_secrets(text)OpenAI 形式の sk-... キー、Bearer トークン、一般的な名前付きのキー/シークレット/パスワード/トークンへの代入を [REDACTED_SECRET] としてマスキングします。
mask_pii_data(text)メールアドレスを [REDACTED_EMAIL] として、一般的な北米の電話番号形式を [REDACTED_PHONE] としてマスキングします。
audit_text_for_risks(text)認識されたシークレット、メールアドレス、電話番号の件数を返します。

必要条件

  • Python 3.11+
  • uv
  • Groq API キー

セットアップ

プロジェクトディレクトリで依存関係を解決し、プロジェクトローカルの .venv を作成して、uv.lock を書き込みまたは更新します。

uv sync

uv run を使う場合、.venv を有効化する必要はありません。プロジェクト環境が自動的に選択されます。

プロジェクトディレクトリの(pyproject.toml と同じ場所に).env ファイルを作成します。

GROQ_API_KEY=your_groq_api_key
GROQ_MODEL=openai/gpt-oss-120b

.env をバージョン管理に含めないでください。クライアントは起動時にこのファイルを読み込み、Groq に接続する前に GROQ_API_KEY が設定されていることを確認します。.venv 内に置かれた .env もフォールバックとして認識されますが、.venv は生成されるもので、削除して再作成できるため、プロジェクトディレクトリに置くことを推奨します。GROQ_MODEL は省略可能です。省略した場合、クライアントは openai/gpt-oss-120b を使用します。Groq からモデルが利用できないと報告された場合は、アカウントで有効になっているモデル ID を GROQ_MODEL に設定してください。API キーは ChatGroq によって使用され、MCP サーバーには送信されません。

実行

1 つ目のターミナルで MCP サーバーを起動します。

uv run server.py

SSE トランスポートを使用して http://127.0.0.1:8000 で待ち受け、MCP エンドポイントは /sse です。

サーバー起動時のスクリーンショット

以下の画像は、起動後に想定されるサーバーのターミナルを示しています。お使いのマシンから直接取得したスクリーンショットではなく、生成された例です。プロセス ID やログの形式は FastMCP/Uvicorn のバージョンによって異なる場合があります。

MCP サーバー起動時のターミナルの例

2 つ目のターミナルで、対話型チャットボットを起動します。

uv run client.py

または、各ターミナルでプロジェクト環境を有効化し、Python を直接実行できます。たとえば、Windows PowerShell の場合:

.\.venv\Scripts\Activate.ps1
python server.py

2 つ目の有効化済みターミナルで:

.\.venv\Scripts\Activate.ps1
python client.py

チャットを終了するには、exit または quit と入力します。

試してみるプロンプト

サーバーとクライアントの両方を起動した状態で、以下のプロンプトのいずれかをクライアントに貼り付けてください。以下の値はすべて合成テストデータです。テストには実際の認証情報や個人情報を使用しないでください。

メールアドレスと電話番号

Write a friendly appointment reminder for [email protected] and ask them to
call (415) 555-0134 if they need to reschedule.

エージェントに渡されるテキストでは、これらの値が次のように置き換えられます。

[email protected]  -> [REDACTED_EMAIL]
(415) 555-0134    -> [REDACTED_PHONE]

API キーと名前付きパスワード

Explain why this demo credential should not be shared: sk-1234567890abcdef.
The test password is password=hunter2.

Groq にメッセージが送信される前に、両方の認証情報が [REDACTED_SECRET] に置き換えられます。

Bearer トークンと複合データ

Help me write a support note for [email protected]. The test phone is
212-555-0199 and the example authorization header is Bearer
abc123.def456.ghi789.

メールアドレス、電話番号、Bearer トークンは、該当するツールによってマスクされます。対話型クライアントは、サニタイズされたテキストを意図的にターミナルに出力しません。実行されたツールはログに記録しますが、その引数と結果は表示しません。上記の置換例は、コンソールに表示される内容ではなく、後続に渡される内容を示しています。

ターミナルに表示される内容

サーバーとクライアントを別々のターミナルで実行してください。クライアントが接続している間、サーバーは起動したままになります。

ターミナル 1 — MCP サーバー(タイムスタンプとプロセス ID は異なる場合があります):

INFO Starting MCP server 'MCP Security Sanitizer' with transport 'sse'
     on http://127.0.0.1:8000/sse
INFO:     Started server process [process-id]
INFO:     Waiting for application startup.
INFO:     Application startup complete.

ターミナル 2 — クライアント(サニタイザー呼び出しの例。以下の値はテスト専用です):

Secure assistant ready. Type 'exit' or 'quit' to stop.

You: Contact [email protected] at (415) 555-0134; test key sk-1234567890abcdef.

[MCP] Calling mask_api_keys_and_secrets (arguments: text)
[MCP] mask_api_keys_and_secrets completed; result content withheld.

[MCP] Calling mask_pii_data (arguments: text)
[MCP] mask_pii_data completed; result content withheld.

Assistant: [The assistant's reply appears here after the sanitized message is
            sent to the configured Groq model.]

インターセプターはツールの引数と結果をターミナルに表示しないため、サニタイズ前の入力は MCP ログに出力されません。エージェントに渡されるメッセージでは、次のように置換されています。

Contact [REDACTED_EMAIL] at [REDACTED_PHONE]; test key [REDACTED_SECRET].

アシスタントの応答は Groq のモデルによって異なり、固定された出力ではありません。以下の図は、サーバーの起動とローカルのサニタイザー呼び出しを示しています。これはターミナル表示の例であり、デスクトップのスクリーンショットそのものではありません。サニタイザーのチェックでは Groq へのリクエストは行われません。起動時のタイムスタンプとプロセス ID は、実行ごとに異なります。

MCP サーバーとサニタイザークライアントのターミナル出力例

設定と本番環境での考慮事項

  • クライアントには両方のサニタイザーツールが必要です。どちらかが利用できない場合、またはサポートされていない結果を返した場合、サニタイズされていない状態でリクエストが送信されるのではなく、リクエストは失敗します。
  • サーバーは要求に応じて SSE を使用します。本番環境にデプロイする場合は、環境に適した認証、TLS、ネットワーク制限、監視、ライフサイクル管理を設定してください。
  • このサービスをコンプライアンス目的で利用する前に、正規表現を更新し、組織で実際に使用されているシークレットおよび PII の形式に対するテストを追加してください。
  • uv run は手動での有効化を必要とせず、プロジェクト環境を管理して使用します。python server.py または python client.py を直接実行するには、まずそのターミナルで .venv を有効化してください。

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。