@pyrokine/mcp-chrome 1.0.0 → 1.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 +236 -96
- package/dist/anti-detection/behavior.d.ts +0 -8
- package/dist/anti-detection/behavior.d.ts.map +1 -1
- package/dist/anti-detection/behavior.js +0 -16
- package/dist/anti-detection/behavior.js.map +1 -1
- package/dist/cdp/client.d.ts +10 -2
- package/dist/cdp/client.d.ts.map +1 -1
- package/dist/cdp/client.js +76 -61
- package/dist/cdp/client.js.map +1 -1
- package/dist/cdp/launcher.d.ts +1 -8
- package/dist/cdp/launcher.d.ts.map +1 -1
- package/dist/cdp/launcher.js +18 -24
- package/dist/cdp/launcher.js.map +1 -1
- package/dist/core/auto-wait.d.ts +8 -1
- package/dist/core/auto-wait.d.ts.map +1 -1
- package/dist/core/auto-wait.js +15 -5
- package/dist/core/auto-wait.js.map +1 -1
- package/dist/core/errors.d.ts +11 -13
- package/dist/core/errors.d.ts.map +1 -1
- package/dist/core/errors.js +50 -31
- 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 +17 -6
- package/dist/core/locator.d.ts.map +1 -1
- package/dist/core/locator.js +137 -28
- package/dist/core/locator.js.map +1 -1
- package/dist/core/retry.d.ts.map +1 -1
- package/dist/core/retry.js +1 -1
- package/dist/core/retry.js.map +1 -1
- package/dist/core/session.d.ts +71 -16
- package/dist/core/session.d.ts.map +1 -1
- package/dist/core/session.js +365 -124
- package/dist/core/session.js.map +1 -1
- package/dist/core/types.d.ts +15 -0
- package/dist/core/types.d.ts.map +1 -1
- package/dist/core/types.js +11 -2
- package/dist/core/types.js.map +1 -1
- package/dist/core/unified-session.d.ts +418 -0
- package/dist/core/unified-session.d.ts.map +1 -0
- package/dist/core/unified-session.js +1044 -0
- package/dist/core/unified-session.js.map +1 -0
- package/dist/extension/bridge.d.ts +203 -0
- package/dist/extension/bridge.d.ts.map +1 -0
- package/dist/extension/bridge.js +375 -0
- package/dist/extension/bridge.js.map +1 -0
- package/dist/extension/http-server.d.ts +60 -0
- package/dist/extension/http-server.d.ts.map +1 -0
- package/dist/extension/http-server.js +319 -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 +16 -67
- 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 +3 -76
- package/dist/tools/browse.d.ts.map +1 -1
- package/dist/tools/browse.js +193 -237
- package/dist/tools/browse.js.map +1 -1
- package/dist/tools/cookies.d.ts +6 -66
- package/dist/tools/cookies.d.ts.map +1 -1
- package/dist/tools/cookies.js +129 -125
- package/dist/tools/cookies.js.map +1 -1
- package/dist/tools/evaluate.d.ts +3 -37
- package/dist/tools/evaluate.d.ts.map +1 -1
- package/dist/tools/evaluate.js +68 -55
- package/dist/tools/evaluate.js.map +1 -1
- package/dist/tools/extract.d.ts +3 -200
- package/dist/tools/extract.d.ts.map +1 -1
- package/dist/tools/extract.js +287 -238
- package/dist/tools/extract.js.map +1 -1
- package/dist/tools/index.d.ts +9 -9
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +9 -9
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/input.d.ts +3 -228
- package/dist/tools/input.d.ts.map +1 -1
- package/dist/tools/input.js +190 -129
- package/dist/tools/input.js.map +1 -1
- package/dist/tools/logs.d.ts +3 -47
- package/dist/tools/logs.d.ts.map +1 -1
- package/dist/tools/logs.js +100 -127
- package/dist/tools/logs.js.map +1 -1
- package/dist/tools/manage.d.ts +6 -51
- package/dist/tools/manage.d.ts.map +1 -1
- package/dist/tools/manage.js +284 -209
- package/dist/tools/manage.js.map +1 -1
- package/dist/tools/schema.d.ts +75 -168
- package/dist/tools/schema.d.ts.map +1 -1
- package/dist/tools/schema.js +276 -126
- package/dist/tools/schema.js.map +1 -1
- package/dist/tools/wait.d.ts +3 -191
- package/dist/tools/wait.d.ts.map +1 -1
- package/dist/tools/wait.js +298 -155
- 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,8 @@
|
|
|
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
|
|
6
|
+
existing browser, **CDP mode** (fallback) launches a dedicated instance.
|
|
6
7
|
|
|
7
8
|
[](LICENSE)
|
|
8
9
|
[](https://nodejs.org/)
|
|
@@ -10,12 +11,18 @@ Chrome browser automation MCP Server using Chrome DevTools Protocol (CDP).
|
|
|
10
11
|
|
|
11
12
|
## Features
|
|
12
13
|
|
|
13
|
-
- **
|
|
14
|
-
- **8 Unified Tools**:
|
|
15
|
-
- **
|
|
16
|
-
- **
|
|
17
|
-
- **
|
|
14
|
+
- **Dual Mode**: Extension mode shares your login sessions; CDP mode for headless/isolated scenarios
|
|
15
|
+
- **8 Unified Tools**: Action-based design covering browse, input, extract, wait, evaluate, manage, cookies, logs
|
|
16
|
+
- **Multi-Tab Parallel**: `tabId` parameter enables operations on any tab without switching focus
|
|
17
|
+
- **iframe Penetration**: `frame` parameter targets elements inside iframes (CSS selector or index, Extension mode)
|
|
18
|
+
- **Semantic Targeting**: 11 ways to locate elements (role, text, label, css, css+text combo, xpath, coordinates, etc.)
|
|
19
|
+
- **Auto-Wait**: Built-in clickability and input-ready detection with deadline-based timeout budget
|
|
20
|
+
- **Dual Input Mode**: `precise` (debugger API, bypasses CSP) or `stealth` (JS injection, no debug banner)
|
|
21
|
+
- **Smart Output**: Bare `return` auto-wrapped in IIFE; large results (>100KB) auto-saved to file; `output` writes raw
|
|
22
|
+
text for strings
|
|
23
|
+
- **Multi-Server**: Extension auto-discovers and connects to multiple MCP Server instances simultaneously
|
|
18
24
|
- **Anti-Detection**: Optional fingerprint masking and behavior simulation
|
|
25
|
+
- **Structured Errors**: Every error includes code, message, suggestion, and context
|
|
19
26
|
|
|
20
27
|
## Compatible Clients
|
|
21
28
|
|
|
@@ -29,6 +36,12 @@ Chrome browser automation MCP Server using Chrome DevTools Protocol (CDP).
|
|
|
29
36
|
|
|
30
37
|
## Installation
|
|
31
38
|
|
|
39
|
+
```bash
|
|
40
|
+
npm install -g @pyrokine/mcp-chrome
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
Or from source:
|
|
44
|
+
|
|
32
45
|
```bash
|
|
33
46
|
git clone https://github.com/Pyrokine/claude-mcp-tools.git
|
|
34
47
|
cd claude-mcp-tools/mcp-chrome
|
|
@@ -38,30 +51,26 @@ npm run build
|
|
|
38
51
|
|
|
39
52
|
## Quick Start
|
|
40
53
|
|
|
41
|
-
### 1
|
|
42
|
-
|
|
43
|
-
```bash
|
|
44
|
-
# With UI
|
|
45
|
-
./scripts/start-chrome.sh
|
|
54
|
+
### Mode 1: Extension Mode (Recommended)
|
|
46
55
|
|
|
47
|
-
|
|
48
|
-
./scripts/start-chrome-headless.sh
|
|
56
|
+
Extension mode controls your existing Chrome — shares login sessions, cookies, and browsing context.
|
|
49
57
|
|
|
50
|
-
|
|
51
|
-
google-chrome --remote-debugging-port=9222
|
|
52
|
-
```
|
|
58
|
+
**Step 1: Install Chrome Extension**
|
|
53
59
|
|
|
54
|
-
|
|
60
|
+
1. Open `chrome://extensions/` in Chrome
|
|
61
|
+
2. Enable "Developer mode" (top-right toggle)
|
|
62
|
+
3. Click "Load unpacked" → select `mcp-chrome/extension/dist/` directory
|
|
63
|
+
4. The MCP Chrome icon appears in the toolbar
|
|
55
64
|
|
|
56
|
-
|
|
65
|
+
**Step 2: Configure MCP Client**
|
|
57
66
|
|
|
58
67
|
```bash
|
|
68
|
+
# Claude Code
|
|
59
69
|
claude mcp add chrome -- node /path/to/mcp-chrome/dist/index.js
|
|
60
70
|
```
|
|
61
71
|
|
|
62
|
-
#### Claude Desktop / Other Clients
|
|
63
|
-
|
|
64
72
|
```json
|
|
73
|
+
// Claude Desktop / Other Clients
|
|
65
74
|
{
|
|
66
75
|
"mcpServers": {
|
|
67
76
|
"chrome": {
|
|
@@ -72,29 +81,53 @@ claude mcp add chrome -- node /path/to/mcp-chrome/dist/index.js
|
|
|
72
81
|
}
|
|
73
82
|
```
|
|
74
83
|
|
|
84
|
+
**Step 3: Connect**
|
|
85
|
+
|
|
86
|
+
The Extension auto-connects to the MCP Server via HTTP/WebSocket (port 19222-19299). Click the toolbar icon to verify
|
|
87
|
+
connection status.
|
|
88
|
+
|
|
89
|
+
```
|
|
90
|
+
browse(action="list") // List all tabs
|
|
91
|
+
browse(action="open", url="https://example.com")
|
|
92
|
+
extract(type="screenshot")
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
### Mode 2: CDP Mode (Fallback)
|
|
96
|
+
|
|
97
|
+
CDP mode launches or connects to a dedicated Chrome instance. Used when the Extension is not installed, or for
|
|
98
|
+
headless/isolated scenarios.
|
|
99
|
+
|
|
100
|
+
```bash
|
|
101
|
+
# Start Chrome with remote debugging
|
|
102
|
+
google-chrome --remote-debugging-port=9222
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
```
|
|
106
|
+
browse(action="connect", port=9222)
|
|
107
|
+
browse(action="open", url="https://example.com")
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
> When the Extension is connected, all tools use Extension mode automatically. CDP mode activates only when the
|
|
111
|
+
> Extension is unavailable.
|
|
112
|
+
|
|
75
113
|
## Available Tools (8 Tools)
|
|
76
114
|
|
|
77
115
|
### browse - Browser Management & Navigation
|
|
78
116
|
|
|
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) |
|
|
117
|
+
| Action | Description |
|
|
118
|
+
|-----------|---------------------------------------|
|
|
119
|
+
| `launch` | Launch new Chrome instance (CDP mode) |
|
|
120
|
+
| `connect` | Connect to running Chrome (CDP mode) |
|
|
121
|
+
| `list` | List all pages/tabs |
|
|
122
|
+
| `attach` | Attach to a specific page/tab |
|
|
123
|
+
| `open` | Navigate to URL |
|
|
124
|
+
| `back` | Go back in history |
|
|
125
|
+
| `forward` | Go forward in history |
|
|
126
|
+
| `refresh` | Reload page |
|
|
127
|
+
| `close` | Close browser connection |
|
|
128
|
+
|
|
129
|
+
Extension-specific: `list` returns `managed` field (whether tab is in MCP Chrome group) and `isActive` field (whether
|
|
130
|
+
it's the current operation target). `open` auto-creates tab group (cyan color).
|
|
98
131
|
|
|
99
132
|
### input - Keyboard & Mouse Input
|
|
100
133
|
|
|
@@ -110,6 +143,9 @@ Event sequence model supporting arbitrary combinations:
|
|
|
110
143
|
| `type` | Type text |
|
|
111
144
|
| `wait` | Pause between events |
|
|
112
145
|
|
|
146
|
+
Parameters: `humanize` enables Bézier curve movement and random delays. `tabId` targets a specific tab. `frame` targets
|
|
147
|
+
an iframe (CSS selector or index). Both Extension mode only.
|
|
148
|
+
|
|
113
149
|
### extract - Content Extraction
|
|
114
150
|
|
|
115
151
|
| Type | Description |
|
|
@@ -120,6 +156,9 @@ Event sequence model supporting arbitrary combinations:
|
|
|
120
156
|
| `screenshot` | Take screenshot |
|
|
121
157
|
| `state` | Get page state (URL, title, interactive elements) |
|
|
122
158
|
|
|
159
|
+
Parameters: `output` saves result to file. `tabId` targets a specific tab. `frame` targets an iframe. Both Extension
|
|
160
|
+
mode only.
|
|
161
|
+
|
|
123
162
|
### wait - Wait for Conditions
|
|
124
163
|
|
|
125
164
|
| For | Description |
|
|
@@ -129,16 +168,37 @@ Event sequence model supporting arbitrary combinations:
|
|
|
129
168
|
| `time` | Fixed delay |
|
|
130
169
|
| `idle` | Wait for network idle |
|
|
131
170
|
|
|
171
|
+
Parameters: `tabId` targets a specific tab. `frame` targets an iframe. Both Extension mode only.
|
|
172
|
+
|
|
173
|
+
### evaluate - JavaScript Execution
|
|
174
|
+
|
|
175
|
+
Execute JavaScript in page context.
|
|
176
|
+
|
|
177
|
+
| Parameter | Description |
|
|
178
|
+
|-----------|---------------------------------------------------------------------------|
|
|
179
|
+
| `script` | JavaScript code (required). Bare `return` statements auto-wrapped in IIFE |
|
|
180
|
+
| `args` | Arguments passed to script (script must be a function expression) |
|
|
181
|
+
| `mode` | `precise` (default, debugger API) or `stealth` (JS injection) |
|
|
182
|
+
| `output` | Save result to file (strings written as raw text, others as JSON) |
|
|
183
|
+
| `tabId` | Target a specific tab (Extension mode) |
|
|
184
|
+
| `frame` | Target an iframe by CSS selector or index (Extension mode) |
|
|
185
|
+
| `timeout` | End-to-end budget (ms) |
|
|
186
|
+
|
|
187
|
+
Results >100KB are auto-saved to `/tmp/` with a structured hint returned.
|
|
188
|
+
|
|
132
189
|
### manage - Page & Environment Management
|
|
133
190
|
|
|
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.)
|
|
191
|
+
| Action | Description |
|
|
192
|
+
|--------------|----------------------------------------------------------|
|
|
193
|
+
| `newPage` | Create new page/tab |
|
|
194
|
+
| `closePage` | Close page |
|
|
195
|
+
| `clearCache` | Clear cache/cookies/storage |
|
|
196
|
+
| `viewport` | Set viewport size |
|
|
197
|
+
| `userAgent` | Set User-Agent |
|
|
198
|
+
| `emulate` | Device emulation (iPhone, iPad, etc.) |
|
|
199
|
+
| `inputMode` | Query or set input mode (`precise` / `stealth`) |
|
|
200
|
+
| `stealth` | Inject anti-detection scripts |
|
|
201
|
+
| `cdp` | Send raw CDP command (advanced, e.g. `Runtime.evaluate`) |
|
|
142
202
|
|
|
143
203
|
### logs - Browser Logs
|
|
144
204
|
|
|
@@ -147,6 +207,9 @@ Event sequence model supporting arbitrary combinations:
|
|
|
147
207
|
| `console` | Console logs (with level filter) |
|
|
148
208
|
| `network` | Network request logs (with URL filter) |
|
|
149
209
|
|
|
210
|
+
Parameters: `output` saves result to file. `tabId` targets a specific tab (Extension mode). `frame` is not applicable
|
|
211
|
+
for logs.
|
|
212
|
+
|
|
150
213
|
### cookies - Cookie Management
|
|
151
214
|
|
|
152
215
|
| Action | Description |
|
|
@@ -156,52 +219,90 @@ Event sequence model supporting arbitrary combinations:
|
|
|
156
219
|
| `delete` | Delete cookie |
|
|
157
220
|
| `clear` | Clear all cookies |
|
|
158
221
|
|
|
159
|
-
### evaluate - JavaScript Execution
|
|
160
|
-
|
|
161
|
-
Execute arbitrary JavaScript in page context.
|
|
162
|
-
|
|
163
222
|
## Target: Unified Element Locator
|
|
164
223
|
|
|
165
224
|
All tools use a unified `Target` type for element location:
|
|
166
225
|
|
|
167
226
|
```typescript
|
|
168
227
|
// By accessibility (recommended - most stable)
|
|
169
|
-
{
|
|
228
|
+
{
|
|
229
|
+
role: "button", name
|
|
230
|
+
:
|
|
231
|
+
"Submit"
|
|
232
|
+
}
|
|
170
233
|
|
|
171
234
|
// By text content
|
|
172
|
-
{
|
|
235
|
+
{
|
|
236
|
+
text: "Click here", exact
|
|
237
|
+
:
|
|
238
|
+
true
|
|
239
|
+
}
|
|
173
240
|
|
|
174
241
|
// By form label
|
|
175
|
-
{
|
|
242
|
+
{
|
|
243
|
+
label: "Email"
|
|
244
|
+
}
|
|
176
245
|
|
|
177
246
|
// By placeholder
|
|
178
|
-
{
|
|
247
|
+
{
|
|
248
|
+
placeholder: "Enter your name"
|
|
249
|
+
}
|
|
179
250
|
|
|
180
251
|
// By title attribute
|
|
181
|
-
{
|
|
252
|
+
{
|
|
253
|
+
title: "Close dialog"
|
|
254
|
+
}
|
|
182
255
|
|
|
183
256
|
// By alt text (images)
|
|
184
|
-
{
|
|
257
|
+
{
|
|
258
|
+
alt: "Profile picture"
|
|
259
|
+
}
|
|
185
260
|
|
|
186
261
|
// By test ID
|
|
187
|
-
{
|
|
262
|
+
{
|
|
263
|
+
testId: "submit-button"
|
|
264
|
+
}
|
|
188
265
|
|
|
189
266
|
// By CSS selector
|
|
190
|
-
{
|
|
267
|
+
{
|
|
268
|
+
css: "#login-form .submit-btn"
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
// Disambiguate multiple matches (0-based)
|
|
272
|
+
{
|
|
273
|
+
css: ".ant-select-input", nth
|
|
274
|
+
:
|
|
275
|
+
1
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
// By CSS + text (filter by text content)
|
|
279
|
+
{
|
|
280
|
+
css: "button", text
|
|
281
|
+
:
|
|
282
|
+
"Submit", exact
|
|
283
|
+
:
|
|
284
|
+
true
|
|
285
|
+
}
|
|
191
286
|
|
|
192
287
|
// By XPath
|
|
193
|
-
{
|
|
288
|
+
{
|
|
289
|
+
xpath: "//button[@type='submit']"
|
|
290
|
+
}
|
|
194
291
|
|
|
195
292
|
// By coordinates
|
|
196
|
-
{
|
|
293
|
+
{
|
|
294
|
+
x: 100, y
|
|
295
|
+
:
|
|
296
|
+
200
|
|
297
|
+
}
|
|
197
298
|
```
|
|
198
299
|
|
|
199
300
|
## Usage Examples
|
|
200
301
|
|
|
201
|
-
### Basic:
|
|
302
|
+
### Basic: List Tabs and Navigate
|
|
202
303
|
|
|
203
304
|
```
|
|
204
|
-
browse(action="
|
|
305
|
+
browse(action="list")
|
|
205
306
|
browse(action="open", url="https://example.com")
|
|
206
307
|
extract(type="state")
|
|
207
308
|
```
|
|
@@ -225,15 +326,12 @@ input(events=[
|
|
|
225
326
|
])
|
|
226
327
|
```
|
|
227
328
|
|
|
228
|
-
###
|
|
329
|
+
### Multi-Tab Operation (Extension Mode)
|
|
229
330
|
|
|
230
331
|
```
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
{ type: "mouseup" },
|
|
235
|
-
{ type: "keyup", key: "Control" }
|
|
236
|
-
], humanize=true)
|
|
332
|
+
// Operate on a specific tab without switching focus
|
|
333
|
+
extract(type="screenshot", tabId="12345")
|
|
334
|
+
evaluate(script="document.title", tabId="12345")
|
|
237
335
|
```
|
|
238
336
|
|
|
239
337
|
### Screenshot
|
|
@@ -242,8 +340,28 @@ input(events=[
|
|
|
242
340
|
// Full page
|
|
243
341
|
extract(type="screenshot", fullPage=true)
|
|
244
342
|
|
|
245
|
-
//
|
|
246
|
-
extract(type="screenshot",
|
|
343
|
+
// JPEG with quality (smaller file)
|
|
344
|
+
extract(type="screenshot", format="jpeg", quality=80, output="/tmp/screenshot.jpg")
|
|
345
|
+
|
|
346
|
+
// Save to file
|
|
347
|
+
extract(type="screenshot", output="/tmp/screenshot.png")
|
|
348
|
+
```
|
|
349
|
+
|
|
350
|
+
### iframe Operations (Extension Mode)
|
|
351
|
+
|
|
352
|
+
```
|
|
353
|
+
// Target iframe by CSS selector
|
|
354
|
+
evaluate(script="document.title", frame="iframe#main")
|
|
355
|
+
|
|
356
|
+
// Target iframe by index
|
|
357
|
+
extract(type="text", frame=0)
|
|
358
|
+
|
|
359
|
+
// Input inside iframe
|
|
360
|
+
input(events=[
|
|
361
|
+
{ type: "mousedown", target: { label: "Username" } },
|
|
362
|
+
{ type: "mouseup" },
|
|
363
|
+
{ type: "type", text: "admin" }
|
|
364
|
+
], frame="iframe.login-frame")
|
|
247
365
|
```
|
|
248
366
|
|
|
249
367
|
### Wait for Element
|
|
@@ -255,25 +373,32 @@ wait(for="element", target={ text: "Loading complete" }, state="visible")
|
|
|
255
373
|
## Architecture
|
|
256
374
|
|
|
257
375
|
```
|
|
258
|
-
|
|
259
|
-
│
|
|
260
|
-
│
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
│
|
|
266
|
-
│
|
|
267
|
-
│ ├─ core/
|
|
268
|
-
│ ├─ cdp/
|
|
269
|
-
│
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
│
|
|
275
|
-
|
|
276
|
-
|
|
376
|
+
┌───────────────────┐
|
|
377
|
+
│ MCP Client │
|
|
378
|
+
│ (Claude, etc.) │
|
|
379
|
+
└─────────┬─────────┘
|
|
380
|
+
│ stdio (JSON-RPC)
|
|
381
|
+
▼
|
|
382
|
+
┌───────────────────┐
|
|
383
|
+
│ MCP-Chrome │
|
|
384
|
+
│ (8 tools) │
|
|
385
|
+
│ ├─ core/ │ UnifiedSession, Locator, AutoWait
|
|
386
|
+
│ ├─ cdp/ │ Native CDP client
|
|
387
|
+
│ ├─ extension/ │ Extension bridge (HTTP + WebSocket)
|
|
388
|
+
│ └─ tools/ │ Tool implementations
|
|
389
|
+
└────┬─────────┬────┘
|
|
390
|
+
│ │
|
|
391
|
+
│ HTTP/WS │ WebSocket (CDP)
|
|
392
|
+
│ │
|
|
393
|
+
▼ ▼
|
|
394
|
+
┌──────────┐ ┌──────────────────┐
|
|
395
|
+
│ Extension│ │ Chrome (CDP) │
|
|
396
|
+
│ (19222+) │ │ (port 9222) │
|
|
397
|
+
│ │ │ Dedicated browser│
|
|
398
|
+
│ Controls │ └──────────────────┘
|
|
399
|
+
│ user's │
|
|
400
|
+
│ browser │
|
|
401
|
+
└──────────┘
|
|
277
402
|
```
|
|
278
403
|
|
|
279
404
|
## Project Structure
|
|
@@ -293,18 +418,29 @@ mcp-chrome/
|
|
|
293
418
|
│ │ ├── evaluate.ts
|
|
294
419
|
│ │ └── schema.ts # Shared JSON Schema (Target oneOf)
|
|
295
420
|
│ ├── core/ # Core abstractions
|
|
296
|
-
│ │ ├── session.ts
|
|
297
|
-
│ │ ├──
|
|
421
|
+
│ │ ├── unified-session.ts # Dual-mode session (Extension + CDP)
|
|
422
|
+
│ │ ├── session.ts # CDP session management
|
|
423
|
+
│ │ ├── locator.ts # Element locator (deadline-based timeout)
|
|
298
424
|
│ │ ├── auto-wait.ts # Auto-wait mechanism
|
|
299
425
|
│ │ ├── retry.ts # Retry logic
|
|
300
426
|
│ │ ├── types.ts # Type definitions
|
|
301
427
|
│ │ └── errors.ts # Error types
|
|
428
|
+
│ ├── extension/ # Extension bridge
|
|
429
|
+
│ │ ├── bridge.ts # High-level Extension API
|
|
430
|
+
│ │ └── http-server.ts # HTTP + WebSocket server
|
|
302
431
|
│ ├── cdp/ # CDP layer
|
|
303
432
|
│ │ ├── client.ts # WebSocket CDP client
|
|
304
433
|
│ │ └── launcher.ts # Chrome launcher
|
|
305
434
|
│ └── anti-detection/ # Anti-detection (optional)
|
|
306
435
|
│ ├── injection.ts
|
|
307
436
|
│ └── behavior.ts
|
|
437
|
+
├── extension/ # Chrome Extension (Manifest V3)
|
|
438
|
+
│ ├── manifest.json
|
|
439
|
+
│ ├── src/
|
|
440
|
+
│ │ ├── background/ # Service Worker
|
|
441
|
+
│ │ ├── content/ # Content scripts
|
|
442
|
+
│ │ └── popup/ # Popup UI
|
|
443
|
+
│ └── dist/ # Built extension (load this in Chrome)
|
|
308
444
|
├── scripts/
|
|
309
445
|
│ ├── start-chrome.sh
|
|
310
446
|
│ └── start-chrome-headless.sh
|
|
@@ -313,15 +449,19 @@ mcp-chrome/
|
|
|
313
449
|
|
|
314
450
|
## Security Notes
|
|
315
451
|
|
|
316
|
-
-
|
|
317
|
-
-
|
|
452
|
+
- Extension mode: shares your browser sessions — only use on trusted machines
|
|
453
|
+
- CDP mode: provides full browser control via DevTools Protocol
|
|
454
|
+
- Default ports bind to 127.0.0.1 only (localhost)
|
|
318
455
|
- The `evaluate` tool can execute arbitrary JavaScript
|
|
456
|
+
- The `manage cdp` action can send arbitrary CDP commands
|
|
319
457
|
- Network logs may contain sensitive information
|
|
320
458
|
|
|
321
459
|
## Known Limitations
|
|
322
460
|
|
|
323
|
-
- **Single session**: Currently supports one browser session at a time
|
|
324
461
|
- **Chrome only**: Only supports Chrome/Chromium browsers (no Firefox/Safari)
|
|
462
|
+
- **Single CDP session**: CDP mode supports one browser session at a time
|
|
463
|
+
- **Extension mode requires Chrome**: Extension is Manifest V3, Chrome-specific
|
|
464
|
+
- **iframe**: Only single-level iframe targeting (no nested `>>` syntax); Extension mode only
|
|
325
465
|
|
|
326
466
|
## License
|
|
327
467
|
|
|
@@ -46,13 +46,5 @@ export declare class BehaviorSimulator {
|
|
|
46
46
|
* 更新当前鼠标位置
|
|
47
47
|
*/
|
|
48
48
|
setCurrentPosition(point: Point): void;
|
|
49
|
-
/**
|
|
50
|
-
* 生成人类化的鼠标移动路径
|
|
51
|
-
*/
|
|
52
|
-
generateHumanMousePath(to: Point): Point[];
|
|
53
|
-
/**
|
|
54
|
-
* 生成人类化的打字延迟序列
|
|
55
|
-
*/
|
|
56
|
-
generateTypingDelays(textLength: number, baseDelay?: number): number[];
|
|
57
49
|
}
|
|
58
50
|
//# sourceMappingURL=behavior.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"behavior.d.ts","sourceRoot":"","sources":["../../src/anti-detection/behavior.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAC,KAAK,EAAC,MAAM,kBAAkB,CAAA;AAE3C;;GAEG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAGnE;AAED;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAC9B,IAAI,EAAE,KAAK,EACX,EAAE,EAAE,KAAK,EACT,KAAK,CAAC,EAAE,MAAM,GACf,KAAK,EAAE,CA4BT;AAwBD;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,SAAS,GAAE,MAAY,GAAG,MAAM,CAI9D;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,CAG1C;AAED;;GAEG;AACH,qBAAa,iBAAiB;IAC1B,OAAO,CAAC,eAAe,CAAsB;IAE7C;;OAEG;IACH,kBAAkB,IAAI,KAAK;IAI3B;;OAEG;IACH,kBAAkB,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;
|
|
1
|
+
{"version":3,"file":"behavior.d.ts","sourceRoot":"","sources":["../../src/anti-detection/behavior.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAC,KAAK,EAAC,MAAM,kBAAkB,CAAA;AAE3C;;GAEG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAGnE;AAED;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAC9B,IAAI,EAAE,KAAK,EACX,EAAE,EAAE,KAAK,EACT,KAAK,CAAC,EAAE,MAAM,GACf,KAAK,EAAE,CA4BT;AAwBD;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,SAAS,GAAE,MAAY,GAAG,MAAM,CAI9D;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,CAG1C;AAED;;GAEG;AACH,qBAAa,iBAAiB;IAC1B,OAAO,CAAC,eAAe,CAAsB;IAE7C;;OAEG;IACH,kBAAkB,IAAI,KAAK;IAI3B;;OAEG;IACH,kBAAkB,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;CAIzC"}
|
|
@@ -93,21 +93,5 @@ export class BehaviorSimulator {
|
|
|
93
93
|
setCurrentPosition(point) {
|
|
94
94
|
this.currentPosition = { ...point };
|
|
95
95
|
}
|
|
96
|
-
/**
|
|
97
|
-
* 生成人类化的鼠标移动路径
|
|
98
|
-
*/
|
|
99
|
-
generateHumanMousePath(to) {
|
|
100
|
-
return generateBezierPath(this.currentPosition, to);
|
|
101
|
-
}
|
|
102
|
-
/**
|
|
103
|
-
* 生成人类化的打字延迟序列
|
|
104
|
-
*/
|
|
105
|
-
generateTypingDelays(textLength, baseDelay = 100) {
|
|
106
|
-
const delays = [];
|
|
107
|
-
for (let i = 0; i < textLength; i++) {
|
|
108
|
-
delays.push(getTypingDelay(baseDelay));
|
|
109
|
-
}
|
|
110
|
-
return delays;
|
|
111
|
-
}
|
|
112
96
|
}
|
|
113
97
|
//# sourceMappingURL=behavior.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"behavior.js","sourceRoot":"","sources":["../../src/anti-detection/behavior.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"behavior.js","sourceRoot":"","sources":["../../src/anti-detection/behavior.ts"],"names":[],"mappings":"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"}
|
package/dist/cdp/client.d.ts
CHANGED
|
@@ -19,8 +19,7 @@ export declare class CDPClient extends EventEmitter {
|
|
|
19
19
|
private callbacks;
|
|
20
20
|
private nextId;
|
|
21
21
|
private eventListeners;
|
|
22
|
-
private
|
|
23
|
-
get endpoint(): string;
|
|
22
|
+
private activeEventWaiters;
|
|
24
23
|
get isConnected(): boolean;
|
|
25
24
|
/**
|
|
26
25
|
* 连接到 CDP 端点
|
|
@@ -40,16 +39,25 @@ export declare class CDPClient extends EventEmitter {
|
|
|
40
39
|
offEvent(event: string, listener: CDPEventListener): void;
|
|
41
40
|
/**
|
|
42
41
|
* 等待特定事件
|
|
42
|
+
*
|
|
43
|
+
* close()/handleClose() 会立即 reject 所有活跃的等待者,不必等 timer 超时。
|
|
43
44
|
*/
|
|
44
45
|
waitForEvent<T = unknown>(event: string, predicate?: (params: T) => boolean, timeout?: number): Promise<T>;
|
|
45
46
|
/**
|
|
46
47
|
* 关闭连接
|
|
48
|
+
*
|
|
49
|
+
* 立即 reject 所有 pending callbacks 和 waitForEvent,
|
|
50
|
+
* 然后发出 'disconnected' 信号供外部等待者(如 waitForAnyEvent)清理。
|
|
47
51
|
*/
|
|
48
52
|
close(): void;
|
|
49
53
|
/**
|
|
50
54
|
* 处理收到的消息
|
|
51
55
|
*/
|
|
52
56
|
private handleMessage;
|
|
57
|
+
/**
|
|
58
|
+
* 立即 reject 所有 pending callbacks 和 waitForEvent 等待者
|
|
59
|
+
*/
|
|
60
|
+
private rejectAllPending;
|
|
53
61
|
/**
|
|
54
62
|
* 处理连接关闭
|
|
55
63
|
*/
|
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;AAwBnC;;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,CAAkB;IACjE,OAAO,CAAC,EAAE,CAA4C;IACtD,OAAO,CAAC,SAAS,CAAmE;IACpF,OAAO,CAAC,MAAM,CAAqC;IACnD,OAAO,CAAC,cAAc,CAAoE;IAC1F,OAAO,CAAC,kBAAkB,CAA8C;IAExE,IAAI,WAAW,IAAI,OAAO,CAEzB;IAED;;OAEG;IACG,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,SAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;IA8CzE;;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;IA6Cb;;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,SAAkB,GAC1B,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;CAStB;AAgCD;;GAEG;AACH,wBAAsB,oBAAoB,CACtC,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,MAA6B,GACvC,OAAO,CAAC,MAAM,CAAC,CAGjB;AAED;;GAEG;AACH,wBAAsB,UAAU,CAC5B,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,MAA6B,GACvC,OAAO,CAAC,KAAK,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,oBAAoB,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC,CAExG"}
|