MCP 資源與工具:有何差異,以及何時該使用哪一種?

模型上下文協定(MCP)為 AI 應用程式提供了一種標準方式,可將模型與外部內容及功能連接起來。對於建置 MCP 伺服器的開發人員而言,最重要的設計決策往往看似簡單:某項功能應該作為資源公開,還是作為工具公開?
這項區別會影響代理程式如何探索資訊、何時消耗 Token、能夠變更什麼,以及使用者如何評估風險。建模不佳的功能可能使整合更難理解:靜態參考資料變成不必要的函式呼叫,或具重大影響的動作看起來像是無害的內容。
實務上,MCP 資源提供應用程式可供 AI 系統使用的唯讀資訊。MCP 工具則公開模型可以請求的可執行操作。理解兩者之間的界線,是可靠、安全且節省 Token 的 MCP 伺服器開發基礎。
為何 MCP 中資源與工具的區別如此重要
AI 代理程式既需要資訊,也需要採取行動的能力。然而,資訊擷取與動作執行具有不同的信任模型。
模型可能需要資料庫結構描述,以了解哪些查詢可行。接著,它可能需要另一項功能來執行已核准的查詢。將兩者視為相同類型的整合會模糊意圖、增加權限管理的複雜度,並可能導致過度使用內容。
資源與工具的區別之所以重要,是因為它明確界定了:
- 代理程式行為: 模型可以獨立檢查穩定的內容,而不必同時請求操作。
- 安全邊界: 讀取權限和寫入權限可以分別審查、設定範圍及治理。
- 使用者信任: 使用者可以區分代理程式是在了解系統,還是在變更該系統。
- Token 效率: 可在需要時擷取相關內容,而非不加區分地插入每個提示中。
- 伺服器設計: 功能更容易命名、記錄、測試及維護。
MCP 並不表示每個可用資源都會自動放入模型內容中。資源可透過 MCP 功能模型取得,而主機應用程式決定如何及何時呈現或讀取這些資源。當可用資訊範圍廣泛、敏感或載入成本高時,這種由主機控制的方法至關重要。
什麼是 MCP 資源?
MCP 資源是由 MCP 伺服器公開、以 URI 為基礎的唯讀內容單元。它們專為 AI 系統在完成任務時可能需要檢查、摘要、推理或引用的資訊而設計。
資源不只是任何檔案或通用 API 端點。在模型上下文協定中,它是可探索的內容資料單元,通常以 URI 識別。伺服器可以公開代表文件、設定、結構描述、專案中繼資料、知識庫頁面或產生的狀態資訊的資源。
常見範例包括儲存庫架構指南、`README` 檔案、OpenAPI 結構描述、資料庫資料表定義,或部署環境的目前設定。這些內容很有用,因為它們能在代理程式提出或執行工作之前,協助其了解系統的狀態與規則。
在協定層級,伺服器可透過 `resources/list` 宣告可用內容。接著,用戶端可透過 `resources/read` 擷取特定項目。這種分離方式可讓主機與代理程式在載入內容本身之前,先檢查有哪些可用項目。
當答案應從既有且穩定的資訊推導而來時,資源特別有用。例如,正在檢視陌生服務的代理程式,可以在建議整合方式之前先讀取包含該服務 API 合約的資源。資源提供證據與內容;它不會執行變更。

