mcpField
L
lsp-mcp

lsp-mcp

本地服务
github.com/theUpsider开发工具35 天前更新

关于 lsp-mcp

lsp-mcp 是 MCP 服务,为大模型提供跨多种编程语言的统一语言服务器功能接口。它根据项目标记文件检测语言并选择语言服务器,减少手动配置。

主要功能

  1. 01自动检测项目语言
  2. 02自动选择语言服务器
  3. 03查找定义、引用和符号
  4. 04诊断、重命名和代码操作
  5. 05格式化与代码修改
  6. 06单个项目运行多个语言服务器

适用场景

  1. 01在代码库中导航定义和引用
  2. 02检查多语言项目诊断
  3. 03重命名符号并应用代码操作
  4. 04通过 MCP 客户端格式化文件

MCP 相关

该服务通过 stdio 将语言服务器操作作为 MCP 工具开放。支持 MCP Roots 的客户端可自动初始化工作区,其他客户端可通过项目根目录调用 `lsp_init`。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"theupsider-lsp": {
"command": "npx",
"args": [
"-y",
"@theupsider/lsp-mcp"
]
}
}
}
启动命令npx -y @theupsider/lsp-mcp

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
npm@theupsider/lsp-mcp0.1.6

工具

17

收录的工具列表 · 更新于 3 周前

参数类型必填说明
rootstring是
languagesarray否

详细介绍

通用 LSP MCP 服务

一个 MCP 服务统管所有语言服务——自动检测语言,零配置启动。

License: Apache-2.0 npm version Node.js Platform

概述

一个 Model Context Protocol(MCP)服务,让大模型能够使用所有主流编程语言的 Language Server Protocol(LSP) 功能。与现有的 LSP-MCP 服务不同,本项目开箱即支持 13 种语言,无需手动配置——它会自动检测代码库、选择合适的语言服务,并通过稳定且与语言无关的工具接口提供所有 LSP 操作。

支持的语言

语言语言服务自动检测依据
Pythonpyright / pylsppyproject.toml、setup.py
TypeScripttypescript-language-servertsconfig.json
JavaScripttypescript-language-serverpackage.json
C#omnisharp*.csproj、*.sln
Javavscode-java / jdtlspom.xml、build.gradle
Gogoplsgo.mod
Rustrust-analyzerCargo.toml
C / C++clangd*.c、*.cpp、*.h
RubysolargraphGemfile
PHPintelephensecomposer.json
Kotlinkotlin-language-serverbuild.gradle.kts
Swiftsourcekit-lspPackage.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 将:

  1. 扫描根目录中的语言标记,并启动匹配的语言服务(尽力而为)
  2. 如果你显式调用了它,它会从工具列表中消失 — 后续调用任何 LSP 工具时,如果初始化时未检测到该文件对应的语言服务,就会触发该语言服务的延迟启动
  3. 返回所有已提前启动的服务的运行状态

可选:预热指定语言(跳过检测,加快冷启动):

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、debuginfo

设置脚本

项目包含两个辅助脚本,用于设置开发环境:

  • 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

许可证

Apache-2.0

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。