Teverant AI · AI 應用趨勢

2026-06-18

MCP 協定:企業系統接 AI 的標準介面,工程師視角解讀

深度解析 MCP 協定如何將企業 AI 整合從 M×N 複雜度降至 M+N。覆蓋 JSON-RPC 通訊機制、認證鑑權與多租戶隔離、安全風險防範,以及五種行業部署架構選型。無論你在評估 MCP 企業接入方案還是對比自研介面卡,這篇工程師視角的拆解都能幫你做出有據可依的決策。

MCP 到底解決了什麼舊痛點:從 M×N 到 M+N

先把賬算清楚。假設你的團隊維護著 10 個 AI Agent,它們要訪問 20 個內部服務——CRM、工單系統、資料倉儲、知識庫……每個 AI Agent都要單獨理解每個服務的介面語義、認證方式、返回結構。這意味著你手裡實際有 10 乘 20,也就是 200 套適配邏輯。任何一個服務改了欄位,你得排查它被哪些 AI Agent引用過;任何一個 AI Agent換了模型,你又得重新校驗它和全部服務的相容性。這種網狀耦合的維護成本不是線性增長,而是隨兩端數量相乘膨脹。

真正讓工程團隊頭疼的,從來不是寫第一版整合,而是改第二版。一個網狀結構裡,任何一處變更都可能在意想不到的地方引發迴歸,因為沒有誰能說清「這條連接到底歸誰負責」。程式碼評審時找不到統一的契約可以對照,出了線上問題也難以快速定位是哪一段適配在作祟。規模越大,這種隱性債務越沉。當你回頭去看那個 200 這個數字,會發現它衡量的不只是工作量,而是系統的脆弱程度。

MCP(Model Context Protocol)的思路,本質上是在兩端之間插入一層標準契約。AI Agent不再直接串接每個服務,而是統一面向協議說話;服務也不再為每個呼叫方做客製,而是按協議暴露一次能力。於是那張乘法的網被拆成了兩條加法的邊:M 個 AI Agent各自實現一次協議客戶端,N 個服務各自實現一次協議服務端,整合關係從 M×N 收斂到 M+N。前面那個串接 200 次的場景,落到 MCP 上就是 10 加 20,30 個獨立的實現單元,每一個都有清晰的歸屬和明確的邊界。

這種收斂帶來的不只是數量上的好處。更關鍵的是變更被局部化了:服務端調整介面,只要協議契約不變,客戶端無感;新接一個 AI Agent,它天然就能消費所有已經接入協議的服務,不需要逐個適配。維護責任也隨之清晰——服務端負責把自己的能力描述準確,客戶端負責正確發起呼叫,中間靠協議對齊,而不是靠某個工程師腦子裡記著的隱式約定。

從行業走向看,MCP 正在沉澱為大模型連接私有資料和企業內部 API 的事實介面。這件事的分量在於,事實標準意味著生態會自發向它靠攏:工具供應方願意按它出 SDK,平台方願意按它做託管,企業內部團隊也更容易達成「我們就用這套」的共識。當一個協議跨過了從「可選項」到「預設項」的臨界點,接入它的邊際成本會持續下降,而不接入的隱性代價會持續上升。

Notion 的演進路徑是個有說服力的註腳。據其公開分享,這套串接層在採用 MCP 之前經歷了 5 次重構,對外暴露的工具數量超過了 100 個。當你的能力面鋪到這個量級,繼續用零散適配去餵每一個客戶端,維護負擔會變得不可持續——這恰好是 M×N 網狀結構在真實業務裡的樣子。他們最終選擇 MCP 作為統一介面層,並落到遠端 MCP Server 方案上,以支撐多客戶端的併發訪問。換個角度讀這個決定:不是協議有多新潮才選它,而是規模逼到一定程度,統一契約從「錦上添花」變成了「不得不為」。能撐住 100 多個工具、多個客戶端同時打進來的,只能是一套約定,而不是一百套默契。

所以這一節想講清的判斷是:MCP 要消滅的不是某一次整合的工作量,而是整合關係本身的乘法結構。如果你的 AI Agent和服務都還是個位數,網狀耦合的痛感未必明顯,自己寫幾個介面卡也能跑;但只要你預見到兩端都會增長,M×N 的曲線就會比你想像的更早咬上來。提前把它拉直成 M+N,買的是後面每一次變更時的從容。下一節我們拆開協議內部,看看這層契約具體靠 JSON-RPC、Schema 和流式返回怎麼把「說同一種話」落到實處。

通訊本質拆解:JSON-RPC 2.0、Schema 與流式返回

剝開各種封裝,MCP 線上路上跑的就是 JSON-RPC 2.0。這件事值得先說清楚,因為它直接決定了你的除錯方式和排錯路徑。你看到的「呼叫一個工具」,落到協議層無非是一條帶 method 和 params 的請求、一條帶結果或錯誤碼的響應。理解了這一層,很多看起來玄乎的串接問題就回到了熟悉的領域:抓包、看報文、對欄位。

