memoir-cli
npm
v3.16.0
Source verified
Published by camgitt — publish provenance cryptographically ties this package to that repository. That is proof of origin, not an official vendor package.
Private, portable AI memory: synced across every coding tool and machine, end-to-end encrypted, free. One memory for Claude Code, Cursor, Copilot, Gemini + more — MCP-native, zero-knowledge, open source.
The grade answers one question — how safe is this server for you to adopt — so it is computed in two auditable stages. Nothing below is an opinion or an LLM's guess; every line is a real term the deterministic engine applied, and the same input always yields the same number.
1. Threat score — 100 − 1.2 = 99. What the published surface and source actually contain:
| Points | What was found | Category |
|---|---|---|
| −1.2 | Hardcoded JSON Web Token in server code MTC-SRC-008 | exfiltration |
2. Client adoption risk — 99 − 6 = 93. Three small, subtract-only factors that reflect your risk in adopting it — a clean scan proves less on a powerful, unverified or barely-inspectable package, so the grade says so plainly:
| Points | Adoption-risk factor |
|---|---|
| −6 | capability blast radius (high) — client exposure if the model is manipulated |
Capability observations and info notes are shown under Findings but never scored.
Open any row's finding below for the file, line and evidence behind a deduction.
In the server's implementation (`src/work/store.js:232`): Reading private keys / cloud credentials, or serializing the whole environment, is a sensitive-data source that becomes exfiltration when combined with any egress. This is read from the code itself — not from the tool description — so a poisoned server cannot hide it behind honest-looking metadata.
Evidence: \..*)?|credentials[^/]*|id_rsa|id_ed25519)$|\.(pem|key)$/i.test(rel)) throw new Error('Private/configuration secrets and
Fix: Review this call path: confirm it never receives unsanitized tool input, constrain it, or remove it. Treat a server whose code reaches these sinks as high-capability regardless of what its tools claim.
Location: server src/work/store.js
In the server's implementation (`src/workspace/tracker.js:12`): Reading private keys / cloud credentials, or serializing the whole environment, is a sensitive-data source that becomes exfiltration when combined with any egress. This is read from the code itself — not from the tool description — so a poisoned server cannot hide it behind honest-looking metadata.
Evidence: ials[^/]*|secrets?[^/]*|id_rsa|id_ed25519)$|\.(pem|key|p12|pfx)$/i; // Explicit opt-in captures only the active project
Fix: Review this call path: confirm it never receives unsanitized tool input, constrain it, or remove it. Treat a server whose code reaches these sinks as high-capability regardless of what its tools claim.
Location: server src/workspace/tracker.js
In the server's implementation (`bin/memoir.js:4`): Spawning a shell/process is command-execution capability; with unsanitized tool input it is command injection / RCE. This is read from the code itself — not from the tool description — so a poisoned server cannot hide it behind honest-looking metadata.
Evidence: } = await import('node:child_process'); const { fileURLToPath } = await import('node:url'); const result = spawnSyn
Fix: Review this call path: confirm it never receives unsanitized tool input, constrain it, or remove it. Treat a server whose code reaches these sinks as high-capability regardless of what its tools claim.
Location: server bin/memoir.js
In the server's implementation (`evals/retrieval-performance.mjs:9`): Spawning a shell/process is command-execution capability; with unsanitized tool input it is command injection / RCE. This is read from the code itself — not from the tool description — so a poisoned server cannot hide it behind honest-looking metadata.
Evidence: ecFileSync } from 'node:child_process'; const args = process.argv.slice(2); const option = (key, fallback) => { const i
Fix: Review this call path: confirm it never receives unsanitized tool input, constrain it, or remove it. Treat a server whose code reaches these sinks as high-capability regardless of what its tools claim.
Location: server evals/retrieval-performance.mjs
In the server's implementation (`src/commands/autopush.js:15`): Spawning a shell/process is command-execution capability; with unsanitized tool input it is command injection / RCE. This is read from the code itself — not from the tool description — so a poisoned server cannot hide it behind honest-looking metadata.
Evidence: import { spawn } from 'child_process'; import { withSessionLock } from '../session/lock.js'; const home = os.homedir()
Fix: Review this call path: confirm it never receives unsanitized tool input, constrain it, or remove it. Treat a server whose code reaches these sinks as high-capability regardless of what its tools claim.
Location: server src/commands/autopush.js
In the server's implementation (`src/commands/diff.js:7`): Spawning a shell/process is command-execution capability; with unsanitized tool input it is command injection / RCE. This is read from the code itself — not from the tool description — so a poisoned server cannot hide it behind honest-looking metadata.
Evidence: c, execFileSync } from 'child_process'; import { getConfig } from '../config.js'; import { adapters } from '../adapters/
Fix: Review this call path: confirm it never receives unsanitized tool input, constrain it, or remove it. Treat a server whose code reaches these sinks as high-capability regardless of what its tools claim.
Location: server src/commands/diff.js
In the server's implementation (`src/commands/doctor.js:8`): Spawning a shell/process is command-execution capability; with unsanitized tool input it is command injection / RCE. This is read from the code itself — not from the tool description — so a poisoned server cannot hide it behind honest-looking metadata.
Evidence: c, execFileSync } from 'child_process'; import { getConfig } from '../config.js'; import { adapters } from '../adapters/
Fix: Review this call path: confirm it never receives unsanitized tool input, constrain it, or remove it. Treat a server whose code reaches these sinks as high-capability regardless of what its tools claim.
Location: server src/commands/doctor.js
In the server's implementation (`src/commands/init.js:5`): Spawning a shell/process is command-execution capability; with unsanitized tool input it is command injection / RCE. This is read from the code itself — not from the tool description — so a poisoned server cannot hide it behind honest-looking metadata.
Evidence: { execFileSync } from 'child_process'; import { saveConfig } from '../config.js'; import { pushCommand } from './push.j
Fix: Review this call path: confirm it never receives unsanitized tool input, constrain it, or remove it. Treat a server whose code reaches these sinks as high-capability regardless of what its tools claim.
Location: server src/commands/init.js
In the server's implementation (`src/commands/profile.js:4`): Spawning a shell/process is command-execution capability; with unsanitized tool input it is command injection / RCE. This is read from the code itself — not from the tool description — so a poisoned server cannot hide it behind honest-looking metadata.
Evidence: { execFileSync } from 'child_process'; import { getRawConfig, listProfiles, getActiveProfileName, createProfile, sw
Fix: Review this call path: confirm it never receives unsanitized tool input, constrain it, or remove it. Treat a server whose code reaches these sinks as high-capability regardless of what its tools claim.
Location: server src/commands/profile.js
In the server's implementation (`src/commands/projects.js:6`): Spawning a shell/process is command-execution capability; with unsanitized tool input it is command injection / RCE. This is read from the code itself — not from the tool description — so a poisoned server cannot hide it behind honest-looking metadata.
Evidence: { execFileSync } from 'child_process'; const home = os.homedir(); const TODOS_PATH = path.join(home, '.config', 'memoi
Fix: Review this call path: confirm it never receives unsanitized tool input, constrain it, or remove it. Treat a server whose code reaches these sinks as high-capability regardless of what its tools claim.
Location: server src/commands/projects.js
In the server's implementation (`src/commands/push.js:10`): Spawning a shell/process is command-execution capability; with unsanitized tool input it is command injection / RCE. This is read from the code itself — not from the tool description — so a poisoned server cannot hide it behind honest-looking metadata.
Evidence: { execFileSync } from 'child_process'; import { getConfig, autoSetup } from '../config.js'; import { extractMemories, a
Fix: Review this call path: confirm it never receives unsanitized tool input, constrain it, or remove it. Treat a server whose code reaches these sinks as high-capability regardless of what its tools claim.
Location: server src/commands/push.js
In the server's implementation (`src/commands/upgrade.js:27`): Spawning a shell/process is command-execution capability; with unsanitized tool input it is command injection / RCE. This is read from the code itself — not from the tool description — so a poisoned server cannot hide it behind honest-looking metadata.
Evidence: { execFile } = require('child_process'); const platform = process.platform; const [cmd, args] = platform === 'darwin
Fix: Review this call path: confirm it never receives unsanitized tool input, constrain it, or remove it. Treat a server whose code reaches these sinks as high-capability regardless of what its tools claim.
Location: server src/commands/upgrade.js
In the server's implementation (`bin/memoir.js:62`): A hardcoded outbound call to a fixed external host inside server code is a classic exfiltration/telemetry channel — especially paired with reads of local data. This is read from the code itself — not from the tool description — so a poisoned server cannot hide it behind honest-looking metadata.
Evidence: ; const res = await fetch('https://registry.npmjs.org/memoir-cli/latest', { signal: controller.signal }); clearT
Fix: Review this call path: confirm it never receives unsanitized tool input, constrain it, or remove it. Treat a server whose code reaches these sinks as high-capability regardless of what its tools claim.
Location: server bin/memoir.js
In the server's implementation (`src/commands/consolidate.js:183`): A hardcoded outbound call to a fixed external host inside server code is a classic exfiltration/telemetry channel — especially paired with reads of local data. This is read from the code itself — not from the tool description — so a poisoned server cannot hide it behind honest-looking metadata.
Evidence: const response = await fetch(`https://generativelanguage.googleapis.com/v1beta/models/${model}:generateContent?key=${ap
Fix: Review this call path: confirm it never receives unsanitized tool input, constrain it, or remove it. Treat a server whose code reaches these sinks as high-capability regardless of what its tools claim.
Location: server src/commands/consolidate.js
In the server's implementation (`src/commands/snapshot.js:250`): A hardcoded outbound call to a fixed external host inside server code is a classic exfiltration/telemetry channel — especially paired with reads of local data. This is read from the code itself — not from the tool description — so a poisoned server cannot hide it behind honest-looking metadata.
Evidence: const response = await fetch(`https://generativelanguage.googleapis.com/v1beta/models/gemini-2.0-flash:generateContent?
Fix: Review this call path: confirm it never receives unsanitized tool input, constrain it, or remove it. Treat a server whose code reaches these sinks as high-capability regardless of what its tools claim.
Location: server src/commands/snapshot.js
A hardcoded JSON Web Token (a public-by-design (anon/publishable) key — RLS, not secrecy, protects it) appears in `src/cloud/constants.js:2`. Verify whether this is a real credential; if so, remove and rotate it.
Evidence: JSON Web Token: eyJh…(redacted)
Fix: Remove the secret, rotate it, and load credentials from the environment or a secret store.
Location: server src/cloud/constants.js
Each tool and what it can reach — statically extracted from the published source.
memoir_add_nextno sensitive capabilitymemoir_askno sensitive capabilitymemoir_complete_nextno sensitive capabilitymemoir_consolidateno sensitive capabilitymemoir_forgetno sensitive capabilitymemoir_listno sensitive capabilitymemoir_noteno sensitive capabilitymemoir_profilesno sensitive capabilitymemoir_readno sensitive capabilitymemoir_recallno sensitive capabilitymemoir_rememberno sensitive capabilitymemoir_resumeno sensitive capabilitymemoir_sessionno sensitive capabilitymemoir_set_goalno sensitive capabilitymemoir_statusno sensitive capabilitymemoir_whyno sensitive capabilitymemoir_work_checkno sensitive capabilitymemoir_work_recordno sensitive capabilitymemoir_work_resumeno sensitive capabilitymemoir_work_retractno sensitive capabilityScan history per published version. The engine is deterministic — the same version always yields the same score, so a changed score means the package itself changed.
| Version | Score | Findings | Engine | Scanned |
|---|---|---|---|---|
v3.16.0 latest |
A 93/100 | 16 | 1.13.0 | 2026-09-07 |
v3.12.0 |
C 79/100 | 19 | 1.13.0 | 2026-09-06 |
v3.11.3 |
C 79/100 | 19 | 1.12.1 | 2026-08-18 |
v3.10.1 |
C 79/100 | 19 | 1.12.1 | 2026-08-07 |
v3.10.0 |
C 79/100 | 19 | 1.12.1 | 2026-08-05 |
Show this server's live Trust Score in your README, docs or website. The badge is served straight from the registry and updates automatically after every rescan — no API key needed. It links back to this page, so anyone who sees the grade can also read the findings behind it instead of taking a number on faith.
The score above is reproducible: the same package version always yields the same result. Run it locally or over the free API — no account, no LLM, fully deterministic.
npx mcptrustchecker scan memoir-cli --online
FDA device & vehicle recall risk for AI agents: recall history, MAUDE trend, risk score.
Open-source MCP server exposing Agent402.Tools' catalog — 500+ strong: 400+ self-hostable tools + 100 multi-tool skill packs (security-audit, trend-analysis, structured-scrape, decode-blob, forecasting-bake-off) for AI agents — browser, web search & answe
Zero-dependency MCP server that gives AI agents a self-updating project memory in AGENTS.md. Returns merge instructions instead of mutating state, so every change is a reviewable diff.
MCP Apps UI resources and server helpers for n8n
MCP server providing comprehensive access to BookStack knowledge management system
MCP server for tracking achievements with STAR methodology