Token导航 LogoToken导航TokenDH.com
LSP MCP Server logo
开发工具stdio官方级别未说明来源级核验

LSP MCP Server

MCP Server

tritlo/lsp-mcp

LSP-MCP服务器是一个桥接服务,允许LLM通过MCP协议查询LSP的悬停信息和代码补全功能,提升代码建议的准确性。

工具数

0

提示词数

0

GitHub Stars

124

资源数

0
开发工具TypeScriptClaude编程辅助Claude

安装说明

本站只整理中文说明和来源信息,不托管安装包,也不代用户安装。

作者 / 组织

Tritlo

提供方

Tritlo

最后核验

2026/5/17 20:59

运行时

Node.js

快速接入

先看主来源和安装命令,再打开仓库或文档;下面只保留这个条目的关键接入事实。

命令预览

npx tritlo/lsp-mcp <language> /path/to/lsp [lsp-args...]

详细介绍

LSP MCP服务器

用于与LSP(语言服务器协议)接口交互的MCP(模型上下文协议)服务器。 此服务器充当桥梁,允许LLM查询LSP悬停和完成提供者。

概述

MCP服务器的工作原理如下:

  1. 启动连接到LSP服务器的LSP客户端
  2. 公开向LSP服务器发送请求的MCP工具
  3. 以LLM可以理解和使用的格式返回结果

这使得LLM能够利用LSP来提供更准确的代码建议。

配置:

{
  "mcpServers": {
    "lsp-mcp": {
      "type": "stdio",
      "command": "npx",
      "args": [
        "tritlo/lsp-mcp",
        "",
        "
",
        ""
      ]
    }
  }
}

特性

MCP工具

  • get_info_on_location:获取文件中特定位置的悬停信息
  • get_completions:在文件中的特定位置获取完成建议
  • get_code_actions:获取文件中特定范围的代码操作
  • open_document:在LSP服务器中打开一个文件进行分析
  • close_document:关闭LSP服务器中的文件
  • get_diagnostics:获取打开文件的诊断消息(错误、警告)
  • start_lsp:使用指定的根目录启动LSP服务器
  • restart_lsp_server:重新启动LSP服务器,但不重新启动MCP服务器
  • set_log_level:在运行时更改服务器的日志详细程度

MCP资源

  • lsp-diagnostics:// 用于通过订阅访问实时更新的诊断消息的资源
  • lsp-hover:// 用于在特定文件位置检索悬停信息的资源
  • lsp-completions:// 在特定位置获取代码完成建议的资源

附加功能

  • 具有多种严重级别的综合日志记录系统
  • 彩色控制台输出,可读性更好
  • 运行时可配置日志级别
  • 详细的错误处理和报告
  • 简单的命令行界面

先决条件

  • Node.js(v16或更高版本)
  • npm

对于演示服务器:

  • GHC(8.10或更高版本)
  • 阴谋集团(3.0或更高版本)

安装

构建MCP服务器

  1. 克隆此存储库:
   git clone https://github.com/your-username/lsp-mcp.git
   cd lsp-mcp
  1. 安装依赖项:
   npm install
  1. 构建MCP服务器:
   npm run build

测试

该项目包括对TypeScript LSP支持的集成测试。这些测试验证了LSP-MCP服务器是否正确处理了悬停信息、完成、诊断和代码操作等LSP操作。

运行测试

要运行TypeScript LSP测试:

npm test

或者具体地说:

npm run test:typescript

测试覆盖率

测试验证了以下功能:

  • 使用模拟项目初始化TypeScript LSP
  • 打开TypeScript文件进行分析
  • 获取函数和类型的悬停信息
  • 获取代码完成建议
  • 获取诊断错误消息
  • 获取错误的代码操作

测试项目位于 test/ts-project/ 并包含带有故意错误的TypeScript文件,用于测试诊断反馈。

用法

通过提供LSP可执行文件的路径和要传递给LSP服务器的任何参数来运行MCP服务器:

npx tritlo/lsp-mcp  /path/to/lsp [lsp-args...]

例如:

npx tritlo/lsp-mcp haskell /usr/bin/haskell-language-server-wrapper lsp

重要提示:启动LSP服务器

对于0.2.0及更高版本,您必须通过调用 start_lsp 在使用任何LSP功能之前。这确保了使用正确的根目录进行正确的初始化,这在使用npx等工具时尤为重要:

{
  "tool": "start_lsp",
  "arguments": {
    "root_dir": "/path/to/your/project"
  }
}

日志记录

该服务器包括一个具有8个严重级别的综合日志记录系统:

  • debug:用于调试目的的详细信息
  • info:有关系统操作的一般信息消息
  • notice:重大运营事件
  • warning:可能需要注意的潜在问题
  • error:影响操作但不会停止系统的错误条件
  • critical:需要立即关注的关键情况
  • alert:系统处于不稳定状态
  • emergency:系统不可用

