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

什么是mcp

MCP 是个啥玩意儿
写给连命令行都没摸过的人
2026 年 7 月
一、先说个事儿
现在大伙儿聊 AI,离不开俩词:大模型 和 Agent。
大模型就是 ChatGPT、DeepSeek 这类能聊天的。Agent 是上回讲过的那个能自己动手干活的。
但有个事大伙儿可能没注意——
AI 跑在人家公司的服务器上。你电脑里的文件它摸不着,你电脑装的软件它也用不了。
就好比你养了一只特别聪明的狗,关在邻居家。
你隔着墙跟它说话它能听懂,但你让它帮你拿个拖鞋,那不行——它够不着你家的拖鞋。
MCP 就是给这只狗开了个传送门,让它能跑到你家来。
开玩笑的。其实 MCP 没那么玄乎,就是个「说话规矩」。
MCP 全称 Model Context Protocol,翻译过来就是「模型上下文协议」。光听名字你肯定一脸懵,没关系,拆开看:
•Model = AI 模型,就是那只狗
•Context = 它能摸到的东西
•Protocol = 说话的规矩
所以 MCP 合起来就是:AI 跟外部工具之间说话的标准格式。
二、它是怎么个运作法
就三个角色
记住三个词就行,别整复杂了:
角色 干嘛的 说人话
客户端 (Client) 你用的那个 AI 软件 雇主
服务器 (Server) 你写的小工具,跑在你电脑上 员工
协议 (Protocol) 它俩聊天的 JSON 格式 工作流程
举个最常见的场景
你在 Claude Desktop 里打了句「现在几点」。
Claude 脑子一转:你这电脑里装了个叫 mcp-demo 的小工具,里面有个 get_current_time 的功能,正好能用。
然后它就朝那个小工具喊了一嗓子——用 JSON 格式:「调一下 get_current_time」。
小工具跑了一下,拿到当前时间,15:57,再用 JSON 格式把结果传回去。
Claude 看了结果,跟你说:「下午 3 点 57。」
全程你啥也没干,连命令行都没碰。
三、那它跟别的有啥不一样
你可能听过 LangChain、Function Calling、Skills、Plugin 这些词,跟 MCP 啥关系?
一句话版本:
MCP 是「标准」,别的是「方言」。
按 MCP 标准写出来的小工具,谁家的 AI 都能用。
按 LangChain 写的,只能在 LangChain 里用。
按 OpenAI Function Calling 写的,只能 OpenAI 的模型用。
MCP 这玩意儿是 Anthropic(就是做 Claude 那家)2024 年推出来的,2025 年开始火。火的原因就一个:它简单、开放、不绑死任何一家。
一个直观点的类比
你电脑上的 USB 口知道吧。鼠标、键盘、U 盘、硬盘,不管哪家做的,插上就能用。
为啥?因为大家都按 USB 标准做。
MCP 就是 AI 这边的 USB 标准。
我写一个小工具,按 MCP 规范来,你用 Claude Desktop 能用,你同事用 Cursor 也能用,以后哪个新 AI 出来支持 MCP,照样能用。
这就是标准的价值——一次开发,到处能用。
四、看看代码长啥样
讲再多不如看代码。下面这个就是完整的 server.js(加了注释方便你读):
// server.js
import { McpServer } from ‘@modelcontextprotocol/sdk/server/mcp.js’;
import { StdioServerTransport } from ‘@modelcontextprotocol/sdk/server/stdio.js’;
import { z } from ‘zod’;

const server = new McpServer({ name: ‘mcp-demo’, version: ‘1.0.0’ });

// 注册一个工具,叫 get_current_time
server.tool(
‘get_current_time’, // 工具名字
‘获取当前的本地时间’, // 工具说明,AI 看到这句决定要不要用
{
timezone: z.string().optional().describe(‘时区,比如 Asia/Shanghai’),
},
async ({ timezone }) => { // 具体干活的函数
const now = new Date();
return {
content: [{ type: ‘text’, text: now.toLocaleString(‘zh-CN’) }],
};
}
);

