MCP, MCP server
browserpaw
BrowserPaw Control your everyday Chrome browser from AI agents, without losing logins or focus. Project Map
Compatibility: Not stated.
Grade C
One Medium finding. Read the findings before installing.
Not a guarantee. A hygiene check of the source at the commit shown, not a security audit.
Rescanned at commit 8740332039a6, unchanged since the check below.
INSTALL_LIFECYCLE_HOOK
Why this grade
- INSTALL_LIFECYCLE_HOOK Medium
A package install hook (preinstall, install, postinstall or prepare) runs a script.
package.json, line 42
prepare
Any High, or two or more Medium findings, give D. One Medium gives C. Low findings or a security Note give B. Each code names a finding behind the letter.
Grades are a hygiene check of the source at the commit shown, on the date checked, not a security audit or a guarantee. The free directory grades are automated. Before release, a PlugVet engineer reviews every paid report and any grade we hold back, including all F grades, against the source code and the evidence we quote.
What was checked
Plain notes from the hygiene checks.
Permissions
Concern
can delete files.
PERMISSION_DELETE_FILES
app/native-server/src/file-handler-unique.test.ts, line 82
fs.unlinkSync(siblingPath);
app/native-server/src/file-handler-unique.test.ts, line 101
fs.rmSync(activeUuidDir, { recursive: true, force: true });
app/native-server/src/file-handler-unique.test.ts, line 102
fs.rmSync(nonUuidDir, { recursive: true, force: true });
Show more
app/native-server/src/file-handler-unique.test.ts, line 125
fs.rmSync(tmpRoot, { recursive: true, force: true });
app/native-server/src/file-handler.ts, line 888
fs.rmSync(entryPath, { recursive: true, force: true });
app/native-server/src/file-handler.ts, line 890
fs.unlinkSync(entryPath);
app/native-server/src/mcp/register-tools.test.ts, line 299
fs.rmSync(tmpRoot, { recursive: true, force: true });
app/native-server/src/scripts/build.test.ts, line 33
fs.rmSync(tmpDir, { recursive: true, force: true });
docs/archive/handoffs/HANDOFF-refactor-phase.zh-CN.md, line 215
- Windows 下执行 `.cmd` 或 `.bat` 批处理文件时,Node.js `child_process.spawn` 必须显式传入 `{ shell: true }`,并严谨转义命令参数,避免触发 CVE-2024-27980 安全异常。
Install and update
Concern
runs a script at install time.
INSTALL_LIFECYCLE_HOOK
package.json, line 42
prepare
Network
Concern
can reach a host that is not written as a fixed address. can reach 127.. The description does not name that host.
NETWORK_NO_FIXED_HOST NETWORK_UNNAMED_HOST
app/chrome-extension/entrypoints/background/native-host.ts, line 41
const res = await fetch(`http://127.0.0.1:${port}/ping`, { signal: controller.signal });
app/chrome-extension/entrypoints/background/tools/browser/doctor.ts, line 47
const res = await fetch(`http://127.0.0.1:${serverPort}/ping`, {
app/chrome-extension/entrypoints/background/tools/browser/insert-media.ts, line 59
const resp = await fetch(fetchTargetUrl);
Show more
app/chrome-extension/entrypoints/background/tools/browser/insert-media.ts, line 101
const resp = await fetch(mediaUrl.toString());
app/chrome-extension/entrypoints/background/tools/browser/javascript.ts, line 719
fetch: (url, opts) => window.fetch(url, opts),
app/chrome-extension/entrypoints/popup/jev-api.ts, line 81
return fetch(url, {
app/chrome-extension/inject-scripts/network-helper.js, line 65
const resp = await fetch(url);
app/chrome-extension/inject-scripts/network-helper.js, line 87
const resp = await fetch(String(file.fileUrl));
app/chrome-extension/inject-scripts/network-helper.js, line 128
const response = await fetch(url, { ...options, signal });
app/chrome-extension/utils/image-utils.ts, line 18
const response = await fetch(dataUrl);
app/native-server/src/server/jev-model-manager.ts, line 157
fetch('http://127.0.0.1:8009/touch', { method: 'POST' }).catch(() => {});
app/native-server/src/server/jev-model-manager.ts, line 564
const res = await fetch(`http://127.0.0.1:${port}/health`, {
app/native-server/src/server/jev-model-manager.ts, line 893
await fetch('http://127.0.0.1:8009/unload', {
plugins/browserpaw-claude/skills/browserpaw/config/doctor.mjs, line 409
const localRes = await fetch('http://127.0.0.1:8009/ping', { signal: AbortSignal.timeout(800) });
plugins/browserpaw-dsh/skills/browserpaw/config/doctor.mjs, line 409
const localRes = await fetch('http://127.0.0.1:8009/ping', { signal: AbortSignal.timeout(800) });
plugins/browserpaw/mcp-skills/browserpaw/config/doctor.mjs, line 409
const localRes = await fetch('http://127.0.0.1:8009/ping', { signal: AbortSignal.timeout(800) });
Secrets
Concern
reads a credential or environment file.
SECRETS_ENV_READ SECRETS_PATH_DOTENV
app/chrome-extension/wxt.config.ts, line 11
config({ path: resolve(process.cwd(), '.env') });
app/chrome-extension/wxt.config.ts, line 12
config({ path: resolve(process.cwd(), '.env.local') });
app/chrome-extension/wxt.config.ts, line 14
const CHROME_EXTENSION_KEY = process.env.CHROME_EXTENSION_KEY;
Show more
app/native-server/src/file-handler.ts, line 222
/([/\\])(\.ssh|\.aws|\.gnupg|\.config|\.chrome-mcp|\.browserpaw|\.env)(?:[/\\]|$|\.)/i;
app/native-server/src/jev/fast-decision-engine.test.ts, line 9
delete process.env.TYPESAFE_API_KEY;
app/native-server/src/jev/fast-decision-engine.test.ts, line 68
delete process.env.TYPESAFE_API_KEY;
app/native-server/src/jev/fast-decision-engine.test.ts, line 85
delete process.env.TYPESAFE_API_KEY;
app/native-server/src/jev/fast-decision-engine.test.ts, line 97
delete process.env.TYPESAFE_API_KEY;
app/native-server/src/jev/fast-decision-engine.test.ts, line 113
delete process.env.TYPESAFE_API_KEY;
app/native-server/src/jev/fast-decision-engine.test.ts, line 153
delete process.env.TYPESAFE_API_KEY;
app/native-server/src/jev/fast-decision-engine.test.ts, line 192
delete process.env.TYPESAFE_API_KEY;
packages/shared/src/tools.ts, line 9
if (typeof process !== 'undefined' && process?.env) {
.gitignore, line 30
# Environment variables
.gitignore, line 31
.env
.gitignore, line 32
.env.local
app/chrome-extension/.env.example, line 2
# Copy this file to .env and replace with your actual private key
Agent instructions
Pass
No instruction to ignore earlier instructions or to hide a step.
Obfuscation
Note
a file was over the read cap and was not fully read. the file cap was reached before every file was read.
OBFUSCATION_FILE_OVER_READ_CAP OBFUSCATION_FILE_CAP_REACHED
pnpm-lock.yaml, line 1
---
app/chrome-extension/entrypoints/background/tools/browser/dom-indexer.ts, line 1
import {
plugins/browserpaw/__init__.py, line 1
"""BrowserPaw optional Hermes tools, delegated through the public MCP client."""
Licence
Pass
A licence file is present (LICENSE).
Maintainer activity
Pass
The latest commit is within the last 365 days.
Note
Hygiene check of commit 8740332039a6. can delete files. runs a script at install time. can reach a host that is not written as a fixed address. can reach 127.. The description does not name that host. reads a credential or environment file. a file was over the read cap and was not fully read. the file cap was reached before every file was read.
Date and source
Date checked:
github.com
Commit graded: 8740332039a6f2ee3afe88e51339d02ed4ceb055
This link goes to the original host. PlugVet does not host or check what you download from there, and installing it is your own decision and risk.