Back to MCP directory
publicPublicdnsLocal runtime

mcp-redfish-go

一个用Go语言实现的高性能MCP服务器,为AI代理和应用程序提供通过自然语言查询访问Redfish API的能力,实现数据中心基础设施的智能管理和监控。

article

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 文件进行配置。在启动时会对配置进行验证,以确保设置正确。

配置方法

  1. JSON 文件(推荐用于复杂配置):

    ./bin/redfish-mcp --config config.json
    
  2. 环境变量(默认):

    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 | 认证方法:basicsession | 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 | 传输方式:stdiossestreamable-http | stdio | 否 | | MCP_REDFISH_LOG_LEVEL | 日志级别:DEBUGINFOWARNINGERRORCRITICAL | INFO | 否 |

  • 当不使用 JSON 配置文件时为必需项

主机配置

REDFISH_HOSTS 或 JSON 文件中的每个主机可以指定以下信息:

  • address(必需):IP 地址或主机名
  • port(可选):端口号
  • username(可选):特定主机的用户名
  • password(可选):特定主机的密码
  • auth_method(可选):basicsession
  • 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"}]'

# 使用 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 模块进行依赖管理。

贡献

  1. 分叉仓库
  2. 创建功能分支
  3. 进行更改并添加测试
  4. 运行 go test ./...go vet ./...
  5. 提交拉取请求

📄 许可证

本项目采用 Apache 许可证 2.0 进行许可 - 详细信息请参阅 LICENSE 文件。

致谢

help

Runtime guide

cloud

Hosted runtime

Hosted servers run from a provider-managed environment. You usually connect the MCP client to the hosted endpoint or follow the provider's authorization flow, without keeping a local process alive

  1. Open provider connection page
  2. Authorize or copy endpoint
  3. Connect from your MCP client
terminal

Local runtime / other methods

Local servers run on your own machine or infrastructure. You normally copy the server_config into your MCP client, install the required package, and provide env variables from env_schema when needed

  1. Copy server_config
  2. Install required package
  3. Fill env variables and restart client