返回文章列表
行业动态

什么是MCP?MCP是怎么搭起来的?

AI喵
2025-11-08
3小时前
什么是MCP?MCP是怎么搭起来的?

MCP:让 AI 助手真正连上你的数据世界

MCP概念介绍

我最近一直在琢磨一个问题。

我用的 AI 助手,Claude 也好、ChatGPT 也罢,写代码、总结文章、头脑风暴,都做得挺好。但每当我想让它真正融入我的工作流,那种无力感就来了。

比如说,我想让它帮我整理 Google Calendar 里的会议,根据散落在 Notion 各处的会议纪要,生成一份周报初稿。如果周报里提到了某个项目,再自动去 GitHub 上拉取最新的进展。

办不到。

它知道世界上几乎所有的公开知识,却对"我"一无所知。我的日程、我的笔记、我的代码、我的文件,对它来说都像是在上锁的房间里。它能看到门,却没有钥匙。每个房间的锁还不一样。

说白了就是,我们有了一个超强的"大脑",但这个大脑被困在透明的玻璃盒子里。它无法感知,也无法行动。

Anthropic 显然也看到了这个问题。2024 年 11 月 25 日,他们开源了一个叫 Model Context Protocol 的东西,简称 MCP。

从那时到现在,不到一年时间,MCP 已经迭代了好几个版本。GitHub 星标数到了 3 万,OpenAI 在 2025 年也推出了官方支持。我花了挺长时间研究它,想搞清楚它到底解决了什么问题,又留下了哪些问题。

所谓 MCP,到底是个什么东西?

MCP 官方给自己的定位是:AI 应用的 USB-C 接口。

这个比喻我第一次看到就懂了。

想想 USB-C 出现之前。手机 Micro-USB,相机 Mini-USB,笔记本圆口,显示器 HDMI,移动硬盘方口。桌子上一团乱,每连一个新设备都得找半天线。

USB-C 出现之后,一个接口搞定一切。充电、传数据、连显示器,都行。它成功的关键不是技术多颠覆,而是提供了一个开放的标准,大家都愿意遵守。

AI 应用现在就是这个状态。想连 Google Calendar?写一套对接代码。想连 Notion?再写一套。想连公司数据库?又是一套复杂的定制开发。每个新的数据源都是独立项目,难搞,也难扩展。

MCP 想做的就是 AI 时代的 USB-C。

它不是具体应用,也不是模型,而是一套协议,一个开放标准。目标很简单:为 AI 模型和外部世界之间,提供标准化的连接方式。

以后 Notion、Slack,或者你公司的内部数据库,只要提供一个符合 MCP 规范的"插座",任何支持 MCP 的 AI 应用就能直接插上,对话、交换数据、调用功能。开发者不用再为每个应用写一套定制的转接头。

想法简单,但力量很大。

MCP对比传统方式

有 MCP 和没 MCP,差别到底在哪?

很多人第一次听说 MCP,会觉得这不就是让 AI 能调用 API 吗?有什么稀奇的?

我一开始也这么想。但后来发现,关键不在于技术多新,而在于使用场景完全不一样

没有 MCP 的世界,你用的是网页版 ChatGPT 或者 Claude。你可以问它问题,让它写代码,帮你润色文案。但如果你说"帮我整理一下桌面上那个 Excel 文件",它只能告诉你怎么做,没法帮你做。你的文件、你的数据库、你的日历,对它来说都是不存在的。

这不是技术做不到,而是设计上就不让它做。网页版 AI 就像一个咨询顾问,你问它建议,它给你方案,但不会帮你执行。这样设计是有原因的:安全、简单、可控。

有 MCP 的世界,你用的是 Claude Desktop 或者 VS Code 这类桌面应用。你在配置文件里告诉它:"你可以访问我的文件系统"、"你可以连接我的数据库"。然后你说"帮我整理一下桌面上那个 Excel",它真的会去读文件、分析数据、生成报告。

这个差异看起来很小,但本质上是从对话到操作的跨越

前者是你的顾问,后者是你的助理。顾问只需要懂业务,助理还得有权限、能动手、会背锅。

这个跨越有代价。安全风险变大了,配置变复杂了,出错的可能性也变高了。你得自己判断:我真的需要一个能动手的助理吗?还是一个能对话的顾问就够了?

对大多数人来说,网页版 AI 已经够用。只有当你需要 AI 代替你操作的时候,MCP 才有意义。

MCP 能在网页版 ChatGPT 里用吗?

不能,而且短期内也不会。

这不是技术限制,而是产品定位的根本差异

网页版 ChatGPT 的定位是对话沙箱。你在浏览器里打开一个网页,输入文字,得到回复。整个过程被浏览器的安全机制严格限制:不能访问你的文件系统,不能连接你的本地数据库,不能执行系统命令。这些限制不是 bug,而是 feature。它保证了你可以放心地把 ChatGPT 的链接分享给任何人,不用担心安全问题。

