MCP 伺服器中的資源允許您向客戶端公開數據,類似於典型 HTTP 伺服器中的 GET 請求處理程式。它們非常適合您需要獲取資訊而非執行動作的情境。
透過範例理解資源
假設您想要建立一個文件提及功能,讓使用者可以輸入 @document_name 來引用檔案。這需要兩個操作:
- 獲取所有可用文件的清單(用於自動完成)
- 獲取特定文件的內容(當被提及時)

當使用者提及某個文件時,您的系統會自動將該文件的內容注入到發送給 Claude 的提示中,從而消除 Claude 需要使用工具來獲取資訊的需求。

資源如何運作
資源遵循請求-回應模式。當您的客戶端需要數據時,它會發送一個帶有 URI 的 ReadResourceRequest 來識別它想要哪個資源。MCP 伺服器處理此請求並在 ReadResourceResult 中返回數據。

流程如下:您的程式碼向 MCP 客戶端請求資源,客戶端將請求轉發給 MCP 伺服器。伺服器處理 URI,執行適當的函式,並返回結果。

資源的類型
資源有兩種類型:
直接資源
直接資源具有永不改變的靜態 URI。它們非常適合不需要參數的操作。
@mcp.resource(
"docs://documents",
mime_type="application/json"
)
def list_docs() -> list[str]:
return list(docs.keys())範本化資源
範本化資源在其 URI 中包含參數。Python SDK 會自動解析這些參數,並將它們作為關鍵字引數傳遞給您的函式。
@mcp.resource(
"docs://documents/{doc_id}",
mime_type="text/plain"
)
def fetch_doc(doc_id: str) -> str:
if doc_id not in docs:
raise ValueError(f"Doc with id {doc_id} not found")
return docs[doc_id]
實作細節
資源可以返回任何類型的數據——字串、JSON、二進位數據等。使用 mime_type 參數向客戶端提示您返回的數據類型:
"application/json"用於結構化數據"text/plain"用於純文字"application/pdf"用於二進位檔案
MCP Python SDK 會自動序列化您的返回值。您不需要手動將物件轉換為 JSON 字串——只需返回數據結構,讓 SDK 處理序列化即可。
測試您的資源
您可以使用 MCP Inspector 測試資源。使用以下命令啟動您的伺服器:
uv run mcp dev mcp_server.py然後在瀏覽器中連接到 inspector。您會看到兩個區段:
- Resources - 列出您的直接/靜態資源
- Resource Templates - 列出您的範本化資源

點擊任何資源以測試它。對於範本化資源,您需要為參數提供值。inspector 會顯示您的客戶端將收到的確切回應結構,包括 MIME 類型和序列化數據。
資源提供了一種乾淨的方式來公開來自您 MCP 伺服器的唯讀數據,讓客戶端能夠輕鬆獲取資訊,而無需處理工具呼叫的複雜性。