# OpenAI Agent SDKの便利だけど知られていない機能
🌍 MCPサーバーが大量のツールを公開しているとき、エージェントに全部見せていませんか?
ツールフィルタリングを使えば、静的・動的にツールの公開範囲を制御し、エージェントの精度とセキュリティを向上できます。
📌 タイトル:ツールフィルタリング (静的 / 動的)
🔗 URL:
🧩 概要
MCPサーバーが多数のツールを提供する場合、すべてをエージェントに公開するとモデルが混乱したり、意図しないツールを呼んでしまうリスクがあります。`tool_filter` パラメータを使えば、静的フィルタ(`create_static_tool_filter`)で許可リスト/ブロックリストを指定するか、動的フィルタ(同期または非同期の関数)で実行時コンテキストに応じてツールの可否を判定できます。`allowed_tool_names` と `blocked_tool_names` を両方指定した場合は、許可リストを適用した後にブロックリストを差し引きます。
🛠 使い方
```python
from agents.mcp import MCPServerStreamableHttp, create_static_tool_filter
# 静的フィルタ:許可するツール名を明示
server = MCPServerStreamableHttp(
params={"url": ""},
tool_filter=create_static_tool_filter(
allowed_tool_names=["search", "summarize"]
),
)
# 動的フィルタ:実行時にコンテキストで判定
async def my_filter(context, tool) -> bool:
# context.agent, context.server_name が利用可能
if == "admin":
return True # 管理者は全ツール利用可
return in ["search", "read"]
server_dynamic = MCPServerStreamableHttp(
params={"url": ""},
tool_filter=my_filter,
)
```
🏗 本番システムへの組み込み方
・ユーザーの権限レベルに応じて利用可能なツールを動的に切り替える
・静的フィルタで不要なツールを除外し、モデルのツール選択精度を高める
・` にテナント情報を渡し、マルチテナント環境でツールを分離する
・動的フィルタのログを残して、アクセス制御の監査証跡とする
💡 ユースケース
🔒 ロールベースのツールアクセス制御
🎯 タスク特化型エージェントへのツール絞り込み
🏢 マルチテナント環境でのツール分離
🛡 セキュリティポリシーに基づくツール制限
⚠️ 注意点
動的フィルタはツール一覧取得のたびに呼ばれるため、重い処理(DB参照など)を入れるとレイテンシに影響します。フィルタのロジックはシンプルに保ち、必要ならキャッシュを活用してください。また、フィルタで除外したツールがエージェントの動作に必須でないか、事前に確認しましょう。
✨ ツールフィルタリングで、エージェントに「必要なツールだけ」を渡す洗練された設計を実現しましょう。
#
OpenAIAgentSDK# #
AIAgent#