Communityコーディング&開発github.com

chromedevtools/cookie-debugging

Chrome DevTools MCP を使用して、Cookie、セッション状態、認証問題、Cookie 同意コンプライアンスの検査、デバッグ、テストを行います。401/403 エラー、認証リダイレクト、セッション期限切れ、Cookie/Set-Cookie ヘッダーの問題、Cookie バナー同意コンフォーマンス、サードパーティ Cookie/SameSite/Partitioned Cookie 警告の診断に使用します。

cookie-debugging とは?

このスキルは、Chrome DevTools MCP を活用して、Web アプリケーションにおける Cookie 関連のあらゆる問題を診断・デバッグするためのものです。401/403 認証エラー、セッション切れ、Cookie バナーの同意コンプライアンステスト、SameSite や CHIPS などのセキュリティ属性監査など、多岐にわたるユースケースに対応します。HttpOnly Cookie は JavaScript から操作できないという制約を理解し、ネットワークリクエストヘッダー(`get_network_request`)やレスポンスヘッダー(`Set-Cookie`)を適切に使うことで、クライアントサイドでは見えない Cookie 情報を取得します。さらに、新しい隔離コンテキスト(`isolatedContext`)を使ったクリーンスレート環境でのテストや、`new_page` / `close_page` による状態管理を推奨しており、サードパーティトラッキングの事前発火防止や同意取り消し後の動作確認といった繊細なシナリオも効率的に検証できます。

対応~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/chromedevtools/chrome-devtools-mcp/tree/main/skills/cookie-debugging

Installed? Explore more コーディング&開発 skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

お気に入りのAIに質問する

このエージェントスキルを事前に読み込んだ状態で新しいチャットを開きます。

ドキュメント

コアコンセプト

HttpOnly vs クライアントサイドストレージ

HttpOnly とマークされた Cookie は、クライアントサイド JavaScript(cookieStore または document.cookie)からアクセスまたは変更することはできません。ただし、ブラウザはアクティブな HttpOnly Cookie を発信 HTTP リクエストヘッダー(Cookie)に自動的に付加します。

  • 現在の HttpOnly 値を検査するには: get_network_request を介して、発信 HTTP リクエストの Cookie リクエストヘッダーを確認します。
  • Cookie がどのように作成または構成されたかを検査するには: ログイン/認証レスポンスの Set-Cookie レスポンスヘッダーを確認します。
  • 非 HttpOnly Cookie を検査するには: モダンな cookieStore API を使用して evaluate_script を実行します(async () => await cookieStore.getAll())。

セッション戦略: ライブタブ vs 分離コンテキスト

状態の汚染(例: 残余の分析情報や認証トークン)を避けるために、適切なセッション環境を選択してください:

戦略使用するタイミングセットアップ / ティアダウン
ライブタブ(アクティブページ)アクティブなユーザーセッション、ライブの 401/403 エラー、または現在の状態を診断する場合。現在選択されているページで直接操作します。
クリーンスレート(isolatedContext)Cookie 同意バナー、初回訪問、またはゼロ Cookie 保証をテストする場合。一意の isolatedContext(例: "consent-audit-1")を指定して new_page を呼び出します。終了したら close_page を呼び出します。

クライアントサイドの機能と制限

アクションクライアント JavaScript(cookieStore / document.cookie)DevTools ネットワークおよびコンテキストツール
非 HttpOnly の読み取り✅ async () => await cookieStore.getAll()✅ get_network_request(リクエスト Cookie)
HttpOnly の読み取り❌ ブラウザセキュリティによりブロック✅ get_network_request(リクエスト Cookie)
属性の検査(Domain, Path, SameSite, Expires)✅ async () => await cookieStore.getAll()✅ get_network_request(レスポンス Set-Cookie)
非 HttpOnly の変更/削除✅ async () => await cookieStore.set(...)N/A
HttpOnly の変更/削除❌ JavaScript ではサイレント失敗✅ クリーンステートには new_page(isolatedContext: ...) を使用

[!WARNING] JavaScript で HttpOnly Cookie をクリアしようとすると(cookieStore.delete または document.cookie = "...; max-age=0")、サイレントに失敗します。認証なし状態または新しい状態でテストするには、isolatedContext を指定した new_page を使用して、必ず新しい分離コンテキストを起動してください。


ワークフローパターン

1. 認証失敗とリダイレクトの診断(401 / 403)

認証が必要なページリクエストが失敗し、401/403 を返したり、ログインページにリダイレクトされる場合:

  1. 最近のリクエストを一覧表示: list_network_requests を includePreservedRequests: true で呼び出します。
  2. 対象のリクエストを見つける: 失敗したリクエスト(401/403)またはリダイレクト(302/307)を特定します。
  3. 送信 Cookie ヘッダーを検査: reqid を指定して get_network_request を呼び出します。
    • Cookie ヘッダーが添付されているか、必要なトークン(例: SESSION_ID, auth_token)が送信されているかを確認します。
  4. アクティブ検査をトリガー(最近のリクエストがない場合):
    • Cookie が以前のセッションで設定され、ネットワーク呼び出しがリストされていない場合、リクエストをトリガーします:
      • navigate_page を reload: true で使用する、または
      • evaluate_script を () => fetch(window.location.href) で呼び出します。
    • 次に、新しいリクエストに対して get_network_request を呼び出し、アクティブな Cookie ヘッダーを検査します。
  5. 設定リクエストを追跡: Cookie がないか拒否された場合:
    • 以前のログイン/ハンドシェイクレスポンスの Set-Cookie ディレクティブを確認します:
      • Path の不一致: 例: Path=/api なのにリクエストが / の場合。
      • Domain の不一致: 例: Domain=api.example.com により sub.example.com で Cookie が機能しない。
      • HTTP での Secure フラグ: Secure Cookie は暗号化されていない http:// 経由では送信されません。
      • SameSite ブロック: SameSite=Strict Cookie はクロスサイトナビゲーションでは省略されます。
      • 有効期限: Expires または Max-Age が経過していないか確認します。

