跳至主要内容

伺服器概念

理解 MCP 伺服器概念

MCP 伺服器是通過標準化協定介面向 AI 應用程式暴露特定能力的程式。每個伺服器為特定領域提供專注的功能。

常見的範例包括用於文件管理的檔案系統伺服器、用於訊息處理的電子郵件伺服器、用於行程規劃的旅遊伺服器,以及用於資料查詢的資料庫伺服器。每個伺服器都為 AI 應用程式帶來特定領域的能力。

核心構建區塊

伺服器通過三個構建區塊提供功能:

構建區塊目的控制方實際範例
工具用於 AI 動作模型控制搜尋航班、發送訊息、建立行事曆事件
資源用於內容資料應用程式控制文件、行事曆、電子郵件、天氣資料
提示用於互動範本使用者控制"規劃假期"、"總結我的會議"、"起草電子郵件"

工具 - AI 動作

工具使 AI 模型能夠通過伺服器實作的函式執行動作。每個工具定義一個具有型別化輸入和輸出的特定操作。模型根據內容請求工具執行。

概述

工具是 LLM 可以呼叫的模式定義介面。MCP 使用 JSON Schema 進行驗證。每個工具執行單一操作,具有清楚定義的輸入和輸出。最重要的是,工具執行需要明確的使用者批准,確保使用者保持對模型採取的動作的控制。

協定操作:

方法目的回傳
tools/list探索可用工具帶有模式的工具定義陣列
tools/call執行特定工具工具執行結果

範例工具定義:

{
name: "searchFlights",
description: "搜尋可用航班",
inputSchema: {
type: "object",
properties: {
origin: { type: "string", description: "出發城市" },
destination: { type: "string", description: "到達城市" },
date: { type: "string", format: "date", description: "旅行日期" }
},
required: ["origin", "destination", "date"]
}
}

範例:採取動作

工具使 AI 應用程式能夠代表使用者執行動作。在旅行規劃場景中,AI 應用程式可能使用多個工具來幫助預訂假期。

首先,它使用以下方式搜尋航班:

searchFlights(origin: "NYC", destination: "Barcelona", date: "2024-06-15")

searchFlights 查詢多家航空公司並回傳結構化的航班選項。選擇航班後,它使用以下方式建立行事曆事件:

createCalendarEvent(title: "Barcelona Trip", startDate: "2024-06-15", endDate: "2024-06-22")

來標記旅行日期。最後,它使用以下方式發送不在辦公室通知:

sendEmail(to: "team@work.com", subject: "Out of Office", body: "...")

來通知同事關於缺勤。

每個工具執行都需要明確的使用者批准,確保對採取的動作有完全控制。

使用者互動模型

工具是模型控制的,意味著 AI 模型可以自動探索和呼叫它們。然而,MCP 通過幾種機制強調人工監督。應用程式應該在 UI 中清楚顯示可用工具,並在工具被考慮或使用時提供視覺指示器。在任何工具執行之前,必須向使用者展示清楚的批准對話方塊,確切說明工具將要做什麼。

為了信任和安全,應用程式通常強制手動批准,讓人類有能力拒絕工具呼叫。應用程式通常通過批准對話方塊、預先批准某些安全操作的權限設定,以及顯示所有工具執行及其結果的活動記錄來實作這一點。

資源 - 內容資料

資源提供對主機應用程式可以檢索並作為內容提供給 AI 模型的資訊的結構化存取。

概述

資源從檔案、API、資料庫或 AI 需要理解內容的任何其他來源暴露資料。應用程式可以直接存取此資訊並決定如何使用它——無論是選擇相關部分、使用嵌入搜尋,還是將其全部傳遞給模型。

資源使用基於 URI 的識別,每個資源都有唯一的 URI,如 file:///path/to/document.md。它們宣告 MIME 類型以進行適當的內容處理,並支援兩種探索模式:具有固定 URI 的直接資源,以及具有參數化 URI 的資源範本

資源範本通過 URI 範本啟用動態資源存取。像 travel://activities/{city}/{category} 這樣的範本將通過替換 {city}{category} 參數來存取篩選的活動資料。例如,travel://activities/barcelona/museums 將回傳巴塞隆納的所有博物館。資源範本包括中繼資料,如標題、描述和預期的 MIME 類型,使它們可被發現且自我記錄。

協定操作:

方法目的回傳
resources/list列出可用的直接資源資源描述符陣列
resources/templates/list探索資源範本資源範本定義陣列
resources/read檢索資源內容帶有中繼資料的資源資料
resources/subscribe監控資源變更訂閱確認

範例:存取內容資料

