freshcrate
Skin:/
Home > MCP Servers > sdl-mcp

sdl-mcp

SDL-MCP (Symbol Delta Ledger MCP Server) is a cards-first context system for coding agents that saves tokens and improves context.

Why this rank:Strong adoptionRecent releaseHealthy release cadence

Description

SDL-MCP (Symbol Delta Ledger MCP Server) is a cards-first context system for coding agents that saves tokens and improves context.

README

Symbol Delta Ledger MCP

SDL-MCP

Cards-first code context for AI coding agents

Stop feeding entire files into the context window.
Start giving agents exactly the code intelligence they need.


npm versionnpm downloadsGitHub commit activityRoastMyCode: A



What's the problem?

Every time an AI coding agent reads a file to answer a question, it consumes thousands of tokens. Most of those tokens are irrelevant to the task. The agent doesn't need 500 lines of a file to know that validateToken takes a string and returns a Promise<User> โ€” but it reads them anyway, because that's all it has.

Multiply that across a debugging session touching 20 files and you've burned 40,000+ tokens on context gathering alone.

SDL-MCP fixes this. It indexes your codebase into a searchable symbol graph and serves precisely the right amount of context through a controlled escalation path. An agent that uses SDL-MCP understands your code better while consuming a fraction of the tokens.




How it works โ€” in 30 seconds

%%{init: {"theme":"base","themeVariables":{"background":"#ffffff","primaryColor":"#E7F8F2","primaryBorderColor":"#0F766E","primaryTextColor":"#102A43","secondaryColor":"#E8F1FF","secondaryBorderColor":"#2563EB","secondaryTextColor":"#102A43","tertiaryColor":"#FFF4D6","tertiaryBorderColor":"#B45309","tertiaryTextColor":"#102A43","lineColor":"#0F766E","textColor":"#102A43","fontFamily":"Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, Segoe UI, sans-serif"},"flowchart":{"curve":"basis","htmlLabels":true}}}%%
flowchart TD
    Codebase["Your Codebase"]
    Indexer["Indexer<br/>12 languages<br/>Rust native or Tree-sitter fallback"]
    Graph["LadybugDB graph<br/>symbols, edges, metrics, versions"]
    MCP["Current MCP surfaces<br/>33 flat, 6 gateway, 4 Code Mode"]
    CLI["13 CLI commands"]
    HTTP["HTTP API and graph UI"]
    Agent["AI coding agent<br/>Claude Code, Claude Desktop, Cursor, Windsurf, Codex, Gemini"]

    Codebase e1@--> Indexer
    Indexer e2@--> Graph
    Graph e3@--> MCP
    Graph e4@--> CLI
    Graph e5@--> HTTP
    MCP e6@--> Agent

    classDef source fill:#E7F8F2,stroke:#0F766E,stroke-width:2px,color:#102A43;
    classDef process fill:#E8F1FF,stroke:#2563EB,stroke-width:2px,color:#102A43;
    classDef decision fill:#FFF4D6,stroke:#B45309,stroke-width:2px,color:#102A43;
    classDef storage fill:#F2E8FF,stroke:#7C3AED,stroke-width:2px,color:#102A43;
    classDef output fill:#FFE8EF,stroke:#BE123C,stroke-width:2px,color:#102A43;
    classDef muted fill:#F8FAFC,stroke:#64748B,stroke-width:1px,color:#102A43;
    classDef animate stroke:#0F766E,stroke-width:2px,stroke-dasharray:10\,5,stroke-dashoffset:900,animation:dash 22s linear infinite;
    class e1,e2,e3,e4,e5,e6 animate;
Loading
  1. Index once โ€” SDL-MCP parses every symbol in your repo and stores it as a compact metadata record (a "Symbol Card") in a graph database
  2. Query efficiently โ€” Agents use MCP tools to search, slice, and retrieve exactly the context they need
  3. Escalate only when necessary โ€” A four-rung ladder controls how much code the agent sees, from a 100-token card to full source (with justification required)



Prerequisites

  • Node.js 24+ is required (download). SDL-MCP uses Node.js features not available in earlier versions. Run node -v to check.

Peer dependency warnings during install? The tree-sitter grammar packages may produce ERESOLVE warnings about peer dependencies. These are harmless โ€” the install succeeds and everything works correctly. Add --legacy-peer-deps to suppress them: npm install -g sdl-mcp --legacy-peer-deps




Quick Start

# Install (requires Node.js 24+)
npm install -g sdl-mcp

# Initialize, auto-detect languages, index your repo, and run health checks
sdl-mcp init -y --auto-index

# Start the MCP server for your coding agent
sdl-mcp serve --stdio

Point your MCP client at the server and the agent gains access to SDL-MCP's current configured surface. By default that is exclusive Code Mode; set codeMode.exclusive: false when you want Code Mode plus the regular flat or gateway tools in one session.

npx users: Replace sdl-mcp with npx --yes sdl-mcp@latest in all commands above.

Full Getting Started Guide โ†’




The Iris Gate Ladder

The core innovation. Named after the adjustable aperture that controls light flow in optics, the Iris Gate Ladder lets agents dial their context "aperture" from a pinhole to wide-open.

%%{init: {"theme":"base","themeVariables":{"background":"#ffffff","primaryColor":"#E7F8F2","primaryBorderColor":"#0F766E","primaryTextColor":"#102A43","secondaryColor":"#E8F1FF","secondaryBorderColor":"#2563EB","secondaryTextColor":"#102A43","tertiaryColor":"#FFF4D6","tertiaryBorderColor":"#B45309","tertiaryTextColor":"#102A43","lineColor":"#0F766E","textColor":"#102A43","fontFamily":"Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, Segoe UI, sans-serif"},"flowchart":{"curve":"basis","htmlLabels":true}}}%%
flowchart TB
    R1["~100 tokens<br/>Rung 1: Symbol Card<br/>Name, signature, summary, dependencies, metrics"]
    R2["~300 tokens<br/>Rung 2: Skeleton IR<br/>Signatures and control flow with bodies elided"]
    R3["~600 tokens<br/>Rung 3: Hot-Path Excerpt<br/>Identifier-focused lines with context"]
    R4["~2,000 tokens<br/>Rung 4: Raw Code Window<br/>Policy-gated full source"]

    R1 e1@--> R2
    R2 e2@--> R3
    R3 e3@--> R4

    classDef source fill:#E7F8F2,stroke:#0F766E,stroke-width:2px,color:#102A43;
    classDef process fill:#E8F1FF,stroke:#2563EB,stroke-width:2px,color:#102A43;
    classDef decision fill:#FFF4D6,stroke:#B45309,stroke-width:2px,color:#102A43;
    classDef storage fill:#F2E8FF,stroke:#7C3AED,stroke-width:2px,color:#102A43;
    classDef output fill:#FFE8EF,stroke:#BE123C,stroke-width:2px,color:#102A43;
    classDef muted fill:#F8FAFC,stroke:#64748B,stroke-width:1px,color:#102A43;
    classDef animate stroke:#0F766E,stroke-width:2px,stroke-dasharray:10\,5,stroke-dashoffset:900,animation:dash 22s linear infinite;
    class e1,e2,e3 animate;
Loading

Most questions are answered at Rungs 1-2 without ever reading raw code. That's where the token savings come from.

Scenario Reading the file Using the Ladder Savings
"What does parseConfig accept?" ~2,000 tok ~100 tok 20x
"Show me the shape of AuthService" ~4,000 tok ~300 tok 13x
"Where is this.cache set?" ~2,000 tok ~500 tok 4x

Why it matters:

  • 4โ€“20x token savings on typical code understanding queries
  • Most questions answered at Rungs 1โ€“2 without ever reading raw code
  • Controlled escalation prevents agents from over-consuming context
  • Policy-gated raw access ensures agents prove they need full source

