github TypeScript analyzed 254644b

fusengine/fuse-browser

github

MCP server + CLI giving AI agents a real, stealth browser — per-country identity, self-healing actions, snapshots, multi-step plans, structured extraction. Reads JS/SPA pages, drives your own browser via CDP. Built on Patchright/Playwright.

maintainer
fusengine
license
MIT
first seen
2026-06-06
last seen
2026-07-20
releases · 30d
0
short id

Drift inferred · capture-to-capture

No drift recorded — single capability capture; advisories appear once its surface changes.

capabilities 41 tools
transport stdio · http counts 41 tools · 0 res · 0 prompts permission surface via code analysis

tools

  • browser_act
  • browser_autoscroll
  • browser_clipboard
  • browser_close
  • browser_collect
  • browser_collect_batch
  • browser_connect
  • browser_console
  • browser_cookies
  • browser_crawl
  • browser_dialog
  • browser_downloads
  • browser_extract
  • browser_extract_schema
  • browser_fetch
  • browser_fetch_batch
  • browser_handoff
  • browser_inspect
  • browser_live_view
  • browser_live_view_stop
  • browser_metrics
  • browser_navigate
  • browser_network
  • browser_open
  • browser_pdf
  • browser_permissions
  • browser_probe
  • browser_probe_html
  • browser_products
  • browser_route
  • browser_run
  • browser_screenshot
  • browser_serp_batch
  • browser_shots_batch
  • browser_site_shots
  • browser_snapshot
  • browser_status
  • browser_tabs
  • browser_vault
  • browser_visual_diff
  • browser_wait_for
skills & danger signals github-tarball
prompt-surface shipped agent-instruction files + hidden-content / dangerous-code findings — quoted from the analyzed source

analyzed commit 254644b · analyzer v33 · 5d ago

danger signals3

code evidence vv0.1.63 · github-tarball
evidence-backed findings quoted directly from the published source artifact — not inferred

code files: 431

