/ 目录 / 演练场 / mcp-language-server
● 社区 isaacphi ⚡ 即开即用

mcp-language-server

作者 isaacphi · isaacphi/mcp-language-server

给你的 agent 提供真正的 LSP 语义能力——go-to-definition、references、rename、diagnostics——通过任何标准输入输出语言服务器。

isaacphi/mcp-language-server 是一个 Go 二进制文件,可以桥接 MCP 到任何标准输入输出 LSP(gopls、rust-analyzer、pyright、typescript-language-server、clangd)。Agent 获得符号级精确操作,而不是文本搜索近似。

为什么要用

核心特性

实时演示

实际使用效果

language-server.replay ▶ 就绪
0/0

安装

选择你的客户端

~/Library/Application Support/Claude/claude_desktop_config.json  · Windows: %APPDATA%\Claude\claude_desktop_config.json
{
  "mcpServers": {
    "language-server": {
      "command": "TODO",
      "args": [
        "See README: https://github.com/isaacphi/mcp-language-server"
      ],
      "_inferred": true
    }
  }
}

打开 Claude Desktop → Settings → Developer → Edit Config。保存后重启应用。

~/.cursor/mcp.json · .cursor/mcp.json
{
  "mcpServers": {
    "language-server": {
      "command": "TODO",
      "args": [
        "See README: https://github.com/isaacphi/mcp-language-server"
      ],
      "_inferred": true
    }
  }
}

Cursor 使用与 Claude Desktop 相同的 mcpServers 格式。项目级配置优先于全局。

VS Code → Cline → MCP Servers → Edit
{
  "mcpServers": {
    "language-server": {
      "command": "TODO",
      "args": [
        "See README: https://github.com/isaacphi/mcp-language-server"
      ],
      "_inferred": true
    }
  }
}

点击 Cline 侧栏中的 MCP Servers 图标,然后选 "Edit Configuration"。

~/.codeium/windsurf/mcp_config.json
{
  "mcpServers": {
    "language-server": {
      "command": "TODO",
      "args": [
        "See README: https://github.com/isaacphi/mcp-language-server"
      ],
      "_inferred": true
    }
  }
}

格式与 Claude Desktop 相同。重启 Windsurf 生效。

~/.continue/config.json
{
  "mcpServers": [
    {
      "name": "language-server",
      "command": "TODO",
      "args": [
        "See README: https://github.com/isaacphi/mcp-language-server"
      ]
    }
  ]
}

Continue 使用服务器对象数组,而非映射。

~/.config/zed/settings.json
{
  "context_servers": {
    "language-server": {
      "command": {
        "path": "TODO",
        "args": [
          "See README: https://github.com/isaacphi/mcp-language-server"
        ]
      }
    }
  }
}

加入 context_servers。Zed 保存后热重载。

claude mcp add language-server -- TODO 'See README: https://github.com/isaacphi/mcp-language-server'

一行命令搞定。用 claude mcp list 验证,claude mcp remove 卸载。

使用场景

实战用法: mcp-language-server

如何安全地在仓库中重命名符号

👤 使用 agent 的多语言开发者 ⏱ ~15 min intermediate

何时使用: 你需要理解作用域的重命名,而不是查找替换。

前置条件
  • 安装 Go — brew install go
  • 你语言的 LSP — gopls: go install golang.org/x/tools/gopls@latest; pyright: pip install pyright; 等等。
  • 安装 MCP — go install github.com/isaacphi/mcp-language-server@latest
步骤
  1. 启动指向你的工作区 + LSP 的 MCP
    添加 MCP 配置:command=mcp-language-server, args=['--workspace','.','--lsp','gopls']。✓ 已复制
    → 工具出现
  2. 先查找引用
    references for symbol 'LegacyAuth' in file auth.go.✓ 已复制
    → 精确的跨仓库引用
  3. 重命名
    rename_symbol 'LegacyAuth' -> 'Auth' at the definition site.✓ 已复制
    → 所有调用位置正确更新

结果: 仓库范围内语义正确的重命名。

