Shield MCP について
Shield MCP は、開発や監視向けの MCP サーバー用 Python セキュリティミドルウェアです。公式 SDK を変更せず、ツール呼び出しにアクセス制御、出力のサニタイズ、構造化監査ログ、レート制限、標準化されたエラー処理を追加します。
主な機能
- 01ホワイトリストによるツールアクセス制御
- 02設定可能な出力サニタイズ
- 03構造化監査ログ
- 04トークンバケット方式のレート制限
- 05標準化されたエラー処理
- 06MCP Inspector との互換性
活用シーン
- 01呼び出し可能なツールの制限
- 02ツール結果からの機密データ除去
- 03ユーザーやセッション単位での呼び出し監査
- 04ツール呼び出し頻度の制限
MCP 対応
公式 SDK を変更せず、MCP サーバーのツール呼び出しにセキュリティと監視のミドルウェアを追加し、MCP Inspector にも対応します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
Shield MCP
Model Context Protocol(MCP)サーバー向けのセキュリティミドルウェアです。公式 SDK を変更することなく、セキュリティ機能と監視機能を強化します。このパッケージは、MCP のドキュメントに記載されたベストプラクティスに従って、MCP ツール呼び出しを保護・監視するためのツールを提供します。MCP の開発に携わる際の抽象化を支援します。
目次
機能
- ツールアクセス制御:MCP ツールへのホワイトリストベースのアクセス制御
- 結果のサニタイズ:ツール出力のサニタイズを設定可能
- 構造化ロギング:structlog を使用した包括的な監査ログ
- レート制限:レート制限のためのトークンバケットアルゴリズム
- エラー処理:標準化されたエラー処理とフォーマット
- MCP Inspector との互換性:MCP Inspector ツールとシームレスに連携
要件
システム要件
- Python 3.8 以降
- pip(Python パッケージインストーラー)
- virtualenv(開発時に推奨)
クイックスタート
from shieldmcp import secure_tool
from shieldmcp.sanitizers import ToolSanitizer
from shieldmcp.rate_limit import RateLimitConfig
# Define allowed tools
ALLOWED_TOOLS = {"search", "read_file", "write_file"}
# Create a text sanitizer
text_sanitizer = ToolSanitizer.createTextSanitizer(
max_length=1000,
sensitive_patterns=[
r"\b\d{16}\b", # Credit card numbers
r"\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b" # Email addresses
]
)
# Configure rate limiting
rate_limit = RateLimitConfig(
requests_per_minute=60, # 1 request per second
burst_size=10 # Allow bursts of up to 10 requests
)
# Apply the decorator to your MCP tools
@secure_tool(
allowed_tools=ALLOWED_TOOLS,
sanitize_fn=text_sanitizer,
user_id="user123",
session_id="session456",
rate_limit=rate_limit
)
def search(query: str):
# Your tool implementation
return results
コンポーネント
デコレーター(decorators.py)
すべてのセキュリティ機能を統括するメインの @secure_tool デコレーター:
@secure_tool(
allowed_tools={"tool1", "tool2"}, # Set of allowed tool names
sanitize_fn=your_sanitizer, # Optional result sanitization function
user_id="user123", # Optional user identifier
session_id="session456", # Optional session identifier
rate_limit=RateLimitConfig( # Optional rate limit configuration
requests_per_minute=60,
burst_size=10
)
)
def your_tool():
pass
監査ログ(audit.py)
structlog を使用した構造化ロギング:
from shieldmcp import ToolAudit
audit = ToolAudit()
audit.logToolCallStart(
tool_name="search",
args={"query": "test"},
user_id="user123"
)
アクセス制御(access.py)
ツールのアクセス検証:
from shieldmcp import ToolAccess
access = ToolAccess(allowed_tools={"tool1", "tool2"})
access.validateToolAccess("tool1") # Raises ValueError if not allowed
サニタイザー(sanitizers.py)
結果のサニタイズユーティリティ:
from shieldmcp import ToolSanitizer
# Create a custom sanitizer
sanitizer = ToolSanitizer.createTextSanitizer(
max_length=1000,
sensitive_patterns=[r"\b\d{16}\b"]
)
# Use it directly
clean_text = sanitizer("Your text with sensitive data")
レート制限(rate_limit.py)
トークンバケット方式のレート制限:
from shieldmcp import RateLimitConfig
# Configure rate limits
config = RateLimitConfig(
requests_per_minute=60,
burst_size=10
)
ベストプラクティス
ツールアクセス制御
- 常に許可するツールのホワイトリストを定義してください
- 可能な限り制限されたツールセットを使用してください
- ホワイトリストを定期的に確認し、更新してください
結果のサニタイズ
- すべてのテキスト出力をサニタイズしてください
- 機密データのパターンを定義してください
- 適切な長さの上限を設定してください
ロギング
- 利用可能な場合はユーザー ID とセッション ID を含めてください
- 成功した操作と失敗した操作の両方を記録してください
- より適切な分析のために構造化ロギングを使用してください
レート制限
- ツールの複雑さに応じて適切な制限を設定してください
- ユーザー体験の向上のためにバーストサイズを検討してください
- ログでレート制限への到達状況を監視してください
開発
開発環境のセットアップ
# Clone the repository
git clone https://github.com/shieldmcp/shieldmcp.git
cd shieldmcp
# Create virtual environment
python -m venv venv
source venv/bin/activate # or `venv\Scripts\activate` on Windows
# Install development dependencies
pip install -r requirements.txt
テストの実行
pytest tests/
ロードマップ
今後予定されている機能
- Clerk MCP と Github MCP のサポート
- ドキュメントの拡充
- TypeScript のサポート
謝辞
- プロトコル仕様を提供している Model Context Protocol
- 構造化ロギングを提供している structlog
お気軽にお問い合わせください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。