工具
Copilot CLI 的内置工具默认已启用。这里可以指定的是自定义工具。基本使用方式
在 SessionConfig 的tools 中指定工具的定义。
Tool::define() 是与其他语言版本的 defineTool 类似的辅助函数。
parameters 可以使用 Laravel 自身在 Laravel MCP 中使用的 JsonSchema。也可以不使用 JsonSchema,直接指定数组。
skipPermission
指定skipPermission: true 后,该工具可以在没有权限确认的情况下执行。
使用命名空间对工具分组(实验性)
指定namespace 后,可以在模型的工具搜索中将相关工具分组。在支持的模型和提供商中,延迟加载的工具会被归为一组呈现。在其他环境中或对于始终加载的工具,仍会像以前一样作为单独的工具处理。
name 须为 1~64 个字符,仅可包含 ASCII 字母数字、下划线和连字符。description 可以省略。命名空间不会更改工具名称,因此处理器仍以 lookup_fruit 被调用。这是实验性功能。无效的命名空间会产生警告,并按没有命名空间处理。
$invocation
工具处理器的第二个参数$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 仓库。