首页/新闻资讯/正文详情

在 mcp-use 中使用 Zod、ArkType 与 TypeBox 定义 MCP 工具输入 Schema:同款 greet 工具的三种校验器实现

发布时间:2026/9/24 16:02:30 来源:云帆数科 栏目:资讯中心
在 mcp-use 中使用 Zod、ArkType 与 TypeBox 定义 MCP 工具输入 Schema:同款 greet 工具的三种校验器实现
在 mcp-use 中使用 Zod、ArkType 与 TypeBox 定义 MCP 工具输入 Schema同款 greet 工具的三种校验器实现【免费下载链接】mcp-useThe fullstack MCP framework to develop MCP Apps for ChatGPT / Claude MCP Servers for AI Agents.项目地址: https://gitcode.com/gh_mirrors/mc/mcp-use本指南以 mcp-use 仓库中的 schema-validators 示例 为主体完整展示同一个带输入校验的greetMCP 工具如何分别用 Zod、ArkType 与 TypeBox 三种 schema 校验器构建并深入mcp-use服务端源码说明inputSchema字段、StandardSchemaWithJSON标准以及校验在工具回调执行前发生的底层机制。读完本文你将掌握在mcp-useTypeScript 服务中接入任意主流 schema 库、写出可被 LLM 正确理解的工具参数定义并完成本地启动与联调验证的完整方法。示例概览三种校验器一个greet工具examples/typescript/schema-validators目录下并排存放着三个结构完全对称的独立 npm 工程arktype/— 使用 ArkTypearktype: ^2.2.3typebox/— 使用 TypeBoxtypebox: 1.3.6并搭配modelcontextprotocol/server: 2.0.0的 JSON Schema 转换工具zod/— 使用 Zodzod: ^4.4.3三个工程都声明了相同的mcp-use: ^2.0.4依赖、相同的type: module与相同的脚本集合dev/build/start/typecheck。它们实现的是同一个服务器一个名为greet、输入受校验的工具返回一段问候文本。这样并排组织的用意在于让读者可以零成本地对比同一功能在不同校验器下的写法差异从而根据自己的团队技术栈做出选择。逐版本解读同一功能的三种 Schema 写法Zod 版本z.objectdescribezod/src/index.ts 的完整实现如下import { MCPServer } from mcp-use; import { z } from zod; const server new MCPServer({ name: zod-schema-example, version: 1.0.0, description: Tool input validation with Zod., }); server.tool( { name: greet, inputSchema: z.object({ name: z.string().describe(Name to greet), }), }, async ({ name }) ({ content: [{ type: text, text: Hello from Zod, ${name}! }], }) ); export default server;关键点在于z.string().describe(Name to greet)字段描述通过.describe()挂载最终会成为 LLM 理解工具参数意图的提示信息详见下文源码分析。工具回调的入参{ name }类型由inputSchema自动推导全程享有 TypeScript 类型安全。ArkType 版本type(...)描述式语法arktype/src/index.ts 采用 ArkType 的字符串描述式 DSLimport { type } from arktype; import { MCPServer } from mcp-use; const server new MCPServer({ name: arktype-schema-example, version: 1.0.0, description: Tool input validation with ArkType., }); server.tool( { name: greet, inputSchema: type({ name: type(string).describe(Name to greet), }), }, async ({ name }) ({ content: [{ type: text, text: Hello from ArkType, ${name}! }], }) ); export default server;ArkType 的type({ name: type(string) })与 Zod 的z.object({ name: z.string() })结构几乎一一对应字段描述同样是.describe(...)。两者写法的亲缘性很高从 Zod 迁移到 ArkType 的成本很低。TypeBox 版本Type.ObjectfromJsonSchema显式转换typebox/src/index.ts 是三者中唯一需要显式 JSON Schema 转换的版本import { fromJsonSchema } from modelcontextprotocol/server; import { MCPServer } from mcp-use; import Type from typebox; const server new MCPServer({ name: typebox-schema-example, version: 1.0.0, description: Tool input validation with TypeBox., }); const greetInput Type.Object({ name: Type.String({ description: Name to greet }), }); server.tool( { name: greet, inputSchema: fromJsonSchemaType.Statictypeof greetInput(greetInput), }, async ({ name }) ({ content: [{ type: text, text: Hello from TypeBox, ${name}! }], }) ); export default server;TypeBox 把 schema 描述为Type.Object({ name: Type.String({ description: ... }) })描述以选项对象形式传递而非链式.describe()。fromJsonSchema来自modelcontextprotocol/serverTypeBox 1.x 输出为 JSON Schema将其转换为 mcp-use 所需的StandardSchemaWithJSON结构Type.Statictypeof greetInput则用于保证转换后的 schema 与回调入参类型一致。这一差异恰好说明不同校验器在 mcp-use 中接线的标准是统一的只是个别库需要一层显式的桥接转换。运行与联调从npm run dev到/mcp端点schema-validators的 README 给出了通用运行方式以 zod 为例其余两个工程操作完全一致cd zod npm install npm run devdev脚本执行的是mcp-use dev命令。从 CLI 源码看开发服务器默认监听$PORT环境变量指定的端口未设置时回落到3000并且dev模式在端口被占用时会自动向上探测新端口同时打印提示见 libraries/typescript/packages/cli/src/cli/dev.ts#L378-L385 中的[mcp-use] port ${requested} is taken, using ${port}。因此 README 中说连接http://localhost:3000/mcp是默认情形——若日志提示端口已被占用请以实际打印的端口为准。启动后用任意 MCP 客户端或 mcp-use Inspector连接端点http://localhost:3000/mcp工具greet调用参数{ name: Ada }三个版本的服务器都会返回一段问候文本例如Hello from Zod, Ada!ArkType/TypeBox 版本返回相应前缀的文本。若传入的参数不符合 schema例如name缺失或类型为数字输入校验会在工具回调执行之前被拦截并返回校验错误——这正是本示例所演示的核心价值让 MCP 工具的参数契约由 schema 强制保证而非在业务代码里手写判断。除dev外package.json还提供了mcp-use build构建产物与mcp-use start以生产模式启动、tsc --noEmit类型检查等脚本便于从开发到部署的完整链路。源码纵深inputSchema与StandardSchemaWithJSON为什么三个完全不同的库能无缝接入同一个server.tool()答案在 mcp-use 服务端的工具定义类型中。查看 libraries/typescript/packages/server/src/tools.ts#L53-L80 的ToolDefinition接口export interface ToolDefinition { name: string; title?: string; description?: string; /** 支持任何实现了 Standard Schema 且可转换 JSON Schema 的库zod v4、ArkType、Valibot …… */ inputSchema?: StandardSchemaWithJSON; /** inputSchema 的别名新代码推荐使用 inputSchema与 MCP 线上字段名一致 */ schema?: StandardSchemaWithJSON; outputSchema?: StandardSchemaWithJSON; annotations?: ToolAnnotations; ... }inputSchema的类型是StandardSchemaWithJSON它来自modelcontextprotocol/server是“Standard Schema JSON Schema 转换能力”的统一抽象。源码注释明确列举了该协议兼容的库zod v4、ArkType、Valibot 等。因此本示例中的 Zod 4zod: ^4.4.3与 ArkType 2arktype: ^2.2.3都可以直接传入而无需桥接TypeBox 由于不直接暴露 Standard Schema 接口才需要通过fromJsonSchema做一次转换——这正是三种写法存在差异的根本原因。工具定义同时支持inputSchema与历史别名schema二者的优先级由 resolveToolInputSchema 决定同时设置时inputSchema胜出。服务器在注册工具时会调用该函数解析最终 schema并在回调执行前完成校验见 libraries/typescript/packages/server/src/server.ts#L1953-L1997 中resolveToolInputSchema(definition)与校验逻辑校验通过后才会进入你的回调函数。类型层面的闭环同样值得注意InferToolInput见 tools.ts#L162-L175会从inputSchema推导回调参数类型——所以你不需要手写{ name: string }的入参注解TypeScript 会自动把回调里的{ name }推导为string类型schema 即单一事实来源。此外字段描述Zod/ArkType 的.describe(...)、TypeBox 的description选项会随 schema 一起出现在工具描述信息中成为 LLM 选择与填参的依据因此为每个字段编写清晰、面向模型的描述是提升 MCP 工具可用性的关键实践。小结与选型建议本示例的核心结论可以归纳为三点Schema 无关mcp-use 通过StandardSchemaWithJSON统一接纳 zod v4、ArkType、Valibot 等 Standard Schema 库TypeBox 等非 Standard Schema 库则可用fromJsonSchema显式桥接校验前置工具输入在回调执行前即完成校验业务代码无需重复防御类型闭环回调参数类型由inputSchema自动推导schema 与实现天然一致。选型上追求极简上手与生态成熟可选 Zod偏好编译期极致性能与描述式语法可选 ArkType团队已有 JSON Schema 基础设施或需要与 OpenAPI/配置体系打通时可选 TypeBox。三种方案都可在本仓库的 schema-validators 目录 中直接npm install npm run dev对照体验选择最契合团队习惯的那一种即可。【免费下载链接】mcp-useThe fullstack MCP framework to develop MCP Apps for ChatGPT / Claude MCP Servers for AI Agents.项目地址: https://gitcode.com/gh_mirrors/mc/mcp-use创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关推荐