MCP 的定位是系统级集成。它需要读写你的文件,连接你的数据库,执行你的命令。这些操作必须在你的电脑上运行,必须有明确的权限管理,必须能处理各种异常情况。这就是为什么 MCP 只能在桌面应用里用:Claude Desktop、VS Code、Cursor 这些。

这是两个不同的产品哲学

网页版像搜索引擎,你输入查询,它返回结果,无状态,无副作用,安全隔离。

桌面版像操作系统,你安装程序,授予权限,它可以访问你的数据,执行你的操作,有状态,有副作用,需要信任。

所以当你看到有人说"MCP 让 AI 更强大了",要知道这个强大是有边界的。它不是让所有 AI 都变强,而是让特定场景下的桌面 AI 应用变强。

网页版 AI 依然是大多数人的首选,因为它简单、安全、开箱即用。MCP 是给那些愿意折腾、需要深度集成的人准备的。

它实际上是怎么工作的?

实现方式其实不复杂,经典的客户端-服务器架构。

MCP 服务器就是那些数据源或工具的代理。Google Drive 可以通过 MCP 服务器把文件操作暴露出来,Slack 可以暴露频道消息和用户状态,你公司的 Postgres 数据库也行。Anthropic 官方已经提供了不少预构建的服务器,Google Drive、Slack、GitHub、Git、Postgres,甚至还有个 Puppeteer 服务器,能让 AI 直接控制浏览器。

MCP 客户端就是 AI 应用,聊天机器人也好、AI 智能体也罢。它通过 MCP 协议向服务器发请求,比如"帮我找一下上周五那个叫'项目复盘'的文档",或者"帮我把这个仓库的 main 分支拉下来"。

以前的 AI 只会纸上谈兵,现在它不光能出谋划策,还能直接干活。

Zed、Replit、Codeium、Sourcegraph 这些开发工具都在积极支持 MCP。它们很清楚,未来的 AI 编程助手不能只是代码补全工具,必须能和整个开发环境无缝交互。

一路走来:从想法到生态

协议成不成功,不看设计多精妙,看能不能真正解决问题,能不能凝聚社区,能不能持续演进。

MCP 从 2024 年 11 月发布到现在,我看着它一步步成长起来。不是那种扔出来就不管的玩具项目。

安全性是关键一步


2025 年 6 月 18 日那次更新,核心就是安全。

AI 应用能连接的个人数据和公司资产越来越多,权限管理就成了最要命的问题。你肯定不希望一个原本只访问你个人日历的 AI,因为配置错误或者被恶意利用,把公司数据库删了。

这次更新做了个关键决定:把 MCP 服务器归类为 OAuth Resource Servers。技术性很强,但思路很清晰,就是把现代网络应用中最成熟的那套身份验证和授权体系引进来。

同时,他们还强制要求客户端必须实现 **Resource Indicators (RFC 8707)**。这个东西可能有点陌生,但它的作用非常重要。我来打个比方:

,你的 AI 助手手里有一把"万能钥匙"(Access Token),这把钥匙理论上能打开你授权过的所有门,比如你的 Notion 仓库和你的 GitHub 仓库。这其实很危险,因为如果有人偷了这把钥匙,他就能为所欲为。

而 Resource Indicators 就像是给这把钥匙加了一个"指向性"。当 AI 助手想访问 Notion 时,它出示的钥匙上会明确标明:"我这次只想开 Notion 的门"。这样一来,即便这把钥匙被截获,攻击者也无法用它去开 GitHub 的门。它把一个宽泛的授权,变成了一次次的、目标明确的、最小化的授权。

这个更新,不仅仅是加了几个功能,它标志着 MCP 从一个"新奇的想法"变成了一个"可以被严肃对待的、具备工业级安全水准的协议"。

生态得让大家能找到彼此

安全问题解决了,下一步是生态怎么繁荣起来。我做了个很棒的 MCP 服务器,别人怎么知道?我想开发 AI 应用,去哪找数据源?

社区在努力解决这个问题。现在已经有好几个 MCP 服务器目录网站了,MCP Server Hub、awesome-mcp-servers 这些,就像应用商店或黄页,开发者可以把服务器注册上去。

生态现状呢?截至 2025 年 10 月,awesome-mcp-servers 仓库统计的服务器超过 100 个。但如果你真的去看这些服务器,会发现大部分还是 demo 级别,能在生产环境用的不多。这是早期项目的正常状态,需要时间沉淀。

Claude Desktop、VS Code、Cursor 这些桌面应用都支持 MCP。OpenAI 在 2025 年初发布 Agents SDK 的时候也官方支持了 MCP。

生态在慢慢起来,但离成熟还有距离。

深入技术:MCP 到底是怎么搭起来的?

聊了这么多概念和愿景,现在说说技术层面怎么实现的。

三个角色的分工

MCP三层架构

MCP 采用"主机-客户端-服务器"三层架构。听起来有点绕,但逻辑很清晰。

