Skip to main content
Glama

arkkvm-mcp

MCP server for ArkKVM IP-KVM devices. It lets an AI agent see and operate a physical computer below the OS level (BIOS/UEFI, boot menus, installers, login screens): HDMI screenshots, USB keyboard and mouse, ATX power buttons, Wake-on-LAN and virtual media.

It talks to the device directly the same way the web UI does: WebRTC with signaling over /webrtc/signaling/client, the H.264 video track decoded locally with PyAV, and JSON-RPC on the rpc data channel.

Tools

Tool

Purpose

screenshot(max_width=1280, wait_ms=0)

JPEG of the HDMI input; mouse tools use this image's pixel coordinates

click(x, y, button, count) / move_mouse / drag / scroll

Absolute USB mouse

type_text(text, layout)

Types text as keystrokes (us or de layout of the target OS)

press_keys(keys, repeat, hold_ms)

Combos such as ctrl+alt+delete, f2, super+r, down

power(action)

ATX power-short, power-long, reset (needs the ATX board; untested)

wake_on_lan(mac_address)

Sends a WOL packet from the KVM (untested)

mount_media_url(url, mode, detach_usb_drive)

Attach an HTTP(S) ISO/IMG as CD-ROM or disk (streamed, needs a server with range requests)

list_media / mount_media_storage(filename, mode, detach_usb_drive)

Images stored on the KVM itself

unmount_media

Detach the current virtual media

usb_drive_status / usb_drive_attach(target)

Virtual USB Drive (file transfer): attach to host, kvm or none

usb_drive_list / usb_drive_upload / usb_drive_download / usb_drive_delete

Manage files on the Virtual USB Drive (needs it attached to the KVM)

status

Firmware, video signal, USB, virtual media, LEDs

rpc_call(method, params)

Any device JSON-RPC method (destructive ones blocked by default)

release_session

Disconnects so the web UI can be used

Related MCP server: mcp-serial-hid-kvm

Configuration

Variable

Default

Meaning

ARKKVM_HOST

– (required)

192.168.1.50 or https://arkkvm.example

ARKKVM_PASSWORD

–

Required when the device has a local password (auth mode is detected automatically)

ARKKVM_KEYBOARD_LAYOUT

us

Default layout for type_text (us, de)

ARKKVM_IDLE_TIMEOUT

120

Seconds without tool calls before the session is released (0 = never)

ARKKVM_KEY_DELAY_MS

15

Delay between HID reports

ARKKVM_SCREENSHOT_WIDTH

1280

Default screenshot width and coordinate space before the first screenshot

ARKKVM_SETTLE_MAX_MS

2000

Max time screenshot waits for the picture to stop changing (animations, H.264 sharpening)

ARKKVM_ALLOW_DANGEROUS_RPC

–

1 allows factory reset, network changes, … through rpc_call

ARKKVM_VERIFY_TLS

–

1 to verify the device certificate when using https://

Usage

Requires uv (Python 3.12+ is fetched automatically).

git clone https://github.com/tioan/arkkvm-mcp ~/Projects/arkkvm-mcp

The machine running the server needs UDP access to the KVM (WebRTC), so run it on the same LAN or over a VPN.

Claude Code:

claude mcp add arkkvm -e ARKKVM_HOST=192.168.1.50 -e ARKKVM_PASSWORD='<password>' -e ARKKVM_KEYBOARD_LAYOUT=de -- uv run --directory ~/Projects/arkkvm-mcp arkkvm-mcp

Claude Desktop (claude_desktop_config.json):

{
  "mcpServers": {
    "arkkvm": {
      "command": "uv",
      "args": ["run", "--directory", "/Users/<you>/Projects/arkkvm-mcp", "arkkvm-mcp"],
      "env": { "ARKKVM_HOST": "192.168.1.50", "ARKKVM_PASSWORD": "<password>", "ARKKVM_KEYBOARD_LAYOUT": "de" }
    }
  }
}

Notes

  • Session takeover: the device allows a single active session. A tool call takes the session over from an open browser tab (and vice versa); the server reconnects automatically on the next call and releases the session after the idle timeout.

  • type_text sends key positions, so layout must match the keyboard layout configured on the target OS. BIOS/UEFI setup screens normally use us.

  • screenshot fails with hdmi_disconnected when no video source is attached.

  • Virtual media is read-only in both modes. cdrom shows an optical drive (best for BIOS/UEFI and Windows installers); disk shows a USB stick (faster; a hybrid ISO then appears as a disk without drive letter in Windows). Switching mode re-enumerates all KVM USB devices for about a second and is refused while the KVM's file-transfer "Virtual USB Drive" is attached to the host; pass detach_usb_drive=true to detach it first. Windows may reassign drive letters afterwards.

  • Firmware quirk: after a refused mode switch getMassStorageMode already reports the new mode while the host still sees the old one. Recover by switching to the other mode and back.

  • Tested against ArkKVM firmware 0.1.26050820 and 0.5.260914221 (system 0.5.26091413) with a Windows 11 target (1920x1080@60, German layout).

Test status

Tested against a real ArkKVM (firmware 0.5.260914221 / system 0.5.26091413) with a Lenovo ThinkCentre M720q running Windows 11 (1920x1080@60, German layout):

Feature

Status

Connection, login (no password and password mode), session takeover/reconnect

tested

Screenshots (Windows desktop, Lenovo POST screen, BIOS setup)

tested

Keyboard: text (DE/US layouts), key combos, BIOS navigation

