项目简介

Snyk Language Server (snyk-ls) 是一个强大的语言服务器,它遵循 Language Server Protocol (LSP),并集成了 Snyk Open Source, Snyk Infrastructure as Code 和 Snyk Code 的功能。除了标准的 LSP 功能外,snyk-ls 还扩展支持 Model Context Protocol (MCP) 服务器功能,允许 LLM 客户端通过标准化的方式获取上下文信息和调用外部工具。

主要功能点

  • LSP 核心功能:
    • 提供代码诊断信息 (Diagnostics)
    • 支持悬停提示 (Hover)
    • 代码 Lens (Code Lens)
    • 代码 Actions (Code Actions)
    • 进度报告 (Progress Reporting)
    • 通知和日志消息 (Notifications & Log messages)
    • 代码自动修复 (Code Fix)
  • MCP 服务器功能:
    • 通过 '$/snyk.mcpServerURL' 通知客户端 MCP 服务器的监听地址。
    • 监听 '/messages' 路径的 POST 请求,用于接收客户端消息。
    • 支持 '/sse' 路径的 SSE 订阅,用于服务端事件推送。
  • 安全检测:
    • 集成 Snyk Open Source, Snyk Infrastructure as Code 和 Snyk Code,提供全面的安全漏洞和代码质量检测。
    • 支持多种漏洞类型,包括安全漏洞、许可证问题、依赖漏洞、基础设施配置问题等。
  • 身份验证:
    • 支持 OAuth2 和 Token 身份验证。
    • 必要时自动打开网页进行身份验证。
  • CLI 管理:
    • 自动下载和管理 Snyk CLI。
    • 可配置 Snyk CLI 路径。

安装步骤

下载预编译版本

  1. 访问 Releases 页面 下载最新版本的 'snyk-ls' 预编译二进制文件。
  2. 根据你的操作系统选择合适的 zip 文件 (Windows, macOS, Linux)。
  3. 解压 zip 文件到你希望安装 'snyk-ls' 的目录。

从源码编译 (可选)

  1. 确保已安装 Go 1.20 或更高版本,并配置好 'GOPATH' 和 'GOROOT' 环境变量。
  2. 克隆仓库到本地:'git clone https://github.com/snyk/snyk-ls.git'
  3. 进入仓库根目录:'cd snyk-ls'
  4. 下载依赖:'go get ./...'
  5. 构建并安装:'make build && make install'
    • 编译后的 'snyk-ls' 二进制文件将被安装到 '$GOPATH/bin' 或 '$GOBIN' 目录。

服务器配置 (MCP 客户端配置)

MCP 客户端需要配置以下信息以连接到 snyk-ls MCP 服务器。以下是一个 JSON 格式的配置示例,适用于 MCP 客户端配置:

{
  "serverName": "snyk-ls MCP Server",
  "command": "snyk-ls",
  "args": [],
  "protocol": "json-rpc",
  "transport": "http+sse",
  "url": "通知的 $/snyk.mcpServerURL 的值",
  "messagePath": "/messages",
  "ssePath": "/sse"
}

配置参数说明:

  • 'serverName': MCP 服务器的名称,可以自定义,例如 "Snyk LSP MCP Server"。
  • 'command': 启动 snyk-ls LSP 服务器的命令,通常为 'snyk-ls'(或根据你的安装路径调整)。
  • 'args': 启动命令的参数,根据 snyk-ls 的命令行参数进行配置,例如可以指定日志级别 '-l debug'。通常情况下,基础连接不需要额外的参数。
  • 'protocol': 通信协议,固定为 '"json-rpc"'。
  • 'transport': 传输协议,对于 snyk-ls MCP 服务器,应配置为 '"http+sse"',表示使用 HTTP POST 进行请求,SSE 用于服务端事件推送。
  • 'url': 重要: 此处需要配置为 snyk-ls LSP 服务器通过 '$/snyk.mcpServerURL' 通知客户端的实际 URL 地址。客户端需要监听此通知以动态获取服务器地址。在未收到通知前,请勿配置固定值。
  • 'messagePath': MCP 消息请求路径,固定为 '"/messages"'。
  • 'ssePath': SSE 事件订阅路径,固定为 '"/sse"'。

注意:

  • 'url' 字段的值需要在 LSP 客户端连接到 snyk-ls LSP 服务器后,接收到 '$/snyk.mcpServerURL' 通知才能获取并配置。
  • MCP 客户端需要实现监听 '$/snyk.mcpServerURL' 通知的机制,以动态获取 snyk-ls MCP 服务器的地址。

基本使用方法

  1. 启动 snyk-ls LSP 服务器: 根据安装步骤启动 'snyk-ls' 语言服务器。
  2. 配置 MCP 客户端: 根据 "服务器配置" 章节,配置 MCP 客户端,务必动态获取并配置 'url' 参数
  3. 连接 MCP 服务器: 在 MCP 客户端中,连接配置好的 MCP 服务器。
  4. 发送 MCP 请求: 使用 MCP 客户端按照 MCP 协议规范,向 snyk-ls MCP 服务器发送请求,例如读取资源、调用工具、获取 Prompt 模板等。
  5. 接收 MCP 响应和通知: MCP 客户端接收来自 snyk-ls MCP 服务器的 JSON-RPC 响应和 SSE 通知,根据业务逻辑进行处理。

示例 (MCP 客户端发送请求):

{
  "jsonrpc": "2.0",
  "method": "mcp.listResources",
  "params": {},
  "id": 1
}

请参考 Model Context Protocol (MCP) 协议文档和 snyk-ls 仓库的 smoke test 示例,了解更详细的 MCP 客户端使用方法。

信息

分类

开发者工具