Server facts
MCP Language Server
Project
- Author
- isaacphi
- Repository
- github.com/isaacphi/mcp-language-server
- License
- BSD-3-Clause
- Category
- Developer Tools
Tech
- Runtime / language
- goGo
- Transports
- stdio
- Remote available
- No
- Authentication
- Not specified
Activity
- GitHub stars
- 1,610
- Last commit
- Data as of
Tags
- Code Navigation
- Diagnostics
- Go
- Language Server Protocol
- Refactoring
Overview
MCP Language Server is a bridge from an MCP-enabled assistant to a separate Language Server Protocol implementation. It does not implement language intelligence itself; instead, it starts a chosen language server for a workspace and exposes semantic operations to the assistant. Developers can use it to locate definitions, trace references, inspect errors, or read type information without relying entirely on text search. A line-based edit tool complements the language-aware navigation and rename operations.
The README supplies configurations for Go through gopls, Rust through rust-analyzer, Python through pyright, TypeScript through typescript-language-server, and C or C++ through clangd. Other servers may work, but those listed are the ones the author reports testing. The connected language server must use stdio. Arguments following the separator are forwarded to that server, and environment variables are inherited as well. For clangd, the documentation highlights the importance of a generated compilation database.
Setup requires Go, installation of the bridge, and a separately installed language server. The client configuration then specifies both the workspace directory and the language-server executable. Some clients need explicit executable paths or language-specific environment settings; the Go example discusses this in detail. Debug logging can expose the protocol exchange on stderr for troubleshooting. The project is described as beta software, so integration behavior should be checked against the selected server and workspace before relying on it for broader edits.
Install & configure
Requirements
- Go
- Bridge installed with go install github.com/isaacphi/mcp-language-server@latest
- rust-analyzer installed for this example
- An MCP client and a local workspace
mcp-language-server --workspace /Users/you/dev/yourproject/ --lsp rust-analyzerThis is the README's Rust example. Replace the workspace path and choose the appropriate installed language server. Other documented configurations cover gopls, pyright, TypeScript, and clangd.
Examples are translated from the published configuration. Supply your own credentials and verify requirements in the upstream README. Remote connectors are shown only where a supported configuration format is known.
Config file · macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
Windows: %APPDATA%\Claude\claude_desktop_config.json
Use Settings → Developer → Edit Config when available. Do not assume a Linux configuration path; check the client documentation for your platform. Remote servers use the app’s connector flow when supported, not the local stdio file shown here. Merge this example with existing settings; do not overwrite unrelated servers.
{
"mcpServers": {
"mcp-language-server": {
"command": "mcp-language-server",
"args": [
"--workspace",
"/Users/you/dev/yourproject/",
"--lsp",
"rust-analyzer"
],
"env": {}
}
}
}Config file · Project: .cursor/mcp.json
User: ~/.cursor/mcp.json
The project path is relative to the workspace root. The tilde denotes your user home directory. Use Cursor’s MCP settings to confirm which configuration and scope your installed version is reading. Merge this example with existing settings; do not overwrite unrelated servers.
{
"mcpServers": {
"mcp-language-server": {
"command": "mcp-language-server",
"args": [
"--workspace",
"/Users/you/dev/yourproject/",
"--lsp",
"rust-analyzer"
],
"env": {}
}
}
}Config file · Workspace: .vscode/mcp.json
For user scope, use the “MCP: Open User Configuration” command if available. Do not guess a user configuration path across operating systems, profiles, containers, or remote workspaces; check the client documentation. Merge this example with existing settings; do not overwrite unrelated servers.
{
"servers": {
"mcp-language-server": {
"type": "stdio",
"command": "mcp-language-server",
"args": [
"--workspace",
"/Users/you/dev/yourproject/",
"--lsp",
"rust-analyzer"
],
"env": {}
}
}
}Config file · macOS/Linux: ~/.codeium/windsurf/mcp_config.json
Windows: %USERPROFILE%\.codeium\windsurf\mcp_config.json
Open the MCP configuration through Windsurf’s settings when possible to confirm the active file. Paths can differ in managed or future releases; check the client documentation if this location is not present. Merge this example with existing settings; do not overwrite unrelated servers.
{
"mcpServers": {
"mcp-language-server": {
"command": "mcp-language-server",
"args": [
"--workspace",
"/Users/you/dev/yourproject/",
"--lsp",
"rust-analyzer"
],
"env": {}
}
}
}Config file · Project scope: .mcp.json at the repository root
The project file uses mcpServers. For user scope, use claude mcp add --scope user rather than assuming .mcp.json in your home directory is the user configuration. Check the client documentation for managed settings and storage details. Merge this example with existing settings; do not overwrite unrelated servers.
{
"mcpServers": {
"mcp-language-server": {
"type": "stdio",
"command": "mcp-language-server",
"args": [
"--workspace",
"/Users/you/dev/yourproject/",
"--lsp",
"rust-analyzer"
],
"env": {}
}
}
}Examples are translated from the published configuration. Supply your own credentials and verify requirements in the upstream README. Remote connectors are shown only where a supported configuration format is known.
Tools
Source: repository README. Tool descriptions are a documented snapshot, not a live capability check.
| Tool | What it does |
|---|---|
| definition | Resolve a symbol to its source definition. |
| references | Find places in the workspace that use a symbol. |
| diagnostics | Read warnings and errors reported for a file. |
| hover | Retrieve documentation and type details at a code location. |
| rename_symbol | Apply a language-aware symbol rename across the project. |
| edit_file | Apply multiple file changes using line positions. |
Names, permissions, and defaults can change. Check the current upstream documentation before granting access.
Use cases
- Locate a function definition and its callers through semantic queries.
- Inspect file diagnostics while an assistant changes code.
- Rename a symbol consistently across a project.
- Give a coding client language intelligence without embedding an IDE.
Strengths
- Uses established language servers for semantic operations.
- Documents configurations for several major languages.
- Includes symbol renaming and batched line-based edits.
Limitations
- Requires a separately installed language server.
- The underlying server must communicate through stdio.
- The README labels the project beta software.
Frequently asked questions
Independent listing, not an affiliation or security review. Grant the least access needed and verify the upstream instructions before running code.