Skip to content

原文(日本語に翻訳)

サブエージェントの disallowedTools における MCPサーバーレベルの指定(mcp__servermcp__server__*mcp__*)が、サイレントに無視される問題を修正しました。

原文(英語)

Fixed MCP server-level specs (mcp__server, mcp__server__*, mcp__*) in subagent disallowedTools being silently ignored

概要

サブエージェントの disallowedTools 設定でMCPサーバーレベルの制限(mcp__servermcp__server__*mcp__* 形式)を指定しても、サイレントに無視されてサブエージェントがMCPツールを自由に使用できてしまう問題が修正されました。セキュリティ上重要な修正で、サブエージェントへのMCPアクセス制限が正しく機能するようになります。

基本的な使い方

サブエージェントへのMCPツール制限(Agent SDKでの設定):

javascript
// サブエージェントからMCPツールを制限
const result = await agent("タスクを実行してください", {
  disallowedTools: [
    "mcp__database",        // database MCPサーバー全体をブロック
    "mcp__filesystem__*",   // filesystem MCPサーバーの全ツールをブロック
    "mcp__*"                // 全MCPサーバーをブロック
  ]
});

実践例

データベースへのアクセスを制限したサブエージェント

javascript
// 読み取り専用タスクでDBへの書き込みを防止
const analyzeResult = await agent(
  "コードベースを分析してレポートを作成してください",
  {
    disallowedTools: [
      "mcp__database__write",    // DB書き込みをブロック
      "mcp__database__execute",  // SQLの実行をブロック
      "mcp__filesystem__write"   // ファイル書き込みもブロック
    ]
  }
);

ファイルシステムへのアクセスを完全に制限

javascript
// サンドボックス化されたサブエージェント
const sandboxResult = await agent(
  "このコードスニペットを分析してください: " + code,
  {
    disallowedTools: [
      "mcp__*",    // 全MCPツールをブロック(修正前は無視されていた)
      "Bash",      // シェルコマンドもブロック
      "Write"      // ファイル書き込みをブロック
    ]
  }
);

セキュリティ境界の設定

javascript
// ワークフロー内でのMCPアクセス制御
const results = await parallel([
  // 安全な読み取り専用エージェント
  () => agent("ドキュメントを生成してください", {
    disallowedTools: ["mcp__production_db__*"]  // 本番DBへのアクセスをブロック
  }),
  // 制限された書き込みエージェント
  () => agent("テストデータを更新してください", {
    disallowedTools: ["mcp__production_db__*"]  // 本番DBへの書き込みをブロック
  })
]);

注意点

  • この問題は disallowedTools でMCPサーバーレベルの指定(mcp__ プレフィックス)を使用した場合にのみ影響しました
  • 個別のMCPツール名(mcp__server__tool_name 形式)は以前から正しく機能していました
  • セキュリティ上重要な修正です。MCPツールへのアクセス制御を disallowedTools に依存している場合はアップデートを推奨します
  • allowedTools での制限は別の仕組みで動作しており、この問題の影響を受けませんでした

関連情報