🌑

Mocha's Blog

目录
  1. 什么是 MCP
  2. MCP 的架构
  3. 使用 MCP Server
  4. 如何编写一个 MCP Server
  5. 可以做什么

MCP:开启 AI 编程的 App Store 时代

发布时间:2025年3月13日

大语言模型兴起以来涌现了众多 AI Coding 工具,工具的范式也经过了多次的演进,从辅助编程类型的 Copilot,到 Agent 类型的 Cursor ,再到能够实现文/图生代码并自动部署的 Vercel.v0,AI 从开发领域诞生,也完全颠覆了软件开发模式。
在 AI Coding 实际落地工程中,不论多么强大的模型也都会存在一些局限性和痛点,主要有:

  • 黑盒效应: LLM 的决策过程往往难以解释,这使得调试和优化变得困难。开发者难以理解模型为何生成特定代码,也难以针对性地改进。
  • 知识更新滞后: LLM 的知识库通常是静态的,无法实时获取最新的 API 文档、框架更新或行业最佳实践,导致生成的代码可能过时或不适用。
  • 业务属性弱:通用大模型在业务上的适配性又一般,但模型微调的经济成本和技能要求较高,,导致实际开发提效并没有特别明显。
  • 模型能力受限:常规场景下大模型的能力只是简单的输入与输出能力,对模型外的开发资源缺乏感知,比如:数据库、redis、各类文档等信息,无法获取或调用相关工具获取资源为输出提供决策辅助。

Anthropic 在 2024.11.24 基于自己在编码大模型领域的深入耕耘,正式对外开源了 MCP(ModelContextProtocol),如果说 LLM 为 AI Coding 提供了大脑,那 MCP 就是为其装上了双手,大模型的能力不再受限于静态的知识库,可以使用各种工具获取最新的知识。

什么是 MCP

MCP 官网是这么介绍它的

MCP is an open protocol that standardizes how applications provide context to LLMs. Think of MCP like a USB-C port for AI applications. Just as USB-C provides a standardized way to connect your devices to various peripherals and accessories, MCP provides a standardized way to connect AI models to different data sources and tools.

简单来说,MCP 是一种标准化,它可以将我们自定义的访问外部资源的工具(tools)标准化,就像电脑上的 USB 接口,大模型可以通过调用插入的工具实现对外部资源的动态调用,比如:

  • 提供数据库查询工具查询表结构与数据
  • 通过 NPM 查询工具查询依赖包的最新版本

通过引入外部资源,大模型可以获取到最新的信息,再结合模型内已经标准化、基础化的能力,为大模型在 Coding 过程中的 Action 提供了更多的可能性。

MCP 的架构

image.png

在 MCP 整个架构中,可以参与者分为以下几种类型:

  1. MCP Host:MCP 服务的宿主,一般是 IDE 或者 Editor 的角色,为 MCP 客户端和工具提供基础环境
  2. MCP Client:MCP 服务的客户端,与各种大模型耦合在一起,提供工具决策与使用的能力,主要是以插件的形式存在,比如:Cursor、Roo Code、Cline 等
  3. MCP Server:具体执行不同功能的角色,一个 MCP Server 中可以注册多种 tools,tools 的属性比较灵活,既可以是业务无关的(数据库查询等)也可以是业务有关的(业务知识库/组件库查询等)
  4. Resource:提供基础信息的资源,也是最基础的可信信息的来源,可以是:数据、知识库、NPM、第三方接口等等资源

从具体的能力上来看,可能有些同学会觉得 MCP Server 和 Function Call 非常像,实际上二者的区别还是比较大的:

Function Call MCP Servers
概念 工具的概念,功能比较受限 服务概念,服务可以提供多种工具和资源
基础条件 大模型需要支持 Function Call 大模型无需支持 Function Call
工具定义 以列表的方式定义,定义必须在本地 server 可以是本地文件也可以是远程地址
消费方式 需要将完整函数名称与代码传递给大模型 只需要将 tool/resource 定义传递给大模型
执行逻辑 在大模型服务端执行,执行过程是个黑盒 由大模型产出执行命令,在 MCP Client 中执行
管理成本 代码存在本地,需要修改代码进行管理 通过配置文件进行管理,快速插拔
工具市场 提效不大,最终还是要把代码复制到项目中 丰富的 MCP Server 市场,可快速接入第三方 Server

从上面的表格及开发中高内聚低耦合的角度去看,MCP Server 是相较于 Function Call 更好的实现

使用 MCP Server

目前 MCP Client 主要分为两种类型,插件类型的如 RooCode/Cline,编辑器原生支持的如 Cursor,今天我们的 demo 就基于 RooCode 给大家演示
按照上次分享的内容中完成对 RooCode 的安装和配置后,进入 RooCode 插件界面,右上角第三个 icon 为 MCP Servers 的配置

image.png

点击 MCP Servers icon 后进入配置页面,有两个开关:

  1. Enable MCP Servers:是否启用 MCP Servers,必须要打开,否则 RooCode 将无法调用 Server
  2. Enable MCP Server Creation:是否允许自动创建 MCP Server,简单来说就是打开后你可以让 RooCode 帮你按照你的需求写一个 MCP Server,自己根据需要选择即可

image.png

上面配置完成后,我们就可以正式的设置我们要引入哪些 MCP Server 了,MCP 官方有一个 github 仓库,上面提供了众多可以快速使用的,我们拿一个 PostgreSQL Server 的来举例子

image.png

在文档中,官方提供了两种调用方式:docker 和 npx,我们可以按照文档中的方式将 MCP Server 引入到本地配置文件中,并配置上我们本地的 postgreSQL 的链接,这样就实现了对一个 Server 的快速引入

image.png

保存后,MCP Client 会先执行一次 MCP Server 去获取 Server 中提供的 Tools 和 Resources,如下图

image.png

可以看到我们添加的 PostgreSQL Server 提供以下内容:

  • 名为 query 数据库查询工具
  • 自动从数据库中获取了所有的表的表结构

我们接下来就可以让 RooCode 去帮我们做一次查询

如何编写一个 MCP Server

按照官方文档上的指引,可以快速实现一个最小化的 MCP Server 开发

image.png
image.png

然后的项目中配置并指定运行

可以做什么

简单来说,一个常规的 Server 能做什么 MCP Server 就能做什么,比如通过 MCP Server 的组合实现一个自己的 manus
通过 MCP Client 与 MCP Server 的结合,大大扩充了大模型能够触摸到的信息边界,同时也将大模型从 Function call 中解放出来,让其回归纯粹。

能限制你的只有你的想象。

Powered By Hexo.js Hexo and Minima. Support By Oracle & Docker-Compose.