什麼是 MCP 工具?
MCP 工具是模型可透過 MCP 伺服器探索並呼叫的可執行功能。它們代表操作:代理程式可以要求已連接系統執行的任務。
工具可能會發出 API 請求、建立議題、執行部署檢查、產生報告、傳送訊息,或寫入資料庫。許多工具可能具有副作用,但副作用並非必要條件。例如,唯讀資料庫查詢仍可正確建模為工具,前提是它是一項具有輸入、執行邏輯及結構化結果的操作。
伺服器透過 `tools/list` 公開工具定義。每個定義都應傳達明確的名稱、說明及輸入結構描述。模型透過 `tools/call` 呼叫選定的功能,並提供符合工具預期輸入的引數。
關鍵設計原則是,工具要求伺服器執行工作。它的輸出可能是資料,但該資料是執行結果,而非可直接定址的內容成品。
例如,`create_linear_ticket` 是一個工具,因為它會讓外部工作流程建立新的票證。當伺服器必須使用提供的環境與服務參數查詢即時系統時,`get_deployment_status` 也可以是工具。兩項操作都需要明確呼叫,即使只有其中一項必然會變更狀態。
MCP 資源與工具:主要差異
| 功能 | MCP 資源 | MCP 工具 |
|---|---|---|
| 控制模型 | 由主機控制的內容存取 | 由模型請求的執行,受主機控制約束 |
| 主要用途 | 提供唯讀資訊 | 執行操作或運算 |
| 副作用 | 無;唯讀 | 可能有,但非必要 |
| 識別碼模型 | 以 URI 為基礎 | 具有輸入結構描述的具名函式 |
| 探索方式 | `resources/list` | `tools/list` |
| 存取方式 | `resources/read` | `tools/call` |
| 典型範例 | 文件、結構描述、設定、中繼資料 | API 呼叫、建立票證、查詢、部署 |
| 最適用於 | 可檢查的穩定內容 | 可請求的參數化工作 |
此表格概括了一項實務界線:資源描述或公開資訊,而工具執行行為。在設計良好的 MCP 伺服器中,即使兩種功能都支援同一個更廣泛的工作流程,這項區別仍然清楚可見。
如何在資源與工具之間做出選擇
先從一個問題開始:代理需要檢視資訊,還是需要伺服器執行操作?
當資訊為唯讀、可自然定址且可作為有用的背景脈絡時,請使用資源。設定檔、產品規格、政策文件或資料庫結構通常都適合此模型。用戶端可以探索該項目、判斷其是否相關,並在不觸發業務邏輯的情況下讀取它。
當任務需要輸入、執行,或需要無法表示為靜態背景脈絡的結果時,請使用工具。建立支援工單、擷取篩選後的報告、啟動建置或更新記錄,都應透過工具完成。
有些工作流程同時需要這兩種基本元素。請考慮一個版本管理整合:
1. 將發佈政策與環境定義公開為資源。2. 提供一個工具,用於擷取所選服務的即時部署狀態。3. 提供另一個工具,用於觸發已核准的部署。
此設計可讓代理先瞭解政策與環境限制,接著請求目前的作業資料,最後才要求執行具有影響力的動作。這種分離方式更便於使用者稽核,也更容易讓產品團隊確保安全性。
避免將每個查詢都變成資源。如果資訊是動態、參數化或計算成本高,工具通常更合適。反之,若基於 URI 的資源能更清楚說明其用途,則避免將簡單且穩定的參考內容包裝成工具。
實用的 MCP 伺服器設計範例
儲存庫文件伺服器可能會將程式設計標準、架構決策記錄及服務擁有權對應表公開為資源。這些項目是具有可預測位址的實用參考資料。如果 `search_repository_docs` 功能接受關鍵字並在大量文件語料庫中執行目標式搜尋,則可作為工具。
對於資料庫整合,資料表結構和已核准的資料字典很適合作為資源。`run_readonly_query` 功能更適合建模為工具,因為它接受查詢或結構化篩選條件、驗證它們、對即時系統執行,並傳回結果。獨立的寫入工具絕不應隱藏在同一個含糊不清的介面之後。
專案管理整合遵循相同模式。資源可以提供衝刺看板的工作流程定義或議題標籤分類。工具可以建立工單、更新其狀態或指派負責人。資訊可協助代理提出明智的請求;工具則執行所要求的變更。
報告產生是另一個實用的邊界案例。固定的季度報告範本可以是資源。`generate_quarterly_report` 操作是工具,因為它接受時間範圍、選取即時資料、套用業務邏輯並建立輸出。若產生的報告成為其他代理應檢視的穩定成品,之後可將其公開為資源。
使用 Pi MCP 進行技術到簡報的工作流程
Presentation Intelligence (Pi) 支援 MCP 工作流程,協助需要將技術工作轉化為清晰利害關係人溝通內容的團隊。Pi MCP 並非用來取代程式碼編輯器、原始碼控制、資料庫或其他 MCP 伺服器。它處理交付流程中一個不同的步驟:將已核准的技術背景脈絡轉化為結構化且適合商務用途的簡報。
1. 業務邏輯優先於投影片樣式
在 Claude Code 等 AI 程式設計或代理環境中,團隊通常已具備製作強大簡報的原始素材:技術簡報、專案筆記、架構說明、發佈摘要,以及從程式碼庫衍生的發現。挑戰在於將這些素材轉化為適合受眾的敘事,而非一系列彼此脫節的投影片。
透過 Pi MCP,代理工作流程可將已定義的簡報或已核准的背景脈絡傳遞至 Presentation Intelligence,以建立邏輯優先的簡報結構。這對於工程路線圖更新、高階主管專案審查、技術銷售簡報、顧問報告及產品發佈敘事特別有用,因為其中的故事主線必須與底層實作同樣可信。
2. 產生流程在既有工作流程中保持可見
否則,建立簡報可能需要開發人員和產品團隊離開工作環境、手動重新整理技術筆記,並反覆查看另一個製作流程。Pi MCP 讓團隊能在既有代理工作流程中啟動簡報工作並追蹤產生進度。
當簡報取決於持續演變的專案背景脈絡時,這種連續性十分重要。團隊可以完善簡報內容、釐清受眾需求,並監控簡報工作流程,而不會將溝通視為事後補救。Pi 的多代理 AI 方法支援從複雜輸入轉換為專業結構與高品質商務簡報輸出,同時團隊仍可控制分享哪些背景脈絡。
安全且節省權杖的 MCP 整合最佳實務
良好的 MCP 伺服器開發始於範圍明確、易於理解的功能。將資源限定於代理真正需要的資訊。龐大且未分類的知識傾倒可能消耗權杖,卻無法改善決策。應優先採用較小的資源,並提供有意義的 URI、清楚的說明與可預測的界限。
對於工具,請使用精確的名稱與明確的輸入結構描述。`create_customer_ticket` 比 `manage_ticket` 傳達更多資訊,而將標題、優先順序與客戶 ID 分開的結構描述可降低歧義。傳回結構化且可採取行動的結果,讓代理無須重複呼叫同一工具即可判斷發生了什麼事。
盡可能分離讀取與寫入操作。既檢視又變更系統的工具會使權限審查更加困難。若某項操作具有重大影響,例如刪除記錄、傳送外部訊息或觸發正式環境部署,請套用最低權限存取原則,並在主機體驗中要求適當的使用者確認。
最後,請為漸進式揭露而設計。讓代理先探索功能,只擷取相關資源,並僅在需要操作時呼叫工具。此方法可減少權杖浪費、限制敏感資料暴露,並讓代理的推理路徑更容易理解。

