MCP 串接與安全
理解 MCP 架構、傳輸方式和權限邊界,並安全連線第三方或自建 MCP Server。
Model Context Protocol(MCP)是一套連線 AI 應用程式與外部系統的開放協議。相容用戶端可以透過 MCP Server 取得上下文、呼叫工具或使用預定義提示,而不必為每一種資料源個別設計串接協議。
MCP 與模型 API 是不同的串接層
AGTCloud API 負責模型呼叫;MCP Server 負責向相容用戶端暴露工具和上下文。連線 MCP 時,請使用 Server 發佈者或管理員提供的安裝命令、URL 和驗證方式;AGTCloud 模型 API 地址不能作為 MCP Server Endpoint 使用。
MCP 如何工作
一個 MCP Host 可以連線多個 MCP Server,並為每個 Server 建立獨立的 MCP Client。
| 參與者 | 主要職責 | 常見形態 |
|---|---|---|
| MCP Host | 承載 AI 應用程式、管理連線、權限和使用者確認 | 程式開發代理程式、IDE、桌面助手 |
| MCP Client | 與一個 MCP Server 建立專用連線,並向 Host 提供 Server 能力 | 通常內建在 Host 中 |
| MCP Server | 暴露特定工具、資料或提示範本 | 本機子程序、遠端服務 |
MCP 分為資料層和傳輸層:資料層定義 JSON-RPC 訊息、能力發現和 Primitives;傳輸層負責訊息如何在本機程序或網路之間傳遞。用戶端通常會封裝這些協議細節,串接時應優先使用用戶端提供的 MCP 設定入口。
Server 可以提供什麼
MCP Server 主要暴露三類 Primitives:
| Primitive | 控制方式 | 作用 | 串接時重點檢查 |
|---|---|---|---|
| Tools | 模型可選擇呼叫,Host 負責執行策略和授權 | 執行操作或查詢,例如呼叫 API、寫入檔案、查詢資料庫 | 輸入 Schema、寫操作、外部副作用、是否需要人工核准 |
| Resources | 由應用程式選擇和管理 | 向模型提供檔案、記錄、API 回應等上下文 | 資料範圍、敏感資訊、更新頻率、內容可信度 |
| Prompts | 通常由使用者主動選擇 | 提供可沿用的互動範本和參數 | 範本來源、參數含義、是否包含外部指令 |
Server 會聲明自己支援的能力,用戶端再發現可用的 Tools、Resources 和 Prompts。Server 提供某項能力不代表用戶端一定會啟用;最終行為還取決於 Host 的版本、權限策略和使用者選擇。
把 Server 傳回的內容視為外部輸入
Resource、Tool 結果和 Prompt 都可能包含不可信內容。不要因為它們透過 MCP 傳回,就自動允許其中的指令存取其他檔案、憑證或系統服務。
選擇傳輸方式
目前 MCP 規範定義了 stdio 和 Streamable HTTP 兩種標準傳輸。
| 傳輸 | 工作方式 | 更適合 | 主要風險 |
|---|---|---|---|
stdio | 用戶端啟動本機 Server 子程序,通過標準輸入輸出交換逐行 JSON-RPC 訊息 | 本機工具、受控目錄、無需網路部署的 Server | 啟動命令等同於在本機執行程序;Server 繼承程序權限和部分環境資訊 |
| Streamable HTTP | 用戶端向單一 MCP Endpoint 傳送 HTTP POST;Server 傳回 JSON 或目前請求範圍內的 SSE 流 | 遠端服務、團隊共享能力、需要網路驗證的 Server | 服務身分、OAuth 或 Token、網路邊界、資料外發和遠端副作用 |
對於 stdio,Server 的 stdout 只能輸出 MCP 訊息,記錄應寫入 stderr。出現連線失敗時,可以檢查用戶端捕獲的 stderr 記錄,但不要把包含憑證的完整記錄傳送給第三方。
目前 Streamable HTTP 使用單一 POST Endpoint,不需要個別設定 GET 或舊式 HTTP+SSE 地址。驗證方式由 Server 決定;如果 Server 提供 OAuth 流程,應優先按照其授權頁面完成驗證,而不是把長期憑證直接寫入共享設定。
理解設定結構
不同用戶端的欄位名稱和設定位置並不完全相同。下面只展示常見結構,不能直接執行;請使用 Server 發佈者提供的真實命令、參數、URL 和驗證方式替換所有預留位置。
{
"mcpServers": {
"replace-with-server-name": {
"command": "/absolute/path/to/server-command",
"args": [
"--replace-with-required-argument"
],
"env": {
"SERVICE_API_KEY": "replace-with-client-supported-secret-reference"
}
}
}
}command是用戶端實際執行的程序,連線前必須核對完整路徑和發佈來源;args可能包含允許存取的目錄、設定檔或 Server 參數;env只傳遞 Server 必需的最小環境變數。憑證引用語法因用戶端而異。
不要直接複製未知啟動命令
本機 MCP 設定中的 command 與 args 會在你的電腦上執行。不要執行來源不明的一鍵安裝命令,也不要把整個主目錄、SSH 目錄或系統目錄作為預設存取範圍。
安全串接步驟
1. 核對用戶端支援
確認用戶端支援 MCP,並檢查它支援 stdio、Streamable HTTP 中的哪一種。使用用戶端目前版本對應的設定格式,不要根據其他用戶端的範例猜測欄位。
2. 核對 Server 身分
從 Server 官方倉庫、服務供應商控制台或組織管理員處取得安裝方式。檢查發佈者、版本、更新記錄、依賴和解除安裝方法;遠端 Server 還應核對域名、HTTPS 和驗證流程。
3. 盤點能力與權限
在啟用前檢視 Server 暴露的 Tools、Resources 和 Prompts。記錄每個 Tool 的輸入、讀取範圍、寫操作和外部副作用,停用與目前任務無關的能力。
4. 設定最小範圍
本機 Server 只開放必要目錄和環境變數;遠端 Server 使用最小權限帳號或 Scope。不要把模型 API Key 當作通用 MCP 憑證傳送給未知 Server。
5. 重新載入並檢查
按用戶端說明重新載入設定,確認 Server 可以連線,並檢查用戶端展示的能力清單與預期一致。連線成功並不等於所有 Tool 都應該啟用。
6. 從唯讀操作開始
先列出能力、讀取一項非敏感 Resource,或呼叫沒有副作用的 Tool。確認輸入、輸出和記錄後,再逐項允許寫檔案、修改資料或呼叫外部系統。
權限審查清單
| 範圍 | 串接前確認 |
|---|---|
| 本機檔案 | Server 可以讀取和寫入哪些目錄,是否會跟隨符號連結或存取目錄外檔案 |
| 命令執行 | Tool 會執行哪些程序,參數是否由模型或外部內容直接控制 |
| 網路存取 | Server 會存取哪些域名、內網服務和第三方 API |
| 憑證 | Key 或 Token 儲存在哪裡、傳給哪個程序或域名、能否個別撤銷 |
| 資料處理 | 輸入和結果是否會離開本機,服務供應商如何儲存記錄和呼叫資料 |
| 寫操作 | 修改、刪除、提交、付款或訊息傳送前是否有明確確認 |
| 更新 | Server 套件或遠端能力發生變化時,用戶端是否會重新展示權限 |
對於遠端 Server,只連線可信 HTTPS 地址並按其驗證流程授權。對於本機 Server,優先使用絕對命令路徑、隔離目錄和一般使用者權限,不要為了方便直接使用管理員權限執行。
常見問題
| 現象 | 優先檢查 | 處理方式 |
|---|---|---|
| Server 無法啟動 | 命令路徑、執行時、參數和工作目錄 | 在一般終端機確認程序存在,但不要繞過用戶端直接執行未知命令 |
| 用戶端顯示已連線,但沒有 Tool | Server 能力、用戶端權限和版本 | 重新載入能力清單,確認用戶端支援該 Primitive |
stdio 連線後立即斷開 | Server 是否向 stdout 輸出了一般記錄 | 將記錄寫入 stderr,保證 stdout 只包含 MCP 訊息 |
遠端 Endpoint 傳回 401 或 403 | Server 的驗證方式、Token 和 Scope | 按 Server 文件重新授權,不要改用其他服務的 Token |
遠端 Endpoint 傳回 404 | URL 是否包含完整 MCP 路徑 | 使用 Server 發佈者提供的 Endpoint,不要自行追加模型 API 路徑 |
| Tool 可以讀取但無法寫入 | Tool 權限、目錄範圍和人工確認 | 只在確實需要時擴大權限,並再次執行可撤銷測試 |
| Tool 行為與描述不一致 | Server 版本、Tool Schema 和外部輸入 | 立即停用該 Tool,儲存去識別化證據並聯絡 Server 發佈者 |
| 連線後出現意外外部請求 | Server 網路權限和資料流向 | 斷開 Server、撤銷憑證,並檢查記錄與主機網路活動 |
持續使用建議
- 定期複查已連線的 Server、版本、Tool 清單和授權範圍;
- 為不同 Server 使用獨立、可撤銷、最小權限的憑證;
- 保持人工確認,尤其是刪除、寫入、付款、訊息傳送和正式環境系統操作;
- 不把未知 Resource 或 Tool 結果中的指令當作可信系統指令;
- 記錄、截圖和錯誤報告必須移除 Key、Token、客戶資料和敏感路徑;
- 停止使用 Server 時,從用戶端移除設定並撤銷相關憑證。
需要為模型用戶端設定 AGTCloud 時,請從 CC-Switch 整合教學開始,或在左側“第三方整合”目錄中選擇具體工具;需要理解模型端點和請求欄位時,請檢視 API Reference。MCP 的協議細節和版本變化請以 MCP 官方文件為準。