mcpField
S
SAST MCP Server

SAST MCP Server

本地服务
github.com安全418 周前更新

关于 SAST MCP Server

SAST MCP Server 让 AI Agent 借助多种扫描器检查代码和运行中的应用。它汇总扫描结果,并提供筛选、基线比较、SARIF 导出及补丁修复工具。

主要功能

  1. 01并行运行多种扫描器并去重
  2. 02扫描代码、依赖、密钥和 IaC
  3. 03使用 OWASP ZAP 扫描运行中应用
  4. 04筛选并分页显示发现项
  5. 05导出 SARIF 并比较基线
  6. 06生成修复提示词并应用补丁

适用场景

  1. 01检查代码变更中的新漏洞
  2. 02排查依赖和 Git 历史中的风险
  3. 03根据扫描结果设置 CI 门禁
  4. 04生成并应用漏洞修复方案

MCP 相关

向 MCP 客户端提供扫描、发现项管理、SARIF、基线、修复、提示词和资源能力,支持 stdio 与 Streamable HTTP 传输。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"skyrxin-sast": {
"command": "uvx",
"args": [
"sast-mcp-server"
],
"env": {
"SAST_MCP_TIMEOUT": "<SAST_MCP_TIMEOUT>",
"SAST_MCP_LOG_LEVEL": "<SAST_MCP_LOG_LEVEL>",
"SAST_MCP_API_KEY": "<SAST_MCP_API_KEY>",
"SAST_MCP_JWT_SECRET": "<SAST_MCP_JWT_SECRET>"
}
}
}
}
启动命令uvx sast-mcp-server
需要配置的环境变量
SAST_MCP_TIMEOUTPer-scan timeout in seconds (default: 300).
SAST_MCP_LOG_LEVELLogging level: DEBUG, INFO, WARNING, ERROR (default: INFO).
SAST_MCP_API_KEY密钥Optional static API key to require auth (legacy mode; HTTP transports).
SAST_MCP_JWT_SECRET密钥Optional HMAC secret to require JWT auth with scopes (HTTP transports).

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
pypisast-mcp-server0.8.3

工具

27

收录的工具列表 · 更新于 2 周前

参数类型必填说明
limitinteger否要返回的发现项最大数量(用于分页)。
offsetinteger否分页偏移量。
use_cacheboolean否如果为 true,当目标文件未更改时重用上次缓存的扫描结果(增量扫描)。设置 git_diff_only 时会忽略此项。
target_pathstring是要扫描的目录或文件的绝对路径。
min_severitystring否要报告的最低严重级别(LOW、MEDIUM、HIGH、CRITICAL)。
scanner_namestring否要使用的扫描器('bandit'、'njsscan'、'bearer'、 'semgrep')。默认为 'bearer'。
git_diff_onlyboolean否如果为 true,则仅报告 git diff 中已修改文件的发现项。
output_formatstring否'markdown'(便于阅读,默认)或 'json' (机器可读的发现项列表,供 Agent/CI 使用)。
min_confidencestring否要报告的最低置信度(LOW、MEDIUM、HIGH)。

详细介绍

SAST MCP 服务

PyPI version sast-mcp-server MCP server Python 3.10+ License: MIT CI codecov

面向 AI Agent 的静态应用安全测试(SAST)。 一个可用于生产环境的 MCP 服务,让任何 AI Agent 都能扫描代码中的安全漏洞。

支持 11 款行业标准扫描器:

扫描器语言 / 范围类型
BanditPython安全代码检查工具
njsscanJavaScript、Node.js静态分析
BearerPython、JS、Ruby、Java、Go、PHP数据流 SAST
Semgrep30 多种语言基于规则的 SAST
Trivy全部(CVE、机密信息、IaC、镜像)多功能扫描器
CodeQLPython、JS、Java、Go、C/C++、C#、Ruby、Swift语义 SAST
CheckovTerraform、K8s、Docker、CloudFormationIaC 策略扫描器
Gitleaks全部(.git 历史记录)深度机密信息扫描
OSV-Scanner多种(锁文件、SBOM)SCA
Grype容器、操作系统软件包、锁文件、SBOMSCA / 镜像扫描
OWASP ZAP运行时通过 Docker 进行动态扫描(DAST)

可与 任何兼容 MCP 的 Agent 配合使用:Gemini CLI、Claude Desktop、OpenAI Agents、Cursor、Windsurf 等。


