MCP, MCP server
MemWhale
MemWhale, an MCP server listed in the PlugVet directory.
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 d141a4cec8e5.
SECRETS_PATH_CREDENTIAL
Why this grade
- SECRETS_PATH_CREDENTIAL Medium
Mentions a credential store path (~/.ssh, id_rsa, .npmrc, .aws/credentials, credentials.json, .netrc).
linux/completions/mw.bash, line 122
# ssh hosts from ~/.ssh/config
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
benchmarks/terminal_bench/memorywhale_agent.py, line 171
shutil.rmtree(staging, ignore_errors=True)
scripts/smoke-release.py, line 67
result = subprocess.run(
scripts/smoke-release.py, line 127
server = subprocess.Popen(
Show more
scripts/test-codewhale-plugin.py, line 39
subprocess.run(["sh", "-n", str(script)], check=True)
scripts/test-codewhale-plugin.py, line 50
result = subprocess.run(["sh", str(script)], cwd=BUNDLE, env=trial,
scripts/test-codewhale-plugin.py, line 57
subprocess.run([str(bins / "mw"), "remember", marker], env=env, cwd=root,
scripts/test-codewhale-plugin.py, line 67
result = subprocess.run(["sh", str(script)], cwd=BUNDLE, env=env,
scripts/verify-waku-mcp.py, line 135
revision = subprocess.check_output(['git', '-C', str(a.waku_source), 'rev-parse', 'HEAD'], text=True).strip()
scripts/verify-waku-mcp.py, line 137
require(not subprocess.check_output(['git', '-C', str(a.waku_source), 'status', '--porcelain'], text=True).strip(), 'Waku source must remain unmodified')
Install and update
Note
The docs document an installer that pipes a download into a shell.
INSTALL_DOCUMENTED_INSTALLER
install.sh, line 4
# curl -fsSL https://raw.githubusercontent.com/wuisabel-gif/MemWhale/main/install.sh | sh
docs/blog/agent-memory-of-what-failed.md, line 119
curl -fsSL https://raw.githubusercontent.com/wuisabel-gif/MemWhale/main/install.sh | sh
docs/guides/getting-started.md, line 6
curl -fsSL https://raw.githubusercontent.com/wuisabel-gif/MemWhale/main/install.sh | sh
Show more
docs/project/DEBUG.md, line 133
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
index.html, line 1247
<pre><span class="prompt">$</span> curl -fsSL https://raw.githubusercontent.com/wuisabel-gif/MemWhale/main/install.sh | sh
Network
Concern
can reach a host that is not written as a fixed address. can reach api.github.com. The description does not name that host.
NETWORK_NO_FIXED_HOST NETWORK_UNNAMED_HOST
install.sh, line 67
curl -fsSL -H "Authorization: Bearer $GITHUB_TOKEN" \
install.sh, line 71
curl -fsSL "https://api.github.com/repos/$REPO/releases/latest" \
install.sh, line 94
curl -fSL "$url" -o "$tmp/$asset"
Show more
install.sh, line 100
if curl -fsSL "$url.sha256" -o "$tmp/$asset.sha256" 2>/dev/null; then
benchmarks/terminal_bench/memorywhale_agent.py, line 94
f'curl -fsSLO "{RELEASES}/v{v}/$n.tar.gz" -O "{RELEASES}/v{v}/$n.tar.gz.sha256"; '
crates/mw-cli/src/case_files.rs, line 434
assert!(out.contains("Attempt command #5 (exit 1): curl token=[REDACTED]"));
Secrets
Concern
reads a credential or environment file.
SECRETS_ENV_READ SECRETS_PATH_CREDENTIAL SECRETS_PATH_DOTENV
scripts/sync-readme-locales.mjs, line 426
apiKey: options.apiKey ?? process.env.README_TRANSLATION_API_KEY,
linux/completions/mw.bash, line 122
# ssh hosts from ~/.ssh/config
linux/completions/mw.bash, line 124
hosts="$(sed -n 's/^[Hh]ost[[:space:]]\{1,\}\(.*\)/\1/p' ~/.ssh/config 2>/dev/null | tr ' ' '\n' | grep -v '[*?]')"
Show more
crates/mw-cli/src/lib.rs, line 3853
password: hunter2secret in .env, tok\x1ben=split4control";
scripts/verify-waku-mcp.py, line 47
# have been sealed. A task-owned empty .env stops find_dotenv traversal.
scripts/verify-waku-mcp.py, line 148
(root / 'workspace/.env').write_text('# Empty synthetic traversal boundary. No secrets.\n')
crates/mw-cli/src/bin/mw.rs, line 335
.env("MW_RECORDING", "1")
crates/mw-cli/src/bin/mw.rs, line 338
.env("MW_TRANSCRIPT", &transcript_str)
crates/mw-cli/src/bin/mw.rs, line 601
.env("MW_RECORDING", "1")
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
crates/mw-cli/src/bin/mw.rs, line 1
// mw: automatic whole-session terminal recorder for MemoryWhale.
src/main.tsx, line 1
import React from "react";
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 d141a4cec8e5. can delete files. can reach a host that is not written as a fixed address. can reach api.github.com. 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: d141a4cec8e5bf8603a92ba6951896323dd9b740
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.