// 启动,开等客户端连
const transport = new StdioServerTransport();
await server.connect(transport);
完事。是不是没你想的那么复杂?
核心就那个 server.tool() 调用。四样东西:工具名、说明、参数、长啥样、咋干活的。AI 客户端连上来问「你这儿有啥」,你注册啥它就能用啥。
五、咱们这个 demo 装了啥
文件都在这:
C:\Users\35118\.qclaw\workspace-agent-4895da3d\mcp-demo\
文件 干嘛的
server.js MCP server 主体,被客户端拉起来跑的小进程
client-test.js 本地测试脚本,验证 server 能不能用
package.json 依赖声明
README.md 英文版使用说明
server.js 里挂了三个工具:

  1. get_current_time - 拿时间
    你说「现在几点了」,AI 调一下这个工具,拿到时间告诉你。
    没啥好说的,new Date() 就完事了。
  2. calculate - 算数
    你说「算一下 (1+2)*3 的平方」,AI 拼成 (1+2)3**2 传进来,返回 27。
    if (!/1
    $/.test(expression)) {
    return { isError: true, content: [{ type: ‘text’, text: ‘包含不允许的字符’ }] };
    }
    上面这段很重要,是个安全过滤。
    为啥要过滤?因为 execute 是个危险函数,不限制的话用户随便传process.exit() 这种东西,你电脑直接关机。
    所以只允许数字、运算符、括号、小数点。生产环境建议用 mathjs 这种正经库。
  3. search_files - 搜文件
    你说「找一下我电脑里所有 .docx」,AI 调这个,dir 传你电脑路径,keyword 传 docx,返回文件列表。
    代码里有个细节:
    if (e.name === ‘node_modules’ || e.name === ‘.git’) continue;
    跳过 node_modules 和 .git。
    为啥?这俩目录里文件巨多,跑全搜索能卡半小时。不跳过的话,AI 客户端直接超时。
    任何做文件搜索的工具都得有这种过滤,不然后期会出大事。
    六、怎么把它跑起来
    五步,复制粘贴就行。
    第一步:装 Node.js
    按 Win+R,输入 cmd,回车,弹个黑窗口。
    输入:
    node --version
    能看到类似 v22.16.0 这种版本号就说明你装过了。
    没装?去 nodejs.org 官网,下 LTS 版,双击安装,一路 Next,中间啥都别改。
    第二步:装依赖
    继续在黑窗口里:
    cd C:\Users\35118\.qclaw\workspace-agent-4895da3d\mcp-demo
    npm install
    等几秒,看到 added 93 packages 就完事了。
    看不懂这步在干啥?没事,你不需要懂,照着敲就行。npm 就是帮你在后台装一堆别人写好的代码包。
    第三步:先测一下能不能跑
    在同一个黑窗口里:
    node client-test.js
    出来一段输出,长这样:
    === 1. 列出所有工具 ===
  • get_current_time: 获取当前的本地时间…
  • calculate: 计算一个数学表达式…
  • search_files: 在指定目录里递归搜索文件名…

=== 2. 调用 get_current_time ===
2026/07/02 15:54:53

=== 3. 调用 calculate ===
(1+2)*3**2 + 100/4 = 52

=== 4. 调用 search_files ===
找到 4 个文件:…

