Snyk扩展MCP服务器
免责声明: 这不是Snyk官方支持的工具,也没有得到Snyk的直接认可。
需求
- Node.js 18+
- A. Snyk API代币 可以访问您查询的组织
安装
git clone 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查询参数和aSnyk-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代码字段时,可以灵活地识别问题。
分辨率模式(摘要)
- 休息UUID —
issue_id是问题UUID(可选issue-前缀)。project_id不需要。 - 完整应用程序链接 —
issue_id是一个app.snyk.ioURL与/org/{slug}/,可选/project/{id}/,以及#issue-{uuid}.Org slug自动解析;org_id/project_id当URL提供它们时,这是可选的。 - 外部/产品id —
issue_id是Snyk码密钥,SNYK-*问题id,key_asset等等。需要project_id;该工具扫描项目问题,直到找到匹配项(可选issue_type筛选器,然后不键入重试)。 - 仅限启发式(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主机启动,而不是手动用于日常使用)
许可证
麻省理工学院——见 许可证.
