Node写MCP入门教程

【MCP Node.js SDK 全栈进阶指南】高级篇(2):MCP高性能服务优化 随着MCP应用规模的扩大和用户量的增加,性能优化成为系统稳定运行的关键因素。高性能的MCP服务不仅能提供更好的用户体验,还能降低运营成本,提高系统的可扩展性。本文将深入探讨MCP TypeScript-SDK的性能优化策略,帮助开发者构建高效、稳定的MCP服务。super();// 为服务器添加监听器// 定期发出指标事件// 请求开始和完成的监控逻辑// ...// 计算当前指标// 发出指标事件// 重置计数指标。 阅读详情

引言:用 Node + TypeScript 实现一个基于 stdio 的 MCP(Model Context Protocol)服务,并通过 @modelcontextprotocol/inspector 进行交互式调试。文中提供完整代码、命令与调试步骤,按步骤即可搭建与运行。

原文: Node写MCP入门教程

一、MCP 简介与目标

  • MCP 是一种让模型与外部工具安全、结构化交互的协议,常用于将代码、数据库、Web API 等能力接入到模型对话中。
  • 本文目标:实现一个名为 mcp-file-counter 的 MCP 服务,通过 count_files 工具统计指定目录的文件数量(支持忽略目录),并用 Inspector 可视化调用与调试。

二、创建项目

环境准备

  • Node 版本:>= 18
  • 包管理:推荐 pnpm
  • 辅助工具:ni/nr(可选,统一安装/运行体验)

检查与安装:

node -v
pnpm -v

# 若未安装 pnpm
npm i -g pnpm

# 可选:安装 ni/nr(Antfu 的统一包管理器命令)
npm i -g @antfu/ni

初始项目和安装依赖

在空目录中初始化并安装依赖:

# 初始化(可选)
pnpm init -y

# 运行时依赖
ni @modelcontextprotocol/sdk

# 开发依赖
ni -D typescript tsx @types/node @modelcontextprotocol/inspector

若未安装 ni,可使用 pnpm add 等价替代:

pnpm add @modelcontextprotocol/sdk
pnpm add -D typescript tsx @types/node @modelcontextprotocol/inspector

项目结构

建议目录结构如下:

package.json
tsconfig.json
src/
  server.ts
  tools/
    fileCount.ts

image.png

TypeScript 配置

在项目根目录创建 tsconfig.json:

{
  "compilerOptions": {
    "target": "ES2022",
    "module": "NodeNext",
    "moduleResolution": "NodeNext",
    "outDir": "dist",
    "rootDir": "src",
    "strict": true,
    "esModuleInterop": true,
    "skipLibCheck": true
  }
}

三、实现文件计数工具

新建 src/tools/fileCount.ts:

功能与实现简述:

  • 功能:遍历指定根目录,统计普通文件总数,并支持忽略目录或相对路径。
  • 实现:以深度优先递归遍历目录,使用 ignore 集合过滤,visited 集合避免重复计数与符号链接循环。
  • 关键点:withFileTypes: true 获取类型;目录继续递归,文件累加;path.relative 帮助按根相对路径做忽略匹配。
import fs from "node:fs";
import path from "node:path";

export async function countFiles(root: string, ignore: string[] = []): Promise<number> {
  const visited = new Set<string>();
  const ig = new Set(ignore.map(s => s.trim()).filter(Boolean));

  async function walk(dir: string): Promise<number> {
    const dirents = await fs.promises.readdir(dir, { withFileTypes: true });
    let count = 0;
    for (const d of dirents) {
      const full = path.join(dir, d.name);
      const rel = path.relative(root, full);
      if (ig.has(d.name) || ig.has(rel)) continue;
      if (d.isDirectory()) {
        count += await walk(full);
      } else if (d.isFile()) {
        if (!visited.has(full)) {
          visited.add(full);
          count += 1;
        }
      }
    }
    return count;
  }

  return walk(root);
}

四、实现 MCP Server(Stdio)

传输协议概览:

  • stdio:通过进程的标准输入/输出传输结构化消息,适合本地或被其他进程托管的场景,零网络依赖。
  • SSE:基于 HTTP 的 text/event-stream 单向服务器推送通道,客户端建立长连接,服务端持续按事件流推送消息,适合跨网络的实时输出与状态变更。
  • Streamable HTTP:用标准 HTTP 请求/响应承载 MCP 消息,响应体支持分块/增量输出(非 SSE 帧),保持 REST 语义与中间件兼容,适合网关与服务化部署。

