LAIN-mcp
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@LAIN-mcpif I change the database schema, what code will break?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
LAIN-mcp
Structural Code Intelligence & Multi-Agent Coordination for AI Assistants. Give your coding agents an in-memory graph brain instead of making them guess from flat text.
What is LAIN?
LAIN is a persistent, high-performance code intelligence and coordination engine built specifically for AI coding agents (Claude Code, Cursor, Copilot, Codex, Agy, Cline, Windsurf, etc.) over the Model Context Protocol (MCP).
Instead of treating code as unstructured flat text or relying on fuzzy keyword searches, LAIN indexes your codebase into an in-memory, typed structural property graph (using Tree-sitter, language servers, and Git commit history). It then exposes a rich suite of deterministic MCP tools that allow AI agents to navigate, reason about, and modify complex codebases without hallucinations, blind edits, or context-window waste.
The Problem LAIN Solves
Without LAIN (Flat Text / Grep / RAG) | With LAIN (Structural Graph & Coordination) |
Blind Refactoring: The agent modifies a function, unaware that 14 callers across 6 files and 2 repositories depend on its exact signature. Tests break, and the agent burns thousands of tokens in trial-and-error loops. | Exact Blast Radius in <10ms: The agent calls |
Token-Exhausting Exploration: The agent reads 30 full source files into its context window just to understand how an API endpoint connects to the database layer. | Surgical Traversal: The agent queries |
Multi-Agent Collision Chaos: Multiple agents running in parallel (or human + agent pairs) edit the same files or dependent symbols simultaneously, creating merge conflicts and silent regressions. | Multiplayer Presence & Claims: Agents declare intent via |
Multi-Repo / Microservice Blindness: Agents are trapped in a single directory and cannot see how changing a shared library affects consuming services. | Cross-Repo Federation: |
Related MCP server: uacos
Why LAIN? (Comparison Matrix)
Capability | Grep / Text Search | Vector RAG | Traditional LSP | LAIN (MCP Server) |
Transitive Call Traversal | ❌ None (matches text) | ❌ None (similarity only) | ⚠️ Single file / manual | ✅ Deterministic BFS graph traversal |
Full Blast Radius Analysis | ❌ No | ❌ No | ❌ No | ✅ Sub-10ms transitive caller impact |
Token-Compact Output | ❌ Dumps raw lines | ❌ Injects large text chunks | ❌ Editor UI only | ✅ Compact UUID v5 symbols & graph ops |
Multi-Agent Coordination | ❌ None | ❌ None | ❌ None | ✅ Advisory file/symbol claims & SSE streams |
Git Co-Change Coupling | ❌ No | ❌ No | ❌ No | ✅ Temporal coupling radar via commit history |
Multi-Repo Federation | ❌ No | ⚠️ Unstructured | ❌ Single project root | ✅ Federated graph across N repositories |
Interactive Human UI | ❌ CLI only | ❌ CLI only | ⚠️ Editor IDE | ✅ Built-in Command Center SPA dashboard |
Real-World Scenarios: Before vs. After
Scenario 1: Refactoring a Shared Core API
Without LAIN: You ask an agent to rename or update parameters on a central authentication helper. The agent greps for the name, finds 3 local callers, modifies them, and declares success. In reality, 8 other files in different modules (and 2 separate microservices) call that function. The CI build fails, and the agent wastes 40,000 tokens trying to diagnose compiler errors.
With LAIN: The agent invokes
get_blast_radius(symbol: "verify_token"). Within 8 milliseconds, LAIN returns the exact caller tree across all modules and workspaces. The agent updates every call site in its very first pass.
Scenario 2: Multi-Agent Swarms ("Multiplayer Mode")
Without LAIN: Two agents work in parallel on the same repository—Agent A is refactoring payment logic while Agent B is fixing an edge case in checkout. Both edit
checkout_service.rsand push conflicting diffs, leaving broken code for the developer to resolve.With LAIN: Agent A runs
claim_files("checkout_service.rs"). When Agent B inspectslist_occupancy(path: "checkout_service.rs")or triggers the pre-edit hook, LAIN reports that Agent A is actively working on that file. Agent B coordinates, waits, or switches to an uncontested task.
Scenario 3: Onboarding an Agent onto a 500,000-Line Codebase
Without LAIN: The agent attempts to read the directory tree, guesses random entry points, and burns through context limits before writing a single line of working code.
With LAIN: The agent executes
list_entry_pointsandfind_anchors. LAIN computes percentile-normalized centrality scores and immediately highlights the top 5 architectural hub functions and public routers in the project.
See it run

