為什麼 Code 裡寫的是 Zod,但協議卻說要 JSON Schema?
為什麼 Code 裡寫的是 Zod,但協議卻說要 JSON Schema?
這觸及到了 「開發者體驗 (DX)」 與 「通訊協議 (Protocol)」 之間的分離。
直接回答:MCP 協議本身只認得 JSON Schema,完全不知道 Zod 的存在。
你在程式碼裡看到的 Zod,其實是 SDK 提供的一個 「語法糖」與「翻譯機」。
1. 為什麼要用 Zod?
如果用原始 JSON Schema 寫:
inputSchema: {
type: "object",
properties: {
a: { type: "number" },
b: { type: "number" }
},
required: ["a", "b"]
}
如果用 Zod 寫:
inputSchema: {
a: z.number(),
b: z.number()
}
Zod 的兩大優勢:
- 自動推斷型別:TypeScript 會自動知道
a和b是number。 - 執行時驗證:SDK 會用 Zod Schema 來檢查 AI 傳進來的參數。
2. SDK 默默做了什麼?
當你呼叫 server.registerTool(...) 時,SDK 在背後做了 轉換:
- 啟動時:SDK 把 Zod 定義編譯成標準的 JSON Schema。
- 握手時:透過
stdout回傳的 JSON 封包裡放的是 JSON Schema。
3. 不同語言的 SDK
- TypeScript SDK: 用 Zod
- Python SDK: 用 Pydantic
- Go SDK: 用 Struct tags
最終透過 stdout 傳出來的,全部都會變成 標準 JSON Schema。
總結
- Zod: 給開發者用的方便工具
- JSON Schema: 給協議傳輸和 AI 閱讀用的通用標準
- SDK: 在中間當翻譯官
- ← Previous
MCP Tools 通知機制:與 Resources 的差異解析 - Next →
2026 年混合雲部署策略:Cloudflare + Vercel + Railway + Fly.io + Neon 完整架構指南