smooth-operator-mcp 3.1.0 → 3.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 +80 -91
- package/dist/smooth-operator.mjs +3293 -3190
- package/dist/smooth-operator.mjs.map +3 -3
- package/docs/STEALTH-GUIDE.md +31 -21
- package/docs/architecture.md +64 -0
- package/docs/config.md +54 -0
- package/docs/harnesses.md +9 -5
- package/docs/mcp-server.md +93 -49
- package/docs/security.md +58 -0
- package/docs/tools.md +90 -0
- package/package.json +10 -6
package/docs/tools.md
ADDED
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
# Tools, resources, and prompts
|
|
2
|
+
|
|
3
|
+
The public surface is locked in `src/server/catalog.ts` and
|
|
4
|
+
`tests/contract-snapshot.test.ts`. `tools/list` is 57 one-job tools.
|
|
5
|
+
Compatibility aliases and retired `browser_logs` are unlisted catalog maps.
|
|
6
|
+
|
|
7
|
+
Operations: cookies `get`/`set`/`delete`; storage and resource-blocking
|
|
8
|
+
`get`/`set`/`clear`; network and console logs
|
|
9
|
+
`enable`/`disable`/`read`/`clear`/`read_and_clear`; dialogs
|
|
10
|
+
`get_text`/`accept`/`dismiss`/`send_keys`. Element tools take exactly one of
|
|
11
|
+
`target`, `ref`, `selector`, or `index` and have no `operation`.
|
|
12
|
+
`browser_click`, `browser_move`, and `browser_press_and_hold` also accept
|
|
13
|
+
`coordinateX`/`coordinateY` (hold also start/end coordinates or a path).
|
|
14
|
+
`browser_challenge` is detect-only; solve is `browser_solve_challenge`.
|
|
15
|
+
|
|
16
|
+
Canonical tools: `browser_tabs`, `browser_snapshot`, `browser_input`,
|
|
17
|
+
`browser_back`, `browser_close`, `browser_extract`, `browser_wait`,
|
|
18
|
+
`browser_network_log`, `browser_challenge`, `browser_batch`.
|
|
19
|
+
|
|
20
|
+
## Unlisted catalog maps
|
|
21
|
+
|
|
22
|
+
Compatibility aliases (`browser_list_tabs`, `browser_get_state`,
|
|
23
|
+
`browser_type`, `browser_extract_content`, `browser_go_back`,
|
|
24
|
+
`browser_close_all`, `browser_exec`) plus retired `browser_logs` are not in
|
|
25
|
+
`tools/list`.
|
|
26
|
+
|
|
27
|
+
| Unlisted name | Canonical call |
|
|
28
|
+
|---|---|
|
|
29
|
+
| `browser_list_tabs` | `browser_tabs` |
|
|
30
|
+
| `browser_get_state` | `browser_snapshot` |
|
|
31
|
+
| `browser_type` | `browser_input` |
|
|
32
|
+
| `browser_extract_content` | `browser_extract` |
|
|
33
|
+
| `browser_go_back` | `browser_back` |
|
|
34
|
+
| `browser_close_all` | `browser_close` |
|
|
35
|
+
| `browser_exec` | `browser_batch` (`actions` is a validated array, never a shell) |
|
|
36
|
+
| `browser_logs` | `browser_network_log` `{ operation: "read" }` |
|
|
37
|
+
|
|
38
|
+
## Observation
|
|
39
|
+
|
|
40
|
+
`browser_snapshot`, `browser_tabs`, `browser_list_sessions`,
|
|
41
|
+
`browser_page_info`, `browser_interactive`, `browser_frames`,
|
|
42
|
+
`browser_accessibility_snapshot`, `browser_extract`,
|
|
43
|
+
`browser_find_text`, `browser_search_page`, `browser_find_elements`,
|
|
44
|
+
`browser_inspect_element`, `browser_dropdown_options`, `browser_computed_style`,
|
|
45
|
+
`browser_page_next`, `browser_get_html`, `browser_search_network_log`,
|
|
46
|
+
`browser_challenge`, `browser_doctor`, `server_health`.
|
|
47
|
+
|
|
48
|
+
Refs (`e5` / `ref:e5`), indexes, and coordinates are observation-bound. Refresh
|
|
49
|
+
them after navigation or DOM changes. Snapshot refs are page/frame/revision-bound.
|
|
50
|
+
|
|
51
|
+
## Navigation and interaction
|
|
52
|
+
|
|
53
|
+
`browser_navigate`, `browser_back`, `browser_forward`,
|
|
54
|
+
`browser_reload`, `browser_switch_tab`, `browser_close_tab`, `browser_click`,
|
|
55
|
+
`browser_input`, `browser_select`, `browser_scroll`, `browser_scroll_to_bottom`,
|
|
56
|
+
`browser_key`, `browser_wait`, `browser_wait_for_element`,
|
|
57
|
+
`browser_wait_for_text`, `browser_wait_for_url`, `browser_wait_for_network_idle`,
|
|
58
|
+
`browser_hover`, `browser_move`, `browser_press_and_hold`, `browser_close`.
|
|
59
|
+
|
|
60
|
+
Also: `browser_upload`, `browser_screenshot`, `browser_pdf`, `browser_downloads`,
|
|
61
|
+
`browser_evaluate`, `browser_batch`, `browser_dialog`,
|
|
62
|
+
`browser_cookies`, `browser_storage`, `browser_network_log`,
|
|
63
|
+
`browser_console_log`, `browser_resource_blocking`, `browser_solve_challenge`,
|
|
64
|
+
`browser_wait_for_human`, `web_search`, `browser_close_session`.
|
|
65
|
+
|
|
66
|
+
`includeSnapshot=true` on a mutation returns one trailing snapshot. Destructive
|
|
67
|
+
batches require `confirmDestructive=true`. `browser_batch` accepts validated JSON
|
|
68
|
+
actions only.
|
|
69
|
+
|
|
70
|
+
## Envelope
|
|
71
|
+
|
|
72
|
+
Success and error results set `content[0].text` to the JSON of `structuredContent`
|
|
73
|
+
(non-objects wrapped as `{ value }`). Errors are
|
|
74
|
+
`{ ok: false, error: { code, message, retryable, details?, recovery? } }`.
|
|
75
|
+
Truncation flags are explicit. Screenshot bytes travel as MCP image content,
|
|
76
|
+
not inside the JSON record.
|
|
77
|
+
|
|
78
|
+
## Resources
|
|
79
|
+
|
|
80
|
+
- `smooth-operator://server/capabilities`
|
|
81
|
+
- `smooth-operator://browser/tabs`
|
|
82
|
+
- `smooth-operator://browser/page/current`
|
|
83
|
+
- `smooth-operator://browser/page/{pageId}`
|
|
84
|
+
- `smooth-operator://browser/downloads`
|
|
85
|
+
- `smooth-operator://browser/logs/network`
|
|
86
|
+
- `smooth-operator://browser/logs/console`
|
|
87
|
+
|
|
88
|
+
## Prompts
|
|
89
|
+
|
|
90
|
+
`agent-chrome-setup`, `browser-workflow`, `extract-page`, `research-question`.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "smooth-operator-mcp",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.3.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"packageManager": "npm@12.0.2",
|
|
6
6
|
"description": "A lightweight, production-grade MCP server for secure browser automation.",
|
|
@@ -14,6 +14,10 @@
|
|
|
14
14
|
"docs/mcp-server.md",
|
|
15
15
|
"docs/harnesses.md",
|
|
16
16
|
"docs/STEALTH-GUIDE.md",
|
|
17
|
+
"docs/architecture.md",
|
|
18
|
+
"docs/security.md",
|
|
19
|
+
"docs/tools.md",
|
|
20
|
+
"docs/config.md",
|
|
17
21
|
"README.md",
|
|
18
22
|
"LICENSE",
|
|
19
23
|
".env.example"
|
|
@@ -28,13 +32,13 @@
|
|
|
28
32
|
"postbuild": "node scripts/set-executable.mjs dist/smooth-operator.mjs",
|
|
29
33
|
"lint": "eslint . --ignore-pattern scripts/benchmark-network-journal.ts",
|
|
30
34
|
"typecheck": "tsc --noEmit",
|
|
31
|
-
"test": "vitest run",
|
|
35
|
+
"test": "vitest run --exclude tests/browser-live.test.ts",
|
|
32
36
|
"test:unit": "vitest run --exclude tests/browser-live.test.ts",
|
|
33
37
|
"benchmark:network": "tsx scripts/benchmark-network-journal.ts",
|
|
34
38
|
"test:browser:live": "node scripts/test-browser-live.mjs",
|
|
35
|
-
"test:watch": "vitest",
|
|
36
|
-
"test:coverage": "vitest run --coverage",
|
|
37
|
-
"verify": "npm run lint && npm run typecheck && npm test && npm run dead-code && npm run package:smoke",
|
|
39
|
+
"test:watch": "vitest --exclude tests/browser-live.test.ts",
|
|
40
|
+
"test:coverage": "vitest run --coverage --exclude tests/browser-live.test.ts",
|
|
41
|
+
"verify": "npm run lint && npm run typecheck && npm run test:coverage && npm run dead-code && npm run package:smoke",
|
|
38
42
|
"dead-code": "knip --include files,exports,dependencies,unlisted --no-progress",
|
|
39
43
|
"mcp:stdio": "npm run start -- --transport stdio",
|
|
40
44
|
"mcp:http": "npm run start -- --transport http",
|
|
@@ -49,7 +53,7 @@
|
|
|
49
53
|
"@modelcontextprotocol/server": "2.0.0",
|
|
50
54
|
"ghost-cursor": "1.4.2",
|
|
51
55
|
"puppeteer-core": "25.10.0",
|
|
52
|
-
"zod": "4.
|
|
56
|
+
"zod": "4.6.2"
|
|
53
57
|
},
|
|
54
58
|
"devDependencies": {
|
|
55
59
|
"@modelcontextprotocol/client": "^2.0.0",
|