MCP初探
大模型就像一个具备很多通用知识的机器人大脑,接上数据和工具后,就像装上了记忆和手脚,能够执行具体的任务。 不过数据库和工具总是外部的数据源,模型要如何调用它们呢? 模型上下文协议MCP就登场了,本文将从使用者的角度探索以下三个问题:
- 什么是 MCP?
- 为什么需要 MCP?
- 作为用户,我们如何使用/开发 MCP?
什么是MCP
MCP 起源于 2024 年 11 月 25 日 Anthropic 发布的文章:Introducing the Model Context Protocol。
MCP (Model Context Protocol,模型上下文协议)是一种开放协议,它标准化了应用程序如何为 LLM 提供上下文。
将 MCP 想象成 AI 应用程序的 USB-C 端口。正如 USB-C 提供了一种将设备连接到各种外围设备和配件的标准化方式一样,MCP 也提供了一种将 AI 模型连接到不同数据源和工具的标准化方式。这使得开发者能够以一致的方式将各种数据源、工具和功能连接到 AI 模型。
为什么选择MCP
在MCP出现以前,函数调用是被广泛接受的工具使用方式。但因为没有统一的协议,不同的模型就有不同的函数调用标准,因此开发人员需要为不同的应用做定制化的开发,这就形成了很多工具孤岛。
MCP的出现,标准化了这一过程,打破了这种孤岛现象。MCP 可帮助您在 LLM 之上构建代理和复杂的工作流程。
它能够提供:
- 越来越多的预构建的服务,您的 LLM 可以直接接入使用。
- 您可以灵活切换的不同的LLM。
- 你的敏感数据留在自己的电脑上,不必全部上传。
简单的可视化如下图所示,这样你应该更容易理解“中间协议层”的概念了。
如何使用MCP
对于用户来说,我们一般并不关心 MCP 是如何实现的,只考虑如何更简单的用上这一特性。
具体的使用方式参考官方文档:For Claude Desktop Users。这里不再赘述。
并且官方也提供了非常多现成的 MCP Servers,你只需要选择你希望接入的工具,然后接入即可。
MCP架构
这里首先引用官方给出的架构图。
MCP 的核心遵循客户端-服务器架构,其中主机应用程序可以连接到多个服务器:
- MCP host :希望通过 MCP 访问数据的 Claude Desktop、IDE 或 AI 工具等程序
- MCP Client:与服务器保持 1:1 连接的协议客户端
- MCP Server:轻量级程序,每个程序都通过标准化的模型上下文协议公开特定功能
- Local Data Sources:MCP 服务器可以安全访问的计算机文件、数据库和服务
- Remote Services :MCP 服务器可以连接到的互联网(例如,通过 API)提供的外部系统
接下来详细讲解一下 MCP Client,MCP Server 这两概念:
MCP Client
MCP client 充当 LLM 和 MCP server 之间的桥梁,MCP client 的工作流程如下:
- MCP client 首先从 MCP server 获取可用的工具列表。
- 将用户的查询连同工具描述通过 function calling 一起发送给 LLM。
- LLM 决定是否需要使用工具以及使用哪些工具。
- 如果需要使用工具,MCP client 会通过 MCP server 执行相应的工具调用。
- 工具调用的结果会被发送回 LLM。
- LLM 基于所有信息生成自然语言响应。
- 最后将响应展示给用户。
Claude Desktop ,Cursor和Cherry Studio 都支持了MCP Server接入能力,它们就是作为 MCP client来连接某个MCP Server感知和实现调用。
MCP Server
MCP server 是 MCP 架构中的关键组件,它可以提供 3 种主要类型的功能:
- 资源(Resources):类似文件的数据,可以被客户端读取,如 API 响应或文件内容。
- 工具(Tools):可以被 LLM 调用的函数(需要用户批准)。
- 提示(Prompts):预先编写的模板,帮助用户完成特定任务。
这些功能使 MCP server 能够为 AI 应用提供丰富的上下文信息和操作能力,从而增强 LLM 的实用性和灵活性。
使用 TypeScript 编写的 MCP server 可以通过 npx 命令来运行,使用 Python 编写的 MCP server 可以通过 uvx 命令来运行。
通信机制
MCP 协议支持两种主要的通信机制:基于标准输入输出的本地通信和基于SSE的远程通信。
这两种机制都使用 JSON-RPC 2.0 格式进行消息传输,确保了通信的标准化和可扩展性。
- 本地通信**:**通过 stdio 传输数据,适用于在同一台机器上运行的客户端和服务器之间的通信。
- 远程通信**:**利用 SSE 与 HTTP 结合,实现跨网络的实时数据传输,适用于需要访问远程资源或分布式部署的场景。
具体来说,MCP Client和 MCP Server是其中的核心要素。模型通过Client来请求调用, Server接受到请求则调用相应的工具来返回结果。
MCP Server还提供工具的详细信息。这些信息包括工具的名字,工具的功能,调用工具的参数等等。这些都是实现工具调用的前提,调用工具前,模型会仔细地浏览一遍该信息,调用工具时又再浏览一遍。随后调用合适的tools。
因此,使用MCP协议调用工具会耗费很多token数,比较费钱。
如何开发MCP
在了解 MCP 组件之后,很容易发现对绝大部分 AI 开发者来说,我们只需要关心 Server 的实现。
MCP servers 可以提供三种主要类型的功能:
- Resources(资源):类似文件的数据,可以被客户端读取(如 API 响应或文件内容)
- Tools(工具):可以被 LLM 调用的函数(需要用户批准)
- Prompts(提示):预先编写的模板,帮助用户完成特定任务
官方文档:Quick Start: For Server Developers 给出了一个简单的MCP Server开发示例,您可以参考这篇文档来开发自己的MCP Server。
总结
MCP (Model Context Protocol) 代表了 AI 与外部工具和数据交互的标准建立。通过本文,我们可以了解到:
- MCP 的本质:它是一个统一的协议标准,使 AI 模型能够以一致的方式连接各种数据源和工具,类似于 AI 世界的"USB-C"接口。
- MCP 的价值:它解决了传统 function call 的平台依赖问题,提供了更统一、开放、安全、灵活的工具调用机制,让用户和开发者都能从中受益。
- 使用与开发:对于普通用户,MCP 提供了丰富的现成工具,用户可以在不了解任何技术细节的情况下使用;对于开发者,MCP 提供了清晰的架构和 SDK,使工具开发变得相对简单。