axe MCPサーバー

This page is not available in the language you requested. You have been redirected to the English version of the page.
Link to this page copied to clipboard
Not for use with personal data

概要

axe MCPサーバーは、エンタープライズグレードのアクセシビリティテストを開発のワークフローに直接統合するモデルコンテキストプロトコル(MCP)サーバーです。信頼性の高いaxeプラットフォーム上に構築されており、開発者がIDEを離れることなく包括的なアクセシビリティスキャンを実行し、専門的な修正ガイダンスを受け取ることができます。

サーバーは3つの機能を提供します - analyzeremediate、およびigtanalyzeはページをスキャンしつつ自動化されたインテリジェントガイド付きテストを実行し、これは現在廃止された独立したigtツールを置き換えます。

これらのツールは、MCP互換のクライアント(Claude Desktop、Copilotを使用したVS Code、Cursorなど)にシームレスに統合され、組織のaxe設定を尊重します。

アクセスを取得する

Axe MCP ServerはAxe DevTools for Webバンドルに含まれています。Axe MCP Serverへのアクセスを許可するためのサブスクリプションは、Dequeの営業担当者と相談して設定します。

ツールと機能

analyzeツール

analyze ツールは、実際のブラウザ環境でaxe DevToolsブラウザ拡張を使用してウェブページの包括的なアクセシビリティ解析を行います。ローカル開発URL(例: localhost:3000)およびリモートプロダクションURLの両方でシームレスに動作します。

機能

  1. 認証 - ユーザーの認証情報(APIキーまたはOAuth 2.0アクセス トークン)を検証して、認可されたアクセスを保証します
  2. 設定の取得 - ユーザーの組織固有のaxe設定設定を取得します。以下を含みます:
    • アクセシビリティテストの標準(例: WCAG 2.2 AA)
    • axe-coreバージョン
    • レビューが必要 / ベストプラクティス
    • 高度なルールプリセット
  3. ブラウザベースの分析 - axe DevTools拡張機能をマウントした状態でバックグラウンドでブラウザインスタンスを起動します
  4. ページナビゲーション - AIエージェントへのプロンプトでユーザーが提供したURLにナビゲートします
  5. アクセシビリティスキャン - axe DevToolsブラウザ拡張を使用してレンダリングされたページの完全なアクセシビリティ解析を実施し、実際のユーザー体験がテストされることを確保します(静的HTMLのみでない)
  6. 結果の配信 - 構造化された形式でエージェントに包括的な解析結果を返します

レスポンシブテスト

analyze ツールは、特定のビューポートの寸法でページをテストできるオプションのviewportWidthviewportHeightパラメーターをサポートしています。これは、モバイルやタブレットのブレークポイントなど、特定の画面サイズでのみ発生するアクセシビリティ問題を発見するのに役立ちます。

Analyze http://localhost:3000 for accessibility issues at a mobile viewport of 375x812

両方のパラメータを省略すると、スキャンは1000×1080で実行されます。viewportWidthのみを指定すると、デフォルトの高さは1080になります。viewportHeightにはviewportWidthの設定が必要です。いずれかの寸法は最大7680ピクセルまで可能です。

部分ページスキャン

デフォルトでは、analyze ツールはページ全体をスキャンします。特定の領域のスキャンに限定するには、オプションのselectorパラメーターを渡します。これは、単一のコンポーネントに集中する場合やページのノイズの多い無関係な部分を結果から除外する場合に有用です。

  • 単一のCSSセレクタ文字列 はトップフレーム内の要素をターゲットにします。

    {
      "url": "http://localhost:3000",
      "selector": "#main"
    }
  • CSSセレクタの配列 は iframe や shadow-DOM の境界を通過します — 各セグメントが次のホストを選択します。ターゲットがiframeやシャドウルート内に存在するときのみ配列を使用します:

    {
      "url": "http://localhost:3000",
      "selector": ["iframe#checkout", "#payment-form"]
    }

配列は最大10個のセグメントをサポートします。ページ上でセレクタが要素に一致しない場合、スキャンはエラーを返します。selectorが省略されると、全ページがスキャンされます。

AIエージェントに自然言語でプロンプトを出します―エージェントは意図をツールコールに翻訳します。

Scan only the #main region of http://localhost:3000 for accessibility issues

スキャン前のブラウザーインタラクション

