中文资讯 掘金 AI Sun, 05 Jul 2026 正文 ok 612 words

MCP(Model Context Protocol)学习分享:从理论到实践

英文标题:MCP(Model Context Protocol)学习分享:从理论到实践

MCP是由Anthropic于2024年11月推出的通信协议,旨在统一大模型连接外部资源与工具的方式,被称为“AI界USB-C”。它通过Host、Client、Server三种角色分工,支持Resources和Tools两种能力,让模型安全访问文件、API等服务。开发者可通过.mcp.json快速配置,或使用官方SDK手写Server,大幅减少重复适配工作。该协议推动AI从Chatbot走向Agentic AI,为上下文工程提供标准化底座,对行业生态和开发者效率意义深远。
打开原文相关 5 · 机会 3
media3.2 KB media589 B media7.4 KB

中文

MCP(Model Context Protocol)学习分享:从理论到实践


一、MCP 是什么?

MCP 不是工具,不是应用,不是 API SDK,也不是一个产品——它是一个协议。

2024 年 11 月 25 日,Anthropic 公司推出了 MCP(Model Context Protocol),被誉为 "AI 界的 USB-C 接口协议" 。它的核心目标是:让任何一个 AI 模型,都能以统一的方式去访问外部资源和工具。

在 MCP 出现之前,想让大模型对接不同的数据源(数据库、API、文件系统、SaaS 服务等),开发者需要为每个模型、每个数据源分别写适配代码——这就是 RAG(检索增强生成)和 Function Calling 时代"零散适配"的痛点。MCP 的诞生,从根本上改变了这一局面。


二、MCP 的三大角色

MCP 的架构可以类比为电脑的 USB 生态,由三个核心部分组成:

┌──────────────────────────────────────────────┐ │ MCP Host(宿主) │ │ Claude Code / Cursor / Trae / Codex │ │ │ │ │ ┌───────┴───────┐ │ │ │ MCP Client │ │ │ │ (插件式配置) │ │ │ └───────┬───────┘ │ │ │ │ │ stdio / HTTP 通信 │ │ │ │ │ ┌────────────────┼────────────────┐ │ │ │ │ │ │ │ ┌──┴──┐ ┌───┴───┐ ┌───┴───┐ │ │ │文件 │ │ 网盘 │ │ 邮件 │ │ │ │Server│ │Server │ │Server │ │ │ └─────┘ └───────┘ └───────┘ │ │ MCP Servers(服务端) │ └──────────────────────────────────────────────┘

角色 说明 举例
MCP Host AI 应用程序宿主 Claude Code、Cursor、Trae
MCP Client 客户端,以插件形式配置 高德地图 client、Gmail client
MCP Server 提供上下文和工具的服务端 文件系统服务、数据库服务、飞书

工作流程:Host 通过 prompt 与大模型推理交互 → 大模型发现任务需要外部上下文 → 查看 Host 中配置了哪些 MCP Client → 选中对应的 Client 调用 → Client 通过标准协议与 Server 通信 → 返回结果给大模型生成最终回答。


三、核心价值:从 Chatbot 到 Agentic AI

MCP 最大的意义不在于"便利",而在于它从根本上重构了 AI 的应用架构,真正将 AI 从 Chatbot(聊天机器人) 推到了 Agentic AI(智能体 AI) 阶段。

MCP 为 Context Engineering(上下文工程)提供了标准化的通信底座,让大模型能够调用的上下文来源得到极大扩充。它统一了两大类能力:

类别 含义 例子
Resources(资源) 模型想知道的数据 数据库、API、文件、飞书文档、高德地图
Tools(工具) 模型能执行的操作 创建日历、发邮件、执行命令、远程控制

这些资源和工具,就是让大模型变得真正有用的上下文和能力。


四、实战:配置 MCP Server(以文件系统为例)

4.1 客户端配置 .mcp.json

在项目根目录下创建 .mcp.json,告诉 MCP Host 该项目需要哪些 MCP Server:

