语言服务器协议MCP服务器
 ](https://www.npmjs.com/package/@axivo/mcp-lsp) ](https://nodejs.org/)  
一个全面的MCP(模型上下文协议)服务器,将语言服务器协议(LSP)功能与Claude连接起来,实现跨多种编程语言的智能代码分析、导航和开发协助。
特性
核心能力
- 多语言支持:Go、Helm、Kotlin、Python、Terraform、TypeScript和 更多
- 智能代码分析:符号定义、引用、实现和类型层次结构
- 高级导航:调用层次结构、文档符号和工作区范围内的符号搜索
- 代码智能:悬停信息、补全、签名帮助和嵌入提示
- 格式化和重构:文档格式、范围格式和代码操作建议
- 项目管理:具有全面文件索引的多项目工作区支持
安全与性能
- 进程隔离:每个语言服务器都在具有适当生命周期管理的隔离进程中运行
- 速率限制:可配置的请求限制(默认值:100个请求/分钟)
- 资源管理:并发文件读取限制和优雅的关机处理
- 错误恢复:具有自动服务器重启功能的强大错误处理
语言服务器设置
先决条件
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如果达到默认超时,则相应地设置值。
克劳德的评论
工作流模板
查看可用 模板 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 - 返回:用于符号重命名的工作区编辑预览