注意事项
  • Agent 在工具失败时退回到文本查找替换 — 重命名后验证诊断——编译错误意味着 LSP 拒绝了,agent 作弊了
搭配使用: github

如何让 agent 像你在 IDE 中那样导航

👤 厌倦重复使用 grep 的 agent 用户 ⏱ ~10 min beginner

何时使用: Agent 一直在读整个文件来找一个函数。

步骤
  1. 查询定义
    definition for 'computeTax' in src/billing.ts.✓ 已复制
    → 精确的文件:行位置
  2. 拉取诊断
    diagnostics for the current file.✓ 已复制
    → 来自 LSP 的红色波浪线

结果: Agent 像 IDE 用户一样导航。

注意事项
  • LSP 未初始化——第一次调用很慢 — 用工作区中的文件列表预热;pyright 特别是索引速度很慢
搭配使用: contextplus

如何为多语言 monorepo 运行多个 LSP

👤 从事 Go+TS+Python monorepo 工作的开发者 ⏱ ~25 min advanced

何时使用: 你希望在每种语言中都有语义操作。

步骤
  1. 为每个 LSP 注册一个 MCP
    Add 3 MCP entries: lsp-go (gopls), lsp-ts (tsserver), lsp-py (pyright), each scoped to its workspace subfolder.✓ 已复制
    → 3 组特定语言的工具
  2. 轮流使用它们
    For TypeScript questions use lsp-ts:definition; for Go use lsp-go:definition.✓ 已复制
    → 每种语言的正确语义

结果: 所有语言的语义感知导航。

注意事项
  • Agent 忘记了哪个 MCP 处理哪种语言 — 描述性地重命名工具前缀并在项目内存中提及

组合

与其他 MCP 搭配,撬动十倍杠杆

language-server + contextplus

结合 LSP 导航和语义/嵌入搜索进行更广泛的查询

使用语言服务器的 references 来精确查找 computeTax 的用法,然后使用 contextplus 语义搜索查找概念相关的函数。✓ 已复制
language-server + github

重命名 + commit + PR

通过 LSP 将 LegacyAuth 重命名为 Auth,commit 到新分支,打开 PR。✓ 已复制

工具

此 MCP 暴露的能力

工具输入参数何时调用成本
definition file: str, symbol_or_position 跳转到声明 free (local LSP)
references file: str, symbol_or_position 查找用法 free
diagnostics file: str 检查错误/警告 free
hover file, position 符号的类型信息/文档 free
rename_symbol file, position, new_name 安全重命名 free
edit_file file, edits LSP 验证的编辑 free

成本与限制

运行它的成本

API 配额
无——本地 LSP
每次调用 Token 数
小——LSP 响应紧凑
费用
免费
提示
在使用嵌入搜索之前使用 LSP 支持的工具——通常更便宜且更精确。

安全

权限、密钥、影响范围

最小权限: 工作区的文件系统读写权限
凭据存储:
数据出站: 仅限本地主机;LSP 在进程内运行
切勿授予: 不要指向包含秘密的工作区——LSP 有时会索引它们

故障排查

常见错误与修复

工具返回 'LSP not ready'

第一次调用触发初始化——2-5 秒后重试,或用 hover 调用预热。

gopls: 'no packages found'

将工作区指向模块根目录(go.mod 所在位置),而不是子文件夹。

验证: go env GOMOD
pyright 在大型仓库上很慢

配置 pyrightconfig.json 以排除 vendored 目录。

rename_symbol 报告成功但编译仍失败

重命名涉及了 LSP 看不见的字符串字面量或基于反射的代码。检查 grep 查找旧名称。

替代方案

mcp-language-server 对比其他方案

替代方案何时用它替代权衡
Context+你想要嵌入 + 内存图而不是 LSP 语义在重命名/引用上不够精确
Serena MCP你想要 LSP 和高级重构不同的设置;基于 Python

更多

资源

📖 阅读 GitHub 上的官方 README

🐙 查看未解决的 issue

🔍 浏览全部 400+ MCP 服务器和 Skills