使用说明
MCP语言服务器
注: 此存储库是 isaacphi/mcp语言服务器它经历了重大的架构更改(通过配置文件在单个进程中支持多个语言服务器),并且不打算合并回原始存储库。
一种模型上下文协议(MCP)服务器,用于管理单个工作区内不同编程语言的多个语言服务器。它提供了基于文件上下文或显式语言规范与适当的语言服务器通信的工具。
动机
语言服务器擅长LLM经常遇到的任务,例如精确理解类型、导航复杂的代码库以及在大型项目中提供准确的符号引用。该项目旨在通过统一的MCP接口将多语言服务器的功能带给LLM,从而实现更复杂的代码理解和操作能力。
状态
⚠️ 测试前质量⚠️
我已经用以下语言服务器测试了此服务器
- 版权(Python)
- tsserver(TypeScript)
- gopls(围棋)
- 锈蚀分析仪(rust)
但它应该兼容更多。
工具
此服务器提供以下工具,根据文件扩展名(用于基于文件的工具)或显式 language 争论。
read_definition:检索符号的完整源代码定义。 需要alanguage论点 (例如。,"typescript","go")指定要查询的语言服务器。find_references:查找符号的所有用法和引用。 需要alanguage论点 (例如。,"typescript","go")指定要查询的语言服务器。get_diagnostics:提供特定文件的诊断信息(语言由文件扩展名决定)。get_codelens:检索特定文件(由文件扩展名确定的语言)的代码镜头提示。execute_codelens:为特定文件(由文件扩展名确定的语言)运行代码镜头操作。apply_text_edit:允许以编程方式对文件进行多次文本编辑(语言由文件扩展名决定)。支持简单的插入/删除/替换,基于正则表达式的替换(使用isRegex,regexPattern,regexReplace),以及可选的支架平衡保护(使用preserveBrackets,bracketTypes)防止编辑破坏配对,如(),{},[].
在幕后,此MCP服务器可以对 workspace/applyEdit 来自语言服务器的请求,启用重构、添加导入和代码格式化等功能。
大多数工具支持以下选项 showLineNumbers。有关详细用法,请参阅工具模式。
关于
此代码库使用来自的编辑代码 gopls 以处理LSP通信。详细信息请参见属性。
麦高朗 用于MCP通信。
先决条件
- 安装Go: 请遵循以下说明 https://golang.org/doc/install
- 安装语言服务器: 为项目中要使用的语言安装语言服务器。示例:
- Python(版权):
npm install -g pyright
- Python(版权):
- TypeScript(tsserver):
npm install -g typescript typescript-language-server - Go(gopls):
go install golang.org/x/tools/gopls@latest - 锈蚀(锈蚀分析仪):
rustup component add rust-analyzer - 或使用任何语言服务器
设置
-
构建服务器: 克隆存储库并构建可执行文件:
git clone https://github.com/isaacphi/mcp-language-server.git cd mcp-language-server go build -o mcp-language-server . -
创建配置文件(
config.json): 创建JSON配置文件(例如。,config.json在项目根目录或其他位置)定义要管理的语言服务器。config.json例子:{ "workspaceDir": "/Users/you/dev/yourcodebase", // Absolute path to your project root "languageServers": [ { "language": "typescript", // Unique name for the language "command": "typescript-language-server", // Command to run the LSP server "args": ["--stdio"], // Arguments for the LSP command "extensions": [".ts", ".tsx", ".js", ".jsx"] // File extensions for this language }, { "language": "go", "command": "/path/to/your/gopls", // Absolute path or command name for gopls "args": [], "extensions": [".go"] }, { "language": "python", "command": "pyright-langserver", "args": ["--stdio"], "extensions": [".py"] } // Add entries for other languages as needed ] }- 替换
/Users/you/dev/yourcodebase与你的项目的绝对路径。 - 替换
/path/to/your/gopls为每个语言服务器提供正确的命令或绝对路径。
- 替换
-
配置MCP客户端: 将以下配置添加到您的Claude Desktop设置(或类似的启用MCP的客户端)中,必要时调整路径:
{ "mcpServers": { "mcp-language-server": { // You can choose any name here "command": "/full/path/to/your/clone/mcp-language-server/mcp-language-server", // Absolute path to the built executable "args": [ "--config", "/full/path/to/your/config.json" // Absolute path to your config.json ], "cwd": "/full/path/to/your/clone/mcp-language-server", // Optional: Set working directory to project root "env": { // Add any necessary environment variables for LSP servers (e.g., PATH) // "PATH": "...", "DEBUG": "1" // Optional: Enable debug logging } } // Add other MCP servers here if needed } }- 确保
command路径指向mcp-language-server您构建的可执行文件。 - 确保
--config论点指向config.json您创建的文件。 - 集
cwd如果需要(通常是包含可执行文件的目录)。 - 添加所需的环境变量(如
PATH如果使用垫片,如asdf)到env对象。
- 确保
发展
克隆存储库:
git clone https://github.com/isaacphi/mcp-language-server.git
forcd mcp-language-server
安装开发依赖项:
go mod download
构建:
go build
配置您的Claude Desktop(或类似设备)以使用本地二进制文件,类似于安装部分,确保 command 指向本地构建的可执行文件和 --config 论点指向你的发展 config.json:
{
"mcpServers": {
"mcp-language-dev": { // Example name for development server
"command": "/full/path/to/your/clone/mcp-language-server/mcp-language-server", // Path to your built binary
"args": [
"--config", "/full/path/to/your/clone/mcp-language-server/config.dev.json" // Path to your development config file
],
"cwd": "/full/path/to/your/clone/mcp-language-server", // Working directory
"env": {
"DEBUG": "1" // Enable debug logging for development
}
}
}
}
记得创建一个 config.dev.json (或类似)用于您的开发环境。
重建(go build -o mcp-language-server .)在进行代码更改后。
反馈
包含
env: {
"DEBUG": 1
}
获取详细的LSP和应用程序日志。在打开问题时,请尽可能多地提供信息。
以下功能在我的雷达上:
- [x] 阅读定义
- [x] 获取推荐信
- [x] 应用编辑
- [x] 获取诊断信息
- [x] 编码镜头
- []悬停信息
- []代码操作
- []更好地处理上下文和取消
- []添加LSP服务器配置选项和常用语言的预设
- []为工具(分页等)创建一个更加一致和可扩展的API
- []在更高的抽象级别创建工具,在阅读定义或引用时结合诊断、代码镜头、悬停和代码操作。