什么是MCP
MCP(Model Context Protocol,模型上下文协议)是由Anthropic公司(Claude的开发者)于2024年11月开源发布的一项技术协议,旨在为AI模型与外部工具、数据源和系统之间的交互提供标准化接口。
MCP被比喻为AI世界的“USB-C接口”,通过统一的协议设计,解决了传统Function Calling接口的平台依赖问题,使AI应用能够更灵活、安全地与外部资源进行交互。
MCP架构
在MCP技术协议框架下,主要包含以下组件:
* MCP Host: 像是Cursor、OpenWebUI、CherryStudio、Claude客户端、IDEs或其他想要通过MCP server访问外部数据的程序;
* MCP Client:MCP Client通常被MCP Host集成,作为MCP Host的的一部分,通过MCP协议,与特定 MCP 服务器的通信。
* MCP Server:轻量的程序符合MCP协议的服务端,暴露特定能力。
* Remote Service:MCP Server可远程访问的外部系统(通常通过API)
* Local Data Sources:本地的电脑文件、数据库等可以被MCP Server访问的内容。
客户端与服务端的两种交互方式
MCP Client与MCP Server通过MCP协议(MCP Protocol)交互。主要有两种交互方式:通过标准输入输出(stdio)或者通过Server-Sent Events(SSE) 。
在标准输入输出的方式下,MCP Server与 Host和MCP Client都部署在一个环境中(例如本地电脑),Host通过子进程的方式拉起MCP Server。
SSE是基于HTTP的,在SSE方式下,MCP Server可以部署在远程环境。
目前看到较多的工具还是以stdio的方式,通过本地化部署来使用。SSE的方式在3月份的协议优化中,升级成为了Streamable HTTP Transport。
协议升级后,对云服务托管将会更友好。
MCP V.S function call
大模型本身不具备访问外部系统、数据的能力,当用户需要访问外部资源(例如获取当前时间,爬取某个网页数据)时,需要通过“调用工具”,来实现大模型与外部系统之间的对接。“调用工具”既俗称的function call。
大模型如何使用这些外部工具呢?简单的来说,大模型客户端会告诉大模型:
* 我提供哪些工具(我有哪些function给你call)
* 大模型怎么调用这些工具(你怎么call)
MCP带来了什么改变
在引入MCP之后,Function call的流程变化如下:
在出现MCP之前,将人工智能系统连接到外部工具需要集成多个应用程序接口。每个应用程序接口的集成都意味着单独的代码、文档、验证方法、错误处理和维护。 传统的应用程序接口就像每扇门都有单独的钥匙一样,每扇门都有自己的钥匙和规则。
举具体的例子来说:
- 当Host作者希望集成外部工具时,需基于自身Host的开发规范对接各种外部工具;
- 类似的,当工具开发者希望将自己的工具集成到Host时,需根据各种Host的开发规范去开发集成。
这导致各Host的插件生态不互通,工具集成的工作量是 N * M(Host数量 * 工具数量)。
有了MCP之后:
- Host作者只需要根据MCP Client的规范,将MCP客户端集成到Host中;
- 工具开发者只需要根据MCP Server的规范开发工具服务,就可以实现开发一个MCP Server,所有的Host(支持MCP Client)都能使用,
可以说,MCP打通了Host之间的工具生态,将其比喻成“USB-C接口”还是名副其实的。