Instant Answers: Federation overview, repo health, and call graphs answered in milliseconds.
Hot Reload: Edit
repos.yamlorworkspaces.yaml; the server updates live without dropping a single active MCP session.Interactive Tool Console: Exercise any MCP tool directly from the web browser; Copy as cURL gives agents and operators instant reproducibility.
The demo is kept as a single GIF so it plays inline without storing duplicate video encodings in the repository.
How it fits together
flowchart TB
subgraph Clients["AI Agents & Developers"]
A["AI Coding Agent<br/>(Claude Code / Cursor / Agy / Codex)"]
B["Developer / Operator<br/>(Browser Command Center)"]
end
subgraph Transports["MCP & Web Transports"]
S["stdio (single-repo)"]
H["HTTP :9999 (JSON-RPC & SSE)"]
end
subgraph Core["LAIN Core Engine"]
EX["Unified MCP Tool Dispatcher"]
G["In-Memory Graph Engine<br/>(Petgraph · UUID v5)"]
PRES["Presence & Claim Registry<br/>(Advisory Leases & Locks)"]
FED["Federation Engine<br/>(N Repositories)"]
end
subgraph Sources["Code Analysis & Storage"]
TS["Tree-sitter AST Parser"]
LSP["Language Servers (rust-analyzer, pylsp...)"]
GIT["Git Commit History (Co-change radar)"]
BIN[".lain/graph.bin (Persistent Cache)"]
end
A -->|MCP JSON-RPC| S
A -->|MCP HTTP| H
B -->|GET /| H
S --> EX
H --> EX
EX --> G
EX --> PRES
EX --> FED
G <--> BIN
G --> TS
G --> LSP
G --> GITIndexing & Parsing: LAIN scans your code using Tree-sitter and language servers (LSPs), extracting functions, classes, imports, and references into a property graph.
Persistent Graph Store: The graph is serialized into
.lain/graph.binusing deterministically derived UUID v5 identifiers for instant reloads.Temporal Mining: LAIN analyzes git commit logs to build a co-change coupling radar (identifying modules that evolve together even without explicit imports).
Advisory Presence: In-memory and on-disk occupancy registries track agent sessions and file claims, preventing overlapping edits in real time.
Universal MCP Delivery: Exposes standardized tools over stdio or HTTP so any MCP-compatible agent can query the graph directly.
What can AI Agents ask LAIN?
LAIN provides specialized MCP tools categorized by capability:
1. Blast Radius & Dependency Tracing
get_blast_radius— Downstream impact analysis: every function, type, and file affected by changing a symbol.get_call_chain— Shortest path between two functions in the call graph.trace_dependency— All upstream dependencies (callees, imports, types) of a target symbol.get_coupling_radar— Files that frequently change together based on Git commit co-occurrence.
2. Architectural Discovery & Navigation
find_anchors— Identifies the core architectural pillars (most-called, most-stable symbols).list_entry_points— Discoversmain(), HTTP routes, and event handlers.get_context_depth— Measures abstraction distance from public entry points.explore_architecture— High-level hierarchical module and package tree.
3. Multi-Agent Coordination ("Multiplayer Mode")
register_agent/heartbeat— Registers an agent session and keeps advisory leases fresh.claim_files/release_files— Claims or releases files and symbol ranges before editing.detect_overlap— Analyzes overlapping symbol changes between git branches or concurrent sessions.list_active_agents/who_am_i— Discovers other active agents and reports session identity.
4. Search & Deep Graph Queries
semantic_search(requires ONNX model — see Setting Up Semantic Search) — Concept-based code search using local ONNX embeddings with hybrid BM25/stemmed ranking.query_graph— Composable JSON ops pipeline (find,connect,filter,semantic_filter,sort,limit).explain_symbol— Complete structural dossier for a symbol (signature, callers, docstring, location).
5. Multi-Repo Federation
list_repos/get_repo_info— Status, health, and size of all repos registered inrepos.yaml.get_federation_health— Aggregate health counts, total node/edge counts, and a rough memory estimate across the federation.get_cross_repo_blast_radius— Cross-repository impact analysis when modifying a shared symbol.get_cross_repo_blast_radius_for_repo— Same asget_cross_repo_blast_radius, but the caller disambiguates the target repo byrepo_idinstead of by symbol resolution.search_org— Organization-wide symbol and code search across all registered repositories.
6. Code Health & Refactoring
find_dead_code— Detects unreachable functions and unused symbols (excluding traits and tests).suggest_refactor_targets— Identifies brittle code (high-coupling, low-stability candidates).get_agent_strategy— Retrieves operational guidelines and strategic instructions for agents.get_world_state— Summarizes active sessions, file claims, and graph freshness in a single compact call.
TL;DR — Install in 30 Seconds
# Install (interactive — adds `lain` to PATH)
curl -fsSL https://raw.githubusercontent.com/spuentesp/lain/main/install.sh | bash
# Reload your shell, then verify
source ~/.zshrc # or ~/.bashrc
lain --versionSee QUICKSTART.md for Homebrew, manual builds, non-interactive flags, and ONNX model setups.
Connecting Your AI Agent
Claude Code
claude mcp add lain -- lain mcpCursor / Windsurf
Add to your MCP configuration (cursor settings > Features > MCP or mcp.json):
{
"mcpServers": {
"lain": {
"command": "lain",
"args": ["mcp"]
}
}
}Multi-Repo Server Mode (HTTP)
Run LAIN as a shared service across multiple repositories:
lain server --config ./repos.yaml --transport http --port 9999Access the Command Center UI in your browser at http://localhost:9999.
Command Center Dashboard
When lain server runs with --transport http, it serves the Command Center dashboard at GET /. It is a self-contained single-page application (SPA) that talks back to the running server over the same MCP JSON-RPC protocol.

