给 AI 装个“工具箱”:MCP 协议入门与 Node.js 实战

作者:无情的西瓜皮日期:2026/7/29

给 AI 装个"工具箱":MCP 协议入门与 Node.js 实战

你有没有想过一件事:AI 聊天模型很聪明,但它没办法直接读你的本地文件、查天气预报、更新 GitHub Issue,或者在数据库里跑一条 SQL。

这不是能力问题,是协议问题。大模型生在云端,活在自己的世界里。要让它们真正"动起来",你需要一个中间层——一个 AI 能理解和调用的标准接口。

MCP(Model Context Protocol)就是干这个的。它不是某个公司的私有方案,而是 Anthropic 推出来的开放协议,想把 AI 工具调用做到像 USB 接口一样即插即用。

这篇文章不讲概念堆砌,直接上手写一个 Node.js MCP Server,让它能查天气、算时间、读文件,然后让 AI 通过它来完成任务。

一、MCP 到底长什么样?

MCP 的架构只有三个角色:

  • Host:AI 宿主,比如 Claude Desktop、Cursor、VS Code 插件
  • Client:Host 内部运行的 MCP 客户端,负责连接 Server
  • Server:你写的工具,暴露一些"能力"(resources 和 tools)

一个 MCP Server 可以提供:

  • Tools:AI 可以调用的函数,比如 get_weather(city)、search_web(query)
  • Resources:暴露给 AI 读的数据,比如本地文件、日志、数据库结果
  • Prompts:预置的对话模板

通信走 JSON-RPC,传输层可以是 stdio(子进程管道)或者 SSE(HTTP 流)。本地开发用 stdio 就够了,不需要跑 HTTP 服务。

二、搭一个最简 MCP Server

安装依赖

1mkdir mcp-weather-demo && cd mcp-weather-demo
2npm init -y
3npm install @modelcontextprotocol/sdk
4

创建 server.js

1import { Server } from '@modelcontextprotocol/sdk/server/index.js';
2import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
3import { CallToolRequestSchema, ListToolsRequestSchema } from '@modelcontextprotocol/sdk/types.js';
4
5const server = new Server(
6  { name: 'demo-tools', version: '1.0.0' },
7  { capabilities: { tools: {} } }
8);
9
10server.setRequestHandler(ListToolsRequestSchema, async () => ({
11  tools: [
12    {
13      name: 'get_current_time',
14      description: '获取当前时间,支持时区参数',
15      inputSchema: {
16        type: 'object',
17        properties: {
18          timezone: { type: 'string', description: '时区,如 Asia/Shanghai' },
19        },
20      },
21    },
22    {
23      name: 'read_file',
24      description: '读取本地文本文件',
25      inputSchema: {
26        type: 'object',
27        properties: { path: { type: 'string', description: '文件绝对路径' } },
28        required: ['path'],
29      },
30    },
31  ],
32}));
33
34server.setRequestHandler(CallToolRequestSchema, async (request) => {
35  const { name, arguments: args } = request.params;
36  switch (name) {
37    case 'get_current_time': {
38      const tz = args?.timezone || 'Asia/Shanghai';
39      const text = new Date().toLocaleString('zh-CN', { timeZone: tz });
40      return { content: [{ type: 'text', text: '当前时间:' + text }] };
41    }
42    case 'read_file': {
43      const fs = await import('fs/promises');
44      try {
45        const content = await fs.readFile(args.path, 'utf-8');
46        return { content: [{ type: 'text', text: content }] };
47      } catch (err) {
48        return { isError: true, content: [{ type: 'text', text: err.message }] };
49      }
50    }
51    default:
52      return { isError: true, content: [{ type: 'text', text: '未知工具' }] };
53  }
54});
55
56const transport = new StdioServerTransport();
57await server.connect(transport);
58

就这么简单。一个 Server 就是一个 Node.js 进程,通过 stdin/stdout 和 AI 通信。

三、本地测试:不用 AI 也能跑

MCP Server 可以独立测试,不需要任何 AI 客户端。最方便的是 Anthropic 官方 MCP Inspector:

1npx @modelcontextprotocol/inspector node server.js
2

它会打开一个 Web UI,让你手动调用工具、查看返回结果。

四、集成到实际 AI 客户端

方式 1:Claude Desktop

在 MCP 配置中添加:

1{
2  "mcpServers": {
3    "demo-tools": {
4      "command": "node",
5      "args": ["C:/path/to/your/server.js"]
6    }
7  }
8}
9

重启后,Claude 就会自动发现你的工具。

方式 2:VS Code + Cline

Cline 是 VS Code 里的 AI 编码插件,支持 MCP。在 Cline 配置里添加 MCP Server 的启动命令即可。

方式 3:自定义 AI 客户端

1import { Client } from '@modelcontextprotocol/sdk/client/index.js';
2import { StdioClientTransport } from '@modelcontextprotocol/sdk/client/stdio.js';
3
4const transport = new StdioClientTransport({ command: 'node', args: ['./server.js'] });
5const client = new Client({ name: 'my-app', version: '1.0.0' });
6await client.connect(transport);
7
8const tools = await client.listTools();
9console.log(tools.tools.map(t => t.name));
10
11const result = await client.callTool({
12  name: 'get_current_time',
13  arguments: { timezone: 'Asia/Shanghai' },
14});
15console.log(result.content[0].text);
16