Iris Gate Ladder Deep Dive โ†’




Feature Tour

Symbol Cards โ€” The Atoms of Understanding

Every function, class, interface, type, and variable becomes a Symbol Card: a compact metadata record (~100 tokens) containing everything an agent needs to understand a symbol without reading its code.

%%{init: {"theme":"base","themeVariables":{"background":"#ffffff","primaryColor":"#E7F8F2","primaryBorderColor":"#0F766E","primaryTextColor":"#102A43","secondaryColor":"#E8F1FF","secondaryBorderColor":"#2563EB","secondaryTextColor":"#102A43","tertiaryColor":"#FFF4D6","tertiaryBorderColor":"#B45309","tertiaryTextColor":"#102A43","lineColor":"#0F766E","textColor":"#102A43","fontFamily":"Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, Segoe UI, sans-serif"},"flowchart":{"curve":"basis","htmlLabels":true}}}%%
flowchart TB
    Card["Symbol Card: validateToken"]
    Kind["Kind: function (exported)"]
    File["File: src/auth/jwt.ts:42-67"]
    Signature["Signature: (token: string, opts?: ValidateOpts) -> Promise<DecodedToken>"]
    Summary["Summary: validates JWT signature and expiration"]
    Invariants["Invariants: throws on expired token"]
    SideEffects["Side effects: logs to audit trail"]
    Deps["Dependencies: verifySignature, checkExpiry, jsonwebtoken, AuditLogger"]
    Metrics["Metrics: fan-in 12, fan-out 4, churn 3/30d"]
    Context["Context: auth-module, request-pipeline, auth.test.ts"]
    ETag["ETag: a7f3c2..."]

    Card e1@--> Kind
    Kind e2@--> File
    File e3@--> Signature
    Signature e4@--> Summary
    Summary e5@--> Invariants
    Invariants e6@--> SideEffects
    SideEffects e7@--> Deps
    Deps e8@--> Metrics
    Metrics e9@--> Context
    Context e10@--> ETag

    classDef source fill:#E7F8F2,stroke:#0F766E,stroke-width:2px,color:#102A43;
    classDef process fill:#E8F1FF,stroke:#2563EB,stroke-width:2px,color:#102A43;
    classDef decision fill:#FFF4D6,stroke:#B45309,stroke-width:2px,color:#102A43;
    classDef storage fill:#F2E8FF,stroke:#7C3AED,stroke-width:2px,color:#102A43;
    classDef output fill:#FFE8EF,stroke:#BE123C,stroke-width:2px,color:#102A43;
    classDef muted fill:#F8FAFC,stroke:#64748B,stroke-width:1px,color:#102A43;
    classDef animate stroke:#0F766E,stroke-width:2px,stroke-dasharray:10\,5,stroke-dashoffset:900,animation:dash 22s linear infinite;
    class e1,e2,e3,e4,e5,e6,e7,e8,e9,e10 animate;
Loading

Cards include confidence-scored call resolution (the pass-2 resolver traces imports, aliases, barrel re-exports, and tagged templates to produce accurate dependency edges), community detection (cluster membership), and call-chain tracing (process participation with entry/intermediate/exit roles).

Why it matters:

  • ~100 tokens per symbol vs. ~2,000 tokens to read the full file
  • Confidence-scored dependency edges trace real call relationships across files
  • Community detection and call-chain tracing reveal architectural structure
  • ETag-based conditional requests avoid re-fetching unchanged symbols
  • Workflow ETag caching now seeds slice.build with knownCardEtags so repeated slice builds can skip unchanged cards

Indexing & Language Support Deep Dive โ†’


Graph Slicing โ€” The Right Context for Every Task

Instead of reading files in the same directory, SDL-MCP follows the dependency graph. Starting from symbols relevant to your task, it traverses weighted edges (call: 1.0, config: 0.8, import: 0.6), scores each symbol by relevance, and returns the N most important within a token budget.

%%{init: {"theme":"base","themeVariables":{"background":"#ffffff","primaryColor":"#E7F8F2","primaryBorderColor":"#0F766E","primaryTextColor":"#102A43","secondaryColor":"#E8F1FF","secondaryBorderColor":"#2563EB","secondaryTextColor":"#102A43","tertiaryColor":"#FFF4D6","tertiaryBorderColor":"#B45309","tertiaryTextColor":"#102A43","lineColor":"#0F766E","textColor":"#102A43","fontFamily":"Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, Segoe UI, sans-serif"},"flowchart":{"curve":"basis","htmlLabels":true}}}%%
flowchart TD
    Task["Task: Fix the auth middleware"] e1@--> Slice["sdl.slice.build"]
    Slice e2@--> Auth["authenticate"]
    Slice e3@--> Validate["validateToken"]
    Slice e4@--> Config["JwtConfig"]
    Auth e5@--> Hash["hashPassword"]
    Validate e6@--> User["getUserById"]
    Config e7@--> Env["envLoader"]
    Env e8@-. frontier outside budget .-> Frontier["spillover frontier"]

    classDef source fill:#E7F8F2,stroke:#0F766E,stroke-width:2px,color:#102A43;
    classDef process fill:#E8F1FF,stroke:#2563EB,stroke-width:2px,color:#102A43;
    classDef decision fill:#FFF4D6,stroke:#B45309,stroke-width:2px,color:#102A43;
    classDef storage fill:#F2E8FF,stroke:#7C3AED,stroke-width:2px,color:#102A43;
    classDef output fill:#FFE8EF,stroke:#BE123C,stroke-width:2px,color:#102A43;
    classDef muted fill:#F8FAFC,stroke:#64748B,stroke-width:1px,color:#102A43;
    classDef animate stroke:#0F766E,stroke-width:2px,stroke-dasharray:10\,5,stroke-dashoffset:900,animation:dash 22s linear infinite;
    class e1,e2,e3,e4,e5,e6,e7,e8 animate;
Loading

Slices have handles, leases, refresh (delta-only updates), and spillover (paged overflow). You can also skip the symbol search entirely โ€” pass a taskText string and SDL-MCP auto-discovers the relevant entry symbols.

Why it matters:

  • Follows the dependency graph, not directory boundaries, for cross-cutting context
  • Weighted edge scoring (call > config > import) prioritizes the most relevant symbols
  • Token-budgeted: returns only what fits within your budget (~800 tokens vs. ~16,000 for raw files)
  • Natural-language task-text auto-discovers entry symbols โ€” no symbol IDs needed

Graph Slicing Deep Dive โ†’


Delta Packs & Blast Radius โ€” Semantic Change Intelligence

git diff tells you what lines changed. SDL-MCP tells you what that change means and who's affected.

