多语言智能感知服务器

LSP-MCP服务器自动连接正确的语言服务器(如clangd、pyright等),为Claude Code提供多语言智能感知功能,包括错误诊断、代码补全、类型信息和代码导航。

  • by goodwinka
  • TypeScript
  • 本地部署
  • 1 星标
  • 更新于
在 GitHub 查看 goodwinka/LSP-MCP-Server

使用说明

LSP-MCP服务器——LLM的通用智能感知

自动连接右侧的MCP服务器 语言服务器 (cland、pyright、tsserver、gopls、生锈分析器……)并为Claude Code提供完整的智能感知 任何语言,包括 流处理器:错误诊断、补全、类型信息和代码导航。

支持的语言

语言 LSP服务器 扩展
C/C++/Qt/CUDA clangd .C.h.cpp.cxx.cc.hpp.hxx.hh.ipp.cu.cuh
Python 版权/pylsp .py.pyi
TypeScript/JavaScript TypeScript语言服务器 .ts.tsx.js.jsx.mjs.cjs
加油 gopls .加油
锈蚀 锈蚀分析仪 .rs
Java jdtls .Java
Kotlin Kotlin语言服务器 .kt.kts
齐格 齐格
Lua Lua语言服务器 .Lua
Bash/Shell Bash语言服务器 .sh.Bash.zsh
CSS/SCSS/LESS vscode-CSS语言服务器 .CSS.SCSS.LESS
HTML vscode HTML语言服务器 .HTML.htm
JSON vscode-JSON语言服务器 .JSON。JSON
CMake CMake语言服务器 .CMake

服务器 自动选择 按文件扩展名选择正确的LSP。打开A .cpp file--cland开始。打开A .py 文件——版权开始。一切都是透明的。

运作原理

Claude Code  ──(MCP/stdio)──►  lsp-mcp-server  ──(LSP/JSON-RPC)──►  clangd
                                       │                              pyright
                                       │                              tsserver
                                       └── ServerPool ──────────────► gopls
                                            (lazy start,               rust-analyzer
                                             one per language)         ...

语言服务器启动 懒洋洋地 --仅当请求该类型的第一个文件时。客户端被缓存并在会话中的所有工具调用中重用。

LLM可以:

  1. 写前 --通过以下方式查询函数签名 get_completions 和 get_hover
  2. 写后 --奔跑 diagnose_file 或 diagnose_workspace 查看错误
  3. 重构期间 --通过查找所有用法 find_references

安装

选项A:自动设置(推荐)

git clone https://github.com/goodwinka/lsp-mcp-server
cd lsp-mcp-server
bash install.sh

该脚本构建服务器,检查安装了哪些语言服务器,并生成 .mcp.json 对于当前的项目。

选项B:手动设置

1.构建服务器

cd lsp-mcp-server
npm install
npm run build      # compile TypeScript → dist/
# or for development without a build step:
npm run dev        # run directly via tsx

2.安装所需的语言服务器

仅安装与您的项目相关的:

# C++ / Qt
sudo apt install clangd          # or: brew install llvm

# Python
npm install -g pyright           # or: pip install pyright

# TypeScript / JavaScript
npm install -g typescript-language-server typescript

# Go
go install golang.org/x/tools/gopls@latest

# Rust
rustup component add rust-analyzer

# Bash
npm install -g bash-language-server

# CSS / HTML / JSON
npm install -g vscode-langservers-extracted

# CMake
pip install cmake-language-server
# Note: works with .cmake files only, not CMakeLists.txt directly

# Lua
brew install lua-language-server         # macOS
# Linux: download from https://github.com/LuaLS/lua-language-server/releases

# Java (Eclipse JDT LS)
# Download and install: https://github.com/eclipse-jdtls/eclipse.jdt.ls/releases
# Make sure the `jdtls` command is available in PATH

# Kotlin
# Download from https://github.com/fwcd/kotlin-language-server/releases
# Make sure `kotlin-language-server` is available in PATH

# Zig
# Download from https://github.com/zigtools/zls/releases
# Make sure `zls` is available in PATH

使用 list_servers 工具查看您的系统上安装了什么。

3.连接到克劳德代码

选项A:项目配置 (.mcp.json 在项目根中)

{
  "mcpServers": {
    "intellisense": {
      "command": "node",
      "args": ["/absolute/path/to/lsp-mcp-server/dist/index.js", "--project", "."]
    }
  }
}

选项B:全局配置 (~/.claude/claude_desktop_config.json)

{
  "mcpServers": {
    "intellisense": {
      "command": "node",
      "args": [
        "/absolute/path/to/lsp-mcp-server/dist/index.js",
        "--project", "/path/to/your/project"
      ]
    }
  }
}

选项C:环境变量

{
  "mcpServers": {
    "intellisense": {
      "command": "node",
      "args": ["/absolute/path/to/lsp-mcp-server/dist/index.js"],
      "env": {
        "LSP_PROJECT_ROOT": "/path/to/your/project",
        "LSP_MCP_DEBUG": "1"
      }
    }
  }
}

可用工具