五、加一个更实用的工具:查天气

1// 工具定义
2{
3  name: 'get_weather',
4  description: '查询指定城市的实时天气',
5  inputSchema: {
6    type: 'object',
7    properties: { city: { type: 'string', description: '城市名,如北京、上海' } },
8    required: ['city'],
9  },
10}
11
12// 工具处理逻辑
13case 'get_weather': {
14  const city = args.city;
15  const url = 'https://wttr.in/' + encodeURIComponent(city) + '?format=%C+%t+%h+%w';
16  const res = await fetch(url);
17  const text = await res.text();
18  return { content: [{ type: 'text', text: city + ' 天气:' + text }] };
19}
20

wttr.in 是免费终端天气服务,不需要 API Key。如果对精度要求更高,可以换成 OpenWeatherMap 或和风天气。

六、安全注意事项

MCP 给 AI 开了"工具通道",安全需要认真考虑。

1. 最小权限原则

不要暴露 exec、shell、delete_file 这类高风险工具。如果确实需要写文件,加上白名单路径限制。

2. 输入验证

AI 生成的参数不一定可靠。对每个参数做类型检查,拒绝不符合预期的输入。

3. 不要硬编码敏感信息

token、密码放在环境变量里,不要直接写在代码中。

4. 超时与限流

长时间运行的工具要加超时控制,防止 AI 意外调用导致 Server 卡死。

七、MCP 能做什么?真实场景

场景工具示例
代码审查list_git_changes()、get_diff_content()
数据库查询query_sql(sql) 只读模式
文件操作read_file()、search_files(pattern) 只读
外部 APIsearch_web()、get_news()
系统监控get_disk_usage()、check_process()
项目管理create_issue()、list_prs()
文档查询search_docs(query)

八、常见问题

Q1:MCP 和 Function Calling 有什么区别?

OpenAI 也有 Function Calling,但那是平台特定能力。MCP 是开放协议,不绑定模型或平台,而且把工具、资源和提示词统一管理。

Q2:一定要用 Node.js 吗?

不一定。MCP SDK 有 Python、TypeScript、Java、Kotlin 版本,用你熟悉的语言即可。

Q3:可以同时连接多个 MCP Server 吗?

可以。Host 能同时连接多个 Server,AI 会自动发现所有工具。

Q4:生产环境用 stdio 还是 SSE?

本地开发用 stdio 最方便。需要远程访问时用 SSE 或 Streamable HTTP。

Q5:MCP 安全吗?

协议本身不是关键,风险来自你暴露的工具。只读工具风险较小,写操作必须做权限控制和人工确认。

九、总结

MCP 的精髓不在于复杂,而在于它把"AI 工具化"标准化了。你写一个标准 MCP Server,所有支持 MCP 的客户端都能用,不必为每个平台单独适配。

今天就动手试试:从 get_current_time 开始,加 read_file,再加 get_weather。不到 100 行代码,你的 AI 就有了真正的"工具箱"。

下次你对 AI 说"帮我看看这个文件"或"查一下天气",它就不用回答"抱歉,我无法执行这个操作"了——因为它真的可以。


给 AI 装个“工具箱”:MCP 协议入门与 Node.js 实战》 是转载文章,点击查看原文


相关推荐


【Bug已解决】Forked thread token monitor over-accumulates usage after fork 解决方案
向哆哆2026/7/21

【Bug已解决】Forked thread token monitor over-accumulates usage after fork 解决方案 原始报错线索:Forked thread token monitor over-accumulates usage after fork(fork 出来的子进程里,那个统计 token 用量的监控线程,把用量算多了 / 重复累计)。 一、背景:fork 的语义陷阱 fork() 会几乎完整复制父进程的内存(写时复制,COW)。这意味着: 父进


【GitHub】Strix 深度解析:开源 AI 渗透测试工具的架构、原理与实战
怪侠说不说2026/7/13

当 AI 学会了黑客技能,安全测试的范式正在被彻底改写。 一、引言:安全测试的「自动驾驶」时代 传统的渗透测试(Pentest)面临着几个无解的痛点:周期长(动辄数周)、成本高(资深白帽人才稀缺)、误报多(静态扫描工具缺乏上下文理解)、覆盖窄(人为测试难以穷举攻击面)。一款名为 Strix 的开源项目正试图用 AI 多智能体协作的方式,把渗透测试带入"自动驾驶"时代。 Strix 在 GitHub 开源不到一年,已经斩获大量关注。它的核心理念非常直白:用 AI 代理(Agent)模


Opencode是怎么设计的
Worlds2026/7/5

