前面我們已經做了不少 MCP Tool,讓 Agent 可以透過 Tool 執行各種操作,不過 MCP 不只有 Tool,如果今天我們只是想讓 Agent 取得某些資料,而不是執行一個動作,其實可以使用 MCP 的 Resource。
所以今天就來實際做一個 Resource,讓 Agent 可以讀取 MCP Server 提供的資料。
首先建立 day23 資料夾:
day23/
├── server.py
├── client.py
└── data/
└── company_info.txt
先準備一份簡單的公司資料:

接著在 MCP Server 中建立 Resource:
@mcp.resource("company://info")
def get_company_info() -> str:
return DATA_FILE.read_text(encoding="utf-8")
這裡使用 @mcp.resource() 宣告 Resource。
當 Client 讀取company://info Server 就會回傳對應的公司資料。
接著在 Client 中使用:
result = await session.read_resource(
"company://info"
)
print(result.contents[0].text)
執行後,就可以看到 MCP Server 提供的公司資訊,這裡和之前呼叫 Tool 不太一樣,我們不是讓 Server 執行一個動作,而是讀取一份資料。
如果 Resource 的資料不是固定的,而是會根據不同參數改變,就可以使用 Resource Template,例如我們可以建立員工資料:

這裡的 {name} 就是一個參數,使用 company://employee/Alice 就會取得 Alice 的資料,Client 只要讀取就能取得對應內容。
前面已經確認 Client 可以正常取得 Resource,接下來就實際把資料交給 Gemini,這次我們讓 Client 讀company://employee/Alice取得的資料是 Alice:Software Engineer
接著會把這份資料提供給 Gemini,並輸入 Alice 是做什麼工作的?
Gemini 最後回答:Alice 的工作是 Software Engineer(軟體工程師)

這次的流程就變成:
company://employee/Alice
↓
MCP Resource
↓
MCP Client
↓
取得 Alice 的資料
↓
Gemini
↓
回答問題
這裡要注意,今天並不是讓 Gemini 自己去選擇 Resource,而是由 Client 先讀取 Resource,再把取得的資料交給 Gemini。
到這裡可以簡單比較一下:
| Tool | Resource | |
|---|---|---|
| 用途 | 執行操作 | 取得資料 |
| 例子 | 計算、查詢、寫檔案 | 公司資訊、員工資料 |
| 核心概念 | 「叫它做事情」 | 「取得一份資料」 |
Tool 是讓 AI 做事情,Resource 是讓 AI 取得資料。
兩者都是讓 Agent 取得資料,但方式不同,Resource 是直接讀取 MCP Server 提供的資料,而 RAG 則是先搜尋知識庫,再找出相關內容。
Resource 是直接取得指定資料,RAG 是搜尋相關資料。
今天的 Resource 不需要使用 Embedding 或 Vector Database,直接透過 MCP Client 讀取即可。
今天我們第一次實際使用 MCP Resource,除了 Tool 之外,MCP Server 也可以提供資料給 Client 讀取,而且還可以透過 Resource Template,根據不同參數取得不同資料。
這樣我們的 Agent 就不只是能使用 Tool,也能取得 MCP Server 提供的資料。