載入中

MCP 中的資源允許您的伺服器公開可直接包含在提示中的資訊,而不需要透過工具呼叫來存取資料。這創造了一種更有效率的方式來為 AI 模型提供上下文。

資源存取的序列圖:使用者在 CLI 中輸入「What's in the @...」,我們的程式碼向 MCP 伺服器發送 ReadResourceRequest,伺服器回傳包含資源內容的 ReadResourceResult

上圖展示了資源的運作方式:當使用者輸入類似「What's in the @...」的內容時,我們的程式碼會將其識別為資源請求,向 MCP 伺服器發送 ReadResourceRequest,並取得包含實際內容的 ReadResourceResult。

實作資源讀取

要在您的 MCP 客戶端中啟用資源存取,您需要實作一個 read_resource 函式。首先,加入必要的匯入:

python
import json
from pydantic import AnyUrl

核心函式會向 MCP 伺服器發出請求,並根據其 MIME 類型處理回應:

python
async def read_resource(self, uri: str) -> Any:
    result = await self.session().read_resource(AnyUrl(uri))
    resource = result.contents[0]

    if isinstance(resource, types.TextResourceContents):
        if resource.mimeType == "application/json":
            return json.loads(resource.text)

    return resource.text

了解回應結構

當您請求一個資源時,伺服器會回傳一個包含 contents 清單的結果。我們存取第一個元素,因為我們通常一次只需要一個資源。回應包括:

  • 實際內容(文字或資料)
  • 告訴我們如何解析內容的 MIME 類型
  • 關於該資源的其他元資料

內容類型處理

該函式會檢查 MIME 類型以決定如何處理內容:

  • 如果是 application/json,則將文字解析為 JSON 並回傳解析後的物件
  • 否則,回傳原始文字內容

這種方法能無縫處理結構化資料(如 JSON)和純文字文件。

測試資源存取

實作完成後,您可以透過您的 CLI 應用程式測試資源功能。當您輸入「@」後接資源名稱時,系統將會:

  1. 在自動完成清單中顯示可用的資源
  2. 讓您使用方向鍵和空格鍵選擇資源
  3. 將資源內容直接包含在您的提示中
  4. 將所有內容傳送給 AI 模型,而不需要額外的工具呼叫

與讓 AI 模型進行單獨的工具呼叫來存取文件內容相比,這創造了更流暢的使用者體驗。資源內容成為初始上下文的一部分,從而能夠立即對資料做出回應。