Skip to main content

MCP 是什麼

**Model Context Protocol(MCP)**是讓 AI 用戶端(Claude、Cursor、GitHub Copilot 等)與應用程式以標準化協定通訊的規格。實作 MCP 伺服器後,AI 代理即可存取 Laravel 應用程式的資料,或執行某些動作。
Laravel MCP 是 Laravel 13 新增的官方套件。以 laravel/mcp 提供,含構建 MCP 伺服器所需的一整套功能。
MCP 伺服器可提供的功能主要分 3 類:

安裝

以 Composer 安裝套件。
安裝後執行 vendor:publish 產生 routes/ai.php
此指令會建立 routes/ai.php,在此註冊 MCP 伺服器。

建立伺服器

make:mcp-server Artisan 指令建立伺服器類別。
會在 app/Mcp/Servers 目錄產生類別。

註冊伺服器

建立好伺服器後,在 routes/ai.php 註冊。可分為 Web 伺服器本機伺服器 兩種。

Web 伺服器

Web 伺服器透過 HTTP POST 請求存取。適合遠端 AI 用戶端或以 Web 為基礎的整合。
與一般路由相同可套用中介軟體:

本機伺服器

本機伺服器以 Artisan 指令運行,用於與 Claude Desktop 等本機 AI 用戶端整合。
本機伺服器通常會由 MCP 用戶端自動啟動,不必手動執行 mcp:start

工具

工具是 AI 用戶端可呼叫的函式,可實作資料取得、外部 API 整合、資料庫操作等。

建立工具

make:mcp-tool 產生工具類別。
將建立的工具註冊到伺服器的 $tools
基本工具類別範例:

工具的名稱與說明

Laravel 會從類別名稱自動產生名稱與標題。例如 CurrentWeatherTool 名稱為 current-weather、標題為 Current Weather Tool。可透過 NameTitle 屬性自訂。
工具的說明(Description)不會自動產生。由於 AI 模型需要它來理解如何使用該工具,請務必提供有意義的說明。

輸入 schema

schema 方法中定義輸入參數的 schema,可用 Laravel 的 JSON schema builder 指定型別與限制。

輸出 schema

透過 outputSchema 定義回應結構,能讓 AI 用戶端更容易解析回應。

驗證

可在 handle 中使用 Laravel 標準驗證功能。
驗證失敗時,AI 用戶端會依錯誤訊息重試。請提供具體且可執行的錯誤訊息。

依賴注入

工具透過 Laravel 服務容器解析,可在建構子或 handle 方法中以型別提示注入依賴。

註解

可為工具加上註解,向 AI 用戶端提供有關工具行為的額外資訊。
可用註解:

有條件註冊

實作 shouldRegister 可在執行期依條件註冊工具。
回傳 false 時,該工具便不會出現在 AI 用戶端可見範圍。

回應

工具必須回傳 Laravel\Mcp\Response 實例。
回傳 AI 用戶端易於解析的結構化資料。
對於耗時處理,可即時送出進度。

提示(Prompts)

提示是可重複使用的提示樣板。當 AI 用戶端與語言模型互動時,可用標準化形式提供固定的查詢。

建立提示

註冊到伺服器的 $prompts

提示的引數

arguments 方法中定義提示參數。

驗證

提示引數會依定義自動驗證,也能加入更複雜的驗證規則。 Laravel MCP 與 Laravel 驗證無縫整合。可在提示的 handle 中驗證引數。
驗證失敗時,AI 用戶端會依錯誤訊息重試。請提供具體、可執行的訊息。

依賴注入

提示透過 Laravel 服務容器解析,可在建構子或 handle 以型別提示注入依賴。
handle 中也能以型別提示注入。

有條件註冊

實作 shouldRegister 可依執行期條件註冊提示。
回傳 false 時,該提示對 AI 用戶端不可見,也無法呼叫。

提示的回應

在提示的 handle 可回傳使用者訊息或助理訊息。使用 asAssistant() 表示助理訊息。

資源(Resources)

資源是 AI 用戶端可作為脈絡讀取的資料或資訊,例如文件、設定資訊或動態資料等,提升 AI 回應品質。

建立資源

註冊到伺服器的 $resources

URI 與 MIME 類型