analyze ツールは、オプションのbefore手順の配列をサポートしており、ページの読み込み後が実行されますがアクセシビリティスキャンの前されません。これにより、いくつかの実際のテストシナリオが可能になります:

  • ログインが必要なページ — 認証情報を入力して送信し、ログイン後のページをスキャンする前に
  • Cookie/同意バナー — バナーを解除して、ページコンテンツの上に重なったり覆ったりしないようにします
  • 動的コンテンツ — クライアントレンダリングされたコンテンツ(ルート変更、後から挿入されたDOM)が表示されるのを待ってからスキャンを行います

Steps execute in array order, in the スキャンと同じブラウザーコンテキスト as the scan, so cookies, localStorage, and any route changes triggered by click or fill persist into the scan.

before 配列は最大20ステップをサポートします。各ステップにはBROWSER_TIMEOUT_MS(デフォルトは30000ms)のタイムアウトが設定されており、ステップごとの上書きはありません。

サポートされているアクション
アクション 必須フィールド オプションフィールド 目的
click selector CSSselectorに一致する要素をクリックします(例: サブミットボタンやバナー上の「閉じる」ボタン)。
fill selectorvalue selectorに一致する入力にvalueを入力します。認証情報、検索クエリ、またはフォームフィールド用に使用します。空の文字列で入力をクリアします。
waitFor selector state"visible"(デフォルト)、"attached""hidden""detached"のいずれか Wait for the element matching selector to reach state. Use to gate the next step or the scan itself. Pick a selector that exists のみ in the post-interaction state (e.g., a logout button or dashboard heading) — generic selectors like body or #app already exist before the interaction and resolve instantly, so they won't gate anything.
スキャン前のログイン例

AIエージェントに自然言語でプロンプトを出します―エージェントは意図をツールコールに翻訳します。

Analyze http://localhost:3000 for accessibility issues. Before running
the analysis, fill in the #username and #password fields with USERNAME
and PASSWORD from ./.env.local, click the button[type=submit] button,
and wait for #main-content to appear.

エージェントはプロンプトを解決し、次のようなペイロードでanalyzeツールを呼び出します。

{
  "url": "http://localhost:3000",
  "before": [
    {
      "action": "fill",
      "selector": "#username",
      "value": "<resolved-from-.env.local>"
    },
    {
      "action": "fill",
      "selector": "#password",
      "value": "<resolved-from-.env.local>"
    },
    { "action": "click", "selector": "button[type=submit]" },
    { "action": "waitFor", "selector": "#main-content" }
  ]
}
important

fill.valueは機密情報として扱われます。 The axe MCP Server never logs fill.value, never echoes it in error messages, and never sends it to telemetry. Use fill for any user-supplied or secret input (passwords, API tokens, etc.) so secrets stay redacted across the entire pipeline — and never embed sensitive values in a selector, which ログやエラーメッセージに appear in logs and error messages.

note

エージェントがvalueを解決し、サーバーは行いません。 axe MCP Serverはvalueをリテラル文字列として扱います — ファイルを読み取ったり、環境変数を展開したり、ファイルを読み込むことや環境変数を展開すること、${VAR}$VAR{{VAR}}のようなプレースホルダー構文を解釈することはしません。ユーザーの意図を具体的な文字列に解決するのは、AIエージェント(Claude、Copilot、Cursorなど)の責任です。

実際には、これは次のことを意味します:

  • プロンプトを自然に表現する — 「.env.localからUSERNAME/PASSWORDを使用する」は有効です。エージェントは自分のファイルシステムツールを使用してファイルを読み込み、値を代入します。
  • プレースホルダー構文を貼り付けない — プロンプトでvalue: "${USERNAME}"を記述すると、文字列${USERNAME}が入力欄に入力されます。
  • 曖昧なソースについて具体的に示す — エージェントにファイルや環境変数を指定せずに「保存された認証情報を使用する」と言った場合、適切に動作するエージェントは推測することなく質問します。どこを見ればいいかを伝えてください。
caution

一部の認証フローはサポートされていません。 before アクションは、Docker化されたChromiumインスタンスでPlaywrightスタイルのインタラクションを通じてページを操作します。以下は意図的に範囲外です:

  • Captcha チャレンジ(reCAPTCHA、hCaptchaなど)
  • 2FA / TOTP / SMS 検証コード
  • サードパーティのSSO リダイレクトチェーン(例:「Googleでサインイン」、Oktaホストのログインページ)

実際のログインフローが上記のいずれかを必要とする場合は、代替のエントリーポイントをスキャンします:

  • 認証済みセッションクッキーCookie注入を注入 — 実ブラウザで一度認証を行い、その後セッションクッキーを渡すことで、スキャンが既にログインされた状態で開始します
  • 自動化テスト用にチームが使用するセッショントークンまたはバイパスURL
  • アクセシビリティテスト用の認証が無効なステージングURL