繼續旅行規劃範例,資源為 AI 應用程式提供對相關資訊的存取:

  • 行事曆資料 (calendar://events/2024) - 檢查可用性
  • 旅行文件 (file:///Documents/Travel/passport.pdf) - 重要資訊
  • 以前的行程 (trips://history/barcelona-2023) - 使用者選擇要遵循的過去旅行風格

資源不是手動複製此資訊,而是向 AI 應用程式提供原始資訊。應用程式可以選擇如何最好地處理資料。應用程式可能選擇選擇資料子集,使用嵌入或關鍵字搜尋,或直接將資源的原始資料傳遞給模型。在我們的範例中,在規劃階段,AI 應用程式可以傳遞行事曆資料、天氣資料和旅行偏好,以便模型可以檢查可用性、查詢天氣模式,並參考旅行偏好。

資源範本範例:

{
"uriTemplate": "weather://forecast/{city}/{date}",
"name": "weather-forecast",
"title": "天氣預報",
"description": "取得任何城市和日期的天氣預報",
"mimeType": "application/json"
}

{
"uriTemplate": "travel://flights/{origin}/{destination}",
"name": "flight-search",
"title": "航班搜尋",
"description": "搜尋城市之間的可用航班",
"mimeType": "application/json"
}

這些範本啟用靈活的查詢。對於天氣資料,使用者可以存取任何城市/日期組合的預報。對於航班,他們可以搜尋任何兩個機場之間的路線。當使用者輸入 "NYC" 作為 origin 機場並開始輸入 "Bar" 作為 destination 機場時,系統可以建議 "Barcelona (BCN)" 或 "Barbados (BGI)"。

參數完成

動態資源支援參數完成。例如:

  • 輸入 "Par" 作為 weather://forecast/{city} 的輸入可能建議 "Paris" 或 "Park City"
  • 系統幫助發現有效值,而不需要確切的格式知識

使用者互動模型

資源是應用程式驅動的,為主機在如何檢索、處理和呈現可用內容方面提供靈活性。常見的互動模式包括樹狀或清單檢視,用於在熟悉的資料夾結構中瀏覽資源,搜尋和篩選介面用於尋找特定資源,基於啟發式或 AI 選擇的自動內容包含,以及手動選擇介面。

應用程式可以自由通過任何適合其需求的介面模式實作資源探索。協定不強制特定的 UI 模式,允許具有預覽功能的資源選擇器、基於當前對話內容的智慧建議、包含多個資源的批量選擇,或與現有檔案瀏覽器和資料探索器的整合。

提示 - 互動範本

提示提供可重複使用的範本。它們允許 MCP 伺服器作者為領域提供參數化提示,或展示如何最好地使用 MCP 伺服器。

概述

提示是定義預期輸入和互動模式的結構化範本。它們是使用者控制的,需要明確呼叫而不是自動觸發。提示可以是內容感知的,參考可用的資源和工具來建立綜合工作流程。像資源一樣,提示支援參數完成,幫助使用者發現有效的參數值。

協定操作:

方法目的回傳
prompts/list探索可用提示提示描述符陣列
prompts/get檢索提示詳情帶有參數的完整提示定義

範例:簡化工作流程

提示為常見任務提供結構化範本。在旅行規劃內容中:

"規劃假期"提示:

{
"name": "plan-vacation",
"title": "規劃假期",
"description": "引導完成假期規劃過程",
"arguments": [
{ "name": "destination", "type": "string", "required": true },
{ "name": "duration", "type": "number", "description": "天數" },
{ "name": "budget", "type": "number", "required": false },
{ "name": "interests", "type": "array", "items": { "type": "string" } }
]
}

與其使用非結構化的自然語言輸入,提示系統啟用:

  1. 選擇"規劃假期"範本
  2. 結構化輸入:Barcelona、7 天、$3000、["beaches", "architecture", "food"]
  3. 基於範本的一致工作流程執行

使用者互動模型

提示是使用者控制的,需要明確呼叫。應用程式通常通過各種 UI 模式暴露提示,如斜線命令(輸入 "/" 查看可用提示,如 /plan-vacation)、可搜尋存取的命令面板、常用提示的專用 UI 按鈕,或建議相關提示的內容選單。

協定給實作者自由設計在其應用程式中感覺自然的介面。關鍵原則包括輕鬆發現可用提示、清楚描述每個提示的作用、帶有驗證的自然參數輸入,以及提示底層範本的透明顯示。

它們如何協同工作

當多個伺服器通過統一介面協同工作,結合其專業能力時,MCP 的真正威力就會顯現。

範例:多伺服器旅行規劃

考慮一個連線三個伺服器的 AI 應用程式:

  1. 旅遊伺服器 - 處理航班、酒店和行程
  2. 天氣伺服器 - 提供氣候資料和預報
  3. 行事曆/電子郵件伺服器 - 管理時程和通訊

完整流程

  1. 使用者以參數呼叫提示:

    {
    "prompt": "plan-vacation",
    "arguments": {
    "destination": "Barcelona",
    "departure_date": "2024-06-15",
    "return_date": "2024-06-22",
    "budget": 3000,
    "travelers": 2
    }
    }
  2. 使用者選擇要包含的資源:

    • calendar://my-calendar/June-2024 (來自行事曆伺服器)
    • travel://preferences/europe (來自旅遊伺服器)
    • travel://past-trips/Spain-2023 (來自旅遊伺服器)
  3. AI 處理請求:

    AI 首先讀取所有選擇的資源以收集內容。從行事曆中,它識別可用日期。從旅行偏好中,它了解偏好的航空公司和酒店類型。從過去的旅行中,它發現以前喜歡的地點。從天氣資料中,它檢查旅行期間的氣候條件。

    使用此內容,AI 然後請求使用者批准執行一系列協調動作:搜尋從 NYC 到巴塞隆納的航班、在指定預算內尋找酒店、為旅行期間建立行事曆事件,以及發送包含旅行詳情的確認電子郵件。