MCP知识梳理(1)

作者:没有四次元口袋的蓝胖

日期:2026-10-05

标签:MCP协议, AI工具


MCP协议基础

2024年底Anthropic开源了MCP(Model Context Protocol),短短一年多就成了AI工具生态的事实标准。Claude Desktop、Cursor、VS Code、ChatGPT全都接入了它,GitHub上相关服务器已经超过6000个。面试中问到AI Agent、工具调用、大模型应用架构,MCP几乎绑绑会涉及。

这篇笔记聚焦MCP协议的基础知识------从它是什么、核心架构、三大原语,到常用的官方Server(Filesystem和Fetch),帮你建立对MCP的完整认知。

核心掌握:MCP是什么、Host/Client/Server三层架构、Tools/Resources/Prompts三大原语、JSON-RPC 2.0通信、stdio与HTTP传输、FileSystem与Fetch服务。


一、MCP是什么

1.1 一句话定义

MCP(Model Context Protocol)是一个开源的标准化协议,定义了AI应用如何与外部工具和数据源进行通信。

用一个类比:MCP就是AI世界的USB-C接口。在USB-C之前,每个手机品牌用自己的充电口;在MCP之前,每个AI应用要对接每个工具,都得写一套定制集成。MCP把这件事标准化了------任何MCP Client都能连任何MCP Server,不用写胶水代码。

1.2 解决了什么问题

假设你有5个AI应用、10个外部工具(数据库、GitHub、文件系统、Slack......):

复制代码
传统方式:5 × 10 = 50 个定制集成
MCP方式:5 个 Client + 10 个 Server = 15 个组件

这就是从 M×N 问题到 M+N 问题的转变。写一个MCP Server,所有支持MCP的AI应用都能用。

在传统模式下,OpenAI有Function Calling的格式,LangChain有自己的Tool抽象,Anthropic有Tool Use规范------同一个数据库要对接三个AI平台,就得写三套完全不同的集成代码。MCP的出现终结了这种混乱。

1.3 发展时间线

时间 事件
2024.11 Anthropic发布MCP协议,开源规范与SDK
2025年上半年 Cursor、VS Code、Zed等开发工具率先接入
2025年下半年 OpenAI的Agents SDK和Responses API也支持MCP
2025.12 MCP捐赠给Linux基金会(AAIF),成为中立治理的开放标准
2026年 生态爆发,公开MCP Server超过6000个,成为AI工具对接的事实标准

1.4 谁在用MCP

  • AI助手:Claude Desktop、ChatGPT
  • 开发工具:Cursor、VS Code、Zed、Windsurf、Continue.dev
  • Agent框架:LangChain、OpenAI Agents SDK
  • 企业场景:Block、Apollo等公司已将MCP集成到内部系统

二、核心架构:Host / Client / Server

MCP采用三层架构,理解这三个角色是理解整个协议的基础。

复制代码
┌─────────────────────────────────┐
│          Host(宿主)            │
│  如 Claude Desktop / Cursor     │
│                                 │
│  ┌──────────┐  ┌──────────┐    │
│  │MCP Client│  │MCP Client│    │
│  └────┬─────┘  └────┬─────┘    │
└───────┼──────────────┼─────────┘
        │              │
   JSON-RPC 2.0   JSON-RPC 2.0
        │              │
  ┌─────┴─────┐  ┌────┴──────┐
  │MCP Server │  │MCP Server │
  │ (文件系统) │  │ (GitHub)  │
  └───────────┘  └───────────┘

2.1 三个角色

角色 职责 举例
Host 包含LLM的AI应用,负责编排交互、管理Client实例 Claude Desktop、Cursor、VS Code
MCP Client 嵌入在Host内部,与MCP Server维持1:1连接,发送JSON-RPC请求 Host内部的协议模块
MCP Server 独立进程,对外暴露Tools/Resources/Prompts,不知道模型是谁 filesystem server、fetch server

几个关键点:

  • Host可以管理多个Client:Claude Desktop同时连接Filesystem Server和GitHub Server
  • 每个Client只连一个Server:Client和Server之间是1:1关系
  • Server是无感知的:Server不知道对面是Claude还是Cursor,只处理JSON-RPC请求