Cookie注入

analyze ツールは、ブラウザコンテキストにクッキーを設定するオプションのcookies配列をサポートし、ナビゲーションの前ページへの最初のリクエストに紐付けます。これはbeforeアクションとは異なり、ナビゲーション後に実行されるため、最初のリクエストのルートに影響を与えることはできません。一般的な使用例:

  • 環境ルーティング — ステージングまたはフィーチャーブランチセレクタクッキーを設定し、エッジまたはCDNレイヤーが読み取って、提供するサイトのバージョンを決定します。
  • 事前認証されたセッション — 有効なセッションクッキーを挿入して、ログインフォームをbeforeで処理せずにスキャンをすでにログインした状態で開始します。

cookies配列は最大で20個のクッキーをサポートします。

クッキーフィールド
フィールド 必須 説明
name はい クッキー名。ログとエラーメッセージに表示されます — 秘密の値はここに置かないでください。
value はい クッキーの値。敏感な情報として扱われます:ログに記録されず、エラーに反映されず、テレメトリーに送信されません。最大10,000文字(JWTやセッショントークンに十分な長さ)。
domain はい クッキードメイン。範囲が明示されるよう必須です。サブドメイン間でクッキーを共有するには、先頭にドット(.example.com)を使用します。
path いいえ クッキーパス。デフォルトは/です。
sameSite いいえ 「Strict」、「Lax」、または「None」のいずれか。「None」にはsecure: trueが必要です。
secure いいえ ブール値。
httpOnly いいえ ブール値。
expires いいえ 有効期限は秒単位のUnixタイムスタンプです。セッションクッキーの場合は省略してください。
例:事前認証されたページにアクセス

AIエージェントに自然言語でプロンプトを出します―エージェントは意図をツールコールに翻訳します。

Analyze https://app.example.com for accessibility issues. Set the session
cookie for app.example.com from ./.env.local so the scan starts already
logged in.

エージェントはクッキー値を解決し、analyzeツールを次のようなペイロードで呼び出します。

{
  "url": "https://app.example.com",
  "cookies": [
    {
      "name": "session",
      "value": "<resolved-from-.env.local>",
      "domain": "app.example.com"
    }
  ]
}
important

cookies[*].valueは機密情報として扱われます。 As with fill.value, the axe MCP Server never logs a cookie's value, never echoes it in error messages, and never sends it to telemetry. A cookie's name, however, ログやエラーメッセージに appear in logs and error messages — keep secrets in value, never in name.

note

エージェントがvalueを解決し、サーバーは行いません。 Cookie values follow the same rule as fill.value in beforeアクション: the server treats value as a literal string and does ファイルを読み取ったり、環境変数を展開したり、 read files, expand environment variables, or interpret placeholder syntax like ${VAR}. Your AI agent resolves the user's intent into a concrete string before calling the tool.

スクリーンショット

analyzeツールはページのスクリーンショットを違反レポートと一緒に返すことができ、スキャンされたものを確認できます。オプションのscreenshotパラメータを渡して参加してください — 空のオブジェクトで十分です:

{
  "url": "http://localhost:3000",
  "screenshot": {}
}

PNGがデフォルトです。format"jpeg"に設定すると、写真が多いページでは小さな画像になります:

{
  "url": "http://localhost:3000",
  "screenshot": { "format": "jpeg" }
}

画像は違反レポートの後に標準のMCP画像コンテンツブロックとして返されます。

スクリーンショットに表示されるもの
  • 表示されているビューポート、完全なページではありません。 フォールド以下のコンテンツは含まれません。ページのさらに多くをキャプチャするには、高さをviewportHeightに(例:4096)指定し、表示領域が見たい部分をカバーするようにします。
  • スキャンが始まる直前のページ。 キャプチャはaxe.run()の直前に行われ、スキャン中に発生するDOMの変更 — SPAの再レンダリング、useEffectの更新、アニメーション、進行中のリクエスト — は反映されません。単一ページアプリではこのズレがよく見られます。
caution

スクリーンショットをaxeが見たものの真実の源と見なしてはいけません。 上記のタイミングのズレにより、画像に表示される要素がaxeが評価したものと異なる可能性があります。エージェントに、見えているがフラグが立てられていない要素をスキャン結果のように述べないように依頼してください — 違反レポートが権威です。

コストとクライアントサポート
tip

スクリーンショットの要求は注意深く。 画像コンテンツブロックは、エージェントの次のターンでイメージ入力トークンを消費します — 同等のテキストよりも約一桁高価です。本当にページを確認したい時にスクリーンショットを依頼し、すべてのスキャンに追加しないでください。