功能

  • 🔍 11 款 SAST/SCA/DAST 扫描器,采用统一的输出格式
  • 🌳 感知 AST 的上下文 — 显示完整的外层函数,而不只是行号
  • 📊 按严重性和可信度筛选 — 聚焦重要问题
  • 🔀 Git 差异模式 — 仅扫描修改过的文件,进行增量审查
  • 🙈 忽略项管理 — 抑制误报并保留审计记录
  • 📄 分页 — 处理大型代码库,避免 Agent 不堪重负
  • 🌐 双传输方式 — stdio(本地)或 Streamable HTTP(远程部署)
  • 🔐 JWT 和 API 密钥身份验证 — 保护远程部署
  • 📦 一条命令即可安装 — pip install sast-mcp-server
  • 🚀 多扫描器模式 — 并行运行所有已安装的扫描器,并去重
  • 📋 SARIF 导出 — 与 GitHub、GitLab、Azure DevOps 集成 CI/CD
  • 🏗️ IaC 扫描 — 检查 Terraform、Kubernetes、Docker 安全策略
  • 🔑 机密信息检测 — 在代码和 git 历史记录中查找硬编码的 API 密钥、令牌和密码
  • 📦 SCA / 依赖项 CVE — 根据 OSV 数据库扫描锁文件,查找已知漏洞
  • 🕷️ DAST — 通过 OWASP ZAP 和 Docker 对运行中的应用进行动态基线扫描
  • 📈 基线与趋势跟踪 — 缓存扫描结果并与已保存的基线进行比较
  • 🤖 MCP 提示词与资源 — 为 Agent 提供预置安全工作流和实时仪表板
  • 📤 仪表板集成 — 将 SARIF 结果推送到 DefectDojo 或 GitHub Code Scanning
  • 🩹 AI 辅助修复 — 生成修复提示词,并通过 git apply 应用 Agent 编写的补丁

快速开始

此服务的实用性取决于同时安装的扫描器。请选择符合你所需工具集范围的安装方式。

选项 1 — 完整容器(推荐:9 个扫描器,无需设置)
docker pull ghcr.io/skyrxin/sast-mcp-server:full

捆绑了 bandit、njsscan、bearer、semgrep、trivy、checkov、gitleaks、 osv-scanner 和 grype,因此 scan_all 开箱即用。或者,只需一条命令即可启动 HTTP 服务:

docker compose up          # serves http://localhost:8080/mcp + /health /ready /metrics
选项 2 — pip 附加组件(4 个可通过 pip 安装的扫描器)
pip install "sast-mcp-server[scanners]"   # adds bandit, njsscan, semgrep, checkov
选项 3 — 最小化 / 自定义
pip install sast-mcp-server               # server only — bring your own scanners
uvx sast-mcp-server                        # run without installing

然后安装所需的扫描器(通过 pip 无法安装二进制扫描器):

pip install bandit njsscan semgrep checkov     # pip-installable
# trivy:        https://aquasecurity.github.io/trivy/latest/getting-started/installation/
# grype:        https://github.com/anchore/grype#installation
# gitleaks:     https://github.com/gitleaks/gitleaks#installing
# osv-scanner:  https://google.github.io/osv-scanner/installation/
# bearer:       https://docs.bearer.com/installation/
# codeql:       https://github.com/github/codeql-cli-binaries/releases
各扫描器的打包位置
扫描器:full 镜像[scanners] 附加组件备注
Bandit✅✅pip
njsscan✅✅pip
Semgrep✅✅pip
Checkov✅✅pip
Bearer✅—安装脚本
Trivy✅—二进制文件
Gitleaks✅—二进制文件
OSV-Scanner✅—二进制文件
Grype✅—二进制文件
CodeQL——数 GB 的软件包——在运行时挂载
OWASP ZAP——通过主机上的 Docker 运行(run_active_scan)

启动时,服务会记录它实际检测到的扫描器数量(例如 Scanners available: 9/11 (...)),list_scanners 工具 / /ready 端点也会报告相同信息,因此你始终可以清楚地了解已安装的扫描器。

sast-mcp-server MCP server


与 AI Agent 配合使用

Gemini CLI

作为扩展安装:

gemini extensions install https://github.com/Skyrxin/sast-mcp-server

或添加到你的 ~/.gemini/settings.json:

{
  "mcpServers": {
    "sast": {
      "command": "uvx",
      "args": ["sast-mcp-server"]
    }
  }
}
Claude Desktop

