smooth-operator-mcp 2.4.6 → 2.4.7

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/docs/harnesses.md CHANGED
@@ -12,6 +12,20 @@ SmoothOperator speaks MCP over stdio. The `smooth-operator install <target>`
12
12
  command registers that stdio server with a supported client. It uses
13
13
  structured argument arrays and never invokes a shell.
14
14
 
15
+ The server also supports Streamable HTTP at `/mcp` for harnesses that cannot
16
+ launch local stdio processes. Its HTTP adapter accepts current MCP sessions and
17
+ the SDK's legacy 2025-compatible handshake, while retaining host, origin,
18
+ authentication, and request-size checks. For a local harness that needs an
19
+ explicit path, use a structured command such as:
20
+
21
+ ```text
22
+ smooth-operator --config /absolute/path/to/config.json
23
+ ```
24
+
25
+ The installer-created `~/.smooth-operator/config.json` is discovered
26
+ automatically, so an explicit `--config` argument is only needed for a separate
27
+ profile or an unusual home/config location.
28
+
15
29
  Build or install the package first:
16
30
 
17
31
  ```sh
@@ -132,14 +132,54 @@ SMOOTH_OPERATOR_HTTP_HOST=0.0.0.0 \
132
132
  SMOOTH_OPERATOR_ALLOW_REMOTE_HTTP=true \
133
133
  SMOOTH_OPERATOR_HTTP_TOKEN="$(openssl rand -hex 32)" \
134
134
  SMOOTH_OPERATOR_ALLOWED_HOSTS=example.internal \
135
- SMOOTH_OPERATOR_ALLOWED_ORIGINS=https://example.internal \
135
+ SMOOTH_OPERATOR_ALLOWED_ORIGINS=example.internal \
136
136
  smooth-operator
137
137
  ```
138
138
 
139
139
  Remote mode is rejected unless the token is at least 32 characters. Do not
140
140
  use a token from a shell history, checked-in file, or shared log. A reverse
141
141
  proxy can add TLS and network access controls, but it does not replace the
