返回市场
MCP语言服务器

MCP语言服务器

作者:axivo7 星标更新:2025-11-21

项目介绍

语言服务器协议 MCP 服务器

License: BSD 3-Clause npm Node.js TypeScript LSP

一个全面的 MCP(模型上下文协议)服务器,它将语言服务器协议(LSP)的功能与 Claude 结合起来,支持多种编程语言的智能代码分析、导航和开发辅助。

功能

核心能力

  • 多语言支持:Go、Helm、Kotlin、Python、Terraform、TypeScript 和 更多
  • 智能代码分析:符号定义、引用、实现和类型层次结构
  • 高级导航:调用层次结构、文档符号和工作区范围内的符号搜索
  • 代码智能:悬停信息、自动完成功能、签名帮助和内嵌提示
  • 格式化与重构:文档格式化、范围格式化和代码操作建议
  • 项目管理:支持多项目的综合文件索引

安全性与性能

  • 进程隔离:每个语言服务器都在独立的进程中运行,并具有适当的生命期管理
  • 速率限制:可配置的请求节流(默认:每分钟 100 次请求)
  • 资源管理:并发文件读取限制和优雅的关闭处理
  • 错误恢复:强大的错误处理机制,具备自动重启服务器的能力

语言服务器设置

先决条件

MCP 服务器的基础构建在经过实战考验的 vscode-jsonrpcvscode-languageserver-protocol 库之上,提供与所有 VSCode 语言服务器 的兼容性。例如,安装 Kotlin 语言服务器:

brew install JetBrains/utils/kotlin-lsp

配置文件

创建一个 MCP 服务器配置文件,定义你的语言服务器和项目。

[!NOTE] 提供了一个包含流行开发语言和多个项目的示例配置文件 lsp.json,作为入门指南。

语言服务器配置具有以下格式:

{
  "servers": {
    "language-id": {                                // 必需的唯一语言标识符
      "command": "language-server-binary",          // 必需的语言服务器二进制文件
      "args": [                                     // 可选的语言服务器参数
        "--stdio"
      ],
      "configuration": {},                          // 可选的语言服务器配置
      "env": {},                                    // 可选的环境变量
      "extensions": [                               // 必需的语言服务器扩展
        ".extension"
      ],
      "init": [],                                   // 可选的语言服务器初始化命令
      "projects": [                                 // 必需的语言服务器项目列表
        {
          "name": "project-name",                   // 必需的唯一项目名称
          "description": "A description",           // 可选的描述
          "url": "https://github.com/org/project",  // 可选的项目 URL
          "path": "/Users/username/github/project"  // 必需的本地项目路径
          "patterns": {                             // 可选的排除或包含模式
            "exclude": [
              "**/directory",
              "**/file.extension"
            ],
            "include": [
              "**/directory",
              "**/file.extension"
            ],
          }
        }
      ],
      "settings": {                                 // 可选的语言服务器设置
        "maxConcurrentFileReads": 1
        "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 - 在速率限制窗口内允许的最大请求数量,防止语言服务器因过多并发请求而过载(默认值:1_00
  • rateLimitWindowMs - 速率限制的时间窗口(毫秒),在此滑动窗口内计数请求(默认值:60000 - 1 分钟)
  • registrationRequest - 控制语言服务器是否可以发送 client/registerCapability 请求以动态注册功能,禁用此选项以适应忽略客户端功能声明的服务器(默认值:true
  • shutdownGracePeriodMs - 发送关闭请求后等待的时间(毫秒),允许语言服务器完成清理操作(默认值:100
  • timeoutMs - 等待语言服务器初始化的最大时间(毫秒),防止挂起在无响应的服务器上(默认值:600000 - 10 分钟)
  • workspace - 控制语言服务器初始化时是否发送 workspace/symbol 请求以测试工作区功能,禁用此选项以适应不支持工作区操作或导致初始化失败的服务器(默认值:true

可选语言服务器项目文件模式

文件模式使用了 fast-glob 语法。默认情况下,. 前缀、__ 双下划线前缀、binbuildcachecoveragedistdocsexcludeslognode_modulesobjouttargettempteststmpvendorvenv 目录被排除。使用 includeexclude 模式来管理特定目录或文件(例如,**/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 - 语言服务器配置 JSON 文件的绝对路径

多个语言服务器的使用

同时运行多个语言服务器以分析不同的项目:

✅ ansible (k3s-cluster) + typescript (k3s-cluster-actions)
✅ go (helm) + kotlin (ktor) + python (fastapi)

一个语言服务器一次只能运行一个项目

❌ typescript (mcp-lsp) + typescript (typescript-sdk)

要切换项目,请使用所需项目名称重新启动语言服务器。

开始使用

让 Claude 解释 LSP 工具如何工作:

  • 启动带有 typescript-sdk 项目的 TypeScript 语言服务器并检查服务器功能。
  • 请解释 LSP 工具如何帮助你理解和审查源代码。

为了开始进行代码审查,请让 Claude:

  • 启动带有 typescript-sdk 项目的 TypeScript 语言服务器并检查服务器功能。
  • 在代码审查之前阅读 /Users/username/github/mcp-lsp/.claude/templates/code-review.md 模板。
  • 使用 LSP 工具对项目源代码进行详细审查,并告知我你的发现。

[!NOTE] 语言服务器的启动时间因语言和项目大小而异,通常对于拥有数千个文件的项目来说是几秒钟。某些语言服务器如 Kotlin 可能需要几分钟来初始化大型项目。如果默认超时时间已达到,请相应地增加 timeoutMs 值。

Claude 的审查

一个公开会话使用DEVELOPER配置展示了 LSP 工具的能力,并解释了语义分析如何提供比传统基于文本的搜索方法更准确的编译器级别的理解。

工作流程模板

查看 Claude 可用于系统化开发工作流程的模板

MCP 工具

服务器管理工具

  1. start_server

    • 启动带有项目选择的语言服务器
    • 输入:language_idproject(可选)
    • 返回:带有进程信息的服务器启动确认
  2. stop_server

    • 平稳地停止正在运行的语言服务器
    • 输入:language_id
    • 返回:带有清理详情的关闭确认
  3. restart_server

    • 重新启动语言服务器,可选项目选择
    • 输入:language_idproject
    • 返回:带有新进程信息的重启确认
  4. get_server_status

    • 检查语言服务器的运行状态
    • 输入:language_id(可选)
    • 返回:包括运行时间、项目关联和健康状况的详细状态
  5. get_server_capabilities

    • 获取语言服务器的功能和工具映射
    • 输入:language_id
    • 返回:带有可用 MCP 工具映射的全面功能列表
  6. get_server_projects

    • 列出语言服务器的可用项目
    • 输入:language_id
    • 返回:带有路径和描述的配置项目数组

项目与工作区工具

  1. get_project_files

    • 列出项目工作区中的所有文件,带分页
    • 输入:language_idprojectlimit(可选),offset(可选)
    • 返回:带有路径的项目文件分页列表
  2. get_project_symbols

    • 在整个项目工作区内搜索符号,带分页
    • 输入:language_idprojectquerylimit(可选),offset(可选),timeout(可选)
    • 返回:工作区符号搜索结果的分页列表

代码分析工具

  1. get_hover

    • 显示光标位置处的类型信息和文档
    • 输入:file_pathlinecharacter
    • 返回:类型信息、文档和上下文细节
  2. get_symbol_definitions

    • 导航到符号最初定义的位置
    • 输入:file_pathlinecharacter
    • 返回:带有文件路径和位置的定义位置数组
  3. get_symbol_references

    • 查找符号使用或引用的所有位置
    • 输入:file_pathlinecharacterinclude_declaration(可选)
    • 返回:工作区中的引用位置数组
  4. get_implementations

    • 查找接口或抽象方法实现的所有位置
    • 输入:file_pathlinecharacter
    • 返回:具体实现位置数组
  5. get_type_definitions

    • 导航到符号类型的定义位置
    • 输入:file_pathlinecharacter
    • 返回:类型定义位置数组

导航工具

  1. get_call_hierarchy

    • 构建调用层次结构,展示调用者和被调用者的关系
    • 输入:file_pathlinecharacter
    • 返回:调用层次结构准备数据
  2. get_incoming_calls

    • 展示所有调用该符号的函数
    • 输入:item(来自 get_call_hierarchy
    • 返回:传入调用关系数组
  3. get_outgoing_calls

    • 展示该符号调用的所有函数
    • 输入:item(来自 get_call_hierarchy
    • 返回:传出调用关系数组
  4. get_type_hierarchy

    • 构建类型层次结构,展示继承关系
    • 输入:file_pathlinecharacter
    • 返回:类型层次结构准备数据
  5. get_supertypes

    • 查找该类型继承的所有父类型
    • 输入:item(来自 get_type_hierarchy
    • 返回:父类型项数组
  6. get_subtypes

    • 查找从该类型继承的所有子类型
    • 输入:item(来自 get_type_hierarchy
    • 返回:派生类型项数组

代码智能工具

  1. get_completions

    • 获取光标位置处的自动完成功能和建议
    • 输入:file_pathlinecharacter
    • 返回:带有文档的自动完成建议数组
  2. get_resolves

    • 解析自动完成项的附加细节
    • 输入:file_pathitem(来自 get_completions
    • 返回:扩展的自动完成信息和文档
  3. get_signature

    • 显示光标位置处的函数参数和签名帮助
    • 输入:file_pathlinecharacter
    • 返回:函数签名信息和参数细节
  4. get_inlay_hints

    • 显示代码范围内的内联类型注解和参数提示
    • 输入:file_pathstart_linestart_characterend_lineend_character
    • 返回:内联类型提示和注解数组
  5. get_inlay_hint

    • 解析内联提示项的附加细节
    • 输入:file_pathitem(来自 get_inlay_hints
    • 返回:扩展的内联提示信息

文档工具

  1. get_symbols

    • 列出文档中的所有符号,带分页
    • 输入:file_pathlimit(可选),offset(可选)
    • 返回:带有函数、类、变量的文档大纲分页
  2. get_highlights

    • 高亮光标位置处符号的所有出现
    • 输入:file_pathlinecharacter
    • 返回:符号高亮范围数组
  3. get_folding_ranges

    • 识别代码编辑器折叠的可折叠代码段
    • 输入:file_path
    • 返回:可折叠代码范围数组
  4. get_colors

    • 从文档中提取颜色定义和引用
    • 输入:file_path
    • 返回:带有颜色值及其位置的数组
  5. get_diagnostics

    • 从文档中获取错误、警告和诊断信息
    • 输入:file_path
    • 返回:带有严重程度、消息和位置的诊断数组
  6. get_links

    • 从文档中提取可点击的链接和引用
    • 输入:file_path
    • 返回:文档链接和引用数组
  7. get_link_resolves

    • 解析文档链接项的目标 URL
    • 输入:file_pathitem(来自 get_links
    • 返回:解析的链接目标信息
  8. get_semantic_tokens

    • 提取详细的语法标记,用于高级高亮显示和分析
    • 输入:file_path
    • 返回:带有类型和修饰符的语义标记数据

格式化与编辑工具

  1. get_format

    • 使用语言服务器规则格式化整个文档
    • 输入:file_path
    • 返回:应用样式规则后的格式化文档文本
  2. **`get