画像がインラインで表示されるかどうかはMCPクライアントによります。サーバーは常に仕様に準拠した画像ブロックを返しますが、一部のクライアントはツールの結果を折りたたんだり、画像プレビューを省略したりします — VS CodeのCopilotはこれを表示しますが、CursorやClaude Desktopは表示しないかもしれません。プレビューが欠落している場合は、クライアント側の表示制限であり、キャプチャの失敗ではありません。

ディスクへのスクリーンショットの保存

スクリーンショットはファイルに書き込むこともでき、インライン画像をレンダリングしないクライアントにキャプチャを表示する確実な方法です。saveToを絶対パスに設定します:

{
  "url": "http://localhost:3000",
  "screenshot": { "saveTo": "/Users/me/Desktop/home.png" }
}

またはsave: trueを設定してサーバーにファイル名を選ばせます:

{
  "url": "http://localhost:3000",
  "screenshot": { "save": true }
}
フィールド タイプ 目的
saveTo string 画像を書き出す絶対パス。既存のディレクトリを指す場合、生成されたファイル名がその中に書き込まれます。これを示すとsaveは同時に必要ありません。
save boolean サーバーのスクリーンショットディレクトリ(AXE_SCREENSHOT_DIR、デフォルトはOSの一時ディレクトリ)に生成されたファイル名で画像を書き込みます。saveToが設定されると無視されます。
inline boolean 画像をインラインブロックとしても添付するかどうか(デフォルトはtrue)。インライン画像をスキップし、保存されたパスのみを返すにはfalseを設定します。

書き込まれた絶対パスはレスポンスのmessages配列で返されるため、エージェントはファイルの場所を伝えることができます。

tip

inline: falseと保存を組み合わせることで、画像のコストを2度支払わずに済みます。クライアントがインライン画像をレンダリングできない場合、{ "save": true, "inline": false }はファイルを書き込み、画像コンテンツブロックをスキップします — これにより、エージェントの次のターンで消費されるイメージ入力トークンを節約できます。

inline: falseは保存が実際に成功した場合にのみ効果があります。書き込みが失敗した場合でも、画像はインラインで返されるため、キャプチャが失われることはありません。

important

Docker配布の場合、ファイルはコンテナ内に書き込まれます。 ホストからアクセスするには、ターゲットディレクトリにボリュームをマウントし、コンテナ側のパスをsaveTo(またはAXE_SCREENSHOT_DIR)で指定します。サーバーはマウントの存在を検出しません — それがない場合、ファイルは書き込まれ、その後コンテナとともに破棄されます。

成功したスキャンのみに保存が適用されます。スクリーンショットがキャプチャされた後にスキャンが失敗した場合、inlineに関係なく、画像はエラーとともにインラインで返され、ディスクには書き込まれません。

キャプチャが失敗した場合

スクリーンショットのキャプチャは最善の努力で行われ、スキャンを失敗させることはありません。キャプチャがタイムアウトした場合でも、スキャンは結果を返し、レスポンスのmessages配列に通知をつけます:

Screenshot capture failed: <reason>

スキャン自体 スクリーンショットが撮影された後に失敗した場合でも、画像はエラーレスポンスとともに返されます — 問題が発生した瞬間のページの視覚的状態が、通常最も有用なデバッグ証拠です。

note

要求されたスクリーンショットはDequeに送られません。 画像はローカルでキャプチャされ、エージェントに直接返されます。これは、高度なルールがサーバーサイド評価のためにアップロードするフルページスクリーンショットとは別です。Dequeに送信されるものを参照してください。

高度なルール

標準のaxe-coreルールセットを超えて、analyzeツールは高度なルールを実行できます — スクリーンショット、コンピュータビジョン、大規模言語モデルを使用して、見た目だけの見出しや役立たない代替テキストのある説明画像など、axe-coreだけでは検出できない問題を自動テストします。

どのプリセットが実行されるかは組織のaxe設定によって決定され、管理者が許可する場合、サーバーごとにAXE_ADVANCED_RULESで、スキャンごとにadvancedRules引数で上書きできます:

{
  "url": "http://localhost:3000",
  "advancedRules": "thorough"
}

全てのレスポンスには、実際に実行されたプリセットとその出所が報告されます:

{
  "advancedRules": {
    "value": "thorough",
    "source": "tool_arg"
  }
}

