# Limitations of DeusData codebase-memory-mcp: 10 Critical Constraints Explained

> Discover the 10 critical limitations of DeusData codebase-memory-mcp. Explore constraints like no LLM, read-only Cypher, and memory budgets. Understand its architectural boundaries.

- Repository: [Martin Vogel/codebase-memory-mcp](https://github.com/DeusData/codebase-memory-mcp)
- Tags: deep-dive
- Published: 2026-07-19

---

**The DeusData codebase-memory-mcp project is a static, single-binary code-intelligence engine that imposes ten major architectural constraints including no built-in LLM, read-only Cypher support, incomplete language coverage, and memory budget restrictions.**

The **codebase-memory-mcp** repository provides a high-speed knowledge graph builder for codebases, but its zero-dependency philosophy inherently limits flexibility. While it delivers extreme indexing speed and low token usage through its 15 MCP tools, understanding these limitations is crucial for teams evaluating whether this tool fits their development workflow.

## Core Architectural Constraints

### No Built-in LLM Integration

Unlike comprehensive code intelligence platforms, **codebase-memory-mcp** operates as a pure data provider without embedded language model inference. According to the [`README.md`](https://github.com/DeusData/codebase-memory-mcp/blob/main/README.md), the binary only supplies structural graph data; natural-language processing must be handled by an external MCP client such as Claude Code.

This design means users cannot issue natural-language queries directly to the binary. The `query_graph` tool in [`src/cypher/query_executor.c`](https://github.com/DeusData/codebase-memory-mcp/blob/main/src/cypher/query_executor.c) executes structured openCypher only, requiring an intermediate agent to translate human questions into graph queries.

### Read-Only Cypher Implementation

The graph query engine implements only a subset of openCypher, explicitly excluding write operations. As documented in the README's "Cypher (openCypher) read subset" section, the system does not support `MERGE`, `CALL`, or any write-oriented clauses.

This limitation is enforced in the query execution layer, making the engine purely analytic. Users cannot modify the graph structure through MCP tools—all graph mutations occur during the indexing phase handled by [`src/pipeline/pipeline.c`](https://github.com/DeusData/codebase-memory-mcp/blob/main/src/pipeline/pipeline.c).

### Static Analysis Blind Spots

The multi-pass indexing pipeline parses source files using vendored tree-sitter grammars but cannot analyze dynamically generated code. Runtime metaprogramming—such as `eval`-based function generation or JIT-compiled code—remains invisible to the graph builder.

This constraint affects repositories heavily utilizing dynamic language features. The [`pipeline.c`](https://github.com/DeusData/codebase-memory-mcp/blob/main/pipeline.c) component only processes static snapshots, meaning code paths created through runtime introspection or dynamic imports will never appear in the knowledge graph.

## Language Coverage and Extensibility Limits

### Incomplete Hybrid LSP Support

While the project supports 158 languages through vendored tree-sitter grammars, coverage quality varies dramatically. Only 10 languages achieve "Excellent" (≥90%) coverage in the Hybrid LSP analysis; the majority fall into "Good" (75-89%) or "Functional" (<75%) categories.

Languages like OCaml and Haskell suffer from reduced type-resolution accuracy. The Hybrid LSP integration in the indexing pipeline cannot resolve symbols with the same precision as language-specific analysis tools, potentially producing incomplete call graphs for less-supported languages.

### No Plugin Architecture

Extending support for new languages requires recompiling the entire binary. The 158 grammars are vendored directly into the build via [`scripts/build.sh`](https://github.com/DeusData/codebase-memory-mcp/blob/main/scripts/build.sh), with no runtime extension mechanism available.

As implemented in `Makefile.cbm`, adding custom analyses or new language parsers necessitates modifying the source tree and rebuilding the static binary. This contrasts with plugin-based architectures that allow runtime language registration through configuration files.

## Operational and Resource Constraints

### Memory Budget Limitations (CBM_MEM_BUDGET_MB)

The in-memory graph must fit within the allocated memory budget defined by the `CBM_MEM_BUDGET_MB` environment variable. When indexing large repositories, exceeding this budget aborts the indexing process or degrades performance significantly.

According to [`docs/CONFIGURATION.md`](https://github.com/DeusData/codebase-memory-mcp/blob/main/docs/CONFIGURATION.md), the default budget derives from system RAM, but very large repositories may require manual tuning. Teams working with monorepos must monitor memory consumption during the indexing phase to prevent failures.

### Single-Process Design and Scaling

The server operates as a single process without native horizontal scaling capabilities. High-concurrency workloads rely on internal thread pools rather than distributed architecture, potentially saturating the process under heavy parallel query loads.

This design choice prioritizes simplicity and security over scalability. Unlike microservices-based alternatives, **codebase-memory-mcp** cannot scale horizontally across multiple nodes without external orchestration.

### File Filtering and Index Completeness

Three layers of file filtering—`.gitignore`, `.cbmignore`, and hard-coded patterns—silently exclude files from indexing. While this speeds up analysis, aggressive ignore rules can produce incomplete graphs that miss critical dependencies.

The filtering logic applied during repository traversal means files excluded by these patterns will never enter the knowledge graph, potentially breaking call-chain analysis when ignored files contain important library code.

## User Interface and Distribution Limitations

### Headless by Default (UI Variant Separation)

The standard binary distributed through standard builds is strictly headless. The interactive 3-D visualization UI requires a separate `ui` build variant, as noted in the README's "Graph Visualization UI" section.

Users running the default binary cannot access the visual explorer without downloading and configuring the UI variant separately. This separation limits immediate visual feedback during graph exploration for standard installations.

## Version Control and Collaboration Constraints

The indexing system watches for file changes but lacks awareness of cross-repository merges or large binary asset versioning. As described in the "Team-Shared Graph Artifact" documentation, the ZSTD-compressed artifacts managed by [`internal/cbm/zstd_store.c`](https://github.com/DeusData/codebase-memory-mcp/blob/main/internal/cbm/zstd_store.c) represent static snapshots rather than version-controlled database states.

Collaborative environments must manually coordinate artifact commits to avoid conflicts. The system does not natively handle simultaneous modifications from multiple developers or merge concurrent graph updates, requiring external workflow management for team-shared indices.

## Summary

- **No LLM integration**: Requires external MCP clients like Claude Code for natural language processing
- **Read-only queries**: `query_graph` only supports openCypher read operations; no graph modifications via MCP
- **Static analysis only**: Runtime-generated code via metaprogramming remains invisible to the index
- **Limited language coverage**: Only 10 of 158 supported languages achieve excellent LSP coverage
- **Compile-time extensions**: New language support requires recompiling the binary via [`scripts/build.sh`](https://github.com/DeusData/codebase-memory-mcp/blob/main/scripts/build.sh)
- **Memory constraints**: Indexing fails if `CBM_MEM_BUDGET_MB` is exceeded by large repositories
- **Single-process scaling**: No native horizontal scaling; heavy loads saturate the single process
- **Silent file exclusion**: `.gitignore` and `.cbmignore` rules may create incomplete graphs
- **UI separation**: Interactive visualization requires a separate build variant
- **Static snapshots**: Cross-repo merges and binary assets lack version awareness

## Frequently Asked Questions

### Can codebase-memory-mcp modify the knowledge graph after indexing?

No. The `query_graph` tool in [`src/cypher/query_executor.c`](https://github.com/DeusData/codebase-memory-mcp/blob/main/src/cypher/query_executor.c) implements only a read-only subset of openCypher. The graph is immutable during the query phase; modifications only occur during the initial indexing process managed by [`src/pipeline/pipeline.c`](https://github.com/DeusData/codebase-memory-mcp/blob/main/src/pipeline/pipeline.c). Users wishing to update the graph must reindex the repository.

### How do I handle memory errors when indexing large repositories?

Increase the `CBM_MEM_BUDGET_MB` environment variable before running the indexer. The default value derives from available system RAM, but large monorepos may require explicit configuration as documented in [`docs/CONFIGURATION.md`](https://github.com/DeusData/codebase-memory-mcp/blob/main/docs/CONFIGURATION.md). If memory issues persist, consider using `.cbmignore` to exclude non-essential files from indexing.

### Why are some function calls missing from the graph?

Missing calls typically result from either aggressive file filtering via `.gitignore` or `.cbmignore`, or from dynamic code generation that static analysis cannot capture. The pipeline only parses physically present source files; runtime-evaluated code and certain dynamic imports will not appear in the knowledge graph.

### Can I add support for a new programming language without recompiling?

No. The 158 vendored tree-sitter grammars are bundled at compile time via [`scripts/build.sh`](https://github.com/DeusData/codebase-memory-mcp/blob/main/scripts/build.sh) and `Makefile.cbm`. Adding new language support requires modifying the source tree and rebuilding the binary—there is no runtime plugin architecture for grammar registration.