真正容易在聯調階段卡住的,是工具返回的結構。客戶端不會無條件信任 Server 吐出來的任何 JSON,它按 Schema 校驗。返回裡 content 是個陣列,陣列每一項要標明 type,文本型別還得帶上對應的 text 欄位。少一個必填項、型別對不上,客戶端這邊表現出來的往往不是「報錯」,而是「工具好像沒生效」——模型那邊收到的是一段它無法解析的內容,於是裝作什麼都沒發生。所以排查這類問題,第一件事不是懷疑業務邏輯,而是把原始返回報文拉出來逐欄位比對 Schema。把校驗失敗和業務失敗區分開,能省掉大量無謂的猜測。

為什麼企業級 Server 不能停在 stdio

很多人上手 MCP 是從 stdio 模式開始的:本地起一個程序,標準輸入輸出當管道,幾分鐘就能跑通。這種模式適合本地工具、適合演示,但放到企業環境裡就不夠用了。stdio 是程序間的一對一管道,它沒有地方安放身份、沒有邊界承載租戶隔離。一旦你需要讓多個客戶端、多個團隊、甚至多個客戶共用同一個 Server,這條管道就成了天花板。

真正要上生產,遠端部署是繞不開的選擇,通常落在 HTTP SSE 或 WebSocket 這兩條路上。換成網路傳輸不只是把「管道」換長了,而是終於有了一個能掛載鑑權頭、能在連接上攜帶租戶標識、能做連接級審計的位置。換句話說,從 stdio 走向遠端,本質是從「一個工具」變成「一項服務」。前者只對自己負責,後者要對所有呼叫方的邊界負責。第三節會專門展開認證、鑑權與多租戶隔離怎麼做,這裡先確立一個判斷:凡是要支撐多方接入的 Server,傳輸層選型從一開始就該按服務來規劃,而不是等出了問題再遷移。

返回大數據時,一次性序列化會要命

還有一類問題在 demo 階段完全暴露不出來,等真實資料進來才爆發。設想一個查日誌的工具,開發時拿幾十行做樣本,順暢得很;上線後某次查詢命中了幾百兆的日誌檔案,工具試圖把整個結果一次性序列化成 JSON 返回——記憶體瞬間被頂上去,請求要麼超時,要麼把程序拖垮。這不是偶發,而是「全量返回」這種寫法在資料規模變大後的必然結果。

解法是把「取多少」和「從哪取」交還給呼叫方控制,也就是分頁或流式讀取。一種實踐得比較穩的做法是:單次呼叫預設只取固定行數,比如上限 1000 行,再用一個 offset 參數沿著資料往下滾,需要更多就再發一次請求。這樣做的好處有兩層:一是任何一次呼叫的記憶體佔用都有上界,不會因為底層資料膨脹而失控;二是模型可以根據前一段內容決定要不要繼續翻,而不是被迫一次性吞下它根本用不完的內容。

設計工具介面時,我的建議是把分頁當預設能力,而不是等遇到大數據再補。判斷標準很樸素:只要這個工具返回的資料量由外部輸入決定、上界不可控,就該從第一版就預留 limit 和 offset。把整個檔案、整張表載入記憶體再返回,這種寫法在樣本資料上永遠正確,在生產資料上遲早出事。提前劃好邊界,比事後救火便宜得多。

企業接入要準備什麼(一):認證、鑑權與多租戶隔離

把一個 MCP Server 接進企業系統,真正的工作量不在工具定義,而在身份這條線能不能走通。MCP 本身只規定了訊息怎麼傳,沒規定「這次呼叫是誰發起的、他能看到哪些資料」。這部分要靠你在傳輸層和會話層自己補齊。先把認證、鑑權、隔離這三件事拆開看,它們解決的是三個不同的問題,容易被混為一談。

認證:連接建立那一刻就要驗明身份

認證回答「你是誰」。MCP 走 Streamable HTTP 時,無論是建立 SSE 長連接還是發起一次 POST 呼叫,身份資訊都得搭在 HTTP Header 上,通常是一枚 Authorization: Bearer <token> 裡的 JWT。這裡有個工程上容易踩的點:不要等到呼叫某個具體工具時才校驗,而要在連接握手階段就完成驗證。原因是 SSE 是個長連接,一旦放進來一個匿名連接,後續所有流式推送都預設這個通道是可信的,等於在門口漏了人再去屋裡逐個盤問,代價高且容易漏。

JWT 的好處是自包含,Server 不必每次回頭查會話庫就能讀出簽發方、過期時間和使用者標識。但自包含也意味著撤銷難——token 一旦簽出去,在過期前都有效。所以企業場景裡要把有效期壓短,配合重新整理機制,而不是圖省事籤一個長期 token 掛在 Agent 配置裡。這種長命 token 一旦洩露,排查範圍會擴散到所有它能觸及的工具。