**MCP 主机(Host)**就是我们使用的 AI 应用本身,Claude Desktop、VS Code 或者你自己开发的 AI 助手。主机负责协调一切,像项目经理一样管理着多个客户端实例,决定谁能连接、谁有什么权限、用户的授权请求怎么处理。

**MCP 客户端(Client)**每个对应一个服务器连接。主机会为每个要连接的服务器创建一个客户端实例。AI 应用要同时连接 Google Drive 和 Slack,主机就创建两个客户端,每个客户端维护独立的、有状态的会话。客户端负责协商能力、路由消息、管理订阅,同时确保不同服务器之间的安全隔离。

**MCP 服务器(Server)**提供具体能力的程序。可以是本地电脑上的进程,也可以是远程服务。每个服务器专注于自己的领域,通过 MCP 协议暴露资源、工具和提示词。

这种设计巧妙的地方,一是隔离性,服务器之间互相看不到,只能看到主机给的信息。你的 Slack 服务器不会知道你在 GitHub 服务器上做了什么,保护隐私和安全。二是可组合性,你可以随意添加或移除服务器,不影响其他部分。像乐高积木,每块都独立,但可以组合出无限可能。

两层协议:数据层和传输层

MCP协议分层

MCP 的协议设计分为两层,这让它既灵活又标准化。

数据层是内层,定义了"说什么"。它基于 JSON-RPC 2.0,这是一个成熟的远程过程调用协议。数据层规定了生命周期管理(连接建立、能力协商、断开连接)、核心原语(工具、资源、提示词)以及通知机制。

连接建立的过程:客户端发送一个 initialize 请求,声明自己支持哪些能力。服务器回复,说明它能提供什么。双方达成共识后,客户端发送一个 initialized 通知,会话正式开始。之后,客户端可以调用 tools/list 发现可用工具,用 tools/call 执行工具,服务器也可以主动发送 notifications/tools/list_changed 通知客户端工具列表更新了。

传输层是外层,定义了"怎么说"。MCP 支持两种传输方式:

  • STDIO 传输:通过标准输入输出流通信,适合本地进程。这种方式性能最好,没有网络开销,但只能在同一台机器上使用。
  • Streamable HTTP 传输:通过 HTTP POST 发送消息,可选地使用 Server-Sent Events 实现流式能力。这种方式支持远程通信,可以用标准的 HTTP 认证(Bearer Token、API Key 等),MCP 推荐使用 OAuth 获取认证令牌。

这种分层设计的好处是,无论用哪种传输方式,数据层的消息格式都是一样的。你可以先用 STDIO 在本地开发调试,然后切换到 HTTP 部署到生产环境,代码几乎不用改。

核心原语:MCP 的"乐高积木"

MCP核心原语

MCP 定义了几种核心原语,它们是构建 AI 能力的基本单元。

服务器端原语

  • 工具(Tools):可执行的函数,AI 可以调用它们来执行操作。比如 search_files、send_email、query_database。每个工具都有名称、描述和输入参数的 JSON Schema,让 AI 知道什么时候用、怎么用。
  • 资源(Resources):类似文件的数据,AI 可以读取它们获取上下文。比如文件内容、API 响应、数据库记录。资源有 URI 标识,可以被订阅,当内容变化时服务器会通知客户端。
  • 提示词(Prompts):预写好的模板,帮助用户完成特定任务。比如"分析这段代码的性能问题"、"根据这些数据生成周报"。提示词可以有参数,让它们更灵活。

客户端端原语

  • 采样(Sampling):服务器可以请求客户端调用语言模型。这让服务器开发者不用自己集成 LLM SDK,保持模型无关性。
  • 征询(Elicitation):服务器可以向用户请求额外信息或确认。比如"这个操作会删除文件,确定继续吗?"
  • 日志(Logging):服务器可以向客户端发送日志消息,方便调试和监控。

这些原语的设计非常克制。MCP 没有试图定义所有可能的功能,而是提供最小化的、可组合的基础能力。复杂的功能通过组合这些原语来实现。

能力协商:说清楚我能做什么

MCP 有一个很重要的机制叫"能力协商"。在连接建立时,客户端和服务器会互相声明自己支持哪些功能。

比如,服务器可能声明:

{  "tools": {"listChanged": true},  "resources": {"subscribe": true}}

这表示它支持工具功能,而而且当工具列表变化时会发送通知;它也支持资源功能,而而且资源可以被订阅。

客户端可能声明:

{  "sampling": {},  "elicitation": {}}

这表示它支持采样和征询功能。

双方只能使用对方声明支持的功能。如果服务器没有声明支持资源订阅,客户端就不会尝试订阅。这种显式的能力声明,让协议可以平滑地演进——新功能可以逐步添加,老的实现不会因为不认识新功能而崩溃。

动手实践:5 分钟搭一个天气服务器

理论说了这么多,不如看看实际怎么做。我们来搭一个简单的天气 MCP 服务器。

