Claude Media
Selenium MCPをClaude Codeに繋ぐ — mcp-seleniumの導入手順

Selenium MCPをClaude Codeに繋ぐ — mcp-seleniumの導入手順

非公式のmcp-seleniumサーバーをClaude Codeに接続し、ブラウザ操作をエージェントに任せる手順と、Playwright MCPとの使い分けをまとめます。

mcp-seleniumは、Seleniumのブラウザ操作をMCPツールとしてClaude Codeに渡せるパッケージです。名前は@angiejones/mcp-seleniumで、開発者のangiejones氏が個人でGitHubに公開しています。Chrome・Firefox・Edge・Safariの4ブラウザに対応します。

導入はclaude mcp addの一行です。ただしコミュニティ製なので、SLAのあるサポートは前提にできません。すでにSelenium Gridの資産を持つチームが、それを活かしたままAIエージェントに操作を任せたいときの選択肢です。

接続して最初の1回を動かす

npmでの事前インストールは要りません。claude mcp addに渡したnpxが、@angiejones/mcp-selenium@latestを起動時に解決して実行します。

手順

接続から最初の操作まで

  1. 1

    サーバーを登録する

    プロジェクトのディレクトリで次のコマンドを実行します。チームで共有するなら--scope projectを付けます。

  2. 2

    Claude Codeで承認する

    .mcp.jsonに書かれたサーバーは、対話セッションで承認するまで使われません。承認前はclaude mcp listとclaude mcp getに「Pending approval」と出ます。

  3. 3

    自然文で頼む

    「Chromeを開いてgithub.com/angiejonesへ行き、スクリーンショットを撮って」と伝えます。内部ではstart_browser・navigate・take_screenshotが順に呼ばれます。手動のスクリプトや細かい手順の指示は要らない、というのがREADMEの例の趣旨です。

claude mcp add --scope project selenium -- npx -y @angiejones/mcp-selenium@latest

v2.1.287で、空のディレクトリを作ってこのコマンドを実行したところ、次の2行が返りました(パスは置き換えています)。

Added stdio MCP server selenium with command: npx -y @angiejones/mcp-selenium@latest to project config
File modified: <作業ディレクトリ>/.mcp.json

生成された.mcp.jsonの中身は次のとおりです。typeとenvはコマンド側が補った項目で、自分で書く必要はありません。

{
  "mcpServers": {
    "selenium": {
      "type": "stdio",
      "command": "npx",
      "args": ["-y", "@angiejones/mcp-selenium@latest"],
      "env": {}
    }
  }
}

スコープを省くとlocal(既定)で登録され、この.mcp.jsonは作られません。.mcp.jsonをGitに入れて共有したいなら--scope projectが必要です。自分の全プロジェクトで使いたいだけなら--scope userで登録でき、この場合も.mcp.jsonは作られず、チームには共有されません。どのスコープで登録したかは、あとでclaude mcp removeに同じスコープを渡すときにも必要になります。Cursor・Windsurfなど他のクライアントでは、上のJSONからtypeとenvを除いた形をmcpServersに書きます。READMEのセットアップ欄にはGooseも載っていて、CLI版はgoose session --with-extension "npx -y @angiejones/mcp-selenium@latest"で拡張として読み込みます。デスクトップ版は、ブラウザのアドレスバーにgoose://extension?で始まるURLを貼る方式です。

npxを避けたいなら、npm install -g @angiejones/mcp-seleniumで入れてmcp-seleniumコマンドを直接指定する方法もあります。Smithery経由ならnpx -y @smithery/cli install @angiejones/mcp-selenium --client claudeです。サーバーの起動が遅くて接続に失敗するときは、環境変数MCP_TIMEOUTで起動の待ち時間を延ばせます(MCP_TIMEOUT=10000 claudeで10秒)。

何を任せられるか

ツールは目的別に6つのグループに分かれます。要素の指定方法(ロケーター)はid・css・xpath・name・tag・classから、エージェントが状況に応じて選びます。

mcp-selenium

ツールの6グループ

  • 操作

    interact(click・doubleclick・rightclick・hoverの4種)、send_keys、press_key、upload_file。send_keysは入力前にフィールドを自動でクリアします。

  • 取得

    get_element_text、get_element_attribute、take_screenshot。outputPathを省くとスクリーンショットはbase64で返ります。

  • ウィンドウとフレーム

    windowはタブの一覧・切り替え・クローズ、frameはiframeへの出入りです。frameはロケーターでもインデックスでも指定できます。

  • ブラウザの状態

    add_cookie・get_cookies・delete_cookie、ダイアログ用のalert、セッションを閉じるclose_sessionがあります。

  • 診断

    diagnosticsが、WebDriver BiDiに対応するブラウザでコンソール・エラー・ネットワークのログを返します。typeにconsole・errors・networkのいずれかを渡し、clearで取得後にバッファを空にできます。

  • 逃げ道

    execute_scriptでJavaScriptを直接実行します。argsで渡した値はarguments[0]のように参照できます。

start_browserのbrowserにはchrome・firefox・edge・safariを渡します。optionsではheadlessの真偽値と、ブラウザへ渡す起動引数の配列argumentsを指定できます。

