MCP是什么?起什么作用?为什么又有人说放弃MCP?一篇文章搞清楚

5 阅读8分钟

1.几种场景介绍

在以前,设计师要在figma上辛苦的画出设计稿,然后再让程序员变成代码,才能看到产品,但现在有了MCP,ai就能读懂figma文件中的每一个设计细节,然后用极高的效率生成对应的前端代码,设计师的灵感能以前所未有的速度变成用户看得到的产品。

blender,3D建模的能力很强。但是不管是学习过程,还是建模的过程都是会花掉大量的时间,现在可以直接使用自然语言描述,然后就可以直接快速的得到一个建模结果。

游戏开发领域也是一样,使用MCP连接上unity游戏引擎,开发游戏的人可以直接使用自然语言来开发游戏。

总而言之,自然语言能够处理一切的时代,到来了!

2.什么是mcp?

MCP 本质上不是某个具体产品,而是一种协议标准,全称是 Model Context Protocol(模型上下文协议) ,是Anthropic在24年11月发布的一个协议。可以把它理解成:让大模型“标准化接入外部能力”的接口规范

可以类比:

  • HTTP:统一 Web 请求方式
  • SQL:统一数据库查询方式
  • MCP:统一“模型调用外部能力”的方式

核心架构并不复杂,可以拆成四个部分来看,

  • mcp cient: 例如claude code、cursor、trae、codebuddy等等
  • MCP协议,统一格式的通信协议
  • mcp server:对应的第三方服务的“翻译”服务,将来自mcp client的需求“翻译”成对应的第三方服务能够理解的操作
  • 目标的第三方服务:如figma、数据库、blender、unity等等等等

3.MCP的学习思路

你需要学习怎么从零构建一个MCP server,还要想“侦探”一样通过截获MCP server的输入输出,了解一个MCP server具体做到了什么程度。

其实叫MCP server是有一定误导性的,我理解应该叫成 MCP program 更加合适。

因为就是一个程序,符合MCP协议的一个程序。

每一个mcp server都是一个github仓库,都有一个readme文档。所以每一个人,都可以去开源和发布自己创造的MCP程序。

而MCP client端的MCP配置也很简单,一般都是一个json配置,其中的command、args、和transportType是精髓。

我们可以先看看别人写的MCP程序,目前有很多的MCP市场,例如,mcp.so、mcpmarket.com、smitherv.ai等等

目前基本都是使用python或者node来编写,启动的命令分别是uvx和npx

其中,uv其实就是python界的一个包管理工具,其中的uvx,可以用来直接启动python程序。所以自然需要我们先安装一下uv。可以直接去uv的github仓库,找到对应系统的安装命令,安装好之后,测试uvx是否可以使用。例如执行:

uvx pycowsay 'hello world'

说白了这个命令就是帮我们,一键安装需要的依赖并执行py程序

npx和uvx类似,只不过针对的是node.js程序

由于npx是node的一部分,所以我们直接安装node就可以。

4.那么一个MCPserver到底写了什么呢?用什么语言写的?怎么就满足了所谓的MCP协议呢?

以python举例

例如我们在一个/MCPServers目录下,创建一个XXX的 mcp 程序

uv init XXX

cd ./XXX

uv venv

source .venv/bin/activate

以上命令的作用不再说明,关键是接下来的这个步骤:安装mcp开发的必要依赖

uv add "mcp[cil]" httpx

然后就是编写py脚本

关键代码:

from mcp.server.fastmcp import FastMCP

mcp = FastMCP("XXX", log_level="ERROR") # 创建mcp服务对象

然后就是在函数头上加上mcp的装饰器,@mcp.tool(),这个装饰器的用途是把函数注册为tool,它会从函数的注释中,提取这个函数的用途、以及每个参数的含义,以便模型决定调用这个函数的时机

最后加上:

if __name__ = "__main__":
     mcp.run(transport='stdio')

这里的transport意思是,这个server和模型沟通的方式

这里指定为stdio,表示,沟通的方式是mcp server的输入和输出

到这里,mcp的一个server就做好了,但是其中的关键是mcp的库。

那么输入和输出,真的只能mcp client方才能看到吗,我们可不可以也看到呢?

也就是我们能否测试这个mcp的输入和输出呢?

