🚀 Redfish MCP Server (Go)
Redfish MCP Server (Go) 是一個用 Go 語言實現的高性能 MCP(模型上下文協議)服務器,用於與支持 Redfish 的基礎設施進行交互。該服務器為 AI 代理和應用程序提供了通過自然語言訪問 Redfish API 端點的能力,實現了對數據中心基礎設施的智能管理和監控。
🚀 快速開始
git clone https://github.com/theoriginalaiexplorer/mcp-redfish-go.git
cd mcp-redfish-go
go build -o bin/redfish-mcp ./cmd/redfish-mcp
export REDFISH_HOSTS='[{"address": "192.168.1.100", "username": "admin", "password": "secret"}]'
./bin/redfish-mcp
✨ 主要特性
- 🚀 高性能:採用原生 Go 語言實現,具有編譯後的二進制文件和低內存佔用的特點。
- 🔍 Redfish API 集成:全面支持 Redfish v1.x API 規範。
- 🤖 MCP 兼容:可與 MCP 客戶端和 AI 助手無縫集成。
- 🔐 安全認證:支持基本認證和基於會話的認證方式。
- 🌐 多種傳輸方式:提供 stdio、SSE 和 streamable-http 等傳輸選項。
- 🔄 併發操作:基於 Goroutine 實現併發發現和請求。
- 📊 結構化數據訪問:支持通過 JSON 格式檢索資源數據,幷包含頭部信息。
- 🛠️ 可擴展架構:採用模塊化設計,便於進行定製。
📦 安裝指南
前提條件
- Go 1.21 或更高版本
- 能夠訪問支持 Redfish 的基礎設施
從源代碼構建
git clone https://github.com/theoriginalaiexplorer/mcp-redfish-go.git
cd mcp-redfish-go
go mod tidy
go build -o bin/redfish-mcp ./cmd/redfish-mcp
make go-build-all
預構建二進制文件
可以從 發佈頁面 下載最新的發佈二進制文件,支持以下平臺:
- Linux (amd64)
- macOS (amd64)
- Windows (amd64)
💻 使用示例
MCP 工具
該服務器提供了兩個主要的 MCP 工具,用於與 Redfish 基礎設施進行交互:
list_servers
列出所有可訪問的已配置 Redfish 服務器。
示例用法:
List all available Redfish servers
響應:
{
"servers": ["192.168.1.100", "192.168.1.101"]
}
get_resource_data
從特定的 Redfish 資源端點獲取數據。
參數:
url:Redfish 資源的 URL(例如,https://192.168.1.100/redfish/v1/Systems/1)
示例用法:
Get the system information from https://192.168.1.100/redfish/v1/Systems/1
響應:
{
"headers": {
"content-type": ["application/json"],
"etag": ["\"12345\""]
},
"data": {
"@odata.id": "/redfish/v1/Systems/1",
"Name": "System1",
"Manufacturer": "Example Corp"
}
}
📚 詳細文檔
配置
服務器支持通過環境變量或 JSON 文件進行配置。在啟動時會對配置進行驗證,以確保設置正確。
配置方法
-
JSON 文件(推薦用於複雜配置):
./bin/redfish-mcp --config config.json
-
環境變量(默認):
export REDFISH_HOSTS='[{"address": "192.168.1.100"}]'
./bin/redfish-mcp
JSON 配置文件
創建一個 config.json 文件,幷包含完整的配置信息:
{
"redfish": {
"hosts": [
{
"address": "192.168.1.100",
"port": 443,
"username": "admin",
"password": "secret123",
"auth_method": "session",
"tls_server_ca_cert": "/path/to/ca-cert.pem"
}
],
"port": 443,
"auth_method": "session",
"username": "default_user",
"password": "default_pass",
"tls_server_ca_cert": "",
"insecure_skip_verify": false,
"discovery_enabled": false,
"discovery_interval": 30
},
"mcp": {
"transport": "stdio",
"log_level": "INFO"
}
}
訪問無 SSL 證書的服務器
在開發或測試使用自簽名或無效 SSL 證書的 Redfish 服務器時,可以跳過證書驗證:
環境變量:
export REDFISH_INSECURE_SKIP_VERIFY=true
JSON 配置:
{
"redfish": {
"insecure_skip_verify": true
}
}
⚠️ 重要提示
僅在開發或受信任的環境中使用 insecure_skip_verify 選項。此選項會禁用 SSL 證書驗證,使連接容易受到中間人攻擊。
環境變量
| 變量 |
描述 |
默認值 |
是否必需 |
REDFISH_CONFIG_FILE |
JSON 配置文件的路徑 |
- |
否 |
REDFISH_HOSTS |
主機配置的 JSON 數組 |
[{"address":"127.0.0.1"}] |
是* |
REDFISH_PORT |
默認的 Redfish 端口 |
443 |
否 |
REDFISH_AUTH_METHOD |
認證方法:basic 或 session |
session |
否 |
REDFISH_USERNAME |
默認用戶名 |
"" |
否 |
REDFISH_PASSWORD |
默認密碼 |
"" |
否 |
REDFISH_SERVER_CA_CERT |
CA 證書的路徑 |
"" |
否 |
REDFISH_INSECURE_SKIP_VERIFY |
跳過 SSL 證書驗證 |
false |
否 |
REDFISH_DISCOVERY_ENABLED |
啟用 SSDP 發現 |
false |
否 |
REDFISH_DISCOVERY_INTERVAL |
發現間隔(秒) |
30 |
否 |
MCP_TRANSPORT |
傳輸方式:stdio、sse、streamable-http |
stdio |
否 |
MCP_REDFISH_LOG_LEVEL |
日誌級別:DEBUG、INFO、WARNING、ERROR、CRITICAL |
INFO |
否 |
主機配置
REDFISH_HOSTS 或 JSON 文件中的每個主機可以指定以下信息:
address(必需):IP 地址或主機名
port(可選):端口號
username(可選):特定主機的用戶名
password(可選):特定主機的密碼
auth_method(可選):basic 或 session
tls_server_ca_cert(可選):自定義 CA 證書的路徑
驗證
服務器在啟動時會對配置進行驗證,如果配置無效,將退出並顯示詳細的錯誤信息。
運行服務器
基本用法
go build -o bin/redfish-mcp ./cmd/redfish-mcp
export REDFISH_HOSTS='[{"address": "192.168.1.100", "username": "admin", "password": "secret"}]'
./bin/redfish-mcp
./bin/redfish-mcp --config redfish-config.json
傳輸方式
服務器支持多種 MCP 傳輸機制:
stdio 傳輸(默認)
通過標準輸入/輸出進行通信,可直接與 MCP 客戶端集成。
export MCP_TRANSPORT="stdio"
./bin/redfish-mcp
SSE 傳輸(服務器發送事件)
基於 HTTP 的網絡通信方式,適用於遠程客戶端。
export MCP_TRANSPORT="sse"
./bin/redfish-mcp
streamable-http 傳輸
一種基於 HTTP 的替代傳輸方式,適用於特定的 MCP 實現。
export MCP_TRANSPORT="streamable-http"
./bin/redfish-mcp
Makefile 目標
可以使用提供的 Makefile 進行常見操作:
make go-build
make go-run
make go-test
make go-fmt
make go-vet
與 MCP 客戶端集成
Claude Desktop
將服務器添加到 claude_desktop_config.json 文件中:
{
"mcpServers": {
"redfish": {
"command": "/path/to/bin/redfish-mcp",
"env": {
"REDFISH_HOSTS": "[{\"address\": \"192.168.1.100\", \"username\": \"admin\", \"password\": \"secret123\"}]",
"MCP_TRANSPORT": "stdio"
}
}
}
}
VS Code with GitHub Copilot
在 VS Code 設置或 .vscode/mcp.json 文件中進行配置:
{
"mcp": {
"servers": {
"redfish": {
"command": "/path/to/bin/redfish-mcp",
"env": {
"REDFISH_HOSTS": "[{\"address\": \"192.168.1.100\", \"username\": \"admin\", \"password\": \"secret123\"}]",
"MCP_TRANSPORT": "stdio"
}
}
}
}
}
MCP Inspector
使用 MCP Inspector 測試服務器:
npx @modelcontextprotocol/inspector /path/to/bin/redfish-mcp
更多信息,請參考 VS Code 文檔。
測試
單元測試
運行 Go 測試套件:
go test ./...
go test -race ./...
go test -cover ./...
make go-test
MCP Inspector
使用 MCP Inspector 交互式測試服務器:
go build -o bin/redfish-mcp ./cmd/redfish-mcp
npx @modelcontextprotocol/inspector ./bin/redfish-mcp
集成測試
可以針對真實的 Redfish 硬件或模擬器對服務器進行測試。確保 REDFISH_HOSTS 配置指向可訪問的端點。
示例用例
- AI 助手:使大語言模型(LLMs)能夠通過 Redfish API 獲取基礎設施數據。
- 聊天機器人和虛擬代理:檢索數據並提供個性化響應。
開發
前提條件
環境設置
git clone https://github.com/theoriginalaiexplorer/mcp-redfish-go.git
cd mcp-redfish-go
go mod tidy
go build ./cmd/redfish-mcp
開發工作流程
go fmt ./...
go vet ./...
go test ./...
go build -o bin/redfish-mcp ./cmd/redfish-mcp
./bin/redfish-mcp
項目結構
.
├── cmd/redfish-mcp/ # 主應用程序
│ └── main.go # 入口點
├── pkg/ # Go 包
│ ├── config/ # 配置管理
│ │ ├── config.go # 配置結構體和驗證
│ │ ├── env.go # 環境解析
│ │ └── config_test.go # 單元測試
│ ├── redfish/ # Redfish 客戶端和發現
│ │ ├── client.go # 帶有重試邏輯的 HTTP 客戶端
│ │ ├── discovery.go # SSDP 發現
│ │ └── types.go # 類型定義
│ ├── mcp/ # MCP 服務器實現
│ │ └── server.go # MCP 服務器設置和工具
│ └── common/ # 共享工具
│ └── hosts.go # 主機管理
├── .github/workflows/ # CI/CD 工作流
│ └── release.yml # 發佈自動化
├── Makefile # 構建和開發任務
└── README.md # 本文件
代碼質量
- 格式化:使用
go fmt 進行一致的代碼格式化。
- 靜態分析:使用
go vet 進行靜態代碼分析。
- 測試:使用
go test 進行全面的單元測試。
- 依賴管理:使用 Go 模塊進行依賴管理。
貢獻
- 分叉倉庫
- 創建功能分支
- 進行更改並添加測試
- 運行
go test ./... 和 go vet ./...
- 提交拉取請求
📄 許可證
本項目採用 Apache 許可證 2.0 進行許可 - 詳細信息請參閱 LICENSE 文件。
致謝