最近爆火的MCP到底是什么?AI Agent 能力扩展一次讲透!MCP 与 Skill 深度应用实践,解锁开发核心竞争力!一、为什么 MCP 突然火了

2025 年以来,行业里讨论 AI Agent 的声音越来越多,但真正让它从“演示 demo”走向“可落地工程”的关键,绕不开一个词:上下文。模型再强,如果拿不到外部系统的真实数据、调不动具体工具,Agent 就只能在对话里兜圈子。

过去大家在搭建 Agent 时,最常见的做法是给模型写一段又长又脆弱的工具说明,然后自己再维护一堆 Java、Python、Node.js 的桥接代码。模型换了、工具变了、系统多了,维护成本直线上升。MCP 的出现,本质上是要解决一个长期被忽略的问题:让大模型和外部世界之间有一条统一、开放、可复用的连接标准

所以 MCP 会火,并不是因为它又发明了什么神奇的模型能力,而是因为它把“Agent 调工具”这件事,从混乱的私有集成,变成了类似 USB 接口一样的标准协议。一个工具写好 Server,所有支持 MCP 的客户端都能直接接入。

如果你只记住一句话,那就是:MCP 是 AI Agent 世界的“USB-C 接口”,它让模型、应用和外部数据源之间可以即插即用。

二、MCP 到底是什么

MCP 全称是 Model Context Protocol,中文通常译为“模型上下文协议”。它由 Anthropic 在 2024 年底开源,目标很明确:标准化 AI 应用与外部数据源、工具之间的连接方式。

在 MCP 出现之前,一个典型的 Agent 架构会面临这样的问题:

  • 工具接入碎片化:同一套业务系统,给不同 Agent 平台接入时都要重新写一遍适配层。
  • 上下文拼装复杂:需要手动组织系统提示词、工具描述、执行结果,稍有不慎就超出上下文窗口。
  • 权限和边界模糊:工具直接暴露给模型,很难做到细粒度的权限控制和审计。

MCP 的价值在于,它把“模型如何发现工具”“模型如何调用工具”“工具如何返回结果”这三件事,都定义成了清晰的协议规范。模型、应用、数据系统各自实现自己的部分即可。

2.1 MCP 和 Function Calling 有什么区别

很多初次接触 MCP 的人会问:模型不是已经有 Function Calling 了吗,为什么还要 MCP?

简单来说,Function Calling 解决的是“模型能不能调用一个函数”,而 MCP 解决的是“这些函数如何被统一发现、描述、管理和复用”。前者主要是模型单次推理层面的能力,后者则是一套完整的工程协议,包含工具生命周期、能力协商、资源访问和客户端治理。

两者并不冲突。一个成熟的 Agent 系统,通常会用 MCP 来管理可用的外部能力,而在底层模型执行时再配合 Function Calling 完成具体调用。

三、MCP 的核心架构

理解 MCP 的关键,是搞清楚它定义的不同角色。MCP 把一次连接拆成三个角色和一个核心环节:

角色 作用 通俗理解
MCP Host 承载 AI 应用的宿主程序,如 Claude Desktop、IDE 插件 插座的“面板”
MCP Client 运行在 Host 里,负责与某个 Server 建立连接 插入插座的“插头”
MCP Server 真正暴露资源、工具和提示词的服务 提供能力的“外设”

MCP Server 可以向外暴露三类核心能力:

  1. Resources:可被读取的外部资源,比如文件、数据库记录、API 返回的数据。它的作用相当于给模型提供“只读上下文”。
  2. Tools:可以被模型调用的动作,比如查天气、发消息、创建工单。它相当于可执行的能力。
  3. Prompts:预定义的提示词模板,方便用户快速触发某一类交互流程。

在一次典型调用中,流程大致如下:

用户提问
  -> MCP Host 接收用户输入
  -> MCP Client 与 MCP Server 协商可用工具
  -> 模型理解用户意图并选择合适工具
  -> 通过 MCP Server 执行真实业务操作
  -> 将结果作为上下文返回给模型
  -> 模型生成最终回答

四、MCP 如何扩展 AI Agent 能力