多租戶隔離:Session 與 User 共同框定資料邊界

認證過了,接下來是更棘手的隔離問題。一個 MCP Server 往往要同時服務多個租戶、多個使用者,而 SSE 是有狀態的長連接,這跟傳統無狀態 REST 的處理思路完全不同。可行的做法是給每條 SSE 連接繫結一個 Session ID,Server 端維護這個 Session 與連接的對映;真正劃定資料邊界時,再把 token 裡解出來的 User ID 疊加上去。Session ID 管的是「這是哪條活動連接」,User ID 管的是「這條連接背後是誰」——兩者結合才能為每次工具呼叫框出一個隔離的資料沙箱。

為什麼不能只靠其中一個?只用 Session ID,連接斷了重連身份就丟了,而且 Session 本身不攜帶權限語義;只用 User ID,你又無法區分同一使用者的多個併發會話、無法及時回收某條已斷開連接佔用的上下文。把兩者放在一起,才能做到既追得到人,又管得住連接生命週期。落到程式碼裡,每個工具的執行入口都應該強制帶上「當前 User + 當前租戶」這個上下文,而不是信任工具實現自己去判斷——把隔離邏輯下沉到框架層,比散落在每個工具裡要可靠得多。

鑑權:從單點登入到跨 Server 的信任傳遞

當企業裡 MCP Server 不止一個,鑑權就從「單 Server 內部」變成了「跨 Server 的信任傳遞」問題。一個 Agent 在完成任務時可能要先後呼叫文件、工單、資料庫等多個 Server,如果每個 Server 都讓使用者單獨走一遍 OAuth 授權,使用者會陷入授權疲勞,IT 也會丟失對「誰授權了什麼」的全域性視野——這正是大規模 Agent 部署裡最容易失控的地方。

業界目前有兩條值得參考的思路。一是以身份提供商作為信任中樞:WorkOS 的 Cross-App Access 把 IdP 當成各個 MCP Server 之間的信任橋,使用者在 IdP 處 SSO 登入一次,簽發的 Identity JWT 就能在多個 Server 間被認可,省掉了逐個 Server 重複授權。它的價值不只是少點幾次同意按鈕,更在於授權關係被收斂回 IdP 這個單一可審計的源頭。二是把 OAuth 這件事交給閘道器託管:Cloudflare 的 Managed OAuth 方案,讓原本受 Cloudflare Access 保護的內部應用一鍵獲得被 AI Agent訪問的能力,不必為每個 MCP Server 單獨搭建和維護一套 OAuth 授權流程。對維運團隊來說,這意味著把分散的授權配置統一收口到一處。

這兩種方案的共同邏輯值得記住:授權疲勞和審計盲區,本質上是因為信任被分散到了每個 Server 自己手裡。無論用誰的方案,工程上要追求的方向都是把信任的頒發與回收收斂到一個集中、可審計的環節,而不是放任它在系統裡四處生長。

給落地的幾條判斷

  • 認證放在連接握手階段,而不是工具呼叫階段;SSE 長連接尤其要警惕「放進來就預設可信」。
  • JWT 有效期壓短並配重新整理,杜絕把長命 token 寫死在 Agent 配置裡。
  • 隔離邏輯下沉到框架層,Session ID 管連接、User ID 管身份,兩者共同框定每次呼叫的資料沙箱。
  • 多 Server 場景優先考慮把授權收斂到 IdP 或閘道器,先把審計這條線打通,再談細粒度權限。

這一節的三件事是有先後的:認證不通,隔離無從談起;隔離不清,跨 Server 鑑權只會放大風險。建議按這個順序逐層驗證,不要跳著做。

MCP 還是自研介面卡:工程師的取捨清單

這道選擇題的本質,不是「哪個技術更先進」,而是「你要複用多少存量資產,又願意承擔多少不確定性」。先把兩種路徑的代價攤開看。

自研介面卡的好處是確定性:介面怎麼定、認證怎麼掛、出錯怎麼兜底,全在你手裡,出了問題也知道去哪兒改。代價是每接一個模型客戶端、每串接一個內部系統,都得寫一遍膠水,數量一上去就退化成 M×N 的重複勞動。MCP 的價值正是把這層重複收斂成一個統一面,但它換來的標準化,也意味著你得接受協議當前的設計取捨。

從工程定位上理解 MCP 會清晰很多。Java 生態裡,Spring AI 社群把它當成模型與企業系統之間的一道隔離層來用——你不必為了讓大模型呼叫而重構既有服務,而是在 Spring Boot 工程裡把現有能力按協議包一層暴露出去。關鍵在於,這層包裝不強迫你推翻已經跑順的東西:原有的鑑權鏈路、監控埋點、日誌與告警、發布與回滾流程都能原樣保留。對一個已經有成熟維運體系的團隊來說,這種「在邊界上做適配、內部保持不動」的方式,比推倒重來風險低得多。