一、前置基础:代码辅助工具的代际演进 在讲解具体架构前,先明确两个底层认知,帮你建立对 OpenCode 定位的正确理解: 两代代码辅助工具的本质区别代码 AI 工具经历了两个明显的代际演进,核心差异是「辅助补全」还是「自主执行」: 第一代:代码补全工具(如 GitHub Copilot),定位是「打字助手」,只能根据上下文生成片段代码,需要用户逐行确认、手动执行后续操作 第二代:代码智能体(Code Agent,如 OpenCode、Claude Code),定位是「任务执行者」,能够自


【C/C++】C 语言实现 WebSocket:握手、帧解析、掩码和回显
SilentSlot2026/6/27

【C/C++】C 语言实现 WebSocket:握手、帧解析、掩码和回显 1. WebSocket 为什么要先握手 WebSocket 不是一开始就直接发送二进制帧,它先通过 HTTP 发起升级请求。浏览器会发送类似这样的请求头: GET / HTTP/1.1 Host: 127.0.0.1:8080 Upgrade: websocket Connection: Upgrade Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ== Sec-WebSoc


Makefile自动化编译实战项目
唐 城2026/6/18

有人说:一个人从1岁活到80岁很平凡,但如果从80岁倒着活,那么一半以上的人都可能不凡。 生活没有捷径,我们踩过的坑都成为了生活的经验,这些经验越早知道,你要走的弯路就会越少。  这是一份 Makefile 自动化编译实战项目资源包。这份指南从核心语法到企业级多目录架构,再到自动化依赖生成,带你彻底掌握 C/C++ 项目的构建自动化,告别手动敲 gcc 的低效时代。 📦 一、 项目目录结构规划 一个标准的工程化项目应具备清晰的目录划分,这是编写高级 Makefile 的基


https连接传输流程
Aphasia2026/6/10

引言:为什么需要 HTTPS? 在传统的 HTTP 协议中,数据是以明文形式在网络中传输的,这带来了三大安全风险:窃听(隐私泄露) 、篡改(数据被劫持修改)和冒充(钓鱼网站) 。 为了解决这些问题,HTTPS 应运而生。HTTPS 的本质是在 HTTP 与 TCP 之间引入了一个安全层——TLS/SSL 协议。它通过混合加密体系,完美兼顾了安全与效率: 非对称加密:在握手阶段使用,用于验证服务器身份并安全地协商出“会话密钥”。 对称加密:在握手完成后使用,双方用协商出的“会话密钥”进行高性能的


Flutter 屏幕旋转适配
Bowen_Jin2026/6/3

mindmap root((Flutter 屏幕旋转适配)) 原理 旋转手机 = 窗口尺寸变了 Flutter 检测到 → 自动重新布局 怎么监听 OrientationBuilder 根据横竖屏切布局 MediaQuery.sizeOf 根据宽度切布局 更推荐 怎么锁定屏幕 SystemChrome.setPreferredOrientations 锁定竖屏 portraitUp 锁


HTML应用指南:利用GET请求获取智己汽车门店位置信息
图说交通2026/5/26

智己汽车作为高端智能电动汽车品牌,深度融合先锋设计美学、纯电驱动技术、高阶智能驾驶与全场景出行服务,依托L7、LS7、LS6、L6等产品矩阵,打造兼具科技感与驾控乐趣的高端出行体验。在营销推广层面,智己摒弃传统4S店模式,创新采用“体验中心+用户中心”的新零售策略,系统构建以用户旅程为核心的全域触点网络。 目前,品牌已在北京、上海、广州、深圳、杭州、成都、武汉、西安、南京、苏州、重庆等一线及新一线城市核心商圈布局直营体验中心与交付中心,并战略性入驻上海BFC外滩金融中心、北京侨福芳草地、深圳万


Scrapy 分布式爬虫:大规模采集汽车之家电车评论
小白学大数据2026/5/5

汽车之家电车评论包含车型体验、续航表现等关键信息,是产品分析与市场调研的核心数据源。单台机器运行Scrapy爬虫易触发反爬、效率低下,分布式爬虫通过多机器协同,可有效解决这一问题。本文将精简讲解Scrapy分布式爬虫的搭建、配置、开发及部署,附带完整可运行代码,助力开发者快速实现大规模评论采集。 一、核心技术栈与环境准备 搭建Scrapy分布式爬虫需多组件协同,核心配置如下: 1.1 核心技术选型 Scrapy:核心爬虫框架,负责请求、解析与调度,支持中间件扩展。Scrapy-Redis


散户如何使用手机T0算法?
韭菜修养2026/4/25

1、什么是T0算法?T0算法如何运作? 据记者了解,当前多家券商已在其APP中推出T0算法服务,旨在通过智能化交易工具帮助投资者捕捉日内波动收益,执行“低买高卖”策略,帮助投资者降低持仓成本或增厚收益。 T0算法,全称“日内交易算法”,是一种基于量化模型的自动化交易工具。其核心逻辑是通过实时分析市场数据(如价格、成交量、盘口信息等),在极短时间内捕捉股票日内波动产生的价差,执行“低买高卖”操作,从而帮助投资者降低持仓成本或增厚收益。   具体来说,算法会设定一系列的规则和指标,当市场价

首页编辑器站点地图

本站内容在 CC BY-SA 4.0 协议下发布

Copyright © 2026 聚合阅读