Skip to main content
Glama

Steel MCP Server

License: MIT Node

Claude、Cursor、VS Code、または他のMCPクライアントに、Steel管理のChromiumブラウザを提供します。Steelを使用して、単純なfetchをブロックするページを読んだり、スクリーンショットを撮ったり、クリック、入力、フォームへの記入によってインタラクティブなサイトを操作したりできます。

v1のスクリーンショットと番号付きボックスのループとは異なり、v2はページをMarkdownまたはアクセシビリティツリーとして読み取り、インタラクションにピクセルを使わずにMCP画像ブロックを通じて小さなスクリーンショットを表示し、ブラウザセッションを明示的にします。

ステータス: 2.0.0-rc.8。サーバーをstdio経由でローカルに実行するか、ホストされたエンドポイントを自分で実行してください。パッケージに含まれており、以下で説明します。mcp.steel.devはまだ稼働していません。

プロンプトの例

依頼

動作

"このページを読んで、料金表を要約してください。"

steel_scrapeを1回実行。ブラウザセッションなし、解放するものもありません

"この製品の価格をこれら3つのショップで検索して比較してください。"

ステートレスな読み取りを3回、またはJavaScriptでの描画が必要なショップがある場合はセッションを使用

"私のアカウントにサインインして、先月の請求書の合計を確認してください。"

セッション、スナップショット、そしてログイン画面であなたへの引き渡し。サーバーはパスワードを推測しません

"私のCVの詳細を使ってこの申請フォームに記入してください。"

エージェントが通常のフィールドを入力し、その後steel_session_handoffで同じブラウザ内でローカルのCVを選択できます

"この記事の上部をスライド用にスクリーンショットしてください。"

steel_screenshotを1回実行。十分に小さい場合はインライン表示され、ダウンロード用のリンクが常に付きます

"前回のブラウザセッションで何が起こったか表示してください。"

steel_session_diagnosticsが最新の解放済みセッションを読み取ります。新しいブラウザは起動されません

"最後に終了したブラウザセッションを再生してください。"

steel_session_replayが最新の終了済みセッションのSteelダッシュボードリンクを返します。ブラウザは起動されません

Related MCP server: visual-inspector-mcp

公開されるツール

デフォルトのbrowseプロファイルは16のツールです:

ツール

動作

steel_scrape

予算内のページと制限付きのリンク/メタデータを読み取ります。ブラウザセッションは開始しません

steel_screenshot

人向けのURL、またはモデルが視覚的に検証できるライブセッションをキャプチャします。URLキャプチャはプロキシをサポートします

steel_pdf

ページをPDFにレンダリングしてリンクを返します。プロキシをサポートします

steel_session_create

操作できるブラウザセッションを開始します

steel_session_release

シャットダウンしてメーターを停止します

steel_navigate

セッションをURLに向けます

steel_snapshot

@eN参照付きのアクセシビリティツリーとしてページを読み取ります

steel_find

ページ全体を読まずに、テキスト、安全な正規表現、またはロールで要素を特定します

steel_act

クリック、入力、フォームへの記入、選択、ホバー、スクロール、キー押下、戻る、オーバーレイの破棄を行います

steel_wait_for

指定されたテキスト、セレクタ、またはURLを待ちます

steel_session_diagnostics

アクティビティを読み取るか、ブラウザを起動せずにこの資格情報のライブハンドルを再発見します

steel_session_handoff

あなたが同じブラウザを排他的に制御している間は一時停止し、その後エージェントに戻します

steel_session_replay

明示的な監視/再生リクエストがあった場合、終了したセッションの安全なダッシュボードリンクを返します

steel_batch

既知の可逆的なステップを1回の呼び出しで実行します。ログイン、支払い、または最終確認の前に引き渡します

steel_session_options

非デフォルトのセットアップを計画し、保存されたプロファイルIDまたは管理ログインの名前空間を安全に発見します

steel_session_live_view