MCP 对 Agent 的扩展,主要不是“让模型更强”,而是让 Agent 的边界更宽、连接更稳、协作更清晰。具体体现在四个维度。

4.1 从“单点工具”扩展到“能力生态”

过去 Agent 接入工具通常是项目一次性的工作,换一个平台就要重新对接。MCP 把工具变成可复用的服务后,开发者只要写一个 Server,就能同时被 Claude、IDE、自研应用等多个 Host 使用。

这种复用性让能力沉淀成为可能。公司内部可以逐步积累自己的 MCP Server 资产库,团队之间共享,而不需要每个人都去研究一遍系统 API。

4.2 让上下文组织更可控

Agent 最怕两件事:上下文不足导致瞎编,上下文爆炸导致成本失控。MCP 的 Resources 机制,允许模型按需获取局部数据,而不是在一开始就塞入所有信息。

例如一个代码仓库分析 Agent,不需要一开始把整个仓库读进上下文,而是通过 MCP Resource 按文件、按目录、按检索结果逐步获取。这样既能保证信息准确,也能控制 Token 消耗。

4.3 让权限和安全边界更清晰

在一个真正的企业环境里,不可能给 Agent 一个“无所不能”的工具集合。MCP Server 可以在服务端控制哪些工具暴露、哪些资源可读、哪些操作需要授权。模型只看到被允许的能力,这让权限治理变得有据可依。

4.4 让真实世界的动作变得可执行

MCP 不只能读取数据,还能触发动作。一个 Agent 可以通过 MCP 工具完成“在 GitHub 创建 Issue”“向数据库写入记录”“发送企业微信通知”等真实操作。这让 Agent 从“顾问型”走向“执行型”。

五、MCP 与 Skill:不是替代,而是互补

很多开发者同时关注到 MCP 和 Skill 两个概念,容易混淆。这里先明确一点:它们解决的是不同层级的问题

  • MCP 解决的是“模型如何连接外部系统”,核心是协议、工具、资源和传输。
  • Skill 解决的是“如何把一组能力、知识和流程打包成一个可复用的任务单元”,核心是任务模板、执行流程和领域知识。

你可以把 Skill 理解为一个更上层的抽象。一个 Skill 内部可能会调用多个 MCP Server 提供的工具,也可能直接编写自己的脚本逻辑。MCP 是底盘,Skill 是上层应用。

5.1 一个容易理解的工作流

假设你要构建一个“技术博客创作 Agent”,它的工作可以这样拆分:

  1. 通过 MCP Server 从语雀、Notion 或本地 Markdown 仓库读取资料。
  2. 通过 MCP Server 调用搜索工具,补充最新公开信息。
  3. 在 Skill 层定义“科技技术文写作模板”,规定文章结构、语气和排版规则。
  4. 最终通过另一个 MCP Server 把文章发布到 CSDN 或公司 CMS。

在这个过程中,MCP 负责“连接和调用”,Skill 负责“把一个复杂任务编排成可重复的执行流程”。两者配合,才是完整的高效 Agent 方案。

六、动手实践:搭建一个 MCP Server

下面用一个最小的 Python 示例,演示如何搭建一个 MCP Server。它只提供一个简单工具:根据城市名返回一句问候。把它跑起来,你就能在支持 MCP 的客户端里看到这个工具。

from mcp.server.fastmcp import FastMCP
启动一个名为 Greeting 的 MCP Server
mcp = FastMCP("Greeting")
@mcp.tool()
def greet(city: str) -> str:
"""根据地市名返回问候语"""
return f"你好,来自 {city} 的朋友!欢迎体验 MCP。"
if name == "main":
mcp.run()

上面这段代码中,FastMCP 帮我们隐藏了大量协议细节。实际运行后,Server 会通过标准输入输出或 SSE 方式等待客户端连接。对客户端来说,它看到的只是一个名为 greet 的工具,参数为 city

6.1 使用标准库构建更真实的示例

如果不想依赖 mcp 包,也可以直接使用官方底层的 Serverstdio_server 构建。下面示例暴露一个读取本地文件的 Resource。