用 Python 的话,MCP SDK 提供了一个 FastMCP 类,让开发变得超级简单。你只需要写几行代码:

from mcp.server.fastmcp import FastMCPmcp = FastMCP("weather")@mcp.tool()async def get_forecast(latitude: float, longitude: float) -> str:    """获取某个位置的天气预报        Args:        latitude: 纬度        longitude: 经度    """    # 调用天气 API,获取数据    # 格式化并返回结果    return "未来三天晴转多云,气温 20-25°C"mcp.run(transport='stdio')

就这样,一个 MCP 服务器就搭好了。FastMCP 会自动根据你的函数签名和文档字符串生成工具定义,处理 JSON-RPC 消息,管理连接生命周期。

然后在 Claude Desktop 的配置文件中添加:

{  "mcpServers": {    "weather": {      "command": "python",      "args": ["weather.py"]    }  }}

重启 Claude Desktop,你的天气工具就能用了。

这就是 MCP 的魅力所在:服务器端的开发被刻意设计得极其简单。复杂的协议细节、能力协商、消息路由,这些都由 SDK 和主机应用处理了。你只需要专注于实现业务逻辑,暴露有用的工具。

用 AI 来开发 MCP:元循环的魔力

更有意思的是,你可以用 AI 来帮你开发 MCP 服务器。

Anthropic 在文档中明确鼓励这一点。你可以把 MCP 的规范文档、SDK 文档、甚至你要对接的第三方 API 文档,一起喂给 Claude,让它帮你生成 MCP 服务器的代码。

很多项目的文档现在都提供 llms.txt 文件,这是专门为 LLM 优化过的纯文本文档。你可以直接把这些文档给 Claude,它就能理解 API 的用法,然后生成符合 MCP 规范的服务器代码。

这形成了一个有趣的循环:你用 AI 来开发工具,这些工具又让 AI 变得更强大。而而且,正如前面提到的,Anthropic 团队还用 Claude 来优化 MCP 工具的实现和描述,让 Claude 自己用起来更顺手。

这不是简单的"AI 写代码",而是"AI 参与设计 AI 的能力边界"。未来,可能会有越来越多这样的元循环出现:AI 帮助人类扩展 AI 的能力,人类就负责设定方向和边界,确保这种扩展是有益的、可控的。

MCP 与 Agent 的关系:不要混为一谈

很多人把 MCP 和 Agent 联系在一起,觉得有了 MCP,Agent 就变强大了。

这个逻辑不全对。

MCP 解决的是 Agent 的哪个问题

我们先看 Agent 要完成一个任务,需要什么能力:

  1. 理解意图: 用户说"帮我整理文件",到底想干什么?
  2. 规划步骤: 先读文件,再分类,还是先分类,再读文件?
  3. 执行操作: 真的去读文件、移动文件、重命名文件

MCP 只解决了第三个问题

理解意图和规划步骤,依然靠 LLM 本身。而这恋恋是最难的部分。

你可以给 Agent 配备 100 个工具,但如果它不知道什么时候用哪个工具,这些工具就是摆设。甚至会反过来增加错误率 —— 从 10 个工具里选错的概率,变成从 100 个工具里选错。

打个比方。你给一个新手司机一辆超跑,他不会开得更好,只会更容易出事。超跑的问题不在于性能不够,而在于司机的技术不够。

Agent 的可靠性问题

当前 Agent 的核心问题不是"没有工具",而是"不知道什么时候用什么工具"。

根据一些测试,即使是最先进的模型,在复杂的多工具场景下,任务完成率也只有 10-20%。这不是 MCP 的问题,这是 LLM 的问题。

MCP 让这个问题更严重了。工具越多,选择越多,出错概率越大。

MCP 真正有价值的场景

MCP 的价值不在于"让 Agent 更智能",而在于"让开发者更省事"。

对开发者来说:不用为每个数据源写集成代码,不用为每个 AI 应用重复开发,这是实实在在的价值。

但对最终用户来说,他们感知不到这个价值。他们只关心"任务完成了没有",而不关心 AI 是通过什么协议连接工具的。

所以当你看到有人说"MCP 让 Agent 变强大了",要知道这个说法不全面。

MCP 让 Agent 能做的事情变多了,但不代表 Agent 能把事情做对

MCP 与 Function Calling:不是替代,是补充

很多人第一次看到 MCP,都会问同一个问题:"这不就是 function calling 吗?"

这个问题问得很好,因为表面上看,它们确实很像——都是让 AI 调用外部函数,都用 JSON Schema 定义参数,都返回结构化数据。但如果你深入看,会发现它们解决的其实是不同层面的问题。

Function Calling:模型能力

Function calling 是 LLM 的一种能力。它让模型能够识别"用户想做什么",然后生成符合特定格式的函数调用请求。这是模型训练出来的能力,就像它能写代码、能总结文章一样。

