mcp-language-server:为MCP客户端提供代码语义工具支持
mcp-language-server:连接MCP与LSP协议的中间件,为Claude Desktop等MCP AI客户端提供代码语义分析能力。解决AI处理代码时基于文本匹配、缺乏语义理解的痛点,实现查找函数定义、定位引用等IDE级代码操作,让AI真正"理解"代码项目。

mcp-language-server:让AI客户端理解代码语义的中间件
什么是mcp-language-server?
简单说,mcp-language-server是一个连接MCP协议和LSP协议的中间件工具。它让支持MCP(Model Context Protocol)的AI客户端(比如Claude Desktop)能够调用LSP(Language Server Protocol)提供的代码语义分析能力,实现诸如"查找函数定义"、"定位引用"、"重命名符号"等IDE级别的代码操作。
解决的核心痛点
用过AI工具写代码的开发者可能都遇到过类似问题:当你让AI修改某个函数时,它常常找不到这个函数在项目中的具体位置;当你问某个变量被哪些地方引用时,AI只能基于当前上下文猜测,而不是真正分析整个项目。这是因为传统AI客户端处理代码时,本质上还是基于文本匹配,缺乏对代码结构和语义的理解。
mcp-language-server解决的正是这个问题。它相当于给AI客户端装上了"代码语义理解引擎",让AI能够像IDE一样真正"理解"你的代码项目。
核心功能与使用体验
1. 语义工具集
项目提供了一系列实用的代码语义工具,这些都是开发中常用的功能:
- 定义跳转:准确找到任何符号(函数、类型、常量等)的源代码定义
- 引用查找:定位符号在整个项目中的所有使用位置
- 符号重命名:在项目范围内安全地重命名符号
- 诊断信息:获取代码中的语法错误、警告等诊断信息
- 悬停提示:查看符号的文档、类型信息
这些功能通过MCP协议暴露给AI客户端,使AI能够在回答代码问题或修改代码时调用这些工具,大幅提升代码相关交互的准确性。
2. 多语言支持
目前项目已测试支持多种主流编程语言的LSP:
- Go (gopls)
- Rust (rust-analyzer)
- Python (pyright)
- TypeScript (typescript-language-server)
- C/C++ (clangd)
理论上,任何支持stdio通信的LSP都可以适配,扩展性较好。
3. 与MCP客户端集成
以Claude Desktop为例,配置完成后,当你向Claude提问"帮我找到并修改calculateTotal函数",Claude会通过mcp-language-server调用LSP的"定义"功能找到该函数的位置,再调用"编辑"功能进行修改,整个过程无需你手动复制代码上下文。
技术实现亮点
1. 协议桥接设计
项目的核心价值在于它作为MCP和LSP之间的"翻译官"。它向上实现MCP协议与AI客户端通信,向下对接各种LSP服务器,处理两种协议间的数据转换和交互逻辑。这种设计巧妙地复用了成熟的LSP生态,避免了从零开发代码分析能力。
2. 跨语言适配层
不同语言的LSP实现存在细微差异,项目通过抽象层处理这些差异,为上层提供统一的接口。例如在internal/protocol/interfaces.go中处理了不同LSP返回类型的兼容性问题,这部分虽然代码可能"不够优雅",但实用性很强。
3. 测试策略
项目采用快照测试(snapshot tests)策略,在模拟工作区上运行实际的LSP服务并捕获输出,这对于确保不同语言服务器的兼容性非常有效。测试结构清晰,便于维护和扩展新的语言支持。
实际使用场景
场景一:大型项目理解
当接手一个新的大型项目时,你可以让AI通过mcp-language-server分析代码结构:"帮我梳理一下用户认证模块的调用关系",AI会利用引用查找功能生成清晰的调用链。
场景二:安全重构
需要重命名一个被广泛使用的函数时,直接让AI:"把validateUser重命名为validateCredentials,并确保所有引用都更新",AI会调用重命名功能完成项目级修改。
场景三:精准调试
遇到编译错误时,不用复制错误信息给AI,直接说:"帮我看看当前项目有哪些编译错误并修复",AI通过诊断功能获取错误位置和原因,提供更准确的修复方案。
优势与不足
优势
-
填补空白:目前市场上类似的MCP-LSP桥接工具很少,该项目率先解决了AI客户端代码语义理解的痛点。
-
生态复用:巧妙利用现有的LSP生态,避免重复造轮子,支持多种语言只需适配不同LSP即可。
-
配置灵活:支持自定义工作区、环境变量和LSP参数,满足不同项目的需求。
-
Go语言实现:编译简单,跨平台性好,资源占用低。
不足
-
客户端依赖:目前MCP协议的支持还不普及,主要依赖Claude Desktop等少数客户端。
-
配置门槛:对新手不够友好,需要理解LSP、MCP概念,手动配置工作区路径、环境变量等。
-
项目成熟度:作为2024年底才创建的项目,可能存在未覆盖的边缘情况,部分语言服务器的支持深度有待验证。
值得尝试吗?
如果你符合以下情况,这个工具值得一试:
- 经常使用Claude Desktop等支持MCP的AI客户端写代码
- 处理中等规模以上的代码项目,需要频繁进行代码导航和修改
- 熟悉基本的开发工具链,能够理解并配置LSP和环境变量
配置过程虽然稍显繁琐,但一旦设置完成,带来的效率提升是明显的。特别是对于需要经常与AI协作进行代码开发的场景,mcp-language-server能让AI从"文本编辑器"升级为"代码理解伙伴"。
总结
mcp-language-server是一个针对性很强的工具,它解决了AI辅助开发中的一个关键痛点——代码语义理解。通过连接MCP和LSP两个协议,它让AI客户端获得了原本只有IDE才具备的代码分析能力。
项目目前还处于beta阶段,但核心功能已经可用,且有清晰的测试和开发流程。对于使用支持MCP的AI客户端的开发者来说,这是一个值得关注和尝试的工具。随着MCP协议的普及和项目本身的迭代,它可能会成为AI辅助开发中的重要基础设施。