MCP:从理论到实践

概述

MCP这个词最近比较流行,在ragflow v0.18.0版本中,新增了MCP服务器,因此,花了两天时间,对MCP进行了一些调研。

在之前分析Mauns产品时,提到过Mauns这种Agent产品一个很大的短板在于信息获取

一方面,Agent需要获取信息,需要自己通过网络搜索,这样搜索的信息既慢又不全面。

另一方面,很多网站设置了登录门槛,Agent不登陆获取不了信息;登录之后,又会出现安全性问题。

MCP就解决了这一问题。

本文将围绕以下几个问题对MCP进行展开介绍:

  • 1.什么是MCP?

  • 2.MCP、RAG、Open API有什么区别?

  • 3.目前已有哪些MCP服务器?

  • 4.Trae如何使用MCP?

  • 5.如何搭建一个MCP服务?

1.MCP概念

MCP(Multi-modal Conversational Perception)概念最早由Anthropic公司(Claude的母公司)在2024年11月提出[2]。

官方文档[1]对MCP的定义如下:

MCP 是一个开放协议,它规范了应用程序向 LLM 提供上下文的方式。MCP 就像 AI 应用程序的 USB-C 端口一样。正如 USB-C 提供了一种标准化的方式将您的设备连接到各种外围设备和配件一样,MCP 也提供了一种标准化的方式将 AI 模型连接到不同的数据源和工具。

举个简单的例子:当我们问DeepSeek:“今天天气怎么样?”

由于DeepSeek本身不包含当前实时信息,因此它需要进行联网搜索,获取信息。

如果没有MCP,它需要从海量网页中,搜索到今天的天气信息,再把相关内容截取出来,作为提示词告诉LLM。

设定天气的MCP服务器之后,它可以选择从MCP服务器中,直接获取数据,从而得到今天天气的准确信息

made by openAI

乍一看这个例子,似乎和RAG的流程比较像,在和DeepSeek对话中,开启“联网搜索”,它就会执行RAG的操作,将用户输入的问题向量化,到联网知识库中去搜索信息。

但这样搜索到的信息不一定精准,如果它搜索到不相干或错误的信息,反而会对语言模型产生误导。

而MCP服务器的信息返回往往较为可控,能够使语言模型得到的信息更加快速精准

MCP协议解决的是数据标准化的问题,虽然信息也可以通过服务的API进行获取,但各家的API都不一样,适配所有API,难度很大。

而MCP提出之后,所有服务商都根据该协议来适配信息接口,这样智能体就可以和指定的MCP服务器连接起来。

2.MCP起源故事

MCP协议的发明者——Justin Spahr-Summers、 David Soria Parra在播客中,提到过MCP的起源[3]。

在工作中,基于我在开发工具方面的背景,很快就觉得有点沮丧,一方面因为 Claude Desktop 功能有限,无法拓展,而 IDE 又缺少 Claude Desktop 的实用功能,所以我只能在两者间来回复制内容很麻烦。

久而久之。我意识到这是个 MxN 的问题,也就是多个应用程序与多种集成的难题,而用一种协议解决再合适不过。

当时我还在做一个与 LSP(Language Server Protocol)相关的内部项目,没什么进展。综合这些想法,琢磨几周后,我有了构建某种协议的念头:能不能做一个类似 LSP 的东西?把这种「AI 应用与扩展之间的通信」标准化。

于是,我找到 Justin,分享了这个想法,幸运的是他很感兴趣,我们便一起着手构建。

从有想法开始,花了约一个半月构建协议并完成首次集成。Justin 在 Claude Desktop 首次集成中承担了大量工作,我则在 IDE 中做了许多概念验证,展示协议在 IDE 中的应用。

在正式发布前,查看相关代码库能发现不少细节,这就是 MCP 大概的起源故事。

MCP刚推出来时,并没有达到现在的关注度。核心原因就是 Manus 和 Agent 的热潮还没来到。

个人觉得,即使 Anthropic 不做MCP,也迟早会有人做,只是他们提前做了第一个吃螃蟹的人

就像OpenAi最先推出ChatGPT一样,现在几乎所有的大模型厂商,模型问答响应的接口都按照Open API的标准进行设计。

3.MCP架构及设计细节

这一节将对官方文档中Core architecture一节的相关部分内容进行概括和转述。

1. 架构

MCP采用客户端-服务器架构,其中主机应用程序可以连接到多个服务器:

架构图:来源于官方文档[1]

2. 传输方式

MCP采用JSON-RPC 2.0在服务器和客户端之间传输信息,主要包含两种信息传输方式:

  • 1.Stdio传输:使用标准输入/输出进行通信,用于本地信息传输
  • 2.SSE+HTTP Post传输
    SSE基于HTTP协议的服务器发送事件,只支持服务器到客户端的单向数据推送
    客户端在通过SSE和服务器建立连接后,通过HTTP Post向服务器发送数据

3. 消息类型

MCP有以下四种消息类型:

  • Request:请求,期望得到对方的响应
  • Result:结果,对请求的成功响应
  • Error:错误,表明请求失败
  • Notification:通知,单向消息,不期望得到响应

4. 连接生命周期

连接生命周期包括:初始化、信息交换、终止三个部分。

初始化过程如下:

  • 1.客户端发送initialize带有协议版本和功能的请求
  • 2.服务器以其协议版本和功能进行响应
  • 3.客户端发送initialized通知作为确认
  • 4.开始正常消息交换

信息交换包含两种模式:

  • 1.请求-响应:客户端或服务器发送请求,对方响应
  • 2.通知:任何一方发送单向消息

终止包含三种行为:

  • 通过close()关闭连接
  • 传输断开
  • 遇到错误

5.错误类型

MCP包含以下的错误类型:

  • -32700ParseError
    请求的 JSON 格式无效(如语法错误、非法字符)

  • -32600InvalidRequest
    请求不符合 JSON-RPC 2.0 协议规范(如缺少必填字段)

  • -32601MethodNotFound
    调用的方法不存在或未实现

  • -32602InvalidParams
    请求参数无效(缺失、类型错误或值不合法)

  • -32603InternalError
    服务器内部处理错误(如数据库崩溃)

4.MCP服务器汇总

有以下渠道可以搜索到当前已存在的MCP服务器。

1. awesome-mcp-servers

该仓库汇总了当前很多MCP服务器,涵盖艺术、社交、数据库等多个领域,并且支持多语言查看,正在持续更新拓展中。

仓库地址:https://github.com/punkpeye/awesome-mcp-servers

2. MCP.ad

国外的一个mcp服务器信息聚合平台,汇集了1w+个MCP服务。

网站地址:https://mcp.ad/

3. MCPFlow

国内的MCP社区,收录了4k+个MCP服务。

网站地址:https://mcpflow.io/home

4. MCPServers

国内最大的MCP中文社区,收录了3w+个MCP服务。

网站地址:https://www.mcpservers.cn/servers

5. MCPSet

国内的MCP聚合站点,收录了5k+个高价值MCP服务。

网站地址:https://www.mcpset.cn/

5.MCP服务接入

Trae的最新一轮更新中,支持了MCP服务。

当然Cursor也支持MCP服务,因为我用Trae比较多,以Trae作为示例。

Trae在MCP/市场菜单下,可配置很多已有服务,下面以手动配置高德地图MCP服务为例。

根据高德地图MCP接入文档[4],首先需要在控制台创建一个新应用,获取MCP Key

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zstar-_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值