インラインビューアに接続詳細を提供します。ホストはこれをモデルから隠します

STEEL_PROFILE=scrapeを設定すると、ステートレスな読み取りツール3つのみが公開されます。これらはブラウザセッションを開始しません。デフォルトのbrowseプロファイルは、上記の13のセッションツールを追加します。

保存されたアイデンティティと非デフォルトセッション

steel_session_optionsを、絶対ターゲットURL、read、interact、またはaccountのゴール、そしてタスクが明示的に必要とするニーズだけを指定して呼び出します。通常の読み取りでは依然としてsteel_scrapeを推奨します。非デフォルトのプランは、steel_session_create用の短期間有効な署名付きconfigurationを返します。トークンはこのSteel資格情報にバインドされ、10分後に期限切れになります。「自分のプロフィール」「保存済みログイン」「Steel資格情報」というリクエストがあった場合は、まずアカウントオプションを発見してください。プロファイルUUIDや資格情報の名前空間を推測しないでください。

{
  "url": "https://example.com/account",
  "goal": "account",
  "needs": ["persist_profile", "location"],
  "country": "DE"
}

アカウントカタログは、プロファイルUUID/ステータス/タイムスタンプと、完全一致オリジンの資格情報名前空間/タイムスタンプのみを公開します。保存された値、クッキー、フィンガープリント、プロキシ設定、ユーザー名、パスワード、TOTPシークレットは決してモデルコンテキストに入りません。READYプロファイルはUUIDで選択します。名前は推測されません。プロファイルの読み込みは、persist_profileが明示的に計画されていない限り読み取り専用です。永続化が有効な場合、Steelは解放時にプロファイルを作成または更新します。READYになる前にUPLOADING状態になることがあります。既存の1つのプロファイルに対して、このMCPを通じて同時に2つの永続ライターを持つことはできません。管理ログインは、返された完全一致オリジンの名前空間を使用し、一致するフォームを自動送信することがあります。

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 MBがセッションスコープのブラウザソケット経由でそのページに直接送信されます。モデルとMCPサーバーはローカルパスもファイルバイトも受け取らず、ファイルはSteelの永続的なFiles APIにステージングされません。インラインビューアをレンダリングできないクライアントは、あなたのマシンを読み取れるふりをする代わりに、ローカルアップロードが利用できないと報告します。

すでに終了したブラウザについては、明示的に監視または再生をリクエストし、そのSteelダッシュボードUUIDをsteel_session_replayに渡すか、UUIDを省略して最新の解放済みセッションを選択します。このリリースはサニタイズされたSteelダッシュボードリンクを返します。インラインでの終了済みセッション再生は、そのブラウザアセットをMCP Appsのペイロードを肥大化させずに不変にホストできるようになるまで無効です。

クイックスタート

macOSまたはWindows向けのClaude

デスクトップ拡張機能をビルドして開きます。Claudeがそれをインストールし、Steel APIキーを求めます。他に設定するものはなく、実行時に独自の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キーが必要です。まだnpmに公開されていないため、ソースからインストールしてください:

git clone https://github.com/steel-dev/steel-mcp-server.git
cd steel-mcp-server
npm install

npm installはサーバーもビルドします。macOSのClaude Desktopで使用するには、これを~/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は一度に1つのブラウザセッションを実行します。Steel管理のプロキシ、ブラウザプロファイル、管理された資格情報、CAPTCHA解決はサポートされていません。ツールがこれらのクラウド専用機能のいずれかをリクエストした場合、サーバーは具体的な説明を返します。

設定

変数

デフォルト

意味

STEEL_API_KEY

—

Steel Cloud に必要。セルフホストデプロイメントには送信されません

STEEL_LOCAL

false

true にするとローカルの steel-browser を駆動し、API キーを不要にします

STEEL_BASE_URL

https://api.steel.dev

Steel REST ベース URL。末尾の /v1 はどちらの形式でも問題ありません

STEEL_PROFILE

browse

