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 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
- ## Dedicated Profile Architecture
446
+ ## System Extensions Loading (v0.7.1+)
447
447
 
448
- **How does the MCP server handle Chrome profiles?**
448
+ **How does the MCP server handle Chrome extensions?**
449
449
 
450
- The MCP server uses a **dedicated profile with symlinks** to provide the best of both worlds:
450
+ The MCP server uses an **isolated profile with `--load-extension`** to provide system extensions while maintaining independence:
451
451
 
452
- ### What Gets Shared (via Symlinks)
453
- - ✅ **Extensions**: Your installed Chrome extensions are accessible via symlink
454
- - ✅ **Bookmarks**: Your bookmarks are shared (read-only)
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 Stays Private (Dedicated Profile)
457
- - 🔒 **Cookies & Login State**: Separate login state for security
458
- - 🔒 **Browsing History**: Independent history
459
- - 🔒 **Preferences**: MCP-specific settings
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-dedicated/
470
+ ~/.cache/chrome-devtools-mcp/chrome-profile/
464
471
  └── Default/
465
- ├── Extensions/ → (symlink to system Chrome)
466
- ├── Bookmarks → (symlink to system Chrome)
467
- ├── Cookies (dedicated)
468
- └── ...
472
+ ├── Cookies (isolated)
473
+ ├── Login Data (isolated)
474
+ └── ... (all files isolated)
469
475
  ```
470
476
 
471
477
  ### First Launch
472
- - **Initial setup**: Extensions and bookmarks are automatically linked
473
- - **Google Login required**: You'll need to log in once (login state is not shared from your main Chrome)
474
- - **Subsequent launches**: Login state is preserved in the dedicated profile
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
- For testing or if you prefer a completely empty profile:
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
  ```
@@ -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 (!isolated && !userDataDir) {
238
- // Use dedicated profile with symlinks to system extensions and bookmarks
239
- try {
240
- const dedicatedProfile = await setupDedicatedProfile(channel);
241
- userDataDir = dedicatedProfile.userDataDir;
242
- profileDirectory = dedicatedProfile.profileDirectory;
243
- usingSystemProfile = false; // Using dedicated profile, not system profile
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
- if (loadSystemExtensions) {
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(`🔗 Integrated ${systemExtensions.length} system extensions with development extensions`);
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.0",
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",