MCP, MCP server
anamnesis
anamnesis, an MCP server listed in the PlugVet directory.
Compatibility: Not stated.
Grade C
One Medium finding. Read the report before installing.
Not a guarantee. A hygiene check of the source at the commit shown, not a security audit.
SECRETS_PATH_CREDENTIAL
Why this grade
- SECRETS_PATH_CREDENTIAL Medium
Mentions a credential store path (~/.ssh, id_rsa, .npmrc, .aws/credentials, credentials.json, .netrc).
bench/cross-machine-tokens/measure_tokens.py, line 138
src = Path.home() / ".claude" / ".credentials.json"
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
bench/cross-machine-tokens/measure_tokens.py, line 56
shutil.rmtree(snap)
bench/cross-machine-tokens/measure_tokens.py, line 63
shutil.rmtree(project_dir, ignore_errors=True)
bench/cross-machine-tokens/measure_tokens.py, line 152
shutil.rmtree(cfg, ignore_errors=True)
Show more
bench/cross-machine-tokens/measure_tokens.py, line 167
proc = subprocess.run(
bench/cross-machine-tokens/measure_tokens.py, line 212
shutil.rmtree(snapshot, ignore_errors=True)
bench/cross-machine-tokens/demo/drive_session.py, line 52
proc = subprocess.Popen(
bench/cross-machine-tokens/demo/render_demo.py, line 118
ff = subprocess.Popen(
bench/cross-machine-tokens/demo/setup_demo.py, line 45
shutil.rmtree(PROJECT, ignore_errors=True)
bench/cross-machine-tokens/demo/setup_demo.py, line 49
shutil.rmtree(STORE, ignore_errors=True)
bench/cross-machine-tokens/demo/setup_demo.py, line 61
shutil.rmtree(CFG, ignore_errors=True)
bench/cross-machine-tokens/demo/setup_demo.py, line 96
subprocess.run(
dashboard/src/lib/config.test.ts, line 21
fs.rmSync(home, { recursive: true, force: true });
server/src/anamnesis/cli.py, line 888
probe = subprocess.run([node, "--version"], capture_output=True, text=True)
server/src/anamnesis/cli.py, line 895
return subprocess.call(build_dashboard_command(args))
server/src/anamnesis/inject.py, line 69
remote = subprocess.run(
server/src/anamnesis/inject.py, line 76
root = subprocess.run(
Install and update
Pass
No install-time script found, and dependencies are pinned or absent.
Network
Concern
can reach a host that is not written as a fixed address.
NETWORK_NO_FIXED_HOST
dashboard/e2e/packaged-dashboard.test.ts, line 60
const res = await fetch(`http://127.0.0.1:${PORT}/api/overview`);
dashboard/e2e/packaged-dashboard.test.ts, line 67
const res = await fetch(`http://127.0.0.1:${PORT}/`);
dashboard/e2e/standalone-server.test.ts, line 43
const res = await fetch(`http://127.0.0.1:${PORT}/api/overview`);
Show more
dashboard/e2e/standalone-server.test.ts, line 51
const res = await fetch(`http://127.0.0.1:${PORT}/`);
dashboard/e2e/standalone-server.test.ts, line 57
const res = await fetch(`http://127.0.0.1:${PORT}/notes/01J0SEEDA00000000000000000`);
dashboard/e2e/standalone-server.test.ts, line 65
const res = await fetch(`http://127.0.0.1:${PORT}/review`);
dashboard/public/sw.js, line 27
event.respondWith(fetch(event.request).catch(() => caches.match(OFFLINE)));
dashboard/src/app/settings/settings-form.tsx, line 95
const res = await fetch("/api/settings", {
dashboard/src/app/settings/settings-form.tsx, line 122
const res = await fetch("/api/settings/test", { method: "POST" });
dashboard/src/components/cli-preview-button.tsx, line 43
const res = await fetch(`${endpoint}${qs ? `?${qs}` : ""}`, { method: "POST" });
dashboard/src/components/command-menu.tsx, line 41
const res = await fetch(`/api/notes?q=${encodeURIComponent(q)}&limit=12`, {
dashboard/src/components/history-explorer.tsx, line 24
const res = await fetch(`/api/commits/${selected}`, { cache: "no-store" });
dashboard/src/components/machines-view.tsx, line 28
const res = await fetch("/api/fleet", { cache: "no-store" });
dashboard/src/components/machines-view.tsx, line 43
const res = await fetch("/api/sync", { method: "POST" });
Secrets
Concern
reads a credential or environment file.
SECRETS_ENV_READ SECRETS_PATH_CREDENTIAL SECRETS_PATH_DOTENV
bench/cross-machine-tokens/measure_tokens.py, line 138
src = Path.home() / ".claude" / ".credentials.json"
bench/cross-machine-tokens/measure_tokens.py, line 141
"no ~/.claude/.credentials.json found. Run `claude` and log in first, "
bench/cross-machine-tokens/measure_tokens.py, line 148
shutil.copy2(src, Path(cfg) / ".credentials.json")
Show more
bench/cross-machine-tokens/project_files.py, line 72
".env.example": (
bench/cross-machine-tokens/project_files.py, line 73
"# Copy to .env for local development.\n"
bench/cross-machine-tokens/demo/setup_demo.py, line 57
creds = Path.home() / ".claude" / ".credentials.json"
bench/cross-machine-tokens/demo/setup_demo.py, line 59
print("error: no ~/.claude/.credentials.json (log in to claude first)", file=sys.stderr)
bench/cross-machine-tokens/demo/setup_demo.py, line 64
shutil.copy2(creds, CFG / ".credentials.json")
server/src/anamnesis/config.py, line 130
os.environ.get("ANAMNESIS_REFLECTION_API_KEY")
server/src/anamnesis/config.py, line 131
or os.environ.get("DEEPSEEK_API_KEY")
server/src/anamnesis/config.py, line 132
or os.environ.get("OPENAI_API_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.
OBFUSCATION_FILE_OVER_READ_CAP
dashboard/package-lock.json, line 1
{
server/uv.lock, line 1
version = 1
site/pnpm-lock.yaml, line 1
lockfileVersion: '9.0'
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 65efe411fcc7. can delete files. can reach a host that is not written as a fixed address. reads a credential or environment file. a file was over the read cap and was not fully read.
Date and source
Date checked:
github.com
Commit graded: 65efe411fcc7c1fb6432a10ffd09f9b6678e0af9
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.