複用思路同樣適用於客戶端側的相容問題。現實裡有一批模型客戶端只認 stdio 這種本地標準輸入輸出通道,比如 Claude Desktop、Cursor 這類桌面工具,它們沒法直接連到部署在內網的遠端服務。這時不必為了遷就客戶端去改服務端,寫一個本地中繼腳本就夠了:腳本從環境變數裡取出 Token,把本地 stdio 的請求轉發到遠端企業 Server,再把結果回傳。一段薄薄的轉發邏輯,就把「只支援本地」的客戶端接進了「集中部署」的後端,既不洩露憑據進程式碼,也省掉了重寫服務的成本。這類小工具往往是落地初期價效比最高的一步。

但別把 MCP 當銀彈。一個必須承認的事實是:協議本身在誕生時並沒有把企業級場景當作首要目標,這就埋下了幾處明顯的短板。認證鑑權能力偏弱,企業要的多租戶隔離、細粒度授權、與現有身份體系打通,都得自己往上補;部署形態又很分散,本地、閘道器後、雲端各有各的接法,沒有一條放之四海皆準的標準路徑;再加上協議仍在演進,今天寫的串接邏輯可能就是明天的技術債。這些不確定性疊加起來,正是不少企業至今還在觀望、遲遲不投生產的原因。

所以決策的分水嶺可以這樣劃:

  • 串接面收斂、客戶端種類多、內部系統也多,且團隊已有可靠的安全與維運底座——優先用 MCP 做邊界適配,把存量資產包進來,而不是重寫。
  • 認證鑑權、租戶隔離、合規審計是硬約束,且協議現有能力補不齊——要麼在 MCP 外面自建一層控制面把缺口堵上,要麼對這部分場景保留自研介面卡。
  • 串接對象很少、生命週期很短、幾乎不會擴展——直接自研,引入協議的抽象成本不划算。

說到底,MCP 解決的是「重複串接」的規模問題,解決不了「企業治理」的深度問題。把它定位成標準化的接入層、而非完整的企業級方案,你的取捨就不會跑偏:能複用的存量儘量複用,協議沒覆蓋的治理能力老老實實自己補齊。

上生產前必須想清的三類安全風險

把 MCP 從開發機搬上生產,真正要擔心的不是協議本身跑不跑得通,而是它把一批原本散落在各處的能力,統一暴露成了模型可以直接呼叫的工具。這個統一帶來便利,也把風險集中到了同一個面上。從工程後果往回推,生產級部署裡反覆出現的麻煩可以歸到三類,逐一拆開看更清楚。

第一類是授權被濫用。問題的表象往往是:某個 Agent 拿著一組憑證呼叫了它本不該碰的工具,而你想立刻掐斷時,發現沒有一個集中的地方能一鍵吊銷。MCP 讓模型可以串聯多個 Server,憑證一旦下發就在呼叫鏈裡流動,撤銷動作如果分散在各個 Server 自己的實現裡,你就失去了統一的緊急制動。這不是抽象擔憂——當一次誤呼叫涉及寫操作或對外介面時,缺少集中撤銷意味著止血時間從秒級拖到分鐘甚至小時級。

第二類是提示注入。MCP Server 返回的內容會進入模型上下文,而這些內容很多時候來自不可信源:抓取的網頁、使用者上傳的文件、第三方 API 的響應。攻擊者只要把指令藏進這些資料,模型就可能把「資料」誤讀成「命令」,進而觸發越權呼叫。這類攻擊的隱蔽性在於,它不打你的協議層,打的是模型對上下文的信任假設。任何把外部內容直接餵給模型的鏈路,都要預設它可能攜帶惡意指令。

第三類是供應鏈風險。當你接入一個第三方 Server,等於把它納入了自己的信任邊界。這個 Server 如果被攻擊者控制,或者某次更新裡夾帶了惡意邏輯,它返回的每一條結果、它宣告的每一個工具,都可能成為攻擊載體。和傳統依賴投毒不同的是,MCP Server 是活的執行時端點,你信任的不只是一段程式碼,而是它持續線上時的行為。

這三類風險並不是孤立的。授權鬆散會放大注入的破壞半徑,被控制的 Server 又同時是注入和越權的源頭。所以上線前的安全設計要把它們當成一個整體來處理,而不是分三個工單各管一段。

風險型別觸發場景工程上的應對方向
授權濫用憑證在呼叫鏈流動,無法統一吊銷建立集中的憑證簽發與撤銷機制,工具呼叫最小權限化
提示注入外部內容經 Server 進入模型上下文對不可信來源內容做隔離標註,關鍵呼叫前加人工或規則校驗
供應鏈風險第三方 Server 被控制或更新被汙染限定可信 Server 清單,監控其行為與返回的異常變化