如何用GLiNER2.5-Multi的Classifier实现100%合法标签组合:约束分类完整指南
如何用GLiNER2.5-Multi的Classifier实现100%合法标签组合:约束分类完整指南

如何用GLiNER2.5-Multi的Classifier实现100%合法标签组合:约束分类完整指南 【免费下载链接】gliner2.5-multi-v1 项目地址: https://ai.gitcode.com/hf_mirrors/fastino/gliner2.5-multi-v1 **GLiNER2.5-Multi 是多语言边界信息抽取模型,**它的… · 2026/9/24 16:02:30

fragments 上手指南:5 分钟搭一个多模型 AI 应用生成工厂
fragments 上手指南:5 分钟搭一个多模型 AI 应用生成工厂

fragments 上手指南:5 分钟搭一个多模型 AI 应用生成工厂 【免费下载链接】fragments Open-source Next.js template for building apps that are fully generated by AI. By E2B. 项目地址: https://gitcode.com/GitHub_Trending/fr/fragments 想不写一行后… · 2026/9/24 16:02:30

The Concise TypeScript Book:模板联合类型(Template Union Types)完全指南
The Concise TypeScript Book:模板联合类型(Template Union Types)完全指南

文档教程 【免费下载链接】typescript-book The Concise TypeScript Book: A Concise Guide to Effective Development in TypeScript. Free and Open Source. 项目地址: https://gitcode.com/gh_mirrors/typ/typescript-book 点击查看 免费下载 模板联合类型&… · 2026/9/24 16:02:30

