Redfish MCP Server

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.

Category
访问服务器

README

RedfishClient

一个轻量的 Redfish 客户端与固件更新工具集,聚焦于会话管理、资源访问与固件升级流程。代码结构清晰、可扩展,适合集成到自动化维护或制造测试流程中。

特性

  • 会话鉴权与统一请求封装(支持 X-Auth-Token
  • 资源服务分层:SystemsFirmware 等服务的便捷入口
  • 固件操作:上传镜像、触发 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)
    • TransportBaseRequestsTransport:以抽象基类定义传输接口,允许后续扩展不同 HTTP 客户端或协议实现。
    • AuthBaseSessionAuth:抽象鉴权流程,当前实现基于 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

Baidu Map

百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。

官方
精选
JavaScript
Playwright MCP Server

Playwright MCP Server

一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。

官方
精选
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。

官方
精选
本地
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。

官方
精选
本地
TypeScript
VeyraX

VeyraX

一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。

官方
精选
本地
graphlit-mcp-server

graphlit-mcp-server

模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。

官方
精选
TypeScript
Kagi MCP Server

Kagi MCP Server

一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。

官方
精选
Python
e2b-mcp-server

e2b-mcp-server

使用 MCP 通过 e2b 运行代码。

官方
精选
Neon MCP Server

Neon MCP Server

用于与 Neon 管理 API 和数据库交互的 MCP 服务器

官方
精选
Exa MCP Server

Exa MCP Server

模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。

官方
精选