添加到你的 claude_desktop_config.json:

{
  "mcpServers": {
    "sast": {
      "command": "uvx",
      "args": ["sast-mcp-server"]
    }
  }
}

参见 Claude Desktop 完整指南。

Cursor IDE

添加到 Cursor 设置 → MCP 服务:

{
  "mcpServers": {
    "sast": {
      "command": "uvx",
      "args": ["sast-mcp-server"]
    }
  }
}

参见 Cursor 完整指南。

OpenAI Agents SDK
from agents.mcp import MCPServerStdio

sast_server = MCPServerStdio(command="uvx", args=["sast-mcp-server"])

参见 OpenAI 完整指南。


可用的 MCP 工具

scan_vulnerabilities

使用指定的扫描器扫描目录中的安全漏洞。

参数类型默认值描述
target_pathstring必填要扫描的路径
scanner_namestring"bearer"扫描器:bandit、njsscan、bearer、semgrep、trivy、codeql、checkov
min_severitystring"LOW"最低严重级别:LOW、MEDIUM、HIGH、CRITICAL
min_confidencestring"LOW"最低置信度:LOW、MEDIUM、HIGH
git_diff_onlyboolfalse仅扫描 Git 修改过的文件
limitint50返回的发现项数量上限
offsetint0分页偏移量
scan_all

并行运行所有已安装的扫描器,并自动去重。推荐用于全面的安全扫描。

参数类型默认值描述
target_pathstring必填要扫描的路径
min_severitystring"MEDIUM"最低严重级别(默认值较高,以减少干扰)
min_confidencestring"LOW"最低置信度
git_diff_onlyboolfalse仅扫描 Git 修改过的文件
limitint50返回的发现项数量上限
offsetint0分页偏移量
scan_git_history

使用 Gitleaks 扫描整个 .git 历史,查找泄露的机密和凭据。

参数类型默认值描述
target_pathstring"."仓库根目录的路径(必须包含 .git)
min_severitystring"LOW"要报告的最低严重级别
run_active_scan

通过编排 Docker Compose 堆栈,使用 OWASP ZAP 运行动态(DAST)基线扫描。

