Skip to content

Releases: DeusData/codebase-memory-mcp

v0.4.6

07 Mar 17:35

Choose a tag to compare

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_] := ... and f[x_] = ... at top-level and nested inside Module/Block
  • Call extraction: apply nodes with LHS-definition filtering (definition heads are not treated as calls)
  • Import extraction: << "file.wl" (get_top) and Needs["Package"]`
  • Caller attribution fix: compute_func_qn in the unified walker now resolves Wolfram function names from apply(user_symbol("f"), ...) LHS, so CALLS edges are attributed to the enclosing function rather than the file module

MATLAB call extraction

  • Added function_call and command node types to call extraction
  • Resolves function references like inv(A), eig(M), disp hello in .m files

Lean 4 call extraction

  • Added apply call nodes with type-position filtering to exclude type annotation false positives

Windows linker fix

  • Added -Wl,--allow-multiple-definition CGo LDFLAGS for Windows to work around a GCC 15.2.0 / MSYS2 UCRT64 regression

v0.4.5

07 Mar 17:05

Choose a tag to compare

What's New

4 New Languages (59 → 63)

  • MATLAB — function definitions, usages, .m file disambiguation via Linguist heuristics
  • Lean 4 — theorem/definition extraction, imports
  • FORM#procedure/#call extraction for symbolic computation scripts
  • Magma — function/procedure/intrinsic definitions, load imports, call graph extraction

Magma Graph Quality Fix

  • Fixed load_statement import extraction — added field('path', ...) to grammar so all load statements 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 trying fqn.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

06 Mar 23:16

Choose a tag to compare

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

06 Mar 20:37

Choose a tag to compare

What's Changed

New Contributors

Full Changelog: v0.4.1...v0.4.2

v0.4.1

06 Mar 19:10

Choose a tag to compare

Full Changelog: v0.4.0...v0.4.1

v0.4.0

06 Mar 18:23

Choose a tag to compare

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

03 Mar 17:11

Choose a tag to compare

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-community commSumTot accumulators 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

03 Mar 15:53

Choose a tag to compare

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 DetectionisClassDeclaration() now correctly identifies class declarations in TypeScript, Java, C#, Scala, Kotlin, and PHP, improving IMPLEMENTS edge accuracy.

Route Test FilteringisTestNode() + 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_resolve param: Opt-in automatic disambiguation — picks the best candidate when ≤2 matches exist
  • include_neighbors param: Opt-in caller/callee name inclusion in snippet responses
  • Better disambiguation UX: Replaced error key with status/message for 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 NodeNeighborNames store 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

02 Mar 15:14

Choose a tag to compare

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_test property + file path pattern matching
  • Boundary filtering: Limited to Function/Method/Class nodes (previously included all node types)
  • Removed unused tools: read_file and list_directory removed — 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

02 Mar 00:14

Choose a tag to compare

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 changes
  • staged — staged changes only
  • all (default) — both staged and unstaged
  • branch — 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
```