免费开源:用tchMaterial-parser下载国家中小学智慧教育平台电子课本PDF,新手完整指南
免费开源:用tchMaterial-parser下载国家中小学智慧教育平台电子课本PDF,新手完整指南

免费开源:用tchMaterial-parser下载国家中小学智慧教育平台电子课本PDF,新手完整指南 【免费下载链接】tchMaterial-parser 国家中小学智慧教育平台 电子课本下载工具,帮助您从智慧教育平台中获取电子课本的 PDF 文件网址并进行下载&#xff… · 2026/9/24 16:32:15

wp-calypso 促销区块组件(Promo Section)完全指南:布局、属性与实战用例
wp-calypso 促销区块组件(Promo Section)完全指南:布局、属性与实战用例

前端CMS 【免费下载链接】wp-calypso The JavaScript and API powered WordPress.com 项目地址: https://gitcode.com/gh_mirrors/wp/wp-calypso 点击查看 免费下载 Promo Section 是 wp-calypso 中用于排版 PromoCard 组件、构建推广型页面布局的容器组件&#xf… · 2026/9/24 16:32:15

使用 lego 通过百度云(Baidu Cloud)DNS 完成 ACME DNS-01 挑战:配置指南与源码实现解析
使用 lego 通过百度云(Baidu Cloud)DNS 完成 ACME DNS-01 挑战:配置指南与源码实现解析

