MCP SAST服务器
全面的 模型上下文协议(MCP) 该服务器将多个SAST(静态应用程序安全测试)工具与Claude Code AI集成在一起,可以直接从您的AI助手进行自动安全分析和漏洞扫描。
概述
该项目在Claude Code和行业标准安全扫描工具之间架起了一座桥梁,允许开发人员通过自然语言命令执行全面的安全分析。
主要特点
- 23+安全工具集成:
- SAST:森格里普、班迪特、ESLint安全、戈塞克、布雷克曼、格劳迪特、熊 - 秘密:TruffleLog,Gitleaks - 依赖关系:安全性、npm审计、OWASP依赖性检查、Snyk - IaC:Checkov,tfsec,Trivy - Kali工具:Nikto、Nmap、SQLMap、WPScan、DIRB、Lynis、ClamAV
- 多进程后端 ⚡: 具有真正CPU并行性的高性能并行执行
- 进程池执行器 用于隔离流程执行 - 快3.3倍 并行扫描的性能 - 可配置的并行性 (1-16+并发扫描) - 进程隔离 增强稳定性 - 资源监控 以及健康检查
- 提高准确性和可靠性 🎯: 高级验证和错误处理
- 自动结果验证 带校验和验证 - 重试逻辑 指数回退 - 错误分类 带有补救提示 - 过程健康监测 (内存、CPU、线程)
- TOON格式集成 🎒: 自动转换为面向令牌的对象表示法,用于LLM优化分析
- 代币减少30-60% 与JSON相比 - 所有扫描的自动TOON格式输出 - 用于未来LLM分析的AI就绪有效载荷 - 人工智能API使用成本显著节约
- 后台处理:所有扫描都在后台与作业管理异步运行
- 自动文件输出:结果自动保存到具有可配置输出目录的文件中(JSON+TOON+AI有效载荷)
- 工作管理API:跟踪扫描状态、检索结果、取消作业并列出所有扫描
- AI分析就绪:为未来的人工智能扫描摘要和决策支持做好准备
- MCP协议:与Claude Code AI无缝集成
- 远程执行:在Windows上工作时,在专用安全VM(Kali Linux)上运行安全工具
- 路径解析:自动窗口↔ 跨平台操作的Linux路径映射
- 灵活的架构:在功能齐全或轻量级服务器之间进行选择
- 全面覆盖:代码分析、秘密扫描、依赖性检查、IaC安全、网络安全、网络扫描、恶意软件检测
建筑
┌─────────────────┐ ┌──────────────────┐ ┌─────────────────┐
│ Claude Code │ MCP │ MCP Client │ HTTP │ SAST Server │
│ (Windows) │◄───────►│ client/ │◄───────►│ server/ │
│ │ │ sast_mcp_client │ │ (Kali Linux) │
└─────────────────┘ └──────────────────┘ └─────────────────┘
│
▼
┌─────────────────┐
│ Security Tools │
│ (installed via │
│ tools/install) │
└─────────────────┘支持的工具
代码分析
- Semgrep -多语言静态分析(30+种语言)
- 匪徒 -Python安全扫描程序
- ESLint安全 -JavaScript/TypeScript安全漏洞
- Gosec -转到安全检查器
- 刹车工 -Ruby on Rails安全扫描程序
- 重力 -基于Grep的源代码审计
- 持有者 -安全和隐私风险扫描器
秘密侦查
- 松露猪 -git repos和文件系统的秘密扫描程序
- Gitleaks -git仓库的快速秘密检测
依赖关系扫描
- 安全 -Python依赖漏洞检查器
- npm审计 -Node.js依赖安全审计
- OWASP依赖性检查 -多语言依赖性扫描器
- 斯尼克 -现代依赖关系和容器扫描仪
基础设施即代码
- 支票 -Terraform、CloudFormation、Kubernetes、Dockerfile扫描器
- tfsec -地形安全扫描仪
- 三叉戟 -容器和IaC漏洞扫描程序
Kali Linux安全工具
- 无 -Web服务器漏洞扫描程序
- Nmap -网络和端口扫描器
- SQLMap -SQL注入检测与利用
- WPScan -WordPress安全扫描程序
- DIRB -Web内容发现扫描程序
- Lynis -系统审计和强化工具
- ClamAV -防病毒和恶意软件扫描程序
安装
先决条件
Windows计算机(客户端):
- Python 3.8+
- 已安装克劳德代码
Linux机器(服务器-推荐Kali Linux):
- Python 3.8+
- 已安装安全工具(请参阅 工具安装)
快速开始
1.克隆存储库
git clone https://github.com/your-username/MCP-SAST-Server.git
cd MCP-SAST-Server2.安装Python依赖项
pip install -r requirements.txt3.配置服务器(可选)
复制示例环境文件并自定义:
cp .env.example .env
# Edit .env with your settings (port, paths, timeouts)4.启动SAST服务器(在Kali Linux上)
选项A:全功能服务器 (建议使用完整功能)
python3 server/sast_server.py --port 6000选项B:简单服务器 (无外部依赖,基本功能)
python3 server/simple_sast_server.py --port 60005.配置Claude代码(在Windows上)
选项A:使用示例配置
- 打开
config.example.json在存储库中 - 复制与您的设置匹配的配置
- 将其添加到您的
.claude.json文件 - 更新路径和服务器URL
选项B:手动配置
将MCP服务器配置添加到您的 .claude.json:
{
"mcpServers": {
"sast_tools": {
"type": "stdio",
"command": "python",
"args": [
"/path/to/sast-mcp/client/sast_mcp_client.py",
"--server",
"http://YOUR_KALI_IP:6000"
]
}
}
}重要提示:更新这些值:
/path/to/sast-mcp/client/sast_mcp_client.py-MCP客户端脚本的完整路径YOUR_KALI_IP-您的Kali Linux机器的IP地址(例如。,192.168.1.100)- 端口
6000-如果配置了其他端口,请进行更改
Windows路径示例:
C:/Projects/sast-mcp/client/sast_mcp_client.pyF:/work/sast-mcp/client/sast_mcp_client.py
Linux/Mac路径示例:
/home/user/sast-mcp/client/sast_mcp_client.py~/projects/sast-mcp/client/sast_mcp_client.py
6.验证安装
在Kali Linux上:
curl http://localhost:6000/health在克劳德代码中:
@sast_tools
Check the SAST server health and show me available tools用法示例
安全扫描
扫描Python代码以查找漏洞:
@sast_tools
Run a Bandit scan on F:/work/MyProject/backend with high severity filter多语言安全审计:
@sast_tools
Use Semgrep with OWASP Top 10 rules to scan F:/work/MyProject在存储库中查找机密:
@sast_tools
Scan F:/work/MyProject for leaked secrets using TruffleHog依赖检查
检查Python依赖关系:
@sast_tools
Run Safety check on F:/work/MyProject/requirements.txt审核Node.js包:
@sast_tools
Run npm audit on F:/work/MyProject/frontend with critical severity基础设施安全
扫描地形文件:
@sast_tools
Use Checkov to scan Terraform configurations in F:/work/MyProject/terraform检查Docker安全性:
@sast_tools
Scan F:/work/MyProject/Dockerfile with TrivyKali安全工具
使用Niketo扫描网络服务器:
@sast_tools
Run Nikto scan on https://example.com with SSL and save results to /tmp/nikto-scan.txt使用Nmap进行网络扫描:
@sast_tools
Use Nmap to scan 192.168.1.1 for open ports 1-1000 and save resultsSQL注入测试:
@sast_tools
Test https://example.com/login.php for SQL injection using SQLMapWordPress安全扫描:
@sast_tools
Scan https://wordpress-site.com with WPScan to enumerate vulnerable pluginsWeb内容发现:
@sast_tools
Run DIRB on https://example.com to discover hidden directories and files系统审核:
@sast_tools
Run Lynis system audit to check security hardening恶意软件扫描:
@sast_tools
Scan F:/work/MyProject with ClamAV antivirus to detect malware工具安装
快速安装(推荐)
我们提供了一个自动安装脚本,用于安装所有必需的工具:
# On your Kali Linux machine
cd /path/to/sast-mcp
sudo bash tools/install_tools.sh脚本将:
- ✅ 更新系统包
- ✅ 安装Python、Node.js、Ruby和Go
- ✅ 自动安装所有23+安全工具
- ✅ 安装Python依赖项(Flask、MCP SDK)
- ✅ 验证所有安装
- ✅ 向您展示下一步
安装需要5-15分钟,具体取决于您的互联网速度。
⚠ 有安装问题吗? 常见问题包括下载卡住、版本冲突或网络超时。请尝试再次运行脚本或手动安装工具。
手动安装
如果您更喜欢手动安装工具:
在Kali Linux上安装安全工具
Kali Linux上预装了许多工具。对于缺失的工具:
Semgrep:
pip3 install semgrep土匪:
pip3 install banditTruffleLog:
pip3 install trufflehogGitleaks:
wget https://github.com/gitleaks/gitleaks/releases/download/v8.18.0/gitleaks_8.18.0_linux_x64.tar.gz
tar -xzf gitleaks_8.18.0_linux_x64.tar.gz
sudo mv gitleaks /usr/local/bin/支票 :
pip3 install checkov安全:
pip3 install safetyTrivy:
wget -qO - https://aquasecurity.github.io/trivy-repo/deb/public.key | sudo apt-key add -
echo "deb https://aquasecurity.github.io/trivy-repo/deb $(lsb_release -sc) main" | sudo tee -a /etc/apt/sources.list.d/trivy.list
sudo apt update
sudo apt install trivy安装Kali Linux工具
大多数Kali工具都预装在Kali Linux上。对于缺失的工具:
无
sudo apt install niktoNmap:
sudo apt install nmapSQLMap:
sudo apt install sqlmapWPScan:
sudo gem install wpscan
# Or
sudo apt install wpscanDIRB :
sudo apt install dirb林尼斯:
sudo apt install lynisSnyk:
npm install -g snyk
# Or download from https://github.com/snyk/cliClamAV:
sudo apt install clamav clamav-daemon
sudo freshclam # Update virus definitions有关完整的安装指南,请参阅每个工具的官方文档。
配置
服务器配置(.env文件)
服务器可以使用环境变量或 .env 文件:
使用.env文件(推荐):
# Copy the example file
cp .env.example .env
# Edit .env with your settings
nano .env可用配置选项:
# Server Port (default: 6000)
API_PORT=6000
# Debug Mode (default: 0)
DEBUG_MODE=0
# Command Timeout in seconds (default: 3600 / 1 hour)
COMMAND_TIMEOUT=3600
# Max timeout limit (default: 86400 / 24 hours)
# For scans that take days, increase this value
# Examples: 259200 (3 days), 604800 (1 week)
MAX_TIMEOUT=86400
# Tool-Specific Timeouts (in seconds)
# Customize timeout for each security tool based on your needs
NIKTO_TIMEOUT=3600 # Web server scanning
NMAP_TIMEOUT=7200 # Network/port scanning
SQLMAP_TIMEOUT=7200 # SQL injection testing
WPSCAN_TIMEOUT=3600 # WordPress scanning
DIRB_TIMEOUT=7200 # Web content discovery
LYNIS_TIMEOUT=1800 # System auditing
SNYK_TIMEOUT=3600 # Dependency scanning
CLAMAV_TIMEOUT=14400 # Malware scanning (4 hours)
SEMGREP_TIMEOUT=7200 # Code analysis
BANDIT_TIMEOUT=1800 # Python security
TRUFFLEHOG_TIMEOUT=3600 # Secret detection
# Path Mapping (for Windows/Linux cross-platform)
MOUNT_POINT=/mnt/work
WINDOWS_BASE=F:/
# Multi-Process Backend Configuration
USE_MULTIPROCESSING=1 # Enable multi-process backend (default: 1)
MAX_PARALLEL_SCANS=4 # Number of concurrent scans (default: 4)
MAX_PROCESS_WORKERS=8 # Process pool size (default: CPU count - 1)
PROCESS_MEMORY_LIMIT_MB=2048 # Memory limit per process (default: 2048)
SCAN_WAIT_TIMEOUT=1800 # Scan slot wait timeout (default: 1800 / 30 min)
# Retry and Validation Configuration
MAX_RETRY_ATTEMPTS=2 # Retry attempts for failed scans (default: 2)
RETRY_BACKOFF_BASE=2.0 # Exponential backoff multiplier (default: 2.0)
ENABLE_RESULT_VALIDATION=1 # Enable result validation (default: 1)
ENABLE_CHECKSUM_VERIFICATION=1 # Enable checksum verification (default: 1)
MIN_RESULT_SIZE_BYTES=10 # Minimum valid result size (default: 10)超时配置提示:
对于大规模或全面的安全扫描,您可能需要增加超时时间:
- 大型代码库(>100K LOC):增加
SEMGREP_TIMEOUT至14400(4小时) - 全网络扫描:设置
NMAP_TIMEOUT至28800(8小时)或更高 - 彻底的SQL注入测试:使用
SQLMAP_TIMEOUT21600(6小时) - 完成恶意软件扫描:设置
CLAMAV_TIMEOUT至43200(12小时) - 多日扫描:增加
MAX_TIMEOUT259200(3天)或以上
如果扫描超时,服务器会保存部分结果,这样您就不会丢失所有数据。
直接使用环境变量:
export API_PORT=6000
export DEBUG_MODE=1
export MOUNT_POINT=/mnt/work
export WINDOWS_BASE=F:/客户端配置(config.example.json)
关于Claude代码的配置,请参见 config.example.json 其中包括:
- Windows与本地Kali VM示例
- 带有远程Kali服务器的Windows示例
- Linux/Mac配置示例
只需将适当的配置复制到您的 .claude.json 并更新路径和IP地址。
路径解析
服务器会自动将Windows路径解析为Linux装载路径:
F:/MyProject/file.txt→/mnt/work/MyProject/file.txtF:\work\Project\scan.json→/mnt/work/work/Project/scan.jsonF:/scan-results.txt→/mnt/work/scan-results.txt
默认映射: F: /(Windows)↔ /mnt/work(Linux)
如果不同,请使用环境变量配置装载点。
API终点
健康检查
GET /healthSAST工具
POST /api/sast/semgrep
POST /api/sast/bandit
POST /api/sast/bearer
POST /api/sast/graudit
POST /api/sast/gosec
POST /api/sast/brakeman
POST /api/sast/eslint-security秘密扫描
POST /api/secrets/trufflehog
POST /api/secrets/gitleaks依赖关系扫描
POST /api/dependencies/safety
POST /api/dependencies/npm-audit
POST /api/dependencies/dependency-check基础设施即代码
POST /api/iac/checkov
POST /api/iac/tfsec容器安全
POST /api/container/trivy自定义命令
POST /api/command后台作业管理
GET /api/jobs # List all jobs
GET /api/jobs/{job_id} # Get job status
GET /api/jobs/{job_id}/result # Get job result
POST /api/jobs/{job_id}/cancel # Cancel a job
POST /api/jobs/cleanup # Cleanup old jobs后台处理
默认情况下,所有安全扫描现在都在后台运行,允许您:
- 同时启动多个扫描
- 执行扫描时继续工作
- 方便时检索结果
- 跟踪扫描进度和状态
运作原理
- 提交扫描:当您请求扫描时(例如Semgrep),服务器会立即返回作业ID
- 后台执行:扫描在后台运行(默认情况下最多10个并发作业)
- 自动文件存储:结果将自动保存到
/var/sast-mcp/scan-results/(或您配置的目录) - 检索结果:使用作业ID检查状态并检索结果
工作流示例
1.启动Semgrep扫描:
curl -X POST http://localhost:6000/api/sast/semgrep \
-H "Content-Type: application/json" \
-d '{
"target": "/path/to/code",
"config": "auto",
"output_format": "json"
}'答复:
{
"success": true,
"message": "Scan job submitted successfully",
"job_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"job_status": "pending",
"output_file": "/var/sast-mcp/scan-results/semgrep_20250104_143022_a1b2c3d4.json",
"check_status_url": "/api/jobs/a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"get_result_url": "/api/jobs/a1b2c3d4-e5f6-7890-abcd-ef1234567890/result"
}2.检查扫描状态:
curl http://localhost:6000/api/jobs/a1b2c3d4-e5f6-7890-abcd-ef1234567890答复:
{
"success": true,
"job": {
"job_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"tool_name": "semgrep",
"status": "running",
"created_at": "2025-01-04T14:30:22",
"started_at": "2025-01-04T14:30:23",
"output_file": "/var/sast-mcp/scan-results/semgrep_20250104_143022_a1b2c3d4.json",
"progress": 0,
"duration_seconds": 45.2
}
}3.完成后获取结果:
curl http://localhost:6000/api/jobs/a1b2c3d4-e5f6-7890-abcd-ef1234567890/result答复:
{
"success": true,
"status": "completed",
"job": {
"job_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"status": "completed",
"duration_seconds": 127.5
},
"result": {
"job_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"tool_name": "semgrep",
"started_at": "2025-01-04T14:30:23",
"completed_at": "2025-01-04T14:32:30",
"scan_result": {
"stdout": "...",
"summary": {
"total_findings": 15,
"total_errors": 0
}
}
}
}配置
在您的计算机中配置后台处理 .env 文件:
# Default directory for scan results
DEFAULT_OUTPUT_DIR=/var/sast-mcp/scan-results
# Maximum concurrent scan jobs
MAX_WORKERS=10
# Keep job metadata for 72 hours (3 days)
JOB_RETENTION_HOURS=72自定义输出位置
您可以为任何扫描指定自定义输出文件:
{
"target": "/path/to/code",
"output_file": "F:/my-scans/custom-name.json"
}如果未指定,文件将自动命名: {tool}_{timestamp}_{job_id}.json
同步模式(传统)
为了向后兼容,您可以同步运行扫描:
{
"target": "/path/to/code",
"background": false
}这将一直阻止,直到扫描完成(不建议用于长时间运行的扫描)。
项目结构
sast-mcp/
├── client/ # MCP client (sast_mcp_client.py)
├── server/
│ ├── config.py # All env/timeouts in one place
│ ├── sast_server.py # Full-featured server
│ └── simple_sast_server.py # Lightweight alternative
├── tools/ # install_tools.sh, toon_converter.py, ai_analysis.py
├── README.md # This file
├── DOCS.md # Detailed docs (health, parallel, multiprocess, Kali setup)
├── requirements.txt
├── .env.example
└── config.example.json详细文件 (并行扫描、多进程后端、异步客户端、Kali/Windows设置、工具运行状况):请参阅 DOCS.md.
故障排除
连接问题
问题: 无法连接到SAST服务器
解决方案:
- 验证服务器是否正在运行:
curl http://KALI_IP:6000/health - 检查Kali Linux上的防火墙设置
- 确保IP地址在
.claude.json是正确的 - 检查Windows和Kali之间的网络连接
路径解决问题
问题: 扫描失败,显示“未找到路径”
解决方案:
- 验证Linux上是否已装载Windows共享:
ls /mnt/work - 检查安装点配置是否匹配
MOUNT_POINT环境变量 - 确保路径中使用正斜杠
.claude.json
工具不可用
问题: 健康检查显示工具不可用
解决方案:
- 安装缺失的工具(参见 工具安装)
- 验证工具是否在PATH中:
which semgrep - 手动测试工具:
semgrep --version
安全注意事项
- 网络安全:使用防火墙规则限制对SAST服务器端口的访问
- 认证:考虑添加API身份验证以供生产使用
- 秘密:永远不要将API密钥或凭据提交到存储库
- 隔离:在隔离的VM或容器中运行SAST服务器
- 更新:定期更新安全工具,以获取最新的漏洞特征
贡献
欢迎投稿!拜托:
- 分叉存储库
- 创建要素分支(
git checkout -b feature/amazing-feature) - 提交您的更改(
git commit -m 'Add amazing feature') - 推到分支(
git push origin feature/amazing-feature) - 打开拉取请求
许可证
此项目根据MIT许可证获得许可-请参阅 许可证 文件以获取详细信息。
致谢
支持
对于问题、疑问或贡献:
- 问题:
- 讨论:
路线图
- \[\]添加身份验证/授权
- \[\]实现扫描结果缓存
- \[\]添加webhook通知
- \[\]为扫描结果创建web仪表板
- \[\]支持其他SAST工具
- \[\]Docker容器化
- \[\]CI/CD集成示例
______________________________________________________________________
建于❤️ 用于安全代码开发
