SDL-MCP

Local code index that serves symbol cards, graph slices and bounded source windows to coding agents

By Gary Mullins (individual) TypeScript Local · stdio Developer tools

54 popularity score ★ 497 ↓ 462/wk

Connect your client

Local (npm)

Add in one click

Opens the app, which asks before it adds the server.

Or add it by command or config

FirstTerminal
npm install -g sdl-mcp
cd <REPOSITORY_PATH>
sdl-mcp init -y --auto-index
Claude CodeTerminal
claude mcp add sdl -- npx --yes sdl-mcp@latest serve --stdio
Claude Desktopclaude_desktop_config.json
{
  "mcpServers": {
    "sdl": {
      "command": "npx",
      "args": [
        "--yes",
        "sdl-mcp@latest",
        "serve",
        "--stdio"
      ]
    }
  }
}
Cursor~/.cursor/mcp.json
{
  "mcpServers": {
    "sdl": {
      "command": "npx",
      "args": [
        "--yes",
        "sdl-mcp@latest",
        "serve",
        "--stdio"
      ]
    }
  }
}
VS Code.vscode/mcp.json
{
  "servers": {
    "sdl": {
      "type": "stdio",
      "command": "npx",
      "args": [
        "--yes",
        "sdl-mcp@latest",
        "serve",
        "--stdio"
      ]
    }
  }
}
Codex~/.codex/config.toml
[mcp_servers.sdl]
command = "npx"
args = ["--yes", "sdl-mcp@latest", "serve", "--stdio"]
Gemini CLITerminal
gemini mcp add --scope user sdl npx -- --yes sdl-mcp@latest serve --stdio

Settings 4

SDL_CONFIG Optional: Path to sdlmcp.config.json; defaults to the user-global config that `sdl-mcp init` writes (SDL_CONFIG_PATH is an alias).
SDL_CONFIG_HOME Optional: Folder in which to look for sdlmcp.config.json.
ANTHROPIC_API_KEY Optional: Only for optional LLM-generated symbol summaries.
SDL_MCP_SKIP_SETUP_WIZARD Optional: Set to 1 to skip the setup wizard offered after npm install.

What it does

SDL-MCP (Symbol Delta Ledger) parses a local repository with tree-sitter into a graph of symbols and their relationships, stores it in an on-disk graph database, and answers a coding agent's questions from that graph instead of handing it whole files. The agent starts from a compact card per symbol (signature, summary, links), can ask for a task-scoped slice of related symbols under a token budget, and only then requests skeletons, hot paths or a capped window of real source. Where SCIP or language-provider data is configured it adds precise cross-references on top of the parser output.

Beyond reading, it compares indexed versions to list changed symbols and their blast radius, packages pull-request risk evidence with `sdl.pr.risk.analyze`, accepts unsaved editor buffers into a live overlay, can edit files and symbols, runs build and test commands through a governed runtime tool, and keeps optional development memories tied to the repository. It runs over stdio for one agent or over HTTP (with a bearer token, a graph viewer and a dashboard) when several agents share one index.

The tool surface depends on mode. The README's table lists 38 flat tools, but the configuration reference at v0.13.7 sets `codeMode.enabled` and `codeMode.exclusive` to true by default, so a fresh install registers the 7 Code Mode tools and hides the flat and gateway tools until `codeMode.exclusive` is set to false. The licence is source-available, not open source: a separate commercial licence is needed to sell or bundle it in a paid product.

What it needs

RuntimeNode.js 24+

Node.js 24 or later and npm. A local repository to index, set up once with `sdl-mcp init` (or `sdl-mcp init -y --auto-index`), which writes the config and builds the first index. Optional: SCIP or language-provider tooling for precise cross-references, and an LLM API key such as ANTHROPIC_API_KEY only if you turn on generated symbol summaries.

Limits

Running bare `npx sdl-mcp` does not start the server; it needs `serve --stdio` (or `serve --http`). Raw source windows are capped by policy, 180 lines and 1400 tokens in the documented starter config. Development memories, SCIP input and semantic enrichment are off by default. `sdl.runtime.execute` is on by default; its guard against reading repository files is described by its makers as cooperative and not a security boundary. Default runtime limits include 2 concurrent jobs and a 10-minute maximum duration. Selling, sublicensing or bundling it in a monetized product requires a commercial licence.

Who it suits

Suits developers working in medium to large or polyglot repositories who want an agent to pull small, budgeted pieces of code rather than whole files, and who are willing to run an indexing step and keep Node 24 installed. The HTTP mode fits teams that want several agents on one shared index. It is heavier than a plain file-reading server: for small projects, or where you do not want an MCP server that can run commands and edit files, a simpler read-only file or code-search server is a better fit, or disable runtime execution in its config.

Tools 47 of 49

sdl.action.search
Find which SDL action fits a task
sdl.info
Report version, config, database and feature status
sdl.context
Build task-shaped context from the index (Code Mode)
sdl.file
Read or write files, including non-indexed ones (Code Mode)
sdl.manual
Return usage guidance for the SDL actions (Code Mode)
sdl.retrieve
Fetch cards, skeletons or source for symbols (Code Mode)
sdl.workflow
Chain several SDL actions, including runtime execution, in one call (Code Mode)
sdl.agent
Gateway namespace for agent-level actions
sdl.code
Gateway namespace for code-reading actions
sdl.query
Gateway namespace for search and query actions
sdl.repo
Gateway namespace for repository management
sdl.agent.feedback
Record feedback about which symbols were useful
sdl.agent.feedback.query
Look up stored agent feedback
sdl.buffer.checkpoint
Checkpoint unsaved editor buffers into the live overlay
sdl.buffer.push
Send an unsaved file buffer to the live index
sdl.buffer.status
Show live-buffer overlay state
sdl.code.getHotPath
Return the lines of a symbol that matter for given identifiers
sdl.code.getSkeleton
Return a code outline without bodies
sdl.code.needWindow
Request a policy-capped window of raw source
sdl.delta.get
List symbols changed between indexed versions
sdl.file.read
Read a file from the repository
sdl.file.write
Write a file in the repository
sdl.index.refresh
Re-index the repository fully or incrementally
sdl.memory.query
Search stored development memories
sdl.memory.remove
Delete a development memory
sdl.memory.store
Save a decision or task note linked to code
sdl.memory.surface
Bring up memories relevant to current symbols
sdl.policy.get
Show the source-access policy
sdl.policy.set
Change the source-access policy
sdl.pr.risk.analyze
Assess change risk and suggest tests for a pull request
sdl.repo.overview
Summarise repository structure
sdl.repo.register
Add a repository to the index
sdl.repo.status
Show index state of a repository
sdl.repo.unregister
Remove a repository from the index
sdl.response.get
Fetch a stored large response by handle
sdl.runtime.execute
Run code or a build/test command under configured limits
sdl.runtime.queryOutput
Search the saved output of a runtime job
sdl.search.edit
Search and replace across files
sdl.semantic.enrichment.refresh
Refresh provider-backed graph enrichment
sdl.semantic.enrichment.status
Show semantic enrichment status
sdl.slice.build
Build a token-budgeted graph slice for a task or symbol
sdl.slice.refresh
Update an existing slice after changes
sdl.slice.spillover.get
Fetch symbols that did not fit in a slice
sdl.symbol.edit
Edit a symbol in place
sdl.symbol.getCard
Return the compact card for one symbol
sdl.symbol.search
Search indexed symbols by name or meaning
sdl.usage.stats
Report token savings and usage figures

Similar servers