Overview — Real-time node/edge stats, memory footprint, and federation health.
Graph — Interactive D3 force-directed visualizer of workspaces and symbol dependencies.
Repos — Repository table showing health, path, and node/edge statistics.
Query — Interactive query runner for
query_graphtraversals.Tools — Form-based MCP tool runner with auto-generated Copy as cURL snippets for quick testing.

The CLI Commands
LAIN exposes the following CLI commands:
Command | Purpose |
| Start the MCP server (the headline). Reads |
| Single-repo MCP server on stdio. Walks up from cwd for |
| Guided onboarding: detects the repository and languages, optionally installs the semantic model, configures one MCP client ( |
| Manage |
| Manage |
| Run a |
| One-shot MCP query: boots a transient |
| Scaffold a |
| Single-user LLM-assisted query (uses |
| Agent pre-edit hook entry point: |
| Read-only repository diagnosis. Reports binary identity, persisted graph freshness, structural and optional semantic capability states, installation paths, and an MCP initialize/tools-list probe. Use |
| Print the four canonical capability states and repository freshness. Add |
| Print aggregate repository, index, and MCP readiness. Add |
| Emit the canonical tool-surface schema dump ( |
| Capability demonstration and benchmark. Boots a real server against a synthetic repo whose call graph is known by construction, checks lain's answers against that ground truth (not merely that it answered), then benchmarks the same tools against this repo at ~3.5k nodes. |
Hot Reload
lain server monitors repos.yaml and workspaces.yaml and automatically updates its federation state when they change—without restarting the process or dropping active agent connections. Both manual file edits and CLI commands (lain repos add ...) communicate over a local Unix socket (~/.local/lain/run/<repos-stem>.sock) to rebuild the index diff atomically.
See docs/hot-reload.md for full operational details.
Documentation Index
Doc | What's in it |
Step-by-step 5-minute setup and quickstart | |
Comprehensive operator and agent manual | |
System design, graph layering, and technical rationale | |
Deep dive into internal modules and data structures | |
Multi-repo setup, org search, and cross-repo intelligence | |
Schema and options for | |
Multi-agent coordination, claims, and advisory locks | |
Git and editor pre-edit hook configuration | |
Syntax and operations reference for | |
Complete reference guide for all MCP tools | |
Features and usage of the web Command Center | |
Full documentation sitemap |
Requirements & Optional Semantic Search
Requirement | Details |
Rust (build only) | 1.75 or newer |
Git | Required for co-change coupling analysis |
ONNX Model | Optional — required only for |
Setting Up Semantic Search (Optional)
For semantic_search, download an ONNX embedding model (or run install.sh --download-model):
mkdir -p .lain/models
# BAAI/bge-small-en-v1.5 (recommended — 384d, ~120MB)
curl -L https://huggingface.co/BAAI/bge-small-en-v1.5/resolve/main/onnx/model.onnx \
-o .lain/models/model.onnx
curl -L https://huggingface.co/BAAI/bge-small-en-v1.5/resolve/main/tokenizer.json \
-o .lain/models/tokenizer.json
export LAIN_EMBEDDING_MODEL=$PWD/.lain/models/model.onnxFor BGE-style asymmetric retrieval (optimized for short natural-language queries), configure the prefix in .lain/tuning.toml:
query_prefix = "Represent this sentence for searching relevant passages: "Note: If no embedding model is configured, semantic_search is filtered out of tools/list automatically so agents are never presented with an unusable tool. All graph, blast radius, navigation, and coordination tools function without an ONNX model.
MCP Transport Modes
Mode | Command | Use Case |
|
| Claude Code, Cursor, MCP clients |
|
| Command Center dashboard + curl-driven JSON-RPC |
Troubleshooting
First-time setup issues? See QUICKSTART.md § First aid.
Run diagnostics:
lain doctorreports repository and MCP readiness without changing files;lain doctor --jsonemits the same result for scripts and agents.Hand-edit not picked up? The hot-reload watcher is non-recursive and uses atomic rename. Editing the file in place (
vim repos.yaml) triggers a notify event within ~1 s. If you moved the file across directories, save it back into the project directory.Repo stuck in
indexing/degraded/unavailable?curl -s -X POST http://localhost:9999/mcp \ -H 'Content-Type: application/json' \ -d '{"jsonrpc":"2.0","method":"tools/call","params":{"name":"get_federation_health","arguments":{}},"id":1}'The Command Center Overview tab displays these metrics live.
run_build/run_testsfail with "not found"? Editor-launched MCP servers inherit environments that lack version-manager shims (rustup, nvm, pyenv, volta, asdf). LAIN searches known install locations automatically; to configure custom managers, seetoolchains/README.md.Answers look stale, or a symbol "doesn't exist" that clearly does? Check
get_health:Build:shows the binary version and git SHA. MCP stdio processes are spawned once by the client and outlive source rebuilds; restart your editor/client to pick up a newly built binary.Status: Degraded ⚠indicates indexing timed out. SetLAIN_REINDEX_TIMEOUT=600(defaults to 300s outer, 60s per-repo) to accommodate large working trees on cold cache.
Two agents not seeing each other? Verify they share the same workspace. State is persisted under
~/.local/lain/state/, andlist_active_agentsconfirms shared visibility.Force re-indexing: Call
request_reloadvia MCP or touchrepos.yaml.
Regenerating the Demo Video
The hero demo recording in docs/screenshots/ can be re-recorded after UI changes:
make record-demoOr run npm run record-demo --prefix tests/js for the Playwright driver (and scripts/record-spa-demo.sh for ffmpeg encoding). For offline fixture testing, run make record-demo-small.
License
MIT — Copyright (c) 2026 spuentesp
This server cannot be deployed
Maintenance
Related MCP Connectors
Hosted code graph over MCP: exact callers, dependencies, and cross-repo blast radius for AI agents.
Repository knowledge graph MCP server for codebase understanding and debugging.
Codebase graphs, caller impact analysis, and recorded project context for AI coding agents.
The Cortex MCP server provides read-only access to real-time engineering context from the Cortex developer portal, allowing AI coding assistants to answer natural language questions about your organization's catalog (microservices, libraries, domains, teams, infrastructure), scorecards (engineering standards and best practices), initiatives (goals and deadlines), and Engineering Intelligence metrics. It includes tools for querying documentation, tracking personal entities, and accessing AI-assisted insights across the entire Cortex ecosystem.
Related MCP Servers
- AlicenseNot gradedqualityAmaintenanceMCP server for local-first code intelligence, providing structural code graph, semantic search, and impact analysis to AI agents.2MIT
- AlicenseNot gradedqualityBmaintenanceLocal-first code intelligence and safety layer for AI coding agents. MCP server exposes dependency graph, impact analysis, and AST-compressed repo context, backed by typed local memory, patch-scope safety gates, and git-independent transaction rollback.1MIT

Vibgrate AI Contextofficial
AlicenseNot gradedqualityAmaintenanceLocal-first MCP server that gives AI assistants codebase intelligence—code graph, drift analysis, vulnerability attribution, and version-correct library docs—all from the user's machine.1,569 npm3Apache 2.0- AlicenseNot gradedqualityBmaintenanceMCP server that analyzes codebases to provide dependency graphs, impact analysis, and file insights across 15+ programming languages, enabling AI assistants to understand project structure and navigate code efficiently.MIT