MCP, MCP server
byob
byob, an MCP server listed in the PlugVet directory.
Compatibility: Not stated.
Grade D
Two or more Medium findings, or a High finding. Only try it in a sandbox.
Not a guarantee. A hygiene check of the source at the commit shown, not a security audit.
Rescanned at commit f674a76beac7, unchanged since the check below.
INSTALL_REMOTE_SCRIPT OBFUSCATION_ENCODED_BLOB
Why this grade
- INSTALL_REMOTE_SCRIPT Medium
Fetches a script from the network and runs it (a pipe to a shell, or an install hook with a URL).
install.sh, line 6
# curl -fsSL https://raw.githubusercontent.com/wxtsky/byob/main/install.sh | bash - OBFUSCATION_ENCODED_BLOB Medium
Contains a long base64 shaped string in a file that should be readable.
plugins/byob/servers/byob-mcp.mjs, line 1
#!/usr/bin/env -S npx tsx
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.
If you think this grade is wrong, email [email protected] with the entry link and your evidence. We aim to acknowledge within two working days and decide within seven. If we confirm an error, we aim to correct it within 24 hours of confirming it. These are aims, not guarantees.
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
e2e/harness.ts, line 170
fs.rmSync(PROFILE, { recursive: true, force: true });
e2e/harness.ts, line 171
fs.rmSync(path.join(E2E_HOME, 'bridges.json'), { force: true });
packages/bridge/src/bridge-registry.ts, line 38
fs.unlinkSync(REGISTRY_PATH);
Show more
packages/bridge/src/ipc-server.ts, line 48
fs.unlinkSync(sock);
packages/bridge/src/main.ts, line 290
fs.unlinkSync(socketPathFor(deviceId));
packages/bridge/src/uninstall.ts, line 41
fs.unlinkSync(file);
packages/bridge/src/uninstall.ts, line 78
fs.unlinkSync(manifestFile);
packages/bridge/src/uninstall.ts, line 90
fs.unlinkSync(LAUNCHER_PATH);
Install and update
Serious
install fetches a script from the network. README documents an installer that pipes a download into a shell. The docs document an installer that pipes a download into a shell.
INSTALL_REMOTE_SCRIPT INSTALL_DOCUMENTED_INSTALLER
README.md, line 44
curl -fsSL https://raw.githubusercontent.com/wxtsky/byob/main/install.sh | bash
README.zh-CN.md, line 44
curl -fsSL https://raw.githubusercontent.com/wxtsky/byob/main/install.sh | bash
install.sh, line 6
# curl -fsSL https://raw.githubusercontent.com/wxtsky/byob/main/install.sh | bash
Show more
install.sh, line 109
die "bun is required. Install manually: curl -fsSL https://bun.sh/install | bash"
install.sh, line 125
curl -fsSL https://bun.sh/install | bash
install.sh, line 135
die "bun installation failed. Install manually: curl -fsSL https://bun.sh/install | bash"
Network
Concern
can reach a host that is not written as a fixed address. can reach bun.sh. The description does not name that host.
NETWORK_NO_FIXED_HOST NETWORK_UNNAMED_HOST
install.sh, line 7
# or: bash <(curl -fsSL https://raw.githubusercontent.com/wxtsky/byob/main/install.sh)
install.sh, line 122
if ! command -v curl &>/dev/null; then
install.sh, line 123
die "curl is required to install bun. Install curl or install bun manually: https://bun.sh"
Show more
e2e/harness.ts, line 221
const req = http.request({ socketPath: bridge.socket, path: '/policy', method: 'POST', headers: { 'Content-Type': 'application/json' } }, (res) => {
packages/bridge/src/policy.ts, line 17
const req = http.request(
packages/extension/lib/handlers/download-images.ts, line 196
// otherwise block fetch() to 127.0.0.1 (Apple etc. lock connect-src
packages/extension/lib/handlers/download-images.ts, line 211
const resp = await fetch(item.sourceUrl, { credentials: '
packages/extension/lib/handlers/download-images.ts, line 242
const r = await fetch(uploadUrl, {
docs/superpowers/plans/2026-04-25-iframe-support-implementation.md, line 1800
Replace every `session.evaluate(...)` call **inside the try-block of the keepAwake try/finally** with `evaluateInResolvedFrame(session, frame, ...)`. The `fetch(item.sourceUrl, ...
Secrets
Concern
reads a credential or environment file.
SECRETS_PATH_DOTENV
.gitignore, line 7
.DS_Store
.gitignore, line 8
.env
docs/superpowers/plans/2026-04-25-byob-implementation.md, line 219
.DS_Store
Show more
docs/superpowers/plans/2026-04-25-byob-implementation.md, line 220
.env
Agent instructions
Pass
No instruction to ignore earlier instructions or to hide a step.
Obfuscation
Concern
contains an encoded blob in a file that should be readable.
OBFUSCATION_ENCODED_BLOB
plugins/byob/servers/byob-mcp.mjs, line 1
#!/usr/bin/env -S npx tsx
plugins/byob/servers/byob-mcp.mjs, line 9
deps: ${B}}`};var sm={keyword:"dependencies",type:"object",schemaType:"object",error:X4.error,code(A){let[Q,B]=tm(A);L4(A,Q),V4(A,B)}};function tm({schema:A}){let Q={},B={};for(let
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 f674a76beac7. can delete files. install fetches a script from the network. README documents an installer that pipes a download into a shell. The docs document an installer that pipes a download into a shell. can reach a host that is not written as a fixed address. can reach bun.sh. The description does not name that host. reads a credential or environment file. contains an encoded blob in a file that should be readable.
Date and source
Date checked:
github.com
Commit graded: f674a76beac7d63749eeafc2eb10d1cd7295f734
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.