参数类型默认值描述
target_pathstring必填包含 docker-compose 文件的目录
docker_compose_filestring必填docker-compose 文件的名称(例如 docker-compose.yml)
target_urlstring必填应用启动后运行时的 URL(例如 http://localhost:8080)
export_sarif

以 SARIF 2.1.0 格式导出扫描结果,用于 CI/CD 集成。

参数类型默认值描述
target_pathstring必需要扫描的路径
scanner_namestring"bearer"要使用的扫描器
min_severitystring"LOW"最低严重程度
min_confidencestring"LOW"最低置信度
output_pathstring""写入 SARIF 的文件路径(为空则以字符串形式返回)
list_scanners

列出可用扫描器、其安装状态和支持的语言。

ignore_vulnerability

抑制某项发现,使其不再出现在后续扫描中(并保留审计记录)。

unignore_vulnerability

重新启用先前被抑制的发现。

list_ignored_vulnerabilities

显示项目当前所有被抑制的发现。

save_baseline

运行扫描,并将结果缓存为命名基线,以便日后比较趋势。

参数类型默认值描述
target_pathstring必需要扫描的路径
tagstring"latest"此基线的名称(例如 main、pre-release)
scanner_namestring"bearer"要使用的扫描器
min_severitystring"LOW"要包含的最低严重程度
min_confidencestring"LOW"要包含的最低置信度
compare_baseline

将新扫描结果与已保存的基线进行比较,以突出显示新增和已修复的发现。

参数类型默认值描述
target_pathstring必需要扫描的路径
tagstring"latest"用于比较的基线标签
scanner_namestring"bearer"要使用的扫描器
min_severitystring"LOW"要包含的最低严重程度
min_confidencestring"LOW"要包含的最低置信度
upload_to_defectdojo

将 SARIF 导出文件导入 DefectDojo 参与项目。需要设置 DEFECTDOJO_URL 和 DEFECTDOJO_API_KEY 环境变量。

参数类型默认值描述
sarif_pathstring必需来自 export_sarif 的 SARIF 文件路径
engagement_idint必需目标 DefectDojo 参与项目 ID
activebooltrue将导入的发现标记为活动状态
verifiedboolfalse将导入的发现标记为已验证
upload_to_github

将 SARIF 报告上传到 GitHub Code Scanning。需要具有 security_events: write 权限范围的 GITHUB_TOKEN。

参数类型默认值描述
sarif_pathstring必需来自 export_sarif 的 SARIF 文件路径
repostring必需格式为 owner/name 的仓库
commit_shastring必需结果所对应的完整提交 SHA
refstring必需完整限定的引用,例如 refs/heads/main
generate_fix_prompt

将缓存发现中的易受攻击代码及上下文打包为适用于大模型的提示词, 要求生成严格的统一差异修复补丁。

参数类型默认值描述
target_pathstring必需已扫描的项目根目录(含 .sast-mcp-cache)
finding_hashstring必需要修复的发现哈希值(来自扫描输出)
context_windowint15要包含在发现前后文中的源代码行数
apply_patch

通过 git apply 将 Agent 生成的统一差异补丁应用到磁盘(拒绝路径超出 目标目录范围的补丁)。

参数类型默认值描述
target_pathstring必需补丁路径所相对的目录
patchstring必需要应用的统一差异文本
check_onlyboolfalse验证但不修改文件
evaluate_policy

运行所有扫描器,并返回明确的 PASS/FAIL 判定,以便在 CI 中进行门禁检查。

参数类型默认值描述
target_pathstring必填扫描路径
max_criticalint0允许的 CRITICAL 数量上限(−1 = 不限)
max_highint-1允许的 HIGH 数量上限(−1 = 不限)
max_mediumint-1允许的 MEDIUM 数量上限(−1 = 不限)
fail_on_newboolfalse如果发现的问题相较于 scan_all 基线为新增,则判定失败
baseline_tagstring"latest"fail_on_new 启用时使用的基线标签
output_formatstring"markdown"markdown 或 json
export_sbom

运行所有扫描器并导出 SBOM / 漏洞报告。在 CycloneDX 模式下,如果已安装 Syft,组件清单将包含完整依赖项列表(而不只是存在漏洞的软件包)。

参数类型默认值描述
target_pathstring必填扫描路径
output_pathstring""要写入的文件(为空 = 内联返回)
min_severitystring"LOW"要包含的最低严重性
sca_onlybooltrue仅包含依赖项(SCA)发现结果;false = 全部
formatstring"cyclonedx"cyclonedx 或 spdx(SPDX 2.3)
generate_report

运行所有扫描器并生成执行摘要安全报告。

参数类型默认值描述
target_pathstring必填扫描路径
output_pathstring""要写入的文件(为空 = 内联返回 HTML;生成 PDF 时必填)
min_severitystring"LOW"要包含的最低严重性
formatstring"html"html 或 pdf(需要 [pdf] 附加项)
compliance_report

将发现结果映射到合规框架,并报告合规状况。

参数类型默认值描述
target_pathstring必填扫描路径
frameworkstring"owasp"owasp、sans、pci 或 cis
output_pathstring""可选的 Markdown 报告输出文件
min_severitystring"LOW"要包含的最低严重性
scan_image

扫描容器镜像引用,检查漏洞和机密信息(Trivy 或 Grype)。

参数类型默认值描述
image_refstring必填镜像引用,例如 nginx:1.25
scanner_namestring"trivy"trivy 或 grype
min_severitystring"MEDIUM"要报告的最低严重性
output_formatstring"markdown"markdown 或 json
remediate_and_verify

闭环修复:先试运行补丁,再应用补丁、重新扫描并确认问题已消失(失败时回滚补丁)。

参数类型默认值描述
target_pathstring必填项目根目录(包含 .sast-mcp-cache)
finding_hashstring必填要修复问题的哈希值
patchstring必填要应用的统一差异
scanner_namestring""重新扫描所用的扫描器(默认:发现该问题的扫描器)
auto_rollbackbooltrue验证失败时还原补丁
import_sarif

导入外部 SARIF 文件(Snyk、Veracode、CI 作业等),并将其纳入规范化的问题处理流程,以便参与去重、基线和仪表板统计。

参数类型默认值描述
target_pathstring必填结果所属的项目根目录
sarif_pathstring必填SARIF 2.1.0 文件的路径
scanner_namestring"external"要记录的来源扫描器名称
savebooltrue缓存导入的问题
triage_finding

获取可利用性/误报评估提示词,或记录 CycloneDX VEX 决策(抑制类处置也会将发现添加到忽略列表)。

ParameterTypeDefaultDescription
target_pathstringrequired项目根目录(其中包含 .sast-mcp-cache)
finding_hashstringrequired要进行分类的发现的哈希值
dispositionstring""exploitable、not_affected、false_positive、resolved、in_triage(留空 = 返回提示词)
justificationstring""理由/CycloneDX 正当性关键词
comment_on_pr

在 GitHub PR 或 GitLab 合并请求上发布安全摘要。需要 GITHUB_TOKEN 或 GITLAB_TOKEN(以及可选的 GITLAB_URL)。

ParameterTypeDefaultDescription
providerstringrequiredgithub 或 gitlab
repostringrequiredowner/name(GitHub)或项目 ID/路径(GitLab)
pr_numberintrequiredPR 编号/MR IID
bodystringrequiredMarkdown 评论正文
notify_slack / notify_teams

向 Slack 或 Microsoft Teams 传入 Webhook 发送通知 (SLACK_WEBHOOK_URL/TEAMS_WEBHOOK_URL)。

create_jira_issue

为一项发现创建 Jira 问题。需要 JIRA_URL、JIRA_EMAIL、JIRA_API_TOKEN。

ParameterTypeDefaultDescription
project_keystringrequiredJira 项目键(例如 SEC)
summarystringrequired问题标题
descriptionstringrequired问题描述
issue_typestring"Bug"Jira 问题类型

提示: scan_vulnerabilities、scan_all 和 scan_git_history 支持 output_format="json",可在 CI/Agent 工作流中返回机器可读的结果。

身份验证: 在 HTTP 传输中,每个工具都受作用域限制 — scan:read(扫描、 报告、导出)、scan:write(基线、补丁、上传、通知)、 config:write(忽略列表)。设置 SAST_MCP_JWT_SECRET 并签发带作用域的 JWT。


SARIF/CI/CD 集成

将扫描结果导出为 SARIF 2.1.0 格式,以便与 CI/CD 平台集成:

# In your CI pipeline, use the MCP tool:
# export_sarif(target_path=".", scanner_name="semgrep", output_path="results.sarif")

# Then upload to GitHub Code Scanning:
# gh api /repos/{owner}/{repo}/code-scanning/sarifs -f [email protected]

兼容平台:GitHub Code Scanning、GitLab SAST、Azure DevOps、VS Code SARIF Viewer。


远程部署(Streamable HTTP)

对于远程或托管在云端的部署,2026 年 MCP 标准使用 Streamable HTTP。

设置密钥即可通过 JWT Bearer Authentication 保护服务。或者,为了向后兼容,也可以使用静态 API 密钥。

# Set JWT secret for secure authentication
export SAST_MCP_JWT_SECRET="your_hmac_sha256_secret"

# Or use the legacy API key method
export SAST_MCP_API_KEY="your_secure_api_key_here"

# Start the server with streamable-http transport
uv run sast-mcp-server --transport streamable-http --port 8080 --host 0.0.0.0

注意:旧的 sse 传输已弃用。请迁移到 streamable-http。

核心工作流

1. 统一漏洞扫描

单独运行任何已安装的扫描器(scan_vulnerabilities(scanner_name="bandit")),或使用 scan_all 一次运行所有扫描器。

2. 深度密钥与动态扫描

使用 scan_git_history 查找多年前泄露的 API 密钥,或使用 run_active_scan 通过 Docker Compose 启动应用,并使用 OWASP ZAP 对其进行动态测试。

3. 基线与趋势跟踪

将扫描保存为命名基线,并与后续扫描进行比较,以跟踪新增漏洞、已修复问题和严重性趋势的变化。

  • save_baseline(target_path=".", tag="main")
  • compare_baseline(target_path=".", tag="main")
4. CI/CD 集成

将扫描结果导出为 SARIF 格式(export_sarif),以便与 GitHub Code Scanning、GitLab SAST 或任何其他兼容 SARIF 的平台集成。

5. MCP 提示词(安全工作流)

预构建的安全工作流,可引导 AI Agent:

  • security_review:全面评估代码库
  • fix_vulnerability:针对性修复建议
  • pr_security_check:仅扫描 git 差异并执行严重性门槛检查
  • compliance_report:生成 OWASP Top 10 或 PCI-DSS 报告
6. MCP 资源(安全仪表板)

为 AI Agent 提供只读上下文数据,无需运行完整扫描:

  • sast://dashboard/{path}:安全态势仪表板
  • sast://config:服务配置和状态
  • sast://scanners:可用的扫描器和语言
  • sast://cache/{path}/latest:最新扫描结果元数据
7. 仪表板上传与 AI 辅助修复

将 SARIF 结果推送到外部平台,并使用 Agent 编写的补丁修复问题:

  • upload_to_defectdojo / upload_to_github:将 SARIF 导出结果推送到仪表板
  • generate_fix_prompt:为特定问题构建适用于大模型的提示词
  • apply_patch:通过 git apply 应用生成的统一差异
Docker

每次发布时都会将预构建镜像发布到 GHCR:

docker pull ghcr.io/skyrxin/sast-mcp-server:full       # 9 scanners (recommended)
docker pull ghcr.io/skyrxin/sast-mcp-server:minimal    # bandit, njsscan, bearer

# Run as an HTTP server
docker run -p 8080:8080 -e SAST_MCP_JWT_SECRET=your-secret \
  ghcr.io/skyrxin/sast-mcp-server:full --transport streamable-http

# …or use the bundled compose file (exposes /health /ready /metrics too)
docker compose up

更倾向于在本地构建?

docker build -t sast-mcp-server .                       # minimal
docker build -f Dockerfile.full -t sast-mcp-server:full .   # full

镜像中不包含 CodeQL 和 OWASP ZAP — CodeQL 提供的是多 GB 的 软件包(在运行时挂载),而 ZAP 的 run_active_scan 会在 主机上协调 Docker。


可靠性

“可用于生产”在这里不是一句口号 — 每次推送都会在 CI 中进行衡量:

  • 226 项测试,74% 的行覆盖率(Codecov),在 Python 3.10–3.13 上均通过,并强制执行 mypy 类型检查。
  • 每次构建都进行自扫描。 服务会在 CI 中运行自己的扫描器来扫描自身代码;SARIF 和摘要会作为 self-scan-report 构件发布。快照存放在 examples/self-scan/。
  • 经过负载测试的 HTTP 传输。 scripts/loadtest.py 会在 CI 中针对 Streamable HTTP 服务运行:本地运行时,在 30 个并发工作线程下,对 /health、/ready、/metrics 持续提供 约 210 req/s,p95 ≈ 290 ms,且零失败。
  • 运维端点 — /health(存活状态)、/ready(缓存的扫描器清单;未安装任何扫描器时返回 503)、/metrics(Prometheus 文本格式)。
  • 负载下有界运行 — 子进程扫描器支持可配置的并发上限(SAST_MCP_MAX_CONCURRENT_SCANS),HTTP 传输支持按客户端进行令牌桶速率限制(SAST_MCP_RATE_LIMIT_PER_MIN),并设有按扫描器配置的超时,以及可选的增量扫描缓存。

亲自运行负载测试:

python scripts/loadtest.py --requests 2000 --concurrency 50

配置

环境变量
变量默认值描述
SAST_MCP_TIMEOUT300扫描超时时间,单位为秒
SAST_MCP_LOG_LEVELINFO日志级别:DEBUG、INFO、WARNING、ERROR
SAST_MCP_CACHE_TTL86400缓存生存时间,单位为秒(不带标签的扫描)
SAST_MCP_CACHE_MAX_SCANS200保留的无标签缓存扫描数量上限(0 = 不限)
SAST_MCP_HTTP_RETRIES3集成 HTTP 调用的重试次数
SAST_MCP_HTTP_TIMEOUT60集成 HTTP 调用的单次请求超时时间(秒)
SAST_MCP_MAX_CONCURRENT_SCANS8同时运行的子进程扫描器数量上限(0 = 不限)
SAST_MCP_RATE_LIMIT_PER_MIN0HTTP 传输每个客户端的请求额度(0 = 禁用)
SAST_MCP_SCANNER_TIMEOUTS(无)按扫描器设置超时时间的 JSON 映射,例如 {"trivy":600}
SAST_MCP_API_KEY(无)远程(HTTP)身份验证的 API 密钥
SAST_MCP_JWT_SECRET(无)JWT bearer 身份验证的 HMAC-SHA256 密钥(按工具强制执行范围限制)
DEFECTDOJO_URL(无)DefectDojo 实例的基础 URL(用于 upload_to_defectdojo)
DEFECTDOJO_API_KEY(无)DefectDojo API v2 令牌
GITHUB_TOKEN(无)具有 security_events: write 权限的令牌(SARIF 上传 + PR 评论)
GITLAB_TOKEN(无)具有 api 范围的 GitLab 令牌(用于 comment_on_pr)
GITLAB_URLhttps://gitlab.comGitLab 基础 URL(可覆盖为自托管实例)
SLACK_WEBHOOK_URL(无)Slack 传入 Webhook(用于 notify_slack)
TEAMS_WEBHOOK_URL(无)Microsoft Teams 传入 Webhook(用于 notify_teams)
JIRA_URL / JIRA_EMAIL / JIRA_API_TOKEN(无)Jira Cloud 凭据(用于 create_jira_issue)
运维端点(HTTP 传输)

使用 --transport streamable-http 运行时,服务会公开以下端点:

端点用途
GET /health存活探针 — 进程运行时返回带版本信息的 200
GET /ready就绪探针 — 列出已安装的扫描器(无扫描器时返回 503)
GET /metricsPrometheus 文本格式数据(工具调用、扫描耗时、发现项)
增量扫描

scan_vulnerabilities 和 scan_all 支持 use_cache=true:服务会为目标文件生成指纹,并在文件未发生变化时复用上一次扫描结果,因此同一会话中的重复扫描速度很快。


开发

# Clone and install with dev dependencies
git clone https://github.com/Skyrxin/sast-mcp-server.git
cd sast-mcp-server
pip install -e ".[dev]"

# Run tests
pytest tests/ -v

# Lint
ruff check sast_mcp_server/

# Run locally
python -m sast_mcp_server

项目结构

sast_mcp_server/
├── __init__.py          # Package version
├── __main__.py          # python -m entry point
├── server.py            # FastMCP server with all tools + /health /ready /metrics
├── models.py            # Typed data models (Finding, Severity, etc.)
├── config.py            # Central validated settings (env-driven)
├── sarif.py             # SARIF 2.1.0 export and parsing
├── aggregator.py        # Multi-scanner parallel execution + deduplication
├── cache.py             # Scan caching, baselines, comparison, fingerprints
├── auth.py              # JWT / API key authentication for remote transports
├── metrics.py           # In-process Prometheus metrics
├── ratelimit.py         # Per-client token-bucket rate limiting
├── prompts.py           # MCP prompt templates (security workflows)
├── resources.py         # MCP resources (sast:// dashboards and metadata)
├── scanners/
│   ├── base.py          # Abstract scanner base class
│   ├── factory.py       # Scanner registry and factory
│   ├── bandit.py        # Bandit (Python)
│   ├── njsscan.py       # njsscan (JavaScript)
│   ├── bearer.py        # Bearer (multi-language)
│   ├── semgrep.py       # Semgrep (30+ languages)
│   ├── trivy.py         # Trivy (CVEs, secrets, IaC)
│   ├── codeql.py        # CodeQL (deep semantic SAST)
│   ├── checkov.py       # Checkov (IaC policies)
│   ├── gitleaks.py      # Gitleaks (git history secret scanning)
│   ├── osv_scanner.py   # OSV-Scanner (SCA / dependency CVEs)
│   ├── grype.py         # Grype (SCA + container image scanning)
│   └── zap.py           # OWASP ZAP (DAST via Docker)
├── enrichment/
│   ├── ast_context.py   # AST-aware code context extraction
│   ├── git_diff.py      # Git diff for incremental scanning
│   ├── ignore_manager.py # Finding ignore list management
│   ├── patch_prompt.py  # Builds LLM prompts to fix a cached finding
│   └── patch_apply.py   # Applies/reverts agent-generated diffs via `git apply`
├── reporting/
│   ├── sbom.py          # CycloneDX SBOM/VDR (+ optional Syft inventory)
│   ├── spdx.py          # SPDX 2.3 SBOM
│   ├── vex.py           # CycloneDX VEX statements (triage decisions)
│   ├── html.py          # Standalone HTML executive report
│   ├── pdf.py           # PDF report (optional [pdf] extra)
│   └── compliance.py    # OWASP / SANS / PCI / CIS mapping
└── integrations/
    ├── defectdojo.py    # Upload SARIF to DefectDojo
    ├── github.py        # GitHub Code Scanning + PR comments
    ├── gitlab.py        # GitLab MR comments
    ├── slack.py / teams.py  # Webhook notifications
    └── jira.py          # Create Jira issues

许可证

MIT

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。