rackhands
Allows remote management of Dell servers through iDRAC Redfish, providing normalized health, event log (SEL), inventory, power, boot, firmware, BMC reset, and virtual media operations, with dangerous actions gated behind explicit planning and confirmation.
Allows remote management of Lenovo servers through XCC Redfish, providing normalized health, event log (PlatformLog), inventory, power, boot, firmware, BMC reset, and virtual media operations, with dangerous actions gated behind explicit planning and confirmation.
Allows remote management of Supermicro servers through Redfish, with IPMI fallback, providing normalized health, event log (Log1), inventory, power, boot, firmware, BMC reset, and virtual media operations, with dangerous actions gated behind explicit planning and confirmation.
rackhands
Remote hands for your racks, for you and your AI agent. One binary that reads and operates server BMCs across vendors. Redfish on Dell iDRAC, HPE iLO, Lenovo XCC, Supermicro and any DMTF-conformant BMC, with IPMI as the fallback. Nothing that can take a machine down runs until you allow it and confirm it.
Every vendor speaks its own Redfish dialect. The hardware log is Sel on iDRAC, IML on iLO, PlatformLog on XCC and Log1 on Supermicro. The health rollup hides in a different OEM block on each, and each one accepts a different set of reset types. Older and cheaper boxes speak only IPMI. The existing Redfish MCP servers either cover one vendor, or give an agent set_power_state with nothing in between. rackhands normalises the reads and puts every dangerous operation behind two keys, a plan and a confirmation.

