arkkvm-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| ARKKVM_HOST | Yes | Host of the ArkKVM device, e.g. 192.168.1.50 or https://arkkvm.example | |
| ARKKVM_PASSWORD | No | Required when the device has a local password (auth mode is detected automatically). | |
| ARKKVM_VERIFY_TLS | No | 1 to verify the device certificate when using https:// | |
| ARKKVM_IDLE_TIMEOUT | No | Seconds without tool calls before the session is released (0 = never) | 120 |
| ARKKVM_KEY_DELAY_MS | No | Delay between HID reports | 15 |
| ARKKVM_SETTLE_MAX_MS | No | Max time screenshot waits for the picture to stop changing (animations, H.264 sharpening) | 2000 |
| ARKKVM_KEYBOARD_LAYOUT | No | Default layout for type_text (us, de) | us |
| ARKKVM_SCREENSHOT_WIDTH | No | Default screenshot width and coordinate space before the first screenshot | 1280 |
| ARKKVM_ALLOW_DANGEROUS_RPC | No | 1 allows factory reset, network changes, … through rpc_call |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| screenshotA | Capture the target computer's screen (HDMI input) as JPEG. |
| move_mouseB | Move the mouse pointer to (x, y) in screenshot pixel coordinates. |
| clickB | Click at (x, y) in screenshot pixel coordinates. count=2 for a double click. |
| dragC | Press at (x1, y1), move to (x2, y2) and release. |
| scrollC | Scroll at (x, y). Negative amount scrolls down (or left), positive up (or right). |
| type_textA | Type text on the target as keystrokes. '\n' presses Enter, '\t' Tab. |
| 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. |
| powerA | Press the target's ATX buttons (requires the ArkKVM ATX board wired to the mainboard). |
| wake_on_lanB | Send a Wake-on-LAN magic packet from the KVM to the given MAC address. |
| mount_media_urlA | Attach an ISO/IMG reachable over HTTP(S) as a read-only virtual USB CD-ROM or disk. |
| list_mediaB | List images stored on the KVM's internal storage, free space and what is mounted now. |
| 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. |
| unmount_mediaA | Detach the currently mounted virtual media. |
| 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. |
| 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. |
| usb_drive_listC | List a directory on the Virtual USB Drive. Requires the drive attached to the KVM. |
| 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. |
| 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. |
| 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). |
| statusB | Report KVM status: firmware, HDMI/video signal, USB attachment, virtual media, keyboard LEDs and last known ATX LED state. |
| 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. |
| release_sessionA | Disconnect from the KVM now so the web UI can be used without being taken over. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 22 tools
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.
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.
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.
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.