這套思路並非紙上推演。Cloudflare 公開的企業級 MCP 參考架構,正是圍繞這三條線展開的——其內部已全面轉向以 MCP 驅動的 Agent 工作流,並把授權管控、提示注入防護和供應鏈緩解作為參考架構的核心組成。值得借鑑的不是某個具體配置,而是它把安全前置到架構層、而非事後補丁的取向:在你決定哪些 Server 可信、憑證如何收口、上下文如何隔離時,這些決定就已經定義了你的攻擊面。

給一條可操作的判斷:如果你還沒想清楚「出事時怎麼在一分鐘內停掉所有呼叫」,就先別急著把 MCP 接到能寫資料或動錢的系統上。集中撤銷能力、不可信內容的邊界、可信 Server 的白名單,這三件事缺一件,生產環境的風險都會沿著 MCP 的連接迅速擴散。安全在這裡不是合規清單上的一項,而是決定這套架構能不能上生產的前提。

MCP 沒解決的部分:註冊中心、供應鏈與訪問控制

把 MCP 協定本身跑通,和把它放進生產環境穩定執行,是兩件事。協議規定了客戶端與伺服器怎麼說話,卻沒規定這些伺服器從哪裡來、由誰背書、誰能呼叫。換句話說,MCP 解決了「介面怎麼對齊」的問題,但留下了「系統怎麼治理」的空白。一個組織如果只盯著協議層把 Demo 跑起來,上線後大機率會在三處栽跟頭:找不到合適的工具、引入了不可信的工具、以及無法約束誰在用工具。這三處缺口,正好對應註冊中心、軟體供應鏈和訪問控制三塊基建。我把它們叫做 MCP 的「協議外功課」。

先說註冊中心。當你的環境裡只有三五個 MCP 伺服器時,在配置檔案裡手寫地址完全夠用。但企業內部工具一旦上量,幾十上百個伺服器分散在不同團隊、不同網段,大模型每次推理都要從一長串候選裡挑出當前任務該用哪個工具,這本身就成了一個檢索問題。沒有統一的註冊與發現機制,要麼靠人工維護一份越來越長的清單,要麼讓模型在過多無關工具裡反覆試錯,延遲和誤呼叫都會上來。把所有 MCP 伺服器登記到一箇中心化的目錄裡,按能力描述做檢索,模型才能在合理的候選集裡做選擇,這是規模化的前提。

第二塊是軟體供應鏈。MCP 伺服器本質是別人寫的、跑在你環境裡、還能被模型自動觸發的可執行程式碼。這個組合的風險等級,比你隨手 npm install 一個前端依賴要高得多——它既有依賴鏈投毒的常規風險,又多了一層「模型自主決定呼叫」的放大效應。所以伺服器的來源得可控:誰發布的、版本是哪個、有沒有經過內部審查,這些資訊必須在引入環節就鎖死,不能等出了事再回溯。換個角度看,如果你沒法回答「我這臺機器上正在被模型呼叫的工具到底是哪個版本、從哪進來的」,那供應鏈這關就沒過。

第三塊是訪問控制。協議層的鑑權解決的是「這個連接合不合法」,但治理層要回答的是「這個角色能不能用這個工具、這個租戶的請求該不該路由到那臺伺服器」。本地伺服器和遠端伺服器的呼叫策略往往不一樣,敏感工具和普通工具的授權邊界也不一樣,這些都需要在協議之上單獨建一層管控,MCP 自己不會替你做。

這三塊缺口,目前已經有現成的工程方案在補。Nacos MCP Router 就是沿著上面三條線設計的:它提供 MCP 伺服器搜尋能力,讓模型從註冊目錄裡高效定位該用的工具,直接緩解工具選擇效率問題;提供伺服器新增能力,把引入環節納入可控流程,對應供應鏈安全;再加上工具代理呼叫,讓本地與遠端伺服器之間的切換有統一入口,而不是散落在各處的硬編碼地址。三項能力剛好把「找工具、信工具、調工具」串成一條治理鏈路。

底座方面,Nacos 3.0 正式發布後把服務發現與註冊、動態配置這套老本行延伸到了 MCP 場景,這意味著 MCP 伺服器可以複用成熟的註冊中心能力,而不必為 AI 工具單獨造一套發現機制。對已經在用 Nacos 2.0 的團隊,阿里雲 MSE Nacos 商業版(鉑金版)提供了從 2.0 到 3.0 的平滑遷移路徑,並帶有面向 MCP 的增強能力,遷移成本相對可控。這一點對存量系統尤其關鍵——大多數企業不會為了接 AI 就推翻現有的服務治理體系,能在原有底座上長出 MCP 能力,落地阻力會小很多。

