跳轉到主要內容

工具

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 儲存庫。
最後修改於 2026年10月26日