跳转到主要内容

MCP

只要在 SessionConfig 的 mcpServers 中指定 MCP 服务器就可以使用。 在 Copilot CLI 中使用 Laravel Boost 时,也请一起使用 laravel-boost-copilot-cli。 已知 'type' => 'stdio'(或 'local')和 'tools' => ['*'] 是必须的。没有它们就不会被识别为 MCP 服务器。 args 是可选的。

MCP Apps(实验性)

在启用了 enableMcpApps 的会话中,可以通过 $session->rpc()->mcp()->apps() 操作 MCP Apps 的工具和资源。listTools() 返回应用可以调用的工具,callTool() 执行工具,readResource() 获取 HTML 等 ui:// 资源。listTools() 和 callTool() 需要指定用于标识调用方服务器的 originServerName。 使用 getHostContext() 和 setHostContext() 读取和写入主题、语言区域等主机上下文。diagnose() 返回服务器对 MCP Apps 的支持状态。
callTool() 返回自由格式的 MCP 结果。SDK 提供用于获取和设置数据的 RPC,但不会渲染获取到的 HTML,也不管理 iframe。请在应用中自行实现渲染,例如使用 Livewire 或 Inertia。

从主机提供 MCP OAuth token

当 MCP 服务器需要 OAuth 认证时,可以使用 onMcpAuthRequest 在应用中处理认证。回调会接收 McpAuthRequest 和包含 sessionId 的上下文数组。返回 McpAuthToken 即可将 token 传给 CLI 运行时。返回 null 或 kind: 'cancelled' 的 McpAuthResult 则会取消认证。
McpAuthRequest 包含 requestId、serverName、serverUrl 和 reason(initial、refresh、reauth 或 upscope)。设置处理器后,SDK 会自动订阅 mcp.oauth_required 事件。这样就可以在 Web 请求、队列、批处理等无法打开浏览器的环境中进行认证。恢复会话时,请在 ResumeSessionConfig 中传入相同的处理器。

检查 MCP OAuth 支持(Server RPC)

远程 MCP 服务器请求 OAuth 认证后,可以通过 Server RPC 检查其是否支持 Dynamic Client Registration(DCR)。如果能够从元数据中发现授权服务器,则会返回 authorizationServerUrl。如果 supportsDcr 为 false,则无法使用动态注册。
resourceMetadataText 是来自 WWW-Authenticate 质询的受保护资源元数据。省略时,会根据服务器 URL 发现授权服务器。如果传入 sessionId,则会应用该本地会话的目标策略和沙箱代理。Microsoft Entra ID 不支持 DCR。如果授权服务器是 Microsoft,可以使用预先注册的客户端,而无需让用户输入客户端凭据。 这些是 Server RPC(Copilot::client()->rpc())。它们与处理登录和 OAuth 请求的会话 RPC $session->rpc()->mcp()->oauth() 属于不同的命名空间。

MCP 服务器的状态

会话内 MCP 服务器的状态可能是以下值: $session->rpc()->mcp()->listConfigured() 返回的每个服务器都可能以 live 的形式包含观测到的运行时状态。使用 McpConfiguredServerState::fromArray($server['live']) 可将其转换为带类型的对象。McpConfiguredServerState 上可选的 bool 值 toolsLoaded 表示当前连接是否已加载工具列表。如果运行时尚未报告,toolsLoaded 为 null,因此不要将缺失的值视为 false。
仅凭 connected 状态并不意味着工具已加载。要知道服务器的工具列表何时可用,请监听 session.mcp_server_tools_loaded 事件。这个临时事件每个连接只触发一次,带有 data.serverName 和 data.toolCount,并且不会被持久化。使用缓存的工具时,它可能会在 connected 之前到达。

MCP 服务器配置的管理(Server RPC)

除了会话之外,还可以在服务器级别管理 MCP 服务器的配置。

重新加载 MCP 时的禁用服务器

向 reloadWithConfig() 传入配置时,configuredDisabledServers 是由应用解析的设置所禁用的服务器列表。请将其与会话级别的 disabledServers 以及 CLI 的 cliEnabledServers 分开指定。基于设置的禁用优先级低于 CLI 启用和会话中的显式禁用,因此不要将 configuredDisabledServers 合并到 disabledServers 中。
最新信息请参考 GitHub 仓库。
最后修改于 2026年10月19日