使用说明
语言服务器协议MCP服务器
一个全面的MCP(模型上下文协议)服务器,将语言服务器协议(LSP)功能与Claude连接起来,实现跨多种编程语言的智能代码分析、导航和开发协助。
特性
核心能力
- 多语言支持:Go、Helm、Kotlin、Python、Terraform、TypeScript和 更多
- 智能代码分析:符号定义、引用、实现和类型层次结构
- 高级导航:调用层次结构、文档符号和工作区范围内的符号搜索
- 代码智能:悬停信息、补全、签名帮助和嵌入提示
- 格式化和重构:文档格式、范围格式和代码操作建议
- 项目管理:具有全面文件索引的多项目工作区支持
安全与性能
- 进程隔离:每个语言服务器都在具有适当生命周期管理的隔离进程中运行
- 速率限制:可配置的请求限制(默认值:100个请求/分钟)
- 资源管理:并发文件读取限制和优雅的关机处理
- 错误恢复:具有自动服务器重启功能的强大错误处理
语言服务器设置
先决条件
MCP服务器基础是建立在经过实战测试的基础上的 vscode-jsonrpc 和 vscode-languageserver-protocol 库,提供与所有VSCode的兼容性 语言服务器.安装示例 Kotlin 语言服务器:
brew install JetBrains/utils/kotlin-lsp
配置文件
创建一个MCP服务器配置文件,定义您的语言服务器和项目。
[!注意] A.
lsp.json提供了一个包含流行开发语言和多个项目的配置示例作为入门指南。
语言服务器配置具有以下格式:
{
"servers": {
"language-id": { # Required unique language identifier
"command": "language-server-binary", # Required language server binary
"args": [ # Optional language server arguments
"--stdio"
],
"configuration": {}, # Optional language server configuration
"env": {}, # Optional environment variables
"extensions": [ # Required language server extensions
".extension"
],
"init": [], # Optional language server initialization commands
"projects": [ # Required language server list of projects
{
"name": "project-name", # Required unique project name
"description": "A description", # Optional description
"url": "https://github.com/org/project", # Optional project URL
"path": "/Users/username/github/project" # Required project local path
"patterns": { # Optional exclude or include patterns
"exclude": [
"**/directory",
"**/file.extension"
],
"include": [
"**/directory",
"**/file.extension"
],
}
}
],
"settings": { # Optional language server settings
"maxConcurrentFileReads": 10,
"messageRequest": true,
"preloadFiles": true,
"rateLimitMaxRequests": 100,
"rateLimitWindowMs": 60000,
"registrationRequest": true,
"shutdownGracePeriodMs": 100,
"timeoutMs": 600000,
"workspace": true
}
}
}
}
可选语言服务器配置
语言服务器通常需要特定的配置才能最佳运行。配置要求记录在每台服务器的 官方存储库.
例如, pyright-langserver 需要以下设置:
"configuration": {
"settings": {
"python": {
"analysis": {
"autoSearchPaths": true,
"diagnosticMode": "workspace"
}
}
}
}
可选语言服务器设置
这些设置控制LSP协议行为和服务器兼容性:
maxConcurrentFileReads-打开项目文件时并发读取的最大文件数,控制项目初始化期间的内存使用和性能(默认值:10)messageRequest-控制语言服务器是否可以发送window/showMessage请求显示用户对话框,禁用无头操作或自动化环境(默认:true)preloadFiles-控制是在项目初始化期间还是之后加载项目文件(默认值:true)rateLimitMaxRequests-每个速率限制窗口允许的最大请求数,防止语言服务器因太多并发请求而不堪重负(默认值:100)rateLimitWindowMs-速率限制的时间窗口(以毫秒为单位),请求在此滑动窗口内计数(默认值:60000-1分钟)registrationRequest-控制语言服务器是否可以发送client/registerCapability请求动态注册功能,对于忽略客户端功能声明的服务器禁用(默认:true)shutdownGracePeriodMs-在发送关闭请求后强制终止进程之前等待的时间(毫秒),允许语言服务器完成清理操作(默认值:100)timeoutMs-等待语言服务器初始化的最长时间(毫秒),防止挂在无响应的服务器上(默认值:600000-10分钟)workspace-控制语言服务器初始化是否发送workspace/symbol测试工作区功能的请求,对于不支持工作区操作或导致初始化失败的服务器禁用(默认值:true)
可选语言服务器项目文件模式
文件模式使用 fast-glob 语法。默认情况下 . 点前缀, __ 双下划线前缀, bin, build, cache, coverage, dist, docs, excludes, log, node_modules, obj, out, target, temp, tests, tmp, vendor 和 venv 目录被排除在外。使用 include 或 exclude 用于管理特定目录或文件的模式(例如。, **/dist, **/dist/**/*.d.ts, **/*.test.js).
MCP服务器配置
添加到您的 mcp.json MCP服务器配置:
{
"mcpServers": {
"language-server": {
"command": "npx",
"args": [
"-y",
"@axivo/mcp-lsp"
],
"env": {
"LSP_FILE_PATH": "/Users/username/github/mcp-lsp/.claude/lsp.json"
}
}
}
}
环境变量
LSP_FILE_PATH-LSP服务器配置JSON文件的绝对路径
多语言服务器使用情况
同时运行多个语言服务器以分析不同的项目:
✅ ansible (k3s-cluster) + typescript (k3s-cluster-actions)
✅ go (helm) + kotlin (ktor) + python (fastapi)
语言服务器只能运行 一次一个项目:
❌ typescript (mcp-lsp) + typescript (typescript-sdk)
要切换项目,请使用所需的项目名称重新启动语言服务器。
入门指南
请Claude解释LSP工具的工作原理:
- 使用以下命令启动TypeScript语言服务器
typescript-sdk项目并检查服务器功能。 - 请解释LSP工具如何帮助您理解和审查源代码。
要开始执行代码审查,请让Claude:
- 使用以下命令启动TypeScript语言服务器
typescript-sdk项目并检查服务器功能。 - 阅读
/Users/username/github/mcp-lsp/.claude/templates/code-review.md模板预先代码审查。 - 使用LSP工具对项目源代码进行详细审查,并告诉我您的发现。
[!注意] 语言服务器的启动时间因语言和项目大小而异,对于包含数千个文件的项目,通常为几秒钟。一些语言服务器,如
Kotlin初始化大型项目可能需要几分钟的时间。增加timeoutMs如果达到默认超时,则相应地设置值。
克劳德的评论
A. 公开会议 使用 开发者 profile演示了LSP工具的功能,并解释了与传统的基于文本的搜索方法相比,语义分析如何为编译器提供准确的理解。
工作流模板
查看可用 模板 Claude可用于系统开发工作流。
MCP工具
服务器管理工具
-
start_server- 通过项目选择启动语言服务器
- 输入:
language_id,project(可选) - 返回:带有进程信息的服务器启动确认
-
stop_server- 停止正常运行语言服务器
- 输入:
language_id - 返回:带有清理详细信息的关机确认
-
restart_server- 使用可选项目选择重新启动语言服务器
- 输入:
language_id,project - 返回:使用新流程信息重新启动确认
-
get_server_status- 检查语言服务器的运行状态
- 输入:
language_id(可选) - 返回:详细状态,包括正常运行时间、项目关联和运行状况
-
get_server_capabilities- 获取语言服务器功能和工具映射
- 输入:
language_id - 返回:包含可用MCP工具映射的全面功能列表
-
get_server_projects- 列出语言服务器的可用项目
- 输入:
language_id - 返回:包含路径和描述的已配置项目数组
项目和工作区工具
-
get_project_files- 列出项目工作区中所有带分页的文件
- 输入:
language_id,project,limit(可选),offset(可选) - 返回:带路径的项目文件分页列表
-
get_project_symbols- 使用分页在整个项目工作区中搜索符号
- 输入:
language_id,project,query,limit(可选),offset(可选),timeout(可选) - 返回:分页工作区符号搜索结果
代码分析工具
-
get_hover- 在光标位置显示类型信息和文档
- 输入:
file_path,line,character - 返回:类型信息、文档和上下文详细信息
-
get_symbol_definitions- 导航到最初定义符号的位置
- 输入:
file_path,line,character - 返回:包含文件路径和位置的定义位置数组
-
get_symbol_references- 查找使用或引用符号的所有位置
- 输入:
file_path,line,character,include_declaration(可选) - 返回:整个工作区的参考位置数组
-
get_implementations- 查找实现接口或抽象方法的所有位置
- 输入:
file_path,line,character - 返回:具体实现位置数组
-
get_type_definitions- 导航到定义符号类型的位置
- 输入:
file_path,line,character - 返回:类型定义位置数组
导航工具
-
get_call_hierarchy- 构建显示呼叫者和被呼叫者关系的呼叫层次结构
- 输入:
file_path,line,character - 返回:调用层次结构准备数据
-
get_incoming_calls- 显示调用此符号的所有函数
- 输入:
item(来自get_call_hierchy) - 返回值:传入呼叫关系数组
-
get_outgoing_calls- 显示此符号调用的所有函数
- 输入:
item(来自get_call_hierchy) - 返回值:呼出关系数组
-
get_type_hierarchy- 构建显示继承关系的类型层次结构
- 输入:
file_path,line,character - 返回:类型层次结构准备数据
-
get_supertypes- 查找此类型继承的所有父类型
- 输入:
item(来自get_type_hierchy) - 返回:父类型项的数组
-
get_subtypes- 查找从该类型继承的所有子类型
- 输入:
item(来自get_type_hierchy) - 返回:派生类型项的数组
代码智能工具
-
get_completions- 在光标位置获取补全和自动建议
- 输入:
file_path,line,character - 返回:包含文档的完成建议数组
-
get_resolves- 解决完成项的其他详细信息
- 输入:
file_path,item(从get_completions开始) - 返回:扩展完成信息和文档
-
get_signature- 在光标位置显示函数参数和签名帮助
- 输入:
file_path,line,character - 返回:函数签名信息和参数详细信息
-
get_inlay_hints- 在代码范围中显示内联类型注释和参数提示
- 输入:
file_path,start_line,start_character,end_line,end_character - 返回:内联类型提示和注释数组
-
get_inlay_hint- 解决镶嵌提示项的其他详细信息
- 输入:
file_path,item(来自get_lay_hints) - 返回:扩展嵌体提示信息
文档工具
-
get_symbols- 按页码列出文档中的所有符号
- 输入:
file_path,limit(可选),offset(可选) - 返回:带有函数、类、变量的分页文档大纲
-
get_highlights- 突出显示光标位置出现的所有符号
- 输入:
file_path,line,character - 返回:符号高亮显示范围数组
-
get_folding_ranges- 识别代码编辑器折叠的可折叠代码段
- 输入:
file_path - 返回:可折叠代码范围数组
-
get_colors- 从文档中提取颜色定义和参考
- 输入:
file_path - 返回值:颜色值及其位置的数组
-
get_diagnostics- 从文档中获取错误、警告和诊断
- 输入:
file_path - 返回:包含严重性、消息和位置的诊断数组
-
get_links- 从文档中提取可点击的链接和引用
- 输入:
file_path - 返回:文档链接和引用数组
-
get_link_resolves- 解析文档链接项的目标URL
- 输入:
file_path,item(来自get_links) - 返回:已解析的链接目标信息
-
get_semantic_tokens- 提取详细的语法标记以进行高级突出显示和分析
- 输入:
file_path - 返回:具有类型和修饰符的语义标记数据
格式化和编辑工具
-
get_format- 使用语言服务器规则格式化整个文档
- 输入:
file_path - 返回:已应用样式规则的格式化文档文本
-
get_range_format- 使用语言服务器规则设置特定代码范围的格式
- 输入:
file_path,start_line,start_character,end_line,end_character - 返回:应用样式规则的格式化范围
-
get_code_actions- 在光标位置获取自动代码修复和重构建议
- 输入:
file_path,line,character - 返回:可用代码操作和快速修复的数组
-
get_code_resolves- 解决代码操作项的其他详细信息
- 输入:
file_path,item(来自get_code_actions) - 返回:完成工作区编辑的代码操作
-
get_selection_range- 将选择范围扩展到逻辑代码边界
- 输入:
file_path,line,character - 返回:扩展的选择范围数组
-
get_linked_editing_range- 查找应同时编辑的相关范围
- 输入:
file_path,line,character - 返回:同步更新的链接编辑范围
-
get_symbol_renames- 预览所有将用符号重命名的位置
- 输入:
file_path,line,character,new_name - 返回:用于符号重命名的工作区编辑预览
