关于 lsp-mcp
lsp-mcp 是 MCP 服务,为大模型提供跨多种编程语言的统一语言服务器功能接口。它根据项目标记文件检测语言并选择语言服务器,减少手动配置。
主要功能
- 01自动检测项目语言
- 02自动选择语言服务器
- 03查找定义、引用和符号
- 04诊断、重命名和代码操作
- 05格式化与代码修改
- 06单个项目运行多个语言服务器
适用场景
- 01在代码库中导航定义和引用
- 02检查多语言项目诊断
- 03重命名符号并应用代码操作
- 04通过 MCP 客户端格式化文件
MCP 相关
该服务通过 stdio 将语言服务器操作作为 MCP 工具开放。支持 MCP Roots 的客户端可自动初始化工作区,其他客户端可通过项目根目录调用 `lsp_init`。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
17收录的工具列表 · 更新于 3 周前
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| root | string | 是 | |
| languages | array | 否 |
详细介绍
通用 LSP MCP 服务
一个 MCP 服务统管所有语言服务——自动检测语言,零配置启动。
概述
一个 Model Context Protocol(MCP)服务,让大模型能够使用所有主流编程语言的 Language Server Protocol(LSP) 功能。与现有的 LSP-MCP 服务不同,本项目开箱即支持 13 种语言,无需手动配置——它会自动检测代码库、选择合适的语言服务,并通过稳定且与语言无关的工具接口提供所有 LSP 操作。
支持的语言
| 语言 | 语言服务 | 自动检测依据 |
|---|---|---|
| Python | pyright / pylsp | pyproject.toml、setup.py |
| TypeScript | typescript-language-server | tsconfig.json |
| JavaScript | typescript-language-server | package.json |
| C# | omnisharp | *.csproj、*.sln |
| Java | vscode-java / jdtls | pom.xml、build.gradle |
| Go | gopls | go.mod |
| Rust | rust-analyzer | Cargo.toml |
| C / C++ | clangd | *.c、*.cpp、*.h |
| Ruby | solargraph | Gemfile |
| PHP | intelephense | composer.json |
| Kotlin | kotlin-language-server | build.gradle.kts |
| Swift | sourcekit-lsp | Package.swift |
功能
- 🔍 自动检测语言 — 扫描项目根目录中的语言标记文件(
package.json、Cargo.toml、go.mod等) - 🔄 自动选择语言服务 — 使用硬编码映射并提供备用服务;自动安装缺失的 LSP
- 🤖 免操作初始化 — 支持 MCP Roots 的客户端在连接时自动初始化——所有服务顺利启动后,工具列表中将不再显示
lsp_init - 💾 跨会话持久化 — 服务器重启后,仍会记住已初始化的工作区及其就绪语言
- 🔁 优雅降级 — 之前正常工作的服务开始失败时(例如添加了语言但缺少对应二进制文件),
lsp_init会重新显示 - 🛠 12 个 LSP 工具 — 定义、引用、符号、诊断、重命名、代码操作、格式化等
- 📝 读取与写入操作 — 通过 LSP 检查和修改代码
- 🌐 多语言支持 — 同一项目中可同时运行多个语言服务
- 📋 混合响应 — 提供人类可读的
text字段和包含原始 LSP 数据的raw字段 - 🔌 MCP Stdio 协议 — 兼容任何支持 MCP 的客户端
- ⚡ 零配置 — 安装后即可运行,无需针对各语言进行设置
安装
重要: 请在代码所在的同一台机器上安装
lsp-mcp。它管理的语言服务需要直接访问代码库的文件系统,因此无法通过远程连接工作,也无法在源文件所在机器之外运行。
# npm
npm install -g @theupsider/lsp-mcp@latest
# bun
bun install -g @theupsider/lsp-mcp@latest
快速开始
VS Code / Cursor
添加到你的工作区 .vscode/mcp.json 中(推荐 — 确保服务与代码运行在同一台机器上,包括 SSH 远程连接、WSL 和 Dev Containers):
{
"servers": {
"lsp-mcp": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@theupsider/lsp-mcp@latest"]
}
}
}
为什么使用工作区配置? VS Code 会在工作区所在的位置运行
.vscode/mcp.json中定义的服务。用户配置文件中定义的服务始终在本地运行 — 如果代码位于远程机器上,这会导致 LSP 无法正常工作。
CLI
# Run the server (reads from stdin, writes to stdout)
lsp-mcp
服务启动时没有活动项目。大多数客户端会在支持 MCP Roots 协议时自动初始化(VS Code、Copilot 等),但仍可使用 lsp_init 手动覆盖。
对于不支持 Roots 的客户端,模型必须先调用 lsp_init:
lsp_init({ root: "/path/to/your/project" })
lsp_init 将:
- 扫描根目录中的语言标记,并启动匹配的语言服务(尽力而为)
- 如果你显式调用了它,它会从工具列表中消失 — 后续调用任何 LSP 工具时,如果初始化时未检测到该文件对应的语言服务,就会触发该语言服务的延迟启动
- 返回所有已提前启动的服务的运行状态
可选:预热指定语言(跳过检测,加快冷启动):
lsp_init({ root: "/path/to/project", languages: ["python", "typescript"] })
持久化: 初始化后,工作区配置(检测到的语言)会保存到操作系统标准配置目录(Linux 上为 ~/.config/lsp-mcp/,macOS 上为 ~/Library/Application Support/lsp-mcp/,Windows 上为 %APPDATA%\lsp-mcp\)。后续启动服务时,MCP 服务会使用上次记录的根目录自动重新连接,因此通常无需再次调用 lsp_init。
重新出现: 如果之前状态正常的语言服务启动失败(例如,你添加了新语言或移除了二进制文件),lsp_init 会重新出现在工具列表中,提示模型应重新初始化。
可用工具
只读工具
| 工具 | 描述 | 关键参数 | 可见性 |
|---|---|---|---|
lsp_init | 为项目根目录初始化服务 | root(必填),languages(可选字符串数组) | 有条件 — 显式成功调用 lsp_init 后隐藏 |
lsp_definition | 跳转到定义 | file、line、character | 始终 |
lsp_references | 查找所有引用 | file、line、character | 始终 |
lsp_document_symbols | 列出文件中的符号 | file | 始终 |
lsp_workspace_symbols | 在整个工作区搜索符号 | query(限制:100–500 个结果) | 始终 |
lsp_diagnostics | 获取错误和警告 | file(范围:file 或 workspace) | 始终 |
lsp_type_definition | 跳转到类型定义 | file、line、character | 始终 |
lsp_implementation | 查找实现 | file、line、character | 始终 |
lsp_health | 检查所有 LSP 服务的状态 | (无) | 始终 |
写入工具
| 工具 | 描述 | 关键参数 |
|---|---|---|
lsp_rename | 重命名符号 | file、line、character、newName |
lsp_code_action | 应用 / 列出代码操作 | file、line、character、apply |
lsp_formatting | 格式化文档 | file |
lsp_range_formatting | 格式化代码范围 | file、range |
配置
| 环境变量 | 描述 | 默认值 |
|---|---|---|
LSP_MCP_LOG_LEVEL | 日志级别:error、info、debug | info |
设置脚本
项目包含两个辅助脚本,用于设置开发环境:
setup-languages-ubuntu24.sh— 在 Ubuntu 24.04 上安装所有语言运行时、编译器和工具链(Python、Node.js、Java、Go、Rust、Ruby、PHP、Kotlin、Swift 等)setup-lsp.sh— 安装所有语言服务(pyright、typescript-language-server、omnisharp、jdtls、gopls、rust-analyzer、clangd、solargraph、intelephense、kotlin-language-server)
# 1. Install language runtimes
chmod +x setup-languages-ubuntu24.sh
./setup-languages-ubuntu24.sh
# 2. Install language servers
chmod +x setup-lsp.sh
./setup-lsp.sh
# 3. Reload PATH
source ~/.bashrc
故障排除
未找到语言服务
如果无法自动安装语言服务,服务会记录结构化错误,并继续为其他语言运行。请手动安装缺失的服务:
# Python
pipx install python-lsp-server
# C#
dotnet tool install -g omnisharp-roslyn
# Java
npm install -g vscode-java
# Ruby
gem install solargraph
服务无法检测语言
请确保项目根目录包含语言标记文件(例如,TypeScript 项目的 package.json、Rust 项目的 Cargo.toml)。服务会扫描传递给 lsp_init 的目录,以查找这些标记。
内存占用过高
每个语言服务都作为独立进程运行。对于包含多种语言的大型项目,可以考虑限制工作区,或使用 LSP_MCP_LOG_LEVEL=info 监控服务状态。
架构
┌─────────────────────────────────────────────┐
│ MCP Client (AI Model) │
└──────────────────┬──────────────────────────┘
│ MCP Protocol (stdio)
▼
┌─────────────────────────────────────────────┐
│ LSP MCP Server (Node.js) │
│ ┌───────────┐ ┌──────────┐ ┌───────────┐ │
│ │ lsp_init │ │ lsp_... │ │ lsp_... │ │
│ └─────┬─────┘ └────┬─────┘ └─────┬─────┘ │
│ └─────────────┼─────────────┘ │
│ ▼ │
│ Language Router & Adapter │
│ (auto-detects language → selects LSP) │
└──────┬──────────┬──────────┬───────────┬─────┘
│ │ │ │
▼ ▼ ▼ ▼
pyright typescript gopls clangd
pylsp lsp rust- ...
analyzer
许可证
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。