%%{init: {"theme":"base","themeVariables":{"background":"#ffffff","primaryColor":"#E7F8F2","primaryBorderColor":"#0F766E","primaryTextColor":"#102A43","secondaryColor":"#E8F1FF","secondaryBorderColor":"#2563EB","secondaryTextColor":"#102A43","tertiaryColor":"#FFF4D6","tertiaryBorderColor":"#B45309","tertiaryTextColor":"#102A43","lineColor":"#0F766E","textColor":"#102A43","fontFamily":"Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, Segoe UI, sans-serif"},"flowchart":{"curve":"basis","htmlLabels":true}}}%%
flowchart TD
    Change["Modified validateToken() signature"]
    Sig["signatureDiff<br/>added options?: object"]
    Inv["invariantDiff<br/>added throws on expired"]
    Fx["sideEffectDiff<br/>added logs to audit trail"]
    Blast["Blast radius"]
    A1["authenticate()<br/>distance 1"]
    A2["refreshSession()<br/>distance 1"]
    A3["AuthMiddleware<br/>distance 2"]
    A4["auth.test.ts<br/>re-run recommended"]

    Change e1@--> Sig
    Change e2@--> Inv
    Change e3@--> Fx
    Sig e4@--> Blast
    Inv e5@--> Blast
    Fx e6@--> Blast
    Blast e7@--> A1
    Blast e8@--> A2
    Blast e9@--> A3
    Blast e10@--> A4

    classDef source fill:#E7F8F2,stroke:#0F766E,stroke-width:2px,color:#102A43;
    classDef process fill:#E8F1FF,stroke:#2563EB,stroke-width:2px,color:#102A43;
    classDef decision fill:#FFF4D6,stroke:#B45309,stroke-width:2px,color:#102A43;
    classDef storage fill:#F2E8FF,stroke:#7C3AED,stroke-width:2px,color:#102A43;
    classDef output fill:#FFE8EF,stroke:#BE123C,stroke-width:2px,color:#102A43;
    classDef muted fill:#F8FAFC,stroke:#64748B,stroke-width:1px,color:#102A43;
    classDef animate stroke:#0F766E,stroke-width:2px,stroke-dasharray:10\,5,stroke-dashoffset:900,animation:dash 22s linear infinite;
    class e1,e2,e3,e4,e5,e6,e7,e8,e9,e10 animate;
Loading

PR risk analysis (sdl.pr.risk.analyze) wraps this into a scored assessment with findings, evidence, and test recommendations. Fan-in trend analysis detects "amplifier" symbols whose growing dependency count means changes ripple further over time.

Why it matters:

  • Semantic diffs show what a change means, not just what lines moved
  • Ranked blast radius identifies which dependent symbols are most at risk
  • Fan-in trend analysis detects "amplifier" symbols whose changes ripple further over time
  • PR risk scoring produces actionable findings with test re-run recommendations

Delta & Blast Radius Deep Dive โ†’


Live Indexing โ€” Real-Time Code Intelligence

SDL-MCP doesn't wait for you to save. As you type in your editor, buffer updates are pushed to an in-memory overlay store, parsed in the background, and merged with the durable database. Search, cards, and slices reflect your current code, not your last save.

%%{init: {"theme":"base","themeVariables":{"background":"#ffffff","primaryColor":"#E7F8F2","primaryBorderColor":"#0F766E","primaryTextColor":"#102A43","secondaryColor":"#E8F1FF","secondaryBorderColor":"#2563EB","secondaryTextColor":"#102A43","tertiaryColor":"#FFF4D6","tertiaryBorderColor":"#B45309","tertiaryTextColor":"#102A43","lineColor":"#0F766E","textColor":"#102A43","fontFamily":"Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, Segoe UI, sans-serif"},"flowchart":{"curve":"basis","htmlLabels":true}}}%%
flowchart LR
    Editor["Editor keystrokes"] e1@--> Push["sdl.buffer.push"]
    Push e2@--> Overlay["Overlay store"]
    Overlay e3@--> Reads["Merged reads<br/>search, cards, slices"]
    Overlay e4@--> Persist["save / idle checkpoint"]
    Persist e5@--> DB["LadybugDB durable graph"]

    classDef source fill:#E7F8F2,stroke:#0F766E,stroke-width:2px,color:#102A43;
    classDef process fill:#E8F1FF,stroke:#2563EB,stroke-width:2px,color:#102A43;
    classDef decision fill:#FFF4D6,stroke:#B45309,stroke-width:2px,color:#102A43;
    classDef storage fill:#F2E8FF,stroke:#7C3AED,stroke-width:2px,color:#102A43;
    classDef output fill:#FFE8EF,stroke:#BE123C,stroke-width:2px,color:#102A43;
    classDef muted fill:#F8FAFC,stroke:#64748B,stroke-width:1px,color:#102A43;
    classDef animate stroke:#0F766E,stroke-width:2px,stroke-dasharray:10\,5,stroke-dashoffset:900,animation:dash 22s linear infinite;
    class e1,e2,e3,e4,e5 animate;
Loading

Why it matters:

  • Search, cards, and slices reflect unsaved editor changes in real time
  • No manual re-index needed during active development
  • Background AST parsing with in-memory overlay keeps queries fast

Live Indexing Deep Dive โ†’


Governance & Policy โ€” Controlled Access

Raw code access (Rung 4) is policy-gated. Agents must provide:

  • A reason explaining why they need raw code
  • Identifiers they expect to find in the code
  • An expected line count within configured limits

Requests that don't meet policy are denied with actionable guidance ("try getHotPath with these identifiers instead"). Every access is audit-logged.

The sandboxed runtime execution tool (sdl.runtime.execute) has its own governance layer: enabled by default, but still guarded by executable allowlisting, CWD jailing, environment scrubbing, concurrency limits, and timeout enforcement. The outputMode parameter ("minimal" | "summary" | "intent") defaults to "minimal" for ~95% token savings, with sdl.runtime.queryOutput enabling on-demand output retrieval when needed.

Why it matters:

  • Proof-of-need gating prevents agents from wastefully reading raw code
  • Denied requests include actionable next-best-action guidance
  • Full audit logging of every code access decision
  • Sandboxed runtime with executable allowlisting, CWD jailing, and environment scrubbing

Governance & Policy Deep Dive โ†’


Agent Context โ€” Task-Shaped Retrieval

sdl.context is SDL-MCP's task-shaped context engine. Give it a task type (debug, review, implement, explain), a description, and a budget โ€” it selects the right Iris Gate rungs, collects evidence, and returns context tuned to the job. In Code Mode, sdl.context provides the same retrieval surface without dropping into sdl.workflow.

The feedback loop (sdl.agent.feedback) records which symbols were useful and which were missing, improving future slice quality.

For portable exports such as tickets and PR descriptions, use the CLI sdl-mcp summary command. It generates token-bounded context briefings in markdown, JSON, or clipboard format for use outside MCP environments.

Why it matters:

  • Task-shaped context retrieval plans the right Iris Gate path within a token budget
  • Feedback loop records what was useful/missing, improving future slice quality
  • Portable context summaries export findings for use outside MCP environments

Agent Context Deep Dive โ†’ ยท Context Modes โ†’


Sandboxed Runtime Execution

Run tests, linters, and scripts through SDL-MCP's governance layer instead of uncontrolled shell access. 16 runtimes (Node.js, Python, Go, Java, Rust, Shell, and more), code-mode or args-mode, smart output summarization with keyword-matched excerpts, and gzip artifact persistence.

Why it matters:

  • Run tests, linters, and scripts under governance instead of uncontrolled shell access
  • 16 runtimes supported (Node, Python, Go, Java, Rust, Shell, and more)
  • Executable allowlisting, CWD jailing, timeout enforcement, and environment scrubbing
  • Smart output summarization with keyword-matched excerpts and gzip artifact persistence

Runtime Execution Deep Dive โ†’


Development Memories โ€” Cross-Session Knowledge Persistence (Opt-In)

Agents forget everything between sessions. SDL-MCP fixes this with an opt-in graph-backed memory system that lets agents store decisions, bugfix context, and task notes linked directly to the symbols and files they relate to. Memory is disabled by default and must be explicitly enabled in the configuration. When enabled, memories are stored both in the graph database (for fast querying) and as checked-in markdown files (for version control and team sharing).