{ "mcpServers": { "filesystem": { "type": "stdio", "command": "npx", "args": [ "-y", "@modelcontextprotocol/server-filesystem", "/Users/liaojie/Desktop/workspace/lj-ai/ai/mcp/mcp-test" ] } } }

关键字段解读:

  • type: "stdio" — 通信方式为标准输入/输出流(另一种是 HTTP)
  • command: "npx" — 通过 npx 启动(无需全局安装)
  • args — 传递包名和允许访问的目录路径,实现安全沙箱 式的文件访问控制

当你用 Claude Code 打开这个项目时,它会自动加载这份配置,大模型就拥有了安全读写指定目录的能力。

4.2 手写一个 MCP Server

光会用还不够,我们来手写一个最简单的 MCP Server,理解底层原理。以下是 simple-read-mcp/server.js 的逐段解析:

javascript import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js"; import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"; import { z } from "zod"; import fs from 'fs/promises';

核心依赖:

包 作用
@modelcontextprotocol/sdk MCP 协议的官方 SDK,封装了通信细节
zod 数据验证库,用于声明工具的参数 schema(替代手写 JSON Schema)

javascript const server = new McpServer({ name: 'simple-read-mcp', version: '1.0.0' });

每个 MCP Server 需要有名称和版本号,这是协议规范的要求,方便 MCP Client 发现和识别。

javascript server.tool( "read_file",
"读取指定路径的本地文件内容",
{ path: z.string().describe("文件的绝对或相对路径")
}, async ({ path }) => {
try { const content = await fs.readFile(path, 'utf-8'); return { content: [{ type: "text", text: content }] }; } catch (err) { return { isError: true, content: [{ type: "text", text: 读取文件失败:${err.message} }] }; } } );

server.tool() 的四个参数:

  1. 工具名 — MCP Client 通过这个名字调用工具
  2. 描述 — LLM 根据这段描述理解工具的用途,判断何时应该使用它
  3. 参数 Schema — 用 Zod 定义,SDK 会自动转换为 JSON Schema 并进行校验
  4. 处理函数 — 实际执行业务逻辑,返回 { content: [...] } 格式的结果

javascript async function main() { const transport = new StdioServerTransport();
await server.connect(transport);
console.error("MCP read_file 服务已启动(stdio模式)"); }

main().catch(console.error);

StdioServerTransport 是 MCP 最基础的传输方式。通信通过**标准输入/输出流(stdin/stdout)**进行,无需监听网络端口,天然安全隔离。


五、通信全链路:一次 MCP 调用的完整过程

把整个流程串起来看,就是下面这条完整的链路:

用户输入 Prompt │ ▼ Claude Code(MCP Host) │ ▼ LLM 推理分析 → 判断需要读取文件 │ ▼ 选中 "read_file" MCP Client │ ▼ StdioServerTransport → stdin 发送请求 │ ▼ simple-read-mcp Server 收到请求 │ ▼ Zod 校验参数 → 执行 fs.readFile() │ ▼ 返回结果 → stdout │ ▼ StdioServerTransport 接收 → Claude Code │ ▼ LLM 基于文件内容生成最终回答 → 返回给用户

整个过程对开发者来说是透明的——SDK 封装了 stdio 通信、JSON-RPC 协议、错误处理等底层细节,开发者只需要关注注册什么工具、工具做什么事。


六、总结

要点 说明
本质 MCP 是 LLM 与外部世界的通信协议,类比 USB-C
三大角色 Host(宿主应用)→ Client(配置层)→ Server(能力提供方)
两种能力 Resources(数据资源)+ Tools(可执行工具)
配置方式 .mcp.json 声明式配置,即插即用
开发三要素 Schema 声明工具签名 + Zod 校验参数 + 协议 SDK 处理通信
传输方式 stdio(标准流)或 HTTP,stdio 模式天然安全隔离
核心价值 统一标准,终结零散适配;推动 AI 从 Chatbot 进入 Agentic AI 时代

