Releases: DeusData/codebase-memory-mcp
v0.4.6
What's New
Wolfram Language support (59 → 64 languages)
- Wolfram Language (
.wl,.wls) — vendors LumaKernel/tree-sitter-wolfram grammar (ABI 13) - Function extraction:
f[x_] := ...andf[x_] = ...at top-level and nested insideModule/Block - Call extraction:
applynodes with LHS-definition filtering (definition heads are not treated as calls) - Import extraction:
<< "file.wl"(get_top) andNeeds["Package"]` - Caller attribution fix:
compute_func_qnin the unified walker now resolves Wolfram function names fromapply(user_symbol("f"), ...)LHS, so CALLS edges are attributed to the enclosing function rather than the file module
MATLAB call extraction
- Added
function_callandcommandnode types to call extraction - Resolves function references like
inv(A),eig(M),disp helloin.mfiles
Lean 4 call extraction
- Added
applycall nodes with type-position filtering to exclude type annotation false positives
Windows linker fix
- Added
-Wl,--allow-multiple-definitionCGo LDFLAGS for Windows to work around a GCC 15.2.0 / MSYS2 UCRT64 regression
v0.4.5
What's New
4 New Languages (59 → 63)
- MATLAB — function definitions, usages,
.mfile disambiguation via Linguist heuristics - Lean 4 — theorem/definition extraction, imports
- FORM —
#procedure/#callextraction for symbolic computation scripts - Magma — function/procedure/intrinsic definitions,
loadimports, call graph extraction
Magma Graph Quality Fix
- Fixed
load_statementimport extraction — addedfield('path', ...)to grammar so allloadstatements are captured (previously only the first per file) - Verified call extraction works end-to-end: cross-function CALLS edges, recursive calls, trace_call_path
Import Linker Improvement
passImports()now resolves file-path imports (e.g.load "utils.mag",#include "helpers.h") by tryingfqn.ModuleQN()when the raw path doesn't match — general fix benefiting any language with file-path-based imports
Other Changes
- Unified version management via build-injected ldflags
- Fixed Windows file URI path parsing in watcher
- Statically linked Windows binary to fix missing DLL error
- Fixed binary move command in setup script (#16)
v0.4.4
Fix Windows file URI path parsing — watcher was prepending / to drive letter paths (e.g. /C:/Users/...), causing root_gone warning loop. Also unifies version management via build-injected ldflags.
v0.4.2
What's Changed
- Fix binary move command in setup script by @chitralverma in #16
New Contributors
- @chitralverma made their first contribution in #16
Full Changelog: v0.4.1...v0.4.2
v0.4.1
Full Changelog: v0.4.0...v0.4.1
v0.4.0
What's New in v0.4.0
59 Language Support (Tree-Sitter Engine)
- Complete rewrite of extraction engine from Go tree-sitter bindings to vendored C grammars
- 39 new languages: Clojure, F#, Julia, Vim Script, Nix, Common Lisp, Elm, Fortran, CUDA, COBOL, Verilog, Emacs Lisp, JSON, XML, Markdown, Makefile, CMake, Protobuf, GraphQL, Vue, Svelte, Meson, GLSL, INI, and more
- All grammars vendored as C source — zero external dependencies
Pipeline Quality Improvements
- 17 language-specific import parsers (ES modules, Java, Kotlin, Scala, C#, C, C++, PHP, Ruby, Rust, Lua, Elixir, Bash, Zig, Erlang, Haskell, OCaml)
- Language-aware class declaration detection for implements resolution
- Haskell/OCaml/Elixir callee extraction (apply/infix expressions)
- JSX component references as CALLS edges for TSX
- Route test filtering to exclude test fixtures from HTTP links
Extraction Fixes
- Fixed C/C++/CUDA/GLSL function name resolution (off-by-one in declarator traversal)
- Fixed Groovy method names (was returning return type instead of method name)
- Fixed CommonLisp, Makefile, VimScript, Julia function extraction
- Fixed Elm value_declaration name resolution
Infrastructure
- Graceful shutdown with context cancellation throughout pipeline
- Self-update checker and install/uninstall CLI commands
- Cross-platform builds (Linux, macOS, Windows)
- Louvain community detection O(N^2) bottleneck fix
v0.3.4
Performance Fix
Louvain community detection: 297x faster — fixes O(N²) bottleneck that caused indexing timeouts on large codebases.
What changed
- Replaced naive
modularityGain(scanned all nodes per call) with per-communitycommSumTotaccumulators maintained incrementally - Each Louvain iteration is now O(m) instead of O(N²)
Benchmarks (Django, ~30K nodes, ~48K CALLS edges)
| Metric | v0.3.3 | v0.3.4 |
|---|---|---|
| Communities pass | 4m 40s | 0.94s |
| Total indexing | 5m 38s | 24s |
Graph output (nodes, edges, community assignments) is equivalent — only speed changed.
v0.3.3
What's New in v0.3.3
Pipeline Quality Improvements
17 Import Parsers — Language-aware import extraction for ES modules, Java, Kotlin, Scala, C#, C, C++, PHP, Ruby, Rust, Lua, Elixir, Bash, Zig, Erlang, Haskell, and OCaml. IMPORTS edges now reflect actual source-level imports instead of heuristic-based guesses.
Language-aware Class Detection — isClassDeclaration() now correctly identifies class declarations in TypeScript, Java, C#, Scala, Kotlin, and PHP, improving IMPLEMENTS edge accuracy.
Route Test Filtering — isTestNode() + containsTestSegment() now exclude test fixtures from HTTP route extraction. Go routes dropped from 211→56, Rust 146→74, JS 125→53.
Callee Extraction for Functional Languages — Haskell, OCaml, and Elixir now extract function calls from apply, infix, and application_expression nodes. OCaml CALLS went from 221→10,629 (+4710%), Haskell 175→4,094 (+2239%).
JSX Component References — TSX files now emit CALLS edges for uppercase JSX tags (component usage), boosting TSX CALLS from 3,400→36,172 (+964%).
Type Inference Split — Separated into typed (static type annotations) and dynamic (runtime inference) paths for cleaner, more accurate type resolution.
Snippet Tool Optimization
auto_resolveparam: Opt-in automatic disambiguation — picks the best candidate when ≤2 matches existinclude_neighborsparam: Opt-in caller/callee name inclusion in snippet responses- Better disambiguation UX: Replaced
errorkey withstatus/messagefor clearer AI agent integration - Fuzzy fallback fix: Extracts last dot-segment from qualified names for more reliable matching
Bug Fixes
- R function name resolution: Fixed resolution of all function types in R language support (#14)
- Windows CI: Fixed SQLite file locking during test cleanup on Windows
- Neighbor name lookups: New
NodeNeighborNamesstore method for efficient neighbor discovery
Benchmark Results (v3)
- D-tier languages reduced from 8 → 4 (C#, Ruby, Erlang, SQL remain)
- Average MCP quality score: 0.75 → 0.79
- Languages with MCP Q ≥ 0.7: 14 → 17 of 22
Stats
- 30 files changed, +6,656 / −193 lines
- 1,679 lines of new extraction test coverage
v0.3.2
What's New in v0.3.2
Architecture Overview (get_architecture)
New tool that provides instant codebase orientation in a single call. Returns 12 selectable aspects:
- languages: Language breakdown by file count
- packages: Top packages with node counts
- entry_points: Main/init functions (test functions filtered out)
- routes: HTTP endpoints with handlers
- hotspots: Most-called functions by fan-in (test functions filtered out)
- boundaries: Cross-package call volumes
- services: Cross-service HTTP/async links
- layers: Package-level layer classification (entry/core/internal)
- clusters: Louvain community detection across CALLS, HTTP_CALLS, and ASYNC_CALLS edges
- file_tree: Condensed directory structure
- adr: Stored Architecture Decision Record
Use get_architecture(aspects=["all"]) for full orientation or select specific aspects to reduce output.
Architecture Decision Records (manage_adr)
Persist architectural decisions across AI sessions with structured, validated records:
- 6 fixed sections: PURPOSE, STACK, ARCHITECTURE, PATTERNS, TRADEOFFS, PHILOSOPHY
- Section filtering:
manage_adr(mode="get", include=["STACK", "PATTERNS"])returns only needed sections - Partial updates:
manage_adr(mode="update", sections={"PATTERNS": "..."})patches one section, preserves the rest - Validation: Store rejects content missing any section; update rejects non-canonical keys
- ADR discovery: When no ADR exists, hints about existing architecture docs found in the repo (ARCHITECTURE.md, docs/adr/*, etc.)
- Max 8000 chars (up from 4000)
Louvain Community Detection
Renamed from "Leiden" to accurately reflect the algorithm (simplified Louvain, not actual Leiden which requires CPM-based refinement). The clusters aspect in get_architecture uses Louvain to discover hidden functional modules across packages.
Case-Insensitive Search
search_graph and search_code are now case-insensitive by default. Set case_sensitive=true for exact matching.
Bug Fixes
- qnToPackage: Fixed extraction of sub-package from qualified names — packages now show meaningful names (e.g., "store", "pipeline") instead of collapsing to top-level directory ("internal")
- Test filtering: Entry points, hotspots, and routes now exclude test functions via
is_testproperty + file path pattern matching - Boundary filtering: Limited to Function/Method/Class nodes (previously included all node types)
- Removed unused tools:
read_fileandlist_directoryremoved — handled natively by coding agents
Files Changed
- New:
internal/store/architecture.go,internal/store/architecture_test.go,internal/store/louvain.go,internal/tools/architecture.go - Modified:
internal/tools/tools.go,internal/pipeline/communities.go,README.md, and 9 other files - Removed:
internal/store/leiden.go(renamed to louvain.go)
v0.3.1
What's New
detect_changes tool (NEW)
Map uncommitted git changes to affected graph symbols and their blast radius with risk classification. Supports multiple scopes:
unstaged— working directory changesstaged— staged changes onlyall(default) — both staged and unstagedbranch— diff against a base branch (e.g.main)
Returns changed files, changed symbols, impacted callers with risk scores, and an impact summary.
Risk scoring on trace_call_path
New risk_labels=true parameter adds depth-based impact classification to call chain traces:
- CRITICAL (hop 1) — direct callers/callees, will break
- HIGH (hop 2) — indirect, likely affected
- MEDIUM (hop 3) — may be affected
- LOW (hop 4+) — unlikely but possible
Includes impact_summary with counts per risk tier and has_cross_service flag.
Wider editor support
codebase-memory-mcp install now auto-registers MCP config for:
- Cursor (
~/.cursor/mcp.json) - Windsurf (
~/.codeium/windsurf/mcp_config.json)
In addition to existing Claude Code and Codex CLI support. uninstall cleans up all editors.
MCP SDK upgrade
Upgraded go-sdk from v1.3.1 to v1.4.0 — includes security fixes and MCP spec compliance improvements.
Improved tool descriptions
Inline regex examples on search parameters help AI agents craft precise single-query searches.
Tool Count
14 tools (was 13). Only 1 new tool added (detect_changes), 1 existing tool extended (trace_call_path + risk_labels).
Performance
Zero indexing overhead. Risk scoring is pure post-processing on existing BFS results. detect_changes runs git at tool-call time only — no new pipeline passes or storage.
Install / Upgrade
```bash
First install
go install github.com/DeusData/codebase-memory-mcp/cmd/codebase-memory-mcp@v0.3.1
codebase-memory-mcp install
Upgrade (existing users)
codebase-memory-mcp update
```