StdioServerTransport 能力:

  • 封装 process.stdin/process.stdout 为消息通道,负责读取、解析与写回协议消息。
  • 管理连接的生命周期与错误处理,确保消息循环稳定运行。
  • 与 Server.connect(transport) 协作完成握手、工具注册与调用路由。对业务代码暴露的主要用法是构造并传入 connect,其余由 SDK 管理。

代码说明:

  • 定义 Server 元信息与能力声明,用于握手阶段告知客户端可用能力。
  • 通过 server.addTool 注册工具,包括名字、描述和输入参数描述,以及实现 execute。
  • 创建 StdioServerTransport 并 server.connect(transport),启动基于 stdio 的消息循环。

新建 src/server.ts:

import path from "node:path";
import { Server } from "@modelcontextprotocol/sdk/server/index.js";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
import { countFiles } from "./tools/fileCount.js";

const server = new Server(
  { name: "mcp-file-counter", version: "0.1.0" },
  { capabilities: { tools: {} } }
);

server.addTool({
  name: "count_files",
  description: "Count files under a directory",
  inputSchema: {
    type: "object",
    properties: {
      path: { type: "string", default: "." },
      ignore: {
        type: "array",
        items: { type: "string" },
        default: ["node_modules", ".git", "dist"]
      }
    }
  },
  execute: async (args) => {
    const rootArg = typeof args.path === "string" ? args.path : ".";
    const ignoreArg = Array.isArray(args.ignore) ? args.ignore : ["node_modules", ".git", "dist"];
    const root = path.resolve(process.cwd(), rootArg);
    const total = await countFiles(root, ignoreArg);
    return { content: [{ type: "text", text: String(total) }] };
  }
});

const transport = new StdioServerTransport();
await server.connect(transport);

这个execute 可以理解为最终重新启动了个进程,提供服务,比如

node server.js --path=/my/path

这样,execute函数内部就能获取到命令行参数path(即args.path)

MCP是提供给Agent使用的,Agent会根据名称和描述去调用这个工具(命令),并传入合适的参数。

五、配置脚本和使用inspector调试MCP

在 package.json 中加入关键配置与脚本:

{
  "type": "module",
  "engines": { "node": ">=18" },
  "packageManager": "pnpm@9",
  "scripts": {
    "dev": "tsx src/server.ts",
    "build": "tsc -p tsconfig.json",
    "start": "node dist/server.js",
    "inspect:dev": "mcp-inspector tsx \"tsx src/server.ts\"",
    "inspect": "mcp-inspector node dist/server.js"
  }
}

Inspector 原理:

  • mcp-inspector 充当 MCP 客户端与可视化 UI,会启动你提供的命令(如 tsx src/server.ts),并通过 stdio 与服务端交换协议消息。
  • 启动后完成握手(识别服务名与能力),拉取工具列表,渲染交互界面;当你在 UI 中调用某个工具时,它将请求参数序列化为协议消息发送给服务,随后展示返回的内容。
  • 这种方式不依赖网络,便于本地开发与调试;若换成 SSE 或 Streamable HTTP 等传输,Inspector 则通过对应通道进行连接。

运行示例:

# 开发态直接运行(Stdio)
nr dev

# 构建并启动(Node 执行 dist)
nr build
nr start

# 使用 Inspector 调试(开发态)
nr inspect:dev

# 使用 Inspector 调试(构建后)
nr build && nr inspect

image.png

image.png

image.png

node 搭建 MCP Server 并且在业务场景中使用 Client和Server 都可以调用模型,这两者只是不同的角色和位置,调用模型本质上就是发起一个请求给模型API,谁发起都行。这类概念,本质上是定义了一种“通过 Client 去操作特定 Server 的规范和机制”,它是对多组件(Client和Server)之间交互的抽象和约束。MCP不是说只能“Client调用模型”,而是强调Client和Server协同工作的规范。}); 阅读详情

相关推荐

手把手教你用Node.js开发一个MCP Server(附完整代码)

本文详细介绍了如何使用Node.js开发一个基于MCP(Model Context Protocol)协议的Server,包括环境配置、核心功能实现、高级功能扩展及生产环境部署。通过JSON-RPC 2.0标准通信格式,开发者可以轻松构建与AI模型交互的功能扩展服务,适用于Claude等AI工具的生态集成。

