截至 2026 年 7 月 28 日,MCP 官方已發布新的規範說明;這個日期可在官方規範發布公告核對。這並不代表 MCP 取代 Function Calling:Function Calling 是模型與應用程式之間的呼叫機制,MCP 是客戶端發現與連線工具、資源的協議層,兩者通常應該組合,而不是二選一。 單一應用只有少量工具,先用 Function Calling;多個 Agent 客戶端要共用同一組工具時,再評估加入 MCP。
這篇適合三類讀者:只有幾個內部函式的小型專案,應避免過早引入協議層;要讓多個模型或客戶端共用工具的平台團隊;以及正在遷移舊工具程式碼、需要先穩定執行器的架構師。
先記住一個邊界: MCP 不會自動替你的應用程式執行高風險動作,也不會因為工具描述寫得完整,就取代伺服器端的權限驗證。
先看清 2026 MCP vs Function Calling 的資料流位置
不要用「哪一個功能比較多」決定工具層。你應先把一次完整呼叫拆成下列路徑:
模型 → 應用程式 → 工具選擇與參數驗證 → 執行器 → MCP Server(如有)→ 外部 API 或內部服務 → 應用程式 → 模型。
在沒有 MCP 的單一應用中,模型產生 Function Calling 請求後,應用程式直接查找本地工具、驗證參數並交給執行器。Google 的Function Calling 官方說明、OpenAI 的工具呼叫 API 參考,以及 Claude 的Tool Use 文件,都應被視為模型層的行為依據,而不是 MCP 規範本身。
加入 MCP 後,應用程式仍是安全控制主體。它可以作為 MCP 客戶端,向 MCP Server 取得工具清單、資源或提示,然後把可用工具整理成模型能理解的 Function Calling 或 Tool Calling 定義。模型決定「想呼叫什麼」,應用程式決定「是否允許執行」,MCP 則協助「工具如何被發現與連線」。
| 元件 | 主要責任 | 不應假設它會負責的工作 |
|---|---|---|
| 模型 | 產生工具呼叫意圖與參數 | 真正執行 API、判斷使用者權限 |
| 應用程式 | 編排對話、驗證、審批與執行 | 把所有工具契約永久綁死在單一模型格式 |
| MCP Server | 暴露工具、資源與提示 | 自動取得業務系統最高權限 |
| 執行器 | 呼叫內部服務或外部 API | 只因模型要求就放行高風險操作 |
| 外部 API | 執行實際業務動作 | 理解模型輸出的自然語言意圖 |
MCP 官方 TypeScript SDK v2 的文件可作為協議實作入口;但你仍需依實際模型文件確認工具格式、錯誤處理與輸出包裝方式。
第一步:用接入複雜度判斷是否值得加協議
少量本地工具的最短路徑通常是:模型輸出呼叫要求、應用程式驗證 JSON、執行器呼叫函式、結果回傳模型。這條路徑少了連線生命週期、工具發現、授權交換與版本相容處理,適合先驗證 Agent 是否真的能完成任務。
MCP 額外帶來的不是單純一個套件,而是一組需要維護的邊界:
- MCP Client 與 Server 的連線建立、斷線重連和逾時處理。
- 工具清單同步、工具版本與描述更新。
- 遠端連線的授權、憑證輪替和租戶隔離。
- 日誌串接:誰提出呼叫、哪個客戶端選取、執行了什麼、結果是否回傳。
- 高風險動作的人工審批與拒絕後行為。
因此,若你只有一個 Agent 客戶端,新增 MCP 後卻仍要維護同一套本地工具註冊、權限和錯誤轉換,標準化收益可能尚未出現。
| 評估項目 | 直接 Function Calling | 加入 MCP |
|---|---|---|
| 本地少量工具 | 路徑短,容易除錯 | 可能增加不必要的連線層 |
| 遠端工具 | 需自行設計工具發現與授權 | 可集中處理協議連線,但仍要做權限控制 |
| 多客戶端共享 | 需要各自重寫工具接入 | 工具描述與資源可集中暴露 |
| 版本管理 | 由應用程式自行控管 | 需同時控管 Client、Server 與契約 |
| 故障排查 | 主要看模型與執行器 | 還要追蹤協議、連線和授權狀態 |
第二步:用工具複用性,而不是未來想像,決定標準化範圍
你可以先列出「同一組工具會被誰使用」:
| 使用組合 | 建議工具層 | 判斷理由 |
|---|---|---|
| 一個模型、一個應用程式 | Function Calling 優先 | 直接驗證產品流程,避免預建平台 |
| 一個應用程式、多個模型 | 先抽象內部契約,再接模型轉接層 | 模型格式可能不同,但未必需要 MCP |
| 多個 Agent 客戶端共用工具 | 評估 MCP | 工具發現、資源和提示可有共同協議 |
| 多個團隊管理遠端工具 | MCP 加上明確授權與觀測性 | 連線與責任邊界需要被標準化 |
| 高風險業務動作 | 任一方案都要有應用程式審批 | 協議不能替代服務端權限檢查 |
MCP 的價值會在「重複接入成本」開始累積時上升,而不是在第一個工具出現時就成立。若只有一個客戶端,先把執行器做成可測試、可拒絕、可回放的元件,通常比先建立遠端 MCP 平台更合理。
第三步:把 JSON Schema 放在內部契約,而不是直接當傳輸格式
Function Calling 和 MCP 工具定義都可能使用 JSON Schema 描述輸入,但「都能描述 JSON」不代表可以直接複製貼上。不同模型與協議可能對 $ref、聯合型別、額外欄位或描述文字的處理方式不同;因此你應保存一份獨立的內部工具契約,再產生各模型與 MCP 所需的包裝格式。
JSON Schema 官方說明可用來核對型別、欄位與驗證概念。實作上至少要分開三件事:
- 輸入契約:欄位型別、必填條件、允許值與長度限制。
- 執行權限:使用者、租戶、角色、資源範圍和風險等級。
- 傳輸包裝:模型 Function Calling、MCP 工具請求和內部函式的格式轉換。
經驗提醒: Schema 通過只代表資料形狀合格,不代表這個人可以刪除資料,也不代表外部 API 應該接受該動作。權限檢查必須在執行器或服務端再次完成。
第四步:把安全與運維成本寫進選型表
MCP 的遠端授權需要另外設計。你可以參考MCP 授權文件,但不要把協議握手成功當成業務授權成功。應用程式仍需驗證使用者身分、租戶範圍、工具風險和每次操作的資源對象。
建議至少保留以下日誌欄位:請求識別碼、客戶端識別、模型回合識別、工具名稱、Schema 驗證結果、授權結果、執行開始與結束狀態、外部 API 回應類別,以及是否經過人工審批。這些欄位不是為了讓日誌看起來完整,而是讓你能回答「模型要求了什麼、應用程式放行了什麼、執行器實際做了什麼」。
| 風險或運維問題 | 直接 Function Calling 的處理方式 | MCP 架構的額外要求 |
|---|---|---|
| 工具被錯誤選取 | 應用程式限制可用工具與參數 | 還要處理工具清單來源與更新 |
| 權限越界 | 執行器或 API 再驗證 | 遠端授權、憑證與租戶隔離需同步管理 |
| 連線中斷 | 重試本地函式或 API | 需處理 Client、Server、逾時與重連 |
| 工具版本變動 | 隨應用程式版本部署 | Client、Server、Schema 必須可追蹤 |
| 高風險動作 | 加入審批或拒絕流程 | 不能把審批責任轉交給協議 |
第五步:用條件分支做最後決策
你可以在架構評審中直接使用以下分支,而不是以「MCP 比較新」作為理由:
- 若目前只有一個應用程式、少量內部工具,且工具不需要被外部客戶端發現,則選 Function Calling。
- 若已有多個模型,但工具仍由同一個應用程式集中管理,則先抽取內部工具契約與轉接層,不急著導入 MCP。
- 若兩個或更多獨立客戶端需要共用工具、資源或提示,且團隊願意承擔授權與版本管理,則評估 MCP。
- 若遠端工具需要跨團隊提供,且你已經有連線監控、憑證輪替和錯誤追蹤能力,則可進入 MCP 試點。
- 若團隊還無法記錄工具呼叫、拒絕未授權動作,或無法在故障時回退,則停止擴展,先回到穩定的 Function Calling 執行路徑。
FAQ:遷移前先釐清五個常見誤區
FAQ 中的答案不應只重複定義。你真正要確認的是:協議增加後,是否減少了未來的重複接入,而不是把同一套問題搬到另一個傳輸格式。
第六步:採用三階段遷移,保留可回退路徑
第一階段,穩定執行器。 先用現有 Function Calling 完成工具註冊、輸入驗證、權限檢查、錯誤分類和審批流程;此時不要把模型輸出的 JSON 直接交給外部 API。
第二階段,抽取工具契約。 將工具名稱、用途、輸入 Schema、輸出格式、錯誤碼和風險等級從模型整合程式碼移出,讓同一個執行器可以接受不同模型格式。這一步完成後,即使暫時不使用 MCP,未來也較容易增加第二個客戶端。
第三階段,加入 MCP 試點。 只挑一組低風險、可觀測、容易回退的工具建立 MCP Server,讓一個額外客戶端接入,再比較工具發現、授權、連線恢復和日誌排查是否真的省下重複工作。MCP 官方說明也應配合協議與工具使用文件一併核對,不要把單一實作的行為當成所有客戶端都支援。
當出現以下任一情況,就應停止擴展:MCP Server 的權限無法與既有租戶模型對齊、連線故障會造成不可重試的業務動作、工具 Schema 必須為每個客戶端維護不同版本,或新增客戶端並沒有減少任何整合程式碼。此時保留內部契約與 Function Calling 路徑,通常比硬撐協議化更安全。
對現有方案的最後檢查:先評估環境,再決定部署位置
如果你目前把所有工具直接寫在單一應用程式裡,短期優點是部署簡單;但長期可能出現三個缺點:不同 Agent 客戶端必須重複接入、工具權限散落在各個模型轉接器中,以及遠端工具的日誌與版本難以集中追蹤。反過來,若你沒有多客戶端需求,直接建立 MCP 平台又會增加連線、授權和故障排查負擔。
因此,較穩妥的做法是先完成工具清單、客戶端數量和風險等級評估,再決定留在 Function Calling、加入 MCP,或採取分階段混合架構。若你需要臨時的 Mac 開發、測試或遠端 Agent 驗證環境,可先參考 ZavCloud 的 Mac 雲端租用方案;環境租用能讓你隔離測試,不必為一次性的 MCP 試點立即購置實體設備。你也可以透過 ZavCloud 幫助中心確認連線與使用條件,再按實際工具風險決定部署方式。
最後更新於 2026 年 8 月 18 日;資料核實自 MCP 官方規範公告、Gemini Function Calling 文件、OpenAI 工具呼叫參考與 Claude Tool Use 文件。若協議職責、授權方式或 Schema 表達方式發生變更,應重新檢查架構圖與回退條件。
ZavCloud Developer Infrastructure
為 AI Agent 工具層配置穩定的雲端 Mac 環境
使用 ZavCloud 專屬 M4 雲端 Mac,為 MCP 與函式呼叫整合建立可重複的測試及驗證環境。
透過 SSH 或 VNC 遠端操作,讓團隊在隔離的實例中測試多模型、多客戶端及遠端工具流程。