%%{init: {"theme":"base","themeVariables":{"background":"#ffffff","primaryColor":"#E7F8F2","primaryBorderColor":"#0F766E","primaryTextColor":"#102A43","secondaryColor":"#E8F1FF","secondaryBorderColor":"#2563EB","secondaryTextColor":"#102A43","tertiaryColor":"#FFF4D6","tertiaryBorderColor":"#B45309","tertiaryTextColor":"#102A43","lineColor":"#0F766E","textColor":"#102A43","fontFamily":"Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, Segoe UI, sans-serif"},"flowchart":{"curve":"basis","htmlLabels":true}}}%%
flowchart LR
    Session1["Agent session 1<br/>records bugfix memory"] e1@--> Store["sdl.memory.store"]
    Store e2@--> Graph["LadybugDB memory node"]
    Store e3@--> Files[".sdl-memory/bugfixes/<id>.md"]
    Graph e4@--> Link1["MEMORY_OF -> authenticate()"]
    Graph e5@--> Link2["HAS_MEMORY -> repo"]
    Session2["Agent session 2"] e6@--> Surface["sdl.memory.surface"]
    Surface e7@--> Graph
    Graph e8@--> Recall["Relevant memory surfaced<br/>race condition fix in authenticate()"]

    classDef source fill:#E7F8F2,stroke:#0F766E,stroke-width:2px,color:#102A43;
    classDef process fill:#E8F1FF,stroke:#2563EB,stroke-width:2px,color:#102A43;
    classDef decision fill:#FFF4D6,stroke:#B45309,stroke-width:2px,color:#102A43;
    classDef storage fill:#F2E8FF,stroke:#7C3AED,stroke-width:2px,color:#102A43;
    classDef output fill:#FFE8EF,stroke:#BE123C,stroke-width:2px,color:#102A43;
    classDef muted fill:#F8FAFC,stroke:#64748B,stroke-width:1px,color:#102A43;
    classDef animate stroke:#0F766E,stroke-width:2px,stroke-dasharray:10\,5,stroke-dashoffset:900,animation:dash 22s linear infinite;
    class e1,e2,e3,e4,e5,e6,e7,e8 animate;
Loading

When enabled, memories are automatically surfaced inside graph slices โ€” when an agent builds a slice touching symbols with linked memories, those memories appear alongside the cards. During re-indexing, memories linked to changed symbols are flagged as stale, prompting agents to review and update them. Four MCP tools (store, query, remove, surface) provide full CRUD plus intelligent ranking by confidence, recency, and symbol overlap. Memory tools are only available when memory is enabled in the configuration.

Why it matters:

  • Structured knowledge persists across sessions, linked directly to symbols and files
  • Opt-in and disabled by default โ€” enable via "memory": { "enabled": true } in config
  • When enabled, automatically surfaced inside graph slices when touching related symbols
  • Stale memories flagged when linked symbols change during re-indexing
  • Dual storage: graph DB for fast querying + markdown files for version control and team sharing

Development Memories Deep Dive โ†’


SCIP Integration โ€” Compiler-Grade Cross-References

Tree-sitter gives SDL-MCP fast, syntax-level symbol extraction across the supported TypeScript/JavaScript, Python, Go, Java, C#, C/C++, PHP, Rust, Kotlin, and Shell surface. SCIP (Source Code Intelligence Protocol) supplements this with compiler-grade cross-references from tools like scip-typescript, scip-go, and rust-analyzer. Generate a .scip index file, point SDL-MCP at it, and heuristic edges are upgraded to exact compiler-verified edges, external dependency symbols become first-class graph nodes, and new implements edges reveal interface/trait relationships that syntax analysis cannot discover.

%%{init: {"theme":"base","themeVariables":{"background":"#ffffff","primaryColor":"#E7F8F2","primaryBorderColor":"#0F766E","primaryTextColor":"#102A43","secondaryColor":"#E8F1FF","secondaryBorderColor":"#2563EB","secondaryTextColor":"#102A43","tertiaryColor":"#FFF4D6","tertiaryBorderColor":"#B45309","tertiaryTextColor":"#102A43","lineColor":"#0F766E","textColor":"#102A43","fontFamily":"Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, Segoe UI, sans-serif"},"flowchart":{"curve":"basis","htmlLabels":true}}}%%
flowchart LR
    Compiler["Compiler / Type Checker"] e1@--> SCIP[".scip index file"]
    SCIP e2@--> Ingest["sdl.scip.ingest"]
    Ingest e3@--> Upgrade["Heuristic edges โ†’ exact edges"]
    Ingest e4@--> External["External dependency nodes"]
    Ingest e5@--> Implements["implements edges"]

    classDef source fill:#E7F8F2,stroke:#0F766E,stroke-width:2px,color:#102A43;
    classDef process fill:#E8F1FF,stroke:#2563EB,stroke-width:2px,color:#102A43;
    classDef decision fill:#FFF4D6,stroke:#B45309,stroke-width:2px,color:#102A43;
    classDef storage fill:#F2E8FF,stroke:#7C3AED,stroke-width:2px,color:#102A43;
    classDef output fill:#FFE8EF,stroke:#BE123C,stroke-width:2px,color:#102A43;
    classDef muted fill:#F8FAFC,stroke:#64748B,stroke-width:1px,color:#102A43;
    classDef animate stroke:#0F766E,stroke-width:2px,stroke-dasharray:10\,5,stroke-dashoffset:900,animation:dash 22s linear infinite;
    class e1,e2,e3,e4,e5 animate;
Loading

Why it matters:

  • Upgrades heuristic call resolution to compiler-verified exact edges (confidence 0.95)
  • External dependencies (npm packages, Go modules, crate deps) become searchable graph nodes
  • Interface/trait implementations tracked via implements edges
  • Auto-ingest on sdl.index.refresh keeps SCIP data current with zero manual steps
  • Complementary: tree-sitter provides structure, SCIP provides semantic precision

SCIP Integration Deep Dive โ†’


CLI Tool Access โ€” No MCP Server Required

Access 30 SDL-MCP action aliases directly from the command line with sdl-mcp tool. No MCP server, transport, or SDK is required.

# Search for symbols
sdl-mcp tool symbol.search --query "handleAuth" --output-format pretty

# Build a task-scoped slice
sdl-mcp tool slice.build --task-text "debug auth flow" --max-cards 50

# Pipe JSON args, chain commands
echo '{"repoId":"my-repo"}' | sdl-mcp tool symbol.search --query "auth"

Features include typed argument coercion (string, number, boolean, string[], json), budget flag merging, stdin JSON piping with CLI-flags-win precedence, auto-resolved repoId from cwd, four output formats (json, json-compact, pretty, table), typo suggestions, and per-action --help. The CLI dispatches through the same gateway router and Zod schemas as the MCP server โ€” identical code paths, identical validation.

Why it matters:

  • 30 direct action aliases accessible from any terminal โ€” no server, transport, or SDK required
  • Same code paths and Zod validation as the MCP server โ€” identical behavior
  • Four output formats (json, json-compact, pretty, table) for scripting and CI pipelines
  • Auto-resolves repoId from cwd, supports stdin JSON piping and per-action --help

CLI Tool Access Deep Dive โ†’


Tool Gateway โ€” Compact Tool Registration

The tool gateway projects the 30 gateway-routable SDL actions into 4 namespace-scoped tools (sdl.query, sdl.code, sdl.repo, sdl.agent), reducing tools/list overhead from the full flat schema surface to a compact gateway surface.