tested

Mouse: move, left/right/double click, drag, scroll (OS and BIOS)

tested

Reboot into BIOS setup via POST key (F1 on Lenovo)

tested (manual timing, no dedicated tool yet)

Virtual media: CD-ROM and disk mode, from URL and from KVM storage

tested

Virtual USB Drive: upload, download, list, delete, attach host/KVM

tested

Wake-on-LAN (wake_on_lan)

not tested

ATX power control (power)

not tested: no ATX extension board available

Audio (HDMI audio to KVM, virtual microphone to target)

not tested, and not exposed as tools yet

Virtual USB Drive (file transfer)

The KVM has a FAT-formatted drive (~16 GB) for moving files to and from the target. It is attached to exactly one side at a time:

  • host: the target sees a normal USB stick (BIOS/UEFI and OS, no drivers needed).

  • kvm: the drive is detached from the target and the usb_drive_* file tools work.

Typical flow to hand a file to the target: usb_drive_upload(..., switch_to_kvm=true) and then usb_drive_attach("host"). Reverse it to collect logs from the target. The file tools refuse to detach the drive from the host unless switch_to_kvm=true is passed, so a running copy on the target is not cut off by accident. Folders are deleted only with recursive=true (the firmware always deletes recursively). Tested: Windows-written file read on the KVM, 5 MiB random file round trip with matching SHA-256 on both sides, ~8 MiB/s upload over LAN.

Notes:

  • Wait a few seconds after usb_drive_attach("host") before the target OS shows the drive. Drive letters can change when the KVM re-enumerates its USB devices.

  • While this drive is attached to the host, the KVM refuses to switch virtual media between CD-ROM and disk mode (see detach_usb_drive).

  • Formatting or repairing the drive is not exposed; reformatting it on the target may break it for the KVM (vendor docs).

Input reliability

The firmware handles every message on the rpc data channel in its own task, so HID reports sent without waiting can overtake each other (observed: arkkvm typed as rakkvm). This server therefore waits for the device's acknowledgement of each keyboard/mouse report. Typing runs at roughly 15 characters per second.

Credits

This is an independent project, not affiliated with or endorsed by Ark Intelligent.

  • ArkKVM by Ark Intelligent – the hardware and firmware this server talks to. The protocol (WebRTC signaling, JSON-RPC methods and parameters, auth/CSRF, virtual media and file transfer endpoints) was derived by reading the open-source arkkvm-app and arkkvm-app-frontend (GPL-2.0-or-later). No code from these repositories is included here.

  • JetKVM – the ArkKVM firmware follows JetKVM's API design, which made the device easy to approach.

  • jetkvm-mcp by shvartzj1 – inspired the approach of driving a KVM directly over WebRTC with aiortc and decoding screenshots locally.

  • Built on aiortc, PyAV, Pillow and the MCP Python SDK.

License

MIT

Available Tools

22 tools
clickB

Click at (x, y) in screenshot pixel coordinates. count=2 for a double click.

ParametersJSON Schema
NameRequiredDescriptionDefault
xYes
yYes
countNo
buttonNoleft

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.1/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 burden and falls short: it does not say whether this is a real input event, what happens at screen edges, or whether a prior screenshot is required. Only the count=2 double-click behavior is disclosed.

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, front-loaded with the core action and coordinate basis, with the optional double-click convention appended. No filler.

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?

An output schema exists so return values need no explanation, and the description covers the essential call semantics. However, for a gesture tool it omits coordination details such as needing a screenshot first or how coordinates relate to the sibling screenshot output.

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 description must compensate. It usefully clarifies that x/y are screenshot pixel coordinates (not normalized or window-relative) and that count=2 means double click, but the button parameter is left entirely to the enum/default.

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 (Click) plus the coordinate basis (screenshot pixel coordinates), which is more informative than a bare 'click'. It implicitly differentiates from siblings like move_mouse and drag, though it never names them.

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 move_mouse, drag, or press_keys, nor when clicking is inappropriate. Usage is only inferable from the tool name itself.

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

dragC

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

ParametersJSON Schema
NameRequiredDescriptionDefault
x1Yes
x2Yes
y1Yes
y2Yes
buttonNoleft

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.9/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 helpfully decomposes the gesture into press, move, and release, which is genuine behavioral detail beyond the name 'drag'. But it omits the button parameter, coordinate space, timing/interpolation, and whether a session must already exist.

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 with no wasted words, and the operation order is clear. It is arguably too terse for a five-parameter tool, but structurally efficient.

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?

An output schema exists so return values need not be explained, but with 0% schema coverage and no annotations the description leaves the button parameter, coordinate system, and session prerequisites undocumented. It is incomplete for a five-parameter input tool.

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% and only titles (X1, X2, Y1, Y2, Button) exist. The description maps x1/y1 to the press point and x2/y2 to the release point, adding some meaning, but it never mentions the button parameter at all despite right/middle options existing.

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 operation with named coordinates: press at (x1, y1), move to (x2, y2), release. An agent can tell this is a drag gesture, distinct from click or move_mouse by the press-move-release sequence. However, it does not explicitly name or differentiate itself from siblings like click or move_mouse.

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 when-to-use guidance, no mention of alternatives (e.g., use click instead for a simple press), and no prerequisites or context such as needing an active session. The agent must infer all of this.

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

list_mediaB