高度なルールは、Web用のaxe DevToolsサブスクリプションに含まれています — これはaxe MCP Serverを提供するものでもあります。これらのルールはスキャンに約15〜20秒追加し、AIクレジットを消費し、analyzeがページデータ(全ページのスクリーンショットとページ構造)をDequeに送信する唯一のケースです。プリセット、優先順位、劣化メッセージ、プライバシー詳細については高度なルールを参照してください。

インテリジェントガイドテスト

analyzeツールは同じページにDequeの自動インテリジェントガイドテスト(IGT)を同じ呼び出しで実行することもできます。実行するIGTを指定するigtTools配列をオプションで指定します — 現在サポートされている値はキーボードIGTです:

{
  "url": "http://localhost:3000",
  "igtTools": ["keyboard"]
}

AIエージェントに自然言語でプロンプトを出します―エージェントは意図をツールコールに翻訳します。

Scan http://localhost:3000 for accessibility issues and run the keyboard IGT on it

リクエストされた各IGTは、同じページに対して、同じブラウザで、同じビューポート幅でaxeスキャンの後に順次します。ページを準備するものは一度実行され、両方に持ち込みます:beforeアクションクッキーの挿入ビューポートパラメータ

{
  "url": "http://localhost:3000",
  "igtTools": ["keyboard"],
  "before": [
    {
      "action": "fill",
      "selector": "#username",
      "value": "<resolved-from-.env.local>"
    },
    { "action": "click", "selector": "button[type=submit]" },
    { "action": "waitFor", "selector": "#main-content" }
  ]
}
応答の形状

igtToolsを設定すると、dataの形状が変わります。それがない場合、dataはaxe問題の配列です。それがある場合、dataaxeigtを同等のキーとして持ち、各リクエストされたツールに対して1つのigtエントリがあります:

{
  "pageUrl": "http://localhost:3000",
  "data": {
    "axe": [],
    "igt": {
      "keyboard": {
        "status": "complete",
        "issues": [],
        "igtElements": [],
        "terminatedReason": "keyboard-trap"
      }
    }
  }
}
  • status"complete"または"error"。他の何かを読む前に確認してください:issuesigtElements"complete"のみにあり、error"error"のみにあります。
  • issues — IGTが見つけたアクセシビリティ問題。問題数はこの配列の長さです。
  • igtElements — IGTが処理したすべて要素で、問題のリストではありません。analysisFailed: trueのエントリはAIによって分析できず、手動でレビューする必要があります。各エントリは識別フィールドのみにトリムされます:vnodeIdselectortagNameroleaccessibleNamestatesanalysisFailed、要素がそれを持つ場合のみ存在します。
  • terminatedReason — 実行が早期に停止したときに、結果が部分的であることを意味するときのみを表示します。"keyboard-trap"はフォーカストラップに当たって逃れることができなかったことを意味し、"insufficient-credits"はテスト中にAIクレジットが不足したことを意味します。
note

igtToolsがない呼び出しは変更されません。dataは以前と同じくそのままaxe問題の配列であり、既存のプロンプト、エージェント指示、統合は変更なしに動作し続けます。

障害は分離される

An IGT that fails does ファイルを読み取ったり、環境変数を展開したり、 fail the call and never affects the axe results. The failure is reported as that tool's own status: "error" with a message, while the axe results come back normally — including when your organization's machine learning setting is disabled, in which case the IGT portion explains that machine learning is required.

クレジット使用

IGTはAIによって動作し、AIクレジット管理システムの一部です。各実行は組織の月次割当からAIクレジットを消費しますが、axeスキャン自体は消費しません。IGTは慎重にリクエストしてください、すべてのスキャンに追加しないでください。

tip

もしあなたのカスタムエージェント指示がスタンドアロンのigtツールを呼び出すようエージェントに指示している場合、analyzeを使ってigtToolsと一緒に使うように更新してください — 1回の呼び出しでスキャンとIGTの両方がカバーされ、スタンドアロンツールは非推奨です。

主な利点

  • 実際のブラウザテスト - ソースコードだけでなく、実際にレンダリングされたページをテストし、正確な結果を保証します
  • 組織の基準 - すべてのユーザーで一貫したテストを行うために、お使いのチームのaxe設定を尊重します
  • 包括的なカバレッジ - 業界をリードするaxeプラットフォームを活用します
  • レスポンシブテスト - 特定のビューポートサイズでテストを行い、ブレークポイント特有のアクセシビリティの問題を捉えます
  • ターゲットスキャン - スキャンを特定の領域、iframe、またはシャドウルートにselectorパラメータで限定します
  • 認証済み・インタラクティブページ - ログインの背後にあるページをスキャンし、クッキーバナーを解消したり、beforeアクションを使用して動的コンテンツを待機します
  • セッション&環境クッキー - 認証済みでアクセスしたり、特定の環境にルートしたりするために、cookiesパラメータでナビゲーション前にクッキーを挿入します
  • ビジュアルコンテキスト - スキャンが失敗した場合も含めて、報告と共にscreenshotパラメータでページのスクリーンショットを返します
  • 高度なルール - あなたの組織が制御する信頼閾値で、視覚的または文脈的推論を必要とする問題をキャッチします
  • インテリジェントガイドテスト - igtToolsパラメータで同じ呼び出しの中で同じページに対してIGTを実行します