Landing page: https://blackman99.github.io/rackhands/ · Docs: https://blackman99.github.io/rackhands/docs/
Install
go install github.com/Blackman99/rackhands/cmd/rackhands@latestOr download a single static binary for linux / macOS / windows from Releases.
Related MCP server: Redfish MCP Server
Usage
$ rackhands health
CRITICAL db-01 (Dell, via redfish)
Critical subsystem power supplies — iDRAC rollup
Critical psu PS2 Status — reading 0 W
CRITICAL web-07 (HPE, via redfish)
Critical fan Fan 3 — reading 0 %
OK k8s-12 (Lenovo, via redfish)
WARNING lab-x10 (Supermicro, via ipmi (fallback))
Warning temperature PSU2 Temp — reading 117 C
$ rackhands events web-07 --min critical # iLO IML, same shape as the iDRAC SEL
$ rackhands power db-01 force-off
rackhands: operation not allowed: "power" is off; start with --allow power (dangerous operations are disabled by default)Targets live in ~/.config/rackhands/targets.yaml (example). Use --host https://bmc --user root for a one-off.
TLS: BMCs usually ship a self-signed certificate. insecure: true is the lazy default; prefer pinning the leaf SHA-256 with tls_fingerprint: (print it with rackhands tls-fingerprint TARGET) or a real ca_file with insecure: false. When tls_fingerprint is set it is the trust model for that target — a mismatch fails closed and does not fall through to insecure.
Dangerous operations (power, boot, bmc-reset, firmware, virtual-media) need all of the following:
--allow CLASSwhen you start rackhands.allow: [CLASS]on that target in the config.Exactly one named target.
A confirmation: you type the target name, or pass
--yes <name>. Over MCP it is a single-use token, bound to the exact request, that the agent only gets back after it shows you the plan.
Every plan and execution is appended to an audit log. --dry-run shows the exact request and stops.
For agents: rackhands mcp is an MCP server on stdio. It is read-only by default. Dangerous tools are not even listed unless their class is allowed.
Defence in depth: give the agent a read-only BMC account. rackhands' gate lives in rackhands. The strongest guarantee lives in the BMC: an account with the Redfish
ReadOnlyrole (iLO: no Virtual Power and Reset / iLO Config privileges) or IPMIUserprivilege cannot power anything off, whatever runs with it. Every read command works with such an account. Keep a separate, privileged config for humans.rackhands inventory(and the MCPget_inventorytool) shows the effective privilege of the account each target logs in with, read-only, and warns when a target with no dangerousallow:classes logs in as Operator or Administrator:$ rackhands inventory TARGET VIA VENDOR … POWER ACCOUNT db-01 redfish Dell … On rackhands-ro (ReadOnly) x11 redfish Supermicro … On ADMIN (Administrator, can power off) WARN x11: logs in as Administrator, which can power off or reconfigure this machine, but no dangerous class is allowed for it; use a read-only BMC account (Redfish ReadOnly role, IPMI User privilege)
{"mcpServers": {"rackhands": {"command": "rackhands", "args": ["mcp"], "env": {"BMC_PASSWORD": "…"}}}}CI runs the binary against the DMTF Redfish-Mockup-Server, serving the DMTF mockup plus Dell, HPE, Lenovo and Supermicro mockups, and against OpenIPMI ipmi_sim (test/integration.sh).
See GOAL.md, ROADMAP.md, CONTRIBUTING.md. MIT licensed.
Available Tools
8 toolsget_boot_configBRead-only
Boot order, one-time/persistent boot override and allowed override targets.
| Name | Required | Description | Default |
|---|---|---|---|
| target | Yes | target name from list_targets |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false, so safety is covered. The description restates the returned content but adds no behavioral context such as failure modes for an unknown target, whether overrides require elevated privilege, or what the response shape looks like. For a read-only getter the bar is low, but this adds almost nothing beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One compact clause with no wasted words and the key content front-loaded. It is a bare noun fragment rather than a sentence, which slightly weakens structure but does not dilute the signal.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
A simple one-parameter read tool with read-only annotations and no output schema; the description enumerates the returned fields (boot order, overrides, override targets), which usefully compensates for the absent output schema. Only edge-case behavior is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With a single parameter at 100% schema description coverage ('target name from list_targets'), the schema already carries full semantics, so 3 is the baseline. The description's phrase 'allowed override targets' refers to return content rather than clarifying the target parameter, so it adds no parameter meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific resource and enumerates its contents ('boot order', 'one-time/persistent boot override', 'allowed override targets'), which clearly separates it from siblings like get_power_state or get_sensors. It lacks an explicit verb ('retrieve/read'), but the fragment is unambiguous about what data the tool surfaces.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No statement of when to call this tool versus alternatives, no prerequisites, and no reference to the sibling tools. The only implied guidance is that 'target' comes from list_targets, which lives in the schema, not the description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_event_logBRead-only
Newest hardware event log entries (SEL, iLO IML, XCC platform log …), normalised severity.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | newest N entries (default 30) | |
| target | Yes | target name from list_targets | |
| all_logs | No | include audit/lifecycle logs, not just the hardware event log | |
| min_severity | No | OK, Warning or Critical (default OK = everything) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=false and idempotentHint=false, so the safety profile is covered. The description contributes the multi-source scope of the log (SEL/IML/XCC) and the normalized severity concept, but says nothing about ordering guarantees, volume, or how the optional all_logs/min_severity flags change results beyond what the schema states.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded fragment with zero filler; the key qualifier ('newest') and the log scope appear immediately. It is slightly too terse to read as a complete sentence, but nothing is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries some burden for describing return shape, and 'normalised severity' partially covers that. However, it does not indicate the fields an entry contains (timestamp, source, message) or pagination behaviour, leaving the agent to discover the response format empirically.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all four parameters (limit, target, all_logs, min_severity) are already documented in the schema, including defaults and allowed severity values. The description adds no parameter-level detail beyond that, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names the resource (hardware event log entries) and adds concrete source examples (SEL, iLO IML, XCC platform log) plus the normalisation of severity. That is enough to distinguish it from list_targets, get_sensors, or get_health without opening the schema, though it never explicitly contrasts itself with those siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no statement of when to reach for this tool versus the sibling diagnostics tools (get_health, get_sensors, get_boot_config), nor any prerequisite such as needing a target name from list_targets. Usage is only inferable from the resource name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_firmware_inventoryCRead-only
Installed firmware versions (BIOS, BMC, NICs, RAID, drives, PSUs).
| Name | Required | Description | Default |
|---|---|---|---|
| target | Yes | target name from list_targets |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false, so the safety profile is covered structurally. The description adds no behavioral context whatsoever – nothing about the target requirement, coverage limits, or response shape – so it contributes essentially nothing beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is short with no waste, but it is a single parenthetical fragment rather than a structured, front-loaded statement of purpose. Its brevity reflects under-specification rather than disciplined conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description is the only place return content could be characterized, and it says nothing about what fields come back (versions, vendors, component identity) beyond a component list. For a read tool that requires a target from another tool, this leaves notable gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and there is only one parameter ('target', documented as 'target name from list_targets'), so the schema does the heavy lifting. The description adds no meaning about the target or how it scopes the returned firmware list, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names the resource (installed firmware versions) and enumerates covered component classes (BIOS, BMC, NICs, RAID, drives, PSUs), which is more specific than a tautology. However, it is a noun fragment with no verb and does not distinguish itself from the sibling get_inventory, which an agent may reasonably assume also covers firmware.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no prerequisites, and no mention of alternatives. With get_inventory and list_targets as siblings, the agent is left to infer whether this tool is the right source for firmware data versus the general inventory tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_healthBRead-only
Overall health (OK/Warning/Critical) and every component that is not OK, using vendor rollups (iDRAC, iLO) where available.
| Name | Required | Description | Default |
|---|---|---|---|
| targets | No | target names, "all" (default) or "tag:<tag>" |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=false and idempotentHint=false, so the safety profile is covered. The description adds genuinely useful behavior: only non-OK components are returned (a filtering rule) and health is derived from vendor rollups (iDRAC/iLO) where available. It does not explain the non-idempotent hint or any auth/rate-limit constraints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single tight sentence that front-loads the resource and the return vocabulary exclamation with zero filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description correctly carries the return-value burden by stating the health vocabulary and the non-OK filtering rule, which is what an agent needs to interpret results. For a one-optional-param read-only tool this is nearly complete; only explicit sibling routing is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the single optional 'targets' parameter is fully documented in the schema, including the 'all' default and 'tag:<tag>' syntax. The description adds nothing about parameters, so the schema does all the work; baseline 3 is correct.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific resource (overall server health) and goes further to define the returned shape: an OK/Warning/Critical rollup plus every non-OK component. That is concrete and distinguishable from raw-detail siblings like get_sensors or get_power_state, though no sibling is named explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use statement, no when-not, and no routing to alternatives such as get_sensors for per-sensor detail or get_event_log for history. The summary nature of the output weakly implies a triage use case, but nothing is stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_inventoryBRead-only
Vendor, model, serial, BIOS and BMC firmware, CPU/memory summary and power state for one or many servers, plus the effective privilege of the BMC account rackhands logs in with (account.role, account.can_control) and a warning when a target with no dangerous classes enabled uses an account that could power it off.
| Name | Required | Description | Default |
|---|---|---|---|
| targets | No | target names, "all" (default) or "tag:<tag>" |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint/openWorldHint, but the description adds genuinely non-obvious behavior: it surfaces the effective privilege of the logging-in BMC account (account.role, account.can_control) and emits a warning when a target lacking dangerous classes uses an account that could power it off. That proactive safety behavior is not derivable from the annotations or schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The entire description is a single run-on sentence that mixes the core purpose, three distinct return fields, and a conditional safety warning. It is not front-loaded; the important warning behavior is buried at the end, making it easy to miss.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the return-shape burden and does so reasonably by enumerating the main fields. A read-only tool with one well-documented parameter needs little more, though it omits any mention of result scope or how multiple targets are aggregated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single 'targets' parameter is fully documented with 'all' and 'tag:<tag>' syntax. The description only restates 'one or many servers' and adds no format or default detail beyond the schema, so the baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names the specific resource and enumerates the fields returned (vendor, model, serial, BIOS/BMC firmware, CPU/memory, power state, account role), so an agent knows exactly what it retrieves. It does not, however, distinguish itself from overlapping siblings like get_firmware_inventory or get_power_state, leaving scope boundaries ambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit statement of when to choose this tool over alternatives, despite several siblings (get_firmware_inventory, get_power_state, get_health) that clearly overlap. Usage is only implied by the field list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_power_stateBRead-only
Power state (On/Off) of one or many servers.
| Name | Required | Description | Default |
|---|---|---|---|
| targets | No | target names, "all" (default) or "tag:<tag>" |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false, so the safety profile is covered elsewhere. The description adds that bulk targets are supported and that the returned state is On/Off, which is useful given there is no output schema, but says nothing about missing/invalid targets or partial failures.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single tight sentence with the resource and return values front-loaded, no filler. Slightly under-specified rather than overly long, which is the better failure mode here.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read tool with full schema coverage, annotations, and no output schema, the description plus structured fields are nearly sufficient; the On/Off return values and multi-target scope are disclosed. Only edge-case behavior (unknown targets, empty results) is left unspecified.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the targets parameter already documents the 'all' default and the 'tag:<tag>' syntax in the schema. The description's 'one or many servers' only loosely restates that capability, adding no syntax or format detail beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific resource (power state) and its return values (On/Off), with the added scope of one or many servers. That is enough to separate it from read-only siblings like get_health or get_inventory, but it never explicitly contrasts itself with them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance, no prerequisites, and no mention of the alternatives or companion tools (e.g. list_targets for discovering valid target names). The agent must infer usage entirely.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_sensorsBRead-only
Temperatures, fans, voltages, power supplies and power draw with thresholds and health.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | only this kind: temperature, fan, voltage, psu, power | |
| target | Yes | target name from list_targets | |
| only_problems | No | only sensors whose health is not OK |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=false, and idempotentHint=false, so safety and mutability are covered. The description adds content scope (sensor types with thresholds and health) but does not disclose return format, pagination, or side effects beyond what annotations provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence with no wasted words, and it front-loads the sensor categories. It is appropriately sized, though the lack of a verb makes it slightly less structured than ideal.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only tool with annotations covering safety and a schema fully describing parameters, the description is adequate but incomplete. It omits when to use the tool, how results relate to siblings like get_health, and any output format details.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and all three parameters are documented in the schema. The description adds no parameter information, so the baseline of 3 applies when the schema carries full parameter semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names the specific resource categories returned (temperatures, fans, voltages, power supplies, power draw) and mentions thresholds and health, making the data scope clear. However, it lacks an explicit verb and does not differentiate itself from sibling tools like get_health or get_power_state, which may overlap.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives such as get_health or get_power_state. There is no mention of prerequisites, exclusions, or the required target parameter context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_targetsARead-only
List configured BMCs, their addresses, tags and which dangerous operation classes are enabled for each.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false, so the safety profile is covered. The description adds real value beyond that by disclosing what each listed entry contains, notably the enabled dangerous operation classes, which is the kind of context an agent needs to decide which target to act on. It does not address ordering, pagination, or the odd idempotentHint=false, which holds it below a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler. Every clause (addresses, tags, dangerous operation classes) conveys distinct information about the result set.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter read-only listing with no output schema, the description adequately conveys what comes back. It could go slightly further by framing this as the entry point that produces the target identifiers the sibling tools consume, but nothing essential is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so per the rubric the baseline is 4. There is no parameter syntax the description could add, and it does not need to.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('List') with a clear resource ('configured BMCs') and even enumerates the returned fields (addresses, tags, enabled dangerous operation classes). It is readily distinguishable from siblings like get_power_state or get_inventory, which operate on a single BMC rather than enumerating targets, though it never explicitly states that contrast.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use statement, no prerequisites, and no mention of alternatives or the get_* siblings. An agent could infer this is a discovery step before querying a specific BMC, but the description provides no guidance text to that effect.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
8 tool updates
- First observed
get_boot_config - First observed
get_event_log - First observed
get_firmware_inventory - First observed
get_health - First observed
get_inventory - First observed
get_power_state - First observed
get_sensors - First observed
list_targets
This server cannot be deployed
TDQS
Scored across 8 tools
Tools cover distinct data categories such as boot, logs, targets, firmware, health, inventory, power, and sensors. Minor overlap exists between get_health/get_sensors and get_inventory/get_firmware_inventory, but descriptions make the boundaries clear enough.
All names use consistent snake_case with a verb_noun pattern: get_* for reads and list_targets for collection listing. The convention is predictable throughout.
Eight tools are well-scoped for a BMC monitoring/inventory server. Each tool covers a distinct resource and there is no obvious redundancy.
The read-only monitoring and inventory surface is fairly complete, but no tools exist for power control, boot override setting, firmware update, log clearing, or other management actions referenced by the descriptions. This is a notable gap for a BMC management domain.
Maintenance
Related MCP Connectors
Scoped, audited SSH exec, sessions, and SFTP on your saved servers without exposing credentials
Read-only MCP access to a documented IT fleet: state, changes, posture. 15 tools.
- emisarOAuthdev.emisar
Let AI operate servers without SSH. Choose actions, approve risky changes, and audit every step.
- ZopDev MCPOAuthdev.zop
Cloud cost, inventory and governance on AWS/Azure/GCP. Read-only by default, optional scoped writes
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables interaction with Redfish-compliant BMC devices for server management, firmware updates, and hardware monitoring through session-based authentication and standardized API endpoints.1MIT
- FlicenseCqualityDmaintenanceEnables AI agents and LLMs to control and monitor Redfish-enabled hardware through power operations, system inventory, event logs, health monitoring, sensor readings, and user account management.151-
- FlicenseAqualityCmaintenanceEnables AI assistants to monitor and control server hardware (power, thermal, storage, firmware, event logs) via Redfish BMC API on Dell iDRAC, HPE iLO, Lenovo XCC, Supermicro BMC, and others.173-
- AlicenseAqualityAmaintenanceGoverned SSO/IAM operations for Keycloak and Authentik — login-failure, stale-permission, client-config, and MFA RCA, with unbypassable audit logging (MCP + CLI), budget/runaway guards, dry-run, and undo/rollback.29MIT