載入中

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)這樣的功能,您可以根據使用者的引用自動將內容注入提示中。