142
- application token, Host/Origin allowlists, or request-size limit.
142
+ application token, Host/Origin allowlists, or request-size limit. Allowed host
143
+ and origin values are hostnames without a scheme; browser preflight requests
144
+ are answered only after the same Host and Origin checks.
145
+
146
+ ### ChatGPT and OpenAI connections
147
+
148
+ For private developer-mode use, the safest OpenAI-compatible route is Secure
149
+ MCP Tunnel. It keeps this server on the local machine and forwards requests
150
+ over an outbound connection; it can launch this server over stdio, so no public
151
+ HTTP listener or public browser profile is required.
152
+
153
+ Create a tunnel in OpenAI Platform, install the separately distributed
154
+ `tunnel-client`, and run a profile like this (replace the placeholders with
155
+ your tunnel identity and local executable):
156
+
157
+ ```sh
158
+ export CONTROL_PLANE_API_KEY="sk-..."
159
+
160
+ tunnel-client init \
161
+ --sample sample_mcp_stdio_local \
162
+ --profile smooth-operator \
163
+ --tunnel-id tunnel_... \
164
+ --mcp-command "smooth-operator --transport stdio"
165
+
166
+ tunnel-client doctor --profile smooth-operator --explain
167
+ tunnel-client run --profile smooth-operator
168
+ ```
169
+
170
+ Then enable Developer mode in ChatGPT, create a developer-mode app, choose
171
+ `Tunnel`, and select the associated tunnel. Tunnel and ChatGPT workspace
172
+ permissions are separate; the tunnel must be associated with the target
173
+ workspace. This path is for private testing and use, not public plugin
174
+ submission.
175
+
176
+ For public distribution, deploy a stable HTTPS `/mcp` endpoint and put an
177
+ OAuth 2.1-compatible identity provider in front of authenticated tools. The
178
+ local bearer token is intended for this server's controlled HTTP mode; it is
179
+ not a substitute for a public OAuth authorization server. See the official
180
+ [OpenAI MCP quickstart](https://developers.openai.com/plugins/build/app-quickstart),
181
+ [authentication guide](https://developers.openai.com/plugins/build/auth), and
182
+ [Secure MCP Tunnel guide](https://developers.openai.com/api/docs/guides/secure-mcp-tunnels).
143
183
 
144
184
  ## Browser lifecycle
145
185
 
@@ -230,9 +270,12 @@ browser mode.
230
270
 
231
271
  ## Configuration and precedence
232
272
 
233
- Configuration can come from a JSON file selected by `--config` or
234
- `SMOOTH_OPERATOR_CONFIG`, environment variables, and a small set of command-line
235
- flags. The effective precedence is:
273
+ Configuration can come from the installer-created
274
+ `~/.smooth-operator/config.json`, an explicitly selected JSON file via `--config`
275
+ or `SMOOTH_OPERATOR_CONFIG`, environment variables, and a small set of
276
+ command-line flags. When no explicit config path is supplied, the installer
277
+ file is loaded automatically so its browser, security, and data-directory
278
+ choices apply consistently to every harness. The effective precedence is:
236
279
 
237
280
  1. command-line values (`--config`, `--transport`, `--host`, `--port`);
238
281
  2. environment variables;
@@ -240,9 +283,11 @@ flags. The effective precedence is:
240
283
  4. documented defaults.
241
284
 
242
285
  The file is an object with nested `http`, `browser`, and `security` sections.
243
- Unknown keys fail validation. Keep the file owner-readable only (`chmod 600`);
244
- the loader rejects group/world-readable configuration files and rejects
245
- symlinked data directories.
286
+ Explicit `--config`/`SMOOTH_OPERATOR_CONFIG` files reject unknown root keys;
287
+ the automatically discovered installer file ignores unrelated root sections so
288
+ it can coexist with harness settings. Keep the file owner-readable only
289
+ (`chmod 600`); the loader rejects group/world-readable configuration files and
290
+ rejects symlinked data directories.
246
291
 
247
292
  Example:
248
293
 
@@ -269,6 +314,7 @@ variables include:
269
314
  | Setting | Default | Notes |
270
315
  | --- | --- | --- |
271
316
  | `SMOOTH_OPERATOR_TRANSPORT` | `stdio` | `stdio` or `http` |
317
+ | `SMOOTH_OPERATOR_CONFIG` | auto-discovered | Explicit JSON config path; overrides the installer default |
272
318
  | `SMOOTH_OPERATOR_DATA_DIR` | `~/.smooth-operator` | Private data, file, and download roots |
273
319
  | `SMOOTH_OPERATOR_BROWSER_MODE` | `managed` | `managed`, `disabled`, `connect`, or `launch` |
274
320
  | `SMOOTH_OPERATOR_BROWSER_URL` | `http://127.0.0.1:9222` | DevTools HTTP endpoint |
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "smooth-operator-mcp",
3
- "version": "2.4.6",
3
+ "version": "2.4.7",
4
4
  "type": "module",
5
5
  "packageManager": "npm@12.0.2",
6
6
  "description": "A lightweight, production-grade MCP server for secure browser automation.",
@@ -23,7 +23,7 @@
23
23
  "scripts": {
24
24
  "start": "tsx src/server/main.ts",
25
25
  "dev": "tsx watch src/server/main.ts",
26
- "build": "esbuild src/server/main.ts --bundle --platform=node --format=esm --packages=external --banner:js=\"#!/usr/bin/env node\" --outfile=dist/smooth-operator.mjs --sourcemap --sources-content=false",
26
+ "build": "node scripts/build.mjs",
27
27
  "postbuild": "node scripts/set-executable.mjs dist/smooth-operator.mjs",
28
28
  "lint": "eslint .",
29
29
  "typecheck": "tsc --noEmit",
@@ -46,7 +46,7 @@
46
46
  "dependencies": {
47
47
  "@modelcontextprotocol/node": "^2.0.0",
48
48
  "@modelcontextprotocol/server": "^2.0.0",
49
- "puppeteer-core": "^25.8.0",
49
+ "puppeteer-core": "^25.9.0",
50
50
  "zod": "^4.4.3"
51
51
  },
52
52
  "devDependencies": {