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.__panDevToolspresent - ✅ DevTools: "PAN" tab available
Why We Missed This Initially
--load-extension flag--disable-extensions is added automaticallyThe 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-extensionsoverrides--disable-extensions--disable-extensions-exceptwhitelists specific extensions
Lessons Learned
ps aux reveals the truthFiles Updated
/Users/cdr/Library/Application Support/Claude/claude_desktop_config.json
--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
--load-extension flags (first attempt)--disable-extensions--enable-extensions flag (second attempt)Success Criteria
Extension working when:
- [ ] Extension appears in chrome://extensions/ with "PAN Inspector" name
- [ ] Console shows
[PAN DevTools] Injected and monitoring PAN messages - [ ]
window.__panDevToolsAPI exists - [ ] DevTools has "PAN" tab between other tabs
- [ ] PAN messages appear when interacting with playground components