OpenInputBridge-MCP
OpenInputBridge-MCP
OpenInputBridge(Interception совместимый драйвер ввода клавиатуры/мыши уровня ядра)を、MCP (Model Context Protocol) 経由のツールとして公開するサーバーです。 Сервер, публикующий OpenInputBridge — совместимый с Interception драйвер ввода клавиатуры/мыши на уровне ядра — в виде инструментов через MCP (Model Context Protocol).
GUI/ネイティブアプリのテスト自動化における SendInput() / UI Automation / 座標ベースの自動化ツールの代替・上位互換として、AIエージェント(Claude Codeなど)やテストコードから、カーネルレベルの合成キーボード/マウス入力を送信できます。
Вы можете отправлять синтетический ввод с клавиатуры/мыши на уровне ядра от AI-агентов (например, Claude Code) или тестового кода — как альтернативу и более продвинутую замену SendInput(), UI Automation и инструментам автоматизации на основе координат при тестировании GUI/нативных приложений.
⚠️ 本プロジェクトは oblitum/Interception(LGPL/商用デュアルライセンス)のコードには一切依存していません。ヘルパー実行ファイル(
helper/oib_bridge.c)は、OpenInputBridge本体のdocs/PROTOCOL.mdに文書化されたワイヤプロトコルだけを根拠に、独自にIOCTLを実装しています。
⚠️ Этот проект полностью не зависит от кода oblitum/Interception (двойная лицензия LGPL/коммерческая). Вспомогательный исполняемый файл (
helper/oib_bridge.c) реализует собственный IOCTL, опираясь исключительно на проводной протокол, задокументированный вdocs/PROTOCOL.mdсамой OpenInputBridge.
これは何のためのツールか
Related MCP server: ScreenHand
Каково назначение этого инструмента?
SendInput() / UI Automation / PyAutoGUI +[Pause] Selenium等の座標ベース自動化には、テスト自動化の現場でよく遭遇する、構造的な限界があります。本ツールはそれらを、ドライバレベルで合成入力を注入することで回避します。
У средств автоматизации на основе координат, таких как SendInput(), UI Automation, PyAutoGUI и Selenium, есть структурные ограничения, с которыми часто сталкиваются при автоматизации тестирования. Этот инструмент обходит их, внедряя синтетический ввод прямо на уровне драйвера.
よくある失敗パターン | 原因 | 本ツールでの解決方法 |
管理者権限で起動したアプリに入力が届かない | UIPI (User Interface Privilege Isolation) により、非管理者プロセスからの合成入力が上位 integrity level のウィンドウにブロックされる | カーネルドライバ層でHIDスタックに直接介在するため、送信元プロセスの integrity level に依存しない |
RDP/仮想マシン/CI専用機で不安定になる | 仮想ディスプレイやリモートセッションでは、 | ドライバはセッションが物理か仮想かにかかわらず HID スタック側で動作する |
UI Automation/PyAutoGUI が解像度・DPI 変更で壊れる | 画面座標や UI 要素のプロパティに依存する | キーのメイクコード/マウスの相対移動量に基づいて送信するため、解像度に依存しない |
一部のアプリが合成入力( | アプリによっては | 物理デバイスと同じ経路( |
注意: 上記はあくまで技術的な限界の回避策であり、「検知されない」ことを保証するものではありません。カーネルレベルのフィルタドライバ自体が検知される可能性があることは SECURITY.md に記載されています。自分が権限を持つ・管理しているテスト環境以外(他社のゲーム・アプリのアンチチート回避目的など)での利用は想定しておらず、対象ソフトウェアの利用規約に違反する可能性がある用途には使用しないでください。
Внимание. Вышеописанное — лишь обход технических ограничений, и это не гарантирует, что действие останется «незамеченным». О возможности обнаружения самого фильтрующего драйвера уровня ядра написано в SECURITY.md. Инструмент не предназначен для использования вне сред, которыми вы владеете или управляете (например, для обхода анти-чита в чужих играх/приложениях); не используйте его в целях, которые могут нарушать условия использования соответствующего ПО.
アーキテクチャ
Архитектура
flowchart TB
Client["MCPクライアント<br/>(Claude Desktop / Claude Code など)"]
subgraph Server["openinputbridge-mcp (Node.js/TypeScript)"]
direction TB
McpServer["MCP Server<br/>(stdio transport, ネットワーク非公開)"]
Safety["Safety Gate<br/>arm必須化 + レート制限"]
Bridge["OibBridge<br/>JSON Linesクライアント"]
McpServer --> Safety --> Bridge
end
subgraph Helper["oib_bridge.exe (自作Cヘルパー, MIT)"]
direction TB
StdioLoop["stdin/stdout<br/>JSON Lines プロトコル"]
Watchdog["排他モード<br/>ウォッチドッグスレッド"]
Ioctl["DeviceIoControl呼び出し"]
StdioLoop --> Ioctl
Watchdog -.監視.-> Ioctl
end
subgraph Driver["OpenInputBridgeドライバ"]
direction TB
Devices["\\.\interception00-19<br/>(コントロールデバイス)"]
Filter["oib_kbd.sys / oib_mou.sys<br/>(キーボード/マウス フィルタドライバ)"]
Devices --> Filter
end
Target["対象アプリケーション<br/>(実際のキーボード/マウス入力として着弾)"]
Client -- "MCPプロトコル (stdio, JSON-RPC)" --> McpServer
Bridge -- "子プロセスspawn<br/>stdin/stdout (JSON Lines)" --> StdioLoop
Ioctl -- "IOCTL_WRITE / IOCTL_SET_FILTER 等" --> Devices
Filter -- "合成入力として注入<br/>(実HIDスタックと同じ経路)" --> Targetstdioトランスポートのみ。ネットワーク・リスナーは一切持ちません。MCPクライアントがローカルでサブプロセスとして起動する通常の使い方のみを想定しています。
Только stdio-транспорт. Никаких сетевых listeners. Предусмотрен только обычный вариант, когда MCP-клиент запускает его как локальный подпроцесс.
ヘルパー(
oib_bridge.exe)とドライバの間はdocs/PROTOCOL.mdを単一の仕様源とし、third_party/interception(LGPL)には一切依存しません。Между хелпером (
oib_bridge.exe) и драйвером единственным источником спецификации являетсяdocs/PROTOCOL.md; зависимостей отthird_party/interruption(LGPL) нет.MCPサーバー(Node.js)とヘルパー(C言語)の間は、1行に1つのJSONオブジェクトという、単純なリクエスト/レスポンス方式です。
Между MCP-сервером (Node.js) и хелпером (C) — простой протокол запроса/ответа: одна строка — один JSON-объект.
できること(v1ツール一覧)
Возможности (список инструментов v1)
送信専用です。物理入力の内容を読み取る・監視するツールは意図的に含まれていません(詳細は SECURITY.md)。 Только отправка. Инструменты для чтения/наблюдения содержимого физического ввода намеренно не включены (см. SECURITY.md).
ツール | できること |
| Включить инструменты отправки для текущей сессии (не обязательно вызвать хотя бы один раз) |
| 送信系ツールを無効化する |
| Проверить состояние установки драйвера, версию, конфигурацию слотов клавиатуры/мыши (диагностика, можно вызывать без arm) |
| Отправить одно нажатие клавиши (нажать не отпустить). Подходит и комбинаций с модификаторами, например Ctrl+A. |
| Отдельно зажать/отпустить клавишу (для сложных жестов) |
| changes строку в последовательность клавиш (только раскладка US) |
| Относительное/абсолютное перемещение мыши |
| Щелчок, нажатие и отпускание кнопок мыши (левая/правая/средняя/X1/X2) |
| Вертикальная/горизонтальная прокрутка колесиком |
| Исключительный режим: захватывает и отбрасывает ввод физической клавиатуры/мыши по всем слотам, находящимся под целевым приложением, и доставляет только синтетический ввод из этой сессии (для CI и отдельных тестовых машин; требует arm и большой аккуратности) |
| Отключить исключительный режим (всегда можно вызвать без arm — аварийный выход) |
| Проверить, активен ли в текущий момент исключительный режим |
AIエージャントが知っておくべき仕様
Что следует знать AI-агенту
このMCPサーバーを操作するAIエージェント(あるいはこれを実装する開発者)は、以下の点を理解しておく必要があります。 AI-агенту (или разработчику, реализующему данного AI-агента), который будет работать с этим MCP-сервером, необходимо понимать следующее.
1. Перед отправкой обязательно вызвать enable_input_control
サーバー起動直後は、すべての送信系ツール(press_key 等)が NotArmedError で拒否されます。MCPクライアント自体のツール許可UIとは別に、このドライバー固有の強力さにふさわしい,もう一段の明示的な同意ステップです。セッション中に一度呼んでえば、以後そのプロセスが生きている間は有効です。
Сразу после запуска сервера все отправные инструменты (например, press_key) отклоняются с ошибкой NotArmedError. Это дополнительный явный шаг согласия, соответствующий особенностям драйвера, в дополнение к интерфейсу разрешений инструментов самого MCP-клиента. Достаточно вызвать его один раз в текущей сессии, и он останется активным в течение всего времени жизни процесса.
2. Имена клавиш — словарь KeyboardEvent.code из DOM
press_key/key_down(../key_up) — параметр key key_upc — для параметра key используется та же терминология, что понятна инженерам тестовой автоматизации на Playwright/Selenium: это нотация DOM KeyboardEvent.code (например KeyA…KeyZ, Digit0…Digit9, Enter, ArrowUp, ShiftLeft, F1…F12, а также IntlRo/IntlYen/Convert/NonConvert/KanaMode, присущие японской раскладке JIS). Полный список см. в KEY_TABLE в src/keycodes.ts. Поскольку эти коды основаны на физическом расположении клавиш, они работают независимо от раскладки.
type_text должен вычислять обратную связь: из вводимых символов восстанавливать нажатия клавиш и состояние Shift, а это уже зависит от активной раскладки клавиатуры на стороне ОС. По умолчанию (layout: "auto") для каждого вызова определяется поле ввода locale окна, находящегося в фокусе, и автоматически выбирается между американской (US) и японской (JIS) раскладкой (можно также задать явно через параметр layout). Обе раскладки — US и JIS — проверены на реальном оборудовании (см. test/REALWORLD TESTING.md). Прочие клавиатурные раскладки (кроме US/JIS) пока не поддерживаются и считаются US. Ввод хираганы/汉字 через IME «не входит» в область отвественности.
3. type_text сначала полностью проверяет текст и только потом отправляет (без частичных побочных эффектов)
Если в строке есть хотя бы один неподдерживаемый символ (например, не ASCII), то ничего не отправляется и возвращается ошибка. Не бывает такого, чтобы часть текста уже была введена, а остаток не смог.
4. Границы слотов устройств могут быть переменными
Среди двадцати слотов \\.\interception00…19 то, где заканчется клавиатура и начинается мышь, зависит от параметра KeyboardSlotCount, заданного при установке драйвера (по умолчанию — 10/10). Встроенные значения по умолчанию в инструментах (для клавиатуры device=0, для мыши — device=10) рассчитываются на стандартную конфигурацию, поэтому при работе с несколькими устройствми или нестандартной конфигурацией сначала проверьте поля keyboardSlotCount/mouseSlotCount в get_driver_status.
5. Лимит частоты запросов
По умолчанию разрешается не более 500 событий ввода за 10 секунд (может меняться через переменные среды OIB_MCP_RATE_LIMIT_MAX / OIB_MCP_RATE_LIMIT_WINDOW_MS). Это защита от непрерывной отправки событий ввышедшим из-под контроля агентом (включая применение при инъекции в промпт). При превышении возвращается RateLimitError.
6. Исключительный режим — это мощно и опасно. Только на CI / специализированных тестовых машинах
При включении enable_exclusive_input_mode текущая и физическая клавиатура/мышь оператора вообще не будут передавать ввод в целевое приложение. Включение этого режима на ежедневно используемой рабочей машине приведет к тому, что физическая клавиатура/мышь перестанет работать — поэтому он предназначен только для автоматических тестов без наблюдателя (CI, отдельные тестовые машины).
Если heartbeat не поступает в течение заданного времени (по умолчанию 5 секунд, настройка через
watchdogTimeoutMs), режим автоматически отключается.disable_exclusive_modedisable_exclusive_start? Описка:disable_exclusive_input_mode— может быть вызкан всегда, независимо от наличияarmили лимита частоты запросов.В самом крайнем случае, когда MCP-сервер или сам AI-агент становятся недоступны: завершение процесса
oib_bridge.exeвозвращает физический ввод немедленно (очистка при закрытии дескриптора по протоколу Interception; этот эффект не может быть заменен никаким другим процессом). Подробности — в SECURITY.md.
7. Набор v1 не включает инструменты «чтения/мониторинга»
Инструменты, которые передают AI-агенту данные о том, что ввелось с физической клавиатуры/мыши (аналоги IOCTL_READ/interception_receive), намеренно отсутствуют реализация. Это — проектировочное решение, которое исключает наиболее серьёзный способ злоупотребления: когда ИИ мог бы через MCP прослушивать весь ввод на системе.
前提条件
Предварительные требования
Windows特化(OpenInputBridge сам работает только на Windows)
Только Windows — поскольку сам OpenInputBridge является Windows-only.
OpenInputBridge-driver должен быть установка и запущен (
sc.exe query OpenInputBridgeKeyboard/OpenInputBridgeMouseдолжны возвращатьRUNNING).Вожен Node.js 18 или выше
Для сборки исполняемого файла-хелпера требуется Visual Studio 2022 (C++ Build Tools). Готовые предварительно собранные бинарники будут распространяться позже (см. «Оценные ограничения»).
クイックスタート
Краткое руководство
git clone https://github.com/Applet-LLC/OpenInputBridge-MCP.git
cd OpenInputBridge-MCP
npm install
npm run build
# C ヘルパーのビルド (Visual Studio Developer PowerShell/コマンドプロンプトで)
cl.exe /nologo /W4 /utf-8 /Fe:helper\oib_bridge.exe helper\oib_bridge.cВыполните регистрацию в MCP-клиенте (например, в файле .mcp.json проекта Claude Code).
{
"mcpServers": {
"openinputbridge": {
"command": "node",
"args": ["C:\\path\\to\\OpenInputBridge-MCP\\dist\\index.js"]
}
}
}После подключения сначала проверьте, что драйвер поопределяем, через get_driver_status, затем вызовите enable_input_control и только после этого используйте отдельные инструменты.
既知の制限
Известные ограничения
Проверка на реальном оборудовании (в среде с установленным OpenInputBridge) была выполнена.Подробности см. в test/REALWORLD_TESTING.md.
Поддерживаются американская (US) и японская (JIS) раскладки (
type_textдля каждого вызова автоматически определяет layout окна в фокусе; можно выбрать и явно). Прочие раскладки (например, немецкая, французская) в настоящее время не поддерживаются — они обрабатываются как US. Ввод хираганы/кандзи через IME не входит в возможности. It is important to note в исходной спецификации содержится это.Клавиша «¥» на клавиатуре JIS (в силу известной спецификации Windows) на самом деле отправляет ASCII- backslash
\, и вtype_textнет способа ввести настоящий символ йены (U+00A5). При этом саму физическую клавишу можно нажать черезpress_key({ key: "IntlYen" }).В
type_textпри экстремальных паттернах посимвольного переключения Shift (например,"MiXeD") некоторые символы, даже после мер по тайминга, иногда не учитывают Shift. В обычных текстах — английских фразах, идентификаторах — это не проявляется.Относительное перемещение мыши (
mouse_moveсabsolute: false) зависит от ускорения указателя ОС, поэтому заданное количество перемещения и фактическое перемещение курсора не совпадают (ожидаемое поведение, поскольку используется путь физической мыши).Система координат для абсолютного перемещения мыши (
absolute: true) (особенно на мульти мониторах и в сценах с масштабированием DPI) не специфицировано. Рекомендуется заранее проверять, куда попадает указатель, в вашем окружении.Windows only
Нет инструментов чтения / наблюдения (намеренно, см. выше).
Готовые бинарные файлы не распространяются: в настоящее время пользователь обязан сам собрать
helper/oib_bridge.c. Сборка в GitHub Actions и публикация в npm — в будущих маком.
セキュリティ
Безопасность
О рисках возможностей данного инструмента (внедрение ввода по всей системе из процесса без повышенных привелегий) и о реализованных — прочтите SECURITY.md.
ロードマップ
План развития (Roadmap)
マイルストーン | 内容 | 状態 |
M1 | Прототип: C-хелпер ( | ✅ Завершено |
M2 | Набор инструментов v1 (только отправка) + механизмы безопасности (arm, ограничение частоты) | ✅ Завершено |
M3 | Исключительный режим (захват/отбрасывание физического ввода, автоматическое выключение по watchdog) | ✅ Завершено |
M4 | Проверка на реальном оборудовании (работоспособность и исправления на реальной установке OpenInputBridge, поддержка US/JIS) | ✅ Завершено (детали см. test/REALWORLD_TESTING.md) |
M5 | Публикация на GitHub (лицензия MIT, публичный репозиторий) | ✅ Завершено |
M6 | Автоматическая сборка xалуpper через GitHub Actions, обсуждение подпис, публикация npm-пакета ( | 🔲 Не начато |
M7 | Закрытое бета-тестивание: проверка в различных окружениях (нестандартная | 🔲 Не начато |
M8 | Рассмотрение публикации в каталог MCP-серверов (посведены стабильной работы) | 🔲 Не начаت |
Для будущих проверки и улучшений (приоритет не определен, их описание см. раздел «Невыполненные проверки» в test/REALWORLD_TESTING.md):
Проверка на реальном оборудовании автоматического восстановления через очистку драйвера при уничтожении процесса
oib_bridge.exeво время работы в эксклюзивном режиме.Отдельные тесты точности координат и поведение каждой кнопки для инструмента
mouse_click.Точное определение системы координат для абсолютного перемещения мыши (
absolute: true) в окружениях с один мульти монитором и масштабированием DPI.Поддержка раскладок клавиатуры кроме US/JIS.
ライセンス
Лицензия
MIT. Нет никакой зависимости от кода third_party/interaction (LGPL) — его действительно нет.
Contributors (авторы)
Applet-LLC — владелец проекта
Claude (Anthropic, через Claude Code) — вклад в реализацию, проверку на реальном оборудовании и создание документации.
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.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceAn MCP server that bridges AI agents with GUI automation capabilities, allowing them to control mouse, keyboard, windows, and take screenshots to interact with desktop applications.23MIT
- AlicenseNot gradedqualityFmaintenanceAn open-source MCP server for macOS and Windows that provides native desktop control via Accessibility APIs, OCR, and Chrome CDP. It enables AI agents to interact with applications, manage browser sessions, and automate workflows with high-speed native UI actions.22211AGPL 3.0
- AlicenseNot gradedqualityAmaintenanceGives AI agents and MCP clients direct control over native desktop apps, Chrome/Electron browsers, and Android devices with screenshots, OCR, accessibility-based element lookup, input simulation, window management, CDP, and ADB in one local server.126MIT
- FlicenseNot gradedqualityDmaintenancemacOS MCP server that enables AI agents to directly control the host OS, including mouse, keyboard, windows, files, and accessibility automation for computer-use workflows.1
Related MCP Connectors
MCP server for secureFlows: token-free URL builders and integration-linting tools for AI agents.
MCP server for AI agents to plan, verify, and deploy Cloudflare-native apps.
Hosted MCP server connecting claude.ai, ChatGPT and other AI apps to your own computer
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/Applet-LLC/OpenInputBridge-MCP'
If you have feedback or need assistance with the MCP directory API, please join our Discord server