2.2 通信协议:JSON-RPC 2.0

所有Client与Server之间的通信都基于JSON-RPC 2.0,这是一种轻量级的远程过程调用协议。消息格式如下:

json 复制代码
// 请求
{
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "name": "read_file",
    "arguments": { "path": "/home/demo.txt" }
  },
  "id": 1
}

// 响应
{
  "jsonrpc": "2.0",
  "result": {
    "content": [
      { "type": "text", "text": "文件内容..." }
    ]
  },
  "id": 1
}

关键字段:

  • method:调用的方法名(如 tools/list、tools/call、resources/read)
  • params:方法参数
  • id:请求/响应关联ID,确保异步通信中能正确匹配

2.3 两种传输方式

传输方式 适用场景 特点
stdio 本地进程 Host启动Server子进程,通过标准输入/输出通信,无需网络端口,安全默认
Streamable HTTP 远程服务 Server暴露HTTP端点,支持多租户、云端部署、远程API

stdio的工作流程 :Host把Server作为一个子进程启动(类似 npx -y @modelcontextprotocol/server-filesystem),然后通过stdin发送JSON-RPC请求、通过stdout接收响应。整个过程不需要打开任何网络端口,安全性天然有保障。

注意:早期版本使用HTTP+SSE(Server-Sent Events),2025年11月规范已将其废弃,统一为Streamable HTTP。面试时别再说"SSE传输"了。

2.4 连接生命周期

一次完整的MCP交互流程:

复制代码
1. 初始化:Client发送 initialize 请求 → Server返回能力声明
2. 能力发现:Client发送 tools/list → Server返回可用工具列表
3. 工具调用:模型决定调用某工具 → Client发送 tools/call → Server执行并返回结果
4. 结果回传:Client将结果交给模型 → 模型生成最终回复

这个流程中,步骤2的动态发现是MCP的精髓------Client不需要提前知道Server有什么工具,运行时查询即可。


三、三大原语:Tools / Resources / Prompts

MCP Server对外暴露三种能力(称为primitives),理解它们是掌握MCP的核心。

3.1 Tools(工具)

可被模型调用的动作。有名称、描述、输入Schema,模型根据描述判断何时调用。

  • 类比:后端API的POST接口
  • 特点:可以有副作用(写文件、发消息、执行计算)
  • 示例:read_file、search、send_email
json 复制代码
{
  "name": "get_weather",
  "description": "获取指定城市的天气信息",
  "inputSchema": {
    "type": "object",
    "properties": {
      "city": { "type": "string", "description": "城市名称" }
    },
    "required": ["city"]
  }
}

模型的决策链:看到 description → 判断用户是否需要天气 → 构造参数调用 → 拿到结果 → 组织回答。所以 description 写得越清晰,模型调用的准确率越高。

3.2 Resources(资源)