出力

このツールは以下を含む構造化されたJSONレスポンスを返します:

  • 見つかったすべてのアクセシビリティ違反
  • 違反の重大度レベル(重大、深刻、中程度、軽微)
  • 特定の要素セレクタとソースコード
  • ルールIDと説明
  • advancedRules実行した高度なルールプリセットとその出所を報告するブロック
  • messages配列には実行に関するメモが含まれます(たとえば、スクリーンショットのキャプチャ失敗、劣化した高度なルールの実行、スクリーンショットが保存されたパスなど)

screenshotが設定されている場合、レポートの後に画像コンテンツブロックが続きます。igtToolsが設定されている場合、IGTの結果はツール名でキーされて、axeの結果と共に返されます。

remediateツール

remediateツールは、analyzeまたはigtツールによって特定された1つまたは複数のアクセシビリティ問題を取り込み、文脈に基づいたAI対策ガイダンスを生成します。これにより、コーディングエージェントが実際のコード修正に変換できるようになります。問題は一括で提出されるため、一度の呼び出しでページ上のすべての違反に対する修正を返すことができます。

機能

  1. 認証 - ユーザーの資格情報を検証します—APIキーまたはOAuth 2.0アクセストークンのいずれかで認証されたアクセスを確保します
  2. AIクレジット使用法 - バッチ内の各問題は、Dequeの豊富なアクセシビリティ専門知識でトレーニングされた高度なAIモデルを使用するためのAIクレジットを、あなたの組織の割り当てから消費します
  3. AI生成の修正提案 - コーディングエージェントが解釈してソースコードに実装できるような高品質で実用的なアクセシビリティ修正を作成します
note

AIクレジットが枯渇した場合、remediateツールはクレジットが回復するまで動作しません(追加購入するか月次サイクルが更新されることで)。ただし、analyzeツールは引き続き機能します。

バッチ修正

ツールはissues配列を受け入れます。単一analyzeまたはigtの実行から問題すべてのを1回の呼び出しで一緒に送信し、問題ごとにツールを1回呼び出すのではなく、一括で1から25のまでの問題に対応します。

各問題には以下のフィールドがあります:

フィールド 必須 説明
id はい 呼び出し元が選んだ識別子で、バッチ内で一意(例:ルールIDにカウンターを追加: color-contrast-0)です。入力に結果を関連付けるためだけに使用されます。
rule はい analyze/igt出力からのaxeルールID(例:color-contrastimage-alt)。
elementHtml はい 違反している要素のHTMLスニペット。
remediation はい 何が問題で、何を修正する必要があるかの説明(問題の要約から取得され、オプションで詳細、ヘルプテキスト、またはAIの推論で強化されることがあります)。
pageUrl いいえ analyze応答から補正されているページのURLです。

自然言語でAIエージェントに指示を出します — バッチを解析結果から組み立てます:

Analyze http://localhost:3000 and remediate every issue found

エージェントはプロンプトを解決し、次のようなペイロードでremediateツールを呼び出します。

{
  "issues": [
    {
      "id": "color-contrast-0",
      "rule": "color-contrast",
      "elementHtml": "<span style=\"color: #aaa\">Sign up</span>",
      "remediation": "Increase the contrast ratio to at least 4.5:1",
      "pageUrl": "http://localhost:3000"
    },
    {
      "id": "image-alt-1",
      "rule": "image-alt",
      "elementHtml": "<img src=\"logo.png\">",
      "remediation": "Add alt text describing the image"
    }
  ]
}

出力

ツールは、各問題に対する結果の配列を返し、idによってその入力に戻されます。結果は2つの形状のいずれかです。

  • 成功status: "ok"で、remediationオブジェクトには一般的な説明、補正ステップ、および具体的なコード修正が含まれます
  • エラーstatus: "error"で、補正できなかった問題に対してerrorオブジェクト(codeおよびmessage)があります
{
  "data": [
    {
      "id": "color-contrast-0",
      "status": "ok",
      "remediation": {
        "general_description": "...",
        "remediation": "...",
        "code_fix": "<span style=\"color: #595959\">Sign up</span>"
      }
    },
    {
      "id": "image-alt-1",
      "status": "error",
      "error": { "code": "LLM_ERROR", "message": "..." }
    }
  ]
}

