[trace-mcp]

Serena MCP alternative: trace-mcp vs Serena

TL;DR. Serena and trace-mcp both give an agent structured code navigation instead of raw file reads, and they get there from opposite directions. Serena is a live LSP proxy: it asks a real language server your question, so its references and renames are compiler-grade, but its world is exactly what the language server knows. trace-mcp is a precomputed graph: tree-sitter parsing across 81 languages into SQLite, with framework-aware edges, refactoring, security scanning and code-linked memory on top — and LSP or offline SCIP as an optional precision upgrade rather than a hard dependency.

Pick Serena if precision on one well-supported language is the whole job. Pick trace-mcp if breadth, framework semantics, or anything beyond navigation is.

Head-to-head

Capability trace-mcp Serena
GitHub stars 102 ~28.6K
Languages 81 (tree-sitter) 40+ (73 LSP backends)
Requires a language server ✗ optional enrichment ✓ core premise
Reference precision by default AST-resolved (tiered) compiler-grade (LSP)
Compiler-grade path ✓ opt-in LSP + offline SCIP ingestion ✓ live LSP
Framework integrations ✓ 87
Cross-language edges
Persistent state across restarts ✓ SQLite + FTS5 graph partial — on-disk symbol cache, no graph
Impact analysis ✓ reverse dependency traversal + decorator filter
Call graph ✓ bidirectional, graph-based ✗ not exposed as a tool
Refactoring tools ✓ rename, move, signature, AST codemod, extract ✓ rename, safe-delete; move and inline only via the JetBrains bridge
Live debugger ✗ deliberately out of lane ✓ via a JetBrains IDE bridge (optional, beta)
Session memory ✓ code-linked decision graph, staleness-checked at recall ✓ markdown notes, cross-referenced but not code-linked
Security scanning ✓ OWASP Top-10, type-aware taint
Control-flow / data-flow ✓ CFG with basic blocks and loop back-edges
SARIF / CI output ✓ 2.1.0, schema-validated
Multi-repo subprojects ✓ cross-repo API linking partial — query another project, no cross-repo edges
Graph visualization ✓ desktop app
MCP tools advertised (default) 28 (~11.6K tok); 169 on full 29; 52 defined
Written in TypeScript Python

When to pick Serena

When to pick trace-mcp

Where we are not being smug

Two honest points.

First, the table above used to be built from Serena’s README, and reading the source moved four rows in Serena’s favour. We cloned it at commit 43ae021 (version 1.7.1.dev0, MIT) and read its tool package, its memory package, its project server and its solidlsp language-server layer. What changed:

Two rows moved the other way, and we state the evidence rather than the verdict. Call graph: callHierarchy/incomingCalls and outgoingCalls are implemented in the LSP client layer, but no tool class calls them, so an agent cannot ask Serena for a call graph. Move and inline refactoring: JetBrainsMoveTool and JetBrainsInlineSymbol proxy to a running JetBrains IDE; both are optional and beta. Native and always-on are rename_symbol and safe_delete_symbol.

If you maintain Serena and something here is wrong, open an issue and we will fix it.

Second, our default tool surface is expensive. trace-mcp advertises 28 tools, roughly 11.6K tokens, on the shipped default path as of August 29, 2026 — down from ~50K, once the preset bypass on the daemon-backed path was fixed and the default preset moved to minimal. That is level with Serena’s 29 default tools rather than an order of magnitude above it, and anything outside the default is one load_tools call away.

FAQ

What is the core difference between Serena and trace-mcp? Serena proxies a live language server per request: compiler-grade, but only as broad as the language server. trace-mcp precomputes a persistent graph from tree-sitter, then optionally upgrades edges with LSP or offline SCIP. Precision-first and stateless versus breadth-first and persistent.

Is Serena more accurate than trace-mcp? For plain references and renames in a well-served language, yes by default. trace-mcp closes that gap only with opt-in LSP enrichment or a SCIP index, which raise edges to the lsp_resolved / scip_resolved tier. For cross-language and framework edges, no language server has the answer at all.

Does trace-mcp need a language server installed? No. tree-sitter alone covers 81 languages with no toolchain and no compile step. LSP is opt-in; SCIP ingestion is offline. Serena’s premise is the opposite — no language server for your stack means no answers.

Can Serena do impact analysis or framework-aware navigation? Not as a graph. “References to this symbol” is an LSP request; “this controller renders that template via Inertia” is not something a language server models.

Which has a lower startup cost? Serena on a cold repo — no index build, though the language server still has to warm up, which on a large TypeScript or Java project is not free. Its pickled symbol caches make the second start cheaper than the first. trace-mcp pays a one-time index build, then serves from SQLite; both survive restarts, but only trace-mcp’s stored state includes edges.

Next steps

Last updated: August 30, 2026