%%{init: {"theme":"base","themeVariables":{"background":"#ffffff","primaryColor":"#E7F8F2","primaryBorderColor":"#0F766E","primaryTextColor":"#102A43","secondaryColor":"#E8F1FF","secondaryBorderColor":"#2563EB","secondaryTextColor":"#102A43","tertiaryColor":"#FFF4D6","tertiaryBorderColor":"#B45309","tertiaryTextColor":"#102A43","lineColor":"#0F766E","textColor":"#102A43","fontFamily":"Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, Segoe UI, sans-serif"},"flowchart":{"curve":"basis","htmlLabels":true}}}%%
flowchart LR
    Before["Flat mode<br/>33 tools<br/>2 universal + 31 flat"] e1@--> After["Gateway mode<br/>6 tools<br/>2 universal + 4 gateway"]
    After e2@--> Savings["Smaller tools/list payload<br/>lower agent startup overhead"]

    classDef source fill:#E7F8F2,stroke:#0F766E,stroke-width:2px,color:#102A43;
    classDef process fill:#E8F1FF,stroke:#2563EB,stroke-width:2px,color:#102A43;
    classDef decision fill:#FFF4D6,stroke:#B45309,stroke-width:2px,color:#102A43;
    classDef storage fill:#F2E8FF,stroke:#7C3AED,stroke-width:2px,color:#102A43;
    classDef output fill:#FFE8EF,stroke:#BE123C,stroke-width:2px,color:#102A43;
    classDef muted fill:#F8FAFC,stroke:#64748B,stroke-width:1px,color:#102A43;
    classDef animate stroke:#0F766E,stroke-width:2px,stroke-dasharray:10\,5,stroke-dashoffset:900,animation:dash 22s linear infinite;
    class e1,e2 animate;
Loading

Each gateway tool accepts an action discriminator field (e.g., { action: "symbol.search", repoId: "x", query: "auth" }) and routes to the same handlers with double Zod validation. Thin wire schemas in tools/list keep the registration compact while full validation happens server-side. The flat-only sdl.file.write action remains outside gateway mode today.

Why it matters:

  • Large reduction in tools/list overhead for gateway-first agents
  • 30 gateway-routable actions consolidated into 4 namespace-scoped tools for simpler agent selection
  • Fewer tool choices means faster and more accurate tool dispatch by the agent
  • Choose Code Mode for task-shaped retrieval first; opt out of exclusive Code Mode when you also need regular flat or gateway tools

Tool Gateway Deep Dive โ†’




Current Tool Surface at a Glance

Mode Tool count Composition
Flat 33 2 universal + 31 flat tools
Gateway 6 2 universal + 4 gateway tools
Gateway + legacy 37 2 universal + 4 gateway + 31 flat tools
Code Mode exclusive 4 sdl.action.search, sdl.context, sdl.manual, sdl.workflow

The generated source of truth is docs/generated/tool-inventory.md.

CategoryToolOne-Line Description
Repository sdl.repo.registerRegister a codebase for indexing
sdl.repo.statusHealth, versions, watcher, prefetch, live-index stats
sdl.repo.overviewCodebase summary: stats, directories, hotspots, clusters, with conditional ETag fetch support
sdl.index.refreshTrigger full or incremental re-indexing
Live Buffer sdl.buffer.pushPush unsaved editor content for real-time indexing
sdl.buffer.checkpointForce-write pending buffers to the durable database
sdl.buffer.statusLive indexing diagnostics and queue depth
Symbols sdl.symbol.searchSearch symbols by name (with optional semantic reranking)
sdl.symbol.getCardGet one card or batch-fetch up to 100 cards with ETag-based conditional support
Slices sdl.slice.buildBuild a task-scoped dependency subgraph
sdl.slice.refreshDelta-only update of an existing slice
sdl.slice.spillover.getPage through overflow symbols beyond the budget
Code Access sdl.code.getSkeletonSignatures + control flow, bodies elided, with conditional ETag fetch support
sdl.code.getHotPathLines matching specific identifiers + context, with conditional ETag fetch support
sdl.code.needWindowFull source code (policy-gated, requires justification)
Deltas sdl.delta.getSemantic diff + blast radius between versions
Policy sdl.policy.getRead current gating policy
sdl.policy.setUpdate line/token limits and identifier requirements
Risk sdl.pr.risk.analyzeScored PR risk with findings and test recommendations
Agent sdl.agent.feedbackRecord which symbols were useful or missing
sdl.agent.feedback.queryQuery aggregated feedback statistics
Runtime sdl.runtime.executeSandboxed subprocess execution with outputMode (minimal/summary/intent)
sdl.runtime.queryOutputOn-demand retrieval and keyword search of stored output artifacts
Memory sdl.memory.storeStore or update a development memory with symbol/file links
sdl.memory.querySearch memories by text, type, tags, or linked symbols
sdl.memory.removeSoft-delete a memory from graph and optionally from disk
sdl.memory.surfaceAuto-surface relevant memories for a task context
Code Mode sdl.contextCode Mode task-shaped context retrieval for explain/debug/review/implement work
sdl.workflowMulti-step operations with budget tracking, ETag caching, and transforms
sdl.manualSelf-documentation โ€” query usage guide, action schemas, output format reference
SCIP sdl.scip.ingestIngest a pre-built SCIP index for compiler-grade cross-references (with dry-run support)
File sdl.file.readRead non-indexed files (configs, docs, templates) with line-range, search, or JSON-path modes
sdl.file.writePolicy-aware write helper for non-indexed files and templates
Meta sdl.infoRuntime diagnostics โ€” version, Node.js, platform, database, config paths
sdl.usage.statsSession and lifetime token savings statistics
sdl.action.searchSearch SDL action catalog to discover the right tool for a task

Complete MCP Tools Reference (detailed parameters & responses) โ†’




CLI Commands

Command Description
sdl-mcp init Bootstrap config, detect repo/languages, optionally auto-index
sdl-mcp doctor Validate runtime, config, DB, grammars, repo access
sdl-mcp index Index repositories (with optional --watch mode)
sdl-mcp serve Start MCP server (--stdio or --http)
sdl-mcp tool Access 30 direct action aliases (docs)
sdl-mcp info Runtime diagnostics โ€” version, Node.js, platform, database, config
sdl-mcp summary Generate copy/paste context summaries from the CLI
sdl-mcp health Compute composite health score with badge/JSON output
sdl-mcp benchmark Run CI regression benchmarks
sdl-mcp export Export sync artifact
sdl-mcp import Import sync artifact
sdl-mcp pull Pull by version/commit with fallback
sdl-mcp version Show version and environment info

CLI Reference โ†’ ยท Configuration Reference โ†’




Compatible With

SDL-MCP works with any MCP-compatible client:

Client Transport Setup
Claude Code stdio sdl-mcp init --client claude-code
Claude Desktop stdio sdl-mcp init --client claude-code
Cursor stdio Standard MCP server config
Windsurf stdio Standard MCP server config
Codex CLI stdio sdl-mcp init --client codex
Gemini CLI stdio sdl-mcp init --client gemini
OpenCode stdio sdl-mcp init --client opencode
Any MCP client stdio / http sdl-mcp serve --stdio or --http

A VSCode extension (sdl-mcp-vscode/) provides live buffer integration for real-time indexing of unsaved edits.




Tech Stack

Component Technology
Runtime Node.js 24+ / TypeScript 5.9+ (strict ESM)
Graph Database LadybugDB (embedded, single-file)
Indexer (default) Rust via napi-rs (multi-threaded)
Indexer (fallback) tree-sitter + tree-sitter-typescript
MCP SDK @modelcontextprotocol/sdk
Validation Zod schemas for all payloads
Transports stdio (agents) ยท HTTP (dev/network)



System Architecture

