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 模型能輕鬆存取,例如文件、報告或參考資料。