Snyk API增强服务器

用于Snyk REST API的MCP服务器,提供组织slug解析、问题详情获取、GitHub仓库URL解析等功能,适用于与Jira等工具集成的工作流。

  • by jackryan-snyk
  • JavaScript
  • 本地部署
  • 更新于
在 GitHub 查看 jackryan-snyk/snyk-enrichment-mcp-server

使用说明

Snyk扩展MCP服务器

主控程序 (stdio)服务器 Snyk REST API.使用它来解决组织障碍,获取问题详细信息,解析导入项目的GitHub存储库URL,并丰富将Snyk与Jira等工具相结合的工作流程(例如通过Atlassian MCP)。

免责声明: 这不是Snyk官方支持的工具,也没有得到Snyk的直接认可。

需求

安装

git clone <your-repo-url> snyk-enrichment-mcp-server
cd snyk-enrichment-mcp-server
npm install

配置

变量 必填 描述
SNYK_API_TOKEN 是 Snyk API令牌(Authorization: token … REST调用)
SNYK_API_URL 没有 API基本URL(默认值: https://api.snyk.io/rest)

服务器如何与Snyk通信

  • 运输: stdio (模型上下文协议);MCP主机启动 node index.js (或您配置的命令)。
  • REST版本: 每个请求都会发送一个 version 查询参数和a Snyk-Version 标题设置为 今天的日历日期 在 YYYY-MM-DD (运行服务器的机器上的本地时间)。这避免了固定API版本字符串。可选的per-call重写存在于代码中,通过 SnykClient.get(…, …, { version }) 如果你扩展服务器。
  • 分页: 在以下情况下 links.next 从列表响应中,客户端重用 version 值嵌入在下一个URL中,以便标题保持对齐。

光标/MCP客户端

将MCP配置指向此服务器上的stdio,例如:

{
  "mcpServers": {
    "snyk-enrichment": {
      "command": "node",
      "args": ["/absolute/path/to/snyk-enrichment-mcp-server/index.js"],
      "env": {
        "SNYK_API_TOKEN": "your-token-here"
      }
    }
  }
}

更改配置后重新启动或重新加载MCP。

工具

所有工具返回MCP text 内容。成功的结果通常是 打印精美的JSON 串。错误设置MCP结果 isError 标记(如适用),并包含一个JSON对象或描述故障的普通消息。


snyk_resolve_org_id_from_slug

解决Snyk问题 组织UUID 来自人类可读的蛞蝓或来自 app.snyk.io 包含以下内容的URL /org/{slug}/.

斯奈克API GET /orgs?slug=…
参数 org_slug_or_url (字符串,必填):slug(例如。 my-org)或完整的Snyk应用程序URL /org/{slug}/
成功体 JSON: org_id, slug, name
典型用法 将Jira/集成文本或复制的Snyk URL转换为 org_id 其他工具

snyk_get_org_issue_details

通过加载完整问题JSON GET /orgs/{org_id}/issues/{issue_id},当Jira只有链接、SNYK-*id或模糊SNYK代码字段时,可以灵活地识别问题。

分辨率模式(摘要)

  1. 休息UUID — issue_id 是问题UUID(可选 issue- 前缀)。 project_id 不需要。
  2. 完整应用程序链接 — issue_id 是一个 app.snyk.io URL与 /org/{slug}/,可选 /project/{id}/,以及 #issue-{uuid}.Org slug自动解析; org_id / project_id 当URL提供它们时,这是可选的。
  3. 外部/产品id — issue_id 是Snyk码密钥, SNYK-* 问题id, key_asset等等。需要 project_id;该工具扫描项目问题,直到找到匹配项(可选 issue_type 筛选器,然后不键入重试)。
  4. 仅限启发式(Snyk代码) --省略 issue_id.通行证 project_id 以及一个或多个 match_* 领域; 全部 提供的启发式方法必须匹配。如果恰好有一个问题匹配,该工具将获取该问题。如果匹配为零或多个,则返回一个包含详细信息或候选摘要的错误JSON。

参数 (除非上述验证规则另有说明,否则均为可选)

参数 描述
org_id 组织UUID。仅在以下情况下省略 issue_id 是一个完整的应用程序URL,其中包括 /org/{slug}/.
project_id 项目UUID。非UUID需要 issue_id 以及启发式模式。
issue_id 应用程序URL #issue-{uuid}、REST UUID、Snyk密钥/Snyk-*/ key_asset等等。
issue_type 列表筛选器: code, package_vulnerability, license, cloud, config, custom。启发式默认值为 code.
match_cwe 例如。 CWE-89 或 89
match_risk_score 整数, attributes.risk.score.value
match_title_contains 标题上不区分大小写的子字符串
match_created_date YYYY-MM-DD 对比 created_at
match_file_path_contains 内部变电站 coordinates (代码)

成功体 --JSON包括 issue (API完整资源)和字段,例如 resolved_rest_issue_id, resolution (用于启发式单匹配)等。


snyk_get_project_github_repo_url

返回 Git远程URL 当Snyk项目得到以下支持时 GitHub (attributes.origin === "github").使用链接集成 目标 从项目资源。

斯奈克API GET /orgs/{org_id}/projects/{project_id}那么 GET /orgs/{org_id}/targets/{target_id}
参数 org_id (UUID), project_id (UUID),两者都是必需的
成功体 JSON: url (GitHub仓库URL), origin, org_id, project_id, target_id
错误 非GitHub来源,缺少目标关系,或目标没有 attributes.url --返回为 isError 带有解释性JSON

Jira的典型工作流程: 解析 app.snyk.io/.../project/{project_id} 从票→ 解决slug org_id 随着 snyk_resolve_org_id_from_slug 如果你只有鼻涕虫→ call snyk_get_project_github_repo_url.


API参考快速链接

脚本

  • npm start --在stdio上运行服务器(通常由MCP主机启动,而不是手动用于日常使用)

许可证

麻省理工学院——见 许可证.