mcp-serial-hid-kvm
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@mcp-serial-hid-kvmrun 'ipconfig' and read result"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
mcp-serial-hid-kvm
MCP (Model Context Protocol) server that gives AI agents full keyboard, mouse, and screen access to a physical PC. Thin client for serial-hid-kvm — all hardware control is delegated via TCP.
How It Works
Claude / AI Agent
↕ MCP (stdio)
mcp-serial-hid-kvm ← this package (thin client + OCR)
↕ TCP (localhost:9329)
serial-hid-kvm ← standalone KVM server (owns hardware)
↕ USB Serial + HDMI
Target PCThe KVM server (serial-hid-kvm) runs as a persistent process owning the serial port and capture device. This MCP server connects to it as a TCP client. Multiple MCP instances (multiple Claude sessions) can share a single KVM server without device conflicts.
Prerequisites
Hardware: CH9329+CH340 USB HID cable + USB HDMI capture device (see serial-hid-kvm for details)
serial-hid-kvm installed and running:
pip install -e /path/to/serial-hid-kvm serial-hid-kvm --api # with preview window serial-hid-kvm --api --headless # or headlessTesseract OCR (for
get_screen_text/execute_and_read):Linux:
sudo apt install tesseract-ocr
Installation
pip install -e .This automatically installs serial-hid-kvm as a dependency.
MCP Client Configuration
Claude Desktop / Claude Code
{
"mcpServers": {
"kvm": {
"command": "mcp-serial-hid-kvm"
}
}
}Custom KVM server address:
{
"mcpServers": {
"kvm": {
"command": "mcp-serial-hid-kvm",
"env": {
"SHKVM_API_HOST": "127.0.0.1",
"SHKVM_API_PORT": "9329"
}
}
}
}Configuration
Variable | Default | Description |
|
| KVM server address |
|
| KVM server port |
| auto-detect | Path to tesseract executable |
| platform default | Capture log directory (empty string to disable) |
Hardware settings (SHKVM_SERIAL_PORT, SHKVM_SCREEN_WIDTH, etc.) are configured on the KVM server side, not here. If the target PC uses a non-US keyboard, set --target-layout (or SHKVM_TARGET_LAYOUT) on the KVM server so that type_text and send_key produce correct characters.
Available Tools
Keyboard
Tool | Description |
| Type text with inline tags: |
| Single key press with modifiers |
| Multiple key steps with per-step delays. |
Mouse
Tool | Description |
| Move cursor (absolute or relative) |
| Click at optional position |
| Drag from one position to another (drag-and-drop, text selection, etc.) |
| Scroll wheel |
Screen
Tool | Description |
| Capture screen as image (high token cost) |
| Capture + OCR to text (preferred for text content) |
| Type command, Enter, wait, capture + OCR |
Device Management
Tool | Description |
| Serial port, capture device, config info |
| List available video devices |
| Switch capture device |
| Change capture resolution |
Architecture
This package is intentionally minimal (~4 files):
mcp_serial_hid_kvm/
server.py MCP tool handlers → KvmClient TCP calls
config.py KVM host/port, tesseract, log settings
ocr.py Tesseract OCR (runs locally on fetched frames)
__init__.pyAll keyboard/mouse/capture logic lives in serial-hid-kvm. This package only translates MCP tool calls to TCP API calls and runs OCR locally.
Why Separate?
No device conflicts — multiple Claude sessions share one KVM server
Independent restarts — restart the MCP server without losing the KVM connection
Standalone use —
serial-hid-kvmworks without MCP (interactive preview, scripts, other AI frameworks)
License
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/sunasaji/mcp-serial-hid-kvm'
If you have feedback or need assistance with the MCP directory API, please join our Discord server