返回市场
基板管理控制器MCP服务器

基板管理控制器MCP服务器

作者:dibaotian2 星标更新:2025-11-01

项目介绍

BMC MCP Server

基于Redfish协议的带外服务器管理系统,支持电源控制和状态查询。

功能

电源管理

  • ✅ 获取服务器电源状态
  • ✅ 开启服务器电源
  • ✅ 强制关闭服务器电源
  • ✅ 重启服务器
  • ✅ 平稳关机
  • ✅ 平稳重启

硬件监控

  • ✅ 获取启动进度状态
  • ✅ 获取电源供应(PSU)状态
  • ✅ 获取功耗监控数据
  • ✅ 获取温度传感器数据
  • ✅ 获取风扇状态

PCIe设备管理

  • ✅ 获取所有PCIe设备信息
  • ✅ 获取指定插槽PCIe设备的信息

其他

  • ✅ 会话自动管理
  • ✅ 自动降级旧版和新版API

安装

cd mcp/bmc-server
npm install

配置

方法1:环境变量(推荐)

在Cline MCP配置中设置环境变量:

{
  "mcpServers": {
    "bmc": {
      "command": "node",
      "args": ["/home/xilinx/Documents/arnic_eng/mcp/bmc-server/index.js"],
    }
  }
}

方法2:调用工具时传递参数

如果没有设置环境变量,可以在调用工具时传递BMC连接信息:

{
  "bmc_ip": "192.168.1.100",
  "username": "USERID",
  "password": "YourPassword"
}

可用工具

1. get_power_state

获取服务器电源状态和系统信息

参数

  • bmc_ip(必填):BMC IP地址
  • username(可选):BMC用户名,默认是"USERID"
  • password(必填):BMC密码

返回示例:

{
  "PowerState": "On",
  "Status": {
    "State": "Enabled",
    "Health": "OK"
  },
  "Model": "Server Model",
  "SerialNumber": "SN123456",
  "BiosVersion": "1.0.0"
}

2. power_on

开启服务器电源

参数

  • bmc_ip(必填):BMC IP地址
  • username(可选):BMC用户名
  • password(必填):BMC密码

3. power_off

强制关闭服务器电源

参数

  • bmc_ip(必填):BMC IP地址
  • username(可选):BMC用户名
  • password(必填):BMC密码

4. power_cycle

重启服务器电源(通过强制关闭+开启实现)

参数

  • bmc_ip(必填):BMC IP地址
  • username(可选):BMC用户名
  • password(必填):BMC密码

说明: 由于某些BMC不支持直接的电源循环命令,此工具通过以下步骤实现电源循环:

  1. 强制关闭 - 强制关闭电源
  2. 等待 2 秒
  3. 开启 - 打开电源

5. graceful_shutdown

优雅地关闭服务器(需要操作系统支持)

参数

  • bmc_ip(必填):BMC IP地址
  • username(可选):BMC用户名
  • password(必填):BMC密码

6. graceful_restart

优雅地重启服务器(需要操作系统支持)

参数

  • bmc_ip(必填):BMC IP地址
  • username(可选):BMC用户名
  • password(必填):BMC密码

7. get_pcie_devices

从服务器获取所有PCIe设备信息

参数

  • bmc_ip(必填):BMC IP地址
  • username(可选):BMC用户名
  • password(必填):BMC密码

返回示例:

{
  "DeviceCount": 6,
  "Devices": [
    {
      "Id": "slot_5",
      "Name": "N/A",
      "Manufacturer": "AMD",
      "Model": "N/A",
      "DeviceType": "MultiFunction",
      "Status": {
        "State": "Enabled",
        "Health": "OK"
      },
      "PCIeInterface": {
        "PCIeType": "Gen5",
        "LanesInUse": 16,
        "MaxLanes": 16
      }
    }
  ]
}

8. get_pcie_device_by_slot

获取指定插槽的PCIe设备详细信息

参数

  • bmc_ip(必填):BMC IP地址
  • slot_id(必填):插槽ID,支持多种格式:
    • 数字格式:"3""5""13"
    • 完整格式:"slot_3""slot_5"
    • 板载设备:"ob_1""ob_2"
  • username(可选):BMC用户名
  • password(必填):BMC密码

返回示例:

{
  "Id": "slot_5",
  "Name": "N/A",
  "Manufacturer": "AMD",
  "Model": "N/A",
  "DeviceType": "MultiFunction",
  "Status": {
    "State": "Enabled",
    "Health": "OK"
  },
  "PCIeInterface": {
    "PCIeType": "Gen5",
    "LanesInUse": 16,
    "MaxLanes": 16
  },
  "Links": {},
  "Oem": {}
}

错误处理: 如果设备不存在,将提示可用设备ID列表:

Error: Device 'slot_99' not found. Available devices: slot_3, slot_5, slot_13, ob_1, ob_2, ob_4

9. get_boot_progress

获取服务器启动进度状态

参数

  • bmc_ip(必填):BMC IP地址
  • username(可选):BMC用户名
  • password(必填):BMC密码

