☰
👁️ 预览
取消
💾 保存
C
Claude
▾
C
Claude
claude@note.center
🔔
消息通知
🔄
账号切换
⚙️
设置
🚪
退出登录
Markdown
富文本
# AI 小白学 MCP 完全指南 > 从零开始,用最简单的方式理解 MCP(Model Context Protocol) --- ## 一、MCP 是什么? **MCP = Model Context Protocol(模型上下文协议)** 这是 Anthropic 公司在 2024 年发布的一个开放标准,被形象地称为 **"AI 的 USB-C 接口"**。 ### 用生活类比理解 想想以前的手机充电器: ``` 2010 年:诺基亚用圆口、三星用扁口、iPhone 用 30 针 → 换手机就得换线,烦死了 2024 年:全部统一成 USB-C → 一根线充所有设备 MCP 干的是同一件事: 没有 MCP 的时候: 用 Claude → 要专门写代码连接数据库 换 GPT → 重新写一遍 换其他 AI → 再写一遍 每个 AI 各搞一套,开发者累死 有了 MCP: 写一个 MCP 服务器 → 所有 AI 都能用 一次开发,到处用 ``` ### 三个核心概念 ``` ┌─────────────────────────────────────────────────┐ │ 宿主 (Host) │ │ Claude Code / Claude Desktop │ │ ↑ 用 MCP 协议沟通 ↓ │ ├─────────────────────────────────────────────────┤ │ MCP 客户端 (Client) │ │ 内嵌在宿主中 │ │ ↑ 一对一连接 ↓ │ ├─────────────────────────────────────────────────┤ │ MCP 服务器 (Server) │ │ 你写的小程序,提供工具(Tools)给 AI 用 │ │ │ │ 工具 1: 查金价 → 返回最新金价数据 │ │ 工具 2: 查天气 → 返回实时天气 │ │ 工具 3: 查数据库 → 执行 SQL 返回结果 │ └─────────────────────────────────────────────────┘ ``` --- ## 二、为什么要用 MCP? ### 没有 MCP 之前 想让 AI 帮你查个金价: ``` 你: "帮我查查今天金价多少" Claude 的操作: 1. 打开搜索引擎 → 搜索"今日金价" 2. 打开三五个网页 → 从广告堆里找数字 3. 手动整理成表格 4. 返回给你 痛点: ❌ 慢(要搜网页、要解析) ❌ 不准(网页信息可能过期) ❌ 每次都要重复劳动 ❌ 离线就不能用 ``` ### 有了 MCP 之后 ``` 你: "帮我查查今天金价多少" Claude 的操作: 1. 调用 get_gold_price() 工具 2. 直接返回数据 优点: ✅ 快(1 毫秒,不用搜网页) ✅ 准(本地数据,实时更新) ✅ 省力(写一次管用一辈子) ✅ 离线也能查 ``` ### MCP 解决了什么问题 | 问题 | 以前 | 现在 | |------|------|------| | AI 获取实时数据 | 手动复制粘贴 | 工具直接调用 | | 接入不同 AI 平台 | 每种 AI 写一套代码 | 写一次 MCP 服务器就行 | | 数据访问方式 | 各写各的,没有标准 | 统一协议,即插即用 | | 扩展性 | 加个功能要改代码 | 加个工具就行 | --- ## 三、什么情况写 MCP?和 Skill 有什么区别? 这是最容易搞混的问题,我用一张表说清楚: ### 对比表格 | 对比项 | **Skill** | **MCP 服务器** | |--------|-----------|---------------| | **本质** | Claude 的操作说明书 | 一个独立运行的小程序 | | **做什么** | 告诉 Claude 怎么做某事 | 给 Claude 提供新能力 | | **存在形式** | `.md` 文件(纯文本) | Node.js/Python 程序 | | **运行方式** | Claude 读 Markdown 执行 | 独立进程运行,和 Claude 通信 | | **能做什么** | 搜网页、写文件、调命令 | 查数据库、调 API、访问本地文件 | | **类比** | 给员工的《操作手册》 | 给员工一套《新工具》 | | **适合场景** | 固定流程、多步骤任务 | 需要实时数据或操作外部系统 | ### 举个例子 **Skill 就像「黄金报告操作指南」:** ``` 第 1 步:打开浏览器搜金价 第 2 步:把数字填到表格里 第 3 步:打开画图软件画折线图 第 4 步:保存到网页 ``` **MCP 就像「金价查询机」:** ``` 按一下按钮 → 直接吐出金价数据 ``` ### 她俩可以配合使用 ✅ Skill 的步骤里可以调用 MCP 工具: ``` Skill 优化后: 第 1 步:调用 MCP get_gold_history() → 看历史价格 第 2 步:搜网页补今天最新价 第 3 步:更新数据库 + 画图 第 4 步:保存报告 ``` MCP 提供数据,Skill 编排流程,各司其职。 --- ## 四、实战:写一个 MCP 服务器 > 这是我们在这个项目里写的黄金价格 MCP 服务器,完整代码可以看 `/root/mcp-gold-server/index.js` ### 准备工作 ```bash # 创建项目目录 mkdir mcp-gold-server cd mcp-gold-server # 初始化项目 npm init -y # 安装 MCP SDK npm install @modelcontextprotocol/sdk ``` ### 核心代码解读 ```javascript // 1. 导入 MCP SDK import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js"; import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"; // 2. 创建 MCP 服务器实例 const server = new McpServer({ name: "gold-price-server", // 服务器名字 version: "1.0.0", // 版本号 }); // 3. 注册一个工具(Tool) // 告诉 AI:我有一个功能叫 get_gold_price,你可以随时调用 server.tool( "get_gold_price", // 工具名称(AI 调用时用的名字) "查询最新的实体黄金价格", // 工具描述(告诉 AI 这个工具干什么的) async () => { // 处理函数(AI 调用时执行的代码) const data = readDataFromFile(); // 你的业务逻辑 return { content: [{ type: "text", text: formatResult(data) }], }; } ); // 4. 注册带参数的工具 server.tool( "get_gold_history", "查询黄金价格历史记录", { days: z.number().optional() }, // 参数定义 async ({ days }) => { // 处理函数接收参数 // ... } ); // 5. 启动服务器(通过标准输入输出通信) const transport = new StdioServerTransport(); await server.connect(transport); ``` ### 关键概念 | 概念 | 说明 | 代码对应 | |------|------|---------| | **McpServer** | MCP 服务器主类 | `new McpServer({...})` | | **tool()** | 注册一个工具 | `server.tool(名称, 描述, 处理函数)` | | **StdioServerTransport** | 通信方式(标准输入输出) | `new StdioServerTransport()` | | **content** | 返回给 AI 的内容 | `content: [{ type: "text", text: "..." }]` | | **Zod 参数** | 参数类型定义 | `{ days: z.number() }` | ### 目前这个项目有 3 个工具 | 工具名 | 功能 | 怎么用 | |--------|------|--------| | `get_gold_price()` | 查最新金价 | 直接说"查金价" | | `get_gold_history(days)` | 查历史记录 | "最近金价走势" | | `compare_brand_prices()` | 品牌对比 | "哪个品牌金价最低" | --- ## 五、如何配置和调用 MCP ### 配置方式 在项目目录下创建 `.mcp.json` 文件: ```json { "gold-price-server": { "command": "node", "args": ["/root/mcp-gold-server/index.js"], "description": "查询黄金价格数据" } } ``` 配置后,MCP 服务器会自动被 Claude Code 识别和加载。 ### 调用方式 **方式 1:直接跟 Claude 说** ``` 你: "查金价" Claude: → 自动调用 get_gold_price() 工具 → 返回结果 ``` **方式 2:命令行测试** ```bash # 列出所有工具 printf '初始化消息\n列出工具消息\n' | node index.js # 调用具体工具 printf '初始化消息\n调用工具消息\n' | node index.js ``` **方式 3:在 Skill 里调用** Skill 的步骤里写明调用 MCP 工具,Claude 执行时自动使用。 --- ## 六、MCP vs Skill:什么时候用哪个? ### 一张决策图 ``` 你想让 AI 做什么? │ ▼ ┌─ 需要实时数据吗?──── 是 ──→ 写 MCP 服务器 │ (查金价、查天气、查数据库) │ └─ 需要多步流程吗?──── 是 ──→ 写 Skill (生成报告、批量处理、定时任务) │ ▼ 两个都要?── 同时用! Skill 编排流程 + MCP 提供数据 ``` ### 本项目的实践 ``` Skill(gold-price-report) ├── 第 1 步:调 MCP get_gold_price() ← 检查是否有今日数据 ├── 第 2 步:搜网页(补充最新价) ├── 第 3 步:调 MCP get_gold_history() ← 获取历史趋势 ├── 第 4 步:画趋势图 ├── 第 5 步:更新报告 → 网页 └── 第 6 步:通知你 ``` --- ## 七、总结 ``` MCP = 让 AI 调用外部工具的统一标准 三个词记住: 宿主 (Host) → 用 AI 的人 MCP 服务器 → 提供工具的小程序 Tool (工具) → 小程序的功能 两个对比: Skill = 操作手册(教 AI 怎么做) MCP = 工具箱(给 AI 现成的工具) 一个配合: Skill + MCP 一起用 → 又快又准 ``` ### 扩展阅读 - [MCP 官方网站](https://modelcontextprotocol.info/) - [MCP 规范文档](https://modelcontextprotocol.io/specification/latest) - [MCP GitHub](https://github.com/modelcontextprotocol) - 本项目的 MCP 服务器源码:`/root/mcp-gold-server/index.js` - 本项目的 Skill 定义:`/root/.claude/skills/gold-price-report.md`
预览
编辑内容后实时预览...