只读数据源。模型可以拉取Resources作为上下文,但不能修改。

  • 类比:后端API的GET接口
  • 特点:通过URI标识(如 file:///config.json、db://users/123),无副作用
  • 示例:配置文件、数据库记录、API响应
  • 与Tools的区别:Resources是被动拉取的"数据",Tools是主动执行的"动作"

3.3 Prompts(提示模板)

可复用的提示词模板。封装与特定服务交互的最佳实践。

  • 类比:API的使用说明书 / 预设的对话工作流
  • 特点:接受参数,生成结构化的消息列表
  • 示例:代码审查模板、SQL查询引导模板、调试流程模板
  • 使用场景:当你的工具比较复杂时,Prompt可以教模型"怎么用效果最好"

3.4 三者对比

原语 读写 谁触发 类比 典型场景
Tools 可写 模型决定调用 POST接口 执行操作、计算、API调用
Resources 只读 模型/用户拉取 GET接口 读取文件、查询数据库
Prompts 只读 用户选择 API文档 预定义交互模板

四、基本使用:配置与启动MCP Server

4.1 配置文件位置

MCP Client(如Claude Desktop)通过JSON配置文件声明要连接的Server:

系统 配置文件路径
macOS ~/Library/Application Support/Claude/claude_desktop_config.json
Windows %APPDATA%\Claude\claude_desktop_config.json
Linux ~/.config/Claude/claude_desktop_config.json

4.2 配置结构

json 复制代码
{
  "mcpServers": {
    "server-name": {
      "command": "npx",
      "args": ["-y", "包名", "参数..."],
      "env": {
        "API_KEY": "xxx"
      }
    }
  }
}

关键字段说明:

  • command:启动Server的命令(npx、uvx、node、python、docker等)
  • args:命令参数,通常包含包名和业务参数
  • env:环境变量,常用于传递API Key等敏感信息

Cursor也支持项目级配置 :在项目根目录创建 .cursor/mcp.json,可以为不同项目配置不同的Server,提交到Git后团队共享。


五、FileSystem文件服务

让AI读写本地文件的MCP Server,是使用最广泛的官方Server之一。

5.1 配置示例

json 复制代码
{
  "mcpServers": {
    "filesystem": {
      "command": "npx",
      "args": [
        "-y",
        "@modelcontextprotocol/server-filesystem",
        "/Users/bluep/Documents",
        "/Users/bluep/Projects"
      ]
    }
  }
}

args中从第三个参数开始,每个都是允许访问的目录路径(白名单机制)。可以配多个,但务必只开放必要目录。

5.2 提供的Tools

工具名 功能
read_file 读取文件内容
write_file 写入文件
list_directory 列出目录内容
create_directory 创建目录
move_file 移动/重命名文件
search_files 按正则模式搜索文件
get_file_info 获取文件元信息(大小、修改时间等)

5.3 使用场景

  • 让AI分析本地代码项目结构,帮你写README
  • 读取配置文件并解释每个字段含义
  • 批量重命名或整理文件
  • 读取日志文件排查线上问题

5.4 安全注意点

  • 最小权限原则 :只开放必要目录,绝不要开放根目录 / 或 C:\
  • Server无法访问白名单之外的路径,这是代码层面的安全约束
  • 修改配置后需重启AI应用才能生效
  • 不要在开放目录中存放敏感文件(如 .env、密钥文件)

六、Fetch网页服务

让AI抓取网页内容的MCP Server,将HTML转换为Markdown格式,方便模型理解。

6.1 配置示例

方式一:通过uvx(推荐,Python)

json 复制代码
{
  "mcpServers": {
    "fetch": {
      "command": "uvx",
      "args": ["mcp-server-fetch"]
    }
  }
}

方式二:通过npx(Node.js)

json 复制代码
{
  "mcpServers": {
    "fetch": {
      "command": "npx",
      "args": ["-y", "mcp-fetch-server"]
    }
  }
}

方式三:通过Docker

json 复制代码
{
  "mcpServers": {
    "fetch": {
      "command": "docker",
      "args": ["run", "-i", "--rm", "mcp/fetch"]
    }
  }
}

6.2 提供的Tools

工具名 功能
fetch 抓取URL,HTML转Markdown返回

6.3 可选参数

参数 说明
url 必填,要抓取的网页地址
max_length 最大返回字符数(默认5000)
start_index 从第几个字符开始返回(支持分块读取大页面)
raw 是否返回原始HTML,不做Markdown转换

6.4 高级配置

json 复制代码
{
  "mcpServers": {
    "fetch": {
      "command": "uvx",
      "args": [
        "mcp-server-fetch",
        "--ignore-robots-txt",
        "--user-agent=MyBot/1.0",
        "--proxy-url=http://proxy:8080"
      ]
    }
  }
}
  • --ignore-robots-txt:忽略网站的robots.txt限制(谨慎使用)
  • --user-agent=xxx:自定义请求的User-Agent
  • --proxy-url=xxx:配置代理地址

6.5 使用场景

  • 让AI获取网页上的最新信息(新闻、文档、API说明)
  • 抓取技术博客内容做总结
  • 读取在线文档作为上下文
  • 获取GitHub Issue或PR的内容

🗺️ 思维导图速览

复制代码
MCP协议(Model Context Protocol)
├── 是什么
│   ├── Anthropic 2024.11开源的标准化协议
│   ├── AI世界的"USB-C接口"
│   └── 将M×N集成问题降为M+N
├── 三层架构
│   ├── Host:AI应用(Claude/Cursor/VS Code)
│   ├── Client:嵌入Host,维持JSON-RPC连接(1:1连Server)
│   └── Server:独立进程,暴露Tools/Resources/Prompts
├── 通信基础
│   ├── JSON-RPC 2.0协议(请求/响应/通知)
│   ├── stdio传输(本地子进程,安全默认)
│   └── Streamable HTTP传输(远程,多租户)
├── 三大原语
│   ├── Tools:可执行的动作(模型调用,可有副作用)
│   ├── Resources:只读数据(URI标识,被动拉取)
│   └── Prompts:可复用的提示模板(教模型用好工具)
├── 配置使用
│   ├── 配置文件:JSON格式,声明command/args/env
│   └── 支持全局配置与项目级配置
└── 常用Server
    ├── Filesystem:读写本地文件(白名单目录)
    └── Fetch:抓取网页内容(HTML→Markdown)

📝 写在最后

学习建议

  1. 先用起来:先配置Filesystem和Fetch两个官方Server,在Claude Desktop或Cursor里体验AI操作文件、抓取网页的感觉,建立直觉。
  2. 理解架构:重点理解三层架构和三大原语,这是面试考察的核心。能画出Host/Client/Server的关系图就差不多了。
  3. 动手配置:熟悉JSON配置文件的写法,搞清楚command、args、env各字段的含义,理解stdio传输的安全机制。
  4. 关注生态 :GitHub上 modelcontextprotocol/servers 仓库有大量官方和社区Server,看看别人怎么写的,比读文档有效。

面试高频问题速答

Q:什么是MCP?

MCP(Model Context Protocol)是Anthropic开源的标准化协议,定义了AI应用与外部工具/数据源的通信方式。它采用Host/Client/Server三层架构,基于JSON-RPC 2.0通信,通过Tools、Resources、Prompts三大原语暴露能力。核心价值是将M×N的集成问题简化为M+N,实现"一次开发,到处接入"。2025年底已捐赠给Linux基金会。

Q:MCP的通信协议是什么?

JSON-RPC 2.0。一种轻量级的远程过程调用协议,基于JSON格式。请求包含method、params、id三个核心字段。

Q:stdio和HTTP传输怎么选?

本地开发、单用户场景用stdio(简单、安全、无需网络端口)。远程服务、多租户、云端部署用Streamable HTTP。

Q:MCP的安全性如何保证?

①权限隔离:每个Server只暴露声明的能力,无法越权操作;②凭证隔离:API Key等敏感信息存在Server端的环境变量中,不会传给模型;③最小权限:如Filesystem Server只开放配置的目录白名单;④用户确认:模型调用工具前通常需要用户确认(取决于Host实现)。

相关推荐
xiwc2 小时前
我用 MCP + 多 Agent 搭了一条自动化内容发布流水线
人工智能·mcp
EatFan3 小时前
「失控AI智能体」首遭FTC立案:英伟达Agent安全体系落地,AI智能体合规设计如何前置
大数据·人工智能·安全·ai智能体·mcp·agent安全·ftc
EatFan4 小时前
MCP 从概念到落地:Java(Spring AI Alibaba)与 .NET 双栈接入实操对比
java·人工智能·后端·spring·.net·java后端·mcp
EatFan18 小时前
从“框架混战“到“运行时收敛“:2026 年 AI Agent 开发框架的三条路线之争
java·数据库·人工智能·多智能体·ai agent·mcp·agent 框架
诺伦1 天前
AI Agent编排实战:用四层架构搭建增长运营垂类Agent系统 | RiseClaw玄策
人工智能·ai agent·mcp·agent编排·增长运营
大连好光景1 天前
MCP协议与Function Calling的区别?
functioncalling·mcp
Patrick在香港1 天前
MCP 的 initialize 握手真的没了?67 行标准库实测 2026-07-28 规范
python·agent·claude·mcp·json-rpc
EatFan2 天前
AI Agent 进入工程化下半场:从多智能体编排走向治理、标准化与运行沙箱
人工智能·多智能体·ai agent·开源框架·mcp·agents.md
code2cat2 天前
【随笔】MCP缓存期限与共享范围:让Agent复用资料时记住边界
java·后端·缓存·ai agent·mcp