AIStor 的模型上下文协议 (MCP) 服务器: 工作原理
在本系列的前几篇博文中,我们讨论了MinIO AIStor 模型上下文协议 (MCP) 服务器的用户级和管理员级功能。在第一篇博文中,我们学习了如何查看存储桶的内容、分析对象并标记它们以便将来处理。在第二篇博文中,我们还学习了如何使用管理员命令以及获取集群信息。所有这些都是通过人类语言命令以及与集群的简单交互来完成的。
现在,让我们讨论一下内部结构:它是如何工作的以及我们如何开发这个 MCP 服务器。
高级 MCP 架构
模型上下文协议 (MCP) 旨在充当大型语言模型 (LLM) 与各种资源和工具之间的通用中介。该协议与语言模型配合使用,将人类语言转换为资源或工具可接受的语言。对于 AIStor 服务器,我们将人类语言请求(例如“列出存储桶‘demo’中的对象”)转换为 MCP 工具调用,然后再转换为对 AIStor 对象存储的 SDK 调用。
MCP 工作流程中的语言转换过程如下:
1、用户要求 LLM 客户端(例如,Claude Desktop)使用自然语言执行操作(例如,“列出存储桶演示中的对象”)。
2、LLM 将请求从人类语言转换为带有参数(例如存储桶名称)的 JSON-RPC 2.0 请求。
3、该请求被发送到 MCP 服务器,服务器将其转换为来自资源 SDK(例如,适用于 Go 的 MinIO SDK)的函数调用。
4、资源将响应发送回 MCP 服务器(例如,以 Go 切片形式呈现此存储桶中的对象列表)。
5、MCP 服务器将此列表转换为纯文本或 JSON 并将其发送回客户端。
6、客户端将此响应发送给 LLM 以将其翻译成人类语言。
这是流程图。
工具和语言
MCP 提供多种适用于不同语言的 SDK。一些 SDK 由 Anthropic 提供(例如 Python、TypeScript、Kotlin 和 Java),而其他 SDK 由社区创建(例如 Go、Rust 等)。
该服务器的原型是使用 Anthropic 提供的 SDK 在 Python 中创建的。
对于生产版本,我们切换到了 Go。MinIO 对象存储软件的大部分代码都是用 Go 编写的,因此 Go 对我们来说是自然而然的选择。我们使用 MinIO SDK for Go 实现了 MCP 服务器的功能,例如列出存储桶、检索对象信息以及设置对象标签。使用 Go,我们可以轻松地为各种架构和操作系统创建和分发可执行文件。
我们使用由Mark III Labs创建的mcp-go库,该库被社区广泛接受。
服务器架构
该服务器包含 25 多个与对象存储集群配合使用的工具,包括“列出存储桶”、“获取对象标签”、“获取存储桶转换规则”等核心命令。每个函数都是对象存储集群和 MCP 客户端之间的网关。它将从集群收到的响应转换为纯文本或 JSON 格式,并将其发送到客户端(在本例中为 Claude for Desktop)。
功能根据其对集群资源的访问级别进行分组:
- 只读工具(默认启用)
- 可以写入集群的工具(通过–allow-write标志启用)
- 可以删除对象和存储桶的工具(通过–allow-delete标志启用)
- 管理工具(通过–allow-admin标志启用)
根据启动服务器时使用的标志,它会启用某些工具组。例如,allow-write在配置文件中的服务器命令中添加该标志将启用创建对象和存储桶的功能。
分配
此服务器以 Docker 容器的形式在您的主机操作系统上运行。我们决定将其作为标准 OCI 容器镜像分发,因为我们的用户更倾向于在台式机或笔记本电脑上安装容器平台(例如 Docker 或 Podman),而不是其他服务器通常使用的 Python 或 Node.js 工具。
要运行此服务器,您无需克隆存储库或安装uvPython 工具。您可以claude_desktop_config.json通过添加适当的docker或podman命令并设置必要的标志和环境变量来配置文件。
MCP 客户端
此服务器可与支持 MCP 协议的多个客户端配合使用。它已在 Claude 桌面版、Cursor IDE、mcp-cli文本客户端等平台上测试过。
安全
我们之前在博客中提到过安全方面的考虑。以下是一些实施细节。
服务器通过claude_desktop_config.json文件配置。要访问对象存储集群,您必须通过环境变量提供凭据,包括访问密钥和密钥。您可以使用个人凭据,也可以为 MCP 服务器创建一个特殊的用户帐户。我们推荐后者。创建特殊用户帐户时,您可以创建并附加细粒度的策略,仅授予该帐户访问特定存储桶和函数的权限。有关创建此类策略的信息,请参阅 MinIO 文档(访问管理 - Linux 版 MinIO 对象存储)。
序列图
让我们看一下这里更详细的事件序列图。它显示了用户、LLM、MCP 服务器和 AIStor 对象存储之间的流程。
无需解释千言万语也能理解的“一张图片”,但需要注意的是,对象不会离开对象存储。即使你询问有关图像内容的问题,它也是在对象存储集群内部进行分析,而不是由你使用的 LLM 进行分析。
结论
MinIO AIStor 的 MCP 服务器是对通过命令行和/或 UI 与对象存储交互的传统方法的绝佳补充。它就像一个通用翻译器,可以将您想要执行的操作与机器需要听到的内容进行翻译。无需再记忆复杂的命令或语法,只需用简单的语言告诉它您需要什么即可。
除了将自然语言翻译成服务器语言之外,MCP 服务器还可以利用 LLM 汇总集群信息,包括存储桶内容、存储分布和集群状态。这是仅使用 CLI 或 UI 工具无法实现的。
随着语言模型变得越来越复杂,我们与存储系统交互的方式将变得越来越自然。
MCP 服务器的安全性是近期的热门话题之一。我们内置了灵活而强大的安全机制,确保管理员仍然可以控制访问权限。我们在此服务器上实施了多层安全保护,并始终遵循最小权限原则。
借助这款 MCP 服务器,MinIO 不仅实现了对象存储的大众化,还在重新思考在这个机器越来越善于理解我们的情况下,我们如何与技术协同工作。我们期待看到您将使用这项技术实现哪些精彩的成果,以及它将如何改变您与数据的关系。