工具 说明
diagnose_file 磁盘上文件的编译器错误/警告
diagnose_workspace 所有语言服务器上当前会话中打开的所有文件的错误/警告
get_completions 在给定位置完成(从0开始的行/字符)
get_hover 符号的类型和文件
get_definitions 跳转到符号定义
find_references 查找项目中符号的所有用法
get_symbols 文件的符号树(类、函数、变量……)
list_servers 显示所有语言、服务器状态(正在运行/已安装/缺失)

诊断工作空间

在一次调用中返回工作区范围的诊断摘要,不需要文件内容。报告错误和警告总数、受影响的文件数量以及每个文件的详细信息。

清洁时的输出示例:

✅ Workspace clean — 3 file(s) checked, no errors or warnings

有问题的输出示例:

Found 2 error(s), 1 warning(s) across 1/3 file(s):

Found 2 diagnostic(s) in src/main.cpp:

ERROR src/main.cpp:12:5 [clang]: no member named 'nonExistent' in 'QWidget'
WARN  src/main.cpp:8:3 [clang]: unused variable 'x'

使用示例

> Check src/mainwindow.cpp for errors
  → [clangd] diagnose_file("src/mainwindow.cpp")

> Check all open files for errors
  → diagnose_workspace()

> Check app/models.py
  → [pyright] diagnose_file("app/models.py")

> What methods does QTableView have?
  → get_completions on a .cpp file with QTableView*

> Show the signature of pandas.read_csv
  → get_hover on a .py file

> What servers are available?
  → list_servers

C++/Qt使用技巧

cland与a配合得最好 compile_commands.json 在项目根目录中:

# CMake
cmake -DCMAKE_EXPORT_COMPILE_COMMANDS=ON ..

# qmake via Bear
bear -- make

# Or manually — create a .clangd file in the project root:
cat > .clangd << 'EOF'
CompileFlags:
  Add:
    - -std=c++17
    - -I/usr/include/qt6
    - -I/usr/include/qt6/QtCore
    - -I/usr/include/qt6/QtWidgets
    - -I/usr/include/qt6/QtGui
    - -fPIC
EOF

混合C/C++项目:the -std=c++17 标记在 .clangd 与plain不兼容 .c 文件夹。对于混合项目 .c 和 .cpp,使用 compile_commands.json 相反。

CUDA提示

CUDA C++(.cu,.cuh)

cland原生支持CUDA(它基于clang)。您需要安装CUDA工具包:

# Verify installation
nvcc --version

为了获得最佳的IntelliSense结果,请生成 compile_commands.json:

# CMake with CUDA
cmake -DCMAKE_CUDA_COMPILER=nvcc -DCMAKE_EXPORT_COMPILE_COMMANDS=ON ..

或者创建一个 .clangd 项目根目录中的文件:

CompileFlags:
  Add:
    - --cuda-gpu-arch=sm_75
    - --cuda-path=/usr/local/cuda
    - -I/usr/local/cuda/include
    - -std=c++17

没有CUDA工具包,cland将报告 Cannot find CUDA installation。安装工具包以修复它。

CUDA Python(CuPy、Numba、PyCUDA)

Python CUDA库通过标准版权工作,不需要特殊设置。 为了改进类型检查,请安装存根:

# CuPy — stubs are bundled in the package
pip install cupy-cuda12x    # or cupy-cuda11x

# Numba
pip install numba

# PyCUDA
pip install pycuda

Pyright将自动从已安装的软件包中提取类型。

Python技巧

Pyright自动读取 pyrightconfig.json 和 pyproject.toml对于虚拟环境,要么激活 venv 在开始之前,或在配置中指定解释器路径:

{
  "venvPath": ".",
  "venv": ".venv"
}

如果两者都有 pyright 和 pylsp 已安装, 火葬场 已使用(它在注册表中列在首位)。要改用pylsp,请删除或重命名 pyright-langserver.

Types/JavaScript技巧

typescript-language-server 使用项目中的TypeScript编译器 node_modules 如果可用,或回退到全局安装 typescript.

npm install -g typescript-language-server typescript

对于monorepos或项目 tsconfig.json 在根目录之外,配置 tsconfig.json 路径适当——tsserver会自动拾取它。

命令行界面

--project, -p <path>    Path to the project root (required)
--help, -h              Show help and exit

环境变量

变量 描述
LSP_PROJECT_ROOT 项目路径(如果 --project 未设置)
LSP_MCP_DEBUG=1 将语言服务器stderr打印到stdout

故障排除

为我的文件选择了哪个服务器?

使用 list_servers 工具——它显示所有服务器、它们的状态和支持的扩展。服务器由文件扩展名自动选择。

pyright和pylsp都已安装

火葬场 在注册表中排名第一,将用于 .py 文件夹。要改用pylsp,请删除或重命名 pyright-langserver.

CMakeLists.txt未被诊断

cmake-language-server 仅附于 .cmake 文件夹。 CMakeLists.txt 不支持——这是当前基于扩展的语言检测的局限性。

服务器已启动,但未显示诊断信息

启用调试输出(LSP_MCP_DEBUG=1)并检查语言服务器的stderr。对于C++项目,请确保 compile_commands.json 或一个 .clangd 文件存在。

错误“路径在项目根目录之外”

所有文件路径必须 相对于项目根 在...中指定 --project。不接受绝对路径。

许可证

麻省理工学院