@pyrokine/mcp-chrome 1.0.0 → 1.1.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 +176 -86
- package/dist/cdp/client.d.ts +10 -0
- package/dist/cdp/client.d.ts.map +1 -1
- package/dist/cdp/client.js +48 -18
- package/dist/cdp/client.js.map +1 -1
- package/dist/cdp/launcher.d.ts.map +1 -1
- package/dist/cdp/launcher.js +14 -4
- package/dist/cdp/launcher.js.map +1 -1
- package/dist/core/auto-wait.d.ts +7 -0
- package/dist/core/auto-wait.d.ts.map +1 -1
- package/dist/core/auto-wait.js +14 -4
- package/dist/core/auto-wait.js.map +1 -1
- package/dist/core/errors.d.ts +1 -0
- package/dist/core/errors.d.ts.map +1 -1
- package/dist/core/errors.js +32 -7
- package/dist/core/errors.js.map +1 -1
- package/dist/core/index.d.ts +1 -0
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +1 -0
- package/dist/core/index.js.map +1 -1
- package/dist/core/locator.d.ts +12 -0
- package/dist/core/locator.d.ts.map +1 -1
- package/dist/core/locator.js +73 -10
- package/dist/core/locator.js.map +1 -1
- package/dist/core/session.d.ts +66 -10
- package/dist/core/session.d.ts.map +1 -1
- package/dist/core/session.js +261 -60
- package/dist/core/session.js.map +1 -1
- package/dist/core/types.d.ts +11 -0
- package/dist/core/types.d.ts.map +1 -1
- package/dist/core/types.js +5 -2
- package/dist/core/types.js.map +1 -1
- package/dist/core/unified-session.d.ts +431 -0
- package/dist/core/unified-session.d.ts.map +1 -0
- package/dist/core/unified-session.js +1010 -0
- package/dist/core/unified-session.js.map +1 -0
- package/dist/extension/bridge.d.ts +222 -0
- package/dist/extension/bridge.d.ts.map +1 -0
- package/dist/extension/bridge.js +421 -0
- package/dist/extension/bridge.js.map +1 -0
- package/dist/extension/http-server.d.ts +58 -0
- package/dist/extension/http-server.d.ts.map +1 -0
- package/dist/extension/http-server.js +313 -0
- package/dist/extension/http-server.js.map +1 -0
- package/dist/extension/index.d.ts +7 -0
- package/dist/extension/index.d.ts.map +1 -0
- package/dist/extension/index.js +6 -0
- package/dist/extension/index.js.map +1 -0
- package/dist/extension/native-host-installer.d.ts +21 -0
- package/dist/extension/native-host-installer.d.ts.map +1 -0
- package/dist/extension/native-host-installer.js +147 -0
- package/dist/extension/native-host-installer.js.map +1 -0
- package/dist/extension/socket-server.d.ts +32 -0
- package/dist/extension/socket-server.d.ts.map +1 -0
- package/dist/extension/socket-server.js +177 -0
- package/dist/extension/socket-server.js.map +1 -0
- package/dist/extension/ws-server.d.ts +40 -0
- package/dist/extension/ws-server.d.ts.map +1 -0
- package/dist/extension/ws-server.js +246 -0
- package/dist/extension/ws-server.js.map +1 -0
- package/dist/index.js +6 -4
- package/dist/index.js.map +1 -1
- package/dist/native-host/index.js +280 -0
- package/dist/native-host/mcp-chrome-host +2 -0
- package/dist/tools/browse.d.ts +4 -0
- package/dist/tools/browse.d.ts.map +1 -1
- package/dist/tools/browse.js +137 -25
- package/dist/tools/browse.js.map +1 -1
- package/dist/tools/cookies.d.ts +33 -25
- package/dist/tools/cookies.d.ts.map +1 -1
- package/dist/tools/cookies.js +124 -38
- package/dist/tools/cookies.js.map +1 -1
- package/dist/tools/evaluate.d.ts +15 -0
- package/dist/tools/evaluate.d.ts.map +1 -1
- package/dist/tools/evaluate.js +87 -23
- package/dist/tools/evaluate.js.map +1 -1
- package/dist/tools/extract.d.ts +28 -2
- package/dist/tools/extract.d.ts.map +1 -1
- package/dist/tools/extract.js +319 -198
- package/dist/tools/extract.js.map +1 -1
- package/dist/tools/input.d.ts +30 -0
- package/dist/tools/input.d.ts.map +1 -1
- package/dist/tools/input.js +167 -19
- package/dist/tools/input.js.map +1 -1
- package/dist/tools/logs.d.ts +4 -0
- package/dist/tools/logs.d.ts.map +1 -1
- package/dist/tools/logs.js +102 -68
- package/dist/tools/logs.js.map +1 -1
- package/dist/tools/manage.d.ts +16 -0
- package/dist/tools/manage.d.ts.map +1 -1
- package/dist/tools/manage.js +215 -10
- package/dist/tools/manage.js.map +1 -1
- package/dist/tools/schema.d.ts +86 -13
- package/dist/tools/schema.d.ts.map +1 -1
- package/dist/tools/schema.js +240 -1
- package/dist/tools/schema.js.map +1 -1
- package/dist/tools/wait.d.ts +30 -0
- package/dist/tools/wait.d.ts.map +1 -1
- package/dist/tools/wait.js +329 -115
- package/dist/tools/wait.js.map +1 -1
- package/package.json +4 -5
- package/scripts/start-chrome-headless.sh +0 -37
- package/scripts/start-chrome.sh +0 -41
package/README.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
English | [中文](README_zh.md)
|
|
4
4
|
|
|
5
|
-
Chrome browser automation MCP Server
|
|
5
|
+
Chrome browser automation MCP Server with dual-mode architecture: **Extension mode** (recommended) controls your existing browser, **CDP mode** (fallback) launches a dedicated instance.
|
|
6
6
|
|
|
7
7
|
[](LICENSE)
|
|
8
8
|
[](https://nodejs.org/)
|
|
@@ -10,12 +10,17 @@ Chrome browser automation MCP Server using Chrome DevTools Protocol (CDP).
|
|
|
10
10
|
|
|
11
11
|
## Features
|
|
12
12
|
|
|
13
|
-
- **
|
|
14
|
-
- **8 Unified Tools**:
|
|
15
|
-
- **
|
|
16
|
-
- **
|
|
17
|
-
- **
|
|
13
|
+
- **Dual Mode**: Extension mode shares your login sessions; CDP mode for headless/isolated scenarios
|
|
14
|
+
- **8 Unified Tools**: Action-based design covering browse, input, extract, wait, evaluate, manage, cookies, logs
|
|
15
|
+
- **Multi-Tab Parallel**: `tabId` parameter enables operations on any tab without switching focus
|
|
16
|
+
- **iframe Penetration**: `frame` parameter targets elements inside iframes (CSS selector or index, Extension mode)
|
|
17
|
+
- **Semantic Targeting**: 11 ways to locate elements (role, text, label, css, css+text combo, xpath, coordinates, etc.)
|
|
18
|
+
- **Auto-Wait**: Built-in clickability and input-ready detection with deadline-based timeout budget
|
|
19
|
+
- **Dual Input Mode**: `precise` (debugger API, bypasses CSP) or `stealth` (JS injection, no debug banner)
|
|
20
|
+
- **Smart Output**: Bare `return` auto-wrapped in IIFE; large results (>100KB) auto-saved to file; `output` writes raw text for strings
|
|
21
|
+
- **Multi-Server**: Extension auto-discovers and connects to multiple MCP Server instances simultaneously
|
|
18
22
|
- **Anti-Detection**: Optional fingerprint masking and behavior simulation
|
|
23
|
+
- **Structured Errors**: Every error includes code, message, suggestion, and context
|
|
19
24
|
|
|
20
25
|
## Compatible Clients
|
|
21
26
|
|
|
@@ -29,6 +34,12 @@ Chrome browser automation MCP Server using Chrome DevTools Protocol (CDP).
|
|
|
29
34
|
|
|
30
35
|
## Installation
|
|
31
36
|
|
|
37
|
+
```bash
|
|
38
|
+
npm install -g @pyrokine/mcp-chrome
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
Or from source:
|
|
42
|
+
|
|
32
43
|
```bash
|
|
33
44
|
git clone https://github.com/Pyrokine/claude-mcp-tools.git
|
|
34
45
|
cd claude-mcp-tools/mcp-chrome
|
|
@@ -38,30 +49,26 @@ npm run build
|
|
|
38
49
|
|
|
39
50
|
## Quick Start
|
|
40
51
|
|
|
41
|
-
### 1
|
|
42
|
-
|
|
43
|
-
```bash
|
|
44
|
-
# With UI
|
|
45
|
-
./scripts/start-chrome.sh
|
|
52
|
+
### Mode 1: Extension Mode (Recommended)
|
|
46
53
|
|
|
47
|
-
|
|
48
|
-
./scripts/start-chrome-headless.sh
|
|
54
|
+
Extension mode controls your existing Chrome — shares login sessions, cookies, and browsing context.
|
|
49
55
|
|
|
50
|
-
|
|
51
|
-
google-chrome --remote-debugging-port=9222
|
|
52
|
-
```
|
|
56
|
+
**Step 1: Install Chrome Extension**
|
|
53
57
|
|
|
54
|
-
|
|
58
|
+
1. Open `chrome://extensions/` in Chrome
|
|
59
|
+
2. Enable "Developer mode" (top-right toggle)
|
|
60
|
+
3. Click "Load unpacked" → select `mcp-chrome/extension/dist/` directory
|
|
61
|
+
4. The MCP Chrome icon appears in the toolbar
|
|
55
62
|
|
|
56
|
-
|
|
63
|
+
**Step 2: Configure MCP Client**
|
|
57
64
|
|
|
58
65
|
```bash
|
|
66
|
+
# Claude Code
|
|
59
67
|
claude mcp add chrome -- node /path/to/mcp-chrome/dist/index.js
|
|
60
68
|
```
|
|
61
69
|
|
|
62
|
-
#### Claude Desktop / Other Clients
|
|
63
|
-
|
|
64
70
|
```json
|
|
71
|
+
// Claude Desktop / Other Clients
|
|
65
72
|
{
|
|
66
73
|
"mcpServers": {
|
|
67
74
|
"chrome": {
|
|
@@ -72,29 +79,49 @@ claude mcp add chrome -- node /path/to/mcp-chrome/dist/index.js
|
|
|
72
79
|
}
|
|
73
80
|
```
|
|
74
81
|
|
|
82
|
+
**Step 3: Connect**
|
|
83
|
+
|
|
84
|
+
The Extension auto-connects to the MCP Server via HTTP/WebSocket (port 19222-19299). Click the toolbar icon to verify connection status.
|
|
85
|
+
|
|
86
|
+
```
|
|
87
|
+
browse(action="list") // List all tabs
|
|
88
|
+
browse(action="open", url="https://example.com")
|
|
89
|
+
extract(type="screenshot")
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
### Mode 2: CDP Mode (Fallback)
|
|
93
|
+
|
|
94
|
+
CDP mode launches or connects to a dedicated Chrome instance. Used when the Extension is not installed, or for headless/isolated scenarios.
|
|
95
|
+
|
|
96
|
+
```bash
|
|
97
|
+
# Start Chrome with remote debugging
|
|
98
|
+
google-chrome --remote-debugging-port=9222
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
```
|
|
102
|
+
browse(action="connect", port=9222)
|
|
103
|
+
browse(action="open", url="https://example.com")
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
> When the Extension is connected, all tools use Extension mode automatically. CDP mode activates only when the Extension is unavailable.
|
|
107
|
+
|
|
75
108
|
## Available Tools (8 Tools)
|
|
76
109
|
|
|
77
110
|
### browse - Browser Management & Navigation
|
|
78
111
|
|
|
79
|
-
| Action | Description
|
|
80
|
-
|
|
81
|
-
| `launch` | Launch new Chrome instance
|
|
82
|
-
| `connect` | Connect to running Chrome (
|
|
83
|
-
| `list` | List all
|
|
84
|
-
| `attach` | Attach to a specific page
|
|
85
|
-
| `open` | Navigate to URL
|
|
86
|
-
| `back` | Go back in history
|
|
87
|
-
| `forward` | Go forward in history
|
|
88
|
-
| `refresh` | Reload page
|
|
89
|
-
| `close` | Close browser
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
| Mode | Description |
|
|
94
|
-
|--------------|-----------------------------------------------------------------------|
|
|
95
|
-
| `off` | Disabled - pure mode for testing/CI |
|
|
96
|
-
| `safe` | Minimal changes (default) - removes webdriver flag, cleans CDP traces |
|
|
97
|
-
| `aggressive` | Full masking - plugins, WebGL, languages (may have side effects) |
|
|
112
|
+
| Action | Description |
|
|
113
|
+
|-----------|------------------------------------------------|
|
|
114
|
+
| `launch` | Launch new Chrome instance (CDP mode) |
|
|
115
|
+
| `connect` | Connect to running Chrome (CDP mode) |
|
|
116
|
+
| `list` | List all pages/tabs |
|
|
117
|
+
| `attach` | Attach to a specific page/tab |
|
|
118
|
+
| `open` | Navigate to URL |
|
|
119
|
+
| `back` | Go back in history |
|
|
120
|
+
| `forward` | Go forward in history |
|
|
121
|
+
| `refresh` | Reload page |
|
|
122
|
+
| `close` | Close browser connection |
|
|
123
|
+
|
|
124
|
+
Extension-specific: `list` returns `managed` field (whether tab is in MCP Chrome group) and `isActive` field (whether it's the current operation target). `open` auto-creates tab group (cyan color).
|
|
98
125
|
|
|
99
126
|
### input - Keyboard & Mouse Input
|
|
100
127
|
|
|
@@ -110,6 +137,8 @@ Event sequence model supporting arbitrary combinations:
|
|
|
110
137
|
| `type` | Type text |
|
|
111
138
|
| `wait` | Pause between events |
|
|
112
139
|
|
|
140
|
+
Parameters: `humanize` enables Bézier curve movement and random delays. `tabId` targets a specific tab. `frame` targets an iframe (CSS selector or index). Both Extension mode only.
|
|
141
|
+
|
|
113
142
|
### extract - Content Extraction
|
|
114
143
|
|
|
115
144
|
| Type | Description |
|
|
@@ -120,6 +149,8 @@ Event sequence model supporting arbitrary combinations:
|
|
|
120
149
|
| `screenshot` | Take screenshot |
|
|
121
150
|
| `state` | Get page state (URL, title, interactive elements) |
|
|
122
151
|
|
|
152
|
+
Parameters: `output` saves result to file. `tabId` targets a specific tab. `frame` targets an iframe. Both Extension mode only.
|
|
153
|
+
|
|
123
154
|
### wait - Wait for Conditions
|
|
124
155
|
|
|
125
156
|
| For | Description |
|
|
@@ -129,16 +160,37 @@ Event sequence model supporting arbitrary combinations:
|
|
|
129
160
|
| `time` | Fixed delay |
|
|
130
161
|
| `idle` | Wait for network idle |
|
|
131
162
|
|
|
163
|
+
Parameters: `tabId` targets a specific tab. `frame` targets an iframe. Both Extension mode only.
|
|
164
|
+
|
|
165
|
+
### evaluate - JavaScript Execution
|
|
166
|
+
|
|
167
|
+
Execute JavaScript in page context.
|
|
168
|
+
|
|
169
|
+
| Parameter | Description |
|
|
170
|
+
|-----------|------------------------------------------------------------------------------------|
|
|
171
|
+
| `script` | JavaScript code (required). Bare `return` statements auto-wrapped in IIFE |
|
|
172
|
+
| `args` | Arguments passed to script (script must be a function expression) |
|
|
173
|
+
| `mode` | `precise` (default, debugger API) or `stealth` (JS injection) |
|
|
174
|
+
| `output` | Save result to file (strings written as raw text, others as JSON) |
|
|
175
|
+
| `tabId` | Target a specific tab (Extension mode) |
|
|
176
|
+
| `frame` | Target an iframe by CSS selector or index (Extension mode) |
|
|
177
|
+
| `timeout` | End-to-end budget (ms) |
|
|
178
|
+
|
|
179
|
+
Results >100KB are auto-saved to `/tmp/` with a structured hint returned.
|
|
180
|
+
|
|
132
181
|
### manage - Page & Environment Management
|
|
133
182
|
|
|
134
|
-
| Action | Description
|
|
135
|
-
|
|
136
|
-
| `newPage` | Create new page/tab
|
|
137
|
-
| `closePage` | Close page
|
|
138
|
-
| `clearCache` | Clear cache/cookies/storage
|
|
139
|
-
| `viewport` | Set viewport size
|
|
140
|
-
| `userAgent` | Set User-Agent
|
|
141
|
-
| `emulate` | Device emulation (iPhone, iPad, etc.)
|
|
183
|
+
| Action | Description |
|
|
184
|
+
|--------------|----------------------------------------------------------------|
|
|
185
|
+
| `newPage` | Create new page/tab |
|
|
186
|
+
| `closePage` | Close page |
|
|
187
|
+
| `clearCache` | Clear cache/cookies/storage |
|
|
188
|
+
| `viewport` | Set viewport size |
|
|
189
|
+
| `userAgent` | Set User-Agent |
|
|
190
|
+
| `emulate` | Device emulation (iPhone, iPad, etc.) |
|
|
191
|
+
| `inputMode` | Query or set input mode (`precise` / `stealth`) |
|
|
192
|
+
| `stealth` | Inject anti-detection scripts |
|
|
193
|
+
| `cdp` | Send raw CDP command (advanced, e.g. `Runtime.evaluate`) |
|
|
142
194
|
|
|
143
195
|
### logs - Browser Logs
|
|
144
196
|
|
|
@@ -147,6 +199,8 @@ Event sequence model supporting arbitrary combinations:
|
|
|
147
199
|
| `console` | Console logs (with level filter) |
|
|
148
200
|
| `network` | Network request logs (with URL filter) |
|
|
149
201
|
|
|
202
|
+
Parameters: `output` saves result to file. `tabId` targets a specific tab (Extension mode). `frame` is not applicable for logs.
|
|
203
|
+
|
|
150
204
|
### cookies - Cookie Management
|
|
151
205
|
|
|
152
206
|
| Action | Description |
|
|
@@ -156,10 +210,6 @@ Event sequence model supporting arbitrary combinations:
|
|
|
156
210
|
| `delete` | Delete cookie |
|
|
157
211
|
| `clear` | Clear all cookies |
|
|
158
212
|
|
|
159
|
-
### evaluate - JavaScript Execution
|
|
160
|
-
|
|
161
|
-
Execute arbitrary JavaScript in page context.
|
|
162
|
-
|
|
163
213
|
## Target: Unified Element Locator
|
|
164
214
|
|
|
165
215
|
All tools use a unified `Target` type for element location:
|
|
@@ -189,6 +239,9 @@ All tools use a unified `Target` type for element location:
|
|
|
189
239
|
// By CSS selector
|
|
190
240
|
{ css: "#login-form .submit-btn" }
|
|
191
241
|
|
|
242
|
+
// By CSS + text (filter by text content)
|
|
243
|
+
{ css: "button", text: "Submit", exact: true }
|
|
244
|
+
|
|
192
245
|
// By XPath
|
|
193
246
|
{ xpath: "//button[@type='submit']" }
|
|
194
247
|
|
|
@@ -198,10 +251,10 @@ All tools use a unified `Target` type for element location:
|
|
|
198
251
|
|
|
199
252
|
## Usage Examples
|
|
200
253
|
|
|
201
|
-
### Basic:
|
|
254
|
+
### Basic: List Tabs and Navigate
|
|
202
255
|
|
|
203
256
|
```
|
|
204
|
-
browse(action="
|
|
257
|
+
browse(action="list")
|
|
205
258
|
browse(action="open", url="https://example.com")
|
|
206
259
|
extract(type="state")
|
|
207
260
|
```
|
|
@@ -225,15 +278,12 @@ input(events=[
|
|
|
225
278
|
])
|
|
226
279
|
```
|
|
227
280
|
|
|
228
|
-
###
|
|
281
|
+
### Multi-Tab Operation (Extension Mode)
|
|
229
282
|
|
|
230
283
|
```
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
{ type: "mouseup" },
|
|
235
|
-
{ type: "keyup", key: "Control" }
|
|
236
|
-
], humanize=true)
|
|
284
|
+
// Operate on a specific tab without switching focus
|
|
285
|
+
extract(type="screenshot", tabId="12345")
|
|
286
|
+
evaluate(script="document.title", tabId="12345")
|
|
237
287
|
```
|
|
238
288
|
|
|
239
289
|
### Screenshot
|
|
@@ -242,8 +292,25 @@ input(events=[
|
|
|
242
292
|
// Full page
|
|
243
293
|
extract(type="screenshot", fullPage=true)
|
|
244
294
|
|
|
245
|
-
//
|
|
246
|
-
extract(type="screenshot",
|
|
295
|
+
// Save to file
|
|
296
|
+
extract(type="screenshot", output="/tmp/screenshot.png")
|
|
297
|
+
```
|
|
298
|
+
|
|
299
|
+
### iframe Operations (Extension Mode)
|
|
300
|
+
|
|
301
|
+
```
|
|
302
|
+
// Target iframe by CSS selector
|
|
303
|
+
evaluate(script="document.title", frame="iframe#main")
|
|
304
|
+
|
|
305
|
+
// Target iframe by index
|
|
306
|
+
extract(type="text", frame=0)
|
|
307
|
+
|
|
308
|
+
// Input inside iframe
|
|
309
|
+
input(events=[
|
|
310
|
+
{ type: "mousedown", target: { label: "Username" } },
|
|
311
|
+
{ type: "mouseup" },
|
|
312
|
+
{ type: "type", text: "admin" }
|
|
313
|
+
], frame="iframe.login-frame")
|
|
247
314
|
```
|
|
248
315
|
|
|
249
316
|
### Wait for Element
|
|
@@ -255,25 +322,32 @@ wait(for="element", target={ text: "Loading complete" }, state="visible")
|
|
|
255
322
|
## Architecture
|
|
256
323
|
|
|
257
324
|
```
|
|
258
|
-
|
|
259
|
-
│
|
|
260
|
-
│
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
│
|
|
266
|
-
│
|
|
267
|
-
│ ├─ core/
|
|
268
|
-
│ ├─ cdp/
|
|
269
|
-
│
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
│
|
|
275
|
-
|
|
276
|
-
|
|
325
|
+
┌───────────────────┐
|
|
326
|
+
│ MCP Client │
|
|
327
|
+
│ (Claude, etc.) │
|
|
328
|
+
└─────────┬─────────┘
|
|
329
|
+
│ stdio (JSON-RPC)
|
|
330
|
+
▼
|
|
331
|
+
┌───────────────────┐
|
|
332
|
+
│ MCP-Chrome │
|
|
333
|
+
│ (8 tools) │
|
|
334
|
+
│ ├─ core/ │ UnifiedSession, Locator, AutoWait
|
|
335
|
+
│ ├─ cdp/ │ Native CDP client
|
|
336
|
+
│ ├─ extension/ │ Extension bridge (HTTP + WebSocket)
|
|
337
|
+
│ └─ tools/ │ Tool implementations
|
|
338
|
+
└────┬─────────┬────┘
|
|
339
|
+
│ │
|
|
340
|
+
│ HTTP/WS │ WebSocket (CDP)
|
|
341
|
+
│ │
|
|
342
|
+
▼ ▼
|
|
343
|
+
┌──────────┐ ┌──────────────────┐
|
|
344
|
+
│ Extension│ │ Chrome (CDP) │
|
|
345
|
+
│ (19222+) │ │ (port 9222) │
|
|
346
|
+
│ │ │ Dedicated browser│
|
|
347
|
+
│ Controls │ └──────────────────┘
|
|
348
|
+
│ user's │
|
|
349
|
+
│ browser │
|
|
350
|
+
└──────────┘
|
|
277
351
|
```
|
|
278
352
|
|
|
279
353
|
## Project Structure
|
|
@@ -293,18 +367,29 @@ mcp-chrome/
|
|
|
293
367
|
│ │ ├── evaluate.ts
|
|
294
368
|
│ │ └── schema.ts # Shared JSON Schema (Target oneOf)
|
|
295
369
|
│ ├── core/ # Core abstractions
|
|
296
|
-
│ │ ├── session.ts
|
|
297
|
-
│ │ ├──
|
|
370
|
+
│ │ ├── unified-session.ts # Dual-mode session (Extension + CDP)
|
|
371
|
+
│ │ ├── session.ts # CDP session management
|
|
372
|
+
│ │ ├── locator.ts # Element locator (deadline-based timeout)
|
|
298
373
|
│ │ ├── auto-wait.ts # Auto-wait mechanism
|
|
299
374
|
│ │ ├── retry.ts # Retry logic
|
|
300
375
|
│ │ ├── types.ts # Type definitions
|
|
301
376
|
│ │ └── errors.ts # Error types
|
|
377
|
+
│ ├── extension/ # Extension bridge
|
|
378
|
+
│ │ ├── bridge.ts # High-level Extension API
|
|
379
|
+
│ │ └── http-server.ts # HTTP + WebSocket server
|
|
302
380
|
│ ├── cdp/ # CDP layer
|
|
303
381
|
│ │ ├── client.ts # WebSocket CDP client
|
|
304
382
|
│ │ └── launcher.ts # Chrome launcher
|
|
305
383
|
│ └── anti-detection/ # Anti-detection (optional)
|
|
306
384
|
│ ├── injection.ts
|
|
307
385
|
│ └── behavior.ts
|
|
386
|
+
├── extension/ # Chrome Extension (Manifest V3)
|
|
387
|
+
│ ├── manifest.json
|
|
388
|
+
│ ├── src/
|
|
389
|
+
│ │ ├── background/ # Service Worker
|
|
390
|
+
│ │ ├── content/ # Content scripts
|
|
391
|
+
│ │ └── popup/ # Popup UI
|
|
392
|
+
│ └── dist/ # Built extension (load this in Chrome)
|
|
308
393
|
├── scripts/
|
|
309
394
|
│ ├── start-chrome.sh
|
|
310
395
|
│ └── start-chrome-headless.sh
|
|
@@ -313,15 +398,19 @@ mcp-chrome/
|
|
|
313
398
|
|
|
314
399
|
## Security Notes
|
|
315
400
|
|
|
316
|
-
-
|
|
317
|
-
-
|
|
401
|
+
- Extension mode: shares your browser sessions — only use on trusted machines
|
|
402
|
+
- CDP mode: provides full browser control via DevTools Protocol
|
|
403
|
+
- Default ports bind to 127.0.0.1 only (localhost)
|
|
318
404
|
- The `evaluate` tool can execute arbitrary JavaScript
|
|
405
|
+
- The `manage cdp` action can send arbitrary CDP commands
|
|
319
406
|
- Network logs may contain sensitive information
|
|
320
407
|
|
|
321
408
|
## Known Limitations
|
|
322
409
|
|
|
323
|
-
- **Single session**: Currently supports one browser session at a time
|
|
324
410
|
- **Chrome only**: Only supports Chrome/Chromium browsers (no Firefox/Safari)
|
|
411
|
+
- **Single CDP session**: CDP mode supports one browser session at a time
|
|
412
|
+
- **Extension mode requires Chrome**: Extension is Manifest V3, Chrome-specific
|
|
413
|
+
- **iframe**: Only single-level iframe targeting (no nested `>>` syntax); Extension mode only
|
|
325
414
|
|
|
326
415
|
## License
|
|
327
416
|
|
|
@@ -331,3 +420,4 @@ MIT License - see [LICENSE](LICENSE) for details.
|
|
|
331
420
|
|
|
332
421
|
- [Model Context Protocol](https://modelcontextprotocol.io/) - MCP specification
|
|
333
422
|
- [Chrome DevTools Protocol](https://chromedevtools.github.io/devtools-protocol/) - CDP documentation
|
|
423
|
+
|
package/dist/cdp/client.d.ts
CHANGED
|
@@ -19,6 +19,7 @@ export declare class CDPClient extends EventEmitter {
|
|
|
19
19
|
private callbacks;
|
|
20
20
|
private nextId;
|
|
21
21
|
private eventListeners;
|
|
22
|
+
private activeEventWaiters;
|
|
22
23
|
private _endpoint;
|
|
23
24
|
get endpoint(): string;
|
|
24
25
|
get isConnected(): boolean;
|
|
@@ -40,16 +41,25 @@ export declare class CDPClient extends EventEmitter {
|
|
|
40
41
|
offEvent(event: string, listener: CDPEventListener): void;
|
|
41
42
|
/**
|
|
42
43
|
* 等待特定事件
|
|
44
|
+
*
|
|
45
|
+
* close()/handleClose() 会立即 reject 所有活跃的等待者,不必等 timer 超时。
|
|
43
46
|
*/
|
|
44
47
|
waitForEvent<T = unknown>(event: string, predicate?: (params: T) => boolean, timeout?: number): Promise<T>;
|
|
45
48
|
/**
|
|
46
49
|
* 关闭连接
|
|
50
|
+
*
|
|
51
|
+
* 立即 reject 所有 pending callbacks 和 waitForEvent,
|
|
52
|
+
* 然后发出 'disconnected' 信号供外部等待者(如 waitForAnyEvent)清理。
|
|
47
53
|
*/
|
|
48
54
|
close(): void;
|
|
49
55
|
/**
|
|
50
56
|
* 处理收到的消息
|
|
51
57
|
*/
|
|
52
58
|
private handleMessage;
|
|
59
|
+
/**
|
|
60
|
+
* 立即 reject 所有 pending callbacks 和 waitForEvent 等待者
|
|
61
|
+
*/
|
|
62
|
+
private rejectAllPending;
|
|
53
63
|
/**
|
|
54
64
|
* 处理连接关闭
|
|
55
65
|
*/
|
package/dist/cdp/client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/cdp/client.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAC,YAAY,EAAC,MAAM,QAAQ,CAAA;
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/cdp/client.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAC,YAAY,EAAC,MAAM,QAAQ,CAAA;AAuBnC;;GAEG;AACH,KAAK,gBAAgB,GAAG,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;AAElD;;GAEG;AACH,qBAAa,SAAU,SAAQ,YAAY;IACvC,aAAa;IACb,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,uBAAuB,CAAQ;IACvD,OAAO,CAAC,EAAE,CAAyB;IACnC,OAAO,CAAC,SAAS,CAAgD;IACjE,OAAO,CAAC,MAAM,CAAkB;IAChC,OAAO,CAAC,cAAc,CAAiD;IACvE,OAAO,CAAC,kBAAkB,CAA2B;IAErD,OAAO,CAAC,SAAS,CAAgB;IAEjC,IAAI,QAAQ,IAAI,MAAM,CAErB;IAED,IAAI,WAAW,IAAI,OAAO,CAEzB;IAED;;OAEG;IACG,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,SAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAgD/D;;OAEG;IACG,IAAI,CAAC,CAAC,GAAG,OAAO,EAClB,MAAM,EAAE,MAAM,EACd,MAAM,CAAC,EAAE,MAAM,EACf,SAAS,CAAC,EAAE,MAAM,EAClB,OAAO,GAAE,MAA0C,GACpD,OAAO,CAAC,CAAC,CAAC;IA2Cb;;OAEG;IACH,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,gBAAgB,GAAG,IAAI;IAOxD;;OAEG;IACH,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,gBAAgB,GAAG,IAAI;IAOzD;;;;OAIG;IACH,YAAY,CAAC,CAAC,GAAG,OAAO,EACpB,KAAK,EAAE,MAAM,EACb,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,OAAO,EAClC,OAAO,SAAQ,GAChB,OAAO,CAAC,CAAC,CAAC;IA8Bb;;;;;OAKG;IACH,KAAK,IAAI,IAAI;IAYb;;OAEG;IACH,OAAO,CAAC,aAAa;IAiDrB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAcxB;;OAEG;IACH,OAAO,CAAC,WAAW;CAItB;AAKD;;GAEG;AACH,wBAAsB,oBAAoB,CACtC,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,MAA6B,GACvC,OAAO,CAAC,MAAM,CAAC,CAyBjB;AAED;;GAEG;AACH,wBAAsB,UAAU,CAC5B,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,MAA6B,GACvC,OAAO,CACN,KAAK,CAAC;IACF,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,oBAAoB,EAAE,MAAM,CAAC;CAChC,CAAC,CACL,CA8BA"}
|
package/dist/cdp/client.js
CHANGED
|
@@ -17,6 +17,7 @@ export class CDPClient extends EventEmitter {
|
|
|
17
17
|
callbacks = new Map();
|
|
18
18
|
nextId = 1;
|
|
19
19
|
eventListeners = new Map();
|
|
20
|
+
activeEventWaiters = new Set();
|
|
20
21
|
_endpoint = '';
|
|
21
22
|
get endpoint() {
|
|
22
23
|
return this._endpoint;
|
|
@@ -102,7 +103,14 @@ export class CDPClient extends EventEmitter {
|
|
|
102
103
|
},
|
|
103
104
|
method,
|
|
104
105
|
});
|
|
105
|
-
|
|
106
|
+
try {
|
|
107
|
+
this.ws.send(JSON.stringify(message));
|
|
108
|
+
}
|
|
109
|
+
catch (err) {
|
|
110
|
+
clearTimeout(timeoutId);
|
|
111
|
+
this.callbacks.delete(id);
|
|
112
|
+
reject(new CDPError(`Failed to send CDP command ${method}: ${err instanceof Error ? err.message : 'Unknown error'}`));
|
|
113
|
+
}
|
|
106
114
|
});
|
|
107
115
|
}
|
|
108
116
|
/**
|
|
@@ -125,38 +133,49 @@ export class CDPClient extends EventEmitter {
|
|
|
125
133
|
}
|
|
126
134
|
/**
|
|
127
135
|
* 等待特定事件
|
|
136
|
+
*
|
|
137
|
+
* close()/handleClose() 会立即 reject 所有活跃的等待者,不必等 timer 超时。
|
|
128
138
|
*/
|
|
129
139
|
waitForEvent(event, predicate, timeout = 30000) {
|
|
130
140
|
return new Promise((resolve, reject) => {
|
|
131
|
-
const timer = setTimeout(() => {
|
|
132
|
-
this.offEvent(event, listener);
|
|
133
|
-
reject(new TimeoutError(`等待事件超时: ${event} (${timeout}ms)`));
|
|
134
|
-
}, timeout);
|
|
135
141
|
const listener = (params) => {
|
|
136
142
|
if (!predicate || predicate(params)) {
|
|
137
|
-
|
|
138
|
-
this.offEvent(event, listener);
|
|
143
|
+
cleanup();
|
|
139
144
|
resolve(params);
|
|
140
145
|
}
|
|
141
146
|
};
|
|
147
|
+
const waiter = {
|
|
148
|
+
event,
|
|
149
|
+
listener,
|
|
150
|
+
timer: setTimeout(() => {
|
|
151
|
+
cleanup();
|
|
152
|
+
reject(new TimeoutError(`等待事件超时: ${event} (${timeout}ms)`));
|
|
153
|
+
}, timeout),
|
|
154
|
+
reject,
|
|
155
|
+
};
|
|
156
|
+
const cleanup = () => {
|
|
157
|
+
clearTimeout(waiter.timer);
|
|
158
|
+
this.offEvent(event, listener);
|
|
159
|
+
this.activeEventWaiters.delete(waiter);
|
|
160
|
+
};
|
|
161
|
+
this.activeEventWaiters.add(waiter);
|
|
142
162
|
this.onEvent(event, listener);
|
|
143
163
|
});
|
|
144
164
|
}
|
|
145
165
|
/**
|
|
146
166
|
* 关闭连接
|
|
167
|
+
*
|
|
168
|
+
* 立即 reject 所有 pending callbacks 和 waitForEvent,
|
|
169
|
+
* 然后发出 'disconnected' 信号供外部等待者(如 waitForAnyEvent)清理。
|
|
147
170
|
*/
|
|
148
171
|
close() {
|
|
149
|
-
|
|
150
|
-
for (const [id, callback] of this.callbacks) {
|
|
151
|
-
callback.reject(new CDPError('连接主动关闭'));
|
|
152
|
-
}
|
|
153
|
-
this.callbacks.clear();
|
|
172
|
+
this.rejectAllPending('连接主动关闭');
|
|
154
173
|
this.eventListeners.clear();
|
|
155
|
-
// 关闭 WebSocket
|
|
156
174
|
if (this.ws) {
|
|
157
175
|
this.ws.close();
|
|
158
176
|
this.ws = null;
|
|
159
177
|
}
|
|
178
|
+
this.emit('disconnected');
|
|
160
179
|
}
|
|
161
180
|
/**
|
|
162
181
|
* 处理收到的消息
|
|
@@ -201,15 +220,26 @@ export class CDPClient extends EventEmitter {
|
|
|
201
220
|
this.emit(message.method, message.params);
|
|
202
221
|
}
|
|
203
222
|
}
|
|
223
|
+
/**
|
|
224
|
+
* 立即 reject 所有 pending callbacks 和 waitForEvent 等待者
|
|
225
|
+
*/
|
|
226
|
+
rejectAllPending(reason) {
|
|
227
|
+
for (const [, callback] of this.callbacks) {
|
|
228
|
+
callback.reject(new CDPError(reason));
|
|
229
|
+
}
|
|
230
|
+
this.callbacks.clear();
|
|
231
|
+
for (const waiter of this.activeEventWaiters) {
|
|
232
|
+
clearTimeout(waiter.timer);
|
|
233
|
+
this.offEvent(waiter.event, waiter.listener);
|
|
234
|
+
waiter.reject(new CDPError(reason));
|
|
235
|
+
}
|
|
236
|
+
this.activeEventWaiters.clear();
|
|
237
|
+
}
|
|
204
238
|
/**
|
|
205
239
|
* 处理连接关闭
|
|
206
240
|
*/
|
|
207
241
|
handleClose() {
|
|
208
|
-
|
|
209
|
-
for (const [id, callback] of this.callbacks) {
|
|
210
|
-
callback.reject(new CDPError('连接已关闭'));
|
|
211
|
-
this.callbacks.delete(id);
|
|
212
|
-
}
|
|
242
|
+
this.rejectAllPending('连接已关闭');
|
|
213
243
|
this.emit('disconnected');
|
|
214
244
|
}
|
|
215
245
|
}
|
package/dist/cdp/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/cdp/client.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAC,YAAY,EAAC,MAAM,QAAQ,CAAA;AACnC,OAAO,SAAS,MAAM,IAAI,CAAA;AAC1B,OAAO,EAAC,QAAQ,EAAE,sBAAsB,EAAE,YAAY,EAAC,MAAM,mBAAmB,CAAA;
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/cdp/client.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"launcher.d.ts","sourceRoot":"","sources":["../../src/cdp/launcher.ts"],"names":[],"mappings":"AAAA;;;;GAIG;
|
|
1
|
+
{"version":3,"file":"launcher.d.ts","sourceRoot":"","sources":["../../src/cdp/launcher.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAOH,OAAO,KAAK,EAAC,aAAa,EAAC,MAAM,kBAAkB,CAAA;AA6BnD;;GAEG;AACH,wBAAgB,UAAU,IAAI,MAAM,GAAG,IAAI,CAU1C;AAED;;GAEG;AACH,qBAAa,eAAe;IACxB,OAAO,CAAC,OAAO,CAA4B;IAC3C,OAAO,CAAC,KAAK,CAA2B;IAExC,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,OAAO,CAAC,SAAS,CAAa;IAE9B,IAAI,QAAQ,IAAI,MAAM,CAErB;IAED,IAAI,SAAS,IAAI,OAAO,CAEvB;IAED;;OAEG;IACG,MAAM,CAAC,OAAO,GAAE,aAAkB,GAAG,OAAO,CAAC,MAAM,CAAC;IA8B1D;;OAEG;IACH,KAAK,IAAI,IAAI;IAOb;;OAEG;IACH,UAAU,IAAI,IAAI;IAOlB;;OAEG;IACH,OAAO,CAAC,SAAS;IAwDjB;;OAEG;IACH,OAAO,CAAC,eAAe;CA0C1B"}
|