載入中

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 中的參數名稱必須與您函式的參數名稱完全一致。

建立資源

以下是實作這兩種資源類型的方法:

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 物件,SDK 會處理轉換。

測試您的資源

您可以使用 MCP Inspector 來測試資源。使用以下指令啟動您的伺服器:

uv run mcp dev mcp_server.py

然後在瀏覽器中連接到 inspector。您會看到兩個區段:

  • Resources - 列出您的直接/靜態資源
  • Resource Templates - 顯示您的範本化資源

點擊任何資源以進行測試。對於範本化資源,您需要提供參數的值。inspector 會顯示您的客戶端將收到的確切回應結構,包括 mime type 和序列化後的資料。

實際應用案例

資源非常適合用於實作聊天應用程式中的文件提及(document mentions)等功能。例如,當使用者輸入「@」來提及一份文件時,您可以:

  1. 使用直接資源來擷取所有可用文件的清單,以供自動完成使用
  2. 使用範本化資源來擷取被提及的特定文件的內容

這種方法讓您能夠預先將文件內容注入提示中,而不需要 AI 使用工具來擷取資訊。