filesystem 35

  • fs fusengine-fuse-browser-254644b/src/bin/run-cli.ts :7 import { readFileSync } from "node:fs";
  • fs fusengine-fuse-browser-254644b/src/engine/browser-paths.ts :9 import { existsSync } from "node:fs";
  • fs fusengine-fuse-browser-254644b/src/engine/configured-context.ts :7 import { existsSync } from "node:fs";
  • fs fusengine-fuse-browser-254644b/src/lib/canonicalize-path.ts :16 import { lstatSync, readlinkSync } from "node:fs";
  • fs fusengine-fuse-browser-254644b/src/lib/fs.ts :6 import { mkdirSync, readFileSync, writeFileSync } from "node:fs";
  • fs fusengine-fuse-browser-254644b/src/lib/output-dir.ts :8 import { existsSync } from "node:fs";
  • fs fusengine-fuse-browser-254644b/src/lib/version.ts :7 import { readFileSync } from "node:fs";
  • fs fusengine-fuse-browser-254644b/src/lib/write-guard.ts :24 import { closeSync, constants as fsConstants, mkdirSync, openSync, writeFileSync, writeSync } from "node:fs";
  • fs fusengine-fuse-browser-254644b/src/proxy/country-map.ts :5 import { existsSync } from "node:fs";
  • fs fusengine-fuse-browser-254644b/src/server/resources.ts :5 import { readdirSync } from "node:fs";
  • fs fusengine-fuse-browser-254644b/src/server/tools/visual-diff.ts :7 import { existsSync, readFileSync } from "node:fs";
  • fs fusengine-fuse-browser-254644b/src/session/download-read.ts :6 import { existsSync, readFileSync, statSync } from "node:fs";
  • fs fusengine-fuse-browser-254644b/src/session/downloads.ts :8 import { existsSync } from "node:fs";
  • fs fusengine-fuse-browser-254644b/src/vault/crypto.ts :10 import { existsSync, readFileSync, writeFileSync } from "node:fs";
  • fs fusengine-fuse-browser-254644b/src/vault/store.ts :8 import { existsSync, readFileSync, renameSync, writeFileSync } from "node:fs";
  • fs (weak) fusengine-fuse-browser-254644b/tests/integration/fetch-extract.test.ts :7 import { readFileSync } from "node:fs";
  • fs (weak) fusengine-fuse-browser-254644b/tests/integration/session-state.test.ts :6 import { existsSync, mkdtempSync, readFileSync } from "node:fs";
  • fs (weak) fusengine-fuse-browser-254644b/tests/live/live-check-2.ts :7 import { existsSync, readFileSync, rmSync } from "node:fs";
  • fs (weak) fusengine-fuse-browser-254644b/tests/live/live-persist-idb.ts :15 import { rmSync } from "node:fs";
  • fs (weak) fusengine-fuse-browser-254644b/tests/live/live-upload.ts :8 import { writeFileSync } from "node:fs";
  • fs (weak) fusengine-fuse-browser-254644b/tests/unit/action-memory.test.ts :2 import { mkdtempSync } from "node:fs";
  • fs (weak) fusengine-fuse-browser-254644b/tests/unit/canonicalize-path.test.ts :2 import { mkdirSync, mkdtempSync, realpathSync, symlinkSync, writeFileSync } from "node:fs";
  • fs (weak) fusengine-fuse-browser-254644b/tests/unit/download-read.test.ts :2 import { mkdtempSync, rmSync, writeFileSync } from "node:fs";
  • fs (weak) fusengine-fuse-browser-254644b/tests/unit/output-dir.test.ts :2 import { mkdirSync, mkdtempSync, rmSync } from "node:fs";
  • fs (weak) fusengine-fuse-browser-254644b/tests/unit/pdf-tool.test.ts :2 import { readFileSync } from "node:fs";
  • fs (weak) fusengine-fuse-browser-254644b/tests/unit/pdf-write.test.ts :2 import { mkdtempSync } from "node:fs";
  • fs (weak) fusengine-fuse-browser-254644b/tests/unit/proxy-load.test.ts :2 import { mkdtempSync, rmSync, writeFileSync } from "node:fs";
  • fs (weak) fusengine-fuse-browser-254644b/tests/unit/screenshot-tool.test.ts :9 import { existsSync, readFileSync } from "node:fs";
  • fs (weak) fusengine-fuse-browser-254644b/tests/unit/vault-resolve.test.ts :2 import { mkdtempSync, rmSync } from "node:fs";
  • fs (weak) fusengine-fuse-browser-254644b/tests/unit/vault-store.test.ts :2 import { mkdtempSync, rmSync } from "node:fs";
  • fs (weak) fusengine-fuse-browser-254644b/tests/unit/vault-tool-redact.test.ts :4 import { mkdtempSync, rmSync } from "node:fs";
  • fs (weak) fusengine-fuse-browser-254644b/tests/unit/write-guard-pdf-real-path.test.ts :2 import { mkdirSync, mkdtempSync, readFileSync, symlinkSync } from "node:fs";
  • fs (weak) fusengine-fuse-browser-254644b/tests/unit/write-guard-screenshot-escape.test.ts :2 import { existsSync, mkdirSync, mkdtempSync, symlinkSync, writeFileSync } from "node:fs";
  • fs (weak) fusengine-fuse-browser-254644b/tests/unit/write-guard-screenshot-real-path.test.ts :2 import { mkdirSync, mkdtempSync, readFileSync, symlinkSync } from "node:fs";
  • fs (weak) fusengine-fuse-browser-254644b/tests/unit/write-guard.test.ts :2 import { mkdirSync, mkdtempSync, symlinkSync } from "node:fs";

shell / exec 5

  • shell (weak) fusengine-fuse-browser-254644b/scripts/postinstall.mjs :6 import { execSync } from "node:child_process";
  • shell fusengine-fuse-browser-254644b/src/engine/cdp-launch.ts :12 import { spawn } from "node:child_process";
  • shell fusengine-fuse-browser-254644b/src/live/open-url.ts :5 import { spawn } from "node:child_process";
  • shell fusengine-fuse-browser-254644b/src/state/action-memory.ts :16 * Run `exec(action)` with site-memory assist: prefill `preferredStrategy` from
  • shell (weak) fusengine-fuse-browser-254644b/tests/live/live-cli-run.ts :6 import { spawn } from "node:child_process";