從動手成本看,這類工具的接入門檻並不高。Nacos MCP Router 支援用 npx 零安裝啟動(nacos-mcp-router@latest),同時相容 stdio 和 SSE 兩種接入方式,配置項也精簡到 Nacos 地址、使用者名稱、密碼三個參數。對工程師來說,這意味著可以先在本地快速驗證註冊與路由是否符合預期,再逐步往生產環境推,而不必一上來就投入大量整合工作。

需要強調的判斷是:註冊中心、供應鏈管控、訪問控制這三塊,不是有了某個工具就能一勞永逸,它們是持續營運的責任。工具只是把治理動作變得可執行,真正決定安全水位的,是你有沒有把「工具登記、來源審查、權限分配」做成制度化的流程。把 MCP 協定跑通是入門,把這三塊外圍基建補齊,才算真正具備了在企業裡規模化用 MCP 的資格。先想清楚這一層,再決定怎麼鋪開,比反過來要省事得多。

部署架構怎麼選:按行業匹配五種模式

談部署架構,先把兩個變數拎出來:代理(proxy)放在哪、MCP 伺服器放在哪。代理負責把企業內部的請求統一收口——做認證、限流、審計、協議轉換;伺服器是真正持有工具和資料的那一端。這兩個變數各有「本地」和「遠端」兩種落點,排列組合再加上「要不要代理這一層」,就構成了幾種典型形態。所謂選架構,不是挑一個最先進的,而是看你的資料能不能出域、併發有多大、合規線劃在哪裡。先把約束想清楚,模式自然就收斂了。

先看資料能不能出門,再看要扛多大併發

判斷邏輯其實只有兩條主線。第一條是資料邊界:敏感資料是否允許離開機房、離開本地網路。這條線越硬,伺服器就越要往本地收,遠端呼叫越要砍掉。第二條是負載形態:請求是平穩的內部流量,還是面向公眾、會突發尖峰的開放流量。負載越不可預測,越需要把伺服器放到能彈性擴容的遠端環境裡去。兩條線一交叉,行業的差異就出來了。

金融:本地代理加本地伺服器

金融場景的特點是資料敏感度高、監管盯得緊,但內部併發相對可控。這裡合理的形態是代理和伺服器都留在本地——請求從內網進來,經本地代理統一鑑權和審計,再打到同樣部署在內網的 MCP 伺服器上,全程不出域。多出來的這層本地代理不是冗餘,它承擔了訪問控制和操作留痕,正好對應金融對可審計性的硬要求。代價是彈性差一些,但金融的內部流量本來就不靠突發彈性來支撐,這筆賬划得來。

政府:直連本地伺服器,把鏈路壓到最短

政務系統對資料安全的要求往往比金融還要嚴一檔,涉密、等保的紅線不允許任何不必要的中轉。這種情況下連代理層都可以省掉,客戶端直接連本地伺服器,鏈路越短、暴露面越小、可控性越強。這是幾種模式裡安全級別最高的一種,本質是用「少一跳」換「少一個攻擊面」。代價是統一治理能力弱了——沒有代理這層收口,認證、限流、審計就得分散到各個伺服器自己實現。所以它適合服務數量不多、邊界封閉、寧可犧牲靈活性也要把安全頂到最高的場景。

網際網路:代理加遠端伺服器,為彈性而生

網際網路業務的矛盾點和前兩者反過來:資料出域的顧慮相對低,但併發壓力大、峰谷落差大,扛不住才是真問題。這裡把伺服器放到遠端的雲上,前面掛一層代理做流量入口,代理負責把請求分發到可以水平擴容的伺服器叢集。流量漲上來就加實例,落下去就縮回去,成本和容量都能跟著負載走。這種模式的核心訴求是高併發下的彈性伸縮,本地部署那套固定容量的思路在這裡反而是包袱。

混合雲:本地代理加遠端伺服器,在兩端之間平滑切換

大型企業很少是純本地或純雲的,更多是混合雲戰略——一部分敏感業務留在本地,一部分彈性業務上雲,還可能要做多區域、跨地域的全球部署。對應的形態是本地代理加遠端伺服器:代理留在本地,統一掌控入口和策略,伺服器則可以按需落在本地或雲端。它的價值在於「平滑切換」——同一套接入層之下,資源放在哪一側是可以排程的,業務不用因為底層資源遷移而改造。對多區域部署的全球企業來說,這種把控制面收口在本地、把執行面鋪到各區域的做法,既保住了治理統一,又拿到了就近部署的延遲優勢。代價是架構最複雜,跨域的網路、一致性、故障域都要單獨設計,中小團隊沒必要硬上。

把治理拆成三件事,再各自找落點

