MCP
於 SessionConfig 的mcpServers 指定 MCP 伺服器即可使用。
若要在 Copilot CLI 中使用 Laravel Boost,也請一併使用 laravel-boost-copilot-cli。
目前已知 'type' => 'stdio'(或 'local')與 'tools' => ['*'] 為必要設定,否則不會被辨識為 MCP 伺服器。
args 為選用。
MCP Apps(實驗性)
在啟用enableMcpApps 的 session 中,可透過 $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 在應用程式中處理認證。callback 會收到 McpAuthRequest 以及包含 sessionId 的情境陣列。回傳 McpAuthToken 即可將 token 傳給 CLI 執行環境。回傳 null 或 kind: 'cancelled' 的 McpAuthResult 則會取消認證。
McpAuthRequest 包含 requestId、serverName、serverUrl 與 reason(initial、refresh、reauth 或 upscope)。設定 handler 後,SDK 會自動訂閱 mcp.oauth_required 事件。如此一來,就能在 Web 請求、佇列、批次等無法開啟瀏覽器的情境中進行認證。恢復 session 時,請在 ResumeSessionConfig 中傳入相同的 handler。
確認 MCP OAuth 支援(Server RPC)
遠端 MCP 伺服器要求 OAuth 認證後,可透過 Server RPC 確認其是否支援 Dynamic Client Registration(DCR)。若能從中繼資料探索到授權伺服器,便會回傳authorizationServerUrl。若 supportsDcr 為 false,則無法使用動態註冊。
resourceMetadataText 是來自 WWW-Authenticate challenge 的受保護資源中繼資料。若省略,將從伺服器 URL 探索授權伺服器。若傳入 sessionId,則會套用該本機 session 的目的地政策與沙箱 proxy。Microsoft Entra ID 不支援 DCR。若授權伺服器為 Microsoft,可以使用預先註冊的用戶端,而不必要求使用者輸入用戶端憑證。
這些是 Server RPC(Copilot::client()->rpc()),與處理登入及 OAuth 請求的 session RPC $session->rpc()->mcp()->oauth() 屬於不同的命名空間。
MCP 伺服器狀態
Session 內 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)
除了 session 之外,也可以在伺服器層級管理 MCP 伺服器設定。重新載入 MCP 時的停用伺服器
將設定傳給reloadWithConfig() 時,configuredDisabledServers 是由應用程式解析的設定所停用的伺服器清單。請將其與 session 層級的 disabledServers 及 CLI 的 cliEnabledServers 分開指定。依設定的停用優先順序低於 CLI 啟用與 session 中的明確停用,因此請勿將 configuredDisabledServers 合併到 disabledServers。
最新資訊請參考 GitHub 儲存庫。