Steel MCP Server
Steel MCP Server
Дайте Claude, Cursor, VS Code или другому MCP-клиенту браузер Chromium под управлением Steel. Используйте
Steel, чтобы читать страницы, которые блокируют обычный fetch, делать скриншоты или работать
с интерактивными сайтами, кликая, печатая и заполняя формы.
В отличие от цикла «скриншот и пронумерованные блоки» в v1, v2 читает страницы как markdown или деревья доступности, показывает небольшие скриншоты через MCP-блоки изображений, не используя пиксели для взаимодействия, и делает сеансы браузера явными.
Статус:
2.0.0-rc.8. Запускайте сервер локально через stdio или запускайте размещённую конечную точку самостоятельно — она есть в пакете и описана ниже.mcp.steel.devещё не работает.
Примеры запросов
Запрос | Что происходит |
«Прочитай эту страницу и кратко изложи таблицу цен». | Один |
«Найди и сравни цены на этот товар в этих трёх магазинах». | Три чтения без сохранения состояния или сеанс, если магазину нужен JavaScript для отрисовки |
«Войди в мой аккаунт и проверь итог в счёте за прошлый месяц». | Сеанс, снимок и передача вам на странице входа — сервер никогда не угадывает пароль |
«Заполни эту форму заявки данными из моего резюме». | Агент заполняет обычные поля, затем |
«Сделай скриншот начала этой статьи для слайда». | Один |
«Покажи, что произошло в моём последнем сеансе браузера». |
|
«Воспроизведи мой последний завершённый сеанс браузера». |
|
Related MCP server: visual-inspector-mcp
Что он предоставляет
Профиль по умолчанию browse — это шестнадцать инструментов:
Инструмент | Что он делает |
| Читает страницу с ограничением по бюджету, а также ограниченные ссылки/метаданные. Не запускает сеанс браузера |
| Снимает URL для человека или живой сеанс для визуальной проверки, видимой модели; захват URL поддерживает прокси |
| Преобразует страницу в PDF и возвращает ссылку; поддерживает прокси |
| Запускает сеанс браузера, с которым можно взаимодействовать |
| Завершает его и останавливает счётчик |
| Направляет сеанс на URL |
| Читает страницу как дерево доступности со ссылками |
| Находит элементы по тексту, безопасному регулярному выражению или роли, не читая всю страницу |
| Кликает, печатает, заполняет форму, выбирает, наводит курсор, прокручивает, нажимает клавишу, возвращается назад, закрывает оверлеи |
| Ждёт указанный текст, селектор или URL |
| Читает активность или заново обнаруживает живые дескрипторы этого учётного данных без запуска браузера |
| Приостанавливает работу, пока вы получаете исключительный контроль над тем же браузером, затем возвращает его агенту |
| По явному запросу на просмотр/воспроизведение возвращает безопасную ссылку на панель завершённого сеанса |
| Выполняет известные обратимые шаги одним вызовом; передаёт управление перед входом, оплатой или финальным подтверждением |
| Планирует нестандартную настройку и безопасно обнаруживает сохранённые идентификаторы профилей или пространства имён управляемых входов |
| Передаёт встроенному просмотрщику данные его подключения. Хосты скрывают его от модели |
Установите STEEL_PROFILE=scrape, чтобы предоставить только три инструмента чтения без сохранения состояния. Они никогда не запускают сеанс
браузера. Профиль по умолчанию browse добавляет тринадцать инструментов сеанса, перечисленных выше.
Сохранённая личность и нестандартные сеансы
Вызовите steel_session_options с абсолютным целевым URL, целью read, interact или account,
и только теми потребностями, которые явно требует задача. Обычные чтения по-прежнему рекомендуют steel_scrape.
Нестандартные планы возвращают кратковременную подписанную configuration для steel_session_create; токен
привязан к этому учётному данным Steel и истекает через десять минут.
Когда запрос говорит «мой профиль», «сохранённый вход» или «учётные данные Steel», сначала обнаружьте параметры
учётной записи; никогда не угадывайте UUID профиля или пространство имён учётных данных.
{
"url": "https://example.com/account",
"goal": "account",
"needs": ["persist_profile", "location"],
"country": "DE"
}Каталог учётных записей предоставляет только UUID/статус/временные метки профиля и пространство имён учётных данных/временные метки с точным происхождением.
Сохранённые значения, файлы cookie, отпечатки, конфигурация прокси, имена пользователей,
пароли и секреты TOTP никогда не попадают в контекст модели. Выберите профиль READY по UUID; имена
не угадываются. Загрузка профиля доступна только для чтения, если persist_profile не был явно запланирован. При
сохранении Steel создаёт или обновляет профиль при освобождении; он может быть UPLOADING, прежде чем станет
READY. Один существующий профиль не может иметь двух постоянных писателей через этот MCP одновременно.
Управляемый вход использует возвращённое пространство имён точного происхождения и может автоматически отправлять соответствующую форму.
STEEL_PROFILE=browse|scrape выбирает предустановку инструментов этого сервера и не связан с сохранёнными браузерными
профилями. Обнаружение профилей, сохранение, учётные данные, прокси и помощь с CAPTCHA — это функции
Steel Cloud; самостоятельные развёртывания возвращают именованный результат неподдерживаемой возможности.
Наблюдение и перехват управления
На хосте, поддерживающем MCP Apps — включая Claude — steel_session_create отображает работающий
браузер встроенно в разговоре. Кадры рисуются на холсте из собственной CDP-трансляции сеанса. Взять управление
приобретает возобновляемую исключительную аренду, прежде чем клики, ввод или прокрутка
вернутся на страницу, чтобы агент и человек не могли управлять одновременно. Вернуть управление возвращает
владение. Во время steel_session_handoff примите ожидающий запрос на передачу управления после этого; агент
затем заново читает страницу перед продолжением.
Хосты чата масштабируют встроенное представление для карточки, а не для браузера, поэтому представление запрашивает высоту, необходимую его
странице, и предлагает Полный экран — на хосте, который это разрешает; элемент управления удаляется на том, который не разрешает.
steel_session_handoff запускает этот процесс для конфиденциальной информации, проверки, ручного ввода, локальных
файлов или когда вы просите взять управление. Страницы входа и CAPTCHA могут вызывать его автоматически. Инструмент
отвечает input_required, ждёт возврата управления и проверяет текущую страницу, прежде чем агент
продолжит. Клиенты с запросом URL открывают внешний проигрыватель Steel, когда встроенное приложение недоступно.
Когда удалённый ввод файла открывается, пока вы управляете встроенным просмотрщиком, Выбрать локальный файл открывает доверенный локальный выбор. После подтверждения до 5 МБ передаётся через сокет браузера, ограниченный сеансом, непосредственно на эту страницу. Модель и MCP-сервер не получают ни локальный путь, ни байты файла, и файл не размещается в постоянном API файлов Steel. Клиент, который не может отобразить встроенный просмотрщик, сообщает о локальной загрузке как о недоступной, а не притворяется, что может читать ваш компьютер.
Для браузера, который уже завершился, явно попросите посмотреть или воспроизвести его и передайте его UUID
панели Steel в steel_session_replay, или опустите UUID, чтобы выбрать последний освобождённый сеанс.
Этот выпуск возвращает очищенную ссылку на панель Steel. Встроенное воспроизведение завершённых сеансов отключено
до тех пор, пока его браузерный ресурс не сможет быть размещён неизменяемо без увеличения полезной нагрузки MCP Apps.
Быстрый старт
Claude для macOS или Windows
Соберите расширение для рабочего стола и откройте его — Claude установит его и запросит ваш Steel API key. Больше ничего настраивать не нужно, и на этапе выполнения не требуется собственная установка Node.
git clone https://github.com/steel-dev/steel-mcp-server.git
cd steel-mcp-server
npm install
npm run pack:mcpb
open "build/steel-mcp-$(node -p 'require("./package.json").version').mcpb" # Windows: double-click itПри замене установленного пакета полностью закройте и снова откройте Claude после завершения установки, затем начните новый разговор, чтобы Claude прочитал новый каталог инструментов, а не использовал старый.
Steel Cloud
Вам нужен Node.js 20 или новее и Steel API key. Он ещё не опубликован в npm, поэтому установите его из исходного кода:
git clone https://github.com/steel-dev/steel-mcp-server.git
cd steel-mcp-server
npm installnpm install также собирает сервер. Чтобы использовать его с Claude Desktop на macOS, добавьте это в
~/Library/Application Support/Claude/claude_desktop_config.json:
{
"mcpServers": {
"steel": {
"command": "node",
"args": ["/absolute/path/to/steel-mcp-server/dist/stdio.js"],
"env": {
"STEEL_API_KEY": "<your-steel-api-key>"
}
}
}
}Или с Claude Code:
claude mcp add steel -e STEEL_API_KEY=your-steel-api-key -- node "$PWD/dist/stdio.js"Самостоятельно размещённый steel-browser
Запустите образ steel-browser, затем укажите серверу на него. Ключ API не требуется и не отправляется:
{
"mcpServers": {
"steel": {
"command": "node",
"args": ["/absolute/path/to/steel-mcp-server/dist/stdio.js"],
"env": {
"STEEL_LOCAL": "true"
}
}
}
}Для Claude Code запустите это из клонированного каталога steel-mcp-server:
claude mcp add steel -e STEEL_LOCAL=true -- node "$PWD/dist/stdio.js"Самостоятельно размещённый Steel запускает один сеанс браузера за раз. Он не поддерживает прокси, управляемые Steel, профили браузера, управляемые учётные данные или решение CAPTCHA. Сервер возвращает конкретное объяснение, если инструмент запрашивает одну из этих функций, доступных только в облаке.
Конфигурация
Variable | Default | Значение |
| — | Требуется для Steel Cloud. Никогда не отправляется в самостоятельное развертывание |
|
|
|
|
| Базовый URL REST Steel. Конечный |
|
|
|
|
| Неизменяемое время жизни по умолчанию. Запрос на создание может выбрать другое значение до 24 часов и максимума аккаунта |
|
| Освобождение при простое. Поддерживает обычное окно передачи/продолжения, но может удерживать покинутый браузер около 10 минут |
|
| Одновременные сессии, которые будет удерживать этот сервер |
|
| CDP-эндпоинт, выводимый из базового URL при самостоятельном развертывании |
Логи — это структурированный JSON в stderr; stdout несет только JSON-RPC.
Непрерывность сессии ограничена как простоем, так и неизменяемым expires_at. Один лишь видимый просмотрщик не резервирует сессию. Явная передача приостанавливает локальное освобождение по простою только до жесткого истечения срока, а реальный ввод пользователя в браузере сбрасывает часы простоя Steel. Освобождайте завершенные сессии незамедлительно.
Запуск хостируемой конечной точки
Хостируемая точка входа требует два пакета, которые стандартная установка намеренно пропускает, чтобы пользователь десктопа или npx никогда не таскал хостируемый стек:
npm install ioredis @modelcontextprotocol/node
# and, only if you want OTLP tracing:
npm install @opentelemetry/sdk-node @opentelemetry/exporter-trace-otlp-httpОни объявлены как опциональные peerDependencies. В исходном checkout уже есть все четыре, а Docker-образ устанавливает их сам.
node dist/hosted.js (или npm run start:hosted) обслуживает те же инструменты через Streamable HTTP на POST /mcp. Каждый вызывающий предоставляет свой ключ Steel в виде заголовка Authorization: Bearer или query-параметра ?apiKey= для хостов, которые не могут устанавливать заголовки; дескриптор, созданный одним запросом, может использоваться только теми учетными данными, которые его создали. GET /healthz отвечает на проверку балансировщика нагрузки, не обращаясь к списку разрешенных Host. GET и DELETE на /mcp отвечают 405, как требует спецификация от 2026-07-28.
Variable | Default | Значение |
| — | Обязательно. Разделенные запятыми имена хостов, на которых отвечает эта конечная точка. Без него DNS-ребендингу нечем помешать, поэтому сервер отказывается запускаться |
| — | Разделенные запятыми браузерные origins, которым разрешено вызывать её. Пустое значение отклоняет каждый запрос с заголовком |
|
| Порт для привязки. |
|
| Адрес для привязки |
| — | Разделяет записи дескрипторов между репликами, поэтому любая реплика может обслужить дескриптор, созданный другой. Без него записи остаются в процессе — корректно ровно для одной реплики |
|
| Пространство имен ключей, чтобы одно хранилище могло вместить несколько развертываний |
| per-process | HMAC-ключ для состояния передачи с участием человека. Обязателен при использовании |
| — | Любая стандартная переменная |
Сервер никогда не хранит собственный ключ Steel, поэтому задача самостоятельного развертывания — завершать TLS перед ним. Хостируемые логи — это структурированный JSON в stdout, а учетные данные вырезаются до того, как что-либо попадет в них.
docker-compose.yaml разворачивает эту конечную точку на любом compose-хосте, включая Coolify:
STEEL_ALLOWED_HOSTS=mcp.example.com docker compose up -d --waitОн собирает образ из этого репозитория и указывает dist/hosted.js, потому что собственная команда образа по умолчанию — это stdio-сервер, который не привязывает порт, поэтому платформа, не умеющая переопределять команду, развернула бы контейнер, который никогда не станет healthy. Направьте прокси на порт 8080, а не на тот, что используется по умолчанию, и задайте STEEL_ALLOWED_HOSTS как публичное имя хоста, которому прокси пересылает запросы: любой другой Host будет отклонен, а /healthz отвечает независимо, поэтому проверка по IP все равно проходит.
Подключение клиента к ней
Claude Code сам общается по Streamable HTTP:
claude mcp add steel --transport http https://mcp.example.com/mcp \
--header "Authorization: Bearer $STEEL_API_KEY"Claude Desktop — нет. Его claude_desktop_config.json запускает программу и общается по JSON-RPC через stdin и stdout этой программы, поэтому удаленной конечной точке нужен локальный мост:
{
"mcpServers": {
"steel": {
"command": "npx",
"args": [
"-y",
"mcp-remote@0.1.38",
"https://mcp.example.com/mcp",
"--header",
"Authorization:${STEEL_AUTH_HEADER}"
],
"env": { "STEEL_AUTH_HEADER": "Bearer <your-steel-api-key>" }
}
}
}Две детали в этом фрагменте выглядят как ошибки, но это не так. В заголовке нет пробела после двоеточия, а учетные данные находятся в env, а не инлайн, потому что некоторые хосты не экранируют пробел внутри args и портят значение. Предпочитайте заголовок query-параметру ?apiKey= везде, где клиент может его установить: форма запроса существует для клиентов, которые не могут, а любой прокси перед этим сервером логирует строку запроса до того, как запрос достигнет сервера.
Как получать хорошие результаты
Сначала беритесь за steel_scrape — большинство вопросов о странице на этом заканчиваются, и он не запускает платную сессию. Создавайте сессию только тогда, когда нужно взаимодействовать со страницей.
Чтобы действовать на странице, прочитайте её с помощью steel_snapshot. Если вы уже знаете, что нужно, используйте steel_find хотя бы с одним из text, regex или role; небезопасные регулярные выражения отклоняются. Оба инструмента назначают элементам ссылки @eN, которые сервер может адресовать. Элементы без ссылки нельзя кликнуть.
Действия не возвращают еще один полный снимок, если вы не попросите об этом. Вместо этого они сообщают, что изменилось. Если действие сообщает, что ничего не изменилось, сделайте свежий снимок, а не повторяйте его. steel_session_diagnostics принимает живой MCP session_id, UUID завершенной сессии из панели управления Steel, list_live: true для восстановления активных дескрипторов этих учетных данных или без id для просмотра последней освобожденной сессии. Он никогда не запускает браузер. Прямые клики, прокрутка и ввод, выполняемые через живой просмотрщик, идут по CDP и могут отсутствовать в его временной шкале agent-trace; скрытые счетчики относятся только к обычным сетевым журналам Request/Response браузера.
Чтобы перехватить управление браузером, попросите агента вызвать steel_session_handoff; по завершении используйте Hand back, затем примите ожидающий запрос передачи, чтобы агент мог продолжить. Чтобы наблюдать за облачным браузером вне хоста MCP Apps, откройте viewer_url, возвращенный steel_session_create. Активные сессии также появляются в панели управления Steel.
Текст страницы оборачивается в блок <untrusted-page-content>. Относитесь к нему как к данным, а не инструкциям. Сервер удаляет скрытый контент и другие распространенные носители prompt-инъекций, но не может сделать произвольный веб-сайт заслуживающим доверия.
Разработка
npm run build
npm run typecheck
npm run lint
npm test # unit + integration
npm run budget # tools/list byte budget per profile
npm run conformance # MCP conformance suite
npm run test:browser # runs the inline viewer in a real Chrome
npm run test:e2e # starts, waits for and tears down the real-browser stackРабочие правила см. в CLAUDE.md. PLAN.md отслеживает реализацию, а RESEARCH.md фиксирует обоснование дизайна. RELEASING.md объясняет, что поставляется из этого одного пакета — десктоп-сборка, npm-пакет, контейнерный образ и хостируемый сервис — и как выпускается релиз.
Устранение неполадок
Сайт возвращает 403 или показывает страницу с проверкой. Это защита от ботов, а не ошибка. В ошибке указаны вендор и одно действие, которое стоит попробовать следующим; меняйте по одной вещи за раз. steel_session_diagnostics показывает, что произошло.
Управляемые прокси или решение CAPTCHA завершаются ошибкой оплаты. Для них нужен подтвержденный платный баланс $10 на Launch; бесплатные кредиты не считаются.
Ссылка @eN перестала работать. В ошибке указано почему — страница перешла по навигации, узел был удален или элемент изменил роль или доступное имя — и что вызвать для восстановления.
Кажется, сессия исчезла. Steel освобождает сессию после десяти минут без активности и по жесткому временному лимиту плана. Создавайте новую только если нужно снова взаимодействовать. Чтобы прочитать старую активность, вызовите steel_session_diagnostics с UUID из панели управления или опустите id для последней освобожденной сессии.
Клик сообщает, что ничего не изменилось. Вероятно, он пришелся на что-то другое. Если оверлей перекрывает цель, ошибка называет его; запустите steel_act с dismiss_overlays, затем повторите.
Расширение не запускается с сообщением о STEEL_API_KEY. Ключ так и не дошел до сервера. Откройте настройки расширения в Claude и введите его заново; поле доступно только для записи, поэтому пустое выглядит так же, как заполненное.
«Concurrency limit reached» при steel_session_create. Ваш план Steel допускает меньше одновременных браузеров, чем открыто. Сессии, которые вы забыли освободить, учитываются — steel_session_release немедленно освобождает одну, а Steel возвращает простаивающие сессии через десять минут.
Трассировка была запрошена, но не смогла запуститься. Десктоп-сборка намеренно поставляется без стека экспортера OpenTelemetry. Сервер логирует это один раз и работает нормально; установите @opentelemetry/sdk-node и @opentelemetry/exporter-trace-otlp-http в исходном checkout, если нужны трейсы.
Поддержка
Откройте issue в steel-dev/steel-mcp-server/issues — укажите вызванный инструмент и текст ошибки. Для всего, что связано с безопасностью, следуйте SECURITY.md вместо создания публичного issue.
Конфиденциальность
Сервер не хранит собственных данных. Он отправляет URL-адреса и взаимодействия со страницами, которые указывает вызов инструмента, в Steel, который запускает браузер, и возвращает то, что сказала страница. Содержимое страницы передаётся вашему MCP-клиенту и не сохраняется, не логируется и не пересылается куда-либо ещё; пароли и учётные данные маскируются, прежде чем что-либо попадёт в лог. Никакая информация о вашем разговоре не собирается, и никакой экспортёр телеметрии не загружается, если вы не настроите его с помощью стандартной переменной OTEL_*.
Обработка Steel браузерных сессий, которые он запускает, регулируется политикой конфиденциальности Steel.
Вклад
Вклад приветствуется. Этот проект практикует TDD: сначала напишите падающий тест. Полные правила — см. в CLAUDE.md.
Форкните репозиторий
Создайте функциональную ветку
Отправьте pull request с понятным описанием и мотивацией
Отказ от ответственности
Веб-страницы могут содержать промпт-инъекции, и фильтрация не может устранить каждую. Проверяйте действия браузера, которые могут отправлять данные, совершать покупки или изменять аккаунт. Модель угроз и текущие меры защиты описаны в RESEARCH.md §7.
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 wraps the steel-dev API to enable AI agents to visit websites with browser automation, supporting both stateless scraping and stateful interactive sessions.143MIT
- AlicenseAqualityAmaintenanceAn MCP server that enables AI assistants to visually inspect and interact with rendered web pages via a persistent headless Chromium browser, supporting navigation, screenshots, clicks, viewport resizing, and console log retrieval.81MIT
- AlicenseAqualityDmaintenanceAn MCP server providing AI agents with a stealth Chromium browser that uses hybrid accessibility-object-model and set-of-mark vision for token-lean snapshots and reliable action via ref ids.13701Apache 2.0
- FlicenseNot gradedqualityCmaintenanceMCP server that wraps agent-browser to let LLMs control a real browser, providing tools for navigation, interaction, reading page content, accessibility snapshots, screenshots, and session management.1
Related MCP Connectors
Stealth web browser for agents: search, fetch, click and type through persistent sessions over MCP.
Hosted real Google Chrome MCP with per-user persistent state. Navigate, click, type, screenshot.
Browser MCP for logged-in tasks. Uses your Chrome — credentials stay local. Zero-token replay.
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/ZeroPointSix/steel-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server