@dynamicu/chromedebug-mcp 2.2.1 ā 2.3.0
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
|
@@ -21,8 +21,8 @@ npm install @dynamicu/chromedebug-mcp
|
|
|
21
21
|
|
|
22
22
|
```bash
|
|
23
23
|
# Clone and install from source
|
|
24
|
-
git clone https://github.com/dynamicupgrade/
|
|
25
|
-
cd
|
|
24
|
+
git clone https://github.com/dynamicupgrade/ChromeDebug.git
|
|
25
|
+
cd ChromeDebug
|
|
26
26
|
npm install
|
|
27
27
|
```
|
|
28
28
|
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
# Chrome Debug Assistant Extension
|
|
2
|
+
|
|
3
|
+
This Chrome extension enables visual element selection for the Chrome Debug MCP server.
|
|
4
|
+
|
|
5
|
+
## Installation
|
|
6
|
+
|
|
7
|
+
1. Open Chrome and navigate to `chrome://extensions/`
|
|
8
|
+
2. Enable "Developer mode" (toggle in the top right)
|
|
9
|
+
3. Click "Load unpacked"
|
|
10
|
+
4. Select the `chrome-extension` directory
|
|
11
|
+
|
|
12
|
+
## Usage
|
|
13
|
+
|
|
14
|
+
1. Ensure the Chrome Debug MCP server is running (`npm start`)
|
|
15
|
+
2. Navigate to any webpage
|
|
16
|
+
3. Click on any element to select it
|
|
17
|
+
4. The element will be:
|
|
18
|
+
- Highlighted with a pink outline
|
|
19
|
+
- Sent to Chrome Debug server
|
|
20
|
+
- Available for modification via Claude MCP tools
|
|
21
|
+
|
|
22
|
+
## How it Works
|
|
23
|
+
|
|
24
|
+
1. Click any element on the page
|
|
25
|
+
2. The extension sends the element's selector to Chrome Debug
|
|
26
|
+
3. Use Claude in your terminal to modify the selected element:
|
|
27
|
+
```
|
|
28
|
+
"Show me what element is currently selected"
|
|
29
|
+
"Make the selected element blue"
|
|
30
|
+
"Apply CSS: padding: 20px !important; border-radius: 8px !important"
|
|
31
|
+
"Execute JavaScript to get the element's text content"
|
|
32
|
+
"Clear the selected element"
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
## Features
|
|
36
|
+
|
|
37
|
+
- Visual element selection with hover highlighting
|
|
38
|
+
- Automatic server detection (scans ports 3000-3025)
|
|
39
|
+
- Pink outline shows currently selected element
|
|
40
|
+
- Server connection status indicator
|
|
41
|
+
- One-click element selection
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
{
|
|
2
|
+
"manifest_version": 3,
|
|
3
|
+
"name": "ChromeDebug MCP Assistant FREE v2.1.1",
|
|
4
|
+
"version": "2.1.1",
|
|
5
|
+
"description": "ChromeDebug MCP visual element selector [FREE Edition] [Build: 2025-01-20-v2.1.1]",
|
|
6
|
+
"permissions": [
|
|
7
|
+
"activeTab",
|
|
8
|
+
"scripting",
|
|
9
|
+
"tabs",
|
|
10
|
+
"storage",
|
|
11
|
+
"tabCapture",
|
|
12
|
+
"desktopCapture",
|
|
13
|
+
"notifications",
|
|
14
|
+
"offscreen"
|
|
15
|
+
],
|
|
16
|
+
"host_permissions": [
|
|
17
|
+
"https://*.cloudfunctions.net/*"
|
|
18
|
+
],
|
|
19
|
+
"action": {
|
|
20
|
+
"default_popup": "popup.html",
|
|
21
|
+
"default_icon": {
|
|
22
|
+
"16": "icon16.png",
|
|
23
|
+
"48": "icon48.png",
|
|
24
|
+
"128": "icon128.png"
|
|
25
|
+
}
|
|
26
|
+
},
|
|
27
|
+
"options_page": "options.html",
|
|
28
|
+
"content_scripts": [
|
|
29
|
+
{
|
|
30
|
+
"matches": [
|
|
31
|
+
"<all_urls>"
|
|
32
|
+
],
|
|
33
|
+
"exclude_matches": [
|
|
34
|
+
"*://youtube.com/*",
|
|
35
|
+
"*://www.youtube.com/*",
|
|
36
|
+
"*://m.youtube.com/*",
|
|
37
|
+
"*://google.com/*",
|
|
38
|
+
"*://www.google.com/*",
|
|
39
|
+
"*://gmail.com/*",
|
|
40
|
+
"*://www.gmail.com/*",
|
|
41
|
+
"*://facebook.com/*",
|
|
42
|
+
"*://www.facebook.com/*",
|
|
43
|
+
"*://twitter.com/*",
|
|
44
|
+
"*://www.twitter.com/*",
|
|
45
|
+
"*://x.com/*",
|
|
46
|
+
"*://www.x.com/*",
|
|
47
|
+
"*://instagram.com/*",
|
|
48
|
+
"*://www.instagram.com/*"
|
|
49
|
+
],
|
|
50
|
+
"js": [
|
|
51
|
+
"pako.min.js",
|
|
52
|
+
"web-vitals.iife.js",
|
|
53
|
+
"pii-redactor.js",
|
|
54
|
+
"data-buffer.js",
|
|
55
|
+
"performance-monitor.js",
|
|
56
|
+
"dom-tracker.js",
|
|
57
|
+
"network-tracker.js",
|
|
58
|
+
"content.js"
|
|
59
|
+
],
|
|
60
|
+
"css": ["content.css"],
|
|
61
|
+
"run_at": "document_idle"
|
|
62
|
+
}
|
|
63
|
+
],
|
|
64
|
+
"background": {
|
|
65
|
+
"service_worker": "background.js"
|
|
66
|
+
},
|
|
67
|
+
"icons": {
|
|
68
|
+
"16": "icon16.png",
|
|
69
|
+
"48": "icon48.png",
|
|
70
|
+
"128": "icon128.png"
|
|
71
|
+
}
|
|
72
|
+
}
|
|
Binary file
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dynamicu/chromedebug-mcp",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.3.0",
|
|
4
4
|
"description": "ChromeDebug MCP - MCP server that provides full control over a Chrome browser instance for debugging and automation with AI assistants like Claude Code",
|
|
5
5
|
"main": "src/index.js",
|
|
6
6
|
"type": "module",
|
|
@@ -12,12 +12,12 @@
|
|
|
12
12
|
},
|
|
13
13
|
"repository": {
|
|
14
14
|
"type": "git",
|
|
15
|
-
"url": "git+https://github.com/dynamicupgrade/
|
|
15
|
+
"url": "git+https://github.com/dynamicupgrade/ChromeDebug.git"
|
|
16
16
|
},
|
|
17
17
|
"bugs": {
|
|
18
|
-
"url": "https://github.com/dynamicupgrade/
|
|
18
|
+
"url": "https://github.com/dynamicupgrade/ChromeDebug/issues"
|
|
19
19
|
},
|
|
20
|
-
"homepage": "https://github.com/dynamicupgrade/
|
|
20
|
+
"homepage": "https://github.com/dynamicupgrade/ChromeDebug#readme",
|
|
21
21
|
"scripts": {
|
|
22
22
|
"cleanup": "node scripts/cleanup-processes.js",
|
|
23
23
|
"cleanup-force": "node scripts/cleanup-processes.js --force",
|
|
@@ -34,7 +34,9 @@
|
|
|
34
34
|
"config": "node scripts/config-manager.js",
|
|
35
35
|
"config-show": "node scripts/config-manager.js show",
|
|
36
36
|
"config-ports": "node scripts/config-manager.js list-ports",
|
|
37
|
-
"postinstall": "npm run update-extension-config",
|
|
37
|
+
"postinstall": "npm run update-extension-config && node scripts/postinstall.js",
|
|
38
|
+
"package-extension": "node scripts/package-extension.js",
|
|
39
|
+
"prepublishOnly": "npm run package-extension",
|
|
38
40
|
"test": "NODE_OPTIONS='--experimental-vm-modules' jest",
|
|
39
41
|
"test:watch": "NODE_OPTIONS='--experimental-vm-modules' jest --watch",
|
|
40
42
|
"test:coverage": "NODE_OPTIONS='--experimental-vm-modules' jest --coverage",
|
|
@@ -86,9 +88,13 @@
|
|
|
86
88
|
"chrome-extension/*.html",
|
|
87
89
|
"chrome-extension/*.png",
|
|
88
90
|
"chrome-extension/manifest.json",
|
|
91
|
+
"chrome-extension/manifest.free.json",
|
|
89
92
|
"chrome-extension/README.md",
|
|
90
93
|
"config/",
|
|
91
|
-
"scripts
|
|
94
|
+
"scripts/*.js",
|
|
95
|
+
"scripts/*.cjs",
|
|
96
|
+
"!scripts/dist",
|
|
97
|
+
"dist/chromedebug-extension-free.zip",
|
|
92
98
|
"README.md",
|
|
93
99
|
"LICENSE",
|
|
94
100
|
"CLAUDE.md"
|
|
@@ -114,6 +120,7 @@
|
|
|
114
120
|
},
|
|
115
121
|
"devDependencies": {
|
|
116
122
|
"@jest/globals": "^30.0.5",
|
|
123
|
+
"archiver": "^7.0.1",
|
|
117
124
|
"copy-webpack-plugin": "^13.0.1",
|
|
118
125
|
"jest": "^30.0.5",
|
|
119
126
|
"jsdom": "^27.0.0",
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Package FREE Chrome extension for distribution
|
|
5
|
+
* Builds the free version and creates a .zip file
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import { createWriteStream, promises as fs } from 'fs';
|
|
9
|
+
import { join, dirname } from 'path';
|
|
10
|
+
import { fileURLToPath } from 'url';
|
|
11
|
+
import { execSync } from 'child_process';
|
|
12
|
+
import archiver from 'archiver';
|
|
13
|
+
|
|
14
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
15
|
+
const __dirname = dirname(__filename);
|
|
16
|
+
const rootDir = join(__dirname, '..');
|
|
17
|
+
const freeExtensionDir = join(rootDir, 'dist', 'free');
|
|
18
|
+
const outputDir = join(rootDir, 'dist');
|
|
19
|
+
const outputFile = join(outputDir, 'chromedebug-extension-free.zip');
|
|
20
|
+
|
|
21
|
+
async function packageExtension() {
|
|
22
|
+
console.log('š¦ Building and packaging FREE Chrome extension...');
|
|
23
|
+
|
|
24
|
+
// Step 1: Build the free version
|
|
25
|
+
console.log('šØ Building free version...');
|
|
26
|
+
try {
|
|
27
|
+
execSync('npm run build:free', {
|
|
28
|
+
cwd: rootDir,
|
|
29
|
+
stdio: 'inherit'
|
|
30
|
+
});
|
|
31
|
+
} catch (error) {
|
|
32
|
+
console.error('ā Failed to build free version');
|
|
33
|
+
throw error;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
// Step 2: Verify the build output exists
|
|
37
|
+
try {
|
|
38
|
+
await fs.access(freeExtensionDir);
|
|
39
|
+
} catch {
|
|
40
|
+
throw new Error(`Build output not found at ${freeExtensionDir}`);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
// Step 3: Create zip file
|
|
44
|
+
console.log('š¦ Creating zip package...');
|
|
45
|
+
|
|
46
|
+
const output = createWriteStream(outputFile);
|
|
47
|
+
const archive = archiver('zip', { zlib: { level: 9 } });
|
|
48
|
+
|
|
49
|
+
return new Promise((resolve, reject) => {
|
|
50
|
+
output.on('close', () => {
|
|
51
|
+
const sizeKB = (archive.pointer() / 1024).toFixed(2);
|
|
52
|
+
console.log(`ā
FREE extension packaged successfully!`);
|
|
53
|
+
console.log(` Size: ${sizeKB} KB`);
|
|
54
|
+
console.log(` Location: ${outputFile}`);
|
|
55
|
+
console.log(` š This is the FREE version (5 recordings/day limit)`);
|
|
56
|
+
resolve();
|
|
57
|
+
});
|
|
58
|
+
|
|
59
|
+
archive.on('error', reject);
|
|
60
|
+
|
|
61
|
+
archive.pipe(output);
|
|
62
|
+
|
|
63
|
+
// Add all files from the free build directory
|
|
64
|
+
archive.directory(freeExtensionDir, false);
|
|
65
|
+
|
|
66
|
+
archive.finalize();
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
packageExtension().catch(err => {
|
|
71
|
+
console.error('ā Failed to package extension:', err);
|
|
72
|
+
process.exit(1);
|
|
73
|
+
});
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Post-install script to help users find the Chrome extension
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import { join, dirname } from 'path';
|
|
8
|
+
import { fileURLToPath } from 'url';
|
|
9
|
+
import { existsSync } from 'fs';
|
|
10
|
+
|
|
11
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
12
|
+
const __dirname = dirname(__filename);
|
|
13
|
+
const packageRoot = join(__dirname, '..');
|
|
14
|
+
const zipPath = join(packageRoot, 'dist', 'chromedebug-extension-free.zip');
|
|
15
|
+
const extensionPath = join(packageRoot, 'chrome-extension');
|
|
16
|
+
|
|
17
|
+
console.log('\nā
ChromeDebug MCP installed successfully!\n');
|
|
18
|
+
|
|
19
|
+
console.log('š FREE Chrome Extension (5 recordings/day):');
|
|
20
|
+
if (existsSync(zipPath)) {
|
|
21
|
+
console.log(` Download: ${zipPath}`);
|
|
22
|
+
console.log(' Extract and load in Chrome\n');
|
|
23
|
+
} else {
|
|
24
|
+
console.log(` Source: ${extensionPath}`);
|
|
25
|
+
console.log(' Load directly from this path\n');
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
console.log('š§ Installation steps:');
|
|
29
|
+
console.log(' 1. Open Chrome and go to chrome://extensions/');
|
|
30
|
+
console.log(' 2. Enable "Developer mode" (toggle in top right)');
|
|
31
|
+
console.log(' 3. Click "Load unpacked"');
|
|
32
|
+
if (existsSync(zipPath)) {
|
|
33
|
+
console.log(' 4. Extract the zip file above');
|
|
34
|
+
console.log(' 5. Select the extracted folder\n');
|
|
35
|
+
} else {
|
|
36
|
+
console.log(' 4. Navigate to and select the path above\n');
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
console.log('š Want unlimited recordings?');
|
|
40
|
+
console.log(' Upgrade to Pro: https://chromedebug.com/buy/996773cb-682b-430f-b9e3-9ce2130bd967\n');
|
|
41
|
+
|
|
42
|
+
console.log('š Full documentation: https://github.com/dynamicupgrade/ChromeDebug#readme\n');
|