Atlas / MCP servers / stifler7 / memex

memexBLOCK

mcp/stifler7/memex

Persistent memory for AI coding agents via MCP: a bitemporal knowledge graph of your codebase, served to Claude Code, Cursor, Gemini CLI, and any MCP client. Tree-sitter and Gemini Flash into Neo4j via Graphiti. 14 MCP tools, hierarchical clusters, three-regime confidence decay.

Verdict
BLOCK
Grade
D
Trust score
69 /100
Exposed tools
16 13r · 3w · 0d
Transport
stdio · streamable-http
License
MIT
Stars
12
01

Overview

From the repository's own README, as read at the audited commit. Badges and raw HTML are left out.

Keeps your AI coding agents' engineering context current as the code changes. memex builds a bitemporal knowledge graph of your repository (modules, symbols, decisions, problems, evidence, and code evolution). In v1 it also hooks into Claude Code and Codex: each session starts with the right context, each edit is checked against the current code, and the agent is told exactly what changed.

[memex.stifler.in](https://memex.stifler.in)

A daemon, hook service and MCP server that turn commits and file changes into structured engineering knowledge and deliver it to agents with freshness and provenance preserved, without making memex a source of personal memory or raw session state.

[](https://memex.stifler.in) [](https://pypi.org/project/memex-mcp/) [](https://pypistats.org/packages/memex-mcp) [](https://www.npmjs.com/package/stifler-memex-mcp) [](https://www.npmjs.com/package/stifler-memex-mcp) [](https://github.com/STiFLeR7/claude-plugins) [](https://glama.ai/mcp/servers/STiFLeR7/memex) [](https://github.com/STiFLeR7/memex/stargazers) [](https://github.com/STiFLeR7/memex/actions/workflows/ci.yml) [](

Read from source at commit 5869b5c83529OBSERVED · 2026-10-10
02

Connect

Built from this server's own package name, version and transport as found in its source — not copied from anyone's documentation, so it cannot drift against a page we do not control. Replace the environment placeholders with a token scoped to the least it needs.

claude-code (npm)
claude mcp add stifler-memex-mcp --env NEO4J_PASSWORD=${NEO4J_PASSWORD} --env GEMINI_API_KEY=${GEMINI_API_KEY} --env NEO4J_PASSWORD=${NEO4J_PASSWORD} --env GEMINI_API_KEY=${GEMINI_API_KEY} -- npx -y [email protected] serve .
claude-code (pypi)
claude mcp add memex-mcp --env NEO4J_PASSWORD=${NEO4J_PASSWORD} --env GEMINI_API_KEY=${GEMINI_API_KEY} --env NEO4J_PASSWORD=${NEO4J_PASSWORD} --env GEMINI_API_KEY=${GEMINI_API_KEY} -- uvx memex-mcp==1.0.2 serve .
03

Exposed tools (16)

13 read · 3 write · 0 destructive.

ToolRiskDescription
echo_principalreadEchoes the ambient principal_ctx principal_id
explain_changewriteCross-references a git commit
get_engineering_contextreadReturns a bounded, provenance-aware engineering ContextPacket projection using the shared memex selector.
get_open_problemsreadReturns currently open technical problems and TODOs sorted by severity as a Markdown string.
get_project_contextreadReturns a compressed briefing of the project as a Markdown string: active modules, recent decisions, and open problems.
get_recent_decisionsreadReturns architectural and technical decisions from the past N days as a Markdown string.
get_stale_contextreadReturns relationships that have decayed in confidence and may be outdated as a Markdown string.
get_symbol_contextreadReturns detailed information about a specific function or class as a Markdown string including callers/callees.
guard_readwriteRead a worktree file and the sha256 a guarded write must expect.
guard_writewriteApply file changes as one fenced commit, or refuse and change nothing.
invalidate_edgereadExplicitly invalidates a graph edge when it is discovered to be stale or incorrect. Returns a status string.
predict_impactreadReturns a ranked Markdown list of modules likely affected by changes to a file, based on graph coupling (calls + imports + decision links). No LLM call.
record_decisionreadCreates a Decision node in the graph. Call this when making or discovering architectural choices. Returns a status string. Phase 9: pass corroborates=<id> to reinforce, supersedes=<id> to replace, or force=true to bypass duplicate detection.
record_problemreadCreates a Problem node in the graph. Call this when discovering bugs or technical debt. Returns a status string.
resolve_problemreadMarks a Problem as closed and records the resolution. Returns a status string.
search_contextreadSemantic + keyword + graph traversal search across all node types. Use for broad discovery. Returns a Markdown string.
04

Trust audit

BLOCKgrade D · trust 69/100 Do not install this without reading the findings. The audit found something that could harm you or your machine.

LayerWhat it checksResult
L0Provenance & inventoryWARN
L1Static analysis of the codeFAIL
L2Instruction surface (what it tells the agent)PASS
L3Class-specific surfacePASS
L4Behavioural (sandbox)SKIPPED

What the source does

Filesystem
declared (3 observation(s))
Network
declared (6 observation(s))
Shell
declared (1 observation(s))
Dependencies
not all pinned
Secrets in source
found

Findings (25)

HIGHObfuscation / stealth · obf.rtl_override · CWE-506, CWE-94
memex/graph/schema.py:51
return str(v).replace('\x00', '').replace('', '')
HIGHObfuscation / stealth · obf.rtl_override · CWE-506, CWE-94
memex/mcp_server/tools_write.py:161
return val.replace('\x00', '').replace('', '')[:2000]
MEDIUMInventory / provenance · inv.binary · CWE-1104
.coverage
.coverage
Why it matters. a compiled or binary member cannot be reviewed from source
Fix. ship source, or explain the binary in the README
MEDIUMNetwork egress · net.raw_ip · CWE-200, CWE-319
memex/watcher/handlers.py:63
f"http://127.0.0.1:{port}/notify",
MEDIUMHard-coded secrets · secret.github · CWE-798, CWE-321
tests/test_controlled_ingestion.py:48
_candidate(summary="Use token=ghp_abcdefghijklmnopqrstuvwxyz1234567890"),
MEDIUMHard-coded secrets · secret.github · CWE-798, CWE-321
tests/test_controlled_ingestion.py:62
"ref": "token=ghp_abcdefghijklmnopqrstuvwxyz1234567890",
LOWInventory / provenance · inv.hidden_file · CWE-1104
.coverage
.coverage
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWInventory / provenance · inv.hidden_file · CWE-1104
memex-vscode/.vscodeignore
.vscodeignore
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWInsecure crypto · crypto.weak_hash · CWE-327, CWE-338
memex/mcp_server/tools_write.py:123
repo_hash = hashlib.md5(repo_path.encode()).hexdigest()[:8]
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
tests/test_explain_change.py:119
"../../etc/passwd",
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
tests/test_http_transport.py:520
"/report?repo=../../../../etc",
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
tests/test_memory_tool_safety.py:55
validate_memory_path("/memories/scratch/../../etc/passwd")
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
tests/test_http_transport.py:583
assert called_req.full_url == "http://127.0.0.1:8899/notify"
LOWObfuscation / stealth · obf.decode_call · CWE-506, CWE-94
tests/phase5_trial_hooks.py:34
return json.loads(zlib.decompress(base64.b64decode(text)))
LOWSupply chain · supply.unpinned · CWE-829, CWE-1357
memex-site/package.json
@types/node, @types/react, @types/react-dom, eslint, typescript, wrangler
Why it matters. 6 dependency range(s) float
Fix. pin exact versions or ship a lockfile
LOWSupply chain · supply.unpinned · CWE-829, CWE-1357
memex-vscode/package.json
@types/vscode, @types/node, typescript, esbuild
Why it matters. 4 dependency range(s) float
Fix. pin exact versions or ship a lockfile
LOWPrompt injection · prompt.transfer_instruction · CWE-94, CWE-1427
docs/v1/06_HOST_INTEGRATIONS.md:74
Untrusted hooks do not run in app-server threads. memex never writes hook trust: a user trusts its hooks through Codex's own `/hooks` review. The two hosts' state is namespaced, so identical native se
Why it matters. an instruction to move sensitive data to an outside destination
Fix. remove; a skill never needs the user's secrets off the machine
LOWPrompt injection · prompt.transfer_instruction · CWE-94, CWE-1427
docs/v1/18_PHASE3_VERIFICATION.md:369
The fixture environment variable names are inherited deliberately so all three phases share one isolated server. The fabricated Neo4j and Gemini values exist only to let legacy configuration construct
Why it matters. an instruction to move sensitive data to an outside destination
Fix. remove; a skill never needs the user's secrets off the machine
INFOInventory / provenance · inv.oversize · CWE-1104
assets/brand/memex-brand-board.jpg
assets/brand/memex-brand-board.jpg
Why it matters. 1706338 bytes not read
INFOInventory / provenance · inv.oversize · CWE-1104
assets/memex-v1.mp4
assets/memex-v1.mp4
Why it matters. 9703020 bytes not read
INFOInventory / provenance · inv.oversize · CWE-1104
memex-site/public/memex-v1.mp4
memex-site/public/memex-v1.mp4
Why it matters. 9703020 bytes not read
INFOPrompt injection · prompt.credential_read · CWE-94, CWE-1427
CONTRIBUTING.md:42
cat > .env <<'ENV'
Why it matters. asks the agent to read credentials
INFOPrompt injection · prompt.credential_read · CWE-94, CWE-1427
README.md:125
cat > .env <<EOF
Why it matters. asks the agent to read credentials
INFOPrompt injection · prompt.credential_read · CWE-94, CWE-1427
docs/superpowers/plans/2026-05-14-memex-v0.2.0.md:163
**Goal:** Add a FastAPI-based SSE transport for remote team access with named API keys.
Why it matters. asks the agent to read credentials
INFOPrompt injection · prompt.credential_read · CWE-94, CWE-1427
npm/README.md:59
cat > .env <<EOF
Why it matters. asks the agent to read credentials

Gates applied: no_behavioural_pass.

Audited 2026-10-10 · audit v0.4.1 · source sha 5869b5c83529full audit observations/trust-audit/mcp-server/stifler7__memex.json · Report an issue / request a re-scan
05

Audit history

Every audit this server has had. A grade with a past is a grade somebody is still checking.

DateSourceVerdictGradeScoreChange
2026-10-105869b5c83529BLOCKD69first audit
06

Questions

What is the memex MCP server?

Persistent memory for AI coding agents via MCP: a bitemporal knowledge graph of your codebase, served to Claude Code, Cursor, Gemini CLI, and any MCP client. Tree-sitter and Gemini Flash into Neo4j via Graphiti. 14 MCP tools, hierarchical clusters, three-regime confidence decay.

What tools does memex expose?

16 in total: 13 read-only, 3 that write, and 0 that can delete or overwrite. Every one is listed on this page with its risk.

Is memex safe to connect to an agent?

No — not without reading the findings first. The audit graded it D (69/100) and found 2 critical or high issues in the source. Each one is listed on this page with the file and line it is on.

What credentials does memex need?

It reads GEMINI_API_KEY, MEMEX_LLM_API_KEY, MEMEX_SESSION_SECRET, NEO4J_PASSWORD, NVIDIA_API_KEY and NVIDIA_NIM_API_KEY from the environment. Give it a token scoped to the least it needs — an agent that can be talked into calling a tool can be talked into calling it with your credentials.

How does memex run?

It speaks stdio and streamable-http, so it runs as a local process your client starts. It is published on npm as stifler-memex-mcp at 1.0.2.

How current is this page?

The grade is for one exact copy of the source (5869b5c83529), read on 2026-10-10. The repository is watched and re-audited when it changes.

Advertisement