chrome-devtools-mcp-for-extension 0.7.0 → 0.7.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +26 -23
- package/build/src/browser.js +11 -21
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -443,41 +443,44 @@ interface ManifestValidation {
|
|
|
443
443
|
- `--load-extension` may be restricted in newer Chrome versions
|
|
444
444
|
- **Solution**: Use system profile (default) instead of `--loadExtension` flag
|
|
445
445
|
|
|
446
|
-
##
|
|
446
|
+
## System Extensions Loading (v0.7.1+)
|
|
447
447
|
|
|
448
|
-
**How does the MCP server handle Chrome
|
|
448
|
+
**How does the MCP server handle Chrome extensions?**
|
|
449
449
|
|
|
450
|
-
The MCP server uses
|
|
450
|
+
The MCP server uses an **isolated profile with `--load-extension`** to provide system extensions while maintaining independence:
|
|
451
451
|
|
|
452
|
-
###
|
|
453
|
-
- ✅ **
|
|
454
|
-
- ✅ **
|
|
452
|
+
### Default Behavior
|
|
453
|
+
- ✅ **Independent Chrome Instance**: Runs separately from your main Chrome browser
|
|
454
|
+
- ✅ **System Extensions Loaded**: Your installed Chrome extensions are automatically loaded via `--load-extension`
|
|
455
|
+
- ✅ **Concurrent Usage**: Works alongside your regular Chrome browser without conflicts
|
|
456
|
+
- 🔒 **Isolated Login State**: First launch requires Google login (for security)
|
|
457
|
+
- 🔒 **Isolated Profile**: Uses `~/.cache/chrome-devtools-mcp/chrome-profile/`
|
|
455
458
|
|
|
456
|
-
### What
|
|
457
|
-
-
|
|
458
|
-
-
|
|
459
|
-
-
|
|
459
|
+
### What Works
|
|
460
|
+
- ✅ **Extensions**: All system Chrome extensions are dynamically loaded
|
|
461
|
+
- ✅ **Bookmarks**: Accessible via MCP tools (`list_bookmarks`, `navigate_bookmark`)
|
|
462
|
+
- ✅ **Login State**: Preserved in isolated profile after first login
|
|
463
|
+
|
|
464
|
+
### What Doesn't Work
|
|
465
|
+
- ❌ **Bookmarks in Browser UI**: Not displayed in browser bookmarks bar (use MCP tools instead)
|
|
466
|
+
- ❌ **Shared Login State**: System Chrome login state is not shared (first login required)
|
|
460
467
|
|
|
461
468
|
### Profile Location
|
|
462
469
|
```
|
|
463
|
-
~/.cache/chrome-devtools-mcp/chrome-profile
|
|
470
|
+
~/.cache/chrome-devtools-mcp/chrome-profile/
|
|
464
471
|
└── Default/
|
|
465
|
-
├──
|
|
466
|
-
├──
|
|
467
|
-
|
|
468
|
-
└── ...
|
|
472
|
+
├── Cookies (isolated)
|
|
473
|
+
├── Login Data (isolated)
|
|
474
|
+
└── ... (all files isolated)
|
|
469
475
|
```
|
|
470
476
|
|
|
471
477
|
### First Launch
|
|
472
|
-
- **
|
|
473
|
-
- **Google Login required**: You'll need to log in once (login state is
|
|
474
|
-
- **Subsequent launches**: Login state is preserved in the
|
|
475
|
-
|
|
476
|
-
### Concurrent Usage
|
|
477
|
-
✅ **Yes!** The MCP server runs alongside your regular Chrome browser without conflicts. Each uses its own profile directory.
|
|
478
|
+
- **Extensions**: Automatically loaded from system Chrome via `--load-extension`
|
|
479
|
+
- **Google Login required**: You'll need to log in once (login state is isolated for security)
|
|
480
|
+
- **Subsequent launches**: Login state is preserved in the isolated profile
|
|
478
481
|
|
|
479
|
-
### Isolated Mode
|
|
480
|
-
|
|
482
|
+
### Isolated Mode (No Extensions)
|
|
483
|
+
To run without any extensions:
|
|
481
484
|
```bash
|
|
482
485
|
npx chrome-devtools-mcp-for-extension@latest --isolated
|
|
483
486
|
```
|
package/build/src/browser.js
CHANGED
|
@@ -7,7 +7,6 @@ import fs from 'node:fs';
|
|
|
7
7
|
import os from 'node:os';
|
|
8
8
|
import path from 'node:path';
|
|
9
9
|
import puppeteer from 'puppeteer-core';
|
|
10
|
-
import { setupDedicatedProfile } from './profile-manager.js';
|
|
11
10
|
let browser;
|
|
12
11
|
const ignoredPrefixes = new Set([
|
|
13
12
|
'chrome://',
|
|
@@ -234,23 +233,13 @@ export async function launch(options) {
|
|
|
234
233
|
let userDataDir = options.userDataDir;
|
|
235
234
|
let usingSystemProfile = false;
|
|
236
235
|
let profileDirectory = 'Default';
|
|
237
|
-
if (!
|
|
238
|
-
// Use
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
}
|
|
245
|
-
catch (error) {
|
|
246
|
-
// Fallback to isolated profile if setup fails
|
|
247
|
-
console.error(`⚠️ Failed to setup dedicated profile: ${error instanceof Error ? error.message : String(error)}`);
|
|
248
|
-
userDataDir = path.join(os.homedir(), '.cache', 'chrome-devtools-mcp', profileDirName);
|
|
249
|
-
await fs.promises.mkdir(userDataDir, {
|
|
250
|
-
recursive: true,
|
|
251
|
-
});
|
|
252
|
-
console.error(`📁 Using isolated profile (fallback)`);
|
|
253
|
-
}
|
|
236
|
+
if (!userDataDir) {
|
|
237
|
+
// Use isolated profile (independent from system Chrome)
|
|
238
|
+
userDataDir = path.join(os.homedir(), '.cache', 'chrome-devtools-mcp', profileDirName);
|
|
239
|
+
await fs.promises.mkdir(userDataDir, {
|
|
240
|
+
recursive: true,
|
|
241
|
+
});
|
|
242
|
+
console.error(`📁 Using isolated profile: ${userDataDir}`);
|
|
254
243
|
}
|
|
255
244
|
const args = [
|
|
256
245
|
'--hide-crash-restore-bubble',
|
|
@@ -293,12 +282,13 @@ export async function launch(options) {
|
|
|
293
282
|
const scannedExtensions = scanExtensionsDirectory(loadExtensionsDir);
|
|
294
283
|
extensionPaths.push(...scannedExtensions);
|
|
295
284
|
}
|
|
296
|
-
// System extension discovery
|
|
297
|
-
|
|
285
|
+
// System extension discovery (default: true unless isolated flag is set)
|
|
286
|
+
const shouldLoadSystemExtensions = loadSystemExtensions ?? !isolated;
|
|
287
|
+
if (shouldLoadSystemExtensions) {
|
|
298
288
|
const systemExtensions = discoverSystemExtensions(channel);
|
|
299
289
|
if (systemExtensions.length > 0) {
|
|
300
290
|
extensionPaths.push(...systemExtensions);
|
|
301
|
-
console.error(
|
|
291
|
+
console.error(`✅ Loaded ${systemExtensions.length} system Chrome extension(s)`);
|
|
302
292
|
}
|
|
303
293
|
else {
|
|
304
294
|
console.warn(`⚠️ No system extensions found or accessible`);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "chrome-devtools-mcp-for-extension",
|
|
3
|
-
"version": "0.7.
|
|
3
|
+
"version": "0.7.1",
|
|
4
4
|
"description": "MCP server for Chrome extension development with Web Store automation. Fork of chrome-devtools-mcp with extension-specific tools.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": "./build/src/index.js",
|