MCP 语言服务器
这是一个基于 Model Context Protocol (MCP) 的服务器,运行语言服务器并提供与之通信的工具。
动机
在使用 文件系统服务器 的 Claude 桌面版中,处理小型项目时感觉就像魔法一样。然而,当项目规模增大,添加了多个文件和导入后,这种体验就开始瓦解。通过本项目,我希望在大型项目中也能实现类似的体验。
语言服务器擅长处理大语言模型(LLM)通常难以胜任的任务,例如精确理解类型、理解关系以及提供准确的符号引用。本项目旨在将这些工具引入 LLM。LSP(Language Server Protocol)显然是 MCP 的灵感来源,因此为什么不将它们结合在一起呢?
状态
⚠️ 预测试版本 ⚠️
我已使用以下语言服务器测试过该服务器:
- gopls (Go)
- pyright (Python)
- typescript-language-server (TypeScript)
- rust-analyzer (Rust)
但它应该与更多语言服务器兼容。
工具
read_definition
:从代码库中检索任何符号(函数、类型、常量等)的完整源代码定义。
find_references
:查找代码库中某个符号的所有使用和引用。
get_diagnostics
:提供特定文件的诊断信息,包括警告和错误。
get_codelens
:检索代码镜头提示,为代码提供额外的上下文和操作。
execute_codelens
:执行代码镜头操作。
apply_text_edit
:允许以编程方式对文件进行多次文本编辑。
hover
:显示给定位置的文档、类型提示或其他悬停信息。
rename_symbol
:在整个项目中重命名符号。
在幕后,该 MCP 服务器可以处理来自语言服务器的
workspace/applyEdit
请求,因此它可以应用诸如重构请求、添加导入、格式化代码等操作。每个工具都支持各种选项以自定义输出,例如包含行号或额外上下文。有关详细用法,请参阅工具文档。对于
apply_text_edit
,行号是必要的,以便能够进行准确的编辑。关于
mcp-go 用于 MCP 通信。
前提条件
获取或更新该服务器:
为您的代码库安装语言服务器:
- Python (pyright):
npm install -g pyright
- TypeScript (typescript-language-server):
npm install -g typescript typescript-language-server
- Go (gopls):
go install golang.org/x/tools/gopls@latest
- Rust (rust-analyzer):
rustup component add rust-analyzer
- 或使用任何语言服务器
设置
将类似以下配置添加到您的 Claude 桌面版设置(或类似的 MCP 客户端)中:
替换以下内容:
/Users/you/dev/yourcodebase
为您的项目绝对路径
/opt/homebrew/bin/pyright-langserver
为您的语言服务器路径(使用which
命令查找,例如which pyright-langserver
)
--
之后的任何参数都将作为参数传递给您的语言服务器。
- 任何环境变量都将传递给语言服务器。某些语言服务器可能需要特定的环境变量。例如,
gopls
需要GOPATH
和GOCACHE
才能正常工作。
LOG_LEVEL
是可选的。请参阅下文。
开发
克隆仓库:
安装开发依赖:
构建:
运行测试:
更新测试快照:
配置您的 Claude 桌面版(或类似客户端)以使用本地二进制文件:
在更改后重新构建。
反馈
包含以下内容:
以获取详细的 LSP 和应用程序日志。将
LOG_LEVEL
设置为 DEBUG 会启用所有组件的详细日志记录。添加 LOG_COMPONENT_LEVELS
并设置为 wire:DEBUG
可以显示原始的 LSP JSON 消息。请在提交问题时尽可能提供详细信息。以下功能正在规划中:
读取定义
获取引用
应用编辑
获取诊断信息
代码镜头
悬停信息
重命名符号
代码操作
更好地处理上下文和取消
添加 LSP 服务器配置选项和常见语言的预设
在更高层次的抽象上创建工具,结合诊断、代码镜头、悬停信息和代码操作,以在读取定义或引用时提供更全面的支持。
- Author:waytomcp
- URL:https://www.waytomcp.com/article/isaacphi/mcp-language-server
- Copyright:All articles in this blog, except for special statements, adopt BY-NC-SA agreement. Please indicate the source!