win10ogod

Windows Driver Input MCP (Standalone)

Community win10ogod
Updated

Standalone MCP server exposing driver-level keyboard/mouse tools via IbInputSimulator.

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 (or ibsim-ahk)
  • 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
  • IBSIM_DIR optionally to point to IbInputSimulator directory if not colocated

Tools

  • Input-Info
  • Move-Tool
  • Click-Tool
  • Drag-Tool
  • Scroll-Tool
  • Type-Tool(text, method=unicode|clipboard|vk, press_enter=false)
  • Shortcut-Tool
  • Key-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 by index or first match by query; supports parent_hwnd and visibility flags; returns hwnd and details)
  • Windows-Activate (bring to front; optional show=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_DIR to the directory holding Binding.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.git
    • cd windows-driver-input-mcp
    • (Optional) uv sync if 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:

  1. cd windows-driver-input-mcp

  2. npx @anthropic-ai/mcpb pack

  3. In 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

MCP Server · Populars

MCP Server · New