一句话记住 MCP: 如果你把大模型比作一台电脑的 CPU,那 MCP 就是主板上的 USB-C 接口 ——不管插上去的是 U 盘、键盘、网卡还是显示器,都能即插即用,无需写驱动。

English / 原文

MCP(Model Context Protocol)学习分享:从理论到实践


一、MCP 是什么?

MCP 不是工具,不是应用,不是 API SDK,也不是一个产品——它是一个协议。

2024 年 11 月 25 日,Anthropic 公司推出了 MCP(Model Context Protocol),被誉为 "AI 界的 USB-C 接口协议" 。它的核心目标是:让任何一个 AI 模型,都能以统一的方式去访问外部资源和工具。

在 MCP 出现之前,想让大模型对接不同的数据源(数据库、API、文件系统、SaaS 服务等),开发者需要为每个模型、每个数据源分别写适配代码——这就是 RAG(检索增强生成)和 Function Calling 时代"零散适配"的痛点。MCP 的诞生,从根本上改变了这一局面。


二、MCP 的三大角色

MCP 的架构可以类比为电脑的 USB 生态,由三个核心部分组成:

┌──────────────────────────────────────────────┐
│                 MCP Host(宿主)               │
│     Claude Code / Cursor / Trae / Codex       │
│                      │                        │
│              ┌───────┴───────┐                │
│              │  MCP Client   │                │
│              │  (插件式配置)  │                │
│              └───────┬───────┘                │
│                      │                        │
│           stdio / HTTP 通信                   │
│                      │                        │
│     ┌────────────────┼────────────────┐       │
│     │                │                │       │
│  ┌──┴──┐        ┌───┴───┐       ┌───┴───┐   │
│  │文件  │        │ 网盘   │       │ 邮件  │   │
│  │Server│        │Server │       │Server │   │
│  └─────┘        └───────┘       └───────┘   │
│           MCP Servers(服务端)               │
└──────────────────────────────────────────────┘
角色 说明 举例
MCP Host AI 应用程序宿主 Claude Code、Cursor、Trae
MCP Client 客户端,以插件形式配置 高德地图 client、Gmail client
MCP Server 提供上下文和工具的服务端 文件系统服务、数据库服务、飞书

工作流程 :Host 通过 prompt 与大模型推理交互 → 大模型发现任务需要外部上下文 → 查看 Host 中配置了哪些 MCP Client → 选中对应的 Client 调用 → Client 通过标准协议与 Server 通信 → 返回结果给大模型生成最终回答。


三、核心价值:从 Chatbot 到 Agentic AI

MCP 最大的意义不在于"便利",而在于它从根本上重构了 AI 的应用架构 ,真正将 AI 从 Chatbot(聊天机器人) 推到了 Agentic AI(智能体 AI) 阶段。

MCP 为 Context Engineering(上下文工程)提供了标准化的通信底座 ,让大模型能够调用的上下文来源得到极大扩充。它统一了两大类能力:

类别 含义 例子
Resources(资源) 模型想知道的数据 数据库、API、文件、飞书文档、高德地图
Tools(工具) 模型能执行的操作 创建日历、发邮件、执行命令、远程控制

这些资源和工具,就是让大模型变得真正有用的上下文和能力 。


四、实战:配置 MCP Server(以文件系统为例)

4.1 客户端配置 .mcp.json

在项目根目录下创建 .mcp.json,告诉 MCP Host 该项目需要哪些 MCP Server:

{
    "mcpServers": {
        "filesystem": {
            "type": "stdio",
            "command": "npx",
            "args": [
                "-y",
                "@modelcontextprotocol/server-filesystem",
                "/Users/liaojie/Desktop/workspace/lj-ai/ai/mcp/mcp-test"
            ]
        }
    }
}

