Skip to main content
Glama

asus-ipmi-mcp

Give your AI agent hands and eyes on a physical machine. This MCP server connects to an ASUS IPMI Expansion Card and lets an agent (Claude Code, Cursor, Claude Desktop, …) see the machine's screen, move the mouse, type, press keys, read sensors, control power and update the card's firmware — exactly what you'd do in the card's web console, but as tools. No browser, no Java, no VNC.

agent ──MCP (stdio)──> asus-ipmi-mcp ──HTTPS/WebSocket──> IPMI card (AST2600) ──USB keyboard/mouse + video──> host
IMPORTANT

Unofficial project. asus-ipmi-mcp is an independent community project. It is not affiliated with, endorsed by, or supported by ASUSTeK Computer Inc. or American Megatrends (AMI). "ASUS", "AMI" and "MegaRAC" are trademarks of their respective owners and are used only to describe compatible hardware. It talks to the card through the same interfaces its own web console uses, learned by observing them. Use at your own risk; for official support contact ASUS.

What it's good for

  • Install or reinstall an OS without anyone at the machine: watch the installer, click through it, type answers.

  • Fix machines that dropped off the network: log in on the local console and repair the network, a service or a broken boot. The kind of problem that usually needs someone with a monitor and keyboard.

  • Change BIOS settings remotely: reboot into setup, navigate menus, save.

  • Provision a fleet of on-prem boxes step by step with an agent that can both see and act, for machines that have no PXE or automation set up yet.

  • Keep the IPMI card itself up to date: check for and apply card firmware updates with built-in safety checks.

Related MCP server: PiKVM MCP Server

See it in action

Everything below was done by an agent through this MCP server, on a headless ProArt X870E-CREATOR WIFI running Rocky Linux, with no monitor attached.

1. screenshot: the agent sees the login screen

2. click on the user: password prompt

Login screen seen through the IPMI card

Password prompt after clicking the user

3. type_text the password: logged in

4. press_keys + type_text in a terminal: network repaired

GNOME desktop after logging in

Terminal showing the host got its IP back

Screenshot 4 is a real repair: after the IPMI card was installed, the host's network cards got new PCIe names and the old network profiles no longer matched, so the machine had no IP. The agent opened a terminal over the KVM, found the mismatch with nmcli, rebound the profiles to the cards' MAC addresses and brought the link up. No SSH was possible, because the machine had no network.

It works before the OS too: firmware POST screen and the BIOS setup, navigated remotely with press_keys and click:

5. POST screen (AMI firmware)

6. BIOS setup, EZ Mode

AMI POST screen seen through the IPMI card

ASUS BIOS EZ Mode

7. Advanced Mode → Boot

8. Boot → CSM settings

BIOS boot menu

BIOS CSM submenu

Screenshot 9: before saving, the BIOS lists exactly the changes the agent made, so they can be checked:

BIOS save dialog listing the three changes

NOTE

On ASUS desktop/workstation boards the firmware shows its screens on theprimary display only. To see POST and BIOS through the card, set Advanced → NB Configuration → Primary Video Device to PCIE and disable the onboard graphics. The card's video has only a legacy-compatible boot path here, so the firmware turns on CSM by itself the first time; CSM and Secure Boot don't mix.

What it can do

Area

Capabilities

See

Screenshots of the host screen (full or cropped for small text), wait until the screen changes, wake a sleeping display

Act

Absolute mouse: click, double/right click, drag, scroll. Keyboard: type text, keys and combos (f2, del, ctrl+alt+delete, super, …)

Know

BMC firmware, host power state, sensors, KVM status (resolution, other viewers)

Power (opt-in)

On, off, graceful shutdown, restart; one-time boot device (CD, PXE, USB, BIOS setup)

Virtual media (opt-in, experimental)

Attach an ISO from an NFS/CIFS share as a virtual CD

Card firmware

Check for updates; download, verify and flash (opt-in) with dry run and confirmation token

Status

Feature

State

Screen, mouse, keyboard, KVM status