✅ 测试完成
看到这些就说明 server 没毛病。
没看到?截个图发给我看看是啥错。
第四步:接到 Claude Desktop
Claude Desktop 是 Anthropic 出的桌面 AI,原生支持 MCP。
1.打开 Claude Desktop
2.左上角点三横线(菜单)→ Settings → Developer 标签
3.点 Edit Config,会弹出一个叫 claude_desktop_config.json 的文件
4.把文件内容替换成下面这堆:
{
‘mcpServers’: {
‘demo’: {
‘command’: ‘node’,
‘args’: [‘C:\\Users\\35118\\.qclaw\\workspace-agent-4895da3d\\mcp-demo\\server.js’]
}
}
}
5.保存,完全退出 Claude Desktop(注意是完全退出,不是关窗口)
6.重新打开,左下角应该有个🔨小图标
接上之后你跟 Claude 说「现在几点」,它会自动调你写的工具拿时间。
第五步:接到 Cursor
Cursor 是带 AI 的代码编辑器(跟 VS Code 长得像),也支持 MCP。
File → Preferences → Cursor Settings → MCP → 点 Add new global MCP server,把上面那段 JSON 贴进去,保存。
重启 Cursor,搞定。
七、想加新工具咋办
这是最常做的事。模板就这五行,照着改:
server.tool(
‘工具名’,
‘工具说人话(AI 看到这句决定要不要用)’,
{
参数1: z.string().describe(‘参数1干啥用的’),
},
async ({ 参数1 }) => {
// 你的逻辑
return { content: [{ type: ‘text’, text: ‘返回给 AI 的内容’ }] };
}
);
举几个真能用的例子:
例 1:读一个 txt 文件
server.tool(
‘read_text_file’,
‘读一个文本文件’,
{ path: z.string().describe(‘文件的绝对路径’) },
async ({ path: filePath }) => {
const content = await fs.readFile(filePath, ‘utf-8’);
return { content: [{ type: ‘text’, text: content }] };
}
);
例 2:查个天气
server.tool(
‘get_weather’,
‘查某个城市的天气’,
{ city: z.string().describe(‘城市名,比如 上海’) },
async ({ city }) => {
const res = await fetch(`https://wttr.in/${city}?format=j1`);
const data = await res.json();
return { content: [{ type: ‘text’, text: JSON.stringify(data) }] };
}
);
例 3:跑一段 Python
server.tool(
‘run_python’,
‘跑一段 Python 代码,返回输出’,
{ code: z.string().describe(‘Python 代码’) },
async ({ code: pyCode }) => {
const { stdout } = await execAsync(`python -c ${JSON.stringify(pyCode)}`);
return { content: [{ type: ‘text’, text: stdout }] };
}
);
改完保存,重启客户端(注意是重启不是最小化),新工具就生效了。
八、能拿它干点啥
时间、计算、搜文件——单看没啥意思,组合起来就有点用了。
场景 1:写代码顺便自己跑测试
你说「写个快排,跑一下给我看结果」→ AI 写代码 → 调 run_python 跑 → 拿结果给你。
你电脑没装 Python 都行,因为工具用的是服务器上的 Python。
场景 2:聊代码
你说「这个项目里所有用到 User 实体的地方在哪?」→ AI 调 search_files + grep → 给你一个清单。
比你自己一个个翻快多了。
场景 3:自动发周报
你说「生成本周周报发到我邮箱」→ AI 拉 git log(用 git_log 工具)→ 调 send_email 工具发出去。
周一周五各跑一次,这辈子都不用写周报了。
场景 4:自动抓网页
你说「这篇 36 氪文章说了啥?总结 200 字」→ AI 调 fetch_url 抓页面 → 自己读 → 自己总结。
你天天看的那些号,都可以扔给 AI 先过一遍,挑你想看的。
场景 5:操作数据库
你说「上个月订单数多少?按地区分个组」→ AI 拼 SQL → 调 sql_query → 给你结果。
比开 Navicat 写 SQL 方便。
九、几个坑,新手必看
坑 1:在 server.js 里写 console.log
MCP server 跟客户端是用 stdio(标准输入输出)通信的。
你在 server.js 里写 console.log,输出会污染通信,整个 server 直接挂。
// ❌ 错的
console.log(‘server started’);

// ✅ 对的
console.error(‘server started’);
console.error 写到 stderr,不会污染协议。这是新手最容易犯的错,没有之一。
坑 2:路径变成 C:\C:\xxx 这种鬼东西
Windows 下用 new URL().pathname 拿本地路径,会拼出个 C:\C:\xxx 的东西。
解决办法:用 fileURLToPath:
import { fileURLToPath } from ‘node:url’;
const serverPath = fileURLToPath(new URL(‘./server.js’, import.meta.url));
坑 3:改完代码不重启
MCP server 不是热加载的。你改了代码必须完全退出客户端重开,最小化再打开没用。
尤其在 Windows 上,最小化和完全退出是两码事。
坑 4:eval 不做安全过滤
任何让用户传代码再执行的工具,都是定时炸弹。
必须做白名单过滤,或者用正经沙箱库(isolated-vm、quickjs 这些)。
别偷懒,偷懒就等着被攻击。
// ❌ 直接 eval,等着出事
const result = eval(userCode);