关键字段解读:

  • type: "stdio" — 通信方式为标准输入/输出流(另一种是 HTTP)
  • command: "npx" — 通过 npx 启动(无需全局安装)
  • args — 传递包名和允许访问的目录路径,实现安全沙箱 式的文件访问控制

当你用 Claude Code 打开这个项目时,它会自动加载这份配置,大模型就拥有了安全读写指定目录的能力。

4.2 手写一个 MCP Server

光会用还不够,我们来手写一个最简单的 MCP Server,理解底层原理。以下是 simple-read-mcp/server.js 的逐段解析:

import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
import { z } from "zod";
import fs from 'fs/promises';

核心依赖:

包 作用
@modelcontextprotocol/sdk MCP 协议的官方 SDK,封装了通信细节
zod 数据验证库,用于声明工具的参数 schema(替代手写 JSON Schema)
const server = new McpServer({
  name: 'simple-read-mcp',
  version: '1.0.0'
});

每个 MCP Server 需要有名称 和版本号 ,这是协议规范的要求,方便 MCP Client 发现和识别。

server.tool(
  "read_file",                              
  "读取指定路径的本地文件内容",               
  {
    path: z.string().describe("文件的绝对或相对路径")  
  },
  async ({ path }) => {                     
    try {
      const content = await fs.readFile(path, 'utf-8');
      return {
        content: [{ type: "text", text: content }]
      };
    } catch (err) {
      return {
        isError: true,
        content: [{ type: "text", text: `读取文件失败:${err.message}` }]
      };
    }
  }
);

server.tool() 的四个参数:

  1. 工具名 — MCP Client 通过这个名字调用工具
  2. 描述 — LLM 根据这段描述理解工具的用途,判断何时应该使用它
  3. 参数 Schema — 用 Zod 定义,SDK 会自动转换为 JSON Schema 并进行校验
  4. 处理函数 — 实际执行业务逻辑,返回 { content: [...] } 格式的结果
async function main() {
  const transport = new StdioServerTransport();  
  await server.connect(transport);               
  console.error("MCP read_file 服务已启动(stdio模式)");
}

main().catch(console.error);

StdioServerTransport 是 MCP 最基础的传输方式。通信通过**标准输入/输出流(stdin/stdout)**进行,无需监听网络端口,天然安全隔离。


五、通信全链路:一次 MCP 调用的完整过程

把整个流程串起来看,就是下面这条完整的链路:

用户输入 Prompt
    │
    ▼
Claude Code(MCP Host)
    │
    ▼
LLM 推理分析 → 判断需要读取文件
    │
    ▼
选中 "read_file" MCP Client
    │
    ▼
StdioServerTransport → stdin 发送请求
    │
    ▼
simple-read-mcp Server 收到请求
    │
    ▼
Zod 校验参数 → 执行 fs.readFile()
    │
    ▼
返回结果 → stdout
    │
    ▼
StdioServerTransport 接收 → Claude Code
    │
    ▼
LLM 基于文件内容生成最终回答 → 返回给用户

整个过程对开发者来说是透明 的——SDK 封装了 stdio 通信、JSON-RPC 协议、错误处理等底层细节,开发者只需要关注注册什么工具、工具做什么事 。


六、总结

要点 说明
本质 MCP 是 LLM 与外部世界的通信协议 ,类比 USB-C
三大角色 Host(宿主应用)→ Client(配置层)→ Server(能力提供方)
两种能力 Resources(数据资源)+ Tools(可执行工具)
配置方式 .mcp.json 声明式配置,即插即用
开发三要素 Schema 声明工具签名 + Zod 校验参数 + 协议 SDK 处理通信
传输方式 stdio(标准流)或 HTTP,stdio 模式天然安全隔离
核心价值 统一标准,终结零散适配;推动 AI 从 Chatbot 进入 Agentic AI 时代

一句话记住 MCP: 如果你把大模型比作一台电脑的 CPU,那 MCP 就是主板上的 USB-C 接口 ——不管插上去的是 U 盘、键盘、网卡还是显示器,都能即插即用,无需写驱动。