README
🚀 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 模块
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 | 否 |
- 当不使用 JSON 配置文件时为必需项
主机配置
REDFISH_HOSTS 或 JSON 文件中的每个主机可以指定以下信息:
address(必需):IP 地址或主机名port(可选):端口号username(可选):特定主机的用户名password(可选):特定主机的密码auth_method(可选):basic或sessiontls_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"}]'
# 使用 stdio 传输方式运行(默认)
./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
# 服务器将在 http://localhost:8000/sse 可用
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 ./...
# 使用 Makefile
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 获取基础设施数据。
- 聊天机器人和虚拟代理:检索数据并提供个性化响应。
开发
前提条件
- Go 1.21 或更高版本
- Git
环境设置
# 克隆仓库
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 文件。
致谢
- Model Context Protocol 提供协议规范
- DMTF Redfish 提供 API 标准
- Go 社区提供优秀的工具和库
Scan to join WeChat group