MCP 伺服器中的資源(Resources)讓您能夠向客戶端公開資料,類似於典型 HTTP 伺服器中的 GET 請求處理器。它們非常適合需要擷取資訊而非執行動作的情境。
理解資源
將資源視為唯讀端點,可以回傳任何類型的資料——字串、JSON、二進位檔案等。您可以設定 'mime_type' 來提示客戶端您回傳的是什麼類型的資料。

資源的運作方式是定義一個 URI(類似 URL),客戶端可以請求該 URI。當客戶端需要資料時,它會發送一個帶有特定 URI 的 ReadResourceRequest,而您的伺服器會以包含資料的 ReadResourceResult 作為回應。
兩種資源類型
您可以建立兩種主要類型的資源:
- 直接資源(Direct Resources) - 具有靜態 URI,不包含任何參數(例如 "docs://documents")
- 範本化資源(Templated Resources) - 在其 URI 中包含參數,這些參數會被解析並傳遞給您的函式(例如 "docs://documents/{doc_id}")

對於範本化資源,Python SDK 會自動從 URI 中解析參數,並將其作為關鍵字引數傳遞給您的函式。URI 中的參數名稱必須與您函式的參數名稱完全一致。
建立資源
以下是實作這兩種資源類型的方法:
@mcp.resource(
"docs://documents",
mime_type="application/json"
)
def list_docs() -> list[str]:
return list(docs.keys())
@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]MCP Python SDK 會自動序列化您回傳的任何內容。您不需要手動將資料轉換為 JSON 字串——只需回傳 Python 物件,SDK 會處理轉換。
測試您的資源
您可以使用 MCP Inspector 來測試資源。使用以下指令啟動您的伺服器:
uv run mcp dev mcp_server.py
然後在瀏覽器中連接到 inspector。您會看到兩個區段:
- Resources - 列出您的直接/靜態資源
- Resource Templates - 顯示您的範本化資源

點擊任何資源以進行測試。對於範本化資源,您需要提供參數的值。inspector 會顯示您的客戶端將收到的確切回應結構,包括 mime type 和序列化後的資料。
實際應用案例
資源非常適合用於實作聊天應用程式中的文件提及(document mentions)等功能。例如,當使用者輸入「@」來提及一份文件時,您可以:
- 使用直接資源來擷取所有可用文件的清單,以供自動完成使用
- 使用範本化資源來擷取被提及的特定文件的內容
這種方法讓您能夠預先將文件內容注入提示中,而不需要 AI 使用工具來擷取資訊。