✅ tested on hardware

System info, sensors (read)

✅ tested

Firmware check, prepare + dry run on the card

✅ tested

Firmware flash via MCP

⚠️ same API as a tested manual flash, but not yet run through MCP

Power control, boot override

⚠️ implemented via Redfish, not yet tested on hardware

Virtual media

⚠️ implemented from the web console's API, not yet tested

Reports from other boards and firmware versions are very welcome. Please open an issue.

Supported hardware

Tested

ASUS IPMI Expansion Card-SI (90MC0AH0-MVUBY1), BMC firmware 1.3.13, on a ProArt X870E-CREATOR WIFI

Should work

Other ASUS boards from the compatible model list; likely other AMI MegaRAC BMCs with ASPEED AST2500/2600 and the H5Viewer (untested)

Install

Requires Node.js ≥ 22.19 on the machine running the agent, and network access to the card's management port.

Run straight from GitHub (from GitHub):

npx -y github:onprem-ai/asus-ipmi-mcp

Claude Code

claude mcp add asus-ipmi \
  -e ASUS_IPMI_HOST=192.168.0.144 -e ASUS_IPMI_USER=admin -e ASUS_IPMI_PASSWORD='…' \
  -- npx -y github:onprem-ai/asus-ipmi-mcp

Generic MCP config (Claude Desktop, Cursor, …)

{
  "mcpServers": {
    "asus-ipmi": {
      "command": "npx",
      "args": ["-y", "github:onprem-ai/asus-ipmi-mcp"],
      "env": {
        "ASUS_IPMI_HOST": "192.168.0.144",
        "ASUS_IPMI_USER": "admin",
        "ASUS_IPMI_PASSWORD": "…",
        "ASUS_IPMI_ALLOW_POWER": "0",
        "ASUS_IPMI_ALLOW_MEDIA": "0"
      }
    }
  }
}

For several machines, add one entry per card with different names.

Configuration

Variable

Default

Meaning

ASUS_IPMI_HOST

– (required)

Card IP / hostname

ASUS_IPMI_USER

admin

Card user (needs KVM privilege)

ASUS_IPMI_PASSWORD

– (required)

Card password

ASUS_IPMI_ALLOW_POWER

off

1 enables power and set_boot_once

ASUS_IPMI_ALLOW_MEDIA

off

1 enables media_configure_share, media_mount, …

ASUS_IPMI_ALLOW_FIRMWARE

off

1 enables firmware_prepare and firmware_flash (card firmware update)

ASUS_IPMI_SCREENSHOT_MAX

1024

Long side of returned screenshots (pixels)

Tools

Tool

What

screenshot

Current screen as an image (optional crop region for small text). Wakes a sleeping display.

wait_for_screen_change

Blocks until the screen changes (boot, install step), returns a screenshot

click, move_mouse, drag, scroll

Absolute mouse in screen pixels

type_text

Type text (US layout, \n = Enter)

press_keys

Keys / combos: enter, f2, del, ctrl+alt+delete, ctrl+alt+f3, super, with repeat

kvm_status

Resolution, display blank?, mouse mode, other KVM clients

system_info

BMC firmware, host power state, host BIOS/model

sensors

Temperatures, fans, voltages

media_status

Virtual-media settings and active redirections

power (opt-in)

On, ForceOff, GracefulShutdown, ForceRestart

set_boot_once (opt-in)

Next boot from Cd, Pxe, Usb, Hdd, BiosSetup

media_configure_share, media_list_images, media_mount, media_unmount (opt-in)

Attach an ISO from an NFS/CIFS share as virtual CD

firmware_check_update

Card firmware vs. releases on the ASUS support page (version, date, SHA-256)

firmware_prepare (opt-in)

Download + verify a card firmware (ASUS SHA-256, MD5, model match); dry_run lets the card verify it and cancels. Returns a confirm_token

firmware_flash (opt-in)

Flash the prepared image (needs the confirm_token), keeps settings, waits for the card to return

Card firmware update

