cclsp MCP
cclsp connects LSP language servers to Claude Code over MCP: go to definition, find references, rename symbols and diagnostics with no editor needed
- 676 ★ on the repository
- Last commit
- MIT
Extended access
Why this level
- Launches language servers with commands from the configuration and reads project files
- A rename without `dry_run` rewrites files across the whole project at once and creates `.bak` copies
Install
- Works in
Manual install
npx cclsp@latest setupInteractive wizard: finds the project languages, suggests language servers, creates `.claude/cclsp.json` and optionally adds the server to Claude Code. The `--user` flag creates a shared file in `~/.config/claude/cclsp.json`.
Access and checks
How we reviewExtended accessThe tool runs code or makes network calls and only reads external data.
- Launches language servers with commands from the configuration and reads project files
- A rename without `dry_run` rewrites files across the whole project at once and creates `.bak` copies
This is third-party code. Review the repository files before installing.
What it does
cclsp is a TypeScript MCP server that launches language servers over the LSP protocol and hands their capabilities to a coding agent. Agents name line and column numbers poorly, so a naive LSP call breaks. cclsp takes a symbol name and optionally its kind, tries several position variants itself and finds the right symbol. It has five working tools: `find_definition` locates the definition, `find_references` finds every use across the project, `rename_symbol` renames a symbol, `rename_symbol_strict` does the same at an exact position, and `get_diagnostics` returns errors, warnings and hints for a file. A sixth, `restart_server`, restarts stuck language servers. A rename is applied to all affected files right away by default and creates backup copies with the `.bak` extension. The `dry_run` flag shows the plan without writing. If several symbols match the name, `rename_symbol` returns a list of positions and suggests the strict variant. Which language servers to launch is set by the `cclsp.json` file: for each one it lists file extensions, the launch command, the project directory and the optional `restartInterval` and `initializationOptions`. The `npx cclsp@latest setup` wizard detects languages in the project, shows the servers needed and optionally installs them, writes the configuration and adds cclsp to Claude Code. The language servers themselves (typescript-language-server, pylsp, gopls, rust-analyzer, clangd and others) are installed separately.
Who it is for. For developers who work in Claude Code without an IDE and want the agent to find definitions and references and rename symbols safely at the language server level.
Good fit when
- You need to rename a function or class across the whole project after previewing the plan with `dry_run`
- The agent must find every use of a constant or method before a refactor with `find_references`
- The project has several languages (TypeScript, Python, Go, Rust), each needing its own language server in one `cclsp.json`
- The agent needs a file's errors and warnings from the language server through `get_diagnostics` without running a build
- The Python language server slows down over time, and it is convenient to restart it on a timer through `restartInterval`
Not a fit when
- The machine has neither Node.js 18 nor Bun: cclsp does not run without one of them
- No language server is installed for your language: cclsp does not bundle them, they are installed separately
- Your language has no LSP server or the project has no server configuration: symbols of such a language cannot be found
- You work in an IDE with LSP integration already in place, and the agent already receives definitions and references from it
Example request
Use cclsp to find where the function processRequest is defined and all its calls, then rename it to handleRequest, showing the plan first without writingMCP
- Transport
- stdio
- Authentication
- not required
Environment variables
CCLSP_CONFIG_PATH- Path to the `cclsp.json` file listing the language servers
Limitations
- The license is MIT. The `package.json` version is 0.7.0, but `SECURITY.md` and `ROADMAP.md` refer to a 1.x line, and the address for vulnerability reports in `SECURITY.md` is still a placeholder.
- Node.js 18 or Bun is required, and language servers for the chosen languages are installed separately.
- `rename_symbol` and `rename_symbol_strict` without the `dry_run` flag change files at once and write backup copies with the `.bak` extension. The copies stay in the project and have to be cleaned up after repeated renames.
- The Python language server (pylsp) slows down over hours of work. The author advises `restartInterval` and a manual `restart_server`. Adapters for the Vue and Pyright servers raise timeouts to 45–60 seconds.
- The path to `cclsp.json` is set by the `CCLSP_CONFIG_PATH` variable. If the file is not found, only the default TypeScript configuration works.
How to disable. Run `claude mcp remove cclsp` to take the server out of Claude Code. Delete the configuration file `.claude/cclsp.json` in the project or `~/.config/claude/cclsp.json` by hand. If the package was installed globally with `npm install -g cclsp`, remove it with the package manager. The `.bak` backups left after renames stay in the project and are deleted separately.
FAQ
Why use cclsp when Claude Code already has text search?
A language server knows the code structure: definition, references and a symbol's scope. So a rename touches one symbol, and matching strings with a different meaning stay as they are. Text search does not see such differences.
How does cclsp cope with inaccurate line numbers from the model?
The tools take a symbol name and optionally its kind (function, class, variable). The server finds symbols with that name in the file through the language server and tries several line and column combinations to land on the right one.
What if several symbols match the name?
`rename_symbol` does not rename at random: it returns candidates with positions, for example a variable, a parameter and a property with the same name. Then `rename_symbol_strict` is called with the line and column (counted from one) of the chosen candidate.
Which languages are supported?
Any with an LSP language server and an entry in `cclsp.json`. The README gives examples for TypeScript and JavaScript, Python (`pylsp`), Go (`gopls`), Rust (`rust-analyzer`), C and C++ (`clangd`), Java (`jdtls`), Ruby (`solargraph`) and PHP (`intelephense`).
How do I check the install worked?
After the `npx cclsp@latest setup` wizard, `find_definition`, `find_references` and the other tools should appear in Claude Code's tool list. The wizard shows a verification step itself. If the server does not start, usually a language server is missing or the `CCLSP_CONFIG_PATH` is wrong.
Can cclsp run in a container?
The repository has `compose.yml`, `scripts/docker-entrypoint.sh` and a `.claude/cclsp.docker.json` configuration for development in Docker. The main way for a user is `npx` or a global npm install.
Discussion
No questions or reviews yet.
Related
MCP serversA bridge from an LSP language server to the agent: definitions, references, diagnostics, hover and symbol rename
A Claude Code plugin marketplace that connects LSP language servers for TypeScript, Rust, Go, Python, 1C and other languages
An MCP server that gives Claude Desktop and other clients file tools, a shell and sub-agents in the style of Claude Code
A script installs BSL Language Server as a Linux systemd service and, with a flag, opens an MCP endpoint for AI agents
BSL Language Server for Claude Code
BSL Language Server Claude Code Plugin
A Claude Code plugin that attaches BSL Language Server to 1C and OneScript files: diagnostics, go to definition, references, formatting
MCP wrapper for BSL Language Server
BSL MCP Server
A small MCP server that runs BSL Language Server as a JAR file and gives an agent BSL code analysis and formatting as JSON
Comparison with similar tools
Entries that share the main search query, and how they differ.
| Entry | Official | Authentication | Repository stars | Main difference |
|---|---|---|---|---|
| cclsp (this entry) | no | not required | 676 | |
| MCP Language Server | no | not required | 1,611 | a bridge to one language server per launch, such as gopls or rust-analyzer |
| Serena | no | not required | 30,818 | gives the agent IDE capabilities through LSP or a paid JetBrains plugin, including symbol-level code editing |
| Claude Code LSPs | no | 522 | a Claude Code plugin marketplace that connects LSP language servers |
README in short
The front page explains how cclsp differs from working with LSP directly and lists the features. Next come requirements, automatic and manual setup, install commands for popular language servers, `cclsp.json` configuration examples and a detailed reference of six tools with parameters. It closes with usage examples and troubleshooting. The repository holds a changelog, a roadmap, architecture diagrams in Mermaid, Docker configurations and tests.