ブラウザのconfirm・alert・promptはalertツールの担当です。accept・dismiss・get_text・send_textの4アクションがあり、timeoutの既定は5000ミリ秒です。

interact・send_keys・get_element_text・get_element_attribute・upload_fileのtimeoutは既定10000ミリ秒です。frameのtimeoutも同じです。press_keyにはタイムアウトの指定がありません。

たとえば「メールアドレス欄にtest@example.comを入力して」と頼みます。エージェントはby: "css"・value: "input[type=email]"のようなロケーターを組み立てます。リンクのhrefを判定に使いたいときはget_element_attributeで属性を取らせます。attributeにはhref・value・classなどの属性名を渡します。

press_keyはkeyにEnter・Tab・aのようなキー名を1つ渡す形です。upload_fileはfilePathにファイルの絶対パスを渡し、ファイル入力要素を指すロケーターと組みで使います。

要素探しにはアクセシビリティツリーを使える

ツールとは別に、読み取り専用のMCPリソースが2つあります。browser-status://currentはセッションIDの有無をプレーンテキストで返し、ブラウザなしでも読めます。accessibility://currentは、現在のページのアクセシビリティツリーをJSONで返します。こちらはブラウザが起動している必要があります。

READMEによると、ツリーはインタラクティブな要素とテキストだけをまとめた構造で、HTML全体よりずっと小さくなります。ページ構造の把握にHTMLを丸ごと読ませたくない場面で、コンテキストの節約になります。

読者の状況別: mcp-seleniumとPlaywright MCPのどちらか

Playwright MCPは、Microsoftが保守するMCPサーバーです。GitHubの最終pushは2026年9月28日(UTC)でした。mcp-seleniumの最新版はnpmの0.2.3(2026年2月23日公開)です。更新の頻度には開きがあります。

くらべる

どちらから始めるか

Selenium資産がある

mcp-selenium

既存のSelenium GridやWebDriver前提のテストコード、Seleniumでしか動かない社内ツールがある場合の選択肢です。置き換えずにAIエージェントからの操作だけを足せます。Safariも操作でき、ヘッドレスはSafari以外でheadlessオプションから選べます。

ゼロから組む

Playwright MCP

守るべき既存資産がないなら、こちらが先に候補に上がります。ブラウザは--browserでchrome・firefox・webkit・msedgeから選び、既定はヘッドあり(画面表示)です。ヘッドレスにするには--headlessを付けます。ページはアクセシビリティスナップショットで読み取ります。--idle-timeoutを指定すると、一定時間ツール呼び出しがないブラウザを閉じ、次の呼び出しで起動し直します。既定はヘッドレスが1時間、ヘッドありは閉じません。0を指定すると、この自動クローズは無効になります。スナップショットの返し方は--snapshot-modeでfullとnoneから選べます。導入はPlaywright MCPの解説にあります。

mcp-seleniumのREADMEはライセンスをMITと書き、GitHubの表示もMITです。一方、package.jsonのlicenseはISCで、記載が割れています。社内審査にかける場合は、どちらを根拠にするかを先に決めておく必要があります。

承認のやり直し・撤去・出力の上限

.mcp.jsonの承認を選び直したいときは、claude mcp reset-project-choicesでプロジェクトの承認の選択をリセットします。v2.1.196以降は、ワークスペースの信頼ダイアログを一度も承認していないフォルダだと、リポジトリにコミットされた設定ファイルにある承認(enabledMcpjsonServersなど)は無視され、サーバーは「Pending approval」のままです。サーバーが「Pending approval」のまま変わらないときは、そのフォルダでclaudeを対話で起動して信頼を承認します。

登録を消すときは、登録したスコープを指定してclaude mcp remove selenium --scope projectを実行します。--scopeは省略もできます。同じ名前のサーバーを別のスコープに異なる接続先で登録していると、claude mcp listと/mcpに衝突の警告が出ます。

take_screenshotでbase64を返させたり、diagnosticsでネットワークログを取ったりすると、1回のツール出力が大きくなりがちです。Claude Codeは、MCPツールの出力が10,000トークンを超えると警告を出し、既定では25,000トークンで出力を打ち切ります。上限はMAX_MCP_OUTPUT_TOKENSで引き上げられますが、警告のしきい値は固定です。take_screenshotはoutputPathを指定すると画像データを返さずファイルに保存します。

つまずきやすい点

Safariで起動しない。SafariはmacOSでのみ動きます。macOSでsudo safaridriver --enableを一度実行します。次に、SafariのSettings > Developerで「Allow Remote Automation」をオンにします。

ドラッグ&ドロップができない。interactのアクションはclick・doubleclick・rightclick・hoverの4つで、ドラッグは含まれません。並べ替えやスライダーは、execute_scriptにJavaScriptの実装を渡して実行させます。ページ内で任意のスクリプトが走るので、信頼できるページに限る使い方になります。

まとめ

選ぶ分かれ目は、Safariの操作が要るかどうかと、READMEとpackage.jsonで割れたライセンス表記を社内審査でどう扱うかの2点です。

接続後の操作の流れはClaude Codeの全体像にあります。スコープと.mcp.jsonの設定はClaude Code MCP設定ガイドを見てください。

この記事を共有:XはてブLinkedIn