2. Cookie バナーと同意コンフォーマンステスト

同意前または拒否時に、非必須またはトラッキング Cookie が設定されていないことを確認するには:

  1. クリーンに開始: 専用の名前を持つ新しい分離コンテキストを開きます:
    {"url": "<PAGE_URL>", "isolatedContext": "consent-test-1"}
    
  2. ベースライン Cookie を記録: バナーと対話する前に、evaluate_script を async () => await cookieStore.getAll() で実行します。
  3. 早期のネットワークリクエストと問題を検査:
    • list_network_requests を呼び出して、同意前にサードパーティのトラッキングビーコンが発火していないことを確認します。
    • list_console_messages を types: ["issue"] で呼び出し、トラッキング警告がないか確認します。
  4. 同意バナーと対話:
    • take_snapshot でスナップショットを取得し、「拒否」または「すべて拒否」ボタンの uid を見つけます。
    • click でボタンをクリックします。
  5. Cookie の差分を検証:
    • クリック後に evaluate_script を async () => await cookieStore.getAll() で実行し、厳密に必要な Cookie または同意状態の Cookie のみが存在することを確認します。
  6. 同意撤回のテスト(ライフサイクル監査):
    • 同意の撤回や設定変更を監査する場合:
      • 「Cookie 設定」「環境設定の管理」、またはフッターのプライバシートリガーを見つけてクリックします(take_snapshot → click)。
      • 非必須カテゴリの選択を解除するか、「すべて撤回」/「環境設定を保存」をクリックします。
      • cookieStore.getAll() を再度実行して、以前に受け入れられた非必須 Cookie が消去または期限切れになったことを確認します。
      • 後続のアクションで list_network_requests を呼び出し、トラッキングビーコンが発火しなくなったことを確認します。
  7. コンテキストのティアダウン: 監査が完了したら close_page を呼び出し、残った Cookie が後続のタスクに影響しないようにします。

3. Cookie セキュリティ、SameSite、および CHIPS(Partitioned Cookie)の監査

  1. 迅速な方法: ネイティブ DevTools 問題(推奨):
    • list_console_messages を次のパラメータで呼び出します:
      {
        "types": ["issue"],
        "includePreservedMessages": true
      }
      
    • CookieIssue エントリがないか確認します。例えば:
      • SameSiteNoneInsecure: Secure なしで SameSite=None。
      • ThirdPartyCookiePhaseout: サードパーティ Cookie がブロックまたは制限されている。
      • SchemefulSameSite: クロススキームの Cookie 問題。
      • PartitionedCookies: 無効な CHIPS パーティショニング属性。
  2. 詳細監査: Lighthouse サードパーティ Cookie:
    • lighthouse_audit を mode: "navigation" および outputDirPath: "/tmp/lh-report" で実行します。
    • フルレポートをコンテキストに読み込まずに、特定の Cookie 監査を抽出します:
      node -e "const r=require('/tmp/lh-report/report.json'); const a=r.audits['third-party-cookies']; console.log(JSON.stringify({score: a?.score, display
      

Individual skills in this repo

This repo contains 6 individual skills — each has its own dedicated page.

chromedevtools/a11y-debugging

Uses Chrome DevTools MCP for accessibility (a11y) debugging and auditing based on web.dev guidelines. Use when testing semantic HTML, ARIA labels, focus states, keyboard navigation, tap targets, and color contrast.

chromedevtools/chrome-devtools

Uses Chrome DevTools via MCP for efficient debugging, troubleshooting and browser automation. Use when debugging web pages, automating browser interactions, analyzing performance, or inspecting network requests. This skill does not apply to `--slim` mode (MCP configuration).

chromedevtools/chrome-devtools-cli

Use this skill to write shell scripts or run shell commands to automate tasks in the browser or otherwise use Chrome DevTools via CLI.

chromedevtools/debug-optimize-lcp

Guides debugging and optimizing Largest Contentful Paint (LCP) using Chrome DevTools MCP tools. Use this skill whenever the user asks about LCP performance, slow page loads, Core Web Vitals optimization, or wants to understand why their page's main content takes too long to appear. Also use when the user mentions "largest contentful paint", "page load speed", "CWV", or wants to improve how fast their hero image or main content renders.

chromedevtools/memory-leak-debugging

Diagnoses and resolves memory leaks in JavaScript/Node.js applications. Use when a user reports high memory usage, OOM errors, or wants to capture, compare, or inspect heap snapshots with Chrome DevTools MCP memory tools.

chromedevtools/troubleshooting

Uses Chrome DevTools MCP and documentation to troubleshoot connection and target issues. Trigger this skill when list_pages, new_page, or navigate_page fail, or when the server initialization fails.

関連スキル