snyk-mcp休息

用于Snyk REST API的TypeScript客户端,内置模型上下文协议(MCP)服务器支持。该软件包提供了根据官方Snyk OpenAPI规范自动生成的类型安全的API客户端和全面的MCP服务器 Snyk CLI工具和REST API工具 用于AI助手集成。
建筑
此MCP服务器提供 统一接口 通过两套互补的工具集进行Snyk安全扫描:
🔧 Snyk CLI工具(通过代理)
服务器会自动连接到Snyk CLI,并将所有本机CLI命令代理为MCP工具。这些工具提供全面的安全扫描功能:
snyk_test-漏洞测试项目snyk_code_test-安全问题的静态代码分析snyk_container_test-集装箱图像扫描snyk_iac_test-基础设施即代码扫描snyk_monitor-监控Snyk仪表板中的项目snyk_sbom_test-SBOM生成和测试snyk_send_feedback-报告安全指标snyk_trust,snyk_version,以及更多
🌐 REST API工具(自定义)
此外,服务器使用Snyk REST API为管理和查询操作提供定制的工具:
snyk_rest_find_projects-按名称搜索项目snyk_rest_get_issues-检索项目的问题snyk_rest_get_issue-获取详细的问题信息snyk_rest_get_repo_issues-跨存储库项目汇总问题
这种双工具架构为人工智能助手提供了两全其美的功能:扫描操作的Snyk CLI的全部功能,以及查询和管理任务的高效REST API访问。
特性
- 🔄 自动生成的TypeScript客户端 -根据官方Snyk OpenAPI规范生成
- 🤖 MCP服务器集成 -用于AI助手的内置模型上下文协议服务器(Claude等)
- 📦 完全类型安全 -IntelliSense完全支持TypeScript
- 🔌 基于Axios的HTTP客户端 -具有错误处理功能的可靠HTTP操作
- 🧪 综合测试 -Vitest支持覆盖
- 🏗️ 模块化架构 -生成代码和自定义代码之间的清晰分离
安装
npm install构建
构建过程包括OpenAPI代码生成和TypeScript编译:
# Full build (generate + compile)
npm run prepare
# Generate API client from OpenAPI spec
npm run generate
# Compile TypeScript only
npm run build用法
API客户端基本用法
import { Configuration, OrgsApi, IssuesApi } from "snyk-mcp-rest";
// Configure API client
const config = new Configuration({
apiKey: process.env.SNYK_API_KEY,
basePath: "https://api.snyk.io/rest",
});
// Or use the helper function
import { createConfiguration } from "snyk-mcp-rest";
const config = createConfiguration(process.env.SNYK_API_KEY!);
// Use Organizations API
const orgsApi = new OrgsApi(config);
const orgs = await orgsApi.listOrgs({
version: "2024-11-05",
});
// Use Issues API
const issuesApi = new IssuesApi(config);
const issues = await issuesApi.listOrgIssues({
version: "2024-11-05",
orgId: "your-org-id",
status: ["open"],
limit: 100,
});
// Use Projects API to find projects by repository name
const projectsApi = new ProjectsApi(config);
const projects = await projectsApi.listOrgProjects({
version: "2024-11-05",
orgId: "your-org-id",
names: ["owner/my-repo"], // Filter by repository name
});
// Get project IDs from matching repositories
const projectIds = projects.data.data?.map((p) => p.id) || [];
// Fetch issues for specific projects
if (projectIds.length > 0) {
const projectIssues = await issuesApi.listOrgIssues({
version: "2024-11-05",
orgId: "your-org-id",
scanItemId: projectIds[0],
scanItemType: "project" as any,
status: ["open"],
});
}MCP服务器使用情况
MCP服务器为AI助手提供对Snyk安全数据的访问。在您的AI助手中配置它(例如,Claude Desktop):
启动MCP服务器
# Development mode (with ts-node)
npm run mcp-server
# Production mode (requires build first)
npm run build
npm run mcp-server:build测试MCP服务器
使用提供的测试脚本在没有Claude Desktop的情况下测试MCP服务器:
列出所有可用工具:
npx ts-node examples/list-tools.ts这将显示Snyk CLI工具和REST API工具。
测试REST API工具:
# Build the project first
npm run build
# Test snyk_rest_get_issues tool
npx ts-node examples/snyk-rest-get-issues.ts [project-id] [status] [severity]
# Examples:
npx ts-node examples/snyk-rest-get-issues.ts # All open issues
npx ts-node examples/snyk-rest-get-issues.ts 12345678-1234-1234-1234-123456789012 # Open issues for specific project
npx ts-node examples/snyk-rest-get-issues.ts 12345678-1234-1234-1234-123456789012 resolved # Resolved issues for project
npx ts-node examples/snyk-rest-get-issues.ts 12345678-1234-1234-1234-123456789012 open critical # Critical open issues
npx ts-node examples/snyk-rest-get-issues.ts "" resolved high # All resolved high severity issues这 snyk-rest-get-issues.ts 脚本接受与 snyk_rest_get_issues MCP工具:
projectId-UUID格式的项目ID(可选)status-问题状态:打开、已解决、已忽略(可选,默认:打开)severity-问题严重程度:低、中、高、严重(可选)
测试snyk_rest_get_oissue工具:
# Get detailed information about a specific issue
npx ts-node examples/snyk-rest-get-issue.ts
# Example:
npx ts-node examples/snyk-rest-get-issue.ts 12345678-1234-1234-1234-123456789012这 snyk-rest-get-issue.ts 脚本要求:
issue_id-要检索的问题的唯一标识符(UUID)(必需)
Claude桌面配置
添加到您的Claude Desktop配置文件(~/Library/Application Support/Claude/claude_desktop_config.json 在macOS上):
选项1:将npx与ts节点一起使用(建议用于开发)
{
"mcpServers": {
"snyk-rest-api": {
"command": "npx",
"args": [
"-y",
"ts-node",
"/absolute/path/to/snyk-mcp-rest/src/mcp-server.ts"
],
"env": {
"SNYK_API_KEY": "your-snyk-api-key-here",
"SNYK_ORG_ID": "your-org-id-uuid-here",
"SNYK_ORG_SLUG": "your-org-slug-here"
}
}
}
}选项2:使用编译的JavaScript(建议用于生产)
首先构建项目 npm run build那么:
{
"mcpServers": {
"snyk-rest-api": {
"command": "node",
"args": ["/absolute/path/to/snyk-mcp-rest/dist/mcp-server.js"],
"env": {
"SNYK_API_KEY": "your-snyk-api-key-here",
"SNYK_ORG_ID": "your-org-id-uuid-here",
"SNYK_ORG_SLUG": "your-org-slug-here"
}
}
}
}重要:替换 /absolute/path/to/snyk-mcp-rest 使用项目目录的实际绝对路径(例如。, /Users/yourname/Projects/snyk-mcp-rest).
可用的MCP工具
MCP服务器提供两种类型的工具:
Snyk CLI工具
所有本机Snyk CLI命令都可以作为MCP工具使用 snyk_ 前缀。有关可用CLI工具及其参数的完整列表,请运行:
npx ts-node examples/list-tools.ts关键CLI工具包括:
snyk_test-开源漏洞测试项目snyk_code_test-静态应用程序安全测试(SAST)snyk_container_test-容器和Kubernetes安全扫描snyk_iac_test-基础设施即代码扫描snyk_monitor-快照并持续监控项目snyk_sbom_test-生成和测试软件物料清单
请参阅 Snyk CLI官方文档 了解每个CLI工具的详细用法。
REST API工具
使用Snyk REST API构建的用于查询和管理的自定义工具:
- snyk_rest_find_项目 -使用Snyk REST API按名称搜索Snyk项目
- 参数: - query (必填):搜索查询字符串以匹配项目名称 - 配置(通过环境变量): - SNYK_ORG_ID (必填):Snyk组织ID(UUID) - 返回:包含ID和名称的项目列表
- snyk_rest_get_问题 -使用Snyk REST API检索组织和项目的Snyk安全问题
- SNYK_ORG_ID (必填):Snyk组织ID(UUID) - SNYK_ORG_SLUG (必填):URL的组织符号 - 返回:直接Snyk URL的格式化问题 repository 字段将是 null 除非由专门的工具明确提供,例如 snyk_rest_get_repo_issues
备注:The projectId 参数必须采用UUID格式。要查找存储库的项目ID,请执行以下操作:
const projectsApi = new ProjectsApi(config);
const projects = await projectsApi.listOrgProjects({
version: "2024-11-05",
orgId: "your-org-id",
names: ["owner/my-repo"],
});
const projectId = projects.data.data?.[0]?.id;可用API
客户端提供对所有Snyk REST API端点的访问:
- 访问请求API -管理访问请求
- AppsApi -Snyk应用程序管理
- AuditLogsApi -审核日志访问
- CloudApi -云安全操作
- 容器 -集装箱图像扫描
- CustomBaseImagesApi -自定义基础图像管理
- 查找Api -安全调查结果
- GroupsApi / GroupApi -集团管理
- Iac设置API -基础架构即代码设置
- 邀请函Api -用户邀请
- 问题Api -安全问题管理
- OrgsApi 的 -组织运作
- 政策Api -政策管理
- 项目API -项目运营
- SbomApi -软件物料清单
- 服务账户API -服务帐户管理
- SlackApi / Slack设置API -Slack集成
- TargetsApi -目标管理
- 租户 -租户运营
- TestsApi -测试操作
- 用户API -用户管理
…还有更多!看 src/generated/api/ 查看完整列表。
发展
运行测试
该项目包括全面的测试覆盖范围:
# Run all tests once
npm test
# Watch mode (auto-rerun on changes)
npm run test:watch
# Coverage report
npm run test:coverage
# UI mode (interactive test runner)
npm run test:ui测试套件
- API客户端测试 (
tests/api.test.ts)-配置、API实例化、导出(18个测试) - MCP服务器测试 (
tests/mcp-server.test.ts)-问题检索、过滤、分页、项目名称获取(9个测试) - MCP服务器逻辑测试 (
tests/mcp-server-logic.test.ts)-处理程序函数、工具模式(21个测试) - MCP业务逻辑测试 (
tests/mcp-business-logic.test.ts)-问题格式、响应处理(25次测试) - 集成测试 (
tests/integration.test.ts)-多API工作流、分页处理(7项测试) - 错误处理测试 (
tests/error-handling.test.ts)HTTP错误、网络故障、验证(8次测试) - 指数导出测试 (
tests/index.test.ts)-模块导出和类型定义(14项测试)
检验统计量:7个测试文件中的102个测试用例,涵盖核心功能、错误场景和边缘案例。
覆盖:93%+总体代码覆盖率(100% src/index.ts93%以上 src/mcp-server.ts).生成的代码(src/generated/**)根据项目政策,不在保险范围内。
项目结构
src/
├── generated/ # Auto-generated (DO NOT EDIT)
│ ├── api/ # API classes
│ ├── models/ # TypeScript interfaces
│ └── configuration.ts, base.ts, common.ts
├── index.ts # Main entry point - API client exports
├── mcp-server.ts # MCP server (business logic + startup script)
└── tools/ # MCP tool implementations
├── index.ts # Tool registry
├── types.ts # Tool type definitions
├── utils.ts # Shared utilities
├── snyk-rest-get-issues.ts # snyk_rest_get_issues tool
├── snyk-rest-get-issue.ts # snyk_rest_get_issue tool
├── snyk-rest-get-repo-issues.ts # snyk_rest_get_repo_issues tool
└── snyk-rest-find-projects.ts # snyk_rest_find_projects tool
examples/
├── basic-usage.ts # Basic API client usage example
├── snyk-rest-get-issues.ts # MCP server testing script (snyk_rest_get_issues tool)
├── snyk-rest-get-issue.ts # MCP server testing script (snyk_rest_get_issue tool)
├── snyk-rest-get-repo-issues.ts # MCP server testing script (snyk_rest_get_repo_issues tool)
└── snyk-rest-find-projects.ts # MCP server testing script (snyk_rest_find_projects tool)
tests/
├── api.test.ts # API client tests (18 tests)
├── mcp-server.test.ts # MCP server integration tests (9 tests)
├── mcp-server-logic.test.ts # MCP handler functions (21 tests)
├── mcp-business-logic.test.ts # Issue formatting logic (25 tests)
├── integration.test.ts # Multi-API workflows (7 tests)
├── error-handling.test.ts # Error scenarios (8 tests)
└── index.test.ts # Module exports (14 tests)
res/
└── v1-api-spec.yaml # OpenAPI specification重要:从不在中编辑文件 src/generated/ -它们是由OpenAPI规范自动生成的。
错误处理
客户端使用Axios进行HTTP操作。正确处理错误:
import { AxiosError } from "axios";
try {
const response = await issuesApi.listOrgIssues({
version: "2024-11-05",
orgId: "your-org-id",
});
} catch (error) {
if (error instanceof AxiosError) {
console.error("API Error:", error.response?.status);
console.error("Details:", error.response?.data);
} else {
console.error("Unexpected error:", error);
}
}环境变量
创建一个 .env 项目根目录中的文件:
SNYK_API_KEY=your-api-key-here对于MCP服务器,使用以下环境变量:
SNYK_API_KEY(必需)-您的Snyk API代币(从 )SNYK_ORG_ID(必填)-您的Snyk组织ID(UUID格式)SNYK_ORG_SLUG(必填)-您的Snyk组织网址(例如。,my-org)SNYK_CLI_PROXY_ENABLED(可选)-启用/禁用Snyk CLI工具代理(默认值:true)
- 吃起来 false, 0,或 no 禁用Snyk CLI工具并仅使用REST API工具 - 禁用时,仅使用自定义REST API工具(snyk_rest_*)将可用 - 启用时(默认),Snyk CLI工具和REST API工具都可用
您可以在Snyk web UI的组织设置下找到您的组织ID和slug。
示例:禁用Snyk CLI代理
如果只想使用REST API工具并禁用Snyk CLI代理,请将其添加到 .env 文件:
SNYK_CLI_PROXY_ENABLED=false或者在Claude Desktop配置中设置它:
{
"mcpServers": {
"snyk-rest-api": {
"command": "node",
"args": ["/absolute/path/to/snyk-mcp-rest/dist/mcp-server.js"],
"env": {
"SNYK_API_KEY": "your-snyk-api-key-here",
"SNYK_ORG_ID": "your-org-id-uuid-here",
"SNYK_ORG_SLUG": "your-org-slug-here",
"SNYK_CLI_PROXY_ENABLED": "false"
}
}
}
}版本信息
- API版本:使用Snyk REST API版本
2024-11-05(所有API调用都需要version参数) - OpenAPI规范:生成自
v1-api-spec.yaml - TypeScript: 5.9+
- Node.js:兼容现代Node.js版本(ES2020目标)
配置
代码生成是通过以下方式配置的 openapitools.json:
- 模板:
typescript-axios - 单请求参数:已启用
- 独立模型和API:已启用
- 输出:
./src/generated
许可证
麻省理工学院
仓库
贡献
- 对自定义代码进行更改(不
src/generated/) - 如果需要,更新OpenAPI规范或生成器配置
- 跑
npm test验证更改 - 如果添加新功能,请更新此README
