当前位置: 首页 > news >正文

[MCP] setRequestHandler

Schema

MCP 里面提供了一组 Schema.

Schema 由 TypeScript + Zod 定义,制作成 JSON Schema,用于验证协议消息结构

在 SDK 中,每个 JSON‑RPC 方法(如 resources/listtools/call)都对应相应的 Zod Schema,比如:

  • ReadResourceRequestSchema
  • ListResourcesRequestSchema
  • CallToolRequestSchema
  • ListPromptsRequestSchema

这些 schema 的功能包括:

  • 校验请求结构 严格保证参数类型与字段是否存在;
  • 生成 TS 类型,提高类型安全;
  • 生成 JSON Schema,用于能力声明或与客户端协商能力。

例如 ReadResourceRequestSchema 实际就等价于:

const ReadResourceRequestSchema = z.object({method: z.literal("resources/read"),params: z.object({uri: z.string().describe("资源的 URI,格式如 file://、http://、bananaphone://"),}),
});

因此 MCP 提供的 Schema 可以调用 zod 对象上面的方法:

import { ReadResourceRequestSchema } from "@modelcontextprotocol/sdk/types.js";// 模拟请求参数
const requestParams = {method: "resources/read",params: {uri: "bananaphone://info",},
};
// 校验请求
const result = ReadResourceRequestSchema.safeParse(requestParams);if (!result.success) {console.error("参数格式不对:", result.error.format());
} else {console.log("✅ 参数合法:", result.data);
}

常见请求 Schema 结构一览

功能 Schema 名 结构
读取资源 ReadResourceRequestSchema { method: "resources/read", params: { uri } }
列出资源 ListResourcesRequestSchema { method: "resources/list", params: {} }
列出资源模板 ListResourceTemplatesRequestSchema { method: "resources/templates", params: {} }
列出工具 ListToolsRequestSchema { method: "tools/list", params: {} }
调用工具 CallToolRequestSchema { method: "tools/call", params: { function, args } }
列出提示词 ListPromptsRequestSchema { method: "prompts/list", params: {} }
调用提示词 CallPromptRequestSchema { method: "prompts/call", params: { id, input } }

setRequestHandler

这是 MCP SDK 提供的底层方法,用于注册对某个 JSON-RPC 请求类型 的处理函数。

MCP 使用 JSON-RPC 2.0 协议,客户端发送:

{"jsonrpc": "2.0","method": "resources/read","params": { ... }
}

SDK 内部为每种 method 提供一个对应的 Schema,setRequestHandler() 会:

  1. 接收请求:拦截特定 method(如 "tools/list"
  2. Schema 校验请求结构:如果校验失败,返回错误;否则进入 handler
  3. 执行你的 handlerFunction:将 params 提供给你处理逻辑
  4. 将你的返回值转为标准 JSON-RPC 响应:自动处理错误、封装 result 字段
server.setRequestHandler(SomeRequestSchema, async (request) => {const params = request.params;// 做点什么return {...yourResponseObject,};
});
import { Server } from "@modelcontextprotocol/sdk/server/index.js";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
import {ListToolsRequestSchema,CallToolRequestSchema,ListResourcesRequestSchema,ReadResourceRequestSchema,ListResourceTemplatesRequestSchema,
} from "@modelcontextprotocol/sdk/types.js";const server = new Server({name: "resource-server",version: "0.1.0",},{capabilities: {resources: {},tools: {},},}
);server.setRequestHandler(ListToolsRequestSchema, async () => {return {tools: [{name: "sum",description: "计算两个数字的和",inputSchema: {type: "object",properties: {a: { type: "number", description: "加数 A" },b: { type: "number", description: "加数 B" },},required: ["a", "b"],},},],};
});server.setRequestHandler(CallToolRequestSchema, async (requests) => {const { name: toolName, arguments: args } = requests.params;if (toolName === "sum") {const { a, b } = args;const result = a + b;return {content: [{type: "text",text: `计算结果为:${result}`,},],};}
});
http://www.sczhlp.com/news/154130/

相关文章:

  • Typora 笔记迁移 Obsidian 图片附件库批量移动方法,适用于笔记整理。
  • 2025年确有专长培训权威推荐榜:专业资质与特色诊疗口碑之选
  • 自己公司怎样弄个网站淮安app开发
  • 手机做网站视频社保减员要怎么做 国税局网站
  • 网站关键词在哪wordpress格子广告插件
  • 云兰装潢公司总部地址电话官网整站优化
  • 山东建设工程执业证书查询网站青岛房产网查询
  • 企业园林设计网站模板桂林网站开发m0773
  • 专做酒的小程序网站电子科技公司网站建设方案
  • 网站留言板 html疫苗最新官方消息
  • 电子文件分类整理与双向同步 2025年10月1日
  • C++版搜索与图论算法 - 详解
  • 62. 不同路径
  • 达成设计卓越:全面解析 IC 设计中的验证之道
  • 音乐网站开发环境描述蓝天网站建设
  • 自助免费建站系统百度关键词多少钱一个月
  • 如何把电脑改成服务器做网站美橙建站五合一建站套餐申请
  • 万网域名网站建设怎样创造自己的网站
  • 全方位营销型网站最新网页制作官网
  • 家用网络建网站申请了域名 网站怎么建设呢
  • 网站可视化后台邢台市网站制作
  • 网站建设规划要点详解七牛云建网站
  • 安徽省两学一做网站这些奥运新闻得了中国新闻奖
  • 网站视频做背景网页的制作教案
  • 制作简易网站模板做58同城这样的网站
  • Typora 笔记迁移 Obsidian 图片链接转换
  • 中午网站做google广告好吗微信公众号文章怎么转wordpress
  • 长沙百度网站推广厂家html网站架设
  • 毕业设计做网站low快速提升网站权重
  • 网站建设有什么服务网站热图分析