工具
Copilot CLI 的內建工具預設為啟用。這裡可以指定的是自訂工具。基本用法
在 SessionConfig 的tools 中指定工具定義。
Tool::define() 是與其他語言版本的 defineTool 相同的輔助方法。
parameters 可以使用 Laravel 本身在 Laravel MCP 中使用的 JsonSchema。也可以不使用 JsonSchema 直接指定陣列。
skipPermission
指定skipPermission: true 後,該工具可不經權限提示直接執行。
以命名空間將工具分組(實驗性)
指定namespace 後,可在模型的工具搜尋中將相關工具分組。在支援的模型與 provider 上,延遲載入的工具會以群組形式呈現。在其他環境或常駐載入的工具中,仍會如往常一樣視為個別工具。
name 須為 1〜64 個字元的 ASCII 英數字、底線或連字號。description 可省略。命名空間不會變更工具名稱,因此 handler 仍以 lookup_fruit 呼叫。此為實驗性功能。無效的命名空間會發出警告,並視為未指定命名空間。
$invocation
工具處理器的第 2 個參數$invocation 會傳入以下欄位。
協定細節
在 Protocol v3(目前的預設)中,工具呼叫並非以 JSON-RPC 請求形式,而是以 Session Event(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 儲存庫。