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

資源透過 URI(本質上是位址)來公開數據。當客戶端需要數據時,它會發送一個帶有特定 URI 的 ReadResourceRequest,而您的伺服器會以所請求的資訊作為回應。
兩種資源類型
您可以建立兩種主要類型的資源:
- 直接資源(Direct Resources) - 具有不包含任何參數的靜態 URI(例如
docs://documents) - 範本化資源(Templated Resources) - 在其 URI 中包含參數(例如
docs://documents/{doc_id})

對於範本化資源,Python SDK 會自動從 URI 中解析參數,並將它們作為關鍵字引數傳遞給您的函式。URI 中的參數名稱會成為您函式中的引數名稱。
實作資源
使用 @mcp.resource() 裝飾器建立資源非常簡單。以下是實作這兩種類型的方法:
python
@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 數據結構即可。
測試您的資源
您可以使用 MCP Inspector 工具來測試資源。使用 uv run mcp dev mcp_server.py 啟動您的伺服器,然後導覽至網頁介面。

檢查器會將直接資源與範本化資源分開顯示。直接資源會出現在主要的「Resources」區段中,而範本化資源則會顯示在「Resource Templates」下。您可以點擊任何資源來測試它,並查看您伺服器回傳的確切回應結構。
實際應用案例
資源非常適合用於:
- 提供自動完成數據(例如文件清單)
- 擷取檔案內容或資料庫記錄
- 公開設定數據
- 提供客戶端所需的任何唯讀資訊
主要優勢在於,資源允許客戶端主動擷取數據,而不需依賴工具或複雜的互動。這使它們非常適合用於像文件提及(document mentions)這樣的功能,您可以根據使用者的引用自動將內容注入提示中。