admin管理员组

文章数量:1446757

大模型协议|深入理解MCP协议

引言

前几日群里还在讨论MCP,好奇心的驱使,我也去看了下,搞了一通之后发现还需要访问国外网站就没有再研究下去,今日闲来无事又开始琢磨琢磨,开始折腾之旅。

什么是MCP

MCP(Model Context Protocol) 是 Anthropic 推出的一种开放协议标准,并在2024年11月份已经开源(/)。MCP标准化了应用程序如何向LLM提供上下文,通过统一的客户端-服务器架构解决 LLM 应用与数据源连接的难题,通过提供一个统一、标准化且安全的数据连接方式,MCP解决了数据孤岛问题。再简单点来说,如果你把MCP想象成人工智能应用程序的USB-C端口。正如USB-C提供了一种将您的设备连接到各种外围设备和附件的标准化方式,MCP提供了一种将人工智能模型连接到不同数据源和工具的标准化方式。总结起来就是下面几个特点:

  • LLMs开源标准协议
  • 解决LLMs数据孤岛问题
  • 可连接本地资源和外部资源
  • 提供集成能力
  • ……

MCP整体架构

MCP支持通过统一协议访问本地资源(如数据库、文件)和远程资源(如 Slack、GitHub API),无需定制集成。MCP 不仅共享数据,还可公开工具和交互模板,且内置安全性,确保资源由服务器完全掌控。通过官网提供的一张图可以清晰理解MCP。

  • MCP 主机(MCP Hosts):希望通过 MCP 访问资源的程序(例如 Claude Desktop、IDE 或 AI 工具),用于发起连接。
  • MCP 客户端(MCP Clients):与服务器保持 1:1 连接的协议客户端。
  • MCP 服务器(MCP Servers):轻量级程序,每个程序都通过标准化模型上下文协议公开特定功能。为客户端提供上下文、工具和 prompt 信息。
  • 本地资源(Local Resources):本地机器资源中可供 MCP 服务器安全访问的资源,例如数据库(Data Source A和Data Source B)、文件、服务,官方提供了一个案例来访问SQLite。
  • 互联网远程服务(Remote Resources):可以通过网页API来双向调用远程服务,例如Remote Service C。

MCP工作原理

MCP将 LLMs 与资源之间的通信划分为三个主要部分:客户端、服务器和资源。客户端负责发送请求给 MCP 服务器,MCP服务器则将这些请求转发给相应的资源。这种分层的设计使得 MCP 协议能够更好地控制访问权限,确保只有经过授权的用户才能访问特定的资源。通过官方提供的周期图来感受下:

MCP核心组件

在MCP中有三大组件,分别是协议层(Protocol layer)、传输层(Transport layer)、消息类型(Message types)。

  • 协议层(Protocol layer):协议层负责消息的封装、请求/响应的关联,以及高层通信模式的管理。 主要类包括:Protocol、Client、Server等。
  • 传输层(Transport layer):MCP支持多种传输机制,主要有Stdio传输基于 HTTP 和 SSE 的传输
  • 消息类型(Message types):MCP的消息类型主要有请求、结果、错误、通知。例如错误消息
代码语言:javascript代码运行次数:0运行复制
interface Error {
    code: number;
    message: string;
    data?: unknown;
}

MCP协议利好Java

随着AI技术的发展,Java开发者可能感到需要不断学习新的技能以跟上时代的步伐,尤其是在机器学习、深度学习等新领域的知识,以及新的工具和技术上很吃力,毕竟在人工智能方向,Python一直都是王者般的存在。模型上下文协议的JavaSDK支持AI模型和工具之间的标准化集成,那么如何集成呢?

JavaSDK整体架构

在JavaSDK中,遵循分层架构,明确分离关注点。

MCP客户端

MCP客户端是模型上下文协议(MCP)架构中的关键组件,负责建立和管理与MCP服务器的连接。它实现了协议的客户端。

MCP服务端

MCP服务器是模型上下文协议(MCP)架构中的基础组件,它为客户端提供工具、资源和功能。它实现了协议的服务器端。

引入依赖包

如果你使用了一个Maven项目,那么可以引入下面的包

代码语言:javascript代码运行次数:0运行复制
<!-- 1、引入MCP核心功能依赖 -->
<dependency>
    <groupId>io.modelcontextprotocol.sdk</groupId>
    <artifactId>mcp</artifactId>
</dependency>

……

<!-- 2、引入HTTP SSE传输依赖 -->
<!-- Spring WebFlux-based SSE client and server transport -->
<dependency>
    <groupId>io.modelcontextprotocol.sdk</groupId>
    <artifactId>mcp-spring-webflux</artifactId>
</dependency>

<!-- Spring WebMVC-based SSE server transport -->
<dependency>
    <groupId>io.modelcontextprotocol.sdk</groupId>
    <artifactId>mcp-spring-webmvc</artifactId>
</dependency>

……

<!-- 3、依赖管理 -->
<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>io.modelcontextprotocol.sdk</groupId>
            <artifactId>mcp-bom</artifactId>
            <version>0.7.0</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

总结

AI开发者可以通过 Claude 桌面应用快速部署 MCP 服务,也可以根据官方提供的快速入门指南构建自己的 MCP 解决方案。同时,开源社区已开放了连接器和实现的代码库,支持开发者贡献自己的扩展功能。但是很无奈的是,这玩意我没有注册成功,先写一篇其他博文咯。

本文标签: 大模型协议|深入理解MCP协议