一个全面的模型上下文协议(MCP)服务器,集成了静态应用安全测试(SAST)、动态应用安全测试(DAST)、交互式应用安全测试(IAST)以及软件组成分析(SCA)工具,用于AI驱动的DevSecOps自动化。
src/
├── mcp/
│ ├── server.ts # 主 MCP 服务器
│ ├── tools/
│ │ ├── sast-tool.ts # SAST 集成
│ │ ├── dast-tool.ts # DAST 集成
│ │ ├── iast-tool.ts # IAST 集成
│ │ └── sca-tool.ts # SCA 集成
│ └── connectors/
│ ├── sonarqube.ts
│ ├── zap.ts
│ ├── trivy.ts
│ └── osv-scanner.ts
├── config/
│ ├── security-rules.yml
│ └── tool-configs.json
└── tests/security/
# SAST 工具
pip3 install semgrep bandit
# DAST 工具(Docker)
docker pull owasp/zap2docker-stable
# SCA 工具(npm audit 是 Node.js 的一部分)
# OSV Scanner(可选)
wget -qO- https://github.com/google/osv-scanner/releases/latest/download/osv-scanner_linux_amd64.tar.gz | tar -xz -C /usr/local/bin
# Trivy(可选)
wget -qO- https://raw.githubusercontent.com/aquasecurity/trivy/main/contrib/install.sh | sh
克隆仓库
git clone <repository-url>
cd DevSecOps-MCP
安装依赖
npm install
配置环境
cp .env.example .env
# 编辑 .env 文件以包含您的工具凭证
构建项目
npm run build
启动服务器
npm run start:mcp
使用 Docker Compose(推荐)
# 复制环境文件
cp .env.example .env
# 编辑 .env 文件以包含您的凭证
# 启动所有服务
docker-compose up -d
直接使用 Docker
# 构建镜像
docker build -t devsecops-mcp .
# 运行容器
docker run -p 3000:3000 --env-file .env devsecops-mcp
要使用此 MCP 服务器与 Claude Desktop 或其他 MCP 客户端,您需要配置客户端设置。
找到 Claude Desktop 配置文件:
~/Library/Application Support/Claude/claude_desktop_config.json添加 DevSecOps MCP 服务器配置:
{
"mcpServers": {
"devsecops": {
"command": "node",
"args": ["dist/src/mcp/server.js"],
"cwd": "/path/to/DevSecOps-MCP",
"env": {
"NODE_ENV": "production",
"MCP_PORT": "3000",
"LOG_LEVEL": "info",
"SECURITY_STRICT_MODE": "true"
}
}
}
}
替代方案:使用提供的配置文件:
# 复制提供的配置
cp .mcprc.json ~/Library/Application\ Support/Claude/claude_desktop_config.json
# 编辑 cwd 路径以匹配您的安装
对于其他 MCP 客户端,请使用 mcp-server.json 中的服务器配置:
{
"name": "devsecops-mcp-server",
"command": "node dist/src/mcp/server.js",
"args": [],
"capabilities": ["tools"]
}
确保设置了所有必需的环境变量:
# 复制环境模板
cp .env.example .env
# 编辑以包含您的配置
nano .env
基本功能所需:
SONARQUBE_URL(如果使用 SonarQube)ZAP_URL(如果使用 OWASP ZAP)可选但推荐:
OSV_SCANNER_PATHTRIVY_PATHTRIVY_CACHE_DIR关键环境变量(参见 .env.example 获取完整列表):
# 服务器配置
NODE_ENV=production
MCP_PORT=3
SECURITY_STRICT_MODE=true
# 工具配置
SONARQUBE_TOKEN=your-token
ZAP_API_KEY=your-key
OSV_SCANNER_PATH=osv-scanner
TRIVY_PATH=trivy
TRIVY_CACHE_DIR=/tmp/trivy-cache
编辑 src/config/security-rules.yml 以自定义:
编辑 src/config/tool-configs.json 以设置:
服务器提供以下 MCP 工具:
{
"name": "run_sast_scan",
"description": "执行 SAST 安全扫描",
"inputSchema": {
"target": "string", // 源代码路径/存储库
"rules": "array", // 安全规则
"severity_threshold": "enum", // low|medium|high|critical
"tool": "enum" // sonarqube|semgrep|auto
}
}
{
"name": "run_dast_scan",
"description": "执行 DAST 安全扫描",
"inputSchema": {
"target_url": "string", // 应用程序 URL
"scan_type": "enum", // quick|baseline|full
"authentication": "object" // 登录凭据
}
}
{
"name": "run_sca_scan",
"description": "执行 SCA 依赖项扫描",
"inputSchema": {
"project_path": "string", // 项目目录
"package_manager": "enum", // npm|yarn|maven|gradle|pip
"tool": "enum", // osv-scanner|trivy|npm-audit|auto
"fix_vulnerabilities": "bool" // 自动修复启用
}
}
{
"name": "run_iast_scan",
"description": "执行类似 IAST 的安全分析",
"inputSchema": {
"application_id": "string", // 应用标识符或路径
"environment": "enum", // dev|staging|testing
"tool": "enum", // trivy|owasp-zap|auto
"test_suite": "string" // 要运行的测试套件(可选)
}
}
{
"name": "generate_security_report",
"description": "生成全面的安全报告",
"inputSchema": {
"scan_ids": "array", // 扫描结果 ID
"format": "enum", // json|html|pdf|sarif
"include_remediation": "bool" // 包含修复指导
}
}
{
"name": "validate_security_policy",
"description": "验证安全策略合规性",
"inputSchema": {
"policy_file": "string", // 策略文件路径
"scan_results": "array" // 扫描结果 ID
}
}
| 安全测试 | 检测到的漏洞 | 准确率 | 工具状态 | 测试时间 |
|---|---|---|---|---|
| SAST | 60+ 问题 | 95%+ | ✅ 验证 | ~5秒 |
| DAST | 5+ 类型 | 100% | ✅ 验证 | ~30秒 |
| SCA | 20 问题 | 100% | ✅ 验证 | ~3秒 |
| IAST | 混合 | 90%+ | ✅ 模拟 | ~10秒 |
# 综合安全测试(实际验证)
node test-all-security.js
# SAST 测试
node test-sast.js
# 使用易受攻击的 Web 服务器进行 DAST 测试
node test-vulnerable-server.js &
curl "http://localhost:3001/search?q=<script>alert('XSS')</script>"
# 单元测试
npm test
# 带覆盖率
npm run test:coverage
# 集成测试
npm run test:integration
test-samples/test-vulnerable-dependencies/test-all-security.jstests/security/tests/integration/# 1. 验证安全工具安装
semgrep --version
bandit --version
# 2. 使用提供的易受攻击样本立即测试
semgrep --config=auto --json test-samples/vulnerable-app.js
# 结果:检测到 7 个漏洞(SQL 注入、XSS、命令注入等)
bandit -f json test-samples/vulnerable-app.py
# 结果:发现 19 个问题(4 个高风险)
# 3. 扫描易受攻击的依赖项
cd test-vulnerable-dependencies && npm audit
# 结果:20 个漏洞(严重:4,高:10)
curl -X POST http://localhost:3000/mcp \
-H "Content-Type: application/json" \
-d '{
"method": "tools/call",
"params": {
"name": "run_sast_scan",
"arguments": {
"target": "/path/to/source",
"severity_threshold": "high"
}
}
}'
# 1. SAST 分析
curl -X POST http://localhost:3000/mcp \
-d '{"method": "tools/call", "params": {"name": "run_sast_scan", "arguments": {"target": "/src"}}}'
# 2. 依赖项扫描
curl -X POST http://localhost:3000/mcp \
-d '{"method": "tools/call", "params": {"name": "run_sca_scan", "arguments": {"project_path": "/src"}}}'
# 3. 动态测试
curl -X POST http://localhost:3000/mcp \
-d '{"method": "tools/call", "params": {"name": "run_dast_scan", "arguments": {"target_url": "https://app.example.com"}}}'
# 4. 生成报告
curl -X POST http://localhost:3000/mcp \
-d '{"method": "tools/call", "params": {"name": "generate_security_report", "arguments": {"scan_ids": ["sast-123", "sca-456", "dast-789"], "format": "html"}}}'
#!/bin/bash
# .git/hooks/pre-commit
git-secrets --scan
semgrep --config=auto --error
npm audit --audit-level high
osv-scanner --lockfile=package-lock.json .
trivy fs --exit-code 1 --severity HIGH,CRITICAL .
# .github/workflows/security.yml
security_scan:
runs-on: ubuntu-latest
steps:
- name: SAST 扫描
run: |
curl -X POST $MCP_SERVER_URL/mcp \
-d '{"method": "tools/call", "params": {"name": "run_sast_scan", "arguments": {"target": "."}}}'
curl http://localhost:3000/health
# 问题:pip3 权限错误
# 解决方案:
pip3 install --user semgrep bandit
# 或者使用系统权限
sudo pip3 install semgrep bandit
# 问题:严格的类型检查错误
# 临时解决方案:跳过编译并使用 JavaScript 运行
node test-all-security.js # 不带 TypeScript 构建测试
# 永久解决方案:修复 tsconfig.json 配置
# 问题:没有 Docker 执行权限
# 解决方案:
sudo usermod -aG docker $USER
newgrp docker
# 问题:端口 3000、3001 已被占用
# 解决方案:
export MCP_PORT=3002
node test-vulnerable-server.js # 使用不同的端口
# 问题:node-sass 编译错误
# 解决方案:安装时忽略有问题的包
cd test-vulnerable-dependencies
npm install --ignore-engines
MIT 许可证 - 详情见 LICENSE 文件。
版权所有 (c) 2025 jmstar85
docs/ 目录