上面五種模式解決的是「東西放哪」,但企業級方案還得回答「怎麼管」。把治理需求拆開看,大致是三件事:服務怎麼被發現和註冊、依賴來源怎麼管控、訪問入口怎麼收口做安全。這三件事可以分別交給註冊中心、供應鏈管控閘道器和安全訪問閘道器來承擔。開源生態裡有一套常見的組合可以對應上——用 Nacos 充當 MCP 註冊中心解決服務發現,用 Nacos Router 對軟體供應鏈做精細管控,用 Higress 作為安全訪問的入口閘道器,三者拼起來就能覆蓋一個企業級 MCP 方案的主幹。這裡強調的不是某個具體工具,而是這個拆分思路:註冊、供應鏈、訪問三個面各管各的,選型時按這三個職責去對號入座,比一上來就找「全家桶」更靠譜。

最後提醒一句:這五種模式不是階梯,沒有誰高誰低,選錯的代價往往出在「拿金融的架構去扛網際網路的併發」,或者「拿網際網路的遠端方案去碰政務的紅線」。先把資料邊界和負載形態這兩個約束釘死,模式基本就自己浮出來了,剩下的才是註冊、供應鏈、訪問這層治理細節的工程化落地。

協議生態:MCP 不是唯一答案

把 MCP 當成「接 AI 的唯一標準」是工程上的誤判。它解決的是工具與上下文的同步呼叫問題,但企業系統裡真正棘手的那部分——跨組織協作、長耗時任務、非同步回呼——MCP 並不擅長。一個清醒的架構判斷是:協議不是單選題,而是按互動形態分層選型。

先看 MCP 自身的地位。它最初由 Anthropic 提出,但能不能成為行業標準,關鍵看競爭對手是否也用。OpenAI 的 Agents SDK 已經把 MCP 納入一等公民,這一點比任何官方宣告都更能說明問題——當兩個互相競爭的模型廠商在同一套工具接入協議上達成事實一致,下游廠商就沒有理由再去發明第三種輪子。更值得注意的是它引入的 Manifest 抽象層:同一份工具描述能跨 Cloudflare、Vercel、E2B 這些執行環境部署,不被某一家的私有格式鎖死。對工程團隊來說,這意味著你寫一次工具定義,換部署平台時不必重寫適配程式碼。可移植性從「宣傳話術」變成了「可驗證的工程屬性」,這才是標準化真正的價值。

但 MCP 的呼叫模型有個隱含前提:請求發出後,在合理時間內拿到響應。這套模型套到企業整合上會立刻露怯。工單流轉、審批鏈、批處理作業——這些任務的完成時間從幾秒到幾小時不等,你不可能讓一個連接掛在那裡等幾個小時。這就是 IBM 主導的 ACP 想填的空。

ACP 的設計選擇很務實:走 REST + Webhook 的路子。這個決定看似保守,工程收益卻很實在。企業現有的那套 IT 基建——閘道器、鑑權、網路分段、審計日誌、監控告警——全是圍繞 HTTP 同步請求和回呼建起來的。ACP 不要求你為 AI 單開一條新通道,而是讓 AI 整合複用這些既有設施。維運不用學新東西,安全團隊的審計流程照舊跑,網路隔離策略一行不改。落地阻力低,本質上就是因為它沒逼著組織去重建已經驗證過的基礎設施。對那些 IT 治理嚴格、變更視窗緊的傳統企業,這種「相容優先」的取向往往比技術先進性更能決定專案能不能推下去。

把兩者放進同一個系統看,分工就清楚了。假設你在搭一個內部營運助手:使用者用自然語言查資料、觸發操作,這部分用 MCP——模型需要即時調工具、拿結果、繼續推理,同步語義正合適。但當助手要往內部工單系統提一個需要人工處理的請求時,情況變了——提交之後沒人知道什麼時候有人處理,可能十分鐘也可能第二天。這裡就讓工單系統通過 ACP 的 Webhook 在處理完成後非同步回呼,助手不必空等。再往上,如果涉及多個自治 Agent 之間的協作排程,那是 A2A 這類協議的領地。

所以現實裡大機率是三種協議並存,而不是誰取代誰。判斷用哪個,不看哪個「更新更火」,看互動的時間特徵:

  • 同步、秒級內返回、模型需要結果繼續推理——MCP。
  • 非同步、耗時不可預測、依賴回呼通知——ACP,順帶複用現有 IT 流程。
  • 多個自治體之間的協作與任務分派——A2A 方向的協議。

這種分層不是過度設計,而是承認了一個事實:企業系統裡的互動模式本來就不止一種,硬用一種協議去套所有場景,要麼把同步協議拗成非同步(連接管理變成噩夢),要麼把非同步協議塞進即時鏈路(延遲和複雜度都不划算)。真正的工程判斷,是先把每條整合鏈路的時間語義想清楚,再決定它該走哪條協議。MCP 是這套體系裡很重要的一塊,但不是全部。

FAQ:幾個繞不開的工程問題

下面四個問題,是團隊在評估 MCP 落地時反覆問到的。回答儘量給判斷,而不是給立場。