网络安全密码学 【免费下载链接】lego Lets Encrypt/ACME client and library written in Go 项目地址: https://gitcode.com/gh_mirrors/le/lego 点击查看 免费下载 导读 本文以 lego 官方文档中 Baidu Cloud DNS 提供者页面(docs/content/dns/zz_gen… · 2026/9/24 16:32:15

dbskill 的 dbs-ai-check 深度解析:基于 22 个特征指纹的 AI 写作痕迹识别 Skill
dbskill 的 dbs-ai-check 深度解析:基于 22 个特征指纹的 AI 写作痕迹识别 Skill

AI 技能AI 应用 【免费下载链接】dbskill dontbesilent 的商业诊断 Skills 项目地址: https://gitcode.com/gh_mirrors/db/dbskill 点击查看 免费下载 dbs-ai-check 是 dontbesilent 商业工具箱 dbskill 中的 AI 写作特征检测 Skill,它不负责改写文案&a… · 2026/9/24 16:32:15

如何玩转Edge0-35B-A3B对话模板:思考模式、工具调用与多模态提示词完整指南
如何玩转Edge0-35B-A3B对话模板:思考模式、工具调用与多模态提示词完整指南

如何玩转Edge0-35B-A3B对话模板:思考模式、工具调用与多模态提示词完整指南 【免费下载链接】Edge0-35B-A3B-preview 项目地址: https://ai.gitcode.com/hf_mirrors/Edge0/Edge0-35B-A3B-preview 本文带你完整解析 Edge0-35B-A3B 的对话模板(cha… · 2026/9/24 16:32:09

Argos Translate 离线翻译引擎 5 分钟上手笔记
Argos Translate 离线翻译引擎 5 分钟上手笔记

Argos Translate 离线翻译引擎 5 分钟上手笔记 【免费下载链接】argos-translate Open-source offline translation library written in Python 项目地址: https://gitcode.com/GitHub_Trending/ar/argos-translate 翻译数据不能出内网?离线翻译引擎入门 合… · 2026/9/24 16:32:01

基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程
基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程

简介:这是一套面向计算机、人工智能、自动化等专业学生与教师的毕业设计级项目资源,围绕YOLOv8实现渔船作业监控系统,可用于毕设、课程设计、大作业或项目立项演示。压缩包共97个文件,约24.21MB,以70个Python源码文件为… · 2026/9/24 0:00:13

1D-CNN时间序列建模实战:从Conv1d原理到工业落地
1D-CNN时间序列建模实战:从Conv1d原理到工业落地

简介:面向时间序列数据建模的一维卷积神经网络完整实现,适合深度学习入门者及需要快速验证时序模型的研究者,能够从音频、文本、传感器或股价等序列中挖掘局部特征与时间依赖。压缩包体积很小,只有3KB,内含3个Python脚… · 2026/9/24 0:00:26

柔软的L:汉语语流中被忽视的舌肌张力控制
柔软的L:汉语语流中被忽视的舌肌张力控制

1. 这个“L”不是字母表里的L,而是舌尖上的L最近在几个方言群和语音教学社群里,反复看到有人发一句:“也说字母L:柔软的长舌”。初看以为是英语发音课笔记,点开才发现全是方言爱好者、播音系学生、语言康复师甚至戏曲演… · 2026/9/24 0:00:44

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码