%%{init: {"theme":"base","themeVariables":{"background":"#ffffff","primaryColor":"#E7F8F2","primaryBorderColor":"#0F766E","primaryTextColor":"#102A43","secondaryColor":"#E8F1FF","secondaryBorderColor":"#2563EB","secondaryTextColor":"#102A43","tertiaryColor":"#FFF4D6","tertiaryBorderColor":"#B45309","tertiaryTextColor":"#102A43","lineColor":"#0F766E","textColor":"#102A43","fontFamily":"Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, Segoe UI, sans-serif"},"flowchart":{"curve":"basis","htmlLabels":true}}}%%
flowchart TD
    Clients["MCP clients<br/>Claude Code, Claude Desktop, Cursor, Windsurf, Codex, Gemini"]
    Gateway["Tool gateway<br/>sdl.query, sdl.code, sdl.repo, sdl.agent"]
    Flat["Flat tools and optional code-mode surfaces"]
    Policy["Policy engine<br/>proof-of-need, budgets, audit logging"]
    Graph["LadybugDB graph<br/>symbols, edges, files, versions, memories"]
    Indexer["Indexer pipeline<br/>Rust native or Tree-sitter fallback<br/>pass 1, pass 2, semantic enrichment"]

    Clients e1@--> Gateway
    Clients e2@--> Flat
    Gateway e3@--> Policy
    Flat e4@--> Policy
    Policy e5@--> Graph
    Indexer e6@--> Graph

    classDef source fill:#E7F8F2,stroke:#0F766E,stroke-width:2px,color:#102A43;
    classDef process fill:#E8F1FF,stroke:#2563EB,stroke-width:2px,color:#102A43;
    classDef decision fill:#FFF4D6,stroke:#B45309,stroke-width:2px,color:#102A43;
    classDef storage fill:#F2E8FF,stroke:#7C3AED,stroke-width:2px,color:#102A43;
    classDef output fill:#FFE8EF,stroke:#BE123C,stroke-width:2px,color:#102A43;
    classDef muted fill:#F8FAFC,stroke:#64748B,stroke-width:1px,color:#102A43;
    classDef animate stroke:#0F766E,stroke-width:2px,stroke-dasharray:10\,5,stroke-dashoffset:900,animation:dash 22s linear infinite;
    class e1,e2,e3,e4,e5,e6 animate;
Loading

Full Architecture Documentation โ†’




Documentation

Document Description
Getting Started Installation, 5-minute setup, MCP client config
MCP Tools Reference Detailed docs for the current flat, gateway, and Code Mode surfaces
CLI Reference All CLI commands and options
Configuration Reference Every config option with defaults and guidance
Agent Workflows Workflow instructions for CLAUDE.md / AGENTS.md
Architecture Tech stack, data flow, component diagram
Iris Gate Ladder Context escalation methodology
Troubleshooting Common issues and fixes

Feature Deep Dives

Topic What You'll Learn
Iris Gate Ladder Four-rung context escalation with token savings analysis
Graph Slicing BFS/beam search, edge weights, wire formats, auto-discovery
Delta & Blast Radius Semantic diffs, ranked impact analysis, PR risk scoring
Live Indexing Real-time editor buffer integration and overlay architecture
Governance & Policy Proof-of-need gating, audit logging, runtime sandboxing
Agent Context Task-shaped context retrieval, feedback loops, portable context summaries
Context Modes Precise vs broad retrieval, adaptive symbol ranking, benchmark trade-offs
Indexing & Languages Rust/TS engines, two-pass architecture, 12-language support
Runtime Execution Sandboxed subprocess execution with governance
CLI Tool Access Direct CLI access to 30 action aliases, output formats, stdin piping, scripting
Tool Gateway 30 gateway-routable actions, 4 namespace tools, thin schemas, migration guide
Semantic Engine Pass-2 call resolution, embedding search, LLM summaries, confidence scoring
Semantic Embeddings Setup Dependencies, model installation, provider configuration, tier-by-tier setup
Code Mode sdl.context, sdl.workflow, action discovery, manual reference, one-call workflows
Development Memories Graph-backed cross-session memory, file sync, staleness detection, auto-surfacing
SCIP Integration Compiler-grade cross-references, external deps, implements edges, auto-ingest
Token Savings Meter Per-call meter, session summaries, lifetime tracking, sdl.usage.stats



License

This project is source-available.

  • Free Use (Community License): You may use, run, and modify this software for any purpose, including internal business use, under the terms in LICENSE.
  • Commercial Distribution / Embedding: You must obtain a commercial license before you sell, license, sublicense, bundle, embed, or distribute this software as part of a for-sale or monetized product. See COMMERCIAL_LICENSE.md.

Questions? Contact gmullins.gkc@gmail.com.

Release History

