ie-mode-mcp
ie-mode-mcp
MCP-сервер для управления устаревшими веб-приложениями, работающими в режиме IE браузера Microsoft Edge, через агента ИИ по протоколу MCP (Model Context Protocol).
AI Agent ──(MCP / stdio)──> ie-mode-mcp ──> BrowserManager ──> selenium-webdriver
│
IEDriverServer.exe
│
Microsoft Edge (IE Mode)
│
Legacy Web ApplicationСостоит только из Node.js 22 / TypeScript / selenium-webdriver (без HTTP-сервера, БД, DI, фреймворка логирования)
Транспорт MCP — только stdio
Только одна сессия браузера, операции WebDriver выполняются полностью последовательно
Полный HTML не возвращается;
inspect_pageвозвращает сводную информацию об экране, предназначенную для LLMНет потока утверждения. Операция выполняется в момент вызова инструмента
Содержание
1. Быстрый старт
Выполните следующее в Windows.
git clone https://github.com/sumikof/iedriver-mcp.git
cd iedriver-mcp
npm install
npm run build
# IEDriverServer.exe のパスと、遷移を許可する Origin を指定して起動
$env:IE_MCP_DRIVER_PATH = "C:\tools\IEDriverServer.exe"
$env:IE_MCP_ALLOWED_ORIGINS = "http://legacy01.local"
node dist/index.jsЕсли в stderr выводится {"level":"info","event":"started","transport":"stdio"}, запуск успешен.
Обычно сервер запускается не вручную, а автоматически через конфигурацию MCP на стороне AI-агента.
2. Предварительные требования
Элемент | Содержание |
ОС | Windows 11 / Windows 10 (интерактивный сеанс с выполненным входом) |
Node.js | 22 или выше |
Браузер | Microsoft Edge (с доступным режимом IE) |
Драйвер | IEDriverServer.exe (Selenium 4.x. Рекомендуется 32-битная версия) |
Загрузите IEDriverServer.exe со страницы загрузки Selenium и поместите в любую папку (например,
C:\tools\). Из-за известных ограничений 64-битной версии Selenium рекомендует использовать 32-битную версию.IEDriver подвержен влиянию графического интерфейса, фокуса окна и нативных событий, поэтому рекомендуется использовать выделенную виртуальную машину Windows или выделенный сеанс Windows.
Конфигурация с запуском браузера в службе Windows (Сеанс 0) не поддерживается.
MCP-сервер, IEDriver и Edge должны работать в одной среде Windows.
3. Предварительная настройка на стороне Windows
IEDriver сильно зависит от настроек среды. Перед запуском MCP-сервера сначала выполните настройку вручную.
3.1 Включение режима IE в Edge
Предварительно убедитесь вручную в Edge, что целевой сайт открывается в режиме IE. Режим IE включается
одной из следующих политик (в разделе Software\Policies\Microsoft\Edge).
Политика (отображаемое имя) | Имя значения реестра |
Configure Internet Explorer integration |
|
Configure the Enterprise Mode Site List |
|
Send all intranet sites to Internet Explorer | (настраивается через групповую политику начиная с Edge 77) |
Конкретная конфигурация зависит от политики организации, поэтому обратитесь к документации Microsoft по режиму IE и к администратору вашей организации. Убедитесь, что Windows и Edge обновлены до последних версий.
3.2 Настройки, требуемые IEDriver
Элемент | Необходимое состояние | Обработка в данном сервере |
Масштаб браузера | 100% | Не обязательно, так как |
Защищённый режим (Protected Mode) | Одинаковая настройка для всех зон | Если не унифицирован, при запуске возникнет исключение. Унифицируйте в Свойствах обозревателя → Безопасность |
Разрядность IEDriverServer | Рекомендуется 32-битная | — |
Если настройки защищённого режима не унифицированы, browser_start завершится ошибкой. Параметр IEDriver
introduceFlakinessByIgnoringProtectedModeSettings не используется, так как он делает работу нестабильной.
4. Установка и сборка
npm install # 依存パッケージの取得
npm run build # TypeScript を dist/ へビルドРезультат сборки — dist/index.js. После сборки можно запустить также через npm start (= node dist/index.js).
5. Переменные окружения
Файлы конфигурации (YAML / JSON) не используются; настройка осуществляется только через переменные окружения.
Переменная окружения | Описание | Значение по умолчанию |
| Путь к msedge.exe | Не указано (IEDriver обнаружит автоматически) |
| Путь к IEDriverServer.exe | Не указано (поиск в |
| Разделённые запятыми Origins, разрешённые для |
|
| Тайм-аут по умолчанию для поиска элементов и ожидания (мс) |
|
IE_MCP_EDGE_PATH=C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe
IE_MCP_DRIVER_PATH=C:\tools\IEDriverServer.exe
IE_MCP_ALLOWED_ORIGINS=http://legacy01.local,http://legacy02.local
IE_MCP_TIMEOUT_MS=10000Начиная с IE Driver 4.5.0, в средах без IE (по умолчанию в Windows 11) он автоматически обнаруживает Edge, поэтому
IE_MCP_EDGE_PATHобычно не требуется. Указывайте явно только в случае неудачного автоматического обнаружения.Для обеспечения воспроизводимости в работе рекомендуется явно указывать
IE_MCP_DRIVER_PATH.IE_MCP_ALLOWED_ORIGINS— это простое ограничение для предотвращения случайных операций; проверяется полное совпадение Origin (схема + хост + порт). Ограничение по пути не применяется.
6. Способы запуска
Ручной запуск (для проверки работы)
PowerShell:
$env:IE_MCP_DRIVER_PATH = "C:\tools\IEDriverServer.exe"
$env:IE_MCP_ALLOWED_ORIGINS = "http://legacy01.local"
node dist/index.jsКомандная строка:
set IE_MCP_DRIVER_PATH=C:\tools\IEDriverServer.exe
set IE_MCP_ALLOWED_ORIGINS=http://legacy01.local
node dist\index.jsОжидает подключения клиента через stdio. Стандартный ввод/вывод используется для протокола MCP,
поэтому в этом состоянии ввод с клавиатуры не даёт ответа (нормально). Все логи выводятся в stderr.
Выход — Ctrl+C (браузер также автоматически закрывается).
Примечание: Запуск MCP-сервера не запускает браузер. Браузер запускается, когда агент вызывает
browser_start.
Обычная эксплуатация
AI-агент (MCP-клиент) запускает данный сервер как дочерний процесс. Ручной запуск не требуется. Выполните настройку, описанную в следующей главе.
7. Регистрация в AI-агенте
Добавьте следующее в файл конфигурации MCP-клиента.
{
"mcpServers": {
"ie-mode": {
"command": "node",
"args": ["C:\\ie-mode-mcp\\dist\\index.js"],
"env": {
"IE_MCP_DRIVER_PATH": "C:\\tools\\IEDriverServer.exe",
"IE_MCP_EDGE_PATH": "C:\\Program Files (x86)\\Microsoft\\Edge\\Application\\msedge.exe",
"IE_MCP_ALLOWED_ORIGINS": "http://legacy01.local,http://legacy02.local",
"IE_MCP_TIMEOUT_MS": "10000"
}
}
}
}В JSON экранируйте обратную косую черту в путях (
C:\\...).В
argsукажите абсолютный путь к собранномуdist/index.js.В случае Claude Code также можно зарегистрировать через
claude mcp add.
claude mcp add ie-mode --env IE_MCP_DRIVER_PATH=C:\tools\IEDriverServer.exe --env IE_MCP_ALLOWED_ORIGINS=http://legacy01.local -- node C:\ie-mode-mcp\dist\index.jsПосле регистрации, если на стороне клиента видны 10 инструментов, включая browser_start, подключение успешно.
8. Справочник инструментов
Предоставляется 10 инструментов. Низкоуровневые API WebDriver (например, findElement / executeScript) не предоставляются.
Инструмент | Входные данные | Описание |
| нет | Запускает Edge в режиме IE. Если уже запущен, повторно использует существующую сессию |
| нет | Завершает браузер. Можно вызывать многократно без ошибки |
|
| Проверяет разрешённый список URL, затем переходит |
|
| Возвращает URL / заголовок / текст экрана / интерактивные элементы |
|
| Ожидает видимости и доступности, затем кликает |
|
| Вводит текст в input / textarea |
|
| Выбирает option в |
|
| Ожидает выполнения условия |
|
| Переключается на всплывающее окно / другое окно |
| нет | Возвращает текущий экран в формате PNG (как MCP image content) |
Общее: Селектор
{ "by": "id | name | css | xpath | linkText", "value": "searchButton" }В устаревших веб-приложениях часто используются name и xpath, поэтому они поддерживаются.
Общее: frame (только один уровень iframe)
Все инструменты для работы с элементами могут принимать опциональный frame. При указании сначала возвращаются в defaultContent,
затем переключаются на фрейм и выполняют поиск элемента внутри него.
{
"frame": { "by": "name", "value": "mainFrame" },
"selector": { "by": "id", "value": "searchButton" }
}browser_start
{}{ "status": "ready", "reused": false }reused: true указывает, что используется существующая сессия. Если существующая сессия неактивна,
он автоматически запускается заново.
navigate
{ "url": "http://legacy01.local/customer" }{ "url": "http://legacy01.local/customer", "title": "顧客検索" }inspect_page
Основной инструмент для понимания состояния экрана агентом. Не возвращает полный HTML, а только URL / заголовок / отображаемый текст /
интерактивные элементы (a button input textarea select iframe). Скрытые элементы и input с type="hidden" исключаются.
{ "frame": { "by": "name", "value": "mainFrame" } }{
"url": "http://legacy01.local/customer",
"title": "顧客検索",
"text": "顧客検索 顧客名 支店 検索",
"elements": [
{ "tag": "input", "id": "customerName", "name": "customerName", "type": "text" },
{ "tag": "select", "id": "branch", "name": "branch", "text": "東京支店", "optionCount": 12 },
{ "tag": "button", "id": "searchButton", "text": "検索" },
{ "tag": "iframe", "name": "mainFrame" }
],
"truncated": false
}truncated: trueуказывает, что список элементов обрезан по лимиту (300 записей).Если в списке элементов есть
iframe, для просмотра его содержимого вызовите повторно с указаниемframe.
click
{ "selector": { "by": "id", "value": "searchButton" } }{ "url": "http://legacy01.local/customer", "title": "顧客検索" }Ожидает, пока элемент станет видимым и доступным, затем кликает. Автоматический повтор клика не выполняется (чтобы предотвратить повторную обработку, если регистрация, обновление или отправка уже выполнены).
type
{
"selector": { "by": "id", "value": "customerName" },
"text": "山田太郎",
"clear": true
}Если clear (по умолчанию true) равно true, то после clear() вводит текст; если false — добавляет текст.
select
{
"selector": { "by": "id", "value": "branch" },
"by": "text",
"value": "東京支店"
}{ "text": "東京支店", "value": "13", "index": 2 }by может быть text / value / index (index начинается с 0).
wait_for
Не использует фиксированные задержки, а явно ожидает.
{
"type": "visible",
"selector": { "by": "id", "value": "resultTable" },
"timeoutMs": 10000
}
| Необходимые входные данные | Условие |
|
| Элемент существует в DOM |
|
| Элемент отображается |
|
| Элемент отображается и доступен для взаимодействия |
|
| Текст элемента содержит |
|
| Текущий URL содержит |
|
| Заголовок содержит |
Если timeoutMs опущен, используется IE_MCP_TIMEOUT_MS.
switch_window
{ "target": "newest" }{ "index": 1 }{ "url": "http://legacy01.local/detail", "title": "顧客詳細", "index": 1, "windowCount": 2 }newest выполняет кратковременный опрос появления нового дескриптора окна. Если не обнаружено, переключается на последнее существующее окно.
screenshot
{}Возвращает PNG-изображение (как image content MCP). Используется для проверки макета или экрана ошибки, которые невозможно определить только по DOM.
9. Примеры использования
Основной цикл
browser_start → navigate → inspect_page → click / type / select → wait_for → inspect_pageПовторяйте: inspect_page для понимания экрана → операция → wait_for для ожидания результата → снова inspect_page.
Пример: Поиск клиента «Ямада Таро» и открытие экрана подробностей
# | Инструмент | Аргументы |
1 |
|
|
2 |
|
|
3 |
|
|
4 |
|
|
5 |
|
|
6 |
|
|
7 |
|
|
8 |
|
|
9 |
|
|
10 |
|
|
11 |
|
|
Пример: Работа внутри iframe
{"tool": "inspect_page", "args": {}}
{"tool": "inspect_page", "args": { "frame": { "by": "name", "value": "mainFrame" } }}
{"tool": "click", "args": {
"frame": { "by": "name", "value": "mainFrame" },
"selector": { "by": "id", "value": "searchButton" }
}}Указание frame передаётся при каждой операции (внутри каждая операция сначала возвращается в defaultContent, затем переключается, поэтому состояние не сохраняется).
Пример: Работа с всплывающим окном и возврат в исходное окно
{"tool": "click", "args": { "selector": { "by": "id", "value": "openPopup" } }}
{"tool": "switch_window", "args": { "target": "newest" }}
{"tool": "inspect_page", "args": {}}
{"tool": "switch_window", "args": { "index": 0 }}10. Ошибки и их устранение
Ошибки возвращаются не в виде Stack Trace Selenium, а в следующем коде (isError: true).
{
"error": "ELEMENT_NOT_FOUND",
"message": "Element was not found: id=searchButton",
"selector": { "by": "id", "value": "searchButton" }
}Код ошибки | Значение | Устранение |
| Браузер не запущен | Вызовите |
| Элемент или frame не найден | Проверьте фактические элементы через |
| Условие | Пересмотрите условие и |
| Указанное окно не существует | Пересмотрите |
| Не удалось перейти | Проверьте URL, сеть, аутентификацию |
| IEDriver / Edge аварийно завершился | Перезапустите через |
| Origin вне разрешённого списка | Пересмотрите |
| Некорректные аргументы | Проверьте спецификацию входных данных инструмента |
| Прочее (включая ошибки запуска) | Проверьте |
Восстановление после DRIVER_LOST
Если браузер или драйвер упал, внутренний WebDriver уничтожается, и последующие операции приводят к
BROWSER_NOT_STARTED. Автоматическое восстановление и автоматический повтор последней операции не выполняются (чтобы предотвратить побочные эффекты, такие как двойная регистрация).
На стороне агента вызовите browser_start заново, проверьте состояние экрана через inspect_page,
затем возобновите операции. Последняя операция могла быть уже выполнена, поэтому не следует повторно выполнять операции регистрации/обновления как есть.
11. Логирование
stdout используется протоколом MCP, поэтому все логи выводятся в stderr одной строкой JSON.
{"level":"info","event":"started","transport":"stdio"}
{"level":"info","tool":"navigate","url":"http://legacy01.local/customer","durationMs":842}
{"level":"info","tool":"type","selector":{"by":"id","value":"password"},"textLength":16,"durationMs":128}
{"level":"error","tool":"click","selector":{"by":"id","value":"x"},"error":"ELEMENT_NOT_FOUND","message":"Element was not found: id=x","durationMs":5012}Сами входные строки, cookie, учётные данные и полный HTML не записываются (для type записывается только длина текста).
Для сохранения в файл перенаправьте stderr.
node dist/index.js 2>> C:\logs\ie-mode-mcp.log12. Устранение неполадок
症状 | 確認すること |
|
|
保護モード関連の例外が出る | Internet オプション → セキュリティ で全ゾーンの保護モード設定を統一する |
ズーム関連の例外が出る | Edge / IE のズームを 100% に戻す |
Edge は起動するが IE モードにならない | IE モードのポリシー(サイトリスト等)を確認する。手動で IE モード表示できるか先に確認 |
操作が固まる・要素をクリックできない | ウィンドウが最小化・非アクティブになっていないか。リモートデスクトップ切断中は不安定になる |
| frame 内の画面ではないか( |
Agent 側に Tool が見えない |
|
標準出力に何も出ない | 正常。ログは stderr に出力される |
screenshot は原因調査に有効。DOM 情報だけでは判断できない状態(モーダル、認証ダイアログ、
レンダリング崩れ)を確認できる。
13. 開発
src/
├─ index.ts MCP Server のエントリーポイント(stdio)
├─ config.ts 環境変数と stderr ログ
├─ tools.ts MCP Tool の Schema と Handler
├─ browser.ts BrowserManager(Selenium / IEDriver 操作の集約)
├─ selectors.ts Selector → Selenium の By 変換
└─ errors.ts Selenium Error → MCP Error Code 変換npm run build # tsc でビルド
npm start # node dist/index.jsMCP Tool は Selenium を直接触らず、必ず
BrowserManagerを経由する。すべての WebDriver 操作は Promise Chain で逐次化されており、Tool が並列に呼ばれても IEDriver へは 1 件ずつしか送られない。
副作用のない操作(要素検索・Window Handle 検出)のみ Retry する。
clickや送信は Retry しない。
14. 制限事項
初期実装では以下に対応しない。
複数ブラウザセッション / 複数ユーザー / HTTP Transport / REST API / DB / セッション永続化 /
自動ブラウザ復旧 / 複雑な Retry Policy / WebDriver Grid / 汎用 Selenium API /
executeScript Tool / 多段 iframe(1 階層のみ)/ Element Cache / Metrics / 承認フロー / 認証・認可
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 Connectors
Live browser debugging for AI assistants — DOM, console, network via MCP.
Screenshot, diff, audit and sitemap-capture any web page — 5 MCP tools for AI agents.
A paid remote MCP for AI agent browser MCP session, built to return verdicts, receipts, usage logs,
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/sumikof/iedriver-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server