scrape または browse

STEEL_SESSION_TIMEOUT_MS

900000

デフォルトの不変の有効期間。作成リクエストでは、24 時間とアカウント上限までの別の値を選択できます

STEEL_INACTIVITY_TIMEOUT_MS

600000

アイドル解放。通常のハンドオフ/継続ウィンドウをサポートしますが、放棄されたブラウザを約 10 分間保持する場合があります

STEEL_MAX_SESSIONS

10

このサーバーが保持する同時セッション数

STEEL_CONNECT_URL

wss://connect.steel.dev

CDP エンドポイント。セルフホスト時はベース URL から導出されます

ログは stderr への構造化 JSON です。stdout は JSON-RPC のみを運びます。

セッションの継続性は、非アクティブタイムアウトと不変の expires_at の両方によって制限されます。表示中のビューアだけではセッションは予約されません。明示的なハンドオフは、ハード期限までローカルのアイドル回収を一時停止するだけで、実際の人間によるブラウザ入力は Steel の非アクティブクロックをリセットします。完了したセッションは速やかに解放してください。

ホスト型エンドポイントの実行

ホスト型エントリポイントには、デフォルトのインストールでは意図的に含まれない 2 つのパッケージが必要です。これにより、デスクトップまたは npx ユーザーがホスト型スタックを保持することはありません。

npm install ioredis @modelcontextprotocol/node
# and, only if you want OTLP tracing:
npm install @opentelemetry/sdk-node @opentelemetry/exporter-trace-otlp-http

これらはオプションの peerDependencies として宣言されています。ソースチェックアウトにはすでに 4 つすべてが含まれており、Docker イメージはそれらを自身でインストールします。

node dist/hosted.js(または npm run start:hosted)は、Streamable HTTP 経由で POST /mcp に同じツールを提供します。各呼び出し元は、Authorization: Bearer ヘッダーまたはヘッダーを設定できないホスト用の ?apiKey= クエリパラメータとして、独自の Steel キーを持ち込みます。あるリクエストによって発行されたハンドルは、それを発行した資格情報でのみ使用できます。GET /healthz は、Host 許可リストを参照せずにロードバランサーのプローブに応答します。/mcp への GET および DELETE は、2026-07-28 仕様で要求されているように 405 で応答します。

変数

デフォルト

意味

STEEL_ALLOWED_HOSTS

—

必須。 このエンドポイントが応答するホスト名のカンマ区切りリスト。これがないと、DNS リバインディングを止めるものが何もないため、サーバーは起動を拒否します

STEEL_ALLOWED_ORIGINS

—

呼び出しを許可するブラウザオリジンのカンマ区切りリスト。空の場合、Origin を持つすべてのリクエストを拒否します。Origin のないリクエストは引き続き通過します

PORT

8080

バインドするポート。0 は OS に空きポートを要求します

HOST

0.0.0.0

バインドするアドレス

REDIS_URL

—

レプリカ間でハンドルレコードを共有するため、任意のレプリカが別のレプリカで発行されたハンドルを提供できます。これがない場合、レコードはプロセス内に留まります — レプリカが 1 つだけの場合に正しい動作です

REDIS_KEY_PREFIX

steel-mcp

キーの名前空間。1 つのストアで複数のデプロイメントを保持できます

STEEL_REQUEST_STATE_SECRET

プロセスごと

ヒューマンインザループのハンドオフ状態用の HMAC キー。REDIS_URL を使用する場合は必須であり、すべてのレプリカで同一である必要があります。これがないと、再試行されたハンドオフが、別のレプリカで発行された状態を検証できないレプリカに到達し、ユーザーがすでにサインインした後になります。openssl rand -base64 32 で生成します

OTEL_EXPORTER_OTLP_ENDPOINT

—

標準の OTEL_* 変数はすべて OTLP トレーシングを有効にします。OTEL_SERVICE_NAME はデフォルトで steel-mcp になります。未設定の場合、エクスポーターはまったくロードされません

