Home / devtools / ROOT_CAUSE_FOUND

Root Cause Found! ✅

The Problem

Looking at the Chrome process launched by chrome-devtools MCP:

PID 99148:
--user-data-dir=/Users/cdr/.cache/chrome-devtools-mcp/chrome-profile
--disable-extensions    <-- THIS IS THE PROBLEM!

Puppeteer adds --disable-extensions by default as an automation flag.

Our --load-extension flag was being passed, but overridden by the earlier --disable-extensions.

The Solution

Added --enable-extensions to explicitly override Puppeteer's default:

{
  "chrome-devtools": {
    "command": "npx",
    "args": [
      "chrome-devtools-mcp",
      "--chrome-arg=--enable-extensions",              // NEW - Override default
      "--chrome-arg=--load-extension=/Users/cdr/Projects/larc-repos/devtools",
      "--chrome-arg=--disable-extensions-except=/Users/cdr/Projects/larc-repos/devtools"
    ]
  }
}

Chrome Flag Order Matters

Chrome processes flags left-to-right, with later flags overriding earlier ones:

# ❌ WRONG - Extensions disabled
--disable-extensions --load-extension=/path

# ✅ CORRECT - Extensions enabled
--enable-extensions --load-extension=/path

Or:

# ✅ ALSO CORRECT - Last flag wins
--disable-extensions --enable-extensions --load-extension=/path

Next Steps

Option 1: Restart Claude Desktop (Recommended)

Cmd+Q → Reopen

Option 2: Kill MCP Server Process

# Find the process
ps aux | grep chrome-devtools-mcp | grep -v grep

# Kill it (it will auto-restart on next use)
kill 98033

Expected Result

After restart, Chrome will launch with:

--enable-extensions
--load-extension=/Users/cdr/Projects/larc-repos/devtools
--disable-extensions-except=/Users/cdr/Projects/larc-repos/devtools

And you'll see:

  • ✅ Extension in chrome://extensions/
  • ✅ Console: [PAN DevTools] Injected and monitoring PAN messages
  • ✅ API: window.__panDevTools present
  • ✅ DevTools: "PAN" tab available

Why We Missed This Initially

  • Configuration looked correct - We had the right --load-extension flag
  • Puppeteer's default was hidden - --disable-extensions is added automatically
  • Extension path was valid - No error about missing files
  • Silent failure - Chrome just ignored the extension
  • The ps aux output revealed the actual Chrome launch arguments, showing the conflicting --disable-extensions flag.

    Technical Details

    Puppeteer Default Arguments

    When Puppeteer launches Chrome for automation, it adds these defaults:

    [
      '--disable-extensions',
      '--disable-default-apps',
      '--disable-component-extensions-with-background-pages',
      // ... and more
    ]

    How to Override

    The chrome-devtools-mcp passes custom args via:

    const args = [
      ...(options.args ?? []),  // Our custom --chrome-arg flags go here
      '--hide-crash-restore-bubble',
    ];
    
    await puppeteer.launch({ args });

    Since our args come first, we need to ensure they override Puppeteer's defaults.

    Flag Precedence

    Chrome processes command-line flags in order:

    • Later flags can override earlier flags
    • --enable-extensions overrides --disable-extensions
    • --disable-extensions-except whitelists specific extensions

    Lessons Learned

  • Always check actual process arguments - ps aux reveals the truth
  • Automation tools have hidden defaults - Puppeteer, Playwright, etc.
  • Flag order matters - Later flags can override earlier ones
  • Test incrementally - Load extension first, then check if it worked
  • Files Updated

    • /Users/cdr/Library/Application Support/Claude/claude_desktop_config.json
    - Added --chrome-arg=--enable-extensions before --load-extension

    Verification Commands

    After restart:

    # Check Chrome process args
    ps aux | grep chrome-devtools-mcp -A 5
    
    # Should now see:
    # --enable-extensions
    # --load-extension=/Users/cdr/Projects/larc-repos/devtools
    # --disable-extensions-except=/Users/cdr/Projects/larc-repos/devtools

    Timeline

  • ✅ Added --load-extension flags (first attempt)
  • ❌ Extension didn't load (silent failure)
  • 🔍 Checked chrome://extensions/ - empty
  • 🔍 Checked ps aux - found --disable-extensions
  • ✅ Added --enable-extensions flag (second attempt)
  • ⏳ Waiting for MCP server restart
  • Success Criteria

    Extension working when:

    • [ ] Extension appears in chrome://extensions/ with "PAN Inspector" name
    • [ ] Console shows [PAN DevTools] Injected and monitoring PAN messages
    • [ ] window.__panDevTools API exists
    • [ ] DevTools has "PAN" tab between other tabs
    • [ ] PAN messages appear when interacting with playground components