結果は独立しています:ある問題での失敗が他の問題のガイダンスを妨げることはありません。

クレジット使用状況

remediateツールはAIクレジット管理システムの一部です。バッチ内の各問題が組織の毎月の割り当てからクレジットを消費します。管理者はaxeアカウントポータルを通じてクレジット使用量を監視できます。

igtツール

caution

igtツールは非推奨です。代わりにanalyzeツールのigtToolsパラメータを使用してください — 同じページで同じ呼び出しで、axeスキャンと共に同じインテリジェントガイドテストを実行します。

igtは完全に機能しており、以前と同じ結果を返しますので、今日は何も壊れません。将来のリリースで削除されます。もしあなたのカスタムエージェント指示igtツールを名指ししている場合は、analyzeigtToolsと共に呼び出すように更新してください。

igtツールはDequeの自動インテリジェントガイドテストをスタンドアロンの呼び出しとしてウェブページに対して実行します。その動作をそのままanalyzeがアクセシビリティスキャンと同じ呼び出しで行います — インテリジェントガイドテストを参照して、使用法とクレジット消費は両者において同じです。

各テスト結果オブジェクトはどちらでも同じであり — statusissuesigtElements、そしてオプションのterminatedReason応答の形状に記載されているように。エンベロープだけが異なります:igtdataの下にテスト名(data.keyboard)でキーされて結果を直接返しますが、analyzedata.igtの下にdata.axeと共にネストします。

始めに

axe MCPサーバーのセットアップには、3つの独立した選択があります:

  1. ディストリビューションを選択 — Dockerまたはnpm
  2. 認証を設定 — APIキーまたはOAuth 2.0
  3. クライアントを構成VS Code with Copilotカーソル、またはClaude Code

Claude Codeユーザーはaxeアクセシビリティプラグインを使用してこれらのステップをスキップできます。サーバーを登録し、設定、エージェント指示、および完全な改善ループを実行するためのスラッシュコマンドを追加します。

環境変数と推奨されるAIエージェントの指示については構成リファレンスを参照してください。不具合が発生した場合はトラブルシューティングを参照してください。

サンプルプロンプト

期待されるツールが呼び出されることを確認する

