ツール
Copilot CLIのビルトインツールはデフォルトで有効です。ここで指定できるのはカスタムツールです。基本的な使い方
SessionConfigのtools にツールの定義を指定します。
Tool::define()は他言語版のdefineToolと同様のヘルパーです。
parametersにはLaravel自身がLaravel MCPで使っているJsonSchemaを使用可能です。JsonSchemaを使わず直接配列を指定も可能です。
skipPermission
skipPermission: true を指定すると、そのツールはパーミッションプロンプトなしで実行できます。
名前空間によるツールのグループ化(experimental)
namespace を指定すると、関連するツールをモデルのツール検索でグループ化できます。対応するモデルとプロバイダーでは、遅延ロード対象のツールがまとめて提示されます。それ以外の環境や常時ロードされるツールでは、従来どおり個別のツールとして扱われます。
name は1〜64文字のASCII英数字、アンダースコア、ハイフンで指定します。description は省略できます。名前空間はツール名を変更しないため、ハンドラーは引き続き lookup_fruit で呼び出されます。実験的な機能です。無効な名前空間は警告され、名前空間なしで扱われます。
$invocation
ツールハンドラの第2引数$invocation には以下のフィールドが渡されます。
プロトコルの詳細
Protocol v3(現在のデフォルト)では、ツール呼び出しはJSON-RPCリクエストではなくセッションイベント(external_tool.requested)としてブロードキャストされます。SDKはこのイベントを内部的に処理して session.tools.handlePendingToolCall RPCで応答します。
SessionConfig の使い方は変わりません。 tools に定義を渡すだけで、プロトコルの違いはSDKが吸収します。
MCP CallToolResult の変換
MCPサーバーのツール結果(CallToolResult)をCopilot SDKのToolResultObjectに変換するにはMcpCallToolResult::convert()を使います。
MCPツールの結果はtext・image・resourceなどのcontentブロック配列ですが、Copilot SDKはToolResultObject形式を期待するため変換が必要です。
最新情報は GitHub リポジトリ を参照してください。