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

當使用者輸入 @ 時,您需要顯示可用的文件。當他們提交帶有提及的訊息時,您會自動將該文件的內容注入傳送給 Claude 的提示中。

資源如何運作
資源遵循請求-回應模式。您的客戶端傳送帶有 URI 的 ReadResourceRequest,而 MCP 伺服器則以資料回應。URI 的作用就像是您想要存取的資源的位址。

資源的類型
資源有兩種類型:

- 直接資源: 不會改變的靜態 URI,例如
docs://documents - 範本化資源: 帶有參數的 URI,例如
docs://documents/{doc_id}
對於範本化資源,Python SDK 會自動從 URI 中解析參數,並將它們作為關鍵字引數傳遞給您的函式。
實作資源
資源是使用 @mcp.resource() 裝飾器定義的。以下是建立這兩種類型的方法:
直接資源(列出文件)
python
@mcp.resource(
"docs://documents",
mime_type="application/json"
)
def list_docs() -> list[str]:
return list(docs.keys())範本化資源(擷取文件)
python
@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]MIME 類型
資源可以回傳任何類型的資料——字串、JSON、二進位等。mime_type 參數會向客戶端提示您回傳的是什麼類型的資料:
application/json- 結構化 JSON 資料text/plain- 純文字內容- 任何其他適用於不同資料格式的有效 MIME 類型
MCP Python SDK 會自動序列化您的回傳值。您不需要手動轉換為 JSON 字串。
測試資源
您可以使用 MCP Inspector 來測試您的資源。使用以下指令執行您的伺服器:
bash
uv run mcp dev mcp_server.py然後在瀏覽器中連接到 inspector。您會看到:

- Resources: 列出您的直接/靜態資源
- Resource Templates: 顯示接受參數的範本化資源
點擊任何資源以測試它,並查看您的客戶端將收到的確切回應結構。

重點摘要
- 資源公開資料,工具執行動作
- 對靜態資料使用直接資源,對參數化查詢使用範本化資源
- MIME 類型有助於客戶端理解回應格式
- SDK 會自動處理序列化
- 範本化 URI 中的參數名稱會成為函式引數
資源提供了一種簡潔的方式,讓資料可供 MCP 客戶端使用,從而實現文件提及、檔案瀏覽,或任何需要從您的伺服器擷取資訊的情境。