Agent 與 MCP

MCP 三大原語:tools、resources、prompts 怎麼分工

MCP 有三大原語:tools 由模型控制,讓 Claude 自主呼叫來取得新能力;resources 由應用控制,用來把資料帶進 UI 或對話脈絡;prompts 由使用者控制,是預先寫好、測試過的高品質指令範本。分辨三者的關鍵不是功能,而是控制權在誰手上。
MCP 三大原語:tools、resources、prompts 怎麼分工:文章重點卡

MCP 三大原語:tools、resources、prompts 怎麼分工

上一篇我們搞懂了 MCP 是什麼。這一篇進到核心:MCP server 對外提供的東西,其實就三種,官方叫它們三大原語(primitives):tools、resources、prompts。名字都很直白,但很多人分不清楚什麼時候該用哪個。

分辨三者的關鍵,說到底就一句話:不是功能,而是控制權在誰手上。tools 服務模型、resources 服務應用、prompts 服務使用者。這篇帶你把這句話拆開來看。

你將學到什麼

tools:模型控制

Claude 自己決定何時呼叫,用來擴充模型的能力。

resources:應用控制

像 GET 端點一樣,把資料交給你的程式使用。

prompts:使用者控制

預先打磨好的指令範本,使用者一鍵觸發。

挑選原則

一張對照表加一句口訣,幫你決定該用哪一個。

一句話總綱:看控制權在誰手上

同樣是「從 server 拿東西」,三個原語的差別在於:由誰決定什麼時候動用它。Claude 自己決定的是 tools,你的應用程式碼決定的是 resources,使用者親手觸發的是 prompts。這個分法也剛好對應應用堆疊的三層:模型層、程式層、介面層,每個原語各自服務一層。這條線畫清楚,後面全部都好懂。

tools 控制者:模型 Claude 自主決定呼叫 用途:擴充能力 resources 控制者:應用 程式決定何時抓資料 用途:填 UI、補脈絡 prompts 控制者:使用者 按鈕、選單、slash 指令 用途:預定義工作流
三大原語各自服務堆疊裡的不同角色。

tools:模型控制的能力擴充

tools 完全由 Claude 控制:模型自己判斷何時呼叫、呼叫哪一個,結果也直接被 Claude 拿去完成任務。它適合把「新能力」交到模型手上。例如你請 Claude 用 JavaScript 算出 3 的平方根,決定動用程式執行工具的是 Claude 自己,不是你的程式,也不是使用者。

拿文件管理當例子,read_doc_contents 與 edit_document 這兩個工具,就是讓 Claude 能自主讀寫文件的能力來源:你只要描述需求,Claude 自己決定先讀哪份、改哪段。

判斷該不該做成 tool 有個簡單的問法:這件事有沒有「動作」的成分?會改變狀態、會執行程式、會對外查詢的,交給 tools,讓 Claude 自己抓時機;純粹取資料給程式用的,往往下一個原語更合適。

resources:應用控制的資料通道

resources 用來把資料暴露給 client,角色很像 HTTP 伺服器的 GET 端點:拿資料,不做動作。控制權在你的應用程式碼手上,由程式決定什麼時候抓、抓來做什麼,典型用途是填 UI,或替對話補上脈絡。

「文件提及」功能就是個好例子:使用者輸入 @ 時,程式抓文件清單做自動完成;使用者送出帶 @report.pdf 的訊息時,程式把那份文件的內容直接塞進要給 Claude 的 prompt。整個過程 Claude 不需要呼叫任何工具,資料在對話開始前就到位了,回應也就更快。

resources 有兩種型態:

  • direct resource:固定不變的 URI,例如 docs://documents,適合不需要參數的查詢。
  • templated resource:URI 裡帶參數,例如 docs://documents/{doc_id},SDK 會自動解析參數並傳給你的函式。

在 MCP Inspector 裡測試時,這兩種會分開列:Resources 分頁列出 direct resource,Resource Templates 分頁列出帶參數的範本,點進去填參數,就能看到 client 將收到的實際回應結構與 MIME type。

Claude 介面裡「從 Google Drive 加入檔案」這類功能,背後就是 resources 的思路:由應用決定要秀哪些文件、怎麼把內容注入對話脈絡。

prompts:使用者控制的工作流

prompts 是 server 作者預先寫好、反覆測試過的高品質指令範本,由使用者透過按鈕、選單或 slash 指令親手觸發。使用者當然可以自己打「把 report.pdf 轉成 markdown」,也會有結果;但用上作者打磨過、處理過各種邊角情況的範本,結果會穩定得多。

這正是 prompts 的價值主張:server 作者把領域專業封裝成範本,使用者不必自己變成 prompt 工程師。Claude 介面聊天輸入框下方的那些工作流按鈕,就是 prompts 的實際樣貌:一鍵啟動預先最佳化好的流程。

prompts 跟 server 的領域綁得越緊越好。文件管理的 server 適合提供格式化、摘要、分析文件的範本;資料分析的 server 則適合提供產報表、做視覺化的範本。給 prompt 作者留幾個實務建議:

  • 聚焦在 server 核心用途的任務上,不做萬用範本。
  • 指令寫得具體明確,不要含糊其辭。
  • 用不同輸入反覆測試,把邊角情況處理掉。
  • 描述寫清楚,讓使用者一眼知道這個 prompt 能做什麼。
  • 設計時想著它會跟 server 的 tools 與 resources 一起工作。

一張表幫你選

原語控制者適合場景介面上的樣子
tools模型(Claude)給 Claude 新能力,讓它自主完成任務Claude 執行程式、查資料的背後動作
resources應用程式碼把資料帶進 UI 或對話脈絡@ 提及、從雲端硬碟加入檔案
prompts使用者可重複觸發的預定義工作流slash 指令、工作流按鈕
決策口訣要給 Claude 新能力,用 tools;要把資料弄進應用做 UI 或補脈絡,用 resources;要給使用者一鍵可觸發的預定義工作流,用 prompts。

最後提醒:這是幫你選型的高階原則,不是硬性規定。實際專案裡三者混用非常正常,一個 prompt 觸發之後,Claude 往往還會再動用 tools 完成任務,你的應用也同時靠 resources 把文件內容端上桌。

參考出處本文取材自 Anthropic 官方 Claude Academy 免費課程「Introduction to Model Context Protocol」,由酒Ann 消化後以自己的視角重新編寫。想看英文原版課程,可到 Claude Academy 修習。

延伸學習

把這篇文章分享給需要的人FacebookLINEThreadsX

常見問答

tools 跟 resources 都能拿資料,差在哪?
控制權不同。tools 由 Claude 決定何時呼叫,適合讓模型自主行動;resources 由你的應用程式決定何時抓取,適合做自動完成清單,或把文件內容直接塞進 prompt。
resources 的兩種型態是什麼?
direct resource 用固定的 URI,適合不需要參數的查詢;templated resource 在 URI 裡帶參數,SDK 會自動解析並當成關鍵字引數傳給你的函式。
使用者自己打指令就好,為什麼需要 prompts?
自己打當然可以,但效果通常較差。prompts 是 server 作者精心打磨、反覆測試過的範本,把領域知識包進去,使用者一鍵就能得到穩定的高品質結果。
三個原語可以混用嗎?
可以,而且很常見。例如一個 prompt 觸發後,Claude 會再用 tools 去讀取或編輯文件;你的應用也可能同時用 resources 提供自動完成清單。