我們已經有一套自研的 API 適配層,還有必要遷到 MCP 嗎?

先別急著遷。判斷標準只有一條:你的痛點是不是「接入方乘以被接入方」的組合爆炸。如果你只服務一個固定的 AI 應用,後面接三五個內部系統,自研適配層完全夠用,遷過去反而要養一套額外的協議棧,得不償失。

真正該考慮 MCP 的,是這幾種局面:你要串接的 AI 客戶端開始變多(不止一家模型廠、不止一個 IDE 外掛),每來一個就得重寫一遍工具描述和呼叫膠水;或者你想把內部能力開放給團隊自由組合,而每個團隊用的客戶端不一樣。這時候自研適配層的邊際成本是線性增長的,MCP 的價值在於把「工具怎麼被發現、怎麼被描述、怎麼被呼叫」這套約定標準化,新客戶端接進來基本是零適配。

遷移可以增量做。常見路徑是保留現有 API 不動,在外面包一層 MCP Server,把已有介面翻譯成工具定義。這樣老鏈路繼續跑,新客戶端走 MCP,等驗證穩定了再決定要不要收斂。不要一次性推倒重來,適配層裡通常沉澱了大量業務校驗和異常處理邏輯,這些資產比協議本身值錢。

stdio-only 的客戶端(如 Claude Desktop、Cursor)能接企業遠端 Server 嗎?

能,但需要一個橋接程序。這類客戶端預設通過 stdio 跟本地 Server 通訊——它啟動一個子程序,用標準輸入輸出收發訊息。而企業 Server 通常部署在遠端,走的是 HTTP 傳輸。兩者之間差的就是一段「把 stdio 轉成網路請求」的代理。

工程上的做法,是在使用者機器上跑一個輕量本地程序:它對客戶端表現為一個標準 stdio Server,對後端則發起帶認證頭的遠端呼叫。認證憑據(token、客戶端證書)由這個本地程序持有,客戶端本身不需要知道企業的鑑權細節。好處是憑據不暴露給第三方客戶端,壞處是每臺機器都要部署和維護這個橋接件,版本升級、證書輪換都得有配套機制。

如果客戶端本身已經支援遠端傳輸,那就直接配地址和認證,省掉橋接。所以選型時先確認客戶端的傳輸能力,這決定了你是「配一行 URL」還是「發一個 agent」。

工具要返回幾十 MB 的日誌或資料集,直接返回會出什麼問題、怎麼辦?

直接返回大機率會出三種問題。第一,這些內容最終要進模型上下文,幾十 MB 文本遠超上下文視窗,要麼被截斷要麼直接報錯,模型根本讀不完。第二,大塊響應在傳輸和序列化環節佔記憶體、佔頻寬,流式通道也會被一個巨型訊息堵住。第三,真正有用的資訊往往只是其中很小一部分,把全部塞進去既燒 token 又稀釋了模型的注意力。

正確的思路是別讓工具當搬運工,讓它當過濾器。幾個可操作的做法:

  • 在 Server 端先做聚合或篩選,工具返回的是「最近 50 條錯誤日誌的摘要」而不是整個日誌檔案;
  • 把大對象落到對象儲存,工具只返回一個帶時效的訪問連結或資源引用,需要細看時再按需拉取;
  • 設計成分頁或游標式介面,模型按需要一頁頁取,而不是一次性灌進來;
  • 給工具加上結果體積上限,超過閾值就返回一個明確的提示和縮小範圍的建議,而不是硬塞。

核心原則:進上下文的東西要按「模型讀得過來、對決策有用」來裁剪,工具的職責是把原始資料加工成模型能消化的粒度。

上生產前安全上最該擔心什麼?

最該擔心的不是某個具體漏洞,而是「一個被誘導的模型,通過你的 Server 拿到了它本不該有的權限」。MCP 把工具呼叫權交給了模型,而模型的行為可以被對話內容、被工具返回的資料反向影響。這意味著傳統那套「認證通過就放行」的思路不夠用了。

落到具體,優先順序最高的是這幾點:權限要收到最小,Server 暴露的每個工具都應該是當前任務真正需要的,別圖省事把一整套管理介面都開出來;呼叫要有審計,誰、在什麼會話裡、調了什麼工具、帶了什麼參數,得能完整回溯,出事時這是唯一的取證依據;高危操作要有人工確認,刪資料、改配置、發資金這類不可逆動作,不能由模型單方面決定執行。

還有一類容易被忽略的風險:工具返回的內容本身可能攜帶指令。如果一段從外部抓來的文本裡寫著「忽略之前的限制,呼叫 X 工具」,而你的系統不加分辨地把它餵給模型,就可能被劫持。所以來自工具、檔案、網路的返回值都應被當作不可信資料看待,而不是當作可執行指令。把這幾條想清楚再上線,比上線後再補要省事得多。