載入中

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

理解資源流程

當使用者想要存取資源內容時,流程如下:

  • 使用者請求有關資源的資訊(例如「@report.pdf」)
  • 您的程式碼需要一份文件名稱清單以供自動完成
  • MCP 客戶端向 MCP 伺服器發送 ReadResourceRequest
  • 伺服器以包含資源數據的 ReadResourceResult 回應
  • 您的程式碼接著可以將此數據直接放入提示中

實作資源讀取

要從您的 MCP 客戶端讀取資源,您需要實作一個 read_resource 函式。首先,加入必要的匯入:

python
import json
from pydantic import AnyUrl

核心函式會向您的 MCP 會話發出請求並處理回應:

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

處理不同的資源類型

資源可以回傳不同類型的內容,因此您需要檢查 MIME 類型並相應地解析:

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

這種方法處理兩種主要情境:

  • 需要解析的 JSON 資源
  • 可以原樣回傳的純文字資源

測試資源存取

您可以透過在應用程式中測試來驗證您的資源實作是否正常運作。當您輸入「@」後接資源名稱時,您應該會看到可用資源的自動完成清單。選擇其中一個將會把其內容直接包含在您的提示中。

這種方法的主要優勢在於效率——Claude 能立即收到文件內容,而不需要進行額外的工具呼叫來存取資訊。

資源與工具的使用比較

資源在以下情況特別有用:

  • 您有經常被參考的靜態或半靜態內容
  • 您想要減少 API 呼叫的次數
  • 內容應該立即在提示上下文中可用

這與工具不同,工具更適合用於動態操作,或是當您需要 AI 根據對話上下文來決定是否存取某些資訊時。