VersionChangesUrgencyDate
v0.11.4๏ปฟ### Added - Added outcome-trained predictive context policy storage and observability: prefetch outcomes now persist to LadybugDB, aggregate by repo/task/client/strategy/resource kind, and surface safe-mode suppression/boost metrics in `repo.status` and `/ui/observability`. ### Changed - Default semantic indexing now uses specialized embedding lanes: Jina for Symbol embeddings and Nomic for FileSummary embeddings. Added `semantic.embeddingProfile`, `symbolEmbeddingModels`, and `fileSummHigh5/21/2026
v0.11.3๏ปฟ## [0.11.3] - 2026-05-14 ### Added - Added a dependency-free `/ui/config` visual configuration admin console with loopback-only write APIs, schema/semantic validation, redacted raw/effective snapshots, atomic save/backup/rollback, high-risk diff confirmation, and reusable JSON Pointer profiles. - Added opt-in phase timing diagnostics for `sdl.context`, `sdl.workflow`, `sdl.runtime.execute`, and `sdl.file`, plus observability aggregation for per-tool phase p95/max latency and LadybugDB quHigh5/14/2026
v0.11.2## [0.11.2] - 2026-05-11 ### Added - Semantic enrichment bridge V1 with provider-neutral config/types, SCIP > LSP source selection, explicit refresh/status actions, lightweight stdio LSP client support, and LadybugDB provider-run/provenance/precision tables. - Semantic enrichment V2 TypeScript/JavaScript LSP call-definition enrichment that plans tree-sitter call candidates, queries configured stdio LSP servers, and writes exact call edges through the generic semantic writer. - Generic LSPHigh5/11/2026
v0.11.0## [0.11.0] - 2026-05-07 ### Performance - **Pass-2 read amplification eliminated (A1).** Each language resolver previously did `getFileByRepoPath` per imported module + `getSymbolsByFile` per resolved target file โ€” ~30k point reads per refresh on a 1000-file TS repo. New pass-level `Pass2ImportCache` (in `src/indexer/pass2/types.ts`) populated once at dispatcher start with two batched reads (`getFilesByRepo` + new `getExportedSymbolsLiteByFileIds`); resolvers do O(1) map High5/7/2026
v0.10.10## Highlights `packed` line-oriented wire format ships across slice/search/context with a token-aware auto-gate (~45% token savings on representative slices, 8/8 emitting packed). Concurrent `serve --stdio` no longer corrupts the LadybugDB WAL. Cross-platform fix for `sdl-mcp init`. **Breaking**: compact wire formats v1 and v2 retired. ## Added โ€” `packed` wire format - **New `wireFormat: "packed"` and `"auto"` for `sdl.slice.build`, plus optional `wireFormat` on `sdl.symbol.search` and `sdl.cHigh4/28/2026
v0.10.8## โš ๏ธ Migration for existing users Your `CLAUDE.md` / `AGENTS.md` / `GEMINI.md` / `CODEX.md` likely still contain the inlined SDL-MCP workflow from earlier versions. **Remove those sections** and replace them with a single pointer near the top of each file: ```markdown > Optimized tool-use workflow for agents: see [SDL.md](./SDL.md). ``` `SDL.md` now owns the canonical decision ladder, budget patterns, and anti-patterns. Keeping the workflow in one file means future agent-behavior updHigh4/23/2026
v0.10.7### Added - **`sdl.context` defaults to hybrid retrieval end-to-end**: hybrid seeding (entitySearch via FTS + vector + RRF) now runs **alongside** path-inference, not instead of it. Path-inferred refs are preserved first; hybrid adds semantically related refs the heuristic misses. `TaskOptions.semantic` (default `true`) and `TaskOptions.includeRetrievalEvidence` (default `true`) toggle the behavior. - **Retrieval evidence surfaced on `sdl.context` responses**: `ContextSeedResult` gainHigh4/20/2026
models-v1Mirror of the ONNX embedding models used by SDL-MCP's semantic retrieval, for use as a fallback when HuggingFace is unavailable. Fetched automatically by `scripts/postinstall-models.mjs` when the primary HuggingFace download fails. ## Assets ### jina-embeddings-v2-base-code (~162 MB) Primary: https://huggingface.co/jinaai/jina-embeddings-v2-base-code ### nomic-embed-text-v1.5 (~137 MB) Primary: https://huggingface.co/nomic-ai/nomic-embed-text-v1.5 Both models are 768-dim quantized ONNX.High4/19/2026
v0.10.6## v0.10.6 โ€” Stability & Tool UX Fixes ### โš ๏ธ Important: Write Pool Rollback The write connection pool introduced in v0.10.5 (4 warm connections with two-layer concurrency control) has been **reverted to a single serialized write connection**. LadybugDB has a known bug where concurrent writes on separate connections can trigger N-API GC crashes and use-after-free in native code. **The bug has been patched upstream but not yet released.** This rollback trades write throughput for stability untiHigh4/19/2026
v0.10.5# SDL-MCP v0.10.5 ## Important: Default Embedding Model Changed **Action Required for Existing Users**: This release changes the default embedding model from `all-MiniLM-L6-v2` (384-dim, 256-token) to `jina-embeddings-v2-base-code` (768-dim, 8192-token). If you have an existing SDL-MCP installation with semantic search enabled, you need to: 1. **Update your config** - The config field `embedding.model` now defaults to `"jina-embeddings-v2-base-code"`. If you explicitly set a model, verify itHigh4/14/2026
v0.10.4## Highlights - Added SCIP ingestion for compiler-grade cross-references, including the `sdl.scip.ingest` tool and optional `scip-io` pre-refresh generation with auto-install support. - Added graph analytics for ranking and exploration: persisted PageRank/K-core metrics, Louvain shadow clusters, and blast-radius path explanations. - Expanded resolver and indexing depth across Java, Python, Rust, and Shell, with shared confidence scoring, pass-2 telemetry, and stronger Rust-native pass-1 parity High4/11/2026
v0.10.3## What's Changed ### Added - **Jina embeddings v2 base-code model** support for semantic symbol search alongside nomic-embed-text. - **Graph-guided cluster expansion** โ€” cluster neighbor expansion now uses graph edges for diversity instead of flat member lists. - **Confidence-aware context planning** โ€” the Planner adjusts rung paths based on confidence tiers (high confidence โ†’ cheapest plan, low โ†’ deeper rungs). - **Evidence-aware context symbol ranking** โ€” retrieved symbols ranked by retrievHigh4/4/2026
v0.10.2## v0.10.2 โ€” Tool Quality, Behavioral Summaries & Stability 36 commits since v0.10.1 with major improvements across all MCP tools. ### Highlights **๐Ÿ”„ Breaking: Tool Renaming** - `sdl.agent.orchestrate` โ†’ `sdl.agent.context` - `sdl.chain` โ†’ `sdl.workflow` - Run `sdl-mcp init` to regenerate CLAUDE.md/AGENTS.md templates **๐Ÿง  Behavioral Function Summaries** Replaced type-restating summaries ("Builds X from string returning void") with body analysis that describes what functions actually do (vaMedium4/2/2026
v0.10.1## SDL-MCP v0.10.1 This release includes 9 commits since `v0.10.0`, focused on telemetry accuracy, code decomposition, benchmark modernization, and CI hardening. ### Behavior changes - `repo.status` `surfaceMemories` now defaults to `false`. Pass `surfaceMemories: true` explicitly when memories are needed. ### Improvements - **Tool decomposition**: Extracted `src/mcp/tools/index.ts` (370 lines) into declarative `tool-descriptors.ts` with `ToolDescriptor` interface and `buildFlatToolDescriptMedium3/28/2026
v0.10.0## SDL-MCP v0.10.0 This release includes 63 commits since `v0.9.3`. ### Breaking changes - Minimum Node.js version is now 24. - Node 20 and 22 are no longer supported runtime targets. - TypeScript target moved to ES2024. ### Highlights - Added a staged hybrid retrieval stack (Stages 0-3), including a dedicated `src/retrieval/` subsystem and model-aware retrieval flow. - Added retrieval schema/index upgrades (inline Symbol embeddings, migration `m007`, Kuzu FTS/vector lifecycle support, StagMedium3/27/2026
v0.9.3## Fix: Node 24 compatibility for tree-sitter native addon ### Problem Installing sdl-mcp on Node.js 24 failed during the `tree-sitter` native addon compilation: ``` v8config.h(13,1): error C1189: #error: "C++20 or later required." ``` The upstream `tree-sitter` 0.25.0 npm package forces `/std:c++17` in its `binding.gyp`, but Node 24's V8 headers require C++20. The upstream package [has not been updated](https://github.com/tree-sitter/tree-sitter/issues/5334) to match the library's 0.26.x reMedium3/24/2026
v0.9.2## Changes since v0.9.1 ### Added - User-visible token savings meter via MCP logging notifications (`notifications/message`) - Per-call: compact meter bar showing that call's savings (for example, `โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–‘โ–‘ 84%`) - End-of-task: session + lifetime cumulative stats sent when `sdl.usage.stats` is called - Human-readable tool call formatter with concise per-tool summaries while keeping JSON responses unchanged for the LLM - `logging` capability declared in MCP Server capabilities - Repo ovMedium3/23/2026
v0.9.1## Changes since v0.9.0 ### Added - Unified runtime diagnostics via CLI `sdl-mcp info` and MCP `sdl.info` - `prepare-release` and `inspector` npm workflows for release preflight and MCP inspection ### Changed - MCP tool registration now publishes human-friendly titles, version-stamped descriptions, and shared request normalization across flat, gateway, and CLI tool-dispatch surfaces - Gateway `tools/list` schemas now preserve action-specific fields, descriptions, and defaults instead of collLow3/20/2026
v0.9.0## v0.9.0 โ€” Memory System, Code-Mode Chaining, Call Edge Resolution ### Highlights - **Development Memory System** โ€” Four new MCP tools (`sdl.memory.store`, `sdl.memory.query`, `sdl.memory.remove`, `sdl.memory.surface`) backed by graph database persistence with file sync to `.sdl-memory/`. Memories attach to symbols, files, and repos, and are automatically surfaced for relevant tasks. - **Code-Mode Tool Chaining** โ€” New `sdl.code.chain` tool executes multi-step tool chains with budget trackinLow3/17/2026
v0.8.9Ci fixes and improved test coverage.Low3/15/2026
v0.8.8 ### Added - CLI tool access for direct MCP action invocation, including argument parsing, dispatch, structured output, and gateway-focused test coverage - Tool gateway routing plus compact and thin schemas to reduce MCP token overhead, alongside measurement tooling and config-schema support - Graph slice orchestration with beam-search start-node resolution, graph snapshot caching, serialization, and supporting metrics/repository integration ### Changed - Local semantic embedding supLow3/15/2026
v0.8.7### Added - Multi-language Rust native extraction now covers Python, Go, Java, C, Shell, Rust, C#, C++, and PHP symbol, import, and call extraction, plus richer doc-comment, invariant, side-effect, and role detection - Pass2 and indexer resolution coverage now includes C#, C++, C, Shell, Python, Kotlin, Rust, and PHP adapters, with matching resolve-call harness and stress tooling updates - Local semantic embedding runtime support and the new `sdl.runtime` tool broaden the runtime surface foLow3/13/2026
v0.8.6## Added - Shared startup bootstrap logic and focused regression coverage to register configured repositories before watcher startup on fresh graph databases. ## Changed - Startup conflict messaging now explains the real pidfile scope, including the exact PID file path and the requirement to use a different database directory for a separate server instance. ## Fixed - `npm run dev` and the CLI `serve` path now follow the same repository-registration bootstrap, preventing fresh-database starLow3/11/2026
v0.8.5### Added - Multi-session HTTP MCP session management and streamable transport handling so concurrent clients can share one server process with isolated session state - Configurable MCP dispatch limiting plus new session-manager, dispatch-limiter, and Ladybug connection-pool regression coverage ### Changed - Ladybug reads and writes now run through pooled and serialized access paths across CLI, MCP, indexing, sync, and live-index flows to reduce write conflicts under concurrent load - The conLow3/10/2026
v0.8.4### Added - Ladybug package-contract, query-coverage, and MCP language regression coverage to lock the migration behavior in place across DB, indexing, and code-access paths - Actionable rebuild guidance when older graph databases cannot be opened after the backend migration ### Changed - The embedded graph backend is now consistently named Ladybug across DB modules, tests, scripts, configs, and documentation while continuing to load `@ladybugdb/core` through the existing `kuzu` compatibilityLow3/10/2026
v0.8.3## Changes ### Added - Release-publish lockfile coverage to keep npm bootstrap behavior under test in CI. - Broader multi-language code-access handling in tree-sitter-backed skeleton and hot-path flows. ### Changed - Release publishing now bootstraps on Node 20 with a more reliable npm install path in the publish workflow. - Slice start-node resolution, graph metrics writes, watcher logging, and pass2/indexing internals were tightened to reduce noisy results and improve stability under load. Low3/9/2026
v0.8.2## Updated changes ### Added - PID-file coordination and shutdown-manager utilities so `sdl-mcp serve` and stdio mode can detect an already-running MCP process, avoid duplicate startups, and shut down cleanly when the parent terminal closes. - File-backed logging with rotation plus new `safeJson` and `safeRegex` utilities for safer parsing and regex compilation in production paths. - Focused unit coverage for shutdown, pidfile handling, JSON safety, regex safety, Kuzu core helpers, and batched Low3/9/2026
v0.8.1**Full Changelog**: https://github.com/GlitterKill/sdl-mcp/compare/v0.8.0...v0.8.1Low3/8/2026
v0.8.0- This is a MAJOR refactoring of the backend that replaces sqlite with Kuzu DB. - The Rust indexer has been enhanced and handles more indexing tasks. - There is now an in-memory overlay that buffers code change until they can be updated in the DB allowing for fast code-heavy working sessions to stay in-sync with the DB. - Go lang semantic heuristics has been added. - Pass2 semantic heuristic modules system to expedite new language onboarding - Reworked CI workflow **Full Changelog**: htLow3/7/2026
v0.7.2## What's Changed ### Prefetch System Activation (0% โ†’ 50%+ Hit Rate) - **Searchโ†’card prefetch**: After `symbol.search`, cards for top-5 results are eagerly cached, anticipating the most common `getCard` follow-up - **Cardโ†’slice edge prefetch**: After `symbol.getCard`, edge targets are prefetched for anticipated `slice.build` - **Full tool trace coverage**: All 13 MCP tools now record traces (was 3/13), giving the prediction model real training data - **Fixed priority boost mapping**: `computeLow3/3/2026
v0.7.1## v0.7.1 - Cross-Platform Native Rust Indexer & CI Fixes ### Added - Cross-platform per-platform npm packages for the native Rust indexer - Platform-specific binary auto-detection with 3-tier fallback - Automated native package publishing workflow ### Changed - Default indexing engine switched to Rust in example config - Config fields now accept null (Zod .optional() to .nullish()) - CI uses npm install --ignore-scripts instead of npm ci ### Fixed - Config loading failures with null optionalLow3/1/2026
v0.7.0## v0.7.0 โ€” CI Hardening & Stability ### Highlights - **stdio server fix**: Added stdin close/end handlers to prevent silent exit on non-TTY Linux environments - **Native build fix**: Resolved `@napi-rs/cli` resolution failures by restructuring build scripts to use `napi build --cargo-cwd` - **Security**: Patched transitive dependency vulnerabilities (ajv, hono, minimatch, qs) - **CI stability**: Relaxed timing thresholds, updated benchmark baselines, and increased performance budgets for reliLow2/28/2026
v0.6.9**Full Changelog**: https://github.com/GlitterKill/sdl-mcp/compare/v0.6.8...v0.6.9Low2/28/2026
v0.6.8## [0.6.8] - 2026-02-20 ### Added - Native Rust pass-1 indexing engine via napi-rs, with tree-sitter support for 12 languages (TS, JS, Python, Go, Rust, Java, C#, C/C++, Ruby, PHP, Scala, Swift). Enable with `indexing.engine: "rust"` in config. - `ToolContext` interface passing MCP progress tokens, abort signals, and `sendNotification` through to tool handlers. - `sdl.index.refresh` now emits MCP `notifications/progress` so clients can display real-time indexing status (stage, current fiLow2/20/2026
v0.6.7## [0.6.7] - 2026-02-19 ### Added - New MCP feedback tools: `sdl.agent.feedback` and `sdl.agent.feedback.query` for capturing and querying symbol-level usefulness signals from agent runs. - Agent feedback persistence with migration `0017_agent_feedback.sql`, schema/query support, and symbol feedback weight updates for offline tuning inputs. - v0.6.7 benchmark and validation coverage, including new benchmark scripts and tests for ANN retrieval, lazy graph loading, beam-parallel behavior, and slLow2/19/2026
v0.6.6**Full Changelog**: https://github.com/GlitterKill/sdl-mcp/compare/v0.6.5...v0.6.6Low2/18/2026
v0.6.5**Full Changelog**: https://github.com/GlitterKill/sdl-mcp/compare/v0.6.4...v0.6.5Low2/18/2026
v0.6.4## [0.6.4] - 2026-02-13 ### Added - Edge confidence support across indexing and slicing: - `edges.confidence` is now persisted by `createEdge()`/`createEdgeTransaction()` - slice cards now include dependency confidence metadata (`{ symbolId, confidence }`) - `sdl.slice.build` accepts `minConfidence` (default `0.5`) - TypeScript resolver option `includeNodeModulesTypes` (default `true`) with `@types/node` exclusion - New tests for edge confidence, dep-list filtering, two-pass indLow2/13/2026
v0.6.3Fixed custom global config location. **Full Changelog**: https://github.com/GlitterKill/sdl-mcp/compare/v0.6.1...v0.6.3Low2/12/2026

