漫谈 MCP 构建之概念篇

MCP(Model Context Protocol,模型上下文协议)这个标准其实已经出来有一段时间了。刚开始的时候,很多厂商都各自搞了一套"Function Call 协议",我当时也写过一篇关于 MCP 的小分享。但回过头来看,那时候写得并不满意:一方面理解还比较浅,另一方面也没有大量实战与使用。于是就想着开一个新系列,把这段时间的感悟和实操经验都整理出来,聊聊 MCP 到底改变了什么、怎么构建一个 MCP,以及最后在 Python 的 LangChain 里该怎么接入。

上面说的比较简单,如果想查看完整的介绍可以点击下面链接。
What is the Model Context Protocol (MCP)?

为什么需要 MCP?

MCP 首先是一个开源标准,可以把它想象成 USB-C 接口:只要有这个接口,不同设备就能即插即用。而 MCP 也是类似的思路,它希望让各种工具和资源以统一的方式接入到 AI 里,从而被调用。

问题来了:如果没有 MCP,会怎样?

先回顾一下 LLM(大语言模型)的训练过程,大致分为两步:

  1. 预训练:用大规模语料(网页、书籍、代码等等)来训练,得到一个基础模型。
  2. 微调:再用高质量的指令数据做微调,让模型更能理解任务和人类意图。

经过上面两步我们得到了一个比较完善的模型,不过它存在一些问题,例如如果问模型一些最新的知识(比如新出的梗、今天的日期、天气预报),它可能完全答不上来,这就是所谓的 幻觉(hallucination) 问题。

为了缓解幻觉,之前业界主要有两个思路:

  1. RAG(检索增强生成):先根据用户问题检索相关资料,再把这些内容作为上下文喂给模型,从而减少幻觉产生,不过这个主要适用于查询提问等方向。
  2. Function Call:很多厂商实现了让模型去"调用工具"的能力,比如查天气、算数学题,通过一系列工具来让模型调用相关的能力从而减少幻觉,但有一个很大问题就是这些厂商没有统一协议。OpenAI 一套,Gemini 又一套,完全不能互通,浪费了大量资源。

所以 MCP 出场的意义就很明确了:它把 Function Call 标准化,不再让厂商各自为战。

MCP 核心概念

MCP 有三种角色分别如下:

  1. MCP Server
  2. MCP Client
  3. MCP Host

简单来说:Server 提供能力,Client 负责连接,Host 负责承载 AI 应用。 这里优先先介绍 MCP Server,后续会把 Client 和 Host 补全。。

MCP Server

可以把 MCP Server 想象成"电源适配器",它负责把外部的知识库、工具、Prompts 封装好,通过标准协议暴露出来。

官方现在已经有 10+ SDKs,未来还会不断扩展,目前主流语言都支持了。

Available SDKs

Server 的核心功能分三类:

  1. Resources:把数据资源开放出来,让 LLM 能够读取(比如企业内部知识库)。
  2. Tools:暴露可调用的工具,比如计算器、天气接口。
  3. Prompts:提供预定义的提示模板,让用户直接调用,省去重复输入。

这三块内容会在后续的几篇文章里逐一展开,这里我们只需要了解作为开发者我们重点关注的应当是 MCP Server,模型可以知道哪些数据以及可以调用哪些工具其实都是我们来决定的。

此外,MCP 在 Server 与 Client 之间的通信上,目前主要有两种 Transport 方式,在后面的文章会展开来讲解。

  1. Stdio transport:基于标准输入/输出流,本地进程间通信。
  2. Streamable HTTP transport:基于 HTTP POST + SSE(Server-Sent Events),支持远程通信和流式响应,并内置认证(API Key、Bearer Token、自定义 Header),官方推荐结合 OAuth 获取令牌。

MCP Host

Host 官方的定义是"协调和管理一个或多个 MCP 客户端的 AI 应用程序",不过我觉得有点抽象。

举一个例子来说,我们经常使用 VSCode,但是最新版本已经支持了 MCP 协议,所以它就是一个 MCP Host,再比如前段时间特别火的 Gemini CLI,它也支持 MCP 的注册和管理,因此它也是一个客户端,再比如 DeepChat,它也是一个 MCP Host。

所以概括一下只要你的应用支持 MCP 标准的实现,就可以说是一个 MCP host。

MCP Client

MCP Client 负责和某个 MCP Server 建立连接。

根据上面官方给出的图例来进行讲解,假设 VSCode 想用一个 MCP Server,它就会实例化一个 MCP Client 来维护这条连接。再后来 VSCode 需要连接多个 MCP Server,就会创建多个 Client。这就是 MCP Client 的作用,它负责 Host 和 server 之间的通讯,不过必须强调 一个 Client 对应一个 Server,是一对一的关系

小结

概念篇就先聊到这里。总体上,MCP 就是为了把工具调用、资源访问这些能力统一标准,让不同 AI 应用能更好地协同。

对开发者来说,最值得关注的还是 MCP Server ------它才是真正暴露资源和能力的地方。所以下一篇文章,我们会继续聊聊 Resources 的定义方式。

相关推荐
前端老鹰2 小时前
HTML <output> 标签:原生表单结果展示容器,自动关联输入值
前端·html
OpenTiny社区2 小时前
OpenTiny NEXT 内核新生:生成式UI × MCP,重塑前端交互新范式!
前端·开源·agent
耶耶耶1112 小时前
web服务代理用它,还不够吗?
前端
每天进步一点_JL2 小时前
JVM 类加载:双亲委派机制
java·后端
Liamhuo2 小时前
2.1.7 network-浏览器-前端浏览器数据存储
前端·浏览器
洋葱头_2 小时前
vue3项目不支持低版本的android,如何做兼容
前端·vue.js
用户298698530142 小时前
Java HTML 转 Word 完整指南
java·后端
前端小书生2 小时前
React 组件渲染
前端·react.js
sjd_积跬步至千里2 小时前
CSS实现文字横向无限滚动效果
前端