Windows Driver Input MCP (Standalone)
Standalone MCP server exposing driver-level keyboard/mouse tools via IbInputSimulator.
- No UIA tree, no vision, no shell — just input
- Backends: DLL first (
ibsim-dll, no AHK required); optional AHK (ibsim-ahk, requires AutoHotkey v2 64-bit) - Supports Unicode text, WASD, combos, holds, and scroll
Repository: https://github.com/win10ogod/windows-driver-input-mcpLicense: MIT
Run
- stdio:
uv run main.py --transport stdio - SSE:
uv run main.py --transport sse --host localhost --port 8001
Configure via env (defaults shown):
WINDOWS_MCP_INPUT_BACKEND=ibsim-dll(oribsim-ahk)WINDOWS_MCP_INPUT_DRIVER=AnyDriverWINDOWS_MCP_RATE_MOVE_HZ=120,WINDOWS_MCP_RATE_MAX_DELTA=60,WINDOWS_MCP_RATE_SMOOTH=0.0WINDOWS_MCP_RATE_CPS=8.0,WINDOWS_MCP_RATE_KPS=12.0WINDOWS_INPUT_LOG_LEVEL=INFOIBSIM_DIRoptionally to point toIbInputSimulatordirectory if not colocated
Tools
Input-InfoMove-ToolClick-ToolDrag-ToolScroll-ToolType-Tool(text, method=unicode|clipboard|vk, press_enter=false)Shortcut-ToolKey-Tool(mode=tap|down|up|hold, key, times, interval_ms, hold_ms)Combo-Tool(keys=[...], hold_ms=...)Desktop-Info(virtual screen origin/size, monitor count)Window-Info(active window title/class and rect)Windows-List(enumerate windows; top-level or children via parent_hwnd; filters: query, only_visible, include_minimized, include_cloaked, limit)Windows-Select(select byindexor first match byquery; supports parent_hwnd and visibility flags; returns hwnd and details)Windows-Activate(bring to front; optionalshow=restore|minimize|maximize|show,topmost=true|false)Windows-SetPos(move/resize;loc=[x,y],size=[w,h],z=topmost|notopmost|top|bottom)Windows-Close(send WM_CLOSE)Input-RateLimiter-Config
IbInputSimulator
Place IbInputSimulator/Binding.AHK2/IbInputSimulator.dll and IbInputSimulator.ahk either:
- Inside this folder (
input_driver_server/IbInputSimulator/Binding.AHK2/...), or - Set
IBSIM_DIRto the directory holdingBinding.AHK2(or its parent).
The server auto-discovers common locations and also checks the parent repo layout, but for a truly standalone package, vendoring IbInputSimulator in this folder is recommended.
Install
Requirements
- Windows 7–11
- Python 3.13+ (
python --version) - UV package manager:
pip install uv(or see https://github.com/astral-sh/uv) - IbInputSimulator is already vendored in
input_driver_server/IbInputSimulator. - Optional (only when using
ibsim-ahk): AutoHotkey v2 64‑bit
Setup (clone once)
git clone https://github.com/win10ogod/windows-driver-input-mcp.gitcd windows-driver-input-mcp- (Optional)
uv syncif you prefer a local venv with pinned deps
Client Config Snippets (JSON)
Use these JSON blocks in clients that accept Model Context Protocol server configs.
Claude Desktop (Advanced > Add Local MCP)
Paste this JSON into the “Install from JSON” dialog:
{
"command": "uv",
"args": [
"--directory",
"<ABSOLUTE PATH TO>/windows-driver-input-mcp",
"run",
"main.py"
],
"env": {
"WINDOWS_MCP_INPUT_BACKEND": "ibsim-dll",
"WINDOWS_MCP_INPUT_DRIVER": "AnyDriver",
"WINDOWS_MCP_RATE_MOVE_HZ": "120",
"WINDOWS_MCP_RATE_MAX_DELTA": "60",
"WINDOWS_MCP_RATE_SMOOTH": "0.0",
"WINDOWS_MCP_RATE_CPS": "8.0",
"WINDOWS_MCP_RATE_KPS": "12.0",
"WINDOWS_INPUT_LOG_LEVEL": "INFO"
}
}
Or install as an Extension package:
cd windows-driver-input-mcpnpx @anthropic-ai/mcpb packIn Claude Desktop: Settings → Extensions → Advanced Settings → Install Extension → pick the generated
.mcpb.
Codex CLI (TOML)
Edit %USERPROFILE%/.codex/config.toml and add:
[mcp_servers.windows-driver-input]
command = "uv"
args = [
"--directory",
"<ABSOLUTE PATH TO>/windows-driver-input-mcp",
"run",
"main.py"
]
env = {
WINDOWS_MCP_INPUT_BACKEND = "ibsim-dll",
WINDOWS_MCP_INPUT_DRIVER = "AnyDriver",
WINDOWS_MCP_RATE_MOVE_HZ = "120",
WINDOWS_MCP_RATE_MAX_DELTA = "60",
WINDOWS_MCP_RATE_SMOOTH = "0.0",
WINDOWS_MCP_RATE_CPS = "8.0",
WINDOWS_MCP_RATE_KPS = "12.0",
WINDOWS_INPUT_LOG_LEVEL = "INFO"
}
Save and restart Codex CLI to load the new server.
Gemini CLI (JSON)
Edit %USERPROFILE%/.gemini/settings.json and merge the following under mcpServers:
{
"mcpServers": {
"windows-driver-input": {
"command": "uv",
"args": [
"--directory",
"<ABSOLUTE PATH TO>/windows-driver-input-mcp",
"run",
"main.py"
],
"env": {
"WINDOWS_MCP_INPUT_BACKEND": "ibsim-dll",
"WINDOWS_MCP_INPUT_DRIVER": "AnyDriver",
"WINDOWS_MCP_RATE_MOVE_HZ": "120",
"WINDOWS_MCP_RATE_MAX_DELTA": "60",
"WINDOWS_MCP_RATE_SMOOTH": "0.0",
"WINDOWS_MCP_RATE_CPS": "8.0",
"WINDOWS_MCP_RATE_KPS": "12.0",
"WINDOWS_INPUT_LOG_LEVEL": "INFO"
}
}
}
}
Restart Gemini CLI to apply the configuration.
Acknowledgements
- Portions of functionality are adapted from Windows-MCP:https://github.com/CursorTouch/Windows-MCP
- Special thanks to IbInputSimulator for driver-level input:https://github.com/Chaoses-Ib/IbInputSimulator