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/README.md
CHANGED
|
@@ -1,13 +1,15 @@
|
|
|
1
1
|
# SmoothOperator
|
|
2
2
|
|
|
3
|
-
Give your AI a real Chrome. SmoothOperator is a
|
|
3
|
+
Give your AI a real Chrome. SmoothOperator is a production MCP server for
|
|
4
|
+
secure browser control. Your harness supplies the reasoning; SmoothOperator
|
|
5
|
+
handles navigation, interaction, extraction, and browser lifecycle. No model
|
|
6
|
+
keys. No hidden planner.
|
|
4
7
|
|
|
5
|
-
## Install
|
|
6
|
-
|
|
7
|
-
Choose your harness, add SmoothOperator directly to it, and restart the harness.
|
|
8
|
+
## Install
|
|
8
9
|
|
|
9
10
|
**From npm** (`smooth-operator-mcp`):
|
|
10
|
-
|
|
11
|
+
|
|
12
|
+
```sh
|
|
11
13
|
npm install -g smooth-operator-mcp && smooth-operator install opencode
|
|
12
14
|
npm install -g smooth-operator-mcp && smooth-operator install claude-code
|
|
13
15
|
npm install -g smooth-operator-mcp && smooth-operator install copilot
|
|
@@ -17,99 +19,86 @@ npm install -g smooth-operator-mcp && smooth-operator install vscode
|
|
|
17
19
|
npm install -g smooth-operator-mcp && smooth-operator install cursor
|
|
18
20
|
npm install -g smooth-operator-mcp && smooth-operator install windsurf
|
|
19
21
|
npm install -g smooth-operator-mcp && smooth-operator install claude-desktop
|
|
20
|
-
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
The plain-npm name `smooth-operator` is an unrelated library. Do **not** run
|
|
25
|
+
`npm install -g smooth-operator`.
|
|
21
26
|
|
|
22
|
-
|
|
23
|
-
> Do NOT use `npm install -g smooth-operator`.
|
|
27
|
+
From GitHub:
|
|
24
28
|
|
|
25
|
-
|
|
26
|
-
~~~sh
|
|
29
|
+
```sh
|
|
27
30
|
npm install -g github:Gitshop77/Smooth-Operator && smooth-operator install opencode
|
|
28
|
-
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
The wizard asks exactly three questions: browser profile ownership, browser
|
|
34
|
+
display, and the Chromium executable. `smooth-operator install` without a
|
|
35
|
+
harness chooses one on a TTY (piped/CI prints usage). `--yes` applies
|
|
36
|
+
recommended defaults: `smooth-operator install opencode --yes`.
|
|
37
|
+
|
|
38
|
+
Managed mode owns one private persistent profile
|
|
39
|
+
(`~/.smooth-operator/browser`). Wizard Personal Chrome launches a dedicated
|
|
40
|
+
debugging profile on port `9222` and derives `browserUrl`; it does not take
|
|
41
|
+
over daily Chrome. Connect mode attaches to the configured `browserURL` /
|
|
42
|
+
`wsEndpoint`.
|
|
29
43
|
|
|
30
|
-
|
|
44
|
+
Requires Node.js 22.23.2+ and an installed Chromium-based browser.
|
|
31
45
|
|
|
32
|
-
|
|
46
|
+
```sh
|
|
47
|
+
smooth-operator --help
|
|
48
|
+
smooth-operator doctor
|
|
49
|
+
```
|
|
33
50
|
|
|
34
|
-
|
|
51
|
+
After restart, ask the harness to run `server_health` and `browser_doctor`.
|
|
52
|
+
`server_health` reports `ok` when ready, `degraded` when recovery or the
|
|
53
|
+
profile lease is needed, and `shutting_down` during teardown. An idle lazy
|
|
54
|
+
browser is healthy.
|
|
35
55
|
|
|
36
|
-
|
|
37
|
-
|
|
56
|
+
Local check: `npm run verify` (lint, typecheck, coverage tests, knip, package
|
|
57
|
+
smoke/build). `npm test` and coverage exclude `tests/browser-live.test.ts`.
|
|
58
|
+
Live Chrome is only `npm run test:browser:live`.
|
|
38
59
|
|
|
39
60
|
## What it does
|
|
40
61
|
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
-
|
|
82
|
-
-
|
|
83
|
-
-
|
|
84
|
-
- Flexible — stdio by default, Streamable HTTP when you need it, plus connect and disabled modes
|
|
85
|
-
|
|
86
|
-
For HTTP deployments, the configured MCP path also has a bounded readiness
|
|
87
|
-
endpoint at `<path>/healthz` (normally `/mcp/healthz`), subject to the same
|
|
88
|
-
HTTP authentication policy as the MCP endpoint.
|
|
89
|
-
|
|
90
|
-
## Benchmarks
|
|
91
|
-
|
|
92
|
-
Compared with [Browser Use MCP](https://github.com/browser-use/browser-use) · [](https://github.com/browser-use/browser-use)
|
|
93
|
-
|
|
94
|
-
Tested: 26 August 2026
|
|
95
|
-
|
|
96
|
-
| Benchmark | Metric | SmoothOperator | Browser Use MCP |
|
|
97
|
-
| --- | --- | ---: | ---: |
|
|
98
|
-
| Live Web (8 sites, 32 episodes) | URL success | **32/32** | 23/32 |
|
|
99
|
-
| Live Web | Page-text quality | **26/32** | 21/32 |
|
|
100
|
-
| Live Web | Combined success | **26/32** | 18/32 |
|
|
101
|
-
| Live Web | Task latency mean / p95 | **1,358 / 2,957 ms** | 4,604 / 30,780 ms |
|
|
102
|
-
| Live Web | Navigation p95 | **2,130 ms** | 4,320 ms |
|
|
103
|
-
| Live Web | Click p95 | 920 ms | **142 ms** |
|
|
104
|
-
| Live Web | MCP call p95 | **943 ms** | 2,095 ms |
|
|
105
|
-
| Live Web | Trace errors | **0** | 10 |
|
|
106
|
-
| MiniWoB++ 0.14.3 (125 tasks) | Reward = 1 | **124/125** | 89/125 |
|
|
107
|
-
| MiniWoB++ | Attempts | **125** | 125 |
|
|
108
|
-
| MiniWoB++ | MCP errors | **0** | 29 |
|
|
109
|
-
| MiniWoB++ | Transport errors | **0** | **0** |
|
|
110
|
-
| MiniWoB++ | Timeouts | **0** | **0** |
|
|
111
|
-
| Browser Use benchmark | Muse Spark 1.2 · score | **64% · 100 tasks** | 12% · 60 tasks |
|
|
112
|
-
|
|
113
|
-
*Task counts and scoring rules differ; comparison is directional.*
|
|
114
|
-
|
|
115
|
-
[View the Browser Use benchmark](https://github.com/browser-use/benchmark)
|
|
62
|
+
The MCP registry exposes **57 public tools**. Each listed name does one job.
|
|
63
|
+
Navigate and interact; inspect with snapshots, accessibility, HTML, styles,
|
|
64
|
+
and bounded extraction; work across tabs, frames, popups, shadow DOM,
|
|
65
|
+
dialogs, cookies, storage, downloads, screenshots, and PDFs; search the web
|
|
66
|
+
through bounded DuckDuckGo retrieval; search a metadata-only network journal;
|
|
67
|
+
block page-scoped subresources; inspect elements without scripts, event
|
|
68
|
+
source, or form values; upload up to 20 files from allowed roots (50 MiB
|
|
69
|
+
each, 100 MiB aggregate). Cookie values are omitted from reads. Operations:
|
|
70
|
+
cookies `get`/`set`/`delete`; storage and resource-blocking `get`/`set`/`clear`;
|
|
71
|
+
network and console logs `enable`/`disable`/`read`/`clear`/`read_and_clear`;
|
|
72
|
+
dialogs `get_text`/`accept`/`dismiss`/`send_keys`.
|
|
73
|
+
|
|
74
|
+
Preferred loop: `browser_navigate` / `browser_snapshot` → one mutation →
|
|
75
|
+
verify. Element actions accept exactly one of `target`, `ref`
|
|
76
|
+
(`e5`/`ref:e5`), CSS `selector`, or zero-based `index`. `browser_click`,
|
|
77
|
+
`browser_move`, and `browser_press_and_hold` also accept
|
|
78
|
+
`coordinateX`/`coordinateY` (hold also start/end coordinates or a path).
|
|
79
|
+
Set `includeSnapshot: true` to combine a mutation with its trailing snapshot.
|
|
80
|
+
|
|
81
|
+
Canonical tools: `browser_tabs`, `browser_snapshot`, `browser_input`,
|
|
82
|
+
`browser_back`, `browser_close`, `browser_extract`, `browser_wait`,
|
|
83
|
+
`browser_network_log`, `browser_challenge`, `browser_batch`. Compatibility
|
|
84
|
+
aliases are not listed.
|
|
85
|
+
|
|
86
|
+
`browser_solve_challenge` returns fresh bounded evidence. The connected AI
|
|
87
|
+
uses ordinary browser actions until a fresh classification reports the
|
|
88
|
+
challenge **absent** or the attempt budget is exhausted. Human handoff
|
|
89
|
+
(`browser_wait_for_human`) is an explicit last option. There is no captcha
|
|
90
|
+
solver. Identity stays native: launch args do not fabricate UA,
|
|
91
|
+
platform, WebGL, canvas, client hints, or `navigator.webdriver`.
|
|
92
|
+
|
|
93
|
+
HTTP deployments expose `<path>/healthz` (normally `/mcp/healthz`) with the
|
|
94
|
+
same Host, Origin, and bearer policy as `/mcp`.
|
|
95
|
+
|
|
96
|
+
## Docs
|
|
97
|
+
|
|
98
|
+
- [Architecture](docs/architecture.md)
|
|
99
|
+
- [Security](docs/security.md)
|
|
100
|
+
- [Tools](docs/tools.md)
|
|
101
|
+
- [Config](docs/config.md)
|
|
102
|
+
- [Harnesses](docs/harnesses.md)
|
|
103
|
+
- [Browser compatibility](docs/STEALTH-GUIDE.md)
|
|
104
|
+
- [MCP server operations](docs/mcp-server.md)
|