weixin_30790841的博客 481

Node搭建MCP

mcp搭建和理解

weixin_44730244的博客 1128

MCP 实战派【3】Node-RED MCP 插件实践指南:从安装到常见问题解析

本文介绍了增强版 node-red-contrib-mcp-server 插件,该插件实现了完整的 MCP 核心协议,解决了与 Dify、Claude 等平台集成的关键问题。文章详细说明了插件的安装方法,并重点总结了三个实践中的常见错误点:在 function 节点中正确处理 msg 对象、严格遵守 MCP Tools Response 规范要求,以及实现 notifications/initialized 事件的重要性。最后提供了一个完整的 Node-RED 流程示例,展示了如何通过 MCP 协议调用模拟

zxlp520的博客 1408

MCP,一篇文章学会MCP 【通过Nodejs 搭建MCP服务】

首先,MCP协议的核心功能包括资源管理、提示词处理、工具集成、采样机制等,这些构成了一个强大的框架,支持开发者创建复杂的应用场景。以网络搜索工具为例,展示了如何利用MCP协议实现从用户输入到结果展示的完整流程。该工具使用了@modelcontextprotocol/sdk、axios以及zod等依赖库,其中@modelcontextprotocol/sdk是官方提供的SDK,简化了与MCP协议相关的操作;axios用于发送HTTP请求;zod则确保数据验证的准确性。

程序员猫爪 5201

【MCP Node.js SDK 全栈进阶指南】初级篇(1):MCP开发环境搭建详解

本文详细介绍了MCP TypeScript-SDK开发环境的搭建流程,包括Node.js与TypeScript环境配置、SDK安装与版本选择、开发工具推荐与配置,以及第一个MCP项目的结构设计。通过本文的指导,你应该已经具备了开始MCP应用开发的基础环境和知识。在下一篇文章中,我们将深入探讨MCP基础服务器开发,包括服务器创建与生命周期管理、不同类型服务器的区别与选择,以及更多高级配置选项。

分享一些感兴趣的技术方面 2314

MCP协议用到的Node.js 和 npm npx

是一个基于 Chrome V8 引擎的 JavaScript 运行时环境,使您能够在服务器端运行 JavaScript 代码。它广泛用于构建服务器端应用程序和工具。

weixin_42035282的博客 2740

Node写MCP入门教程:用TypeScript与stdio从零搭建第一个MCP Server并用Inspector调试

用 TypeScript 与 stdio 从零搭建第一个 MCP Server,注册 count_files 工具统计目录文件数,并用官方 Inspector 可视化调试。含可复制 server.ts、tsconfig.json 与 package.json 配置,配合 TaoToken 官网 https://taotoken.net/?utm_source=taotoken_aicg_blog_end 完成模型通道联调,一次跑通握手到工具调用全链路。

weixin_35755188的博客 9

AI Agent 实战:将 Node-RED 创建的 MCP 设备服务接入 Dify

本文介绍了如何将Node-RED创建的MCP设备服务接入Dify或MegaAgent平台,实现AI Agent与物理设备的交互。首先确保已部署Node-RED MCP服务并拥有Dify实例,然后在Dify中安装MCP插件并配置服务URL。配置完成后,在Agent工具中添加该插件,即可通过自然语言控制设备。最后展示了完整控制链路的应用场景,如通过指令查询天平重量等,为智能实验室、工业自动化等场景提供基础支持。

zxlp520的博客 1174

EdgeOne Pages MCP 入门教程

本教程介绍了 EdgeOne Pages MCP(Model Context Protocol)的基本概念、配置方法、使用实例和技术原理。MCP 是一种开放协议,允许 AI 模型安全地与本地和远程资源交互。EdgeOne Pages Deploy MCP 服务可将静态网页内容一键部署到 EdgeOne Pages,并生成可公开访问的链接,支持单文件和文件夹/ZIP包部署。

伟大的大威的博客 2525

React+Node.js全栈开发实战:用MCP Inspector调试你的MCP服务(附Cherry Studio接入指南)

本文详细介绍了如何使用MCP Inspector调试MCP服务,结合React和Node.js全栈开发技术。通过架构解析、快速启动指南和深度调试技巧,帮助开发者高效解决分布式服务调试难题,并附有Cherry Studio接入指南和常见问题排查方法。

yoga7的博客 896

MCP详解及协议的使用(python版本和Node版本)