默认情况下,日志会发送到:

  1. 控制台输出带有颜色编码,以提高可读性
  2. MCP通知客户端(通过 notifications/message 方法)

查看调试日志

要进行详细的调试,您可以:

  1. 使用 claude --mcp-debug 运行Claude以查看Claude和服务器之间的所有MCP流量时标记:
   claude --mcp-debug
  1. 使用以下命令在运行时更改日志级别 set_log_level 工具:
   {
     "tool": "set_log_level",
     "arguments": {
       "level": "debug"
     }
   }

默认日志级别为 info,它显示了适度的操作细节,同时过滤掉了冗长的调试消息。

API

服务器提供以下MCP工具:

get_info_on_location

获取文件中特定位置的悬停信息。

参数:

  • file_path:文件的路径
  • language_id:文件所用的编程语言(例如“haskell”)
  • line:行号
  • column:列位置

例子:

{
  "tool": "get_info_on_location",
  "arguments": {
    "file_path": "/path/to/your/file",
    "language_id": "haskell",
    "line": 3,
    "column": 5
  }
}

get_完成

获取文件中特定位置的完成建议。

参数:

  • file_path:文件的路径
  • language_id:文件所用的编程语言(例如“haskell”)
  • line:行号
  • column:列位置

例子:

{
  "tool": "get_completions",
  "arguments": {
    "file_path": "/path/to/your/file",
    "language_id": "haskell",
    "line": 3,
    "column": 10
  }
}

get_code_actions

获取文件中特定范围的代码操作。

参数:

  • file_path:文件的路径
  • language_id:文件所用的编程语言(例如“haskell”)
  • start_line:起始行号
  • start_column:开始列位置
  • end_line:结束行号
  • end_column:结束列位置

例子:

{
  "tool": "get_code_actions",
  "arguments": {
    "file_path": "/path/to/your/file",
    "language_id": "haskell",
    "start_line": 3,
    "start_column": 5,
    "end_line": 3,
    "end_column": 10
  }
}

start_lsp

使用指定的根目录启动LSP服务器。在使用任何其他LSP相关工具之前,必须调用此函数。

参数:

  • root_dir:LSP服务器的根目录(建议使用绝对路径)

例子:

{
  "tool": "start_lsp",
  "arguments": {
    "root_dir": "/path/to/your/project"
  }
}

restart_lsp_server

重新启动LSP服务器进程,而不重新启动MCP服务器。这对于从LSP服务器问题中恢复或对LSP服务器配置应用更改非常有用。

参数:

  • root_dir:(可选)LSP服务器的根目录。如果提供,服务器将在重新启动后使用此目录进行初始化。

没有root_dir的示例(使用以前设置的根目录):

{
  "tool": "restart_lsp_server",
  "arguments": {}
}

root_dir示例:

{
  "tool": "restart_lsp_server",
  "arguments": {
    "root_dir": "/path/to/your/project"
  }
}

open_document

在LSP服务器中打开一个文件进行分析。在访问诊断或对文件执行其他操作之前,必须调用此函数。

参数:

  • file_path:要打开的文件的路径
  • language_id:文件所用的编程语言(例如“haskell”)

例子:

{
  "tool": "open_document",
  "arguments": {
    "file_path": "/path/to/your/file",
    "language_id": "haskell"
  }
}

close_文档

使用完LSP服务器中的文件后,关闭该文件。这有助于管理资源和清理。

参数:

  • file_path:要关闭的文件的路径

例子:

{
  "tool": "close_document",
  "arguments": {
    "file_path": "/path/to/your/file"
  }
}

get_诊断学

获取一个或所有打开文件的诊断消息(错误、警告)。

参数:

  • file_path:(可选)要获取诊断的文件的路径。如果未提供,则返回所有打开文件的诊断。

特定文件的示例:

{
  "tool": "get_diagnostics",
  "arguments": {
    "file_path": "/path/to/your/file"
  }
}

所有打开文件的示例:

{
  "tool": "get_diagnostics",
  "arguments": {}
}

set_log_level

设置服务器的日志记录级别以控制日志消息的详细程度。

参数:

  • level:要设置的日志记录级别。什么之中的一个: debug, info, notice, warning, error, critical, alert, emergency.

例子:

{
  "tool": "set_log_level",
  "arguments": {
    "level": "debug"
  }
}

MCP资源

除了工具外,服务器还提供用于访问LSP功能的资源,包括诊断、悬停信息和代码完成:

诊断资源

服务器通过以下方式公开诊断信息 lsp-diagnostics:// 资源方案。当诊断发生变化时,可以订阅这些资源以进行实时更新。

资源URI:

  • lsp-diagnostics:// -对所有打开的文件进行诊断
  • lsp-diagnostics:///path/to/file -特定文件的诊断