import asyncio
from mcp.server import Server
from mcp.server.stdio import stdio_server
from mcp.types import Resource, Tool, TextContent, ReadResourceResult
server = Server("FileReader")
@server.list_resources()
async def list_resources():
return [
Resource(
uri="file:///tmp/readme.txt",
name="README",
description="读取 /tmp/readme.txt 的内容"
)
]
@server.read_resource()
async def read_resource(uri: str) -> ReadResourceResult:
content = ""
if uri == "file:///tmp/readme.txt":
with open("/tmp/readme.txt", "r") as f:
content = f.read()
return ReadResourceResult(
contents=[TextContent(type="text", text=content)]
)
async def main():
async with stdio_server() as (read_stream, write_stream):
await server.run(read_stream, write_stream, server.create_initialization_options())
if name == "main":
asyncio.run(main())

这个示例说明了一件事:MCP Server 的底层能力并不复杂,核心就是“把函数和资源封装成协议要求的数据结构”。当你需要接入复杂业务系统时,本质上也还是把这个事情做好。

七、MCP 深度应用实践中的关键问题

真正把 MCP 用起来之后,你会发现难点并不在协议本身,而在工程落地上。下面梳理几个实践经验。

7.1 工具描述的设计比工具实现更重要

模型是否选择正确工具,很大程度上取决于工具描述写得好不好。描述中需要说清楚工具做什么、参数代表什么、有什么限制,以及哪些情况下不要调用它。

一个差描述的例子:

发送消息

一个好的描述应该是:

向指定用户发送企业内部消息。该工具适合通知、提醒类短消息,不适合发送长篇公告。参数 user_id 必须为数字编号,content 长度不能超过 500 字。

7.2 控制工具数量,避免过度暴露

一个 MCP Server 暴露几百个工具,并不代表 Agent 就很强大。相反,过多工具会造成模型选择困难,增加错误率。

实践中的建议是:先暴露最小可用集合,再根据失败复盘逐步补充。优先提供高频、边界清晰、可验证的工具。

7.3 设计好错误返回结构

工具执行失败时,不要把一大堆异常堆栈直接丢给模型。尽量返回结构化的错误信息,包括:是否成功、失败原因、用户可以采取的行动。

{
  "ok": false,
  "error_code": "ORDER_NOT_FOUND",
  "message": "未找到订单 A10023,请确认订单编号是否正确。"
}

这样模型可以根据错误信息引导用户,而不是陷入无意义的重试。

7.4 把审计和可观测性纳入设计

企业级 Agent 一定要能回答:模型调用了哪些工具?通过谁授权?执行结果是什么?MCP Server 应该从一开始就记录调用日志,做超时控制,并为敏感操作增加人工确认环节。

八、为什么 MCP 是新的开发核心竞争力

很多人把 MCP 只是当作“又一个开源框架”来看,这其实低估了它的长期价值。MCP 的核心竞争力,不在于协议本身有多复杂,而在于它正在成为整个 AI 应用生态的事实标准。

对开发者的影响可以从三个角度看:

  • 能力沉淀:你写过的工具不再是一次性代码,而是可以长期复用的资产。
  • 职业机会:企业开始把 MCP 集成写进 JD,围绕 MCP 的工程需求在快速增长。
  • 架构理解:MCP 逼迫你去思考上下文边界、工具设计、权限模型,这些恰恰是 AI 工程的核心能力。

换句话说,会写业务代码的人很多,但能设计出清晰、可靠、可治理的 Agent 能力边界的人还很少。MCP 给了你一个相对标准化的学习路径。

九、总结

MCP 的本质,是让 AI Agent 与外部世界之间的连接从“私人定制”走向“标准化接口”。它通过统一 Server、Client、Resources、Tools、Prompts 等概念,解决了工具复用、上下文管理、权限治理等实际问题。

而 Skill 则是在 MCP 提供的连接能力之上,帮助你沉淀可重复的任务流程和领域经验。两者结合,构成了 Agent 落地的完整能力栈。

如果你正在学习 AI Agent,建议不要只停留在“调工具”的层面,而是认真理解 MCP 的架构思想和工程约束。把协议背后的上下文设计、工具治理和权限思维吃透,才是真正能在下一波 AI 应用竞争中站住脚的开发能力。

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