MCP server for managing bare-metal infrastructure — Redfish BMC operations and network switch queries for AI assistants
Server has 6 tools with clear verb-noun naming (get_*, set_*, validate_*) and detailed descriptions (avg 180 chars). Input schemas are present with typed arrays and descriptions. However, output schemas are not formally documented in the code, responses are inferred from docstrings. Error handling is minimal (generic try/catch blocks returning status/message). No tool annotations (readOnlyHint/destructiveHint). Parameter descriptions are good but lack explicit constraints (e.g., valid ResetType values not enumerated). Composition is sound, tools are single-responsibility and chainable. Missing: pagination guidance, per-item error reporting for batch operations, and recovery hints in error messages.
Retrieve granular firmware components like NICs, RAID controllers (PERC/Smart Array), Physical Drives/SSDs, Power Supplies, CPLD, and Backplanes. DO NOT USE THIS TOOL for basic BIOS or base BMC/iDRAC/iLO versions — use `get_system_info` instead, which is much faster. Uses a single optimized Redfish request for Dell ($expand) and concurrently fetches members for HPE. Always use `name_filter` (e.g., ['NIC', 'RAID', 'SSD']) to limit the results.
Unified hardware inventory: CPUs, memory, NICs, drives, volumes (Dell/HPE/Supermicro compatible).
Read current power state (On/Off) for servers, in parallel.
Basic system summary (vendor, model, serial, power, health, BIOS version, BMC firmware version), in parallel. Lightweight — only 2 Redfish requests per server. Use this instead of get_firmware_inventory when you only need BIOS and iDRAC/iLO versions. Works across all vendors (Dell, HPE, Supermicro) and all generations.
Set power state via Redfish Reset action (Graceful/Force), in parallel.
Output schemas not formally documented. Responses inferred from docstrings only (e.g., get_power_state returns {server_id, status, power_state} but no JSON Schema definition visible). LLMs cannot reliably parse or chain results without explicit schema.
set_power_state accepts 'state' parameter as free-form string (e.g., 'On', 'ForceOff', 'GracefulShutdown', 'ForceRestart') but does not declare enum constraint. LLMs may hallucinate invalid ResetType values. Should use enum: ['On', 'ForceOff', 'GracefulShutdown', 'ForceRestart', 'Nmi', 'On', 'PowerCycle'].
Error handling is generic (try/catch returning {status: 'error', message: str(e)}). No recovery guidance, no error classification (retryable vs fatal), no actionable hints. E.g., 'Connection timeout' should suggest 'Verify Redfish credentials and network connectivity.'
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 59 | <=2025-11-25 | v2 |
Preflight host definitions and credential presence for Redfish, serial, VNC, network inventory, or Dell XML operations. Secret values are never returned.
Batch operations (server_ids array) return per-server results but do not document pagination or result limits. If 100 servers are queried, response could be very large. No guidance on max batch size or chunking strategy.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). set_power_state is destructive but not marked. get_* tools are read-only but not annotated. Agents cannot infer safety/retry semantics without explicit hints.