List images stored on the KVM's internal storage, free space and what is mounted now.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.4/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. 'List' implies a harmless read, but it states nothing about read-only guarantees, permissions, or whether the operation has side effects; it only expands on the returned data shape.

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?

One front-loaded sentence with no filler; the resource is identified before the returned fields. Slightly loose phrasing ('and what is mounted now') but every clause contributes information.

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?

An output schema exists, so return values need not be documented here, and the zero-parameter signature makes the description nearly complete. The remaining gap is the unexplained relationship to the mount/unmount siblings, i.e., whether newly mounted media shows up in this listing.

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. There is nothing for the description to clarify beyond what the empty schema already conveys.

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?

A specific verb ('List') plus a precisely scoped resource ('images stored on the KVM's internal storage'), and it enumerates the three things returned: images, free space, and current mounts. It is distinguishable from the sibling usb_drive_list by the 'internal storage' scoping, though it never names that sibling to sharpen the contrast.

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?

No explicit when-to-use statement or named alternatives, but the listing scope ('what is mounted now') implies its role as the discovery step preceding mount_media_url/mount_media_storage/unmount_media. Usage is inferable rather than stated.

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

mount_media_storageB

Attach an image stored on the KVM (see list_media) as a read-only virtual USB CD-ROM or disk. Mode semantics and detach_usb_drive as in mount_media_url.

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNocdrom
filenameYes
detach_usb_driveNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

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 does disclose the key trait that the attached device is 'read-only'. However it says nothing about state effects such as what happens if a drive is already mounted, whether attach is reversible, or what detach_usb_drive actually destroys, leaving mutation behavior largely opaque by offloading it to a sibling.

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?

Two tight sentences with the action and resource front-loaded and no filler. Compression comes at the cost of offloading real content to sibling tools, but structurally there is no waste.

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?

An output schema exists so return values need not be described, and the read-only nature plus sibling cross-references are covered. The gap is the undocumented 3-parameter surface and unstated mount-state side effects, which are material for a tool that changes VM device state.

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 and largely does not: mode and detach_usb_drive are both punted to mount_media_url rather than explained. The phrase 'CD-ROM or disk' loosely mirrors the cdrom/disk enum, and 'see list_media' hints at filename sourcing, but no parameter is actually documented here.

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: 'Attach an image stored on the KVM ... as a read-only virtual USB CD-ROM or disk.' The contrast with mount_media_url is only implied by the way it delegates 'mode semantics', so an agent must infer the source difference rather than being told it outright.

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?

Points the agent to list_media to find the filename and to mount_media_url for mode and detach semantics, which gives practical routing context. It never explicitly says when to choose this tool over mount_media_url (stored image vs URL), so the guidance is contextual rather than spelled out.

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

mount_media_urlA

Attach an ISO/IMG reachable over HTTP(S) as a read-only virtual USB CD-ROM or disk.

cdrom: optical drive, most compatible in BIOS/UEFI and for Windows installers.
disk: USB stick, faster, suits Linux/modern installers. Changing the mode re-enumerates
the KVM's USB devices; detach_usb_drive=true allows detaching the KVM's file-transfer
'Virtual USB Drive' from the host when that blocks the switch.
ParametersJSON Schema
NameRequiredDescriptionDefault
urlYes
modeNocdrom
detach_usb_driveNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/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 well: it discloses the read-only nature of the mounted media, the USB re-enumeration side effect of changing mode, and the host-side detachment behavior of detach_usb_drive. It omits auth/prerequisite and error conditions (e.g., unreachable URL, existing mounted media being replaced).

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?

Front-loaded with the core action, followed by mode tradeoffs and the detach escape hatch. Every sentence earns its place, though the mode paragraph is somewhat dense and could be marginally tighter.

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?

An output schema exists, so return values need not be explained; the description covers the action, mode selection, and a non-obvious side effect. It would be complete with a note on prerequisites (URL accessibility) and whether an existing mount is replaced.

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

Parameters5/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, and it does for all three parameters: URL is constrained to HTTP(S) ISO/IMG sources, both mode enum values are explained with concrete tradeoffs, and detach_usb_drive is described with the exact blocking scenario it solves.

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 ('Attach an ISO/IMG reachable over HTTP(S) as a read-only virtual USB CD-ROM or disk'), and the HTTP(S) qualifier implicitly distinguishes it from the sibling mount_media_storage. Siblings are not named explicitly, 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 Guidelines4/5

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

Gives clear situational guidance for choosing between the two modes ('most compatible in BIOS/UEFI and for Windows installers' vs 'faster, suits Linux/modern installers') and when to set detach_usb_drive. However, it never states when to prefer this tool over mount_media_storage or unmount_media first.

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

move_mouseB

Move the mouse pointer to (x, y) in screenshot pixel coordinates.

ParametersJSON Schema
NameRequiredDescriptionDefault
xYes
yYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.2/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 does disclose the coordinate reference frame (screenshot pixels), which is useful, but says nothing about whether motion is instant or smooth, whether the pointer is clamped to screen bounds, or error behavior for out-of-range coordinates.

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 well-formed sentence with no filler, and the coordinate meaning is front-loaded. It is appropriately sized for a simple two-parameter tool.

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?

An output schema exists, so return values need not be explained. However, for a tool with 0% schema coverage and no annotations, the description is minimal; it omits any usage context relative to siblings and any behavioral details about motion or error handling.

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 0%, so both parameters are undocumented in the schema. The description partially compensates by clarifying that x and y are in screenshot pixel coordinates, which is meaningful but not complete (e.g., origin, rounding behavior for non-integer values remain unstated).

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?

Specific verb (Move) and resource (mouse pointer) with an explicit coordinate convention (screenshot pixel coordinates). This clearly distinguishes it from siblings like click and drag.

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 states what the tool does but gives no guidance on when to use it versus alternatives such as click (which typically includes movement) or drag. No conditions or exclusions are mentioned.

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

powerA

Press the target's ATX buttons (requires the ArkKVM ATX board wired to the mainboard).

power-short: short press of the power button (power on / ACPI shutdown).
power-long: hold power (~5 s, hard power off). reset: press the reset button.
ParametersJSON Schema
NameRequiredDescriptionDefault
actionYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

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

With no annotations, the description carries the behavioral burden and does reasonably well: it discloses the hardware prerequisite (ArkKVM ATX board wired to the mainboard) and the forcefulness of each action, including that power-long is a ~5 s hold producing a hard power off. It does not mention permissions, idempotency, or what happens if the host is already in the requested state.

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?

Purpose and hardware precondition are front-loaded, followed by a compact one-line-per-action breakdown. Every clause carries information; there is no filler or repetition of the schema.

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

Completeness5/5

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

For a single-parameter hardware control tool with an output schema present, the description covers everything an agent needs: the hardware requirement, and the duration/effect of each action. Return values are appropriately left to the output schema.

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 supply the meaning of the single parameter, and it does: every enum value ('power-short', 'power-long', 'reset') is explained in terms of press duration and effect. That is real added meaning beyond the bare enum list in the schema.

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 ('Press the target's ATX buttons') and enumerates the three discrete actions with their physical semantics. This is clearly distinguished from keyboard-oriented siblings like press_keys or press_keys/type_text, since it operates on motherboard ATX headers rather than the input layer.

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?

Each enum value is mapped to an operator intent ('power on / ACPI shutdown', 'hard power off', 'reset'), so an agent knows which action to pick for a given goal. It gives no exclusions or named alternatives, however — notably it does not say when to prefer the sibling wake_on_lan for powering a machine on.

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

press_keysA

Press a key or key combination, e.g. 'enter', 'f2', 'esc', 'ctrl+alt+delete', 'super+r', 'alt+f4', 'shift+tab', 'down'. Keys use US physical positions.

repeat: press the combination this many times (e.g. 'down' x5 in a boot menu).
hold_ms: keep the keys pressed this long (e.g. to hold F12 during POST).
ParametersJSON Schema
NameRequiredDescriptionDefault
keysYes
repeatNo
hold_msNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.9/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, and it does add real behavioral context: keys map to US physical positions, repeat sends the combination N times, and hold_ms keeps keys depressed. It omits what happens on unrecognized key names, whether input targets the focused window, whether an active session is required, and any error behavior.

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?

Front-loaded with the core action and input format, then one compact line per optional parameter, each earning its place with a concrete example. No filler, no restatement of the tool name.

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?

An output schema exists, so return values need not be explained, and the parameter semantics are fully covered. The remaining gap is environmental context, such as focus/session requirements and invalid-key handling, which would round out a no-annotation tool but is not essential for correct invocation.

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

Parameters5/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, and it documents all three parameters: keys with a format example list, repeat with its multiplier semantics and a boot-menu example, and hold_ms with its timing purpose and a POST example. That is full semantic coverage of every parameter.

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 (press) and resource (key/key combination) and illustrates the input vocabulary with concrete examples ('ctrl+alt+delete', 'super+r', 'shift+tab') that implicitly separate it from type_text and click. It does not name a sibling tool explicitly, so differentiation is inferential rather than stated.

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 context is embedded in the parameter notes ('down x5 in a boot menu', 'hold F12 during POST'), which gives the agent realistic scenarios for repeat and hold_ms. There is no explicit guidance on when to choose this over type_text or click, so routing must be inferred from the key-name examples.

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

release_sessionA

Disconnect from the KVM now so the web UI can be used without being taken over.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior3/5

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

No annotations are provided, so the description carries the behavioral burden. It does disclose the key effect: the session disconnects and the web UI becomes usable by others, which flags that control is being handed off. It omits whether the disconnect is reversible, whether it can be re-taken, and any auth/permission requirement, though the output schema covers return values.

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 beginning with the action 'Disconnect from the KVM'. It is efficient, though the trailing 'so the web UI can be used without being taken over' is slightly wordy for the point it makes. No filler or repetition.

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 zero-parameter action with an output schema and no annotations, the description conveys the action and its main consequence (freeing the KVM/web UI for others). The main remaining gap is any note on re-acquiring the session or persistence of the disconnect, but this is minor for a simple release action.

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 no parameter semantics to explain. Schema coverage is reported at 100% and the empty object leaves nothing ambiguous. Baseline 4 applies for a parameterless tool.

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 ('Disconnect from the KVM'), so an agent knows this ends the current KVM control session. The trailing clause about the web UI explains why, but the phrase 'without being taken over' is slightly indirect rather than crisply naming the session/lock being released. It is distinct from all siblings (which are input/peripheral actions), so no sibling confusion arises.

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 word 'now' implies the session should be released when done, and the description hints at the condition (wanting the web UI usable). However, it never states explicit when-to-use/when-not or names an alternative for re-acquiring control. Usage is implied rather than prescribed.

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

rpc_callA

Advanced: call any ArkKVM JSON-RPC method (e.g. getNetworkState, getEDID, getStorageSpace, listStorageFiles, setJigglerState). Destructive/configuration methods are blocked unless ARKKVM_ALLOW_DANGEROUS_RPC=1.

ParametersJSON Schema
NameRequiredDescriptionDefault
methodYes
paramsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/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 it does disclose a real behavioral constraint: destructive/configuration methods are blocked unless ARKKVM_ALLOW_DANGEROUS_RPC=1. It does not explain what happens on an unknown method, how blocked calls fail, or which methods count as 'configuration', but the safety gate is the key trait and it is surfaced up front.

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 dense sentences with zero waste: the capability and its risk gate. The example list is load-bearing rather than padding, and the blocking constraint is placed where it will be read before invocation.

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?

An output schema exists, so return values need not be described, and the description covers the capability, examples, and the safety gate. The remaining gap is the opaque params object and the absence of any note on error/unknown-method behavior for a generic dispatcher.

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 0% and the two params (method, params) have no descriptions at all. The example method names give the agent a sense of valid method values, partially compensating, but the params object's shape and per-method requirements are entirely undocumented in both schema and description.

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 ('call any ArkKVM JSON-RPC method') and immediately bounds it with concrete examples (getNetworkState, getEDID, setJigglerState). The 'Advanced' framing plus the generic-method nature differentiates it from every typed sibling (screenshot, click, power, usb_drive_*), which are single-operation wrappers.

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?

The 'Advanced:' prefix and concrete method examples imply this is the escape hatch for capabilities with no dedicated sibling tool, and the description states the governing condition for the dangerous-method gate. It never explicitly says 'prefer the dedicated tool when one exists', leaving the agent to infer the fallback relationship.

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

screenshotA

Capture the target computer's screen (HDMI input) as JPEG.

max_width: downscale to this width (0 = native resolution). Mouse tools use the
coordinate space of the most recent screenshot.
wait_ms: extra wait before capturing. The tool already waits (up to ARKKVM_SETTLE_MAX_MS)
until the picture stops changing, so this is rarely needed.
ParametersJSON Schema
NameRequiredDescriptionDefault
wait_msNo
max_widthNo

TDQS

A4.5/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 substantial work: it discloses the capture source (HDMI input), the encoding (JPEG), the internal settle-until-stable behavior bounded by ARKKVM_SETTLE_MAX_MS, and the side effect that mouse coordinates are tied to the latest screenshot. Gaps remain around failure modes (no signal / disconnected HDMI) and whether the capture is blocking.

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?

Front-loaded one-line purpose followed by two tight parameter notes, each of which adds decision-relevant information rather than restating the schema. 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-parameter tool with no output schema, the description covers capture semantics, output format, parameter behavior, and the coordinate-space contract. What's missing is error/edge behavior (no HDMI signal, timeouts) and any explicit statement of how mouse coordinates relate to a downscaled max_width.

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

Parameters5/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 and it does: max_width is explained (downscale target, 0 = native resolution — critical since the schema default is 1280), and wait_ms is explained as an extra pre-capture delay that is rarely needed because the tool already waits for the picture to stabilize.

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 ('Capture the target computer's screen (HDMI input)') plus the output format (JPEG). It also implicitly distinguishes itself from the mouse/input siblings by declaring that they operate in the coordinate space of the most recent screenshot.

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 clear operational context: the coordinate-space dependency tells the agent a screenshot must precede mouse actions, and it explicitly advises that wait_ms is 'rarely needed' because of built-in settling. It stops short of naming when not to use the tool or listing explicit alternatives, but the usage picture is unambiguous.

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

scrollC

Scroll at (x, y). Negative amount scrolls down (or left), positive up (or right).

ParametersJSON Schema
NameRequiredDescriptionDefault
xYes
yYes
amountNo
horizontalNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.9/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 mentions direction semantics but omits whether a session is required, whether it's a blocking/interactive action, or any side effects. For an input-injection 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.

Conciseness4/5

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

Two short sentences, front-loaded with the action and location. Efficient, though the parenthetical direction hints are slightly terse.

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?

An output schema exists, so return values needn't be explained. But with 4 parameters, 0% schema coverage, and no annotations, the description leaves the agent guessing about the 'horizontal' flag and session prerequisites.

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 0%, so the description compensates partially by explaining the sign convention for 'amount'. But it never mentions the 'horizontal' parameter, which defaults to false, leaving half the parameters undocumented in both schema and prose.

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 (scroll) and the coordinates where it happens, distinguishing it from siblings like move_mouse or click. However it doesn't clarify that this is a UI/computer-control action in the context of the broader toolset.

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?

No guidance on when to use this versus alternatives such as move_mouse. No mention of prerequisites (e.g., an active session) or when-not-to-use conditions.

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

statusB

Report KVM status: firmware, HDMI/video signal, USB attachment, virtual media, keyboard LEDs and last known ATX LED state.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

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 the categories of state returned, but says nothing about whether the call is read-only/side-effect free, whether it requires an active session, or whether it can fail when the host is powered off. Read-only nature is strongly implied by 'Report' but not declared.

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 with no filler; the enumerated fields are informative rather than redundant. The list is slightly long but each item earns its place by telling the agent what state is available.

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?

An output schema exists, so return format need not be explained, and there are no parameters to document. The description adequately covers scope for a simple read tool; only the session/read-only behavioral context is missing.

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?

Zero parameters, so the baseline of 4 applies. The description correctly adds no parameter discussion, and none is needed.

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 (Report) and resource (KVM status), then enumerates exactly what is reported: firmware, HDMI/video signal, USB attachment, virtual media, keyboard LEDs, ATX LED state. This is clearly broader than the sibling usb_drive_status, though that differentiation is left implicit rather than stated.

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?

No when-to-use guidance and no mention of alternatives such as usb_drive_status for narrower USB-only queries. The agent can infer that 'status' is a general health check, but nothing in the text routes it against siblings or states preconditions.

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

type_textA

Type text on the target as keystrokes. '\n' presses Enter, '\t' Tab.

layout: keyboard layout configured on the TARGET OS ('us' or 'de'); defaults to
ARKKVM_KEYBOARD_LAYOUT. In BIOS/UEFI the layout is usually 'us'.
ParametersJSON Schema
NameRequiredDescriptionDefault
textYes
layoutNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior3/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 does disclose valuable behavior: how escape sequences are interpreted, the layout default (ARKKVM_KEYBOARD_LAYOUT), and the BIOS/UEFI caveat. It does not address preconditions such as target focus, error behavior, or whether typing is interruptible.

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?

Purpose is front-loaded in the first sentence, followed by escape semantics, then param guidance. Every line is informative with no filler, though the multi-line layout block is slightly dense.

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?

This is a low-complexity 2-parameter tool with an output schema, so return values need no explanation. Both parameters are meaningfully covered and the layout caveat rounds out what an agent needs to call it correctly.

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 0%, so the description must compensate, and it largely does: the 'layout' parameter is explained with its accepted values ('us'/'de'), its default env var, and the BIOS/UEFI recommendation, while 'text' gains meaning through the documented escape sequences.

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 concrete verb+resource ('Type text on the target as keystrokes') and immediately clarifies escape-sequence behavior for '\n' and '\t'. It is clearly distinct from navigation siblings like move_mouse or click, though it never explicitly contrasts with press_keys.

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: this is the tool for entering literal text, with escape sequences covering Enter/Tab. However, it never says when to prefer this over the sibling press_keys or what conditions make it unsuitable (e.g., no focused input field).

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

unmount_mediaA

Detach the currently mounted virtual media.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior3/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 one behavioral fact — that it acts on already-mounted media rather than anything else — but says nothing about failure behavior when nothing is mounted, permission requirements, or whether the underlying media/image stays intact.

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 nine-word sentence with the action front-loaded and zero filler. It is appropriately sized for a zero-argument operation, though it is too sparse to earn a top mark for structure.

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 parameterless tool with an output schema already covering return values, the description is close to sufficient, but with no annotations it leaves the state preconditions and error behavior unaddressed, which is the minimum an agent needs to decide whether to call it now.

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 explain and the description cannot be faulted here. Nothing in the schema is left ambiguous by the description.

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 (detach/unmount) and resource (virtual media), which is enough to separate it from the mount_media_url/mount_media_storage siblings and from the usb_drive_* family. It does not, however, explicitly name any sibling or clarify how it relates to usb_drive_attach, so it falls short of the differentiation a 5 requires.

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 phrase "currently mounted" implies the tool is used to reverse a prior mount, so usage is inferable but never stated. There is no explicit when-to-use, when-not-to-use, or alternative tool guidance despite several closely related media/USB siblings in the list.

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

usb_drive_attachA

Attach the Virtual USB Drive to the target computer ('host', appears as a USB stick), to the KVM ('kvm', needed for usb_drive_list/upload/download/delete) or detach it ('none'). The drive is only ever attached to one side. After attaching to the host, wait a few seconds before the OS shows it; drive letters can change.

ParametersJSON Schema
NameRequiredDescriptionDefault
targetYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/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 behavioral burden and does disclose two non-obvious traits: the drive can only be attached to one side at a time, and after attaching to the host the OS needs a few seconds and drive letters may change. It does not mention permission/auth requirements or what happens if the drive is already attached, leaving some gaps.

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?

Three sentences that are front-loaded with the core action and value meanings, with the timing caveat placed last. Slightly dense in the first sentence but every clause carries useful information.

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?

An output schema exists, so return-value documentation is not needed, and the description covers targets, exclusivity, and post-attach timing. It omits edge-case behavior (e.g., re-attaching while already attached, error conditions), which keeps it just short of fully complete for a state-changing tool.

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% and the single parameter only has bare enum values, so the description must compensate. It does explain the meaning of all three values ('host' appears as a USB stick, 'kvm' enables the other USB tools, 'none' detaches), which is materially more than the schema offers.

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 (attach/detach) and resource (Virtual USB Drive) and enumerates the three target modes inline. It clearly distinguishes itself from the nearby usb_drive_list/upload/download/delete siblings by explaining that those require the 'kvm' attachment first.

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

Usage Guidelines5/5

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

Explicitly maps each enum value to a use case: 'host' to expose the drive to the target OS, 'kvm' when the drive needs to be managed via usb_drive_list/upload/download/delete, and 'none' to detach. The agent gets a direct routing rule rather than having to infer one.

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

usb_drive_deleteA

Delete a file or folder on the Virtual USB Drive. Folders that are not empty are only deleted with recursive=true (the firmware deletes folders including their contents).

ParametersJSON Schema
NameRequiredDescriptionDefault
recursiveNo
remote_pathYes
switch_to_kvmNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/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, and it does disclose the destructive semantics of recursive deletion (folders and their contents are removed by firmware). However, it never states whether deletion is permanent/irreversible, what permissions or mounted-state prerequisites apply, or how errors surface, which are important for an irreversible operation.

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: the first front-loads the core verb and resource, the second adds only the conditional constraint that changes how the call must be made. No filler or restated metadata.

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?

An output schema exists, so return values need not be described, and the recursive constraint is covered. For an irreversible delete tool with zero annotations and a 0%-documented schema, the missing information about permanence, prerequisites, and the switch_to_kvm parameter leaves real gaps.

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 fill the gap for all three parameters. It explains 'recursive' well (including firmware behavior on non-empty folders) but says nothing about 'remote_path' format or the non-obvious 'switch_to_kvm' flag, leaving two of three parameters undocumented anywhere.

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 uses a specific verb ('Delete') on a specific resource ('a file or folder on the Virtual USB Drive'), which is unambiguous and clearly distinct from the upload/download/list siblings. It stops short of naming an alternative tool or scoping the operation further, so it is clear but not maximally differentiating.

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?

It gives a concrete usage rule for the recursive case: non-empty folders require recursive=true, and explains what the firmware does in that mode. There is no explicit when-not-to-use guidance or named alternative (e.g., unmount before deleting), so it is clear context rather than full routing guidance.

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

usb_drive_downloadA

Read a file from the Virtual USB Drive. With local_path it is saved there (on the machine running this MCP server); without, text files up to 100 KB are returned inline.

ParametersJSON Schema
NameRequiredDescriptionDefault
local_pathNo
remote_pathYes
switch_to_kvmNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/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 that local_path writes to the machine running the MCP server and that inline returns are capped at 100 KB for text files. It omits important behavior: what happens for binary or oversized files without local_path, whether an existing local file is overwritten, and any auth/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?

Two sentences, front-loaded with the core action and then the mode split; no filler and every clause carries information the agent needs.

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?

An output schema exists, so return-value detail is not required, and the local vs inline distinction is covered. However, the unexplained switch_to_kvm parameter and the unstated behavior for large/binary downloads leave real gaps for a 3-parameter tool.

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% and title-only fields convey nothing. The description meaningfully explains local_path (and its dual mode), but remote_path is never described and switch_to_kvm is entirely undocumented in both the description and the schema, leaving a hidden parameter whose effect an agent cannot infer.

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 (read/download) and resource (a file from the Virtual USB Drive), which cleanly separates it from usb_drive_upload, usb_drive_list, and usb_drive_delete in the sibling set. An agent knows exactly what the tool produces 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 Guidelines4/5

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

Explains the two operating modes clearly: pass local_path to save to disk on the MCP host, omit it to get small text files returned inline. It stops short of saying when this tool is preferable to alternatives (e.g., checking usb_drive_list first, or that binary/large files require local_path), so there is context but no explicit alternatives or exclusions.

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

usb_drive_listC

List a directory on the Virtual USB Drive. Requires the drive attached to the KVM.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathNo/
switch_to_kvmNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.9/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. 'List' implies a read-only operation and the attachment requirement is useful context, but the description does not disclose the effect of switch_to_kvm, whether the operation is safe, or any side effects. This is a significant gap for a tool with no annotation coverage.

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 two compact sentences with no wasted wording. The core purpose is front-loaded, followed immediately by the critical prerequisite.

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?

An output schema exists, so return values need not be described. However, the description leaves key parameter semantics and the side-effect behavior of switch_to_kvm unaddressed. Given no annotations and 0% schema description coverage, the definition is incomplete for correct invocation.

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

Parameters1/5

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

Schema description coverage is 0% and the description does not mention either parameter. 'List a directory' weakly implies a path argument, but switch_to_kvm is entirely unexplained. For two undocumented parameters, this fails to compensate for the schema gaps.

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: 'List a directory on the Virtual USB Drive.' This clearly distinguishes it from sibling operations like upload, download, delete, and status. It does not explicitly name or contrast with an alternative tool, so it falls just 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 Guidelines3/5

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

It provides one explicit prerequisite: the drive must be attached to the KVM. However, it gives no guidance on when to choose this tool versus siblings such as usb_drive_status, nor does it describe exclusions or alternative listing methods.

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

usb_drive_statusA

Status of the KVM's Virtual USB Drive (FAT file-transfer drive): enabled, where it is attached ('host' = USB stick on the target, 'kvm' = files accessible via these tools, 'none') and, when attached to the KVM, its capacity.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior3/5

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

No annotations are provided, so the description carries the burden. It does disclose meaningful behavior: the three possible attachment states ('host', 'kvm', 'none') and that capacity is only populated when attached to the KVM. It is silent on whether this is purely read-only, any prerequisites, or refresh/latency characteristics, which leaves gaps for a zero-annotation tool.

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 leads with the resource and then enumerates the reported fields. The parenthetical definitions are the only expansion and they earn their space, though the sentence runs slightly long for such a simple query.

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

Completeness5/5

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

A zero-parameter read tool with an output schema present needs little else. The description goes further by interpreting the returned attachment enum values and the capacity condition, so an agent can act on the result without external knowledge.

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 are no parameter semantics to document; the baseline for a parameterless schema applies. Nothing in the description misrepresents the empty argument object.

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 resource (the KVM's Virtual USB Drive) and the exact facts it reports: enabled state, attachment location, and capacity. It implies a distinction from usb_drive_list (which lists files) by describing the attachment locus, but never names the sibling, so it stops short of an explicit differentiation.

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 when-to-use guidance, no indication of what precedes it (e.g., call before usb_drive_attach or usb_drive_upload), and no exclusions. With siblings like usb_drive_list, usb_drive_attach, and status, an explicit routing hint would be valuable; usage is only inferred from the name.

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

usb_drive_uploadA

Copy a file onto the Virtual USB Drive, e.g. remote_path='/drivers/setup.exe'. Source is either local_path (a file on the machine running this MCP server) or content (text, written as UTF-8). Missing parent folders are created.

ParametersJSON Schema
NameRequiredDescriptionDefault
contentNo
local_pathNo
remote_pathYes
switch_to_kvmNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior3/5

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

With no annotations, the description must carry the full behavioral burden. It usefully discloses that content is written as UTF-8 and that missing parent folders are auto-created (a meaningful side effect). But it omits whether an existing file is overwritten, any auth/permission requirements, and what switch_to_kvm does, leaving important mutation behavior unexplained.

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?

Tight and front-loaded: the primary action comes first, followed by the source distinction and the side-effect note. Every sentence adds something, though the parenthetical asides slightly interrupt the flow.

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?

An output schema exists, so return values need not be described. For a mutation tool with zero annotations and 0% schema coverage, the definition is adequate but leaves gaps: overwrite semantics, the undocumented switch_to_kvm flag, and permission requirements are all unaddressed.

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 0%, so the description must compensate. It effectively clarifies three of the four params: remote_path (with example), local_path (file on the MCP server machine), and content (UTF-8 text). It says nothing about switch_to_kvm, so the compensation is incomplete.

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 ('Copy a file onto') plus the target resource ('Virtual USB Drive'), and the e.g. remote_path example makes the operation concrete. It is clearly distinguishable from siblings like usb_drive_download, usb_drive_delete, and usb_drive_list.

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 description gives implied usage context by explaining that the source is either local_path or content, which helps the agent pick a mode. However, it never states when to choose this tool over alternatives (e.g. mount_media_url or usb_drive_attach) or any prerequisites/exclusions.

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

wake_on_lanB

Send a Wake-on-LAN magic packet from the KVM to the given MAC address.

ParametersJSON Schema
NameRequiredDescriptionDefault
mac_addressYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.4/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 full behavioral burden. It states the action and direction (from KVM to MAC) but does not disclose network prerequisites, expected side effects, whether the call is fire-and-forget, or what happens on invalid/unreachable MAC.

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?

One tight sentence with no redundant or filler content, front-loading the action and target.

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 with one parameter and an output schema, so return-value documentation is unnecessary. However, with no annotations and no usage/prerequisite details, the description is only minimally sufficient for reliable invocation (e.g., MAC format and WoL network requirements are left implicit).

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% and the single mac_address parameter is undocumented in the schema. The description names it as 'the given MAC address' but adds no format, validation, or accepted delimiter semantics beyond the parameter name.

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 (Send) and resource (Wake-on-LAN magic packet), plus the source (KVM) and target (MAC address). This distinguishes it from sibling KVM input/control tools and from generic power operations.

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 description implies the usage scenario (waking a machine via Wake-on-LAN) but offers no explicit when/when-not guidance or alternatives such as power or mount_media_* tools. For a single-purpose network action this is mostly self-evident, but it leaves prerequisites such as WoL support unstated.

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. 22 tool updatesv0.1.0
    • First observedclick
    • First observeddrag
    • First observedlist_media
    • First observedmount_media_storage
    • First observedmount_media_url
    • First observedmove_mouse
    • First observedpower
    • First observedpress_keys
    • First observedrelease_session
    • First observedrpc_call
    • First observedscreenshot
    • First observedscroll
    • First observedstatus
    • First observedtype_text
    • First observedunmount_media
    • First observedusb_drive_attach
    • First observedusb_drive_delete
    • First observedusb_drive_download
    • First observedusb_drive_list
    • First observedusb_drive_status
    • First observedusb_drive_upload
    • First observedwake_on_lan

TDQS

A3.5/5.0

Scored across 22 tools

Disambiguation4/5

Most tools map to distinct actions: input control (move_mouse, click, drag, scroll, type_text, press_keys), power, media mounting, and USB drive management are clearly separated. The only mild overlaps are mount_media_url vs mount_media_storage (differentiated by source) and status vs usb_drive_status (differentiated by scope), and the descriptions resolve both.

Naming Consistency4/5

Consistent snake_case everywhere, with predictable verb_noun patterns for the usb_drive_* and mount_media_* families. A few tools are bare nouns/verbs (screenshot, click, drag, scroll, power, status), which is a minor but readable deviation from a strict verb_noun convention.

Tool Count4/5

22 tools is on the heavier side, but the domain is genuinely broad (video capture, HID input, ATX power, virtual media, USB file transfer, status). Each tool covers a distinct operation rather than padding, though it sits near the upper comfortable bound.

Completeness4/5

Strong coverage of the KVM lifecycle: capture, input, power/WOL, media mount/list/unmount, and full USB-drive CRUD (status, attach, list, upload, download, delete), plus a raw rpc_call escape hatch for advanced/configuration methods. Minor gaps like clipboard or video-recording are largely reachable via rpc_call.

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
    13
    -
  • 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.
    11
    MIT
  • F
    license
    A
    quality
    C
    maintenance
    MCP server for controlling Sipeed NanoKVM devices, enabling remote hardware control via keyboard, mouse, power, and screenshots. It allows AI assistants like Claude to manage headless machines at the BIOS level.
    20
    -