載入中

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

理解資源流程

當使用者在您的應用程式中輸入類似「What's in the @...」的內容時,系統需要取得可用資源的清單以進行自動完成。MCP 客戶端會向伺服器發送 ReadResourceRequest,伺服器則會回應一份可供參考的文件名稱清單。

實作資源讀取

核心功能發生在您 MCP 客戶端的 read_resource 方法中。此方法接受一個 URI 參數,用於識別要從伺服器取得哪個資源。

首先,加入必要的匯入項目以處理 JSON 解析和 URL 驗證:

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 資源能被正確解析,而純文字資源則原樣回傳。

測試實作

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

  • 在自動完成清單中顯示可用的資源
  • 允許您使用方向鍵和空白鍵選擇資源
  • 將資源內容直接包含在發送給 Claude 的提示中

這意味著 Claude 能立即收到文件內容,而不需要進行額外的工具呼叫,使互動更有效率。

主要優勢

相較於工具,資源在存取靜態資訊方面提供了多項優勢:

  • 內容直接包含在提示中,降低延遲
  • 對話期間不需要額外的 API 呼叫
  • 透過自動完成功能提供更好的使用者體驗
  • 靜態數據與動態操作之間有更清晰的分離

資源最適合用於相對靜態的資訊,這些資訊您希望讓 AI 模型能輕鬆存取,例如文件、報告或參考資料。