当你用 OpenAI 或 Anthropic 的 API 时,你会在请求中定义可用的工具列表,模型分析用户意图后,决定是否调用工具、调用哪个工具、传什么参数。模型返回的是一个"工具调用意图",至于这个工具实际在哪、怎么执行、谁有权限执行,API 并不关心。这些都是你的应用代码要处理的事情。

MCP:连接标准

MCP 就是一个 连接协议。它不关心模型怎么决定调用工具,它关心的是:工具定义怎么传给模型?工具执行结果怎么返回?谁来管理这些连接?权限怎么控制?

说白了,function calling 是"AI 的大脑",MCP 是"AI 的神经系统"。大脑决定要做什么,神经系统负责把信号传递到正确的地方,并把结果传回来。

一个具体的例子

假设你要让 AI 帮你查天气。

只用 Function Calling 的方式

  1. 你在代码里定义一个 get_weather 函数
  2. 把这个函数的定义(名称、描述、参数)传给 LLM API
  3. LLM 返回说要调用 get_weather(city="北京")
  4. 你的代码接收到这个返回,手动调用你的天气 API
  5. 把结果再传回 LLM
  6. LLM 基于结果生成回复

这个流程里,每一步的"胶水代码"都是你写的。如果你要接入 10 个不同的数据源,你就得写 10 套这样的代码。而而且,如果你想在不同的 AI 应用(比如 Claude Desktop 和 Cursor)里都用这些工具,你得为每个应用写一遍。

用 MCP 的方式

  1. 你写一个 MCP 服务器,暴露 get_weather 工具
  2. 在 Claude Desktop 配置文件里添加这个服务器
  3. Claude Desktop 启动时自动连接服务器,获取工具列表
  4. 用户提问时,Claude(通过 function calling 能力)决定调用工具
  5. Claude Desktop 自动通过 MCP 协议执行工具
  6. 结果自动返回给 Claude
  7. Claude 生成回复

MCP 帮你处理了步骤 3、5、6 的所有细节。而而且,同一个 MCP 服务器可以被任何支持 MCP 的应用使用,不用重复开发。

本质上的差异

从架构层面看:

  • Function Calling 是应用内的:工具定义、执行逻辑、结果处理,都在你的应用代码里。它是一个"纵向"的能力,从 LLM API 到你的业务逻辑。
  • MCP 是跨应用的:工具定义在服务器端,执行也在服务器端,应用只负责连接和调用。它是一个"横向"的标准,让不同的应用能共享同一套工具。

从职责分工看:

  • **Function Calling 关注"意图识别"**:让 LLM 理解用户想做什么,生成正确的函数调用。这是 AI 的智能部分。
  • **MCP 关注"能力管理"**:让工具可以被发现、被调用、被复用。这是工程的基础设施部分。

它们不是竞争关系,而是配合关系。Function calling 是 MCP 能够工作的前提——如果 LLM 不会 function calling,MCP 定义的工具就没法被调用。而 MCP 就让 function calling 的价值能够规模化——不用每个应用都重新实现一遍工具集成。

MCP 对 Agent 的实际价值:不是银弹

说了这么多 MCP 的技术细节,我们得冷静下来,问一个更根本的问题:MCP 到底给 AI Agent 带来了什么实质性的改变?

先说局限性。

局限一:并没有解决 Agent 的可靠性问题

MCP 让 Agent 能够连接更多数据源和工具,但这不意味着 Agent 就能更可靠地完成任务。LLM 的固有问题——幻觉、推理错误、上下文理解偏差——并不会因为有了 MCP 就消失。

实际上,工具越多,Agent 犯错的可能性可能还会增加。因为它需要在更大的"工具空间"里做选择,需要理解更复杂的工具描述,需要处理更多的工具调用结果。根据一些测试,即使是最先进的模型,在复杂的多工具场景下,任务完成率也只有 10-20%。

局限二:增加了安全风险的攻击面

MCP 服务器本质上是运行在你本地或远程的代码。如果一个恶意的 MCP 服务器被装载到你的 AI 应用里,它可以:

  • 通过工具描述注入恶意指令,影响 AI 的行为
  • 在工具执行时窃取或篡改数据
  • 利用 AI 的自主性执行你不想执行的操作

虽然 MCP 规范建议实现各种安全措施,但最终的安全保障还是取决于具体的实现和用户的警惕性。这和"下载运行第三方软件"本质上是同一类风险,只是 MCP 让这个过程变得更"无感"了。

局限三:标准化的代价

MCP 为了做到"通用",必然要做一些妥协。比如,工具的返回值只能是文本、图片或音频,不能是复杂的交互界面;工具调用是同步的(虽然异步支持在路线图上),不适合长时间运行的任务;工具之间不能直接通信,必须通过 Agent 中转。

这些限制在大多数场景下不是问题,但在某些特殊场景下,可能会限制你能做什么。这时候,你可能还是需要回到"定制开发"的老路上。

再说价值

说完局限,再说价值。

