基于Redfish协议的带外服务器管理系统,支持电源控制和状态查询。
cd mcp/bmc-server
npm install
在Cline MCP配置中设置环境变量:
{
"mcpServers": {
"bmc": {
"command": "node",
"args": ["/home/xilinx/Documents/arnic_eng/mcp/bmc-server/index.js"],
}
}
}
如果没有设置环境变量,可以在调用工具时传递BMC连接信息:
{
"bmc_ip": "192.168.1.100",
"username": "USERID",
"password": "YourPassword"
}
获取服务器电源状态和系统信息
参数
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"
}
开启服务器电源
参数
bmc_ip(必填):BMC IP地址username(可选):BMC用户名password(必填):BMC密码强制关闭服务器电源
参数
bmc_ip(必填):BMC IP地址username(可选):BMC用户名password(必填):BMC密码重启服务器电源(通过强制关闭+开启实现)
参数
bmc_ip(必填):BMC IP地址username(可选):BMC用户名password(必填):BMC密码说明: 由于某些BMC不支持直接的电源循环命令,此工具通过以下步骤实现电源循环:
优雅地关闭服务器(需要操作系统支持)
参数
bmc_ip(必填):BMC IP地址username(可选):BMC用户名password(必填):BMC密码优雅地重启服务器(需要操作系统支持)
参数
bmc_ip(必填):BMC IP地址username(可选):BMC用户名password(必填):BMC密码从服务器获取所有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
}
}
]
}
获取指定插槽的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
获取服务器启动进度状态
参数
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
获取电源单元(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
使用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
获取温度传感器数据,并优先使用新的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个温度传感器的详细数据
获取风扇状态和速度,并优先使用新的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个风扇的详细数据
配置好MCP服务器后,可以直接在Cline中使用自然语言控制服务器:
"查询服务器 192.168.1.100 的电源状态"
"开启服务器电源"
"关闭服务器"
"重启服务器"
# 运行 server
node index.js
# 然后通过 stdin/stdout 进行 MCP 协议通信
On:开启电源ForceOff:强制关闭PowerCycle:电源循环(重启)GracefulShutdown:优雅关机GracefulRestart:优雅重启ForceRestart:强制重启Nmi:发送NMI(不可屏蔽中断)⚠️ 重要通知:
rejectUnauthorized: false),适用于测试环境要启用证书验证,请修改index.js中的内容:
const agent = new https.Agent({
rejectUnauthorized: true // 启用证书验证
});
MIT
欢迎提交Issue和Pull Requests!