definitionLABSCO SUMMARY
Navigation an agent can trust, because a language server answered it.
Grep finds strings; a language server knows which of those strings is the definition. That difference is the whole point here — and rename_symbol is the version of it you can act on.
What it is
A server that runs a real language server and exposes it over MCP. The answers come from the language server's own understanding of the code, not from text search.
What you get
definition— the complete source of any symbol, whether it is a function, a type or a constantreferences— every usage of a symbol across the codebasehover— documentation and type hints for a given locationdiagnostics— the warnings and errors the language server reports for a filerename_symbol— a project-wide rename that follows the language's rules rather than a find-and-replaceedit_file— multiple text edits addressed by line number, which is a more reliable and more context-economical way to change a file than search-and-replace editing
Requirements
Go, then go install github.com/isaacphi/mcp-language-server@latest, plus the language server for your language installed separately — gopls for Go, clangd for C and C++, and others. Launch it with --workspace pointing at your project and --lsp at the language server binary; anything after -- is passed straight through to the language server, and environment variables are inherited by it. The language server must communicate over stdio. Setting LOG_LEVEL to DEBUG writes verbose logs to stderr, including the traffic in both directions. The snapshot test suite covers Go, Rust, Python and TypeScript. This is described as beta software.
Setup effort
Follow the published steps — go install github.com/isaacphi/mcp-language-server@latest
USE CASES
Reading unfamiliar code without guessing
Ask for a symbol's definition and get its actual source back, then walk its references to see how it is used before changing anything.
Renaming something that appears everywhere
A project-wide rename that respects scope, rather than a regex that also catches the comment and the unrelated variable with the same name.
Checking a change compiled cleanly
Read the language server's diagnostics for the file you just edited instead of running a full build to find out.
Editing a file precisely
Line-numbered edits avoid the failure mode where a search-and-replace edit misses because the surrounding text was not quite what the model remembered.
Working in a language the agent does not know well
Point --lsp at that language's server. The snapshot suite covers Go, Rust, Python and TypeScript, and any stdio-speaking language server should work.
6 tools
Listed in project docs. Your client may show a different list.
referencesdiagnosticshoverrename_symboledit_fileBEFORE YOU INSTALL
What to know first
Tools you get
6 tools named in the project's documentation. rename_symbol and edit_file change your files. The tools are the same whichever language server you connect.
Requires
The language server must communicate over stdio
Where it runs
The documented client runs the server on your machine.
INSTALLATION
Connect your client
Server setup
go install github.com/isaacphi/mcp-language-server@latest
go install golang.org/x/tools/gopls@latestMCP Clients
Any MCP client
{
"mcpServers": {
"language-server": {
"command": "mcp-language-server",
"args": [
"--workspace",
"/Users/<YOUR_USERNAME>/dev/<YOUR_PROJECT>/",
"--lsp",
"gopls"
],
"env": {
"PATH": "/opt/homebrew/bin:/Users/<YOUR_USERNAME>/go/bin",
"GOPATH": "/users/you/go",
"GOCACHE": "/users/you/Library/Caches/go-build",
"GOMODCACHE": "/Users/<YOUR_USERNAME>/go/pkg/mod"
}
}
}
}