Vercel MCP Events 怎麼等部署結果?訂閱、驗證與重複事件處理
本文目錄
讓 agent 等 Vercel 部署完成,可以訂閱 deployment.succeeded 和 deployment.error。接入前先決定 webhook 直接送到自己的接收端,還是經過 Vercel Connect:兩條路徑使用不同驗證 helper,混用會讓合法事件也驗不過。
Vercel 10/30 公告說明,MCP 會在背後管理可到期的 Vercel webhook,依 team、project、environment 篩選,採 Standard Webhooks 簽章,原生 payload 放在 data。這是事件擴充;一般 MCP 工具連得上,仍需另外確認伺服器提供事件。
本篇於 2026-11-11 檢閱官方文件與 cookbook,提供接入及驗收設計,未建立真實訂閱或部署。
Vercel MCP Events 先做 catalog discovery
先以目前授權身分呼叫 client.experimental_events.list(),按回傳的 inputSchema 填訂閱參數。若有 nextCursor,讀完分頁。公告列的三種篩選概念不能直接推成 request 裡固定使用哪個 key;事件名稱、參數與 payload 都以 catalog 為準。
準備最小測試專案與一次可辨識的 deployment ID,先讓接收端可用,再訂閱事件,最後才觸發那次部署。這個順序可區分「部署完成前還沒訂閱」與「訂閱有效但投遞失敗」。
兩條接收路徑分開接
| 接法 | 驗證入口 | 應用程式還要處理 |
|---|---|---|
| 直接接 MCP webhook | experimental_createMCPEventWebhook,來自 @ai-sdk/mcp | 共用 subscription store、原始 body 與簽章、payload 驗證、持久化與去重 |
| Vercel Connect 轉送 | experimental_verifyMcpEvent,來自 @vercel/connect/mcp | Connect envelope、授權綁定、持久 inbox、payload 驗證與背景工作 |
AI SDK cookbook的直接接法使用 event store 保存簽章秘密及訂閱資訊;Express 層要保留原始 body、簽章 headers 與 callback query。先把 JSON parse 後重新序列化,再驗簽,可能改掉被簽的 bytes。
走 Connect時,先完成 connector、使用者授權、專案與環境連結。官方頁面目前要求 Connect SDK 2.5.2+ 與 AI SDK MCP client 2.0.76+,接收端部署在 Production,或已指派網域的 Custom Environment。SDK 用專案 OIDC 驗證呼叫身分;Preview/Development 不能直接沿用這條 managed subscription 流程。
Connect 的 auth provider 與 experimental_connectEventsAdapter 使用相同 tokenParams。使用者 ID 從伺服器已驗證的 session 取得,並在應用程式保存「這份訂閱屬於誰、監看哪個專案」的綁定。之後處理通知時,從綁定找收件人。
收到事件後,先接受工作再回覆成功
接收端的驗收條件可以直接列成以下流程,這是設計示意:
驗證簽章與接收端身分→ 查已授權的訂閱綁定→ 驗證事件 payload→ 同一交易保存 receipt 與待處理工作→ 回 204→ worker 核對部署狀態並執行後續動作直接 MCP 路徑可用 subscription ID 加 event.eventId 做事件去重;Connect envelope 則先以 deliveryId 去除重複投遞,再讓業務副作用具冪等性。兩條路徑的識別欄位應分開處理。若資料庫寫入失敗,回可重試的錯誤;只在記憶體啟動模型呼叫就回成功,程序結束時可能留下沒有處理的事件。
還要測三個邊界:同一事件重送時只做一次後續動作;事件亂序時以 deployment ID 重新查狀態;訂閱回應尚未保存,投遞就先抵達時,先持久保存待解析或回可重試錯誤。以 payload 自述的 user ID 找收件人,會跳過原本的授權綁定。
斷線與停止訂閱也要驗收
關閉 MCP client 連線後,webhook 訂閱仍可能有效。直接接法需管理續期與停止;Connect adapter 則在設定的監看期間內續租,上層使用 ttlMs,可設定期限或 null,直到明確停止。
Connect 目前沒有持久 payload outbox、排程重送或手動 replay;復原仍受來源的 retry/replay window 限制。收到 gap 就向來源補查,收到 terminated 就保存原因並停止派發新工作。短時間沒收到通知時,也應保留一次狀態補查機制,避免把「沒事件」解讀成部署還沒結束。
最後,把部署成功和應用可用分成兩個驗收點:先核對 deployment ID、環境與狀態,再測正式 URL 的回應、登入與必要功能。若需要逐層驗證網站,可以接著看 部署後檢查流程中的深層路徑與存取權限思路;其中 Spacefast 的平台設定不能直接套在 Vercel。
參考資料: