1. 从零写一个 MCP 服务为什么卡在“链接”这一步MCPModel Context Protocol这两年被聊得很多但真正动手写一个自己的 MCP 服务时大部分人卡住的不是协议本身而是“链接”两个字。Node.js 环境下你要同时处理三件事SDK 的握手流程、工具Tool的注册与参数校验、以及客户端Cursor、Cherry Studio 等能不能正确拉起你的进程并识别出工具列表。任何一环没对齐表现就是“客户端里看不到工具”或者“调用了但没反应”。这篇就聚焦这条链路用 Node.js 从零搭一个自定义 MCP 服务注册两个工具一个求和、一个创建文件然后把它接到支持 MCP 的客户端里跑通。同时我会把模型调用这一层统一走 TaoToken 的 Key 和 API 通道这样你后面无论换哪个模型、哪个客户端都不用到处改配置。适合已经会一点 Node、想搞清楚 MCP 到底怎么“连上”的人也适合只想照着抄一份能跑骨架的人。核心检索词先摆出来node mcp 链接、自定义 MCP 服务、MCP 协议握手、工具注册、本地调试。下面按“先跑通再优化”的顺序来。2. TaoToken 前置统一 Key 与 API 通道怎么准备MCP 服务本身是本地进程它不直接决定你用哪个大模型。真正决定模型的是客户端那一侧。但如果你想让多个客户端、多个脚本共用一套模型入口就需要一个统一的 Key 和 API 通道。我这边用的是 TaoToken官网入口在 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content API 基址是 https://taotoken.net/api 这个不加 UTM。操作顺序很简单先注册登录进控制台在 API Keys 页面创建一个 Key。这个 Key 后面会填到客户端的模型配置里而不是填到 MCP 服务代码里——这点新手最容易搞混。MCP 服务只负责“提供工具”模型负责“决定调不调工具”两者通过客户端串起来。如果你只是本地调试 MCP 工具其实不接模型也能测用 curl 或者客户端自带的工具面板就能触发。但一旦你想让模型自动调用这些工具就必须在客户端里配好模型通道。TaoToken 在这里的作用是一个 Key 走通对话、编码、Agent 这几类场景省得每个客户端单独配一遍。注意Key 属于敏感信息不要写进会提交到 Git 的代码里。本地测试可以用环境变量或者放在客户端自己的配置文件中。3. 可复制配置package.json 与 app.js 骨架先建目录初始化项目。Node 版本建议 18 以上我用的是 20.x。因为 MCP SDK 是 ESM 的所以 package.json 里要声明type: module。{ name: my-mcp-server, version: 0.1.0, type: module, scripts: { start: node app.js }, dependencies: { modelcontextprotocol/sdk: ^1.15.1, zod: ^3.25.76 } }装依赖npm install然后是 app.js。这里的关键点是用McpServer创建服务实例用registerTool注册工具参数校验交给 zod最后用StdioServerTransport把服务挂到标准输入输出上——因为客户端是通过 stdio 拉起你的进程并通信的。import { McpServer } from modelcontextprotocol/sdk/server/mcp.js; import { StdioServerTransport } from modelcontextprotocol/sdk/server/stdio.js; import { z } from zod; import fs from fs; const server new McpServer({ name: my mcp server, title: my mcp server, version: 0.1.0, }); server.registerTool( sum, { title: 两数求和, description: 得到两个数的和, inputSchema: { a: z.number().describe(第一个数), b: z.number().describe(第二个数), }, }, ({ a, b }) { return { content: [ { type: text, text: 两数求和结果${a b} }, ], }; } ); server.registerTool( createFile, { title: 创建文件, description: 在指定目录下创建一个文件, inputSchema: { filename: z.string().describe(文件名), content: z.string().describe(文件内容), }, }, ({ filename, content }) { try { fs.writeFileSync(filename, content); return { content: [{ type: text, text: 文件创建成功 }], }; } catch (err) { return { content: [{ type: text, text: err.message || 文件创建失败 }], }; } } ); const transport new StdioServerTransport(); await server.connect(transport);这里有两个容易踩的点。第一registerTool的第一个参数是工具名客户端里显示的就是它别用中文或空格。第二工具回调里不要往 stdout 打日志因为 stdout 是协议通道你打一行普通日志就可能破坏握手。要调试就写console.error它走 stderr不影响协议。4. 验证请求用 Cursor 和 curl 确认 MCP 链接生效代码写完后先本地跑一下确认不报错node app.js如果进程挂住不动、没有输出这是正常的——它在等 stdio 输入。按 CtrlC 退出即可。接下来用 Cursor 测试。打开 Cursor 的 MCP 配置写入{ mcpServers: { mcp-Test: { command: D:\\Users\\zhangsan\\AppData\\Local\\nvm\\v20.11.1\\node, args: [C:\\Users\\zhangsan\\Desktop\\as\\src\\app.js] } } }command填 node 可执行文件的绝对路径args填你的 app.js 绝对路径。Windows 下路径要用双反斜杠转义。保存后重启 Cursor在 MCP 面板里应该能看到mcp-Test下面挂着两个工具sum和createFile。触发sum时传{a: 3, b: 5}返回文本应该是“两数求和结果8”。触发createFile时传文件名和内容比如{filename: test.txt, content: hello mcp}执行后去对应目录看文件是否生成。我实测下来只要路径没写错文件会直接落在 node 进程的工作目录下——如果你没指定绝对路径它可能创建在你意想不到的地方这点要注意。除了 CursorCherry Studio 也能加 MCP 工具而且它里面可以同时挂多个模型和多个 MCP 服务适合做交叉验证。如果你想让模型自动决定调用哪个工具就在 Cherry Studio 里把模型通道配成 TaoToken 的 API 基址和 Key然后问它“帮我算 12 加 30”看它会不会自动走sum工具。想用命令行验证协议层是否正常可以用 curl 走 HTTP 方式前提是你把 transport 换成 HTTP 类型。stdio 模式下 curl 不方便直接测更实际的做法是看客户端日志。Cursor 的 MCP 日志里会打印握手和工具列表如果工具没出现日志里通常会有报错原因。5. 本篇常见错排查工具列表为空九成是路径问题。command必须是 node 的绝对路径不是node这个字符串args必须是 app.js 的绝对路径。Windows 下用where node查路径注意反斜杠转义。进程启动就退出检查 app.js 里有没有顶层 await 报错或者依赖没装全。先单独node app.js跑一遍看 stderr 输出。调用工具没反应检查工具回调里是不是往 stdout 打了日志。任何console.log都会污染协议通道改用console.error。文件创建到了奇怪的位置fs.writeFileSync用的是相对路径时基准是 node 进程的工作目录不是 app.js 所在目录。要可控就传绝对路径。客户端识别不到服务确认客户端版本支持 MCP并且配置保存后重启了客户端。有些客户端需要手动刷新 MCP 列表。模型不调用工具这不是 MCP 的问题是模型侧的工具调用能力。确认客户端里模型通道配置正确并且该模型支持 function calling / tool use。6. 把 Key 和通道固定下来后面少折腾MCP 服务跑通之后你会发现真正花时间的不是写工具而是每换一个客户端就重配一遍模型。我的做法是把模型入口统一到 TaoToken一个 Key一个 API 基址对话类场景走模型对话长期编码和 Agent 场景走 Coding Plan接入细节看接入文档。这样 MCP 服务本身保持干净只负责工具模型通道的事交给统一入口。如果你还在调工具注册和握手先去 API Keys 页面把 Key 建好再对着接入文档把客户端配通如果只是想先验证模型能不能正确调用你写的工具直接开模型对话试一句“帮我算 7 加 9”如果你打算把 MCP 工具长期挂在编码流程里那 Coding Plan 更合适。三条路都指向同一个 Key配一次就行。
企业数字化 ERP 产品动态
相关推荐
【电脑自动化工具】OpenClaw 小龙虾 Win11 零命令行部署实操分享(含安装包) /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/27 12:54:10
从运动感知到稳定上报:动态环境监测系统的设计与实现 前阵子给一套工业物资运输监测系统做原型,设备要求很简单:能在颠簸、跌落、倾斜这些动态环境里把异常姿态和冲击事件通过无线链路及时上报。按传统思路就是MCU定时读传感器、再开无线发射,可实际上功耗高、误报多、抗干扰还差。后来我换成R7K… · 2026/9/27 12:53:40
苏州网站建设代理避坑指南:新手入门省30%成本实操 苏州网站建设代理避坑指南:新手入门省30%成本实操 第一次找苏州的网站建设代理,最怕什么?怕报价单上写的是白菜价,最后收你的是金条钱。很多老板拿着预算5000块,被销售一顿忽悠,最后花了2万还没搞清楚钱花哪了。这就是典型的“信息差陷阱”,也… · 2026/9/27 12:53:40
国内三家大模型修图能力对比:用 TaoToken 统一 Key 跑通评测脚本 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/27 22:05:07
基于SpringBoot社区邻里互助服务平台-附源码 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台… · 2026/9/27 22:05:07
网页设计和网站编辑一文搞懂:3步搞定域名服务器与SEO落地 网页设计和网站编辑一文搞懂:3步搞定域名服务器与SEO落地 很多新手刚接手网站项目,最头疼的不是代码写不出来,而是域名解析、服务器配置这些基础环节完全摸不着头脑。哪怕页面设计得再漂亮,如果底层架构没搭对,搜索引擎根本抓不到你的核心内容。今天… · 2026/9/27 22:05:07
Node + MongoDB 数据库配置:TaoToken 统一 Key 接入与 config 骨架 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/27 22:05:07
统一大模型API接入平台选型指南:企业与开发者如何评估多模型调用方案 应用与大型语言模型之间通常会插入一层中间服务,用来统一接口、管理多模型访问并控制成本。OpenRouter以托管模型市场的形式运作,通过单一账户覆盖大量模型;另一类方案则提供统一协议接入,让开发者用一套标准接口调用平台已上架的… · 2026/9/27 22:04:49
MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现 简介:这套Matlab仿真工具完整呈现雷达信号脉冲压缩过程,从线性调频(LFM)信号生成、目标回波仿真到匹配滤波压缩处理均有可运行代码支撑,面向电子信息工程、计算机、数学等专业学生,适用于课程设计、期末大作… · 2026/9/27 0:00:01
汕头网站建设制作厂家避坑指南:5大注意事项救急 汕头网站建设制作厂家避坑指南:5大注意事项救急 改个需求建站公司拖一周,这种憋屈事我见得太多了。 很多汕头老板找本地建站团队,签合同前看着方案挺美,一上线就变脸。 今天不聊虚的,直接拆解找 汕头网站建设制作厂家 时的5个核心 注意事项… · 2026/9/27 0:00:01
多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习 简介:基于PyTorch的多模态虚假新闻检测项目完整代码包,面向自然语言处理与计算机视觉交叉方向的开发者、科研人员及毕业设计选题者,解决社交媒体中文本与图像联合识别虚假新闻的问题。系统以BERT预训练模型提取文本语义特征,以Res… · 2026/9/27 0:00:01
MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现 简介:这套Matlab仿真工具完整呈现雷达信号脉冲压缩过程,从线性调频(LFM)信号生成、目标回波仿真到匹配滤波压缩处理均有可运行代码支撑,面向电子信息工程、计算机、数学等专业学生,适用于课程设计、期末大作… · 2026/9/27 0:00:01
汕头网站建设制作厂家避坑指南:5大注意事项救急 汕头网站建设制作厂家避坑指南:5大注意事项救急 改个需求建站公司拖一周,这种憋屈事我见得太多了。 很多汕头老板找本地建站团队,签合同前看着方案挺美,一上线就变脸。 今天不聊虚的,直接拆解找 汕头网站建设制作厂家 时的5个核心 注意事项… · 2026/9/27 0:00:01
多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习 简介:基于PyTorch的多模态虚假新闻检测项目完整代码包,面向自然语言处理与计算机视觉交叉方向的开发者、科研人员及毕业设计选题者,解决社交媒体中文本与图像联合识别虚假新闻的问题。系统以BERT预训练模型提取文本语义特征,以Res… · 2026/9/27 0:00:01