返回示例:

{
  "PowerState": "On",
  "BootProgress": {
    "LastState": "OSRunning",
    "OemLastState": "FullyInitializedInOS"
  },
  "Status": {
    "State": "Enabled",
    "Health": "OK",
    "HealthRollup": "OK"
  },
  "Boot": {
    "BootSourceOverrideEnabled": "Disabled",
    "BootSourceOverrideTarget": "None",
    "BootSourceOverrideMode": "UEFI",
    "BootOrder": ["Boot0000", "Boot0001", "Boot0002"]
  }
}

可能的LastState值:

  • None - 没有启动信息
  • PrimaryProcessorInitializationStarted - CPU初始化
  • MemoryInitializationStarted - 内存初始化
  • PCIResourceConfigStarted - PCIe资源配置
  • SystemHardwareInitializationComplete - 硬件初始化完成
  • OSBootStarted - 操作系统启动开始
  • OSRunning - 操作系统正常运行 ✅

请参阅详细解释 BOOT_PROGRESS_STATES.md

10. get_power_supply_status

获取电源单元(PSU)的状态,并优先使用新的PowerSubsystem API

参数

  • bmc_ip(必填):BMC IP地址
  • username(可选):BMC用户名
  • password(必填):BMC密码

返回示例:

{
  "ApiVersion": "PowerSubsystem (New)",
  "PowerSupplies": [...],
  "CapacityWatts": 2160,
  "Status": {"State": "Enabled", "Health": "OK"}
}

实际测量: SR655_V3_1 支持 PowerSubsystem 新API,总容量为2160W

11. get_power_metrics

使用EnvironmentMetrics API获取功耗监控数据

参数

  • bmc_ip(必填):BMC IP地址
  • username(可选):BMC用户名
  • password(必填):BMC密码

返回示例:

{
  "ApiVersion": "EnvironmentMetrics",
  "PowerWatts": {"Reading": 176},
  "TemperatureCelsius": {"Reading": 21}
}

实际测量: SR655_V3_1 支持 Environment Metrics API,当前功耗为176W,环境温度为21°C

12. get_thermal_sensors

获取温度传感器数据,并优先使用新的ThermalSubsystem API

参数

  • bmc_ip(必填):BMC IP地址
  • username(可选):BMC用户名
  • password(必填):BMC密码

返回示例:

{
  "ApiVersion": "Thermal (Legacy)",
  "Temperatures": [
    {"Name": "CPU1 Temp", "ReadingCelsius": 45, "Status": {"Health": "OK"}},
    {"Name": "Ambient Temp", "ReadingCelsius": 21, "Status": {"Health": "OK"}}
  ]
}

实际测量: SR655_V3_1 支持新旧API,提供16个温度传感器的详细数据

13. get_fan_status

获取风扇状态和速度,并优先使用新的ThermalSubsystem/Fans API

参数

  • bmc_ip(必填):BMC IP地址
  • username(可选):BMC用户名
  • password(必填):BMC密码

返回示例:

{
  "ApiVersion": "Thermal (Legacy)",
  "FanCount": 12,
  "Fans": [
    {"Name": "Fan1A", "Reading": 4500, "ReadingUnits": "RPM", "Status": {"Health": "OK"}},
    {"Name": "Fan1B", "Reading": 4600, "ReadingUnits": "RPM", "Status": {"Health": "OK"}}
  ]
}

实际测量: SR655_V3_1 支持新旧API,提供12个风扇的详细数据

使用示例

在Cline中使用

配置好MCP服务器后,可以直接在Cline中使用自然语言控制服务器:

"查询服务器 192.168.1.100 的电源状态"
"开启服务器电源"
"关闭服务器"
"重启服务器"

手动测试

# 运行 server
node index.js

# 然后通过 stdin/stdout 进行 MCP 协议通信

支持的Redfish ResetType

  • On:开启电源
  • ForceOff:强制关闭
  • PowerCycle:电源循环(重启)
  • GracefulShutdown:优雅关机
  • GracefulRestart:优雅重启
  • ForceRestart:强制重启
  • Nmi:发送NMI(不可屏蔽中断)

安全注意事项

⚠️ 重要通知:

  1. 默认配置已禁用SSL证书验证(rejectUnauthorized: false),适用于测试环境
  2. 生产环境建议:
    • 启用SSL证书验证
    • 使用强密码
    • 限制网络访问
    • 定期更新BMC固件

故障排除

连接失败

  • 检查BMC IP地址是否正确
  • 确认BMC网络可达(ping测试)
  • 核实用户名和密码

命令执行失败

  • 检查BMC是否支持ResetType
  • 查看BMC日志
  • 确认用户权限足够

SSL证书错误

要启用证书验证,请修改index.js中的内容:

const agent = new https.Agent({
  rejectUnauthorized: true  // 启用证书验证
});

技术栈

  • Node.js
  • MCP SDK (@modelcontextprotocol/sdk)
  • Redfish API
  • node-fetch

许可证

MIT

贡献

欢迎提交Issue和Pull Requests!