The graph gives agents structure that text search cannot
Codebase Memory MCP parses repositories into nodes for files, packages, classes, functions, methods, routes, resources, and other code entities. Edges record definitions, imports, calls, type use, HTTP links, data flow, and related structure. Its 15 MCP tools let an agent search the graph, trace callers, inspect architecture, map a Git diff to affected symbols, query a read-only Cypher subset, fetch source snippets, and keep architecture decisions. The index persists across sessions instead of forcing each agent to rediscover the project.
This is useful when a question spans files or repositories. Grep can find a function name, but it does not distinguish a proven call from an ambiguous use or follow a route into another service. The graph can narrow the investigation before the agent reads exact source. It should remain a navigation aid, because parsing and type inference can miss dynamic dispatch, generated code, runtime configuration, or unsupported language behavior. The README's own installed guidance tells agents to verify evidence against source and check coverage before making negative claims.
Local processing reduces exposure but does not remove trust
The native server runs locally, stores SQLite-backed indexes under the user cache, and says it collects no telemetry. Semantic search uses bundled embeddings and needs no external model, Ollama instance, hosted service, or API key. The coding agent remains the natural-language layer and calls graph tools through MCP. This arrangement keeps proprietary source away from a separate indexing vendor, which is a meaningful advantage for private repositories.
Installation deserves more scrutiny than the one-line curl command suggests. The native install command can detect and configure 43 agent surfaces, add MCP entries, write durable instructions, create skills and hooks, alter PATH setup, and install a shared per-account daemon. Claude Code and Codex receive specific configuration and supporting assets. These actions are documented, and uninstall removes owned entries while asking before index deletion. Audit the script and binary, use --skip-config first, then enable only the clients required.
What happened when we ran it
Our sandbox at commit 010569f entered the graph-ui/ project and installed 352 npm packages in 22 seconds. Dependencies occupied 357 MB. The build succeeded in 15 seconds and tests succeeded in 10 seconds. npm audit reported 0 known vulnerabilities: 0 critical, 0 high, 0 moderate, and 0 low. This is a clean result for the web interface.
It is not a native-server result. The full checkout contained 2,051 files, about 2,441,022 lines of source, and 1,332.8 MB. It had 22 GitHub Actions workflows, a tests directory, and no Dockerfile. Our generic Node runner did not compile the C executable, run the README's native suite, index a repository, query the graph, start the daemon, or measure memory. The project's indexing-speed and token claims remain its measurements, not ours.
A source build needs C and C++ compilers, zlib, Git, and the supplied build script. Most users should start with a checksummed release binary and inspect it before execution. Release v0.10.8 links VirusTotal evidence and hashes for each platform binary. Those checks cannot prove runtime behavior.
Watching is convenient until index freshness fails
A shared daemon coordinates agent sessions, indexing, the optional UI, and repository watchers. Auto-watch defaults to true, while first-session indexing is separately configurable. It avoids duplicate watchers but places a cached view between changing source and the agent's answer.
Issue 1339 reports a serious freshness edge: after a dirty working tree returns to clean, the graph can retain false negatives because the watcher misses the revert. The report was updated August 26, 2026 and marked high priority. A stale graph is worse than no graph when an agent confidently claims a caller or symbol does not exist. Keep source verification mandatory, run an explicit reindex after large rebases or resets, and test clean-to-dirty-to-clean transitions in a pilot repository.
More than 20 GB after 65 files demands a soak test
The indexer uses an in-memory SQLite pipeline with memory and worker limits. Issue 832 reports more than 20 GB of resident memory after indexing 65 Markdown files totaling 1.3 MB on a 32 GB Windows machine. The high-priority report is enough to reject an unmonitored rollout.
Set CBM_MEM_BUDGET_MB, reduce workers if needed, and watch resident memory during initial indexing and repeated queries. The allowed-root setting is equally important when an agent or UI could receive untrusted paths: without it, no containment boundary restricts index requests. Disable auto-watch during evaluation, point the cache at a known location, and inspect its growth. Local operation protects network privacy, but a runaway local process can still disrupt builds and editors.
Version 0.10.8 fixes graph truth and release plumbing
The August 19, 2026 release corrected Cypher aggregates that could undercount, Python alias resolution, ghost-like semantic search results, list-field extraction, and incremental responses that hid persisted parse gaps. It also repaired Windows Unicode search and made abandoned code scans cancellable. These are substantive correctness fixes for the answers agents consume. The release superseded v0.10.7 after a tag naming error broke package download URLs, then hardened release gates and version validation.
The repository was pushed August 27. GitHub listed 519 open issues and pull requests combined, split into 405 issues and 114 pull requests by search. Current work addresses stale daemon files, client integrations, language parsing, and Windows paths. Pin a release, review configuration diffs, and retest before upgrading.
Codebase Memory MCP can save an agent from blind file-by-file exploration, especially in polyglot systems where routes and calls cross repository boundaries. Its value depends on disciplined use: graph for direction, source for proof. With restricted paths, measured memory, explicit indexing, and minimal client changes, it is a credible local tool. Without those controls, a stale or resource-hungry index can make the agent faster at reaching the wrong answer.