Dependencies & License Audit

Loading dependencies...

Similar Packages

MegaMemoryPersistent project knowledge graph for coding agents. MCP server with semantic search, in-process embeddings, and web explorer.v1.6.2
ruflo๐ŸŒŠ The leading agent orchestration platform for Claude. Deploy intelligent multi-agent swarms, coordinate autonomous workflows, and build conversational AI systems. Features enterprise-grade architv3.10.34
mcp-verified-repo-memoryProvide reliable, repository-scoped memory for AI coding agents with code citations, just-in-time verification, and stale-proof data management.main@2026-06-02
voltagentAI Agent Engineering Platform built on an Open Source TypeScript AI Agent Framework@voltagent/server-core@2.1.18
crewformBuild your AI team with Crewform. Orchestrate specialized, autonomous agents to collaborate on complex tasks and connect outputs to your stack. โ€” AI Orchestration for Everyonev1.9.3

More in MCP Servers

PlanExeCreate a plan from a description in minutes
agentroveYour own Claude Code UI, sandbox, in-browser VS Code, terminal, multi-provider support (Anthropic, OpenAI, GitHub Copilot, OpenRouter), custom skills, and MCP servers.
ProxmoxMCP-PlusEnhanced Proxmox MCP server with advanced virtualization management and full OpenAPI integration.
node9-proxyThe Execution Security Layer for the Agentic Era. Providing deterministic "Sudo" governance and audit logs for autonomous AI agents.