Skip to main content

什麼是 MCP 伺服器(進階版)

Model Context Protocol(MCP) 是讓 AI 客戶端(如 Claude、Cursor、GitHub Copilot 等)與應用透過標準化協議進行通訊的規範。MCP 有 3 類主要原語。 用 Laravel 構建 MCP 伺服器的好處在於可以直接使用 Eloquent、快取、認證、驗證等 Laravel 生態。
本進階指南聚焦於實戰實現。有關 MCP 的基礎概念請參考 中級:Laravel MCP

安裝與初始化

1

安裝包

使用 Composer 安裝包。
2

釋出路由檔案

使用 vendor:publish 生成用於註冊 MCP 伺服器的 routes/ai.php
3

生成伺服器類

透過 Artisan 命令建立伺服器類。
在生成的 app/Mcp/Servers/DatabaseServer.php 中註冊 Tool、Resource、Prompt。
4

註冊伺服器

routes/ai.php 中將伺服器註冊到路由。
Web 伺服器透過 HTTP POST 訪問。本地伺服器則作為 Artisan 命令執行,用於與 CLI 型 AI 客戶端整合。

Tool 的實現

Tool 是 AI 客戶端可呼叫的函式。可以直接使用 Laravel 的服務容器、驗證、Eloquent。

建立 Tool

在生成的類中實現 handleschema 方法。

引數定義(Schema)

schema 方法中使用 Illuminate\Contracts\JsonSchema\JsonSchema builder 定義接受的引數。

Tool 註解

使用 MCP 協議提供的註解可以讓 AI 客戶端判斷工具的安全性。

結構化響應

若希望返回易於 AI 客戶端解析的 JSON 響應,使用 Response::structured

流式響應

對耗時較長的處理,返回 Generator 可以實現進度流式推送。
在 Web 伺服器上,流式響應會自動作為 SSE(Server-Sent Events)流傳送。

條件註冊

可以僅向滿足特定條件的使用者暴露工具。

Resource 的實現

Resource 是 AI 客戶端作為上下文載入的資料,如文件、配置、動態資料。

靜態資源

動態資源(URI 模板)

使用 URI 模板可以根據 URL 引數提供動態資源。
AI 客戶端會請求 app://users/42/profile 這樣的 URI,{userId} 的值可以透過 $request->get('userId') 獲得。

Resource 註解

可以顯式宣告資源的優先順序與受眾。

Prompt 的實現

Prompt 是 AI 客戶端可使用的可複用模板。用於將常用查詢或複雜工作流標準化。

建立 Prompt

使用 asAssistant() 後訊息會被視作 AI 助手的發言。將系統提示與使用者訊息組合,可以細緻控制 AI 的行為。

認證與授權

使用 Sanctum 的令牌認證

這是最簡單的認證方式。MCP 客戶端需帶上 Authorization: Bearer <token> 頭。

基於 OAuth 2.1 的認證

若需要更穩固的認證,使用 Laravel Passport。
採用 OAuth 認證時,請釋出 MCP 提供的授權檢視,並在 AppServiceProvider 中做設定。

使用自定義中介軟體的認證

若使用自定義 API 令牌,可透過中介軟體校驗 Authorization 頭。

Tool 內部的授權

在 Tool 或 Resource 的 handle 中可以透過 $request->user() 做細粒度授權檢查。
shouldRegister 只是將工具從列表中隱藏。呼叫工具時的授權檢查必須在 handle 方法內進行。

實戰示例:資料庫操作工具

以下是使用 Eloquent 檢索與建立資料的完整示例。

伺服器類

檢索工具(只讀)

建立工具(寫入)

實戰示例:檔案系統操作工具

使用 Storage Facade 操作檔案的示例。
檔案操作工具必須對路徑做規範化處理,避免訪問允許目錄以外的位置。含 .. 的路徑應當拒絕。

測試

MCP 伺服器、Tool、Resource、Prompt 都可以用 Laravel 標準測試機制編寫單元測試。

測試 Tool

透過 Server::tool() 方法直接呼叫工具進行測試。

Resource 與 Prompt 的測試

主要斷言方法

使用 MCP Inspector 除錯

對於互動式除錯,使用 MCP Inspector。

部署要點

HTTP 流式與 SSE

在 Web 伺服器上使用流式響應(Generator)時,請檢查 Web 伺服器配置。

與 Laravel Octane 組合

對高併發的 MCP 伺服器,可考慮使用 Laravel Octane(FrankenPHP 或 Swoole),能顯著減少每次請求的開銷。
使用 Octane 時請求間會共享狀態。請注意不要在 Tool 中使用靜態屬性或全域性狀態。

限流

throttle 中介軟體限制對 MCP 伺服器的請求。

快取

對頻繁呼叫的只讀 Tool 建議使用快取。

日誌與監控

對 MCP Tool 呼叫記錄日誌,可以掌握 AI 客戶端的使用情況。
生產環境推薦使用 Laravel Telescope 或 Sentry 監控 MCP 伺服器的效能與異常。
最後修改於 2026年7月31日