多くのIDEで次の構文(「#」プレフィックス)を使用すると、axe MCP Serverツールが期待通りに呼び出されます:

#analyze the http://localhost:3033/ web page for accessibility issues and #remediate any violations found

ローカルホストURLのアクセシビリティ問題を分析する:

Analyze http://localhost:3000 for accessibility issues

修正を伴う分析:

Analyze https://example.com for accessibility issues and fix any issues found

ログインの背後にあるページを分析する:

Analyze http://localhost:3000 for accessibility issues. Before running the
analysis, fill in the #username and #password fields with USERNAME and
PASSWORD from ./.env.local, click the button[type=submit] button, and
wait for #main-content to appear.

スキャンの前にクッキーバナーを解除する:

Analyze https://example.com for accessibility issues, but first click the
#cookie-dismiss button to dismiss the cookie consent banner.

ページのスクリーンショットをキャプチャ:

Analyze http://localhost:3000 for accessibility issues and capture a screenshot of the page

セッションクッキーを注入してページをスキャンします:

Analyze https://app.example.com for accessibility issues. Set the session
cookie for app.example.com from ./.env.local so the scan starts already
logged in.

サポート

axe MCPサーバーに関する質問、問題、フィードバックについて:

セキュリティとプライバシーに関するFAQ

axe MCPサーバーが我々のソースコードをキャプチャまたは保存しますか?

いいえ。 axe MCPサーバーは、配置されたコードをデータベースまたは永続的なストレージには保存しません。

analyzeツールが実行されると、応答にはアクセシビリティ問題の要素のHTMLソースコードが含まれています。これは、コンテキストとデバッグ目的のためです。ただし、このデータは:

  • あなたのAIエージェントへの即時のAPI応答にのみ返され
  • Deque管理のデータベースに保存されることはありません
  • ローカルの開発環境内にとどまります
  • 分析が完了すると破棄されます

MCPテスト結果はDeque管理のインフラストラクチャ上でどれくらいの期間保存されますか?

保存されません。 MCPテストの結果は、Dequeが管理するデータベースやストレージシステムには永続化されません。

analyzeツール:

  • 完全にあなたのマシン上で実行されます — Dockerコンテナ内、またはnpmディストリビューションを使用したローカルNode.jsプロセスとして
  • 結果を直接あなたのAIエージェントに返します
  • 分析結果をDequeサーバーに送信しません

2つの例外があります:

  • 最小の違反メタデータを含むことができるremediateツール。AI支援による修正指導を生成するため(以下を参照)。
  • 高度なルール は、アクティブなプリセットが有効なときに作用します。高度なルールはサーバー側で評価されるため、analyze はページの全画面スクリーンショットと、ルールに必要なページ構造をアップロードします。「Dequeに送信される内容」を参照してください。

どのデータがDequeサーバーに送信されますか?

remediateツールを使用する場合のみ:

以下のデータが、修正ガイダンスを生成するためにDequeのAI修復エンドポイントに送信されます:

  • ルールID - 違反した特定のアクセシビリティルール
  • 要素のHTML - 影響を受けた要素のHTMLマークアップ
  • 問題のメタデータ - axe-coreからの違反の説明および改善ガイダンス

このデータは、修復ガイダンスを生成するためにのみ使用され、Dequeデータベースに長期間保存されることはありません。

高度なルール を使用する場合:

高度なルールはDequeのMLおよびLLMサービスによって評価され、ローカルブラウザでは評価されません。そのため、アクティブなプリセット付きでスキャンを行うと、次のものが送信されます:

  • ページ全体のスクリーンショット はスキャンされるページのもの
  • ページ構造と計算されたスタイル — レイアウト、コントラスト、見出しを判断するために高度なルールが必要とする評価ペイロード

このキャプチャは、analyze ツールのオプションのscreenshot パラメータとは無関係です:そのパラメータを省略しても防止されません。コンテンツを環境外に出したくないページのために、高度なルールのプリセットをdisabled に設定してください——スキャンごと、サーバーごと、またはaxe設定 の組織全体で。

それ以外の場合、analyze ツールはDequeサーバーにデータを送信しません ただし認証リクエスト(APIキーまたはOAuth 2.0アクセストークンの検証)や、組織のaxe構成の取得を行います。

AIエージェントが機能するためにはどの程度のアクセスが必要ですか?

AIエージェント(Claude、Copilot、Cursor など)に必要なアクセス権:

  1. MCPサーバー通信 - エージェントはモデルコンテキストプロトコルを通してMCPサーバーのツールを呼び出すことができなければなりません

  2. ツール応答データ - エージェントが受け取る:

    • analyzeコールからのアクセシビリティ違反データ
    • remediateコールからの改善ガイダンス
    • このデータは、エージェントが問題を理解し、コード修正を生成するために必要です
  3. あなたのコードベース(オプション) - エージェントがコード修正を自動的に適用したい場合、ソースコードファイルにアクセスする必要があります

  • これはIDE(VS Code、Cursor など)でのAIコーディングアシスタントの標準です
  • ツールを分析とガイダンスのためだけに使用する場合は必要ありません(例:Claudeデスクトップアプリ経由)

MCPサーバー自体が必要とするアクセスは:

  • あなたが指定したテスト用のURL(ローカルとリモートの両方をサポート)
  • あなたのaxeクレデンシャル:axeアカウントポータルで生成したAPIキーか、@deque/axe-authを通じて取得したOAuth 2.0アクセストークン。環境変数を通じて提供されます。

重要: MCPサーバーはあなたのマシン上でローカルに動作し、Dockerコンテナまたはnpm配布でNode.jsプロセスとして実行します。ファイルシステム全体のアクセスや高度な特権は必要ありません。

ベストプラクティス

  • 資格情報のセキュリティ - あなたのAXE_API_KEYまたはAXE_ACCESS_TOKENを環境変数として保存し、コードに保存しない。OAuth 2.0を使用する場合、@deque/axe-authはトークンをOSキーチェーンに保存し、起動時に新たなアクセストークンを注入します。そのため、配置に長期間の秘密を持たせる必要はありません。
  • ローカルテスト - 開発中のローカルのURL(localhost)やステージングをテストして、機密性のあるプレプロダクションのコードを隔離します
  • ネットワークの隔離 - MCPサーバーは次にのみ通信します:
    • 分析を明示的に要求されたURL
    • 認証(APIキーまたはOAuth 2.0トークンの確認)と是正措置(呼び出された場合)のためのDequeサーバー
    • MCPプロトコルを介したローカルAIエージェント
  • 適用前の確認 - AI生成のコード変更をコミットする前に必ずレビューしてください