MCP 是一种统一协议,使得 语言模型(LLM)能以结构化方式与外部系统进行交互,支持多轮、多工具、多模态(文本、图像、音频等)调用。它类似于一种“操作系统中的系统调用协议”,让模型不只是聊天,而是真正地“调用”外部服务。

HGX-DJK 1287

Trae + MCP 读取 API 接口文档,让 AI 帮忙写代码

ApifoxMCPServer是一种桥梁工具,允许AI助手(如Cursor、VSCode、Trae等IDE)访问Apifox项目中的API文档。通过配置MCP客户端,AI可以读取API文档结构,从而帮助快速生成接口调用代码和文档说明。配置步骤包括安装Node.js、获取API访问令牌和项目ID,并在不同IDE中设置MCP。配置完成后,AI可以通过MCP获取API文档,并返回项目中的接口数量。此外,还提供了私有化部署用户的专属配置和常见问题解答。通过MCP,开发者可以实现AI与Apifox项目的深度融合,提升

weixin_45017726的博客 4471

从零开始:手把手教你检查并更新英伟达GPU驱动和CUDA版本(Windows/Linux双平台)

本文详细指导如何在Windows和Linux系统上检查并更新英伟达GPU驱动和CUDA版本,解决版本不匹配导致的常见问题。涵盖驱动更新、CUDA Toolkit安装、版本冲突排解及性能优化技巧,帮助开发者高效管理GPU计算环境。

weixin_29237635的博客 701

node 环境的MCP Server安装

摘要:安装与配置Playwright MCP Server指南 本文详细介绍了Playwright-MCP-Server的安装与配置过程。首先需要安装最新LTS版本的Node.js作为基础环境,然后通过npm全局安装@executeautomation/playwright-mcp-server。接着在Cursor编辑器中进行项目级配置,在.cursor/mcp.json文件中添加相应参数,即可在Cursor的MCP设置中查看已生效的Playwright服务。文章还提供了多个MCP服务器的参考链接,方便开发

lijihao_10086的博客 1076

主流算力卡性能对比分析

超大规模AI训练/HPC:优先选择NVIDIA H100或AMD MI300X,需关注显存带宽和多卡互联能力。企业级AI训练:NVIDIA A100性价比更高,生态成熟。国内自主可控需求:华为昇腾910B是首选,支持液冷和低功耗设计。本地AI推理/游戏:NVIDIA RTX 4090或RTX 5090性价比突出,但需注意显存容量限制。边缘计算/低功耗场景:华为昇腾310或清微智能TX536(能效比6.3TOPS/W@INT8)更合适。

m0_69867914的博客 7805

即梦 AI 全功能零基础详细教程(纯技术版)

即梦 AI 是一款多模态 AI 生成工具,主打文本生成视频、图片生成视频、角色一致性生成、音画同步等核心功能,依托自研 AI 视觉模型,实现从文本 / 图片 / 音频素材输入,到高清视频、图像内容输出的全流程 AI 创作,支持短视频、短剧、创意素材等多场景创作,具备操作门槛低、生成效率高、画面可控性强的技术特点。@为工具内置引用指令,作用是锁定指定素材 / 角色,强制 AI 按照该素材的核心特征生成内容,无额外付费、解锁要求,免费使用。剧本拆分:将短剧拆分为单镜头(15 秒内 / 个)

2501_92061023的博客 5845

使用 Node.js 实现 MCP Server

MCP(Model Communication Protocol)v2.0 作为 AI 工具生态的核心协议,其 Node.js 实现为开发者提供了跨语言视角。本文将带领读者深入探讨如何使用 Node.js 和相关框架(Express、NestJS)构建一个完整的 MCP Server,包括事件驱动架构、高性能设计、WebSocket 支持、工具注册与执行、认证授权和 Docker 部署。通过本文的学习,读者将掌握 Node.js 实现 MCP Server 的完整方法,为构建生产级 MCP 系统提供新的选择

欢迎来到智能安全前线!这里是AI与信息安全交汇之地。我们以代码为武器,深入大模型攻防实战,破解系统漏洞。追踪OpenAI、Meta前沿动态,用红蓝对抗思维,锻造智能时代的坚盾与利矛。 810

基于PLC的冲压件自动生产线电气系统设计【附数据】