預設會依類別名稱自動產生 URI(例如 weather://resources/weather-guidelines)。可用 UriMimeType 屬性自訂。

資源樣板

若要定義擁有 URI 變數的動態資源,可實作 HasUriTemplate 介面。
URI 變數會自動放入 request,可用 get 取得。

資源的請求

與工具、提示不同,資源不能定義輸入 schema 或引數。但在 handle 中仍可透過 request 存取請求資訊。

資源的依賴注入

資源透過 Laravel 服務容器解析,可在建構子或 handle 以型別提示注入依賴。
handle 中亦可注入。

資源的註解

資源可加上受眾、優先度、最後修改時間等註解。

資源的有條件註冊

實作 shouldRegister 可依執行期條件註冊資源。
回傳 false 時,該資源對 AI 用戶端不可見亦不可存取。

資源的回應

資源必須回傳 Laravel\Mcp\Response 實例。 text 回傳文字內容:

資源連結回應

resourceLink 回傳資源連結。與內嵌資源不同,回傳的是 URI pointer,AI 用戶端會另行取得。
也可傳入已註冊的資源類別或實例,會自動繼承 URI、名稱、標題、說明、MIME 類型。

Blob 回應

blob 回傳二進位內容,MIME 類型由資源的 #[MimeType] 屬性設定。

錯誤回應

error 表示錯誤。

App

Laravel MCP 支援 MCP Apps。它是 Model Context Protocol 的延伸功能,可在支援的主機沙盒 iframe 中,讓工具渲染出互動式 HTML 應用程式。因此可打造超越純文字回應的儀表板、表單、視覺化等豐富體驗。 MCP app 由下列 2 部分協同運作:
  • App 資源 — 回傳應用程式獨立的 HTML。
  • 工具 — 透過 #[RendersApp] 屬性連結到 App 資源。工具被呼叫時,主機會取得連結的資源並渲染。

建立 App 資源

make:mcp-app-resource Artisan 指令建立 App 資源。
此指令會建立 2 個檔案:位於 app/Mcp/Resources 的 PHP 類別,以及 resources/views/mcp 的 Blade 視圖。視圖名稱依類別自動推測,例如 WeatherDashboardApp 對應到 mcp.weather-dashboard-app
AppResource 繼承基底 Resource,自動設定 MCP Apps 規格所要求的 ui:// URI scheme 與 text/html;profile=mcp-app MIME 類型。與其他資源一樣,需要註冊到伺服器的 $resources 產生的 Blade 視圖使用 <x-mcp::app> 元件。此元件會渲染一份包裝了用戶端 MCP SDK 的完整 HTML 文件。
全域函式 createMcpApp 由捆綁的 SDK 提供,會處理 iframe 對伺服器的連線、套用主機主題、公開 callServerToolsendMessageopenLink 等輔助方法與事件回呼。完整用戶端 API 請參閱 MCP Apps 規格

從工具渲染 App

要顯示 App 資源,透過 #[RendersApp] 屬性將工具連結到資源。當工具被呼叫時,Laravel MCP 會將資源的 URI 附加到工具中繼資料,讓主機能於沙盒 iframe 內渲染此 app。
AppResource 已註冊,Laravel MCP 會自動宣告 io.modelcontextprotocol/ui 能力,無需額外伺服器設定。

App 工具的可見性

每個 #[RendersApp] 工具可用 visibility 引數限制呼叫者。這對於 UI 用來載入 / 更新資料、但不希望被模型看見的私有 app 專用工具很有用。
Visibility enum 有 ModelApp 兩個值,預設兩者皆有。若工具只供 UI 直接呼叫請用 [Visibility::App];若要讓 UI 無法使用該工具則用 [Visibility::Model]

App 設定

在 App 資源的 #[AppMeta] 屬性中,可設定 iframe 的 Content Security Policy、瀏覽器權限,以及要放入視圖 <head> 的函式庫腳本。
Library enum 預先設定了 Library::TailwindLibrary::Alpine 等常見前端函式庫 CDN 腳本,其 CDN 來源會自動加入 CSP。Permission enum 涵蓋 CameraMicrophoneGeolocationClipboardWrite 等瀏覽器權限。
若需要動態設定,可透過 Laravel\Mcp\Server\Ui 命名空間的 AppMetaCspPermissions 流暢建構器覆寫資源的 appMeta 方法。

用 Boost 開發 App

Laravel MCP 附有專供構建 MCP Apps 的Boost 技能參考。若已安裝 Laravel Boost,AI 編碼代理可呼叫 mcp-development 技能,自動產生 App 資源、Blade 視圖與連結的工具。 完整協定參考(含用戶端 API 與 schema 細節)請參閱官方 MCP Apps 文件

Meta 資料

可將 MCP 規格的 _meta 欄位附加到工具、資源、提示的回應上。
若要為整個回應信封加 meta,使用 Response::make
要為工具、資源、提示類別本身加 meta,定義 $meta 屬性:

圖示

MCP 用戶端可為伺服器與其原語顯示圖示。以 Icon 屬性可為伺服器、工具、資源、提示宣告圖示。
Icon 屬性可重複使用,可宣告不同大小或明暗主題的變體。 或者,覆寫 icons 方法以程式化定義圖示,適合圖示依執行期條件時。
由屬性與 icons 方法定義的圖示會自動合併。圖示路徑解析規則如下:
  • 具有 https:data: 等 URI scheme 的路徑會原樣使用。
  • 相對路徑會透過 Laravel 的 asset 輔助函式解析為 URL。

認證

Web 伺服器可用 Laravel 的標準中介軟體進行認證。

Sanctum

使用 Laravel Sanctum 的 token 認證。MCP 用戶端會送 Authorization: Bearer <token> 標頭。

OAuth 2.1

使用 Laravel Passport 的 OAuth 認證,適合需要更堅固安全性的情境。
使用 OAuth 認證時,發布 Passport 授權視圖並在服務提供者中設定。

授權

可透過 $request->user() 取得已認證使用者,並在工具或資源中進行授權檢查。

MCP 用戶端

Laravel MCP 除了可建構伺服器,也提供用來連線至其他 MCP 伺服器的用戶端。透過用戶端可以發現並呼叫外部 MCP 伺服器公開的工具,這對於在 AI 代理 中提供外部 MCP 伺服器功能特別有用。

連線至伺服器

對於可透過 HTTP 存取的 MCP 伺服器使用 Client::web,並傳入伺服器 URL:
作為指令啟動的本機 MCP 伺服器使用 Client::local,傳入指令與引數:
用戶端採延遲連線(lazy connect),會在首次列出或呼叫工具時自動建立連線。若要手動管理連線,使用 connectconnectedpingdisconnect 方法。
可透過 withTimeout 自訂請求逾時:

命名用戶端

不必每次都重新建構,可註冊可重用的命名用戶端。通常在 service provider 的 boot 中透過 Mcp Facade 進行。
註冊後可用名稱解析用戶端:
命名用戶端每個請求只會解析一次,並於請求生命週期結束時自動斷線。

用戶端認證

若要連線至受 Bearer token 保護的 Web MCP 伺服器,使用 withToken。可傳入 token 字串或延遲解析的閉包。
對於受 OAuth 2.1 保護的伺服器使用 withOAuth
若 MCP 伺服器支援動態用戶端註冊,可省略 clientIdclientSecret,用戶端會自動註冊。
接著在 routes/ai.php 中,用 oAuthRoutesFor 為命名用戶端註冊 OAuth 路由。傳入的閉包會在授權碼與 access token 交換完成後收到用戶端名稱與 TokenSet
如此會註冊 2 個命名路由:將使用者導向授權伺服器的 connect 路由(mcp.oauth.{client}.connect),以及交換授權碼並呼叫 handler 的 callback 路由(mcp.oauth.{client}.callback)。兩者皆使用 web 中介軟體群組(可透過 middleware 引數覆寫)。 開始授權流程時,將使用者導向 connect 路由:

工具

透過 tools 取得 MCP 伺服器公開的工具,回傳以名稱為 key 的集合。
用戶端會自動處理分頁取得所有工具。可用 limit 限制數量。
要呼叫工具,用 callTool 傳入工具名稱與引數陣列。回傳的 ToolResult 實例可取得回應。
也可從一覽取得的工具實例直接呼叫。
若你以 Laravel AI SDK 構建代理,可將 MCP 用戶端的工具直接傳給代理,讓模型在回應提示時能呼叫。詳情見 AI SDK 的 MCP 工具 章節。

提示

透過 prompts 取得 MCP 伺服器公開的提示,回傳以名稱為 key 的集合。
會自動處理分頁。可用 limit 限制數量。
取得提示用 getPrompt 傳入名稱與引數陣列,回傳的 PromptResult 可取得產生的訊息。

資源

透過 resources 取得 MCP 伺服器公開的資源,回傳以 URI 為 key 的集合。
會自動處理分頁。可用 limit 限制。
要讀取資源用 readResource 傳入 URI,回傳 ResourceReadResult 可取得內容。

測試

MCP Inspector

用互動式除錯工具「MCP Inspector」確認 MCP 伺服器行為。
執行後會啟動 MCP Inspector,可複製用戶端設定。若設定了認證中介軟體,請將 Authorization 標頭一同送出。

單元測試

可為工具、資源、提示撰寫單元測試。
提示與資源同樣可測。
要以已認證使用者執行,用 actingAs
主要斷言方法:
檢查是否有錯誤,用 assertHasErrors / assertHasNoErrors
可驗證工具、資源、提示的名稱、標題、說明。
驗證串流回應的通知,用 assertSentNotificationassertNotificationCount
除錯回應內容可用 dddump
最後修改於 2026年8月2日