在本系列的前幾篇博文中,我們討論了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 不僅實現了對象存儲的大眾化,還在重新思考在這個機器越來越善于理解我們的情況下,我們如何與技術協同工作。我們期待看到您將使用這項技術實現哪些精彩的成果,以及它將如何改變您與數據的關系。