跳到主要内容

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 模型

image_mcp_0

为什么选择MCP

在MCP出现以前,函数调用是被广泛接受的工具使用方式。但因为没有统一的协议,不同的模型就有不同的函数调用标准,因此开发人员需要为不同的应用做定制化的开发,这就形成了很多工具孤岛。

MCP的出现,标准化了这一过程,打破了这种孤岛现象。MCP 可帮助您在 LLM 之上构建代理和复杂的工作流程。

它能够提供:

  • 越来越多的预构建的服务,您的 LLM 可以直接接入使用。
  • 您可以灵活切换的不同的LLM。
  • 你的敏感数据留在自己的电脑上,不必全部上传。

简单的可视化如下图所示,这样你应该更容易理解“中间协议层”的概念了。

image_mcp_1

如何使用MCP

对于用户来说,我们一般并不关心 MCP 是如何实现的,只考虑如何更简单的用上这一特性。

具体的使用方式参考官方文档:For Claude Desktop Users。这里不再赘述。

并且官方也提供了非常多现成的 MCP Servers,你只需要选择你希望接入的工具,然后接入即可。

MCP架构

这里首先引用官方给出的架构图。

image_mcp_2

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

  • MCP host :希望通过 MCP 访问数据的 Claude Desktop、IDE 或 AI 工具等程序
  • MCP Client:与服务器保持 1:1 连接的协议客户端
  • MCP Server:轻量级程序,每个程序都通过标准化的模型上下文协议公开特定功能
  • Local Data Sources:MCP 服务器可以安全访问的计算机文件、数据库和服务
  • Remote Services :MCP 服务器可以连接到的互联网(例如,通过 API)提供的外部系统

接下来详细讲解一下 MCP ClientMCP 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 与外部工具和数据交互的标准建立。通过本文,我们可以了解到:

  1. MCP 的本质:它是一个统一的协议标准,使 AI 模型能够以一致的方式连接各种数据源和工具,类似于 AI 世界的"USB-C"接口。
  2. MCP 的价值:它解决了传统 function call 的平台依赖问题,提供了更统一、开放、安全、灵活的工具调用机制,让用户和开发者都能从中受益。
  3. 使用与开发:对于普通用户,MCP 提供了丰富的现成工具,用户可以在不了解任何技术细节的情况下使用;对于开发者,MCP 提供了清晰的架构和 SDK,使工具开发变得相对简单。