MCP server for the GL.iNet GLKVM (RM1 / RM10 / Comet) device, with a fix for the firmware double-typing / stuck-key bug baked into the keyboard tools.
Tools have clear, action-oriented names (send_text, mouse_click, screenshot) and reasonable descriptions (avg ~120 chars). Input schemas are present with types and descriptions for most parameters. However, output schemas are entirely undocumented, no tool specifies what it returns, forcing LLMs to guess. Error handling is absent: no guidance on what happens on connection failure, OCR misses, or invalid coordinates. Parameters lack constraints (e.g., x_pct/y_pct should enforce 0-100 range). The stuck-key fix is well-engineered but buried in a userscript rather than documented in tool descriptions.
Use OCR (Tesseract) to find text on a screenshot and return pixel coordinates as percentages. Useful for locating UI elements by their text labels.
Connect to a GLKVM device. Establishes HTTP and WebSocket connections to the target host. Must be called before any other KVM tool.
Disconnect from the GLKVM device and clean up resources.
Click a mouse button (left, right, or middle). Sends button down, then button up.
Move the mouse to an absolute position specified as percentages of screen width and height. Accurate to <0.5% error.
Scroll the mouse wheel. Positive dy scrolls down, negative scrolls up. Positive dx scrolls right, negative scrolls left.
Capture a screenshot from the remote device. Returns the image as base64-encoded JPEG data.
No output schemas documented for any tool. LLMs cannot plan downstream calls or extract return values. screenshot() and screenshot_with_grid() return base64 JPEG but this is not specified in tool definition.
Numeric parameters lack range constraints. mouse_move_pct accepts x_pct and y_pct but does not enforce 0-100 bounds; mouse_scroll dx/dy accept -127 to 127 but this is only in description, not in schema constraints.
No error handling guidance. Tools do not document what happens on connection failure, OCR miss (find_text_on_screenshot), invalid host, or authentication failure. LLMs have no recovery path.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 49 | <=2025-11-25 | v2 |
Capture a screenshot and overlay a 10% coordinate grid with x% and y% labels. Helps vision models read grid coordinates instead of estimating pixel positions. Returns base64-encoded JPEG.
Send one or more key chords. Each chord is a space-separated list of key names (modifiers + main key). Modifiers wrap strictly outside the main key (mods down -> key down -> key up -> mods up). Supports W3C key codes and user-friendly aliases (e.g. 'ctrl+c', 'alt+f4', 'shift+Home').
Type text on the remote keyboard. Converts each character to the appropriate key sequence with proper shift handling. Applies the stuck-key fix: each character is sent as keydown -> MIN_DOWN_UP_GAP ms -> keyup(finish=true).
send_text description mentions 'stuck-key fix' and MIN_DOWN_UP_GAP but does not explain what the fix does or why it matters. The userscript implementation is separate from the tool definition, creating a documentation gap.
find_text_on_screenshot returns 'pixel coordinates as percentages' but does not specify the output structure (e.g., {x_pct, y_pct, confidence}?). LLMs cannot reliably extract or chain results.