news 2026/10/6 8:02:03

MCP知识梳理(1)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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.11Anthropic发布MCP协议,开源规范与SDK
2025年上半年Cursor、VS Code、Zed等开发工具率先接入
2025年下半年OpenAI的Agents SDK和Responses API也支持MCP
2025.12MCP捐赠给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,这是一种轻量级的远程过程调用协议。消息格式如下:

// 请求{"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
{"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 配置结构

{"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 配置示例

{"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)

{"mcpServers":{"fetch":{"command":"uvx","args":["mcp-server-fetch"]}}}

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

{"mcpServers":{"fetch":{"command":"npx","args":["-y","mcp-fetch-server"]}}}

方式三:通过Docker

{"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 高级配置

{"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实现)。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/6 8:01:38

高频必考!N皇后:两个常数搞定二维棋盘,n=8为什么恰好92个解?

我们在一维数组上玩回溯——子集、组合、全排列。今天第一次登上二维棋盘:N皇后。 它难不在代码(核心只有20行),而在两件事: 怎么把二维搜索降到一维——88棋盘有64个格子,朴素枚举是C(64,8) ≈ 44亿种&…

作者头像 李华
网站建设 2026/10/6 8:01:36

Redis命令:HSCAN

Redis HSCAN 命令详细教程 HSCAN 以增量游标方式遍历 Hash 的字段与值,是遍历大 Hash 的标准手段。它每次调用只返回一部分数据,不会像 HGETALL 那样一次性阻塞服务端。 资料合集:https://pan.quark.cn/s/10e98d308913、https://pan.quark.…

作者头像 李华
网站建设 2026/10/6 8:00:20

GEO 优化是什么?它和 SEO 到底有什么区别

GEO(Generative Engine Optimization,生成式引擎优化)指的是让你的内容被豆包、DeepSeek、元宝、Kimi 这类 AI 引擎在生成答案时抓取并引用;它和 SEO 最大的区别是:SEO 争的是搜索结果页上的排名位置,GEO 争…

作者头像 李华
网站建设 2026/10/6 7:57:37

如何给游戏里的DLSS换版本:DLSS Swapper版本切换3步上手指南

如何给游戏里的DLSS换版本:DLSS Swapper版本切换3步上手指南 【免费下载链接】dlss-swapper 项目地址: https://gitcode.com/GitHub_Trending/dl/dlss-swapper 《赛博朋克2077》给你装的DLSS 3.5用着不顺眼,或者游戏还停留在DLSS 2.5而新版早已释…

作者头像 李华
网站建设 2026/10/6 7:56:53

android 多渠道打包

有这样的需求, 应用上架googlePlay权限审批没通过,需要分为两个版本,normal版本升级方案为原有的升级方案, 调用安装新版本apk需要 android.permission.REQUEST_INSTALL_PACKAGES 这个权限。 而Google Play升级不能有这个权限&…

作者头像 李华