🚀 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 文件。
致谢