代码导航服务

一个轻量级的MCP服务器,通过语言服务器为AI代理提供类型感知的代码导航和快速文件搜索功能。

  • by garretpremo
  • TypeScript
  • 本地部署
  • 更新于
在 GitHub 查看 garretpremo/lsp-mcp-server

使用说明

lsp-mcp服务器

轻量级的 主控程序 该服务器通过语言服务器向AI代理公开类型感知代码导航和快速文件搜索。它按需管理语言服务器进程,路由来自MCP工具调用的LSP请求,并返回结构化结果——让代理跳到定义、查找引用、列出符号和定位文件,而无需读取整个代码库。

安装

选项1:克劳德代码插件(推荐)

克隆、安装和注册为Claude Code插件的一个命令:

git clone https://github.com/garretpremo/lsp-mcp-server.git ~/.local/share/lsp-mcp-server \
  && cd ~/.local/share/lsp-mcp-server && bun install \
  && bash scripts/install-plugin.sh

重新启动Claude代码(或运行 /reload-plugins)激活。该插件添加了一项技能,指导Claude何时使用每个工具,并且MCP服务器会自动为每个项目运行。

选项2:每次会话(不安装)

git clone https://github.com/garretpremo/lsp-mcp-server.git ~/tools/lsp-mcp-server \
  && cd ~/tools/lsp-mcp-server && bun install

然后用以下代码启动Claude Code:

claude --plugin-dir ~/tools/lsp-mcp-server/plugin

选项3:手动MCP配置

添加到您的项目 .mcp.json 或 ~/.claude/settings.json:

{
  "mcpServers": {
    "lsp-mcp-server": {
      "command": "bun",
      "args": ["run", "/path/to/lsp-mcp-server/src/index.ts", "--project", "."]
    }
  }
}

选项4:独立(任何MCP客户端)

bun run src/index.ts --project /path/to/your/project

通过stdio JSON-RPC进行通信——可与任何兼容MCP的客户端配合使用。

可用工具

工具 说明
find_file 基于项目文件索引的模糊文件名搜索
reindex 重建文件索引(完整项目或子目录)
go_to_definition 跳转到给定文件位置的符号定义
find_references 查找给定文件位置处对符号的所有引用
document_symbols 列出文件中的所有符号(类、函数等)
workspace_symbol 在整个项目中按名称搜索符号

所有LSP导航工具都接受可选的丰富标志: includeKind, includeContainer,以及 includeDocstring.

配置

地点a config.json 在项目根目录中覆盖语言服务器命令或请求超时:

{
  "requestTimeout": 15000,
  "languageServers": {
    "typescript": {
      "command": "typescript-language-server",
      "args": ["--stdio"]
    },
    "java": {
      "command": "jdtls",
      "args": []
    }
  }
}

如果不 config.json 如果找到,则使用默认值。 requestTimeout 以毫秒为单位(默认值: 10000).

基准测试:lsp-mcp服务器与JetBrains mcp

针对4381文件的Angular/TypeScript项目(Nx monorepo)进行了测试。

文件搜索-“文档查看器”

lsp-mcp服务器 JetBrains mcp
响应大小 ~1500个字符 9792个字符
结果 10个文件,按相关性排序 40个项目(文件+目录),未排序,按工作树重复
格式 绝对路径+相对路径 包含工作树重复项的平面路径列表

文件符号-- reports.service.ts

lsp-mcp服务器 JetBrains mcp
响应大小 ~5200个字符 4486个字符
结果类型 31个结构化符号(名称、种类、容器、代码段) 原始文件文本(没有可用的符号工具)
结构化的 是--类、方法、具有层次结构的属性 否--LLM必须从原始文本中解析符号

转到定义-- HttpClient 导入

lsp-mcp服务器 JetBrains mcp
响应大小 约550个字符 34868个字符
结果类型 1个精确的定义位置 50个文本匹配(grep风格,非语义)
语义 是--LSP供电,支持类型识别 否--文本搜索 search_in_files_by_text

代理令牌使用情况(相同任务,Sonnet模型)

lsp-mcp服务器 JetBrains mcp
代币总数 18,910 25,994
工具调用 3 10

总结

  • 小6.5倍 文件搜索响应
  • 63倍更小 定义查找响应
  • 代币减少27% 被代理人消耗
  • 结构化符号数据与原始文本
  • 真正的LSP语义与基于文本的grep

先决条件

您的计算机上必须安装并提供以下语言服务器 PATH:

语言服务器是延迟启动的——只有在首次访问匹配类型的文件时。

许可证

麻省理工学院