サーバーは独自の Steel キーを保持しないため、その前で TLS を終了するのはセルフホストデプロイメントの役割です。ホスト型ログは stdout への構造化 JSON であり、資格情報はログに到達する前に編集されます。

docker-compose.yaml は、Coolify を含む任意の compose ホストにそのエンドポイントをデプロイします。

STEEL_ALLOWED_HOSTS=mcp.example.com docker compose up -d --wait

このリポジトリからイメージをビルドし、dist/hosted.js を指定します。これは、イメージ自体のデフォルトコマンドが stdio サーバーであり、ポートをバインドしないためです。そのため、コマンドをオーバーライドできないプラットフォームでは、正常にならないコンテナがデプロイされることになります。プロキシをデフォルトのポートではなくポート 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 はプログラムを起動し、そのプログラムの stdin と stdout を介して JSON-RPC を話します。したがって、リモートエンドポイントにはローカルブリッジが必要です。

{
  "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>" }
    }
  }
}

そのスニペットの 2 つの詳細は、間違いのように見えて、そうではありません。ヘッダーにはコロンの後にスペースがなく、資格情報はインラインではなく env にあります。これは、一部のホストが args 内のスペースをエスケープせず、値を壊すためです。クライアントが設定できる場所では、?apiKey= クエリパラメータよりもヘッダーを優先してください。クエリ形式はそれができないクライアント用にあり、このサーバーの前にあるプロキシは、サーバーに到達する前にクエリ文字列をログに記録します。

良い結果を得る方法

最初に steel_scrape を使用してください — ページに関するほとんどの質問はそこで終わり、課金されるセッションは開始されません。ページと対話する必要がある場合にのみセッションを作成してください。

ページに対してアクションを実行するには、steel_snapshot でページを読み取ります。必要なものがすでにわかっている場合は、text、regex、または role の少なくとも 1 つを指定して steel_find を使用します。安全でない正規表現は拒否されます。両方のツールは、サーバーがターゲットにできる要素に @eN 参照を割り当てます。参照のない要素はクリックできません。

アクションは、要求しない限り、別の完全なスナップショットを返しません。代わりに、何が変更されたかを報告します。アクションが何も変更されなかったと報告した場合は、それを繰り返す代わりに新しいスナップショットを取得してください。steel_session_diagnostics は、ライブの MCP session_id、Steel ダッシュボードの完了したセッション UUID、この資格情報のアクティブなハンドルを回復するための list_live: true、または最新の解放されたセッションを検査するための ID なしを受け入れます。ブラウザを起動することはありません。ライブビューアを介して実行された直接のクリック、スクロール、およびタイピングは CDP を経由して移動し、そのエージェントトレースタイムラインには存在しない場合があります。非表示カウントは、通常のブラウザネットワークの Request/Response ログのみを参照します。

ブラウザを引き継ぐには、エージェントに steel_session_handoff を呼び出すように依頼します。完了したら Hand back を使用し、保留中のハンドオフプロンプトを受け入れて、エージェントが続行できるようにします。MCP Apps ホストの外部でクラウドブラウザを監視するには、steel_session_create によって返された viewer_url を開きます。アクティブなセッションは Steel ダッシュボード にも表示されます。

ページテキストは <untrusted-page-content> ブロックにラップされています。これをデータとして扱い、指示としては扱わないでください。サーバーは非表示コンテンツやその他の一般的なプロンプトインジェクションキャリアを削除しますが、任意の Web サイトを信頼できるものにすることはできません。

開発

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 は、この 1 つのパッケージから出荷されるもの — デスクトップバンドル、npm パッケージ、コンテナイメージ、ホスト型サービス — と、リリースの切り方について説明しています。

トラブルシューティング

サイトが 403 を返すか、チャレンジページを表示します。 それはボット検出であり、バグではありません。エラーはベンダーと次に試すべきことを 1 つ挙げます。一度に 1 つずつ変更してください。steel_session_diagnostics は何が起こったかを示します。

