@_nazmiforreal/agent-browser-mcp 0.2.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/.mcp.json +12 -0
- package/AGENTS.md +100 -0
- package/README.md +502 -0
- package/dist/browsers/discover.d.ts +13 -0
- package/dist/browsers/discover.d.ts.map +1 -0
- package/dist/browsers/discover.js +54 -0
- package/dist/browsers/discover.js.map +1 -0
- package/dist/browsers/env.d.ts +10 -0
- package/dist/browsers/env.d.ts.map +1 -0
- package/dist/browsers/env.js +72 -0
- package/dist/browsers/env.js.map +1 -0
- package/dist/browsers/index.d.ts +5 -0
- package/dist/browsers/index.d.ts.map +1 -0
- package/dist/browsers/index.js +5 -0
- package/dist/browsers/index.js.map +1 -0
- package/dist/browsers/installer.d.ts +13 -0
- package/dist/browsers/installer.d.ts.map +1 -0
- package/dist/browsers/installer.js +59 -0
- package/dist/browsers/installer.js.map +1 -0
- package/dist/browsers/registry.d.ts +14 -0
- package/dist/browsers/registry.d.ts.map +1 -0
- package/dist/browsers/registry.js +119 -0
- package/dist/browsers/registry.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +153 -0
- package/dist/cli.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +25 -0
- package/dist/index.js.map +1 -0
- package/dist/tools/browser.d.ts +3 -0
- package/dist/tools/browser.d.ts.map +1 -0
- package/dist/tools/browser.js +885 -0
- package/dist/tools/browser.js.map +1 -0
- package/dist/tools/executor.d.ts +9 -0
- package/dist/tools/executor.d.ts.map +1 -0
- package/dist/tools/executor.js +1067 -0
- package/dist/tools/executor.js.map +1 -0
- package/dist/tools/index.d.ts +3 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +3 -0
- package/dist/tools/index.js.map +1 -0
- package/package.json +60 -0
- package/tests/browser-tools.test.ts +329 -0
- package/tests/executor.test.ts +356 -0
- package/tests/integration.test.ts +467 -0
- package/tests/server.test.ts +224 -0
- package/vitest.config.ts +15 -0
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { BROWSERS, resolveBinaryPath } from "./registry.js";
|
|
2
|
+
import { getActiveBrowser, getBrowserPath, setActiveBrowser, setBrowserPath } from "./env.js";
|
|
3
|
+
export function discoverBrowsers() {
|
|
4
|
+
const results = [];
|
|
5
|
+
for (const browser of BROWSERS) {
|
|
6
|
+
const envPath = getBrowserPath(browser.envKey);
|
|
7
|
+
if (envPath) {
|
|
8
|
+
results.push({ name: browser.name, path: envPath, source: "env" });
|
|
9
|
+
continue;
|
|
10
|
+
}
|
|
11
|
+
const autoPath = resolveBinaryPath(browser);
|
|
12
|
+
if (autoPath) {
|
|
13
|
+
results.push({ name: browser.name, path: autoPath, source: "auto" });
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
return results;
|
|
17
|
+
}
|
|
18
|
+
export function discoverActiveBrowser() {
|
|
19
|
+
const activeName = getActiveBrowser();
|
|
20
|
+
if (activeName) {
|
|
21
|
+
const browser = BROWSERS.find((b) => b.name === activeName);
|
|
22
|
+
if (browser) {
|
|
23
|
+
const envPath = getBrowserPath(browser.envKey);
|
|
24
|
+
if (envPath) {
|
|
25
|
+
return { name: browser.name, path: envPath, source: "env" };
|
|
26
|
+
}
|
|
27
|
+
const autoPath = resolveBinaryPath(browser);
|
|
28
|
+
if (autoPath) {
|
|
29
|
+
return { name: browser.name, path: autoPath, source: "auto" };
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
const discovered = discoverBrowsers();
|
|
34
|
+
return discovered.length > 0 ? discovered[0] : null;
|
|
35
|
+
}
|
|
36
|
+
export function selectBrowser(name) {
|
|
37
|
+
const browser = BROWSERS.find((b) => b.name === name);
|
|
38
|
+
if (!browser) {
|
|
39
|
+
return { success: false, error: `Unknown browser: ${name}. Available: ${BROWSERS.map((b) => b.name).join(", ")}` };
|
|
40
|
+
}
|
|
41
|
+
const envPath = getBrowserPath(browser.envKey);
|
|
42
|
+
if (envPath) {
|
|
43
|
+
setActiveBrowser(name);
|
|
44
|
+
return { success: true, path: envPath };
|
|
45
|
+
}
|
|
46
|
+
const autoPath = resolveBinaryPath(browser);
|
|
47
|
+
if (autoPath) {
|
|
48
|
+
setBrowserPath(browser.envKey, autoPath);
|
|
49
|
+
setActiveBrowser(name);
|
|
50
|
+
return { success: true, path: autoPath };
|
|
51
|
+
}
|
|
52
|
+
return { success: false, error: `Browser "${name}" is not installed. Run: agent-browser-mcp -i ${name}` };
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=discover.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"discover.js","sourceRoot":"","sources":["../../src/browsers/discover.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export declare function getEnvPath(): string;
|
|
2
|
+
export declare function ensureEnvFile(): void;
|
|
3
|
+
export declare function loadEnv(): Record<string, string>;
|
|
4
|
+
export declare function getEnvValue(key: string): string | undefined;
|
|
5
|
+
export declare function setEnvValue(key: string, value: string): void;
|
|
6
|
+
export declare function getActiveBrowser(): string | undefined;
|
|
7
|
+
export declare function setActiveBrowser(name: string): void;
|
|
8
|
+
export declare function getBrowserPath(envKey: string): string | undefined;
|
|
9
|
+
export declare function setBrowserPath(envKey: string, path: string): void;
|
|
10
|
+
//# sourceMappingURL=env.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../../src/browsers/env.ts"],"names":[],"mappings":"AAOA,wBAAgB,UAAU,IAAI,MAAM,CAEnC;AAED,wBAAgB,aAAa,IAAI,IAAI,CAQpC;AAED,wBAAgB,OAAO,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAgBhD;AAED,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAG3D;AAED,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAiB5D;AAED,wBAAgB,gBAAgB,IAAI,MAAM,GAAG,SAAS,CAErD;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAEnD;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAEjE;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAEjE"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { existsSync, readFileSync, writeFileSync, mkdirSync } from "fs";
|
|
2
|
+
import { join } from "path";
|
|
3
|
+
import { homedir } from "os";
|
|
4
|
+
const ENV_FILE = join(homedir(), ".agent-browser-mcp", ".env");
|
|
5
|
+
const ACTIVE_BROWSER_KEY = "ACTIVE_BROWSER";
|
|
6
|
+
export function getEnvPath() {
|
|
7
|
+
return ENV_FILE;
|
|
8
|
+
}
|
|
9
|
+
export function ensureEnvFile() {
|
|
10
|
+
const dir = join(homedir(), ".agent-browser-mcp");
|
|
11
|
+
if (!existsSync(dir)) {
|
|
12
|
+
mkdirSync(dir, { recursive: true });
|
|
13
|
+
}
|
|
14
|
+
if (!existsSync(ENV_FILE)) {
|
|
15
|
+
writeFileSync(ENV_FILE, "# agent-browser-mcp browser configuration\n");
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
export function loadEnv() {
|
|
19
|
+
ensureEnvFile();
|
|
20
|
+
const result = {};
|
|
21
|
+
try {
|
|
22
|
+
const content = readFileSync(ENV_FILE, "utf-8");
|
|
23
|
+
for (const line of content.split("\n")) {
|
|
24
|
+
const trimmed = line.trim();
|
|
25
|
+
if (!trimmed || trimmed.startsWith("#"))
|
|
26
|
+
continue;
|
|
27
|
+
const eqIdx = trimmed.indexOf("=");
|
|
28
|
+
if (eqIdx === -1)
|
|
29
|
+
continue;
|
|
30
|
+
const key = trimmed.slice(0, eqIdx).trim();
|
|
31
|
+
const value = trimmed.slice(eqIdx + 1).trim();
|
|
32
|
+
result[key] = value;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
catch { }
|
|
36
|
+
return result;
|
|
37
|
+
}
|
|
38
|
+
export function getEnvValue(key) {
|
|
39
|
+
const env = loadEnv();
|
|
40
|
+
return env[key] || process.env[key];
|
|
41
|
+
}
|
|
42
|
+
export function setEnvValue(key, value) {
|
|
43
|
+
ensureEnvFile();
|
|
44
|
+
const content = readFileSync(ENV_FILE, "utf-8");
|
|
45
|
+
const lines = content.split("\n");
|
|
46
|
+
let found = false;
|
|
47
|
+
for (let i = 0; i < lines.length; i++) {
|
|
48
|
+
const trimmed = lines[i].trim();
|
|
49
|
+
if (trimmed.startsWith(key + "=")) {
|
|
50
|
+
lines[i] = `${key}=${value}`;
|
|
51
|
+
found = true;
|
|
52
|
+
break;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
if (!found) {
|
|
56
|
+
lines.push(`${key}=${value}`);
|
|
57
|
+
}
|
|
58
|
+
writeFileSync(ENV_FILE, lines.join("\n"));
|
|
59
|
+
}
|
|
60
|
+
export function getActiveBrowser() {
|
|
61
|
+
return getEnvValue(ACTIVE_BROWSER_KEY);
|
|
62
|
+
}
|
|
63
|
+
export function setActiveBrowser(name) {
|
|
64
|
+
setEnvValue(ACTIVE_BROWSER_KEY, name);
|
|
65
|
+
}
|
|
66
|
+
export function getBrowserPath(envKey) {
|
|
67
|
+
return getEnvValue(envKey);
|
|
68
|
+
}
|
|
69
|
+
export function setBrowserPath(envKey, path) {
|
|
70
|
+
setEnvValue(envKey, path);
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=env.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"env.js","sourceRoot":"","sources":["../../src/browsers/env.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { BROWSERS, BrowserDef, getBrowserByName, getBrowserNames, resolveBinaryPath } from "./registry.js";
|
|
2
|
+
export { discoverBrowsers, discoverActiveBrowser, selectBrowser, DiscoveredBrowser } from "./discover.js";
|
|
3
|
+
export { installBrowser, listBrowsers, InstallResult } from "./installer.js";
|
|
4
|
+
export { loadEnv, getEnvValue, setEnvValue, getActiveBrowser, setActiveBrowser, getBrowserPath, setBrowserPath, getEnvPath, ensureEnvFile } from "./env.js";
|
|
5
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/browsers/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,gBAAgB,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAC3G,OAAO,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAC1G,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC7E,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,cAAc,EAAE,cAAc,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { BROWSERS, getBrowserByName, getBrowserNames, resolveBinaryPath } from "./registry.js";
|
|
2
|
+
export { discoverBrowsers, discoverActiveBrowser, selectBrowser } from "./discover.js";
|
|
3
|
+
export { installBrowser, listBrowsers } from "./installer.js";
|
|
4
|
+
export { loadEnv, getEnvValue, setEnvValue, getActiveBrowser, setActiveBrowser, getBrowserPath, setBrowserPath, getEnvPath, ensureEnvFile } from "./env.js";
|
|
5
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/browsers/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAc,gBAAgB,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAC3G,OAAO,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,aAAa,EAAqB,MAAM,eAAe,CAAC;AAC1G,OAAO,EAAE,cAAc,EAAE,YAAY,EAAiB,MAAM,gBAAgB,CAAC;AAC7E,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,cAAc,EAAE,cAAc,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export interface InstallResult {
|
|
2
|
+
success: boolean;
|
|
3
|
+
path?: string;
|
|
4
|
+
error?: string;
|
|
5
|
+
}
|
|
6
|
+
export declare function installBrowser(name: string): InstallResult;
|
|
7
|
+
export declare function listBrowsers(): Array<{
|
|
8
|
+
name: string;
|
|
9
|
+
description: string;
|
|
10
|
+
installed: boolean;
|
|
11
|
+
path?: string;
|
|
12
|
+
}>;
|
|
13
|
+
//# sourceMappingURL=installer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"installer.d.ts","sourceRoot":"","sources":["../../src/browsers/installer.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,CA6C1D;AAED,wBAAgB,YAAY,IAAI,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,OAAO,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAU9G"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { execSync } from "child_process";
|
|
2
|
+
import { BROWSERS, resolveBinaryPath } from "./registry.js";
|
|
3
|
+
import { setBrowserPath, setActiveBrowser } from "./env.js";
|
|
4
|
+
export function installBrowser(name) {
|
|
5
|
+
const browser = BROWSERS.find((b) => b.name === name);
|
|
6
|
+
if (!browser) {
|
|
7
|
+
return { success: false, error: `Unknown browser: ${name}. Available: ${BROWSERS.map((b) => b.name).join(", ")}` };
|
|
8
|
+
}
|
|
9
|
+
const existing = resolveBinaryPath(browser);
|
|
10
|
+
if (existing) {
|
|
11
|
+
setBrowserPath(browser.envKey, existing);
|
|
12
|
+
setActiveBrowser(name);
|
|
13
|
+
return { success: true, path: existing };
|
|
14
|
+
}
|
|
15
|
+
console.error(`Installing ${browser.name}...`);
|
|
16
|
+
console.error(`Command: ${browser.installCmd}`);
|
|
17
|
+
try {
|
|
18
|
+
execSync(browser.installCmd, {
|
|
19
|
+
stdio: "inherit",
|
|
20
|
+
timeout: 300000,
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
catch (err) {
|
|
24
|
+
if (browser.installCmdAlt) {
|
|
25
|
+
console.error(`Retrying with alternate command...`);
|
|
26
|
+
try {
|
|
27
|
+
execSync(browser.installCmdAlt, {
|
|
28
|
+
stdio: "inherit",
|
|
29
|
+
timeout: 300000,
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
catch (err2) {
|
|
33
|
+
return { success: false, error: `Install failed: ${err2.message}` };
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
else {
|
|
37
|
+
return { success: false, error: `Install failed: ${err.message}` };
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
const binaryPath = resolveBinaryPath(browser);
|
|
41
|
+
if (binaryPath) {
|
|
42
|
+
setBrowserPath(browser.envKey, binaryPath);
|
|
43
|
+
setActiveBrowser(name);
|
|
44
|
+
return { success: true, path: binaryPath };
|
|
45
|
+
}
|
|
46
|
+
return { success: false, error: `Install succeeded but binary not found at expected paths: ${browser.binaryPaths.join(", ")}` };
|
|
47
|
+
}
|
|
48
|
+
export function listBrowsers() {
|
|
49
|
+
return BROWSERS.map((b) => {
|
|
50
|
+
const path = resolveBinaryPath(b);
|
|
51
|
+
return {
|
|
52
|
+
name: b.name,
|
|
53
|
+
description: b.description,
|
|
54
|
+
installed: !!path,
|
|
55
|
+
path: path || undefined,
|
|
56
|
+
};
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=installer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"installer.js","sourceRoot":"","sources":["../../src/browsers/installer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAc,iBAAiB,EAAE,MAAM,eAAe,CAAC;AACxE,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAQ5D,MAAM,UAAU,cAAc,CAAC,IAAY;IACzC,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;IACtD,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,oBAAoB,IAAI,gBAAgB,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;IACrH,CAAC;IAED,MAAM,QAAQ,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAC;IAC5C,IAAI,QAAQ,EAAE,CAAC;QACb,cAAc,CAAC,OAAO,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QACzC,gBAAgB,CAAC,IAAI,CAAC,CAAC;QACvB,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;IAC3C,CAAC;IAED,OAAO,CAAC,KAAK,CAAC,cAAc,OAAO,CAAC,IAAI,KAAK,CAAC,CAAC;IAC/C,OAAO,CAAC,KAAK,CAAC,YAAY,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;IAEhD,IAAI,CAAC;QACH,QAAQ,CAAC,OAAO,CAAC,UAAU,EAAE;YAC3B,KAAK,EAAE,SAAS;YAChB,OAAO,EAAE,MAAM;SAChB,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,GAAQ,EAAE,CAAC;QAClB,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;YAC1B,OAAO,CAAC,KAAK,CAAC,oCAAoC,CAAC,CAAC;YACpD,IAAI,CAAC;gBACH,QAAQ,CAAC,OAAO,CAAC,aAAa,EAAE;oBAC9B,KAAK,EAAE,SAAS;oBAChB,OAAO,EAAE,MAAM;iBAChB,CAAC,CAAC;YACL,CAAC;YAAC,OAAO,IAAS,EAAE,CAAC;gBACnB,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,mBAAmB,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC;YACtE,CAAC;QACH,CAAC;aAAM,CAAC;YACN,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,mBAAmB,GAAG,CAAC,OAAO,EAAE,EAAE,CAAC;QACrE,CAAC;IACH,CAAC;IAED,MAAM,UAAU,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAC;IAC9C,IAAI,UAAU,EAAE,CAAC;QACf,cAAc,CAAC,OAAO,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;QAC3C,gBAAgB,CAAC,IAAI,CAAC,CAAC;QACvB,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC;IAC7C,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,6DAA6D,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;AAClI,CAAC;AAED,MAAM,UAAU,YAAY;IAC1B,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QACxB,MAAM,IAAI,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAAC;QAClC,OAAO;YACL,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,WAAW,EAAE,CAAC,CAAC,WAAW;YAC1B,SAAS,EAAE,CAAC,CAAC,IAAI;YACjB,IAAI,EAAE,IAAI,IAAI,SAAS;SACxB,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export interface BrowserDef {
|
|
2
|
+
name: string;
|
|
3
|
+
description: string;
|
|
4
|
+
installCmd: string;
|
|
5
|
+
installCmdAlt?: string;
|
|
6
|
+
binaryPaths: string[];
|
|
7
|
+
envKey: string;
|
|
8
|
+
}
|
|
9
|
+
export declare const BROWSERS: BrowserDef[];
|
|
10
|
+
export declare function getBrowserByName(name: string): BrowserDef | undefined;
|
|
11
|
+
export declare function getBrowserNames(): string[];
|
|
12
|
+
export declare function isVersionedPath(p: string): boolean;
|
|
13
|
+
export declare function resolveBinaryPath(browser: BrowserDef): string | null;
|
|
14
|
+
//# sourceMappingURL=registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/browsers/registry.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;CAChB;AA6BD,eAAO,MAAM,QAAQ,EAAE,UAAU,EAiEhC,CAAC;AAEF,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS,CAErE;AAED,wBAAgB,eAAe,IAAI,MAAM,EAAE,CAE1C;AAED,wBAAgB,eAAe,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAElD;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,UAAU,GAAG,MAAM,GAAG,IAAI,CAWpE"}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
import { existsSync, readdirSync } from "fs";
|
|
2
|
+
import { homedir } from "os";
|
|
3
|
+
import { join } from "path";
|
|
4
|
+
function expandHome(p) {
|
|
5
|
+
return p.replace(/^~/, homedir());
|
|
6
|
+
}
|
|
7
|
+
function findVersionedBinary(pattern) {
|
|
8
|
+
const parts = pattern.split("*");
|
|
9
|
+
const prefix = expandHome(parts[0]);
|
|
10
|
+
const suffix = parts[1] || "";
|
|
11
|
+
const lastSlash = prefix.lastIndexOf("/");
|
|
12
|
+
const dir = prefix.substring(0, lastSlash);
|
|
13
|
+
const prefixGlob = prefix.substring(lastSlash + 1);
|
|
14
|
+
if (!existsSync(dir))
|
|
15
|
+
return null;
|
|
16
|
+
try {
|
|
17
|
+
const entries = readdirSync(dir);
|
|
18
|
+
for (const e of entries) {
|
|
19
|
+
if (e.startsWith(prefixGlob)) {
|
|
20
|
+
const full = join(dir, e, suffix.replace(/^\//, ""));
|
|
21
|
+
if (existsSync(full))
|
|
22
|
+
return full;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
catch { }
|
|
27
|
+
return null;
|
|
28
|
+
}
|
|
29
|
+
export const BROWSERS = [
|
|
30
|
+
{
|
|
31
|
+
name: "chromium",
|
|
32
|
+
description: "Open-source Chromium from xtradeb PPA (apt)",
|
|
33
|
+
installCmd: "sudo add-apt-repository -y ppa:xtradeb/apps && sudo apt-get update && sudo apt-get install -y chromium",
|
|
34
|
+
installCmdAlt: "sudo apt-get install -y chromium",
|
|
35
|
+
binaryPaths: [
|
|
36
|
+
"/usr/bin/chromium",
|
|
37
|
+
"/usr/bin/chromium-browser",
|
|
38
|
+
"/snap/bin/chromium",
|
|
39
|
+
],
|
|
40
|
+
envKey: "BROWSER_PATH_CHROMIUM",
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
name: "cloakbrowser",
|
|
44
|
+
description: "Stealth Chromium with 58 C++ fingerprint patches (npm)",
|
|
45
|
+
installCmd: "npm install -g cloakbrowser && cloakbrowser install",
|
|
46
|
+
binaryPaths: [
|
|
47
|
+
"~/.cloakbrowser/chromium-*/chrome",
|
|
48
|
+
],
|
|
49
|
+
envKey: "BROWSER_PATH_CLOAKBROWSER",
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
name: "chrome",
|
|
53
|
+
description: "Google Chrome (agent-browser install)",
|
|
54
|
+
installCmd: "agent-browser install",
|
|
55
|
+
binaryPaths: [
|
|
56
|
+
"~/.agent-browser/browsers/chrome-*/chrome",
|
|
57
|
+
"/usr/bin/google-chrome",
|
|
58
|
+
"/usr/bin/google-chrome-stable",
|
|
59
|
+
"/opt/google/chrome/chrome",
|
|
60
|
+
],
|
|
61
|
+
envKey: "BROWSER_PATH_CHROME",
|
|
62
|
+
},
|
|
63
|
+
{
|
|
64
|
+
name: "firefox",
|
|
65
|
+
description: "Mozilla Firefox (apt)",
|
|
66
|
+
installCmd: "sudo apt-get install -y firefox",
|
|
67
|
+
binaryPaths: [
|
|
68
|
+
"/usr/bin/firefox",
|
|
69
|
+
"/usr/bin/firefox-esr",
|
|
70
|
+
"/snap/bin/firefox",
|
|
71
|
+
],
|
|
72
|
+
envKey: "BROWSER_PATH_FIREFOX",
|
|
73
|
+
},
|
|
74
|
+
{
|
|
75
|
+
name: "brave",
|
|
76
|
+
description: "Brave Browser (apt)",
|
|
77
|
+
installCmd: "sudo apt-get install -y brave-browser",
|
|
78
|
+
binaryPaths: [
|
|
79
|
+
"/usr/bin/brave-browser",
|
|
80
|
+
"/usr/bin/brave-browser-stable",
|
|
81
|
+
],
|
|
82
|
+
envKey: "BROWSER_PATH_BRAVE",
|
|
83
|
+
},
|
|
84
|
+
{
|
|
85
|
+
name: "edge",
|
|
86
|
+
description: "Microsoft Edge (apt)",
|
|
87
|
+
installCmd: "curl -fsSL https://packages.microsoft.com/keys/microsoft.asc | sudo gpg --dearmor -o /usr/share/keyrings/microsoft-edge.gpg && echo 'deb [arch=amd64 signed-by=/usr/share/keyrings/microsoft-edge.gpg] https://packages.microsoft.com/repos/edge stable main' | sudo tee /etc/apt/sources.list.d/microsoft-edge.list && sudo apt-get update && sudo apt-get install -y microsoft-edge-stable",
|
|
88
|
+
binaryPaths: [
|
|
89
|
+
"/usr/bin/microsoft-edge",
|
|
90
|
+
"/usr/bin/microsoft-edge-stable",
|
|
91
|
+
],
|
|
92
|
+
envKey: "BROWSER_PATH_EDGE",
|
|
93
|
+
},
|
|
94
|
+
];
|
|
95
|
+
export function getBrowserByName(name) {
|
|
96
|
+
return BROWSERS.find((b) => b.name === name);
|
|
97
|
+
}
|
|
98
|
+
export function getBrowserNames() {
|
|
99
|
+
return BROWSERS.map((b) => b.name);
|
|
100
|
+
}
|
|
101
|
+
export function isVersionedPath(p) {
|
|
102
|
+
return p.includes("*");
|
|
103
|
+
}
|
|
104
|
+
export function resolveBinaryPath(browser) {
|
|
105
|
+
for (const p of browser.binaryPaths) {
|
|
106
|
+
if (isVersionedPath(p)) {
|
|
107
|
+
const found = findVersionedBinary(p);
|
|
108
|
+
if (found)
|
|
109
|
+
return found;
|
|
110
|
+
}
|
|
111
|
+
else {
|
|
112
|
+
const expanded = expandHome(p);
|
|
113
|
+
if (existsSync(expanded))
|
|
114
|
+
return expanded;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
return null;
|
|
118
|
+
}
|
|
119
|
+
//# sourceMappingURL=registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/browsers/registry.ts"],"names":[],"mappings":"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"}
|
package/dist/cli.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":""}
|
package/dist/cli.js
ADDED
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { installBrowser, listBrowsers } from "./browsers/installer.js";
|
|
3
|
+
import { discoverActiveBrowser, discoverBrowsers, selectBrowser } from "./browsers/discover.js";
|
|
4
|
+
import { getEnvPath } from "./browsers/env.js";
|
|
5
|
+
import { BROWSERS } from "./browsers/registry.js";
|
|
6
|
+
const args = process.argv.slice(2);
|
|
7
|
+
function printUsage() {
|
|
8
|
+
console.log(`
|
|
9
|
+
agent-browser-mcp - MCP server with browser management
|
|
10
|
+
|
|
11
|
+
Usage:
|
|
12
|
+
agent-browser-mcp Start MCP server with active browser
|
|
13
|
+
agent-browser-mcp -i <browser> Install a browser
|
|
14
|
+
agent-browser-mcp --list List all browsers and their status
|
|
15
|
+
agent-browser-mcp --select <browser> Select active browser
|
|
16
|
+
agent-browser-mcp --discover Show auto-discovered browsers
|
|
17
|
+
agent-browser-mcp --env Show .env file path
|
|
18
|
+
agent-browser-mcp --help Show this help
|
|
19
|
+
|
|
20
|
+
Options:
|
|
21
|
+
-i, --install <browser> Install a browser by name
|
|
22
|
+
-l, --list List all browsers (installed or not)
|
|
23
|
+
-s, --select <browser> Select the active browser
|
|
24
|
+
-d, --discover Show discovered browsers
|
|
25
|
+
-e, --env Show .env config path
|
|
26
|
+
-h, --help Show help
|
|
27
|
+
|
|
28
|
+
Available browsers:
|
|
29
|
+
${BROWSERS.map((b) => ` ${b.name.padEnd(16)} ${b.description}`).join("\n")}
|
|
30
|
+
|
|
31
|
+
Examples:
|
|
32
|
+
agent-browser-mcp -i chromium Install Chromium from xtradeb PPA
|
|
33
|
+
agent-browser-mcp -i cloakbrowser Install stealth CloakBrowser
|
|
34
|
+
agent-browser-mcp --select cloakbrowser Set CloakBrowser as active
|
|
35
|
+
agent-browser-mcp --list Show all browsers
|
|
36
|
+
`);
|
|
37
|
+
}
|
|
38
|
+
function handleInstall(browserName) {
|
|
39
|
+
console.error(`Installing ${browserName}...`);
|
|
40
|
+
const result = installBrowser(browserName);
|
|
41
|
+
if (result.success) {
|
|
42
|
+
console.log(`✓ ${browserName} installed successfully`);
|
|
43
|
+
console.log(` Binary: ${result.path}`);
|
|
44
|
+
console.log(` Config: ${getEnvPath()}`);
|
|
45
|
+
}
|
|
46
|
+
else {
|
|
47
|
+
console.error(`✗ Failed to install ${browserName}: ${result.error}`);
|
|
48
|
+
process.exit(1);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
function handleList() {
|
|
52
|
+
const browsers = listBrowsers();
|
|
53
|
+
const active = discoverActiveBrowser();
|
|
54
|
+
console.log("\nAvailable browsers:\n");
|
|
55
|
+
for (const b of browsers) {
|
|
56
|
+
const isActive = active?.name === b.name;
|
|
57
|
+
const status = b.installed ? "✓ installed" : "✗ not installed";
|
|
58
|
+
const marker = isActive ? " [ACTIVE]" : "";
|
|
59
|
+
const pathInfo = b.path ? ` → ${b.path}` : "";
|
|
60
|
+
console.log(` ${b.name.padEnd(16)} ${status}${marker}${pathInfo}`);
|
|
61
|
+
}
|
|
62
|
+
console.log(`\nConfig: ${getEnvPath()}\n`);
|
|
63
|
+
}
|
|
64
|
+
function handleSelect(browserName) {
|
|
65
|
+
const result = selectBrowser(browserName);
|
|
66
|
+
if (result.success) {
|
|
67
|
+
console.log(`✓ Active browser set to: ${browserName}`);
|
|
68
|
+
console.log(` Binary: ${result.path}`);
|
|
69
|
+
}
|
|
70
|
+
else {
|
|
71
|
+
console.error(`✗ ${result.error}`);
|
|
72
|
+
process.exit(1);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
function handleDiscover() {
|
|
76
|
+
const browsers = discoverBrowsers();
|
|
77
|
+
const active = discoverActiveBrowser();
|
|
78
|
+
console.log("\nDiscovered browsers:\n");
|
|
79
|
+
if (browsers.length === 0) {
|
|
80
|
+
console.log(" No browsers found. Install one with: agent-browser-mcp -i <browser>");
|
|
81
|
+
}
|
|
82
|
+
else {
|
|
83
|
+
for (const b of browsers) {
|
|
84
|
+
const isActive = active?.name === b.name;
|
|
85
|
+
const marker = isActive ? " [ACTIVE]" : "";
|
|
86
|
+
const source = b.source === "env" ? "(from .env)" : "(auto-detected)";
|
|
87
|
+
console.log(` ${b.name.padEnd(16)} ${b.path} ${source}${marker}`);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
console.log("");
|
|
91
|
+
}
|
|
92
|
+
async function startMcpServer() {
|
|
93
|
+
const active = discoverActiveBrowser();
|
|
94
|
+
if (active) {
|
|
95
|
+
process.env.AGENT_BROWSER_EXECUTABLE_PATH = active.path;
|
|
96
|
+
console.error(`[browser-manager] Active: ${active.name} → ${active.path}`);
|
|
97
|
+
}
|
|
98
|
+
else {
|
|
99
|
+
console.error("[browser-manager] No browser detected. Using agent-browser default.");
|
|
100
|
+
}
|
|
101
|
+
const { main } = await import("./index.js");
|
|
102
|
+
await main();
|
|
103
|
+
}
|
|
104
|
+
// Parse arguments
|
|
105
|
+
if (args.includes("--help") || args.includes("-h")) {
|
|
106
|
+
printUsage();
|
|
107
|
+
process.exit(0);
|
|
108
|
+
}
|
|
109
|
+
if (args.length === 0) {
|
|
110
|
+
// No args: start MCP server
|
|
111
|
+
startMcpServer().catch((error) => {
|
|
112
|
+
console.error("Fatal error:", error);
|
|
113
|
+
process.exit(1);
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
else if (args.includes("-i") || args.includes("--install")) {
|
|
117
|
+
const idx = args.indexOf("-i") !== -1 ? args.indexOf("-i") : args.indexOf("--install");
|
|
118
|
+
const browserName = args[idx + 1];
|
|
119
|
+
if (!browserName) {
|
|
120
|
+
console.error("Error: -i requires a browser name");
|
|
121
|
+
process.exit(1);
|
|
122
|
+
}
|
|
123
|
+
handleInstall(browserName);
|
|
124
|
+
process.exit(0);
|
|
125
|
+
}
|
|
126
|
+
if (args.includes("-l") || args.includes("--list")) {
|
|
127
|
+
handleList();
|
|
128
|
+
process.exit(0);
|
|
129
|
+
}
|
|
130
|
+
if (args.includes("-s") || args.includes("--select")) {
|
|
131
|
+
const idx = args.indexOf("-s") !== -1 ? args.indexOf("-s") : args.indexOf("--select");
|
|
132
|
+
const browserName = args[idx + 1];
|
|
133
|
+
if (!browserName) {
|
|
134
|
+
console.error("Error: --select requires a browser name");
|
|
135
|
+
process.exit(1);
|
|
136
|
+
}
|
|
137
|
+
handleSelect(browserName);
|
|
138
|
+
process.exit(0);
|
|
139
|
+
}
|
|
140
|
+
if (args.includes("-d") || args.includes("--discover")) {
|
|
141
|
+
handleDiscover();
|
|
142
|
+
process.exit(0);
|
|
143
|
+
}
|
|
144
|
+
if (args.includes("-e") || args.includes("--env")) {
|
|
145
|
+
console.log(getEnvPath());
|
|
146
|
+
process.exit(0);
|
|
147
|
+
}
|
|
148
|
+
// Default: start MCP server
|
|
149
|
+
startMcpServer().catch((error) => {
|
|
150
|
+
console.error("Fatal error:", error);
|
|
151
|
+
process.exit(1);
|
|
152
|
+
});
|
|
153
|
+
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAaA,wBAAsB,IAAI,kBAIzB"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
3
|
+
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
4
|
+
import { registerBrowserTools } from "./tools/browser.js";
|
|
5
|
+
const server = new McpServer({
|
|
6
|
+
name: "agent-browser-mcp",
|
|
7
|
+
version: "0.2.0",
|
|
8
|
+
});
|
|
9
|
+
registerBrowserTools(server);
|
|
10
|
+
export async function main() {
|
|
11
|
+
const transport = new StdioServerTransport();
|
|
12
|
+
await server.connect(transport);
|
|
13
|
+
console.error("Agent Browser MCP server running on stdio");
|
|
14
|
+
}
|
|
15
|
+
const isMainModule = process.argv[1] && (process.argv[1].endsWith("/index.js") ||
|
|
16
|
+
process.argv[1].endsWith("\\index.js") ||
|
|
17
|
+
process.argv[1].endsWith("/cli.js") ||
|
|
18
|
+
process.argv[1].endsWith("\\cli.js"));
|
|
19
|
+
if (isMainModule) {
|
|
20
|
+
main().catch((error) => {
|
|
21
|
+
console.error("Fatal error:", error);
|
|
22
|
+
process.exit(1);
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAE1D,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC;IAC3B,IAAI,EAAE,mBAAmB;IACzB,OAAO,EAAE,OAAO;CACjB,CAAC,CAAC;AAEH,oBAAoB,CAAC,MAAM,CAAC,CAAC;AAE7B,MAAM,CAAC,KAAK,UAAU,IAAI;IACxB,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAChC,OAAO,CAAC,KAAK,CAAC,2CAA2C,CAAC,CAAC;AAC7D,CAAC;AAED,MAAM,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CACtC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC;IACrC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC;IACtC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC;IACnC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,CACrC,CAAC;AAEF,IAAI,YAAY,EAAE,CAAC;IACjB,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;QACrB,OAAO,CAAC,KAAK,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;QACrC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../../src/tools/browser.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAKpE,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAywC5D"}
|