PAN Inspector Extension - Test Results
Date: 2025-12-03 Chrome DevTools MCP Version: 0.11.0 Extension Version: 1.0.0Executive Summary
❌ FAILED - Extension cannot be tested via chrome-devtools MCP due to architecture limitations.
Root Cause
The chrome-devtools MCP server (v0.11.0) launches Chrome with Playwright's automation flags, which include--disable-extensions. This flag cannot be overridden by custom arguments passed through the MCP configuration, preventing any Chrome extensions from loading.
Test Results
Test 1: Extension Loading ❌ FAILED
Status: Extension not loaded Expected: Extension appears inchrome://extensions/
Actual: No extensions shown - page displays "Find extensions and themes in the Chrome Web Store"
Evidence: See screenshot - extensions page is empty despite correct config
Test 2: Chrome Process Flags ❌ FAILED
Command:ps aux | grep "Google Chrome" | grep -v "Helper\|Renderer\|GPU"
Expected Flags:
--enable-extensions--load-extension=/Users/cdr/Projects/larc-repos/devtools--disable-extensions-except=/Users/cdr/Projects/larc-repos/devtools
--disable-extensions
--disable-background-networking
--disable-component-extensions-with-background-pages
--disable-default-apps
--enable-automation
Analysis: The --disable-extensions flag is hardcoded by Playwright and overrides our custom flags.
Test 3: Extension API Injection ❌ FAILED
Status: API not available Check:window.__panDevTools
Result: undefined
Expected: Object with extension API methods
Test 4: PAN Bus Verification ✅ PASSED
Status: PAN Bus present on page Check:document.querySelector('pan-bus')
Result: true
Console Output: [PAN Bus] PAN Bus Enhanced ready
Test 5: Playground Loading ⚠️ PARTIAL
Status: HTML loaded, JavaScript modules failed Errors:Failed to load resource: net::ERR_EMPTY_RESPONSEFailed to fetch dynamically imported module: http://localhost:8000/playground/playground.mjs
Configuration Review
Claude Desktop Config ✅ CORRECT
File:~/Library/Application Support/Claude/claude_desktop_config.json
{
"mcpServers": {
"chrome-devtools": {
"command": "npx",
"args": [
"chrome-devtools-mcp",
"--chrome-arg=--enable-extensions",
"--chrome-arg=--load-extension=/Users/cdr/Projects/larc-repos/devtools",
"--chrome-arg=--disable-extensions-except=/Users/cdr/Projects/larc-repos/devtools"
]
}
}
}
Status: Configuration is correct but ineffective due to MCP server limitations.
Extension Manifest ✅ CORRECT
File:/Users/cdr/Projects/larc-repos/devtools/manifest.json
{
"manifest_version": 3,
"name": "PAN Inspector",
"version": "1.0.0",
"devtools_page": "devtools.html",
"permissions": ["tabs", "storage"],
"host_permissions": ["<all_urls>"]
}
Status: Valid Manifest V3 extension configuration.
Technical Analysis
Why Extensions Don't Load
The chrome-devtools MCP server uses Playwright to launch Chrome:
// Playwright's default automation launch
const browser = await chromium.launch({
headless: false,
args: [/* automation flags */]
});
Playwright's launch() method includes these default flags:
--disable-extensions- Prevents ALL extensions--enable-automation- Marks browser as automated--disable-component-extensions-with-background-pages
What's Needed
To support extensions, the MCP server needs to use Playwright's persistent context mode:
// Required for extensions
const context = await chromium.launchPersistentContext(userDataDir, {
headless: false,
args: [
'--load-extension=/path/to/extension',
'--disable-extensions-except=/path/to/extension'
]
});
Key Difference:
launch()- Creates isolated browser instance (no extensions)launchPersistentContext()- Uses profile directory (supports extensions)
Workarounds
Option 1: Manual Chrome Launch (Recommended for Testing)
# Kill any running Chrome instances
killall "Google Chrome"
# Launch Chrome with extension
/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome \\
--load-extension=/Users/cdr/Projects/larc-repos/devtools \\
--disable-extensions-except=/Users/cdr/Projects/larc-repos/devtools \\
--user-data-dir=/tmp/chrome-test-profile \\
http://localhost:8000/playground/index.html
# Open DevTools (F12)
# Look for "PAN" tab
Option 2: Use Built-in PAN Bus Monitor
The playground already has a built-in monitor component:<pg-bus-monitor></pg-bus-monitor>
This component provides PAN message monitoring without requiring a browser extension.
To test:Option 3: Fork chrome-devtools MCP Server
launchPersistentContextRecommendations
Immediate Actions
Long-term Solutions
CHROME_EXTENSION_PATH
- Propose using launchPersistentContext
Test Completion Status
| Test Category | Status | Notes | |--------------|--------|-------| | Extension Loading | ❌ Failed | Blocked by MCP server architecture | | Extension Injection | ❌ Failed | Cannot test - extension not loaded | | DevTools Panel | ❌ Failed | Cannot test - extension not loaded | | Message Capture | ❌ Failed | Cannot test - extension not loaded | | Filtering | ❌ Failed | Cannot test - extension not loaded | | Message Replay | ❌ Failed | Cannot test - extension not loaded | | Export/Import | ❌ Failed | Cannot test - extension not loaded | | PAN Bus Presence | ✅ Passed | Verified on page | | Playground Loading | ⚠️ Partial | HTML loads, JS modules fail |
Tests Passed: 1 / 9 Tests Failed: 7 / 9 Partially Passed: 1 / 9Conclusion
The PAN Inspector extension cannot be tested using chrome-devtools MCP in its current form (v0.11.0) due to fundamental architecture limitations. The MCP server's use of Playwright's standard browser launch mode with --disable-extensions prevents any Chrome extensions from loading.
Next Steps
componentRelated Documentation
CHROME_DEVTOOLS_MCP_EXTENSION_SETUP.md- Detailed technical explanation- Extension README - Full extension documentation
EXTENSION_TEST_PLAN.md- Original test plan (cannot be completed via MCP)
Overall Status: 🔴 Cannot Test via MCP - Alternative testing methods required