agent-lsp
Supports Bun runtime as an alternative to Node.js for running the MCP server, offering compatibility with JavaScript/TypeScript language server tooling.
Provides C++ language support through clangd language server integration, enabling code analysis, navigation, and refactoring capabilities for C++ projects.
Provides Clojure language support through language server integration, enabling code analysis, navigation, and refactoring capabilities for Clojure projects.
Provides Dart language support through language server integration, enabling code analysis, navigation, and refactoring capabilities for Dart projects.
Provides Docker container deployment options for the MCP server with stdio and HTTP modes, supporting multiple language server configurations in isolated environments.
Provides Elixir language support through language server integration, enabling code analysis, navigation, and refactoring capabilities for Elixir projects.
Hosts the project repository and provides installation scripts via GitHub raw URLs for platform-agnostic deployment of the MCP server.
Provides package installation through Homebrew tap for macOS/Linux users, offering a native package management experience for the MCP server.
Provides JavaScript language support through TypeScript language server integration, enabling code analysis, navigation, and refactoring capabilities for JavaScript projects.
Provides Kotlin language support through language server integration, enabling code analysis, navigation, and refactoring capabilities for Kotlin projects.
Provides LLVM-based tooling for C/C++ language support through clangd integration, enabling advanced code analysis and refactoring capabilities.
Provides Lua language support through language server integration, enabling code analysis, navigation, and refactoring capabilities for Lua projects.
Provides MongoDB query language support through language server integration, enabling code analysis and validation capabilities for MongoDB projects.
Provides Node.js runtime support for language servers and npm package installation for the MCP server and language server dependencies.
Provides npm package installation for the MCP server globally and for language server dependencies like TypeScript language server and pyright.
Provides PHP language support through language server integration, enabling code analysis, navigation, and refactoring capabilities for PHP projects.
Provides Prisma schema language support through language server integration, enabling code analysis and validation capabilities for Prisma projects.
Provides Python language support through pyright language server integration, enabling code analysis, navigation, and refactoring capabilities for Python projects.
Provides Ruby language support through solargraph language server integration, enabling code analysis, navigation, and refactoring capabilities for Ruby projects.
Provides Rust language support through rust-analyzer language server integration, enabling code analysis, navigation, and refactoring capabilities for Rust projects.
Provides Scala language support through language server integration, enabling code analysis, navigation, and refactoring capabilities for Scala projects.
Provides Swift language support through language server integration, enabling code analysis, navigation, and refactoring capabilities for Swift projects.
Provides Terraform HCL language support through language server integration, enabling code analysis and validation capabilities for Terraform projects.
Provides TypeScript language support through typescript-language-server integration, enabling code analysis, navigation, and refactoring capabilities for TypeScript projects.
Provides Zig language support through language server integration, enabling code analysis, navigation, and refactoring capabilities for Zig projects.
agent-lsp
The most complete MCP server for language intelligence. 50 tools, 30 CI-verified languages, 20 agent workflows. Single Go binary.
AI agents make incorrect code changes because they can't see the full picture: who calls this function, what breaks if I rename it, does the build still pass. Language servers have the answers, but existing MCP bridges either cold-start on every request or expose raw tools that agents use incorrectly.
agent-lsp is a stateful runtime over real language servers. It indexes your workspace once, keeps the index warm, and adds a skill layer that encodes correct multi-step operations so they actually complete.
curl -fsSL https://raw.githubusercontent.com/blackwell-systems/agent-lsp/main/install.sh | sh
agent-lsp initHow it works
One agent-lsp process manages your language servers. Point your AI at ~/code/. It routes .go to gopls, .ts to typescript-language-server, .py to pyright. No reconfiguration when you switch projects. The session stays warm across files, packages, and repositories.
Tested, not assumed
Every other MCP-LSP implementation lists supported languages in a config file. None of them run the actual language server in CI to verify it works.
agent-lsp CI runs 30 real language servers against real fixture codebases on every push: Go, Python, TypeScript, Rust, Java, C, C++, C#, Ruby, PHP, Kotlin, Swift, Scala, Zig, Lua, Elixir, Gleam, Clojure, Dart, Terraform, Nix, Prisma, SQL, MongoDB, and more. When we say "works with gopls," that's a verified, automated claim, not a hope.
Speculative execution
Simulate changes in memory before writing to disk. No other MCP-LSP implementation has this.
simulate_edit_atomic previews the diagnostic impact of any edit. You see exactly what breaks before the file is touched. simulate_chain evaluates a sequence of dependent edits (rename a function, update all callers, change the return type) and reports which step first introduces an error.
8 speculative execution tools: create_simulation_session, simulate_edit, simulate_chain, evaluate_session, commit_session, discard_session, destroy_session, simulate_edit_atomic.
See docs/speculative-execution.md for the full workflow.
Works with
AI Tool | Transport | Config |
stdio |
| |
stdio |
| |
stdio |
| |
stdio |
| |
Any MCP client | HTTP+SSE |
|
Skills
Raw tools get ignored. Skills get used. Each skill encodes the correct tool sequence so workflows actually happen without per-prompt orchestration instructions.
See docs/skills.md for full descriptions and usage guidance.
Before you change anything
Skill | Purpose |
| Blast-radius analysis before touching a symbol or file |
| Find all concrete implementations of an interface |
| Detect zero-reference exports before cleanup |
Editing safely
Skill | Purpose |
| Speculative preview before disk write; before/after diagnostic diff; surfaces code actions on errors |
| Test changes in-memory without touching the file |
| Edit a named symbol without knowing its file or position |
| Safe editing of exported symbols, finds all callers first |
|
|
Understanding unfamiliar code
Skill | Purpose |
| "Tell me about this symbol": hover + implementations + call hierarchy + references in one pass |
| Deep-dive Code Map for a symbol or file: type info, call hierarchy, references, source |
| Three-tier documentation: hover → offline toolchain → source |
| Find all usages of a library symbol across consumer repos |
| File-scoped symbol list, usage search, and type info |
After editing
Skill | Purpose |
| Diagnostics + build + tests after every edit |
| Apply quick-fix code actions for all diagnostics in a file |
| Find and run only tests that cover an edited file |
| Format a file or selection via the language server formatter |
Generating code
Skill | Purpose |
| Trigger server-side code generation (interface stubs, test skeletons, mocks) |
| Extract a code block into a named function via code actions |
Full workflow
Skill | Purpose |
| End-to-end refactor: blast-radius → preview → apply → verify → test |
cd skills && ./install.shDocker
Stdio mode (MCP client spawns the container directly):
# Go
docker run --rm -i -v /your/project:/workspace ghcr.io/blackwell-systems/agent-lsp:go go:gopls
# TypeScript
docker run --rm -i -v /your/project:/workspace ghcr.io/blackwell-systems/agent-lsp:typescript typescript:typescript-language-server,--stdio
# Python
docker run --rm -i -v /your/project:/workspace ghcr.io/blackwell-systems/agent-lsp:python python:pyright-langserver,--stdioHTTP mode (persistent service, remote clients connect over HTTP+SSE):
docker run --rm \
-p 8080:8080 \
-v /your/project:/workspace \
-e AGENT_LSP_TOKEN=your-secret-token \
ghcr.io/blackwell-systems/agent-lsp:go \
--http --port 8080 go:goplsImages run as a non-root user (uid 65532) by default. Set AGENT_LSP_TOKEN via environment variable, never --token on the command line. Images are also mirrored to Docker Hub (blackwellsystems/agent-lsp). See DOCKER.md for the full tag list, HTTP mode setup, and security hardening options.
Installation
macOS / Linux
# curl | sh
curl -fsSL https://raw.githubusercontent.com/blackwell-systems/agent-lsp/main/install.sh | sh
# Homebrew
brew install blackwell-systems/tap/agent-lspWindows
# PowerShell (no admin required)
iwr -useb https://raw.githubusercontent.com/blackwell-systems/agent-lsp/main/install.ps1 | iex
# Scoop
scoop bucket add blackwell-systems https://github.com/blackwell-systems/agent-lsp
scoop install blackwell-systems/agent-lsp
# Winget
winget install BlackwellSystems.agent-lspAll platforms
# npm
npm install -g @blackwell-systems/agent-lsp
# Go install
go install github.com/blackwell-systems/agent-lsp@latestQuick start
agent-lsp initDetects language servers on your PATH, asks which AI tool you use, and writes the correct MCP config. For CI or scripted use: agent-lsp init --non-interactive.
Setup
Step 1: Install language servers
Install the servers for your stack. Common ones:
Language | Server | Install |
TypeScript / JavaScript |
|
|
Python |
|
|
Go |
|
|
Rust |
|
|
C / C++ |
|
|
Ruby |
|
|
Full list of 30 supported languages in docs/language-support.md.
Step 2: Add to your AI config
{
"mcpServers": {
"lsp": {
"type": "stdio",
"command": "agent-lsp",
"args": [
"go:gopls",
"typescript:typescript-language-server,--stdio",
"python:pyright-langserver,--stdio"
]
}
}
}Each arg is language:server-binary (comma-separate server args).
Step 3: Start working
start_lsp(root_dir="/your/project")Then use any of the 50 tools. The session stays warm; no restart needed when switching files.
Why agent-lsp
agent-lsp | next best competitor | |
Tools | 50 | 39 |
Languages (CI-verified) | 30 (end-to-end integration tests) | 0 (config-listed, untested) |
Agent workflows (skills) | 20 | 0 (in MCP space) |
Speculative execution | 8 tools (simulate before writing) | none |
Connection model | persistent (warm index) | per-request or cold-start |
Call hierarchy | ✓ (single tool, direction param) | split across 3 tools or absent |
Type hierarchy | ✓ (CI-verified) | untested or absent |
Cross-repo references | ✓ (multi-root workspace) | single-workspace only |
Auto-watch | ✓ (always-on, debounced) | manual notify required |
HTTP+SSE transport | ✓ (bearer token auth, non-root Docker) | experimental or absent |
Distribution | single Go binary (8 channels) | Node.js/Bun runtime required |
Use Cases
Multi-project sessions: point your AI at
~/code/, work across any project without reconfiguringPolyglot development: Go backend + TypeScript frontend + Python scripts in one session
Large monorepos: one server handles all languages, routes by file extension
Code migration: refactor across repos with full cross-repo reference tracking
CI pipelines: validate against real language server behavior
Niche language stacks: Gleam, Elixir, Prisma, Zig, Clojure, Nix, Dart, Scala, MongoDB, all CI-verified
Multi-Language Support
30 languages, CI-verified end-to-end against real language servers on every CI run. No other MCP-LSP implementation tests a single language in CI.
Go, Python, TypeScript, Rust, Java, C, C++, C#, Ruby, PHP, Kotlin, Swift, Scala, Zig, Lua, Elixir, Gleam, Clojure, Dart, Terraform, Nix, Prisma, SQL, MongoDB, JavaScript, YAML, JSON, Dockerfile, CSS, HTML.
See docs/language-support.md for the full coverage matrix.
Tools
50 tools covering navigation, analysis, refactoring, speculative execution, and session lifecycle. All CI-verified.
See docs/tools.md for the full reference with parameters and examples.
Further reading
docs/skills.md - skill reference: workflows, use cases, and composition
docs/tools.md - full tool reference
docs/language-support.md - language coverage matrix
docs/speculative-execution.md - simulate-before-apply workflows
docs/lsp-conformance.md - LSP 3.17 spec coverage
docs/architecture.md - Go package structure and internals
docs/ci-notes.md - CI quirks and test harness details
docs/distribution.md - install channels and release pipeline
DOCKER.md - Docker tags, compose, and volume caching
Development
git clone https://github.com/blackwell-systems/agent-lsp.git
cd agent-lsp && go build ./...
go test ./... # unit tests
go test ./... -tags integration # integration tests (requires language servers)Library Usage
The pkg/lsp, pkg/session, and pkg/types packages expose a stable Go API for using agent-lsp's LSP client directly without running the MCP server.
import "github.com/blackwell-systems/agent-lsp/pkg/lsp"
client := lsp.NewLSPClient("gopls", []string{})
client.Initialize(ctx, "/path/to/workspace")
defer client.Shutdown(ctx)
locs, err := client.GetDefinition(ctx, fileURI, lsp.Position{Line: 10, Character: 4})See docs/architecture.md for the full package API.
License
MIT
Latest Blog Posts
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/blackwell-systems/agent-lsp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server