Labsco
MCP SERVER

Memex MCP

by STiFLeR7

A bitemporal knowledge graph of your repository — modules, symbols, decisions, problems — built from commits and served to any MCP agent.

Agent Memory
Summary
Bitemporal, so "we decided that, then we changed our mind" is representable.

Most memory tools store facts. This stores when a fact was believed and when it stopped being true, with `supersedes` and `corroborates` as explicit relationships and a confidence that decays rather than a boolean. The session briefing capped at 1500 tokens is the other design choice worth noting — it is what keeps a large repository from eating the context window at session start. The cost is real infrastructure: Neo4j and a Gemini key are both required.

What it is

A daemon and MCP server that turns every commit and file change into structured graph state in Neo4j. tree-sitter extracts symbols, imports and lockfile facts; Gemini Flash distils diffs into `Decision` nodes; every edge carries a `created_at` and an optional `expired_at`, so the graph records what was true when, not just what is true now. Confidence is computed at query time and decays, so stale knowledge fades instead of being asserted forever.

What you get
  • A cluster-level session briefing held under 1500 tokens no matter how large the repository — `get_project_context`
  • Callers, callees and linked decisions for a function or class, before you edit it — `get_symbol_context`
  • Recent architectural decisions over the last N days, optionally scoped to a module, and the open bugs and tech debt sorted by severity — `get_recent_decisions`, `get_open_problems`
  • Hybrid search combining semantic, keyword and graph traversal with an RRF merge — `search_context`
  • Edges whose composite confidence fell below a threshold, so you can see what the graph no longer trusts — `get_stale_context`
  • A commit explained by cross-referencing its diff with the linked decision and problem nodes — `explain_change`
  • The modules a file change is likely to affect, ranked by graph coupling and computed without any model call — `predict_impact`
  • Writes back into the graph, with `corroborates` to reinforce and `supersedes` to replace — `record_decision`, `record_problem`, `resolve_problem`, `invalidate_edge`
  • Per-node-type write ACLs and intent confirmation on agent writes, so the agent cannot quietly rewrite history
Requirements

A Neo4j instance — the repository ships a Docker Compose file for it — plus four values: `NEO4J_URI`, `NEO4J_USER`, `NEO4J_PASSWORD` and `GEMINI_API_KEY`, since Gemini is what turns diffs into decisions. Install through the Claude Code marketplace, or run `npx stifler-memex-mcp` with `init`, `watch` and `serve`; the same tool is on PyPI as `memex-mcp` and on npm as `stifler-memex-mcp`, both at 0.8.0. For a shared team setup there is a separate bootstrap script and Compose file that turn auth on by default and keep Neo4j's ports off the host — with a documented `down -v` footgun to avoid.

Setup effort

One command plus a key — npx stifler-memex-mcp serve --repo ., then supply credentials