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.
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.
- `definition` — the complete source of any symbol, whether it is a function, a type or a constant
- `references` — every usage of a symbol across the codebase
- `hover` — documentation and type hints for a given location
- `diagnostics` — the warnings and errors the language server reports for a file
- `rename_symbol` — a project-wide rename that follows the language's rules rather than a find-and-replace
- `edit_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
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.
One command — go install github.com/isaacphi/mcp-language-server@latest