管理プロキシまたは CAPTCHA 解決が支払いエラーで失敗します。 これらには Launch で 10 ドルの検証済み有料残高が必要です。無料クレジットはカウントされません。

@eN 参照が機能しなくなりました。 エラーは理由(ページが移動した、ノードが削除された、要素のロールまたはアクセシブルネームが変更された)と、回復するために何を呼び出すかを示します。

セッションが消えたように見えます。 Steel は、アクティビティが 10 分間ない場合と、プランのハード時間制限でセッションを解放します。再度対話する必要がある場合にのみ、新しいセッションを作成してください。古いアクティビティを読み取るには、ダッシュボード UUID を指定して steel_session_diagnostics を呼び出すか、最新の解放されたセッションの ID を省略します。

クリックが何も変更されなかったと報告します。 おそらく別のものに着地しました。オーバーレイがターゲットを覆っている場合、エラーはそれを示します。dismiss_overlays を指定して steel_act を実行し、再試行してください。

拡張機能が STEEL_API_KEY に関するメッセージで起動に失敗します。 キーがサーバーに到達していません。Claude で拡張機能の設定を開き、再入力してください。フィールドは書き込み専用であるため、空白のものは入力済みのものと同じように見えます。

steel_session_create で「同時実行制限に達しました」。 お使いの Steel プランでは、開いているブラウザよりも少ない同時ブラウザしか許可されていません。解放し忘れたセッションもカウントされます — steel_session_release はすぐに 1 つを解放し、Steel は 10 分後にアイドルセッションを回収します。

トレーシングが要求されたが開始できませんでした。 デスクトップバンドルには、意図的に OpenTelemetry エクスポータースタックが含まれていません。サーバーはこれを 1 回ログに記録し、通常どおりに提供します。トレースが必要な場合は、ソースチェックアウトに @opentelemetry/sdk-node と @opentelemetry/exporter-trace-otlp-http をインストールしてください。

サポート

問題を報告するには

steel-dev/steel-mcp-server/issues で問題を報告してください。呼び出したツールとエラーテキストを含めてください。セキュリティ関連の事項については、公開のissueを立てる代わりに SECURITY.md に従ってください。

プライバシー

サーバーは独自のデータを保持しません。ツール呼び出しが指定するURLとページ操作を Steel に送信し、Steelがブラウザを実行して、ページが返した内容を返します。ページコンテンツはMCPクライアントに渡されますが、保存・ログ記録・他の場所への転送は一切行われません。パスワードと認証情報は、ログに記録される前にマスクされます。会話に関する情報は一切収集されず、標準の OTEL_* 変数で設定しない限り、テレメトリエクスポーターは読み込まれません。

Steelが実行するブラウザセッションの取り扱いは、Steelプライバシーポリシー に記載されています。

コントリビューション

コントリビューションを歓迎します。このプロジェクトはTDDを実践しています。まず失敗するテストを書いてください。完全なルールは CLAUDE.md を参照してください。

  1. リポジトリをフォークする

  2. フィーチャーブランチを作成する

  3. 明確な説明と動機を添えてプルリクエストを送信する

免責事項

Webページにはプロンプトインジェクションが含まれる可能性があり、フィルタリングですべてを除去できるわけではありません。データを送信したり、購入を行ったり、アカウントを変更したりするブラウザ操作は確認してください。脅威モデルと現在の緩和策は RESEARCH.md §7 に文書化されています。

Maintenance

ActivityStale
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    C
    maintenance
    An 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.
    8
    1
    MIT
  • F
    license
    Not graded
    quality
    B
    maintenance
    MCP 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
    -
  • A
    license
    A
    quality
    B
    maintenance
    Browser automation MCP server that uses a real browser to give agents eyes and hands—open pages, click, fill, screenshot, and run scripts via accessibility-tree snapshots.
    22
    10 npm
    MIT