Two steps on purpose: firmware_prepare (safe, can be a dry run on the card) then firmware_flash with the returned token. What it protects against:

  • wrong file: checks ASUS's published SHA-256, the MD5 inside the zip, and that the image is for the card's firmware model (e.g. KOMMANDO);

  • getting stuck: once in flash mode the card refuses all other logins until reset. On any error before flashing starts, the server cancels flash mode itself and waits until the card accepts logins again; only if that fails does it tell you to power-cycle;

  • interruption: the card has a single firmware slot. During firmware_flash (~10 min + reboot) never cut power to the host.

The update only touches the IPMI card, not the motherboard BIOS. The host keeps running.

Typical agent loop: screenshot → decide → click / type_text / press_keys → wait_for_screen_change.

How it works

  • Logs in to the card's web API, gets a KVM token, opens wss://<card>/kvm and speaks AMI's IVTP protocol (the same as the card's HTML5 viewer).

  • Video is ASPEED's compressed format. It is decoded with AMI's own decoder, which this package does not ship: on first use it is downloaded from your card (/libs/kvm/ast/decode_worker.js) and cached in ~/.cache/asus-ipmi-mcp/ (per card + firmware).

  • Keyboard and mouse are sent as USB HID reports through the same connection; the card presents itself to the host as a USB keyboard and absolute mouse.

  • Power, sensors and boot override use the card's Redfish API.

Things to know

  • One controlling KVM session per card. Using the tools takes control from an open browser viewer (the viewer gets a "Permission Requested" prompt and loses control after ~30 s).

  • Black screen / "no signal" usually means the host display is asleep. screenshot nudges the mouse to wake it. For unattended work, disable screen blanking on the host.

  • No monitor needed on the host: the card provides the display. A monitor attached to the board's own outputs may take the picture away from the card.

  • US keyboard layout is assumed. On hosts with another layout, symbols and some letters differ.

  • Sensors empty / host BIOS unknown: ASUS desktop/workstation boards need a special IPMI-enabled BIOS from ASUS support for full sensor integration. KVM, keyboard, mouse and power state work without it.

  • Power-button pass-through: on a ProArt X870E without the special BIOS, wiring the chassis power/reset buttons through the card made the board hang at the DRAM Q-LED. Wire them directly to the board.

  • The card's self-signed certificate is accepted (no TLS verification).

Safety

This server can type passwords, power-cycle machines, boot installers and flash firmware. Keep ASUS_IPMI_ALLOW_POWER, ASUS_IPMI_ALLOW_MEDIA and ASUS_IPMI_ALLOW_FIRMWARE off unless needed, use a dedicated card user, put the card on a management network, and review what the agent does — it's physical access over the network.

Development

npm install
ASUS_IPMI_HOST=… ASUS_IPMI_PASSWORD=… npm run smoke     # read-only tools + one screenshot

Protocol notes are in the source headers (src/kvm.js, src/media.js).

See CONTRIBUTING.md (hardware reports welcome) and SECURITY.md.

Manual hardware tests in test/ (they act on a real card and host – read them before running): smoke.js (read-only + screenshot), unlock.js (types a password on the host), firmware-dryrun.js (uploads firmware to the card and cancels; the card restarts).

License and disclaimer

MIT for this code. The video decoder is AMI property and is not included; it is fetched from your own device at runtime.

This project is not affiliated with ASUSTeK Computer Inc. or American Megatrends. It can control power, type into and flash firmware on real hardware; you are responsible for how you use it. Flashing firmware always carries a risk of making the card unusable.

Available Tools

13 tools
clickMouse clickB

Clicks at absolute screen coordinates (pixels of the full host screen, see screenshot metadata).

NameRequiredDescriptionDefault
xYesScreen x in pixels
yYesScreen y in pixels
buttonNo
doubleNo

TDQS

B3.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It discloses the coordinate space, which is useful, but says nothing about blocking behavior, what happens with out-of-bounds coordinates, whether the cursor is moved as a side effect, or whether the click targets whatever is focused — all relevant for an input-injection tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single sentence with the critical coordinate-frame constraint front-loaded in parentheses. Nothing superfluous and no buried information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is simple, and the coordinate-space clarification covers the biggest mistake mode. But with no annotations, no output schema, and half the parameters undocumented, an agent still lacks confirmation of click semantics (single vs double, button default, failure behavior).

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 50%: x/y are documented in the schema, while 'button' (enum) and especially 'double' are undocumented in both places. The description does add real value by clarifying that coordinates are full-host-screen absolute pixels rather than window-relative, but it never explains that 'double' produces a double-click.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (clicks) and resource (absolute screen coordinates) and pins the coordinate frame to 'pixels of the full host screen', which is the key ambiguity for a GUI-automation tool. It does not explicitly differentiate from siblings like move_mouse or drag, and double-click is left to a parameter rather than called out.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The pointer to 'screenshot metadata' implies the workflow (screenshot first, then click at those coordinates), but this is only implied. There is no explicit guidance on when to click versus drag/scroll/move_mouse, and no prerequisites or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

dragMouse dragB

Press left button at (x1,y1), move to (x2,y2), release.

NameRequiredDescriptionDefault
x1Yes
x2Yes
y1Yes
y2Yes

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral burden. It usefully discloses that the operation uses the left button and follows a press-move-release sequence, but it omits coordinate space, timing, side effects, error behavior, and return semantics.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is one tightly structured sentence with zero wasted words. It is front-loaded with the action and immediately explains the role of all four coordinates.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple pointer-automation tool, the core action and parameter roles are covered. However, with no annotations and no output schema, the description should also mention coordinate system, whether the drag is synchronous, and any meaningful side effects or return behavior.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate for the four undocumented numeric parameters. It does this well by mapping (x1,y1) to the press point and (x2,y2) to the release point, though it does not specify coordinate origin or units.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a precise mouse operation: press the left button at one point, move to another, and release. This clearly identifies a drag action and distinguishes it mechanically from click or move_mouse, though it does not explicitly name those alternatives.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains how the drag is performed but gives no guidance on when to use it instead of click, move_mouse, scroll, or other sibling tools. There are no stated preconditions, exclusions, or alternative-selection rules.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

firmware_check_updateCheck for IPMI card firmware updatesB

Compares the card firmware with the releases on the ASUS support page (version, date, SHA-256).

NameRequiredDescriptionDefault

No parameters

TDQS

B3.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations exist, so the description carries the entire behavioral burden, and it discloses very little. It implies an outbound lookup against the ASUS support page but does not state that network/Internet access is required, whether the tool is strictly read-only (i.e. never flashes or downloads firmware), how long the check takes, or what happens on failure or when the card model is unrecognized.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence that identifies the subject and the comparison target with no filler. It is perhaps over-compressed for a tool that performs an external network lookup, but nothing in it is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no parameters and no output schema, the description is the only place an agent can learn what comes back, and it only hints at it via '(version, date, SHA-256)' without saying whether the result is an up-to-date flag, a latest-release record, or a diff. For a zero-arg tool with no annotations this leaves a real gap, though the core operation is understandable.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, which is the baseline-4 case; the schema has nothing to document and the description is consistent with a no-argument call. The mention of version, date and SHA-256 adds color about what is compared, but it is not parameter semantics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific action (compare card firmware against ASUS support-page releases) and scopes it to the hardware's firmware lineage. It is clearly distinguishable from the sibling tools (screenshot, click, kvm_status, system_info) without opening any schema. It stops short of a 5 only because it never frames the outcome (e.g. 'reports whether an update is available').

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied rather than stated: an agent can infer this is the tool to reach for when it needs to know if the IPMI card firmware is current, and no sibling competes for that job. However, there is no explicit when/when-not guidance, no mention of prerequisites such as network access to the ASUS page, and no alternatives named.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

kvm_statusKVM session statusB

Connection state, screen resolution, whether the host display is blank, mouse mode, other KVM clients.

NameRequiredDescriptionDefault

No parameters

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations exist, so the description carries the full burden; it partly meets it by enumerating what the response reveals (connection state, resolution, blank display, mouse mode, other clients), which implies a non-mutating query. It does not state that it is read-only, side-effect free, or what 'other KVM clients' means in practice.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single short sentence with no filler, front-loaded on the most decision-relevant item (connection state). It is terse to the point of being clipped, but nothing is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description must report what comes back, and it does enumerate the returned fields. Given zero parameters and a simple read operation, this is close to sufficient; only the meaning of the client-list field is left ambiguous.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so the baseline is 4; nothing about arguments needs explaining. The field list in the description maps to return content rather than inputs, which is the right emphasis for a parameterless tool.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description is a telegraphic noun list of reported fields rather than a verb+resource statement, but the title and content make clear it reports KVM session state. An agent can infer it is a status read, though it is not explicitly differentiated from siblings like system_info or sensors.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to call this versus system_info, sensors, or screenshot, nor any note about polling or prerequisites. The agent must infer usage from the tool name alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

media_statusVirtual media statusC

Remote-media settings (share), images found on the share, active redirections.

NameRequiredDescriptionDefault

No parameters

TDQS

C2.8/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It implies a read-only status query by listing reported content, but does not explicitly state that it is side-effect free, what permissions or prerequisites are needed, or how the information is presented.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The text is a single short fragment with no wasted words and the key resource term ('Remote-media settings') is front-loaded. However, the fragment lacks a verb and reads as a label rather than a sentence, leaving the description underspecified rather than genuinely concise.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given zero parameters, no annotations, and no output schema, the description should explain what a call returns and when to use it. It enumerates three categories of remote-media data, which is a reasonable start, but without a verb or usage context the agent lacks a complete picture.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so per the baseline there is no parameter semantics to document; the description cannot add value beyond the (empty) schema. Baseline 4 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description lists the resource categories covered ('remote-media settings (share), images found on the share, active redirections') but supplies no verb, so it never states that it retrieves/reports status. It is distinguishable from siblings like kvm_status only because of the 'remote-media' wording, not because the description says what operation it performs.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no indication of when to use this tool, when not to, or which sibling (e.g., kvm_status) is the alternative. The agent must infer usage from the tool name alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

move_mouseMove mouseA

Moves the pointer to absolute screen coordinates (also wakes a sleeping display).

NameRequiredDescriptionDefault
xYes
yYes

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are supplied, so the description carries the full disclosure burden. It does surface one genuine side effect — waking a sleeping display — which is real behavioral value beyond the schema, but it omits whether the move is instant or animated, what happens with out-of-bounds or negative coordinates, and any permission requirements.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with the action first and the side-effect note in parentheses; every clause carries information and nothing is redundant.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter tool with no annotations, no output schema, and 0% parameter coverage, the description covers purpose and one side effect but leaves key calling details unspecified — coordinate origin, pixel units, and multi-monitor/bounds behavior. It is adequate to call the tool in the common case but thin for edge cases.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the schema only tells the agent that x and y are numbers. The description meaningfully adds that they are ABSOLUTE screen coordinates rather than deltas, which is the single most important semantic distinction here. It still omits the coordinate origin and units, so the two undocumented params are only partly compensated for.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('moves') plus the resource ('the pointer') and the exact target space ('absolute screen coordinates'), which separates it from relative-motion siblings like drag or scroll. It does not explicitly name a sibling it replaces, so an agent must infer that click/drag are the alternatives when a click is also wanted.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no explicit 'use this when…' or 'do not use this when…' guidance; the only usage signal is the parenthetical that it wakes a sleeping display, which implies a valid hang-recovery use case. The agent is left to infer that this is the hover-only alternative to click or drag.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

press_keysPress key / key combinationB

Presses keys, e.g. "enter", "esc", "f2", "del", "tab", "up", "ctrl+alt+delete", "ctrl+alt+f3", "super", "alt+f4". Several can be given in order.

NameRequiredDescriptionDefault
keysYesList of keys/combos pressed one after another
repeatNoRepeat the whole list (e.g. press down 5 times)
delay_msNoDelay between presses (default 120)

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It only lists example key values and sequence ordering; it does not state that input goes to the active/focused window, whether focus is required, how invalid keys are handled, or what side effects combinations like ctrl+alt+delete may cause.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single front-loaded sentence that states the action first, then gives compact examples and the ordering behavior. It is appropriately sized and contains no redundant explanation.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is simple and the schema fully documents its parameters, but with no annotations or output schema the description should say more about focus/active-window behavior and when to prefer type_text. It is adequate to identify the operation but has clear gaps for correct invocation in context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema already documents all three parameters. The description adds useful meaning by giving concrete key-name and key-combination syntax examples and clarifying that multiple keys can be passed in order, which is not fully conveyed by the schema alone.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: pressing keys, with concrete examples including combinations and sequences. It is clear what the tool does, but it does not differentiate from the sibling tool type_text, which is the main alternative for keyboard input.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives examples of valid keys but provides no explicit guidance on when to use this tool versus type_text or other input tools. There are no when-not conditions, prerequisites, or alternatives named, leaving selection between siblings to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

screenshotScreenshot of the host screenA

Returns the current host screen (via the IPMI card KVM). Wakes a blanked display by nudging the mouse. Optional crop region (screen pixels) to read small text.

NameRequiredDescriptionDefault
formatNoDefault jpeg for full screen (smaller), png for crops
regionNoCrop in screen pixels
max_sideNoDownscale so the long side <= this (default 1024)

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does disclose a genuine side effect: it nudges the mouse to wake a blanked display, which could disturb cursor state. It omits latency, error behavior when KVM is unavailable, and that the wake nudge may perturb coordinates, so it is good but not complete.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, each carrying distinct information: what it returns, the wake side effect, and the crop option. Nothing redundant and the core purpose is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 3-parameter, all-optional tool with no output schema, the description covers the essential behavior and the non-obvious side effect. The one gap is the return shape (image payload vs. reference) and whether max_side defaults actually apply when a region is supplied.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents format defaults, region shape, and the max_side range. The description only reinforces the region/crop use case for small text and adds no syntax or default detail beyond what is structured.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ("Returns the current host screen") plus the mechanism (IPMI card KVM), which immediately distinguishes it from the action siblings like click, move_mouse, and wait_for_screen_change. An agent knows exactly what it gets without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives a usage hint for the crop path ("to read small text") and explains the blank-display wake behavior, but never states when to choose this over wait_for_screen_change or when a full-screen capture is preferred. Usage is implied rather than routed.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

scrollMouse wheelC

Scrolls at a position. Positive amount scrolls up, negative down (wheel notches).

NameRequiredDescriptionDefault
xYes
yYes
amountYes

TDQS

C2.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full disclosure burden. It reveals the sign convention and that units are wheel notches, which is useful, but it omits whether scrolling targets the window under the cursor or requires prior focus, whether it requires the app to be foreground, and what is returned or how to confirm the scroll took effect.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single tight sentence with the direction rule front-loaded and no filler. Slightly dense parenthetical, but every clause carries information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 3-required-parameter input tool with no annotations and no output schema, an agent still cannot tell what coordinate frame x/y use or how to verify success. The definition is under-specified relative to the tool's complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It clarifies only 'amount' (sign direction, wheel notches) and leaves x and y completely undefined — no indication of coordinate space (screen vs. window), units, or origin.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb ('Scrolls') and resource/operation ('at a position'), which clearly separates it from siblings like click, drag, and press_keys. It does not explicitly name what it is not, but the purpose is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explains scroll direction semantics but gives no guidance on when to use this versus wait_for_screen_change, drag, or press_keys (e.g. Page Down). No preconditions or exclusions are stated, so the agent must infer usage.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sensorsSensor readingsC

Temperatures, fans, voltages from the BMC (Redfish).

NameRequiredDescriptionDefault
include_absentNo

TDQS

C2.6/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral burden. Naming the BMC/Redfish source is genuinely useful (implies out-of-band access that can fail if the BMC is unreachable), but it never states that the operation is read-only, what happens on BMC timeout, or how results are shaped — gaps that matter for an unannotated tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

It is a single short fragment with zero waste and the key content front-loaded, but it is under-specified rather than crisp — brevity here costs information rather than buying clarity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For an unannotated tool with an undocumented parameter and no output schema, the description should say more about what a reading looks like (names, units, status/thresholds) and the failure mode. As written, an agent still cannot predict the call's behavior beyond 'reads sensors'.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The single parameter include_absent has 0% schema description coverage and is not mentioned in the description at all, yet its meaning (include sensors that are present but not reporting/absent?) is not self-evident. The description does nothing to compensate for the coverage gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names the resource (sensor readings) and the exact data returned (temperatures, fans, voltages), plus the source (BMC via Redfish), so an agent knows what it is. It doesn't explicitly distinguish itself from siblings like system_info or media_status, so it stops short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no statement of when to use this versus alternatives. The implied use case (checking hardware health/thermal state out-of-band) is never articulated, and no exclusions or prerequisites are given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

system_infoBMC and host infoC

BMC firmware, host power state, host BIOS/model (via Redfish).

NameRequiredDescriptionDefault

No parameters

TDQS

C2.8/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. 'Via Redfish' implies a read-only query over the BMC network interface, but the description never states that it is non-mutating, that it requires BMC credentials/connectivity, or what happens when the host is off (power state still returned?). For a tool with zero annotation coverage this is a significant gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Extremely short and front-loaded, but it is a comma-separated fragment rather than a complete statement, which leaves the reader to infer that these items are returned rather than configured. Brevity here edges toward under-specification rather than crispness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema and no annotations, the description is the only documentation the agent has. Listing the three data categories gives a rough sense of the return payload, but it omits return structure, degradation behavior when the host is powered off, and relationship to sibling status tools.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so there is nothing for the description to disambiguate; baseline 4 applies. The '(via Redfish)' note usefully explains how the data is sourced.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names the resource domains retrieved (BMC firmware, host power state, host BIOS/model) and the protocol (Redfish), which is more informative than the bare name 'system_info'. But it is a noun fragment with no verb, and it does not distinguish itself from siblings such as kvm_status or firmware_check_update that plausibly expose overlapping information.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to call this versus kvm_status (which may also report host state) or firmware_check_update (BMC firmware). An agent must guess whether this is the summary/status tool or a duplicate of those siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

type_textType textA

Types text on the host keyboard (US layout; use \n for Enter, \t for Tab). Non-ASCII characters are not supported. Take a screenshot first: if the host locked its screen meanwhile, the text goes into the password field (a failed login).

NameRequiredDescriptionDefault
textYes
delay_msNoDelay between keys (default 30)

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and discloses key traits: US layout, escape sequences for Enter/Tab, non-ASCII rejection, and a critical security risk of typing into a password field. It still leaves some behavior unstated (e.g., whether text requires an already-focused field, what happens on failure), keeping it short of 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences, each carrying distinct value: purpose, input constraints, and safety prerequisite. There is no filler, and the critical constraint is front-loaded after the purpose statement.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple 2-parameter tool with no output schema, the description covers the essential context: what it does, format constraints, and a safety check. It is nearly complete but omits return behavior and focus requirements, which are minor gaps for this tool type.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 50% because the required 'text' parameter has no schema description. The description compensates by explaining escape sequences and the ASCII-only constraint for that parameter, adding meaningful semantics beyond the schema. It does not elaborate on delay_ms, which the schema already documents.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: 'Types text on the host keyboard'. The scope is clear, but it does not distinguish itself from the sibling press_keys tool, which likely also sends keyboard input, so an agent must infer which one applies to string typing versus key combos.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides a concrete prerequisite ('Take a screenshot first') tied to a real failure mode (locked screen), which is clear usage context. It does not, however, state when to prefer this over press_keys or other input tools, leaving the alternative implicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

wait_for_screen_changeWait until the screen changesA

Blocks until the host screen changes noticeably (or timeout), then returns a screenshot. Use after actions that take time (boot, install steps, page loads).

NameRequiredDescriptionDefault
timeout_secondsNoDefault 30
min_changed_fractionNoFraction of pixels that must change (default 0.01)

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It usefully discloses the blocking/synchronous nature, the timeout escape hatch, and that a screenshot is returned, but omits failure modes (error vs. current screen on timeout), any session/KVM connection prerequisite, and whether the returned image is pre- or post-change.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences with the core behavior front-loaded and the usage guidance second; no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-optional-parameter, no-annotation, no-output-schema tool, the description covers the essential contract: it blocks, it can time out, and it returns a screenshot. Only edge-case behavior on timeout and connection prerequisites are left implicit.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents both parameters and their defaults, giving a baseline of 3. The description mentions 'timeout' in passing but adds no meaning for min_changed_fraction or tuning guidance for either parameter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Blocks until the host screen changes noticeably') plus the outcome ('then returns a screenshot'), which cleanly differentiates it from the sibling 'screenshot' tool that presumably returns immediately.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives concrete usage context: 'Use after actions that take time (boot, install steps, page loads).' Clear positive guidance, but no explicit exclusions or named alternative (e.g., 'use screenshot instead if the screen is already stable').

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.

  1. 13 tool updatesv0.1.0
    • First observedclick
    • First observeddrag
    • First observedfirmware_check_update
    • First observedkvm_status
    • First observedmedia_status
    • First observedmove_mouse
    • First observedpress_keys
    • First observedscreenshot
    • First observedscroll
    • First observedsensors
    • First observedsystem_info
    • First observedtype_text
    • First observedwait_for_screen_change

TDQS

B3.4/5.0

Scored across 13 tools

Disambiguation5/5

Each tool maps to a clearly distinct action or resource: individual mouse primitives (click, move_mouse, drag, scroll), keyboard primitives (type_text, press_keys), screen observation (screenshot, wait_for_screen_change), and read-only BMC queries (kvm_status, system_info, sensors, media_status, firmware_check_update). The only near-overlap is screenshot vs wait_for_screen_change, but the blocking semantics make the boundary explicit.

Naming Consistency4/5

Action tools consistently use verb_noun or single verbs (move_mouse, type_text, press_keys, wait_for_screen_change), while status tools use noun phrases (kvm_status, system_info, media_status). This split is predictable and readable, though bare names like drag, scroll, and screenshot break the pattern slightly.

Tool Count5/5

13 tools is well within the sweet spot and every tool covers a distinct capability of a KVM/IPMI interaction loop (observe, act, wait, query). Nothing feels redundant or padded.

Completeness3/5

Observation and input are fully covered, but core IPMI operations are missing: there is no power control (on/off/reset/cycle), and media_status is read-only with no tool to mount/unmount an ISO. An agent can drive the screen but cannot power-cycle the host or attach remote media, which are key BMC workflows.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • F
    license
    A
    quality
    D
    maintenance
    Enables AI assistants to remotely control Sipeed NanoKVM hardware for BIOS-level management of servers and headless machines. It provides tools for power control, keyboard and mouse emulation, screen capture, and ISO image mounting via the Model Context Protocol.
    19
    14
    -
  • A
    license
    Not graded
    quality
    B
    maintenance
    MCP server that enables AI to see and control a physical computer via a JetKVM device for screen viewing, mouse/keyboard input, media mounting, and power management.
    17
    MIT
  • A
    license
    A
    quality
    A
    maintenance
    An MCP server that gives AI agents smart hands for physical machines, controlling them via IP-KVM, BMC, and SSH with visual boot-phase classification and operator-gated actions.
    34
    175 PyPI
    8
    Apache 2.0