// ✅ 白名单过滤
if (!/2*$/.test(userCode)) {
return { isError: true, content: [{ type: ‘text’, text: ‘不允许的字符’ }] };
}
坑 5:忘了跳过 node_modules
上一章说过一遍了,再强调一次——做文件搜索、代码扫描这类工具,必须默认跳过 node_modules、.git、dist、build。
不然一个搜索跑半小时,AI 客户端超时,session 断了,体验极差。
const SKIP = new Set([‘node_modules’, ‘.git’, ‘dist’, ‘build’, ‘.next’]);
if (SKIP.has(e.name)) continue;
坑 6:一次返回太多内容
MCP 工具的返回内容会塞进 AI 的上下文窗口。
你一口气返回 10 万字,后面 AI 直接傻了——它"撑"不下了。
怎么办:
•长内容截断,最多返回前 5000 字
•返回的是路径让 AI 自己按需读
•返回结构化 JSON,让 AI 自己挑想要的字段
十、现在这玩意儿生态咋样
谁支持 MCP
客户端 支持没 说两句
Claude Desktop ✅ 原生支持 Anthropic 出的,体验最好
Cursor ✅ 支持 AI 代码编辑器,写代码用
Cline / Continue ✅ 支持 VS Code 里的 AI 插件
Zed ✅ 支持 性能怪物的代码编辑器
Windsurf ✅ 支持 Codeium 出的 IDE
ChatGPT Desktop ❌ 没支持 OpenAI 还在观望
现成能用的 server
npm 上搜 mcp-server 一堆,都不用自己写:
•@modelcontextprotocol/server-filesystem - 官方文件系统工具
•@modelcontextprotocol/server-git - 操作 git 仓库
•@modelcontextprotocol/server-postgres - 调 Postgres
•@modelcontextprotocol/server-puppeteer - 浏览器自动化
•GitHub MCP Server - 操 Issues、PR
•Notion MCP Server - 操 Notion 文档
直接 npm install 装一下就能用。
国产 AI 这边呢
情况是:参差不齐。
有的在观望,有的偷偷支持了,还有的想自己搞一套另起炉灶。
我的判断是 MCP 赢面大——简单、开放、有 Claude 这种头部客户背书。
就跟当年 HTTP 干掉各种私有协议一样,标准永远赢。
所以别押注平台,押注标准。
十一、几句大实话
MCP 不是万能药
MCP 解决的是「AI 怎么调本地工具」的问题。它不解决:
•AI 模型本身是笨蛋的问题(垃圾模型挂 MCP 还是垃圾)
•你的工具写得烂的问题(垃圾工具挂 MCP 还是垃圾)
•权限安全问题(MCP 工具能操作你电脑,给 AI 装 MCP 等于给 AI 开门)
MCP 就是「让 AI 能用工具」,用得好不好,看的是工具本身。
别一上来就堆工具
新手最容易犯的错——一口气注册 20 个工具,结果 AI 不知道该用哪个。
建议你:
7.先做 1-2 个核心的,跑通
8.用着觉得缺啥再补一个
9.总数控制在 5-10 个以内
10.每个工具的说明(第二参数)写人话:啥时候用,一次说清
讲真,AI 看不懂「这是一个用于处理 X 业务场景的 Y 类工具」。
它看得懂「读一个 txt 文件」。就这么简单。
最后说一句
MCP 本质就是「给 AI 装手装脚的标准」。
写一个 server,能在所有支持 MCP 的客户端上用。
学 MCP,本质就是学怎么给 AI 做工具——
这事儿 2025 年开始有用了,以后会越来越有用。
看完就想跑一遍的话,照第五章抄一遍就行。
有坑不知道咋办,把报错截个图发出来——但愿我能答上来。


  1. \d\s+\-*/%().eE ↩︎

  2. \d\s+\-*/%().eE ↩︎

http://www.jsqmd.com/news/1113376/

相关文章:

  • ML生产化核心:构建可观测性与自愈力的MLOps监控闭环
  • Agent 正在接管企业云!云计算迎来底层重构
  • AH85101同步降压24V 输入、5~24V 可调 3A
  • Spring Boot 3 + Java 21 + Spring AI,这套开源框架把13家大模型接入了一个后台,代码生成器比Copilot还猛
  • EV代码签名证书特权改变了?
  • 排水管网监测布点主要原则
  • 鸿蒙原生 ArkTS 布局变化动画深度实战:从 transition 到 animateTo 的全场景解析
  • 技术实践 | qData 开源数据中台:元数据采集模块的设计与落地思路
  • uv 从入门到精通:Python 包管理的终极形态
  • 草稿自动保存——填到一半再也不怕丢
  • 暑假里中小学生学编程?这可能是他“开窍”的第一步
  • 上班族养车省心法:浏阳工业园区车辆保养选择逻辑
  • 智能视频解析:如何让AI像人类一样理解视频内容
  • 一文吃透 2026 网络安全六大变革趋势,覆盖攻防、合规、云安全全维度,企业安全布局精准参考指南
  • TEL 3D80-000142-V8射频自动匹配机
  • MBA学员必备AI工具:提升学习效率的实战指南
  • GLM-5、Kimi K2.5、MiniMax M2.7工程选型实战指南
  • Webshell攻防实战:从原理到企业级纵深防御体系构建
  • LemoPresentation-AI驱动的智能汇报与演示平台
  • AI辅助编程实战:用有限差分法求解悬臂梁挠度
  • AI模型版本与机器人性能的真相:识别技术谣言与事实边界
  • 现代化水库矩阵平台数字化建设:从数据治理到“四预“业务闭环
  • OpenClaw与微信生态集成实战指南
  • AI教材写作大揭秘!高效工具助力,轻松实现低查重教材编写!
  • 第一次装修别急着开工!这6件事没想清楚,后期很容易
  • [RoundedPolygon节点]原理解析与实际应用
  • 117、asyncio 异步编程(三):异步上下文管理器、异步迭代器、异步生成器
  • 第一章LangChain概述与环境准备(上)
  • 2026年番禺管理者演讲口才培训,究竟适合哪些人?
  • 虚幻引擎UE5.8 MCP设置指南