MCP 不是什么颠覆性的技术。它更像是一个基础设施升级,把原本需要每个应用各自实现的东西,抽象成了一个共享的标准。

对开发者的价值:降低重复劳动

这是最直接的价值。在 MCP 之前,每个 AI 应用都要自己实现工具集成。你想让你的 AI 助手连接文件系统?自己写代码。想连接数据库?再写一套。想连接公司内部系统?继续写。

MCP 的出现,让这个过程变成了写一次,到处用。一个文件系统 MCP 服务器,可以被 Claude Desktop、Cursor、你自己开发的 AI 应用同时使用。

但这个价值有前提:只有当生态足够丰富时,复用才有意义。现在的情况是,大部分 MCP 服务器还是 demo 级别,距离生产可用有距离。

对用户的价值:能力边界更清晰

MCP 让用户可以自主选择给 AI 装配什么能力。你可以给 Claude Desktop 装上文件系统访问、数据库查询等各种能力,也可以选择不装。这让 AI 从一个黑盒变成了一个可配置的工具箱。

但这也带来了新的问题:选择的负担转移给了用户。普通用户需要理解每个 MCP 服务器是干什么的,有什么风险,是否值得信任。这个门槛不低。

对安全的价值:提供了权限管理的基础

MCP 的架构设计,为权限管理提供了一个自然的边界:服务器隔离、能力声明、传输层认证。

但这些只是基础设施,真正的权限管理还需要应用层和用户层的配合。MCP 协议本身并不强制任何权限策略,它只是让实现这些策略变得更容易。

上下文管理:AI 的"记忆力"挑战

聊到这里,我想深入说说一个容易被忽略但极其关键的问题:上下文管理

你可能听说过,AI 模型有"上下文窗口"这个概念。说白了就是,AI 一次能"看到"和"记住"的信息是有限的。Claude 现在能处理 20 万个 token,看起来很多,但在真实的工作场景中,这个限制来得比你想象的要快。

想象这样一个场景:你让 AI 助手帮你整理一个复杂项目的进展。它需要读取你的项目文档、浏览 Slack 上的讨论、查看 GitHub 的提交记录、检索相关的邮件。每一个数据源返回的信息都会占用上下文空间。如果一个 Slack 频道有上千条消息,全部加载进来,AI 的"大脑"很快就会被塞满,根本没有空间去思考和生成有价值的输出。

这就是为什么 MCP 工具的设计,不能简单地把传统 API 的调用方式照搬过来。

传统软件开发中,我们习惯了"先获取所有数据,再处理"的模式。比如,一个 list_contacts() 函数会返回通讯录里的所有联系人,然后程序逐个遍历、筛选。计算机内存很便宜,这么做没问题。

但对 AI 来说,这种方式就是灾难。它的"内存"(上下文窗口)是稀缺资源。如果你给它返回 1000 个联系人的完整信息,它得一个字一个字地"读"完,才能找到它想要的那个人。这不仅浪费了大量上下文空间,还会让 AI 在无关信息中迷失方向。

更好的做法是什么?提供一个 search_contacts(name="张三") 工具,只返回匹配的结果和一些相关上下文。或者更进一步,提供一个 message_contact(name="张三", message="...") 工具,直接完成"找到联系人并发消息"这个完整的任务流程。

这种思维转变,是 MCP 工具设计的核心。我们不是在为"程序"写接口,而是在为"智能体"设计工具。智能体的工作方式更像人类:我们不会为了找一个电话号码,先把整本通讯录从头到尾翻一遍。我们会直接翻到对应的首字母页,或者用搜索功能。

Anthropic 在最近的一篇工程博客中分享了他们在这方面的经验。他们发现,那些精心设计的、为 AI 优化过的工具,不仅让 AI 的表现更好,也让人类使用起来更直观。这不是巧合,而是因为好的工具设计本身就应该符合"认知的经济性"——无论是人还是 AI。

为 Agent 设计工具:一门新的手艺

工具设计原则

说到工具设计,这真的是一门新兴的手艺。

我们以前写代码,面对的是确定性系统。你调用一个函数 getWeather("NYC"),它每次都会用完全相同的方式返回纽约的天气。输入确定,输出确定,行为可预测。

但现在,我们要为非确定性的 AI Agent 设计工具。同样是"今天要不要带伞"这个问题,Agent 可能会调用天气工具,也可能从自己的知识库里回答,甚至可能先反问你"你在哪个城市"。它有自主性,也有不确定性。

这意味着我们需要重新思考软件设计。

选对工具,而不是堆砌工具

一个常见的误区是:工具越多越好。很多人看到 MCP 支持连接上百个工具,就觉得应该把所有能想到的功能都实现成工具。

其实不是这样的。工具太多,反而会让 AI 困惑。就像你走进一个工具房,墙上挂满了几百种工具,你可能一时半会儿都不知道该用哪个。

