MCP server for controlling JetKVM devices, enabling screenshot capture, video recording, and virtual media/USB device management via WebRTC
Strong naming conventions (all tools start with action verbs: take_, record_, list_, get_, mount_, delete_, set_). Descriptions are present and substantive (avg ~120 chars, well above 20-char floor). Input schemas are explicit with proper types (string, number, boolean) and enums where appropriate. However, output schemas are undocumented, callers cannot see what fields to expect from responses. Error handling is minimal; no recovery guidance or actionable error messages visible in code. Parameter descriptions are good but lack format constraints (e.g., duration 1 - 60 is stated in description but not enforced as a schema constraint). Missing tool annotations (readOnlyHint, destructiveHint) despite clear risk classifications.
Check whether a remote HTTP(S) URL can be mounted directly as virtual media without first downloading it to the device's storage.
Delete an image file from the JetKVM device's local storage.
Get which virtual USB device classes (keyboard, mice, mass storage, serial console, audio) the JetKVM currently presents to the connected host.
Check whether the JetKVM's USB Device Controller is bound, i.e. whether it is presenting any USB device to the connected host at all.
Get the image currently mounted as a virtual USB boot device on the JetKVM, if any.
List image files (ISO/IMG/QCOW2/WDI/VMDK) stored on the JetKVM device and its remaining storage space. These can be mounted as a virtual USB boot device.
Output schemas are completely undocumented. Callers cannot see what fields responses contain, forcing LLMs to guess at result structure and breaking tool chaining. E.g., list_virtual_media_files returns a list but no schema shows field names (filename? size? type?).
Tool annotations (readOnlyHint, destructiveHint, idempotentHint) are missing despite clear risk classifications in metadata. delete_virtual_media_file is DESTRUCTIVE but carries no annotation; mount_virtual_media is WRITE but unmarked. LLMs cannot infer safety properties.
No error handling or recovery guidance visible. Code shows error returns (e.g., 'ffmpeg not found') but no structured error classification (retryable vs user-fixable vs fatal) or actionable next steps for LLMs.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 61 | 2026-07-28+ | v2 |
Mount an image as a virtual USB boot device on the JetKVM, so the connected host sees it as a CD/DVD or disk drive during boot (e.g. for OS installation). Source is either a file already on device storage, or a remote HTTP(S) URL streamed directly.
Record a video clip from the JetKVM device and save it as an MP4 file.
Enable or disable a single virtual USB device class on the JetKVM without changing the others.
Configure the full set of virtual USB device classes the JetKVM presents to the connected host. Disabling mass_storage hides any mounted virtual media from the host even if an image is mounted.
Bind or unbind the JetKVM's USB Device Controller, turning all virtual USB device emulation to the host on or off.
Capture a screenshot from the JetKVM device. Returns a PNG image of the connected machine's display.
Unmount the currently mounted virtual USB boot device from the JetKVM.
Parameter constraints stated in descriptions but not enforced in schema. E.g., record_video duration is '1 - 60 seconds' in text but no minValue/maxValue in schema. LLMs may pass invalid values; validation happens at runtime only.
No pagination or result limits documented. list_virtual_media_files could return hundreds of files with no limit or cursor support, risking context window exhaustion.