考虑到生产线的高效运行和维护简便性,选择了三菱FX系列的可编程逻辑控制器(PLC)作为核心控制单元,该型号的PLC因其高可靠性和强大的功能集,在工业自动化领域有着广泛的应用。最后,在完成初步的软件开发后,进行了多轮次的模拟测试和现场调试,逐步修正了存在的问题,最终达到了预期的功能要求。例如,对于进料环节,选用了光电传感器以精确检测物料的位置;此外,为了适应不同尺寸的工件加工需求,还特别设计了一套可调节的夹具系统,不仅提高了生产线的灵活性,同时也降低了更换模具的成本。✅ 感恩科研路上每一位志同道合的伙伴!

lagougongzuoshi的博客 1293

node mcp链接 写一个自己的mcp!

该摘要主要介绍了如何通过Node.js实现一个基于Model Context Protocol (MCP)的服务端工具。文章演示了创建包含两个功能(sum求和函数和createFile文件创建函数)的MCP服务器,并通过package.json配置项目依赖和启动脚本。重点说明了如何注册MCP工具、定义输入模式和使用stdio传输协议,最后展示了在Cursor和CherryStudio等IDE中测试MCP工具的配置方法,包括指定node路径和启动参数。

qq_42924837的博客 495

Cesium中GLB模型加载

Cesium中GLB模型加载全解析:Primitive与Entities方法详解

m0_72030584的博客 3472

SAP PP CSAP_MAT_BOM_MAINTAIN ECN 增加组件

SAP PP CSAP_MAT_BOM_MAINTAIN ECN 增加组件。

GAVIN 410

【MCP】手把手教你写第一个 MCP

本文介绍如何写第一个 MCP:用 Node.js + 官方 SDK 实现 add、greet 两个工具,通过 stdio 与 Cursor 通信;在 Cursor 里配置 MCP 后,用 call_mcp_tool 传入 server、toolName、arguments 即可调用。

weixin_44288277的博客 641

[QMT量化交易小白入门]-二、如何用miniQMT获取沪深A股的板块列表、历史行情数据和实时行情数据

本专栏主要是介绍QMT的基础用法,常见函数,写策略的方法,也会分享一些量化交易的思路,大概会写100篇左右。QMT的相关资料较少,在使用过程中不断的摸索,遇到了一些问题,记录下来和大家一起沟通,共同进步,自己淋过雨了,希望大家都有一把伞。

木头大左的博客 5659

为什么你的MCP Server Node.js环境总是失败?这7个细节必须掌握

掌握MCP Server Node.js版开发环境搭建的关键细节,避开常见错误。本文解析环境配置、依赖安装、端口设置等7大核心问题,提升调试效率,确保服务稳定运行。适用于本地开发与部署场景,开发者必看,值得收藏。

PixelGlow的博客 787

振镜控制卡硬件接口揭秘:XY2-100/SL2-100协议对比

本文对比分析了工业振镜控制领域两种主流数字通信协议XY2-100和SL2-100的硬件接口差异与应用场景。XY2-100作为开放式协议兼容性强,采用LVDS差分信号传输,适用于激光打标等中高精度场景;SL2-100为半封闭协议,采用RS485差分信号,专为高速响应场景设计。文章详细解析了两种协议的引脚定义、通信机制和性能参数,指出XY2-100适配多品牌振镜且调试简单,SL2-100则更适合Nutfield专用设备的高速高精度需求。最后提供了接口调试的实操建议和选型逻辑,强调应根据具体应用场景的精度、速度和

远程部署调试 运行安装 项目调试 二次开发 项目技术新 持续迭代 部分源码免费分享 647

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

将 Node.js REST API 改造为 AI 就绪的 MCP 服务器

摘要:将Node.js REST API升级为AI就绪的MCP服务器 本文介绍了如何将传统Node.js REST API改造为支持人工智能交互的模型上下文协议(MCP)服务器。MCP作为一种AI优先的设计范式,通过标准化JSON-RPC消息、动态发现机制和语义化操作,使AI智能体能够直接与系统交互。转换过程主要包括:搭建MCP环境、设计适合LLM的工具(将细粒度API整合为高层级语义操作)、创建资源模板提供上下文信息。这种改造使系统能够支持AI驱动的智能交互,而不需要人类开发者编写定制集成代码。

葡萄城技术团队博客 1635

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

上一篇: 【前端工程化】一文看懂现代Monorepo(npm)工程
下一篇: MCP理论和实战,然后做个MCP脚手架吧
疯狂踩坑人
博客等级 码龄9年 12粉丝 17原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值