Anthropic 的建议是:先实现少数几个高影响力的、针对核心工作流的工具,然后根据实际效果再扩展

比如说,与其实现 list_userslist_eventscreate_event 三个独立的工具,不如直接实现一个 schedule_event 工具,它在内部自动查找可用时间、创建日程、通知相关人员。一个工具,解决一个完整的业务场景。

再比如,与其提供一个 read_logs 工具让 AI 读取所有日志,不如提供一个 search_logs 工具,只返回相关的日志行和一些上下文。这样既节省了上下文空间,也提高了效率。

工具的命名和分组也很重要。当你的 AI 应用可能接入几十个 MCP 服务器、上百个工具时,清晰的命名空间(namespace)能帮助 AI 快速定位。比如 asana_searchjira_search,一眼就能看出分别对应哪个服务。

返回有意义的信息,而不是技术细节

另一个关键点是:工具返回的内容,应该是 AI(和人类)能直接理解和使用的,而不是充满技术细节的原始数据。

举个例子,当你查询一个用户信息时,返回 uuid: "a3f2e8c9-4d1b-..." 这样的技术标识符,对 AI 来说几乎没有意义。它无法从这串随机字符中获得任何有用的信息。但如果你返回 user_id: 12345, name: "张三", role: "项目经理",AI 就能理解这个人是谁,在做什么。

Anthropic 在测试中发现,仅仅是把 UUID 替换成更有语义的标识符(比如从 0 开始的数字 ID 或者名称),就能显著减少 AI 的幻觉和错误。

同时,工具可以提供不同详细程度的返回格式。通过一个 response_format 参数,让 AI 自己选择是要"简洁"还是"详细"的信息。在大多数情况下,简洁的信息就够了,能节省大量的 token。只有在需要触发后续工具调用时,才获取详细信息。

用好的描述引导 AI

最后,也是最容易被忽视的一点:工具的描述和参数说明,本身就是在"教" AI 如何使用工具

想象你在给团队新人介绍一个内部工具。你不会只说"这是个查询工具"就完了,你会解释它的用途、参数的含义、常见的使用场景、甚至一些注意事项。

对 AI 也是一样的。清晰、明确、无歧义的工具描述,能大幅提升 AI 正确使用工具的概率。Anthropic 在 SWE-bench 评测中取得突破性成绩,很大一部分原因就是他们精心优化了工具描述,减少了错误率。

工具描述中应该包含:

  • 这个工具是干什么的(清晰的目的)
  • 参数的具体含义(避免模糊的命名,比如用 user_id 而不是 user)
  • 可能的使用场景和例子
  • 错误时的明确提示(而不是晦涩的错误码)

甚至,工具返回结果时,如果因为内容过长被截断了,也应该在返回信息中明确告诉 AI:"内容已截断,建议使用更精确的搜索条件"。这样 AI 就知道该调整策略,而不是傻傻地以为这就是全部结果。

用 AI 来优化 AI 的工具

这里有个很有意思的循环:Anthropic 团队用 Claude 来帮助他们优化给 Claude 用的工具。

他们的做法是:先建立一套评估系统,包含大量真实的任务场景。然后让 Claude 使用这些工具完成任务,记录下所有的交互过程、工具调用、成功和失败的案例。接着,把这些记录喂给 Claude Code,让它分析哪些工具设计得不够好,哪些描述不够清晰,然后自动优化工具的实现和文档。

结果非常惊人。经过 Claude 优化的工具,在测试集上的表现甚至超过了人类专家手写的版本。

这个过程本身就很有启发性:未来的软件开发,可能不再是"人类写代码给机器执行",而是"人类和 AI 协作,共同设计出对双方都友好的系统"。

即将到来的新篇章与更远的未来

MCP 的发展路线图清晰而激进。在 2024 年 11 月首次发布后,2025 年 3 月和 6 月分别进行了重大更新,引入了 OAuth 2.1 授权框架、可流式传输的 HTTP 协议等关键特性。接下来的几个重点方向,同样值得关注。

异步操作 (Asynchronous Operations) 是我最期待的一个。现在的 AI 交互大多是"一问一答"的同步模式。你发一个请求,然后等着它处理完,返回结果。但很多现实世界的任务是需要时间的,比如"帮我把这个项目跑一遍测试并部署到服务器上"。这个过程可能需要几分钟甚至更久。你总不能让聊天窗口一直卡在那里转圈圈。

异步操作的支持,意味着 AI 客户端可以发起一个长时间运行的任务,然后马上得到一个"任务已开始"的响应,之后可以通过轮询或者回调来获取最终结果。这让 AI 从一个"问答机器人"向一个真正的"任务执行代理"迈进了一大步。

此外,新版本还会在无状态和可扩展性方面做出改进,这对于构建能够服务大量用户的、高可用的 MCP 服务器至关重要。同时,通过 .well-known URLs 实现的服务器身份识别,也让服务的发现和验证变得更加自动化和可靠。