network 14

  • net fusengine-fuse-browser-254644b/src/agent/fetch-batch.ts :15 /** Options for a batch fetch (per-URL semantics mirror `browser_fetch`). */
  • net fusengine-fuse-browser-254644b/src/agent/fetch-escalate.ts :65 * @param rendered - The still-empty rendered fetch (already escalated).
  • net fusengine-fuse-browser-254644b/src/bin/cli-usage.ts :12 fetch <url> Fast HTTP fetch (add --browser-fallback to retry in a browser)
  • net fusengine-fuse-browser-254644b/src/engine/cdp-launch.ts :61 const res = await fetch(url, { signal: controller.signal });
  • net fusengine-fuse-browser-254644b/src/live/sse-server.ts :7 import { createServer, type ServerResponse } from "node:http";
  • net fusengine-fuse-browser-254644b/src/net/captcha-client.ts :22 const res = await fetch(url, {
  • net fusengine-fuse-browser-254644b/src/net/fetch-fast.ts :52 const res = await client(proxyUrl).fetch(url, { headers: { Accept: ACCEPT } });
  • net fusengine-fuse-browser-254644b/src/net/ip-ranges.ts :8 import { isIP } from "node:net";
  • net fusengine-fuse-browser-254644b/src/server/tools/fetch-batch.ts :25 title: "HTTP fast fetch (batch)",
  • net fusengine-fuse-browser-254644b/src/server/tools/schemas-fetch-output.ts :8 /** A single rendered fetch (matches `agent/fetch-render.ts#RenderedFetch`). */
  • net (weak) fusengine-fuse-browser-254644b/tests/integration/live-view.test.ts :7 import { get } from "node:http";
  • net (weak) fusengine-fuse-browser-254644b/tests/live/live-persist-idb.ts :14 import { createServer, type Server } from "node:http";
  • net (weak) fusengine-fuse-browser-254644b/tests/live/live-proxy.ts :8 import { createServer } from "node:http";
  • net (weak) fusengine-fuse-browser-254644b/tests/unit/fetch-fast-network-guard.test.ts :2 import { createServer } from "node:net";

secrets 6

  • secrets fusengine-fuse-browser-254644b/src/vault/crypto.ts :17 const env = process.env.FUSE_VAULT_KEY;
  • secrets fusengine-fuse-browser-254644b/src/vault/store.ts :42 if (!process.env.FUSE_VAULT_KEY && !existsSync(keyPath)) {
  • secrets (weak) fusengine-fuse-browser-254644b/tests/live/captcha-live.ts :27 apiKey: process.env.CAPTCHA_KEY ?? "INVALID_TEST_KEY",
  • secrets (weak) fusengine-fuse-browser-254644b/tests/unit/vault-resolve.test.ts :51 delete process.env.FUSE_VAULT_KEY;
  • secrets (weak) fusengine-fuse-browser-254644b/tests/unit/vault-store.test.ts :20 process.env.FUSE_VAULT_KEY = Buffer.alloc(32, 7).toString("base64");
  • secrets (weak) fusengine-fuse-browser-254644b/tests/unit/vault-tool-redact.test.ts :22 process.env.FUSE_VAULT_KEY = Buffer.alloc(32, 9).toString("base64");

tool registrations 41

  • browser_autoscroll fusengine-fuse-browser-254644b/src/server/tools/autoscroll.ts :17
  • browser_clipboard fusengine-fuse-browser-254644b/src/server/tools/clipboard.ts :59
  • browser_collect_batch fusengine-fuse-browser-254644b/src/server/tools/collect-batch.ts :37
  • browser_collect fusengine-fuse-browser-254644b/src/server/tools/collect.ts :21
  • browser_connect fusengine-fuse-browser-254644b/src/server/tools/connect.ts :26
  • browser_cookies fusengine-fuse-browser-254644b/src/server/tools/cookies.ts :55
  • browser_crawl fusengine-fuse-browser-254644b/src/server/tools/crawl.ts :19
  • browser_dialog fusengine-fuse-browser-254644b/src/server/tools/dialogs.ts :35
  • browser_downloads fusengine-fuse-browser-254644b/src/server/tools/dialogs.ts :63
  • browser_extract_schema fusengine-fuse-browser-254644b/src/server/tools/extract-schema.ts :37
  • browser_extract fusengine-fuse-browser-254644b/src/server/tools/extract.ts :37
  • browser_fetch_batch fusengine-fuse-browser-254644b/src/server/tools/fetch-batch.ts :22
  • browser_fetch fusengine-fuse-browser-254644b/src/server/tools/fetch.ts :27
  • browser_handoff fusengine-fuse-browser-254644b/src/server/tools/handoff.ts :24
  • browser_inspect fusengine-fuse-browser-254644b/src/server/tools/inspect.ts :34
  • browser_live_view fusengine-fuse-browser-254644b/src/server/tools/live-view.ts :23
  • browser_live_view_stop fusengine-fuse-browser-254644b/src/server/tools/live-view.ts :50
  • browser_console fusengine-fuse-browser-254644b/src/server/tools/logs.ts :30
  • browser_network fusengine-fuse-browser-254644b/src/server/tools/logs.ts :65
  • browser_metrics fusengine-fuse-browser-254644b/src/server/tools/metrics.ts :29
  • browser_navigate fusengine-fuse-browser-254644b/src/server/tools/navigate.ts :16
  • browser_pdf fusengine-fuse-browser-254644b/src/server/tools/pdf.ts :43
  • browser_permissions fusengine-fuse-browser-254644b/src/server/tools/permissions.ts :48
  • browser_probe fusengine-fuse-browser-254644b/src/server/tools/probe.ts :26
  • browser_probe_html fusengine-fuse-browser-254644b/src/server/tools/probe.ts :48
  • browser_products fusengine-fuse-browser-254644b/src/server/tools/products.ts :27
  • browser_route fusengine-fuse-browser-254644b/src/server/tools/route.ts :64
  • browser_run fusengine-fuse-browser-254644b/src/server/tools/run.ts :22
  • browser_screenshot fusengine-fuse-browser-254644b/src/server/tools/screenshot.ts :32
  • browser_serp_batch fusengine-fuse-browser-254644b/src/server/tools/serp-batch.ts :28
  • browser_open fusengine-fuse-browser-254644b/src/server/tools/session.ts :30
  • browser_status fusengine-fuse-browser-254644b/src/server/tools/session.ts :52
  • browser_close fusengine-fuse-browser-254644b/src/server/tools/session.ts :73
  • browser_shots_batch fusengine-fuse-browser-254644b/src/server/tools/shots-batch.ts :27
  • browser_site_shots fusengine-fuse-browser-254644b/src/server/tools/site-shots.ts :32
  • browser_snapshot fusengine-fuse-browser-254644b/src/server/tools/snapshot.ts :22
  • browser_act fusengine-fuse-browser-254644b/src/server/tools/snapshot.ts :51
  • browser_tabs fusengine-fuse-browser-254644b/src/server/tools/tabs.ts :47
  • browser_vault fusengine-fuse-browser-254644b/src/server/tools/vault.ts :24
  • browser_visual_diff fusengine-fuse-browser-254644b/src/server/tools/visual-diff.ts :33
  • browser_wait_for fusengine-fuse-browser-254644b/src/server/tools/wait.ts :17

install hooks 2

  • postinstall fusengine-fuse-browser-254644b/package.json :52 node scripts/postinstall.mjs
  • prepublishOnly fusengine-fuse-browser-254644b/package.json :53 npm run build

declared dependencies 14

  • @modelcontextprotocol/sdk@^1.29.0
  • defuddle@^0.19.1
  • fast-png@^8.0.0
  • impit@^0.14.3
  • libphonenumber-js@^1.13.9
  • linkedom@^0.18.13
  • patchright@^1.61.1
  • pixelmatch@^7.2.0
  • playwright@^1.61.1
  • zod@^4.4.3
  • @biomejs/biome@^2.5.4
  • @types/node@^22.10.5
  • tsx@^4.23.1
  • typescript@^7.0.2