Redfish MCP Server
Enables interaction with Redfish-compliant BMC devices for server management, firmware updates, and hardware monitoring through session-based authentication and standardized API endpoints.
README
RedfishClient
一个轻量的 Redfish 客户端与固件更新工具集,聚焦于会话管理、资源访问与固件升级流程。代码结构清晰、可扩展,适合集成到自动化维护或制造测试流程中。
特性
- 会话鉴权与统一请求封装(支持
X-Auth-Token) - 资源服务分层:
Systems、Firmware等服务的便捷入口 - 固件操作:上传镜像、触发
SimpleUpdate、轮询任务、删除占位条目、Power Cycle - 端点可配置:通过
endpoints.json适配不同 BMC 实现 - 结构化日志(控制台高可读性,文件详细排障)
目录结构
RedfishClient/
├─ main.py # 使用示例与演示流程
├─ endpoints.json # 端点配置(按 BMC 类型)
├─ redfish_client/
│ ├─ client.py # 客户端聚合器(传输、鉴权、资源入口)
│ ├─ config.py # 日志与端点加载/查询
│ ├─ auth/
│ │ ├─ base.py # 鉴权抽象基类
│ │ └─ session.py # 会话鉴权实现
│ ├─ transport/
│ │ ├─ base.py # 传输抽象基类
│ │ └─ requests.py # 基于 requests 的传输实现
│ └─ resources/
│ ├─ base.py # 资源服务基类
│ ├─ systems.py # Systems 资源服务
│ └─ firmware.py # 固件服务(上传/更新/任务/删除等)
└─ bmc_client/
└─ bmc.py # 另一个 Web API 会话客户端(可选/示例)
使用 uv 管理依赖与环境
- 初始化并安装依赖:
uv sync
- 启动示例或服务:
- 示例:
uv run python -m main - MCP 服务:
uv run python -m mcp_server
- 示例:
- 添加依赖:
- 核心:
uv add requests loguru fastmcp - 可选:
uv add --optional jsonpath
- 核心:
- 升级依赖:
- 全量:
uv sync --upgrade - 指定:
uv add fastmcp@latest
- 全量:
- 导出依赖(供非 uv 环境使用):
uv export -o requirements.txt
快速开始
以固件升级流程为例(使用 uv 运行):
from redfish_client.client import RedfishClient
from redfish_client.config import setup_logging, load_endpoints
setup_logging(console_level='DEBUG')
load_endpoints()
client = RedfishClient(
host="<BMC_IP>", port=443,
username="<USER>", password="<PASS>",
verify_ssl=False, timeout=60,
bmc_type="default", # 对应 endpoints.json 的键
)
if client.login():
# 可选:设置升级是否保留 BIOS/BMC 配置
client.firmware.preset_save_config('ActiveBIOSTarget', False)
# 上传固件镜像(本地文件路径)
client.firmware.upload_image('firmware.tar')
# 触发更新(返回任务 URI,部分实现可能在响应体或 Location 头部)
task_uri = client.firmware.simple_update('ActiveBIOSTarget')
# 轮询任务直至完成(可根据需要处理返回对象)
if task_uri:
client.firmware.wait_for_task_completion(task_uri)
# 执行 Power Cycle(部分平台要求)
client.firmware.power_cycle()
client.logout()
更多示例可参考 main.py。运行方式:uv run python -m main
启动后,可将 sse 服务地址配置到支持 MCP 服务的客户端中 如: { "redfish-client": { "transport": "sse", "url": "http://10.2.48.155:8000/sse" } } 📚 Docs: https://gofastmcp.com
端点配置
通过 endpoints.json 定义不同 BMC 类型的端点映射:
{
"default": {
"SessionService": "/redfish/v1/SessionService/Sessions",
"FirmwareInventory": "/redfish/v1/UpdateService/FirmwareInventory",
"StartUpdate": "/redfish/v1/UpdateService/Actions/UpdateService.StartUpdate",
"UpdateService": "/redfish/v1/UpdateService",
"ActiveBIOSTarget": "/redfish/v1/UpdateService/FirmwareInventory/ActiveBIOS",
"ActiveBMCTarget": "/redfish/v1/UpdateService/FirmwareInventory/ActiveBMC"
}
}
- 通过
load_endpoints()读取配置,再由get_endpoint(bmc_type, service)解析具体路径。 - 若某服务未配置,将回退到代码中的默认路径(如
FirmwareInventory)。
设计模式
- 抽象工厂 / 策略(Strategy)
TransportBase与RequestsTransport:以抽象基类定义传输接口,允许后续扩展不同 HTTP 客户端或协议实现。AuthBase与SessionAuth:抽象鉴权流程,当前实现基于 Redfish 会话与X-Auth-Token,可替换为其他认证策略。
- 外观(Facade)/ 聚合器
RedfishClient聚合传输、鉴权与资源服务,提供统一的get/post/patch/delete与资源入口,简化上层调用。
- 服务分层(Service Layer)
resources/*将具体资源(Systems、Firmware)封装为服务对象,职责明确,便于扩展与测试。
- 依赖注入(Constructor Injection)
ResourceBase将客户端实例注入各服务,统一访问传输与鉴权上下文。
- 数据驱动配置
- 使用
endpoints.json以数据驱动端点,减少分支逻辑与硬编码,便于跨平台适配。
- 使用
日志
- 通过
setup_logging()统一配置控制台与文件日志:- 控制台:彩色输出、等级图标、方法/行号,便于交互式观察。
- 文件:详细排障格式,按周轮转与保留。
- 常见请求/响应摘要与异常均有记录,适合问题定位与审计。
关键 API 速览
- 会话:
client.login()/client.logout() - 请求:
client.get/post/delete/patch(path, ...) - Systems:
client.systems.get_members()、get_member_details(member_path) - Firmware:
- 查询:
get_firmware_inventory()、get_firmware_info(fid)、get_firmware_inventory_expanded() - 上传:
upload_image(path)(自动检测New*占位条目) - 更新:
preset_save_config(service, flag)、simple_update(service)、power_cycle() - 任务:
get_task_status(uri)、wait_for_task_completion(uri)、wait_for_new_firmware_marker() - 删除:
delete_uploaded_firmware()
- 查询:
开发建议
- 若对接不同厂商/平台,优先通过
endpoints.json添加/修改端点,再在服务层扩展兼容逻辑。 - 需要新增协议或传输方案时,实现
TransportBase的子类并在RedfishClient中替换即可。 - 严禁在代码中硬编码敏感信息;使用外部配置或环境变量传递凭证。
推荐服务器
Baidu Map
百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。
Playwright MCP Server
一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。
Magic Component Platform (MCP)
一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。
Audiense Insights MCP Server
通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。
VeyraX
一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。
graphlit-mcp-server
模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。
Kagi MCP Server
一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。
e2b-mcp-server
使用 MCP 通过 e2b 运行代码。
Neon MCP Server
用于与 Neon 管理 API 和数据库交互的 MCP 服务器
Exa MCP Server
模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。