后端MCP 服务MCP ClientsAI Agent人工智能【免费下载链接】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点击查看免费下载本篇指南以 advanced-features.md 为核心骨架系统讲解 mcp-use TypeScript MCP Server 的五类高级能力从 OpenAPI 文档一键生成工具、代理组合上游 MCP 服务器、请求作用域内的实时通知、列表与资源的失效广播到面向强交互客户端的 Elicitation 结构化输入采集。读者完成后将掌握这些特性的启用条件、调用时机、边界限制与安全约束能够在真实项目中直接落地使用。文中所有结论均可在 libraries/typescript/packages/server/src 目录下的源码中得到验证。前置说明这些特性属于进阶用法仅在任务确实需要时才引入。mcp-use 仍在快速演进使用前请以当前安装的包版本为准核对具体选项与现有限制参见 SKILL.md 中以已安装版本为事实来源的工作流约定。OpenAPI 生成工具把 REST API 变成 MCP 工具MCPServer.fromOpenAPI()允许将一个已解析并打包bundled的 OpenAPI 3.x 文档直接转换为一个预填充好工具的 MCP 服务器。每一个被包含的 OpenAPI 操作operation都会注册为一个工具工具会校验输入、调用对应的上游 HTTP 端点并以 SDK 原生的工具结果形态返回响应。用法如下const spec await fetch(https://api.example.com/openapi.json) .then((response) response.json()); const server MCPServer.fromOpenAPI({ spec }); await server.listen(3000);关键选项与输入映射规则fromOpenAPI接受一个FromOpenAPIOptions选项对象常用字段包括spec解析后的 OpenAPI 文档对象必须是 JSON 对象不能是字符串或文件路径。baseUrl当文档内没有可用的 server URL 时使用。源码中resolveBaseUrl的优先级为options.baseUrl ?? options.spec.servers?.[0]?.url两者都缺失时抛出错误MCPServer.fromOpenAPI requires options.baseUrl or spec.servers[0].url见 openapi/index.ts。因此建议始终显式传入baseUrl避免依赖文档中的 server 声明。tags按操作标签tags过滤只暴露命中标签的 operation。exclude排除规则数组可按method、operationId支持字符串精确匹配或正则、path、tags组合排除见 openapi/index.ts。auth{ type: bearer, token }或{ type: header, name, value }生成的工具调用上游时会自动附加认证头见 openapi/index.ts。fetch可选的自定义 fetch 实现默认使用globalThis.fetch见 openapi/index.ts。生成工具的输入 Schema 覆盖以下来源见 openapi/index.tspath 参数占位符会被插值进 URL 并做encodeURIComponent编码path 参数始终标记为 required。query 参数追加到查询字符串数组值会逐项追加为多个同名参数空值会被跳过。header 参数写入请求头。JSON 兼容的请求体映射为名为body的输入字段只有当 OpenAPI 文档声明该 body 为 required 时才标记必填。只识别application/json、application/*json及包含json的媒体类型见 openapi/index.ts提交时自动设置content-type: application/json。工具命名优先使用operationId缺省时退化为${method}_${path}的形式经过 slug 化处理并截断到 64 字符重名时自动追加_2、_3后缀见 openapi/index.ts。工具描述会拼接 operation 的 summary、description 以及HTTP: METHOD /path行。必须知晓的三条边界先打包外部$ref再传入源码中的resolveRef只处理以#/开头的内部引用见 openapi/index.tsMCPServer.fromOpenAPI的文档注释也明确说明外部$ref不会被拉取。因此凡是引用了外部文件如common.yaml#/components/schemas/...的文档必须在创建服务器之前用工具如apidevtools/swagger-parser、redocly bundle完成打包。cookie 参数与非 JSON 请求体不暴露createInputBindings会过滤掉parameter.in cookie的参数见 openapi/index.ts非 JSON 媒体类型的请求体如表单、二进制流不会生成输入字段。不生成outputSchema生成的工具不会从响应定义推导结构化输出 Schema调用结果以原始 JSON若响应为 JSON 则同时写入structuredContent或纯文本形式返回见 openapi/index.ts。如果下游客户端需要结构化结果需另行包装。小技巧当同一参数名在 path/query/header 多处出现或与body字段同名时输入字段会自动加上_in后缀如id_path、id_query以避免冲突若仍冲突则追加数字后缀见 openapi/index.ts。代理 MCP 服务器组合上游能力server.proxy()可以把上游的 MCP 服务器挂载到当前服务器上将其工具、资源和提示词转发给当前服务器的客户端。这在聚合多个领域服务的场景下非常实用——例如把天气服务、数据库服务和文件服务统一暴露在一个端点下。await server.proxy({ weather: { url: https://weather.example.com/mcp, authToken: process.env.WEATHER_MCP_TOKEN, }, });两种挂载方式与所有权语义proxy()有两种重载见 server.ts配置映射形式proxy(Recordstring, ProxyServerConfig)以名称作为 key 配置上游 HTTP 连接通过可选的mcp-use/clientv2 peer 建立连接。每个 key 自动成为命名空间挂载的工具、静态资源和提示词都会被前缀化避免多上游之间重名冲突。config 创建的连接由服务器自身拥有服务器关闭时会被自动关闭见 server.ts 的#proxyOwners与关闭逻辑。现成连接形式proxy(ProxyConnection)传入一个已就绪的mcp-use/client连接此时以该连接协商出的服务器名作为命名空间连接仍归调用方所有应用需要自行关闭它。匿名连接无服务器名无法作为命名空间因此该重载会拒绝匿名连接。硬性前提与安全提示必须安装可选依赖mcp-use/client源码在proxy()内部通过动态import(./mcp-proxy.js)加载实现见 server.ts未安装时会抛出错误。调用时机必须在listen()或第一次server.fetch请求之前调用服务器已启动或已关闭后调用会抛错#assertOpen守卫。认证需显式提供代理启动流程不会运行交互式 OAuth。bearer token 或自定义 header 必须由你显式传入如上面的authToken。连接与挂载的容错连接、内省introspection和命名冲突失败会被诊断并跳过不会丢弃其余可挂载的能力见 server.ts 的注释及 mcp-proxy.ts 实现。能力转发并非全量不要假设每个能力都会被转发。在设计依赖 resource templates资源模板、completions补全、subscriptions订阅以及上游列表重新同步list resynchronization的架构之前务必先确认当前版本对这些能力的实际支持情况。若你的代理场景必须用到这些能力需要先在真实上游上做端到端验证。请求作用域的通知仅存活于回调期间mcp-use 的请求上下文Request Context提供了三个通知方法用于在工具、资源、提示词回调执行期间向客户端发送状态更新。它们与回调结束后广播的消息通道有本质区别必须在回调活跃期间使用并 await它们不是响应后的广播通道。await ctx.sendNotification(com.example/import-status, { status: started }); await ctx.reportProgress(50, 100, Halfway); await ctx.sendLog(info, { imported: 42 }, import-worker);这三个方法在 context.ts 中的实现值得关注sendNotification(method, params)发送自定义协议通知底层调用ctx.mcpReq.notify({ method, params })。method 命名建议遵循自定义通知的惯例如com.example/import-status。reportProgress(progress, total?, message?)发送标准notifications/progress通知。关键行为它读取请求元数据中的progressToken当调用方客户端未提供进度令牌时返回false见 context.ts你可以据此判断进度是否真的会被送达从而决定是否降级为日志输出。sendLog(level, data, logger?)发送标准notifications/message日志通知参数与协议字段一一对应level、data、可选的logger。使用建议把状态上报放在回调的中段或长耗时操作的循环里并在回调返回前await这些调用确保通知已发出不要依赖它们传递回调已完成这类回调结束后才产生的事件。列表与资源失效面向订阅者的非持久广播当服务器的可发现列表工具、提示词、资源清单或某个资源的表示内容发生变更时可以调用服务器级别的通知方法向持有活跃订阅监听器的 v2 客户端发布变更通知见 server.tsawait server.notifyToolsChanged(); await server.notifyPromptsChanged(); await server.notifyResourcesChanged(); await server.notifyResourceUpdated(config://settings);notifyToolsChanged()/notifyPromptsChanged()/notifyResourcesChanged()分别广播工具列表、提示词列表、资源列表的变化。notifyResourceUpdated(uri)针对单个资源 URI 的表示变更进行定向通知。语义上的重要边界这些通知是非持久的缓存失效信号non-durable cache invalidations。不要把它们当作可靠的事件总线来设计架构应当让资源或注册表registry本身保持权威读取操作可重复幂等绝不依赖每个事件的送达——客户端可能没有订阅、连接可能中断、通知可能丢失把客户端稍后重新拉取列表/资源作为兜底路径确保即使全部通知丢失系统仍然正确。这些方法与请求作用域的ctx.*通知不同它们是跨请求的服务器级广播只投递给当前已建立订阅的 v2 客户端。调用前服务器需要已完成挂载源码中先#ensureSkillsPrimed()再#ensureMounted()因此在服务器尚未启动时调用会抛错。Elicitation在工具调用中采集结构化输入Elicitation 是 mcp-use 为能理解并返回结构化输入的客户端设计的能力当工具回调需要收集结构化输入或完成一个外部流程如人工审批时使用ctx.elicit(key, message, schemaOrUrl)向客户端发起请求。基本用法与状态机const approval await ctx.elicit(publish-approval, Publish now?, schema); if (approval.status required) return approval.result; if (approval.status ! accept || !approval.data.approve) { return { isError: true, content: [{ type: text, text: Not approved }] }; }调用结果approval是一个状态对象需要按状态分派处理status required客户端要求服务器先返回结果再继续此时应直接返回approval.result通常是带inputRequired标记的结果信封告诉客户端需要补充输入。status accept客户端已接受并返回输入数据读取approval.data继续执行业务逻辑。status decline/status cancel客户端拒绝或取消按失败路径处理。关键点在于工具回调会因输入缺失而重跑rerun。第一轮调用返回required结果后客户端补充输入并重新发起调用此时回调再次执行ctx.elicit这次拿到的是已填写的accept结果。这就是为什么每次调用都要同时处理required、accept、decline、cancel四种分支。仓库的 conformance 示例中大量使用了这一模式展示了inputRequired.elicit(...)与后续分支判断的完整写法见 conformance/src/index.ts。安全与连续性守则Elicitation 引入了跨轮次延续的执行模型随之而来的是更严格的安全要求副作用时机只在收到 accepted 输入之后再执行不可逆的副作用写库、发消息、扣款等不要在首轮就执行。稳定且唯一的 key每个问题使用独立、稳定的 key如publish-approval避免不同问题共用一个 key 导致状态混淆。校验裸输入对任何直接给出的输入bare input responses都要做独立校验不能假设客户端返回的数据一定符合 Schema。验证请求状态当连续性影响授权或业务逻辑时使用经过验证的请求状态如 OAuth 配置下的ctx.auth来判断后续轮次是否仍由同一主体发起。严禁采集敏感信息永远不要在表单式 Elicitation 中收集密码、API 密钥、支付详情或 OAuth 密钥。这类机密应通过专门的认证流程参见 auth.md处理。组合使用与验证建议这五类特性可以组合出复杂的服务器行为例如用fromOpenAPI快速接入 REST 后端 → 用proxy聚合多个内部 MCP 服务 → 在回调中通过ctx.reportProgress反馈长任务进度 → 变更注册表后调用server.notifyToolsChanged()广播失效 → 对需要人工确认的发布操作使用ctx.elicit采集审批。由于这些特性大多依赖客户端的主动支持订阅、进度令牌、Elicitation 能力声明落地时务必做到先检查客户端能力回调上下文提供ctx.client.can(...)和ctx.client.capabilities()用于探测客户端是否支持sampling、elicitation、subscriptions等能力见 context.ts据此决定是否降级。用最小生命周期验证为每项特性编写覆盖真实生命周期的最小验证——例如先确认reportProgress返回true有 progressToken再断言客户端确实收到通知。以已安装版本为准包版本之间的行为细节如 proxy 的能力转发范围、OpenAPI 工具的 Schema 转换策略可能变化编写代码前先核对当前mcp-use版本的声明文件.d.ts与 CHANGELOG。更完整的服务器基础能力工具、资源、提示词、MCP 中间件、请求上下文、结果信封参见 server.md涉及认证与授权时参见 auth.md。赞分享后端MCP 服务MCP ClientsAI Agent人工智能【免费下载链接】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 MCP 服务端高级特性实战指南OpenAPI 生成工具、服务器代理、请求级通知与 Elicitation 交互mcp use MCP 服务端高级特性实战指南OpenAPI 生成工具、服务器代理、请求级通知与 Elicitation 交互 本指南基于 mcp use 官后端MCP 服务MCP ClientsAI Agent人工智能Prisma DBML Generator 与其他数据库文档工具的对比分析Prisma DBML Generator 与其他数据库文档工具的对比分析 Prisma DBML Generator 是一款强大的数据库文档生成工具它能够将Inspector MCP 服务器 UX 处理器与交互模式深度解析Sampling、Elicitation、Roots 与表单生成实战指南Inspector MCP 服务器 UX 处理器与交互模式深度解析Sampling、Elicitation、Roots 与表单生成实战指南 导读 本文以 MC开发工具MCP Clients调试器上一篇闲鱼数据采集实战基于uiautomator2的移动端自动化爬虫技术解析下一篇魔兽争霸3在Windows 11完美运行的终极解决方案WarcraftHelper完整指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
企业数字化 ERP 产品动态
相关推荐
WeMod 解锁完整指南:用 Wand-Enhancer 免费开启全部专业版功能 WeMod 解锁完整指南:用 Wand-Enhancer 免费开启全部专业版功能 【免费下载链接】Wand-Enhancer Advanced UX and interoperability extension for Wand (WeMod) app 项目地址: https://gitcode.com/GitHub_Trending/we/Wand-Enhancer
昨晚打单机时࿰… · 2026/9/24 16:31:55
wp-calypso 数据组件深度解析:用 QuerySiteDomains 声明式拉取站点域名列表 wp-calypso 数据组件深度解析:用 QuerySiteDomains 声明式拉取站点域名列表 【免费下载链接】wp-calypso The JavaScript and API powered WordPress.com 项目地址: https://gitcode.com/gh_mirrors/wp/wp-calypso
<QuerySiteDomains /> 是 wp-calypso… · 2026/9/24 16:31:55
大麦自动抢票教程:一份配置文件,从搜索到下单全自动 大麦自动抢票教程:一份配置文件,从搜索到下单全自动 【免费下载链接】ticket-purchase 大麦自动抢票,支持人员、城市、日期场次、价格选择 项目地址: https://gitcode.com/GitHub_Trending/ti/ticket-purchase
开票那几秒,… · 2026/9/24 16:31:55
大麦自动抢票指南:Python Selenium + Appium 双端抢票脚本完整教程 大麦自动抢票指南:Python Selenium Appium 双端抢票脚本完整教程 【免费下载链接】ticket-purchase 大麦自动抢票,支持人员、城市、日期场次、价格选择 项目地址: https://gitcode.com/GitHub_Trending/ti/ticket-purchase
ticket-purchase 是一… · 2026/9/24 17:02:56
ParlAI Seq2Seq Agent 深度指南:基于 RNN 的序列到序列生成模型 NLP人工智能深度学习 【免费下载链接】ParlAI A framework for training and evaluating AI models on a variety of openly available dialogue datasets. 项目地址: https://gitcode.com/gh_mirrors/pa/ParlAI 点击查看 免费下载 本指南围绕 ParlAI 仓库中 parla… · 2026/9/24 17:02:56
Yii 2 错误处理完全指南:ErrorHandler 组件、异常页面定制与多格式错误响应 Yii 2 错误处理完全指南:ErrorHandler 组件、异常页面定制与多格式错误响应 【免费下载链接】yii2 Yii 2: The Fast, Secure and Professional PHP Framework 项目地址: https://gitcode.com/gh_mirrors/yi/yii2
本篇技术指南以 Yii 2 内置的 yii\web\ErrorH… · 2026/9/24 17:02:56
前端实战:滚动监听实现顶部 logo 平滑显隐效果 开发弹窗、侧边抽屉、全屏遮罩这类组件时,经常会遇到一个问题:弹窗弹出后,底层页面依然可以滚动,体验很差。常见方案就是控制 body 的滚动,本文使用 jQuery 实现禁止页面滑动和恢复页面滑动,同时说明坑点。… · 2026/9/24 17:02:56
Visdom 窗口系统完全指南:Window ID、拖拽布局、程序化操作与实时参数编辑 Visdom 窗口系统完全指南:Window ID、拖拽布局、程序化操作与实时参数编辑 【免费下载链接】visdom Tool for real-time visualization, monitoring and collaborative analysis of AI/ML experiments and live data. Supports Python, PyTorch/Torch, NumPy, Tenso… · 2026/9/24 17:02:56
云手机哪个好用?系统兼容性、保活、网络维度分析,怎么选 云手机本质是部署在云端服务器上的 Android 虚拟设备,可实现本地设备关机后云端应用持续运行。本文从技术指标出发,整理了云手机的核心评估维度,对比市面主流几款产品的特性、优缺点,面向个人开发者、测试人员、应用托管用户提供选… · 2026/9/24 17:02:50
基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程 简介:这是一套面向计算机、人工智能、自动化等专业学生与教师的毕业设计级项目资源,围绕YOLOv8实现渔船作业监控系统,可用于毕设、课程设计、大作业或项目立项演示。压缩包共97个文件,约24.21MB,以70个Python源码文件为… · 2026/9/24 0:00:13
1D-CNN时间序列建模实战:从Conv1d原理到工业落地 简介:面向时间序列数据建模的一维卷积神经网络完整实现,适合深度学习入门者及需要快速验证时序模型的研究者,能够从音频、文本、传感器或股价等序列中挖掘局部特征与时间依赖。压缩包体积很小,只有3KB,内含3个Python脚… · 2026/9/24 0:00:26
柔软的L:汉语语流中被忽视的舌肌张力控制 1. 这个“L”不是字母表里的L,而是舌尖上的L最近在几个方言群和语音教学社群里,反复看到有人发一句:“也说字母L:柔软的长舌”。初看以为是英语发音课笔记,点开才发现全是方言爱好者、播音系学生、语言康复师甚至戏曲演… · 2026/9/24 0:00:44