@stemado/scout-mcp 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 +32 -32
- package/index.js +81 -81
- package/package.json +29 -29
package/README.md
CHANGED
|
@@ -1,32 +1,32 @@
|
|
|
1
|
-
# scout-mcp-server
|
|
2
|
-
|
|
3
|
-
MCP server for browser automation with anti-detection. Scout pages, find elements, interact with websites, and monitor network traffic — from any AI client that supports the [Model Context Protocol](https://modelcontextprotocol.io/).
|
|
4
|
-
|
|
5
|
-
Built on [botasaurus-driver](https://github.com/omkarcloud/botasaurus) for automatic fingerprint evasion and stealth browsing.
|
|
6
|
-
|
|
7
|
-
## Quick Start
|
|
8
|
-
|
|
9
|
-
```bash
|
|
10
|
-
npx -y scout-mcp-server
|
|
11
|
-
```
|
|
12
|
-
|
|
13
|
-
## Configure Your AI Client
|
|
14
|
-
|
|
15
|
-
Add to your MCP server configuration:
|
|
16
|
-
|
|
17
|
-
```json
|
|
18
|
-
{
|
|
19
|
-
"mcpServers": {
|
|
20
|
-
"scout": {
|
|
21
|
-
"command": "npx",
|
|
22
|
-
"args": ["-y", "scout-mcp-server"]
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
```
|
|
27
|
-
|
|
28
|
-
Works with Claude Desktop, Cursor, Windsurf, Continue, and any MCP-compatible client.
|
|
29
|
-
|
|
30
|
-
**Prerequisites:** Python 3.11+, Google Chrome, and either [uv](https://docs.astral.sh/uv/) (recommended) or [pipx](https://pipx.pypa.io/).
|
|
31
|
-
|
|
32
|
-
For full documentation, see the [GitHub repository](https://github.com/stemado/scout-mcp).
|
|
1
|
+
# scout-mcp-server
|
|
2
|
+
|
|
3
|
+
MCP server for browser automation with anti-detection. Scout pages, find elements, interact with websites, and monitor network traffic — from any AI client that supports the [Model Context Protocol](https://modelcontextprotocol.io/).
|
|
4
|
+
|
|
5
|
+
Built on [botasaurus-driver](https://github.com/omkarcloud/botasaurus) for automatic fingerprint evasion and stealth browsing.
|
|
6
|
+
|
|
7
|
+
## Quick Start
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
npx -y scout-mcp-server
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
## Configure Your AI Client
|
|
14
|
+
|
|
15
|
+
Add to your MCP server configuration:
|
|
16
|
+
|
|
17
|
+
```json
|
|
18
|
+
{
|
|
19
|
+
"mcpServers": {
|
|
20
|
+
"scout": {
|
|
21
|
+
"command": "npx",
|
|
22
|
+
"args": ["-y", "scout-mcp-server"]
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
Works with Claude Desktop, Cursor, Windsurf, Continue, and any MCP-compatible client.
|
|
29
|
+
|
|
30
|
+
**Prerequisites:** Python 3.11+, Google Chrome, and either [uv](https://docs.astral.sh/uv/) (recommended) or [pipx](https://pipx.pypa.io/).
|
|
31
|
+
|
|
32
|
+
For full documentation, see the [GitHub repository](https://github.com/stemado/scout-mcp).
|
package/index.js
CHANGED
|
@@ -1,81 +1,81 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* scout-mcp-server npm launcher
|
|
5
|
-
*
|
|
6
|
-
* Thin wrapper that launches the Python MCP server.
|
|
7
|
-
* Tries uvx first (zero-install), then pipx fallback.
|
|
8
|
-
* All stdio is passed through for MCP transport.
|
|
9
|
-
*
|
|
10
|
-
* Windows compatibility: uses shell:true so Node can execute .cmd/.ps1
|
|
11
|
-
* shims (uvx.cmd, pipx.cmd) that package managers install on Windows.
|
|
12
|
-
*
|
|
13
|
-
* Signal forwarding: SIGTERM/SIGINT are forwarded to the child process
|
|
14
|
-
* so the Python server (and Chrome) shut down cleanly when the MCP
|
|
15
|
-
* client disconnects.
|
|
16
|
-
*/
|
|
17
|
-
|
|
18
|
-
const { spawn, execSync } = require("child_process");
|
|
19
|
-
|
|
20
|
-
const IS_WIN = process.platform === "win32";
|
|
21
|
-
|
|
22
|
-
function commandExists(cmd) {
|
|
23
|
-
try {
|
|
24
|
-
execSync(`${cmd} --version`, { stdio: "ignore", shell: true });
|
|
25
|
-
return true;
|
|
26
|
-
} catch {
|
|
27
|
-
return false;
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
function launch(command, args) {
|
|
32
|
-
const child = spawn(command, args, {
|
|
33
|
-
stdio: "inherit",
|
|
34
|
-
shell: IS_WIN,
|
|
35
|
-
windowsHide: true,
|
|
36
|
-
});
|
|
37
|
-
|
|
38
|
-
// Forward termination signals so the Python server shuts down cleanly.
|
|
39
|
-
// Without this, killing the npm process orphans the Python process
|
|
40
|
-
// (and any Chrome instances it launched).
|
|
41
|
-
function forwardSignal(signal) {
|
|
42
|
-
process.on(signal, () => {
|
|
43
|
-
child.kill(signal);
|
|
44
|
-
});
|
|
45
|
-
}
|
|
46
|
-
forwardSignal("SIGTERM");
|
|
47
|
-
forwardSignal("SIGINT");
|
|
48
|
-
|
|
49
|
-
child.on("error", (err) => {
|
|
50
|
-
if (err.code === "ENOENT") {
|
|
51
|
-
process.stderr.write(
|
|
52
|
-
`Error: '${command}' not found. Install uv (https://docs.astral.sh/uv/) and Python 3.11+.\n`
|
|
53
|
-
);
|
|
54
|
-
process.exit(1);
|
|
55
|
-
}
|
|
56
|
-
process.stderr.write(`Error: ${err.message}\n`);
|
|
57
|
-
process.exit(1);
|
|
58
|
-
});
|
|
59
|
-
|
|
60
|
-
child.on("exit", (code) => {
|
|
61
|
-
process.exit(code ?? 1);
|
|
62
|
-
});
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
// Strategy 1: uvx (zero-install Python runner — preferred)
|
|
66
|
-
if (commandExists("uvx")) {
|
|
67
|
-
launch("uvx", ["scout-mcp-server"]);
|
|
68
|
-
}
|
|
69
|
-
// Strategy 2: pipx
|
|
70
|
-
else if (commandExists("pipx")) {
|
|
71
|
-
launch("pipx", ["run", "scout-mcp-server"]);
|
|
72
|
-
}
|
|
73
|
-
// No supported launcher found
|
|
74
|
-
else {
|
|
75
|
-
process.stderr.write(
|
|
76
|
-
"Error: Neither uvx nor pipx found.\n" +
|
|
77
|
-
"Install uv (recommended): https://docs.astral.sh/uv/\n" +
|
|
78
|
-
"Or install pipx: https://pipx.pypa.io/\n"
|
|
79
|
-
);
|
|
80
|
-
process.exit(1);
|
|
81
|
-
}
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* scout-mcp-server npm launcher
|
|
5
|
+
*
|
|
6
|
+
* Thin wrapper that launches the Python MCP server.
|
|
7
|
+
* Tries uvx first (zero-install), then pipx fallback.
|
|
8
|
+
* All stdio is passed through for MCP transport.
|
|
9
|
+
*
|
|
10
|
+
* Windows compatibility: uses shell:true so Node can execute .cmd/.ps1
|
|
11
|
+
* shims (uvx.cmd, pipx.cmd) that package managers install on Windows.
|
|
12
|
+
*
|
|
13
|
+
* Signal forwarding: SIGTERM/SIGINT are forwarded to the child process
|
|
14
|
+
* so the Python server (and Chrome) shut down cleanly when the MCP
|
|
15
|
+
* client disconnects.
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
const { spawn, execSync } = require("child_process");
|
|
19
|
+
|
|
20
|
+
const IS_WIN = process.platform === "win32";
|
|
21
|
+
|
|
22
|
+
function commandExists(cmd) {
|
|
23
|
+
try {
|
|
24
|
+
execSync(`${cmd} --version`, { stdio: "ignore", shell: true });
|
|
25
|
+
return true;
|
|
26
|
+
} catch {
|
|
27
|
+
return false;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
function launch(command, args) {
|
|
32
|
+
const child = spawn(command, args, {
|
|
33
|
+
stdio: "inherit",
|
|
34
|
+
shell: IS_WIN,
|
|
35
|
+
windowsHide: true,
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
// Forward termination signals so the Python server shuts down cleanly.
|
|
39
|
+
// Without this, killing the npm process orphans the Python process
|
|
40
|
+
// (and any Chrome instances it launched).
|
|
41
|
+
function forwardSignal(signal) {
|
|
42
|
+
process.on(signal, () => {
|
|
43
|
+
child.kill(signal);
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
forwardSignal("SIGTERM");
|
|
47
|
+
forwardSignal("SIGINT");
|
|
48
|
+
|
|
49
|
+
child.on("error", (err) => {
|
|
50
|
+
if (err.code === "ENOENT") {
|
|
51
|
+
process.stderr.write(
|
|
52
|
+
`Error: '${command}' not found. Install uv (https://docs.astral.sh/uv/) and Python 3.11+.\n`
|
|
53
|
+
);
|
|
54
|
+
process.exit(1);
|
|
55
|
+
}
|
|
56
|
+
process.stderr.write(`Error: ${err.message}\n`);
|
|
57
|
+
process.exit(1);
|
|
58
|
+
});
|
|
59
|
+
|
|
60
|
+
child.on("exit", (code) => {
|
|
61
|
+
process.exit(code ?? 1);
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
// Strategy 1: uvx (zero-install Python runner — preferred)
|
|
66
|
+
if (commandExists("uvx")) {
|
|
67
|
+
launch("uvx", ["scout-mcp-server"]);
|
|
68
|
+
}
|
|
69
|
+
// Strategy 2: pipx
|
|
70
|
+
else if (commandExists("pipx")) {
|
|
71
|
+
launch("pipx", ["run", "scout-mcp-server"]);
|
|
72
|
+
}
|
|
73
|
+
// No supported launcher found
|
|
74
|
+
else {
|
|
75
|
+
process.stderr.write(
|
|
76
|
+
"Error: Neither uvx nor pipx found.\n" +
|
|
77
|
+
"Install uv (recommended): https://docs.astral.sh/uv/\n" +
|
|
78
|
+
"Or install pipx: https://pipx.pypa.io/\n"
|
|
79
|
+
);
|
|
80
|
+
process.exit(1);
|
|
81
|
+
}
|
package/package.json
CHANGED
|
@@ -1,29 +1,29 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "@stemado/scout-mcp",
|
|
3
|
-
"version": "1.
|
|
4
|
-
"description": "MCP server for browser automation with anti-detection. Scout pages, find elements, interact with websites, and monitor network traffic.",
|
|
5
|
-
"license": "MIT",
|
|
6
|
-
"author": "sdoherty",
|
|
7
|
-
"repository": {
|
|
8
|
-
"type": "git",
|
|
9
|
-
"url": "https://github.com/stemado/scout-mcp"
|
|
10
|
-
},
|
|
11
|
-
"keywords": [
|
|
12
|
-
"mcp",
|
|
13
|
-
"browser",
|
|
14
|
-
"automation",
|
|
15
|
-
"anti-detection",
|
|
16
|
-
"model-context-protocol",
|
|
17
|
-
"botasaurus"
|
|
18
|
-
],
|
|
19
|
-
"bin": {
|
|
20
|
-
"scout-mcp-server": "./index.js"
|
|
21
|
-
},
|
|
22
|
-
"files": [
|
|
23
|
-
"index.js",
|
|
24
|
-
"README.md"
|
|
25
|
-
],
|
|
26
|
-
"engines": {
|
|
27
|
-
"node": ">=18"
|
|
28
|
-
}
|
|
29
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"name": "@stemado/scout-mcp",
|
|
3
|
+
"version": "1.1.0",
|
|
4
|
+
"description": "MCP server for browser automation with anti-detection. Scout pages, find elements, interact with websites, and monitor network traffic.",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"author": "sdoherty",
|
|
7
|
+
"repository": {
|
|
8
|
+
"type": "git",
|
|
9
|
+
"url": "https://github.com/stemado/scout-mcp"
|
|
10
|
+
},
|
|
11
|
+
"keywords": [
|
|
12
|
+
"mcp",
|
|
13
|
+
"browser",
|
|
14
|
+
"automation",
|
|
15
|
+
"anti-detection",
|
|
16
|
+
"model-context-protocol",
|
|
17
|
+
"botasaurus"
|
|
18
|
+
],
|
|
19
|
+
"bin": {
|
|
20
|
+
"scout-mcp-server": "./index.js"
|
|
21
|
+
},
|
|
22
|
+
"files": [
|
|
23
|
+
"index.js",
|
|
24
|
+
"README.md"
|
|
25
|
+
],
|
|
26
|
+
"engines": {
|
|
27
|
+
"node": ">=18"
|
|
28
|
+
}
|
|
29
|
+
}
|