重要提示:必须使用 open_document 在访问诊断之前,请使用工具。

悬停信息资源

服务器通过以下方式公开悬停信息 lsp-hover:// 资源方案。这允许您获取有关文件中特定位置的代码元素的信息。

资源URI格式:

lsp-hover:///path/to/file?line={line}&column={column}&language_id={language_id}

参数:

  • line:行号(从1开始)
  • column:列位置(从1开始)
  • language_id:编程语言(例如“haskell”)

例子:

lsp-hover:///home/user/project/src/Main.hs?line=42&column=10&language_id=haskell

代码完成资源

服务器通过以下方式公开代码完成建议 lsp-completions:// 资源方案。这允许您在文件中获取特定职位的完成候选人。

资源URI格式:

lsp-completions:///path/to/file?line={line}&column={column}&language_id={language_id}

参数:

  • line:行号(从1开始)
  • column:列位置(从1开始)
  • language_id:编程语言(例如“haskell”)

例子:

lsp-completions:///home/user/project/src/Main.hs?line=42&column=10&language_id=haskell

列出可用资源

要发现可用资源,请使用MCP resources/list 终点。响应将包括当前打开文件的所有可用资源,包括:

  • 所有打开文件的诊断资源
  • 悬停所有打开文件的信息模板
  • 所有打开文件的代码完成模板

订阅资源更新

诊断资源支持订阅,以便在诊断更改时(例如,当文件被修改并且出现新的错误或警告时)接收实时更新。使用MCP订阅诊断资源 resources/subscribe 终点。

注意:悬停和完成资源不支持订阅,因为它们代表时间点查询。

使用资源与工具

您可以在两种访问LSP功能的方法之间进行选择:

  1. 基于工具的方法:使用 get_diagnostics, get_info_on_location,以及 get_completions 用于获取信息的简单、直接方法的工具。
  2. 基于资源的方法:使用 lsp-diagnostics://, lsp-hover://,以及 lsp-completions:// 更多RESTful方法的资源。

这两种方法都以相同的格式提供相同的数据,并强制执行必须先打开文件的相同要求。

故障排除

  • 如果服务器无法启动,请确保LSP可执行文件的路径正确
  • 检查日志文件(如果已配置)以获取详细的错误消息

许可证

MIT许可证

扩展

LSP-MCP服务器支持特定于语言的扩展,增强了其对不同编程语言的能力。扩展可以提供:

  • 自定义LSP特定工具和功能
  • 特定语言的资源处理程序和模板
  • 语言相关任务的专门提示
  • 实时数据的自定义订阅处理程序

可用扩展

目前,有以下扩展可用:

  • 哈斯克尔:为Haskell开发提供专门的提示,包括键入孔勘探指南

使用扩展

启动服务器时指定语言ID时,会自动加载扩展:

npx tritlo/lsp-mcp haskell /path/to/haskell-language-server-wrapper lsp

扩展名间距

所有扩展提供的功能都以语言ID命名。例如,Haskell扩展的键入孔提示可用作 haskell.typed-hole-use.

创建新扩展

要创建新扩展,请执行以下操作:

  1. 在中创建一个新的TypeScript文件 src/extensions/ 以你的语言命名(例如。, typescript.ts)
  1. 使用以下任何可选函数实现扩展接口:

- getToolHandlers():提供自定义工具实现 - getToolDefinitions():在MCP API中定义自定义工具 - getResourceHandlers():实现自定义资源处理程序 - getSubscriptionHandlers():实现自定义订阅处理程序 - getUnsubscriptionHandlers():实现自定义取消订阅处理程序 - getResourceTemplates():定义自定义资源模板 - getPromptDefinitions():定义语言任务的自定义提示 - getPromptHandlers():实现自定义提示处理程序

  1. 导出您的实现函数

当指定了匹配的语言ID时,扩展系统将自动加载您的扩展。

致谢

  • HLS语言服务器协议实施团队
  • 模型上下文协议规范的拟人化

目录标签

目录标签

开发工具TypeScriptClaude编程辅助语言服务器协议本地部署代码补全IDE增强

支持客户端

Claude

接入字段

传输方式(transport,传输协议)

stdio

鉴权方式(authType,认证方式)

none

运行时(runtime,运行环境)

Node.js

部署方式(deploymentType,部署类型)

remote-capable

来源包(packageName,安装包名)

tritlo/lsp-mcp

工具数量(toolCount,工具数)

0

资源数量(resourceCount,资源数)

0

提示词数量(promptCount,提示词数)

0

权限和风险

stdiononeremote-capable

接入前请确认传输方式、认证方式和部署位置,并根据实际工具能力限制访问范围。

安装前确认

不要直接授予不必要的文件、网络或账号权限;先核对安装命令和配置内容。

来源信息

继续浏览同类 MCP