放眼更远的未来,MCP 的路线图同样激动人心。

  • 智能体支持的增强:让 AI Agent 能够更自主、更复杂地使用 MCP 工具。
  • 注册中心的正式化与验证工具:提供官方的服务器目录和合规性测试套件,确保生态的质量。
  • 多模态支持:这是真正的重头戏。未来的 MCP 将不仅仅支持文本数据,还会支持视频、音频等媒体类型和流式传输。,一个 AI 应用可以直接通过 MCP "看"一段监控视频,分析其中的异常,然后触发另一个工具发出警报。

这一切都指向一个共同的目标:打破数字世界的壁垒,让信息和能力像电流一样自由地流动到 AI 模型中。

实际使用:普通用户能感受到什么?

说了这么多技术细节,你可能会问:作为普通用户,MCP 到底给我带来了什么实际体验?

这是个很实在的问题。让我用几个真实的使用场景来说明。

场景一:会议安排不再来回拉扯

以前,你想约一个跨部门会议,需要:

  1. 在聊天工具问大家什么时候有空
  2. 打开日历逐个查看每个人的日程
  3. 找到共同空闲时间
  4. 创建会议邀请
  5. 再回到聊天工具通知大家

现在,有了 MCP,你只需对 AI 说一句:"帮我安排下周和市场部、产品部的会议,讨论 Q4 计划。"

AI 通过 MCP 连接了日历和聊天工具,自动查看所有相关人员的日程,找到大家都有空的时间,创建会议,并发送通知。整个过程不到一分钟。

场景二:数据分析不再需要懂 SQL

你是一个运营人员,老板突然问:"上个月广告的表现比二月怎么样?"

以前,你得找技术同事写查询语句,等他们有空,然后把数据导出来分析。

现在,你直接问 AI:"上个月广告的表现比二月怎么样?"AI 通过 MCP 连接数据库,自动查询数据,生成对比分析,甚至画出趋势图。

你不需要懂技术,只需要会提问

场景三:客户会议前的自动准备

你是销售,下午要和一个重要客户开会。

以前,你得打开 CRM 查看客户资料,翻邮件看最近的沟通记录,准备话术。

现在,AI 通过 MCP 连接 CRM 和邮件系统,在会议前半小时自动生成一份简报:客户的基本信息、最近的互动历史、未解决的问题、建议的谈话要点。

你只需要看一眼,就能胸有成竹地进入会议。

用户体验的本质变化

这些场景的共同点是什么?你不再需要在不同应用之间切换,不再需要手动复制粘贴,不再需要记住复杂的操作步骤。

MCP 让 AI 从"会聊天的机器人"变成了"能干活的助手"。它能看到你的数据,能操作你的工具,能理解你的意图,然后自动完成那些繁琐但重要的任务。

对于非技术用户来说,MCP 的存在是透明的。你不需要知道什么是协议、什么是服务器。你只需要知道:现在的 AI 助手,真的能帮你做事了。

这对我们意味着什么?

说了这么多,MCP 对我们普通开发者和用户到底有什么价值?

对于开发者来说,价值是显而易见的。它意味着更少的重复劳动和更低的复杂性。我们不用再花费大量时间去研究和对接每一个 SaaS 应用的私有 API。我们可以专注于创造独特的 AI 应用逻辑,然后像搭积木一样,把各种通过 MCP 暴露出来的能力组装起来。这将极大地加速 AI 原生应用的开发。

对于最终用户来说,我们终于有机会用上真正"强大"的 AI 应用了。我们的 AI 助手将不再是一个被阉割了感知和行动能力的"缸中之脑"。它会成为一个更懂你的个性化助理,一个能跨应用帮你完成复杂任务的超级工具。

从整理日历和笔记,到辅助设计和编码,再到连接企业内部的复杂数据系统,AI 的能力边界,将被 MCP 这样的协议无限拓宽。

当然,MCP 还是一个非常年轻的项目。它面临着巨大的挑战,最大的挑战就是如何说服足够多的公司和开发者加入这个生态,采纳这个标准。这需要时间,也需要持续的努力。

但最让我感到乐观的是,MCP 从第一天起,就选择了一条开源和社区驱动的道路。它的规范、SDK、参考实现,全部都在 GitHub 上开放。它有活跃的 Discord 社区,建立了正式的治理模型和规范增强提案(SEP)流程,任何人都可以参与其中,贡献代码、提出建议、维护 SDK。

这不再是 Anthropic 一家公司的事情,它正在成为一个属于整个 AI 社区的共同事业。

一年前,MCP 播下了一颗种子。今天,我们已经能看到它破土而出,而且长势喜人。它可能不会在一夜之间改变世界,但它所代表的方向——开放、标准、互联——无疑是 AI 走向未来的正确方向。


本文内容仅供参考,不构成任何专业建议。使用本文提供的信息时,请自行判断并承担相应风险。

分享文章
合作伙伴

本站所有广告均是第三方投放,详情请查询本站用户协议