既然这个MCP server是模型来调用的,那么我们可不可写一个测试脚本,来模拟mcp client调用的这个步骤,这样不就可以控制输入和查看输出了吗?

甚至将这个测试脚本,想办法放在调用链路的中间,每次调用都捕获MCP client的输入,捕获mcp server的输出,并写到一些文件中。

更甚至,只要确保了解了MCP server的调用所需要的数据格式之后,直接进入终端中先直接启动这个MCP server,或者说,运行这个程序,然后用你了解到的调用数据格式,自己构造“访问数据”。

5.那么这个时候,就有人要问了,以上不就是client和server两个程序之间使用mcp协议的进行通信而已吗?MCP client和模型是什么关系,目前来看,和模型并没有关系的样子呀?

确实,如果这样理解是十分正确的,如果类比HTTP,RPC等等通信协议,MCP的作用并没有什么不同。

如果仔细观察,MCP 协议主要是规定了两个部分的内容:

  • 1.每一个MCPserver有哪些函数(tool)可以用
  • 2.如何调用这些函数

总结起来,就是函数的注册和使用,所以确定没有规定任何和模型相关的交互方式。

市面上这么多,MCP client,Claude code、cline、cursor、trae、codex、codebuddy等等等等,他们的模型是怎么用上mcp server的呢?

实际上,不同的client和模型交互也确实有差异

例如:cline是用xml和模型通信

总之,回头看MCP的定义,模型上下文协议,各位感觉这个命名是否合适?

乍一眼看,以为是规定的和模型交互的协议,但是实际上,这个协议最多只能说是给模型服务的

和模型本身没有关系,只是和MCP client有关。

6.捋一捋时间线

2024.05.13 GPT-4o首次发布

2024.06.20 Claude 3.5 Sonnet首次发布

2024.11.25 MCP首次发布

2025.01.20 DeepSeek-R1首次发布

注意一个关键事实:MCP出现的时候,模型仍处于弱推理能力的时期。

所以,当进入到现下这个模型具有强推荐能力的时期,也开始出现反对MCP的声音。

例如:

1.Denis Yarats(Perplexity CTO)

这是最标志性的事件

  • 公司内部决策:

    • 放弃 MCP
    • 转向 API + CLI

影响:
这是第一个大厂级别“弃 MCP”案例

2.Garry Tan(Y Combinator CEO)

他的态度非常直接(甚至有点狠):

  • 评价 MCP: “就是垃圾”

3.然后是现象级的agent新产品,OpenClaw

  • 从一开始就不用 MCP

  • 采用:

    • Skills system + CLI

说明:
新一代 agent 框架,已经绕开 MCP

原因大概就是:

  • MCP 复杂度 > 实际收益,为了调用一个工具,引入了一整套分布式协议栈

  • 调试体验非常差(这是核心痛点)

  • LLM“天然会用 CLI”,不需要新协议

这里引用一篇IBM的博客,有兴趣的朋友可以看看:community.ibm.com/community/u…

举个对比例子,例如使用高德,流程如下:

  1. 用户输入自然语言:如“查询周边 1km 咖啡店”
  2. SKILL发现:Agent识别用户意图匹配到对应的SKILL
  3. CLI命令构造:LLM 参考SKILL中的流程,将自然语言参数转换为完整的CLI命令,如下 amap-gui searchPOI --keyword 星巴克 --city 北京 --pageSize 1
  4. 执行CLI命令:Agent 直接在终端执行构造好的命令
  5. 请求后端接口:CLI 工具解析命令参数,构造并发起 HTTP 请求调用高德API
  6. 结果反馈:搜到的 POI 列表返回给 Agent,供其进一步处理

对比高德MCP(StreamableHTTP)流程:

  1. 用户输入自然语言:如 “查询周边 1km 咖啡店”
  2. 工具发现:Agent识别用户意图匹配 MCP Server暴露的工具描述
  3. MCP 请求构造:LLM 参考 工具的input_schema,将自然语言参数转换为标准JSON-RPC消息
  4. 工具调用请求:MCP Client 通过 HTTP 向远程 MCP Server发tools/callRPC消息,包含请求参数
  5. 请求后端接口:MCP Server 解析RPC请求参数,构造并发起 HTTP 请求调用高德API
  6. 结果反馈:MCP 返回的 POI 列表返回给 Agent,供其进一步处理