實務結論:將模型背景脈絡視為資源,將操作視為工具
MCP 設計最可靠的原則很直接:將持久、唯讀的背景脈絡公開為資源,將可執行、參數化的工作公開為工具。這條界線可改善安全審查、讓代理行為保持可解釋性,並協助團隊管理背景脈絡預算,而不犧牲實用的存取能力。
對於複雜工作流程,最強大的設計通常會結合兩者。資源提供代理所需的事實與限制;工具則提供受到審慎治理的方式來據此採取行動。Pi MCP 將相同模式應用於技術溝通,協助團隊將已核准的專案背景脈絡轉化為結構化簡報,同時留在工作已經進行的 AI 環境中。
常見問題(FAQ)
MCP 資源可以變更資料嗎?
不可以。MCP 資源是唯讀的背景脈絡項目。它們旨在提供用於檢視與推理的資訊,而非修改檔案、資料庫、服務或外部工作流程。
MCP 工具一定會有副作用嗎?
不一定。工具是可執行的功能,有些僅用於擷取或計算資訊。不過,由於工具可以執行操作且可能產生副作用,因此應具備清楚的名稱、輸入結構描述、權限,以及在適當情況下的確認要求。
如何為新的 MCP 功能選擇資源或工具?
當功能是可由 URI 自然識別的穩定、唯讀資訊時,請選擇資源。當功能需要輸入、執行邏輯、查詢即時系統或執行動作時,請選擇工具。當工作流程同時需要背景脈絡與執行時,請將兩者各自公開為獨立功能。
Pi MCP 如何支援開發人員工作流程?
Pi MCP 協助開發人員、AI 工程師與產品團隊,將技術簡報、專案筆記及從程式碼庫衍生的背景脈絡轉化為結構化、邏輯優先的簡報。它支援在相容的 AI 程式設計與代理環境中進行簡報產生及進度追蹤,包括 Claude Code 等工作流程。


