连上 AngusSecurity MCP 之后,在 IDE 对话里就能直接问扫描结论:这次有没有高危、某条 Finding 怎么改、门禁会不会挡住、报告出了没有——查高危与告警、解释 Finding、比两次检查、读/下载报告快照;权限与写开关齐全时,还能扫当前仓库、镜像或制品。返回的是脱敏结论,不是再塞一整份原始扫描结果。
主要实用场景:
- 发版前问一句:这次检查有没有 Critical / 高危?
- 点名一条 Finding:规则是什么、该怎么改?
- 两次扫描比一比:多了什么、少了什么、还在不在?
- 按现有策略模拟:门禁会不会挡住这次结果?
- 读已有报告或下载正文;权限够时为已结束的检查出一份报告
- 权限允许时,扫一下当前仓库(或镜像 / 制品)
结论: Security MCP 最多 16 个工具——多数查 Finding、告警、CVE、许可证、门禁与报告;权限与写开关齐全时可扫、可为已结束的检查出报告。不抑制误报、不揭密钥原文、不发布/分享。须用本产品门户签发的用户访问令牌。
控制台与宿主接线见文末参考「通过 MCP 连接 AngusSecurity」。制品坐标在哪个仓、客户端怎么配,见文末参考「AngusRepo MCP」——那边是恒只读八工具;这边答扫描结论、CVE、许可证、门禁与报告快照。统一引擎与报告怎么出,见文末:用一套扫描替换脚本、安全扫描报告怎么出。
1. Agent 常问的六类问题(以及明确不做)
- 扫当前仓库 / 镜像 / 制品 / 点名文件。
- 按代码安全、依赖、密钥、许可分组看这次结果。
- 列出或解释 Finding(密钥片段看不到原文)。
- 查本机漏洞库某条 CVE;汇总可见许可证。
- 用已有策略做门禁模拟;对比两次已完成检查。
- 读已有报告或下载正文;权限齐全时为已结束的检查生成报告。
明确不做: 抑制误报、揭开密钥原文、改告警状态、改策略、发布/分享/删报告、管理凭据与引擎、通用上传整棵未点名目录、导出引擎原始输出。
| 对比 | AngusRepo MCP | AngusSecurity MCP |
|---|---|---|
| 工具面 | 8 个只读工具,不能扫、不能出报告 | 最多 16 个;权限齐全时可扫 + 出报告 |
| 回答什么 | 坐标在哪个仓、依赖/隔离快照、客户端模板 | Finding、CVE、许可证、门禁模拟、报告快照 |
| 不做 | 不代理协议拉包、不触发扫描 | 不定位制品仓、不揭密、不抑制 |
2. 形态:进程内端点 + 回环
对话侧只看见具名工具;服务端在本进程内回环到已有管理 API,权限与审计不另起一套。
IDE / Agent
--POST {网关}/security/mcp--> Boot /mcp
--回环 Bearer--> /api/v1/**(白名单语义工具)
再做一个外部 Node 去包 REST,等于复制一份策略。回环没有通用 path 参数,通用上传网关、揭密与发布接口不会被模型拼出来。
| 项 | 口径 |
|---|---|
| 传输 | 无状态 POST;默认 /mcp;经网关 {host}/security/mcp |
| 回环 | 本机 Security 端口(默认 1811);Bearer 原样转发;X-Angus-Client-Source: mcp |
| 注册面 | 只注册 tools;无 resources / prompts / sampling |
| GM | 不新增 GM 资源;显隐跟现有 @PPS 走 |
| id | 任务 id、Finding id 均为十进制字符串,勿截断或当浮点 |
| 配置 | 作用 |
|---|---|
angus.mcp.enabled(ANGUS_MCP_ENABLED,未设为 true) |
false → 无端点;控制台 / CLI / 已有检查不受影响 |
angus.mcp.write-enabled(当前发行未设时为 true) |
false → 列表无 security_scan、security_create_report;查询与下载不靠它 |
限流:每账号每分钟最多 30 次合法调用;超出 rate_limited,稍后再试。
3. 十六个工具(名称以文档为准)
分析师 / 管理员在写开关打开且权限齐全时,tools/list 应恰好 16。只读更少,见 §4。
3.1 发起检查与看这次结果
| 工具 | 权限要点 | 做什么 / 易踩坑 |
|---|---|---|
security_scan |
ScanJobs:EXECUTE + 写开关 |
kind:git / image / artifact / files;一次一种目标;立刻回任务 id(jobId)——先等扫描结束再问问题/出报告。git 只收 https;gitRef 用用户说的或当前分支,不猜 main。私有目标只填控制台已存凭据名称,不传令牌。点名能力放 capabilities;没点名由服务端展开 |
security_issues |
Findings:VIEW + ScanJobs:VIEW |
按能力分组;某项 notScanned=true = 该项没跑;空列表 ≠ 安全;密钥片段为掩码 |
3.2 日常检索
| 工具 | 权限要点 | 做什么 / 易踩坑 |
|---|---|---|
security_list_findings |
Findings:VIEW |
至少一项过滤(jobId / assetKey / keyword / ruleId 等);列表无代码片段;空 ≠ 安全 |
security_explain_finding |
Findings:VIEW;规则说明另需 RulePacks:VIEW |
规则含义、修复建议、掩码片段;不可揭密;一次最多约 5 个 id |
security_list_jobs |
ScanJobs:VIEW |
查仓库/镜像/制品用 assetKeyword,勿把地址塞进 keyword;未 COMPLETED/PARTIAL 时不能把计数说成干净 |
security_list_alerts |
Alerts:VIEW |
只读告警;不改状态、不指派 |
分页从 1 起,每页最多 20。
3.3 对比、漏洞库与门禁
| 工具 | 权限要点 | 做什么 / 易踩坑 |
|---|---|---|
security_compare_jobs |
ScanJobs:VIEW |
两次已完成检查的指纹差(新增/消失/仍在);不建任务 |
security_lookup_vulnerability |
RulePacks:VIEW |
查本机漏洞库;无记录说「库内无此条」,勿改写「没有漏洞」 |
security_license_summary |
Findings:VIEW |
账号可见许可证汇总;不能指定某次检查——问某次用 security_issues |
security_risk_summary |
Dashboard:VIEW |
风险分数与态势摘要;不回概览大列表 |
security_simulate_gate |
Policies:VIEW |
只读模拟;可选 lookbackJobs(最大 100);只读/研发角色通常看不到 |
3.4 报告
| 工具 | 权限要点 | 做什么 / 易踩坑 |
|---|---|---|
security_report_summary |
Reports:VIEW |
查已有报告;无 READY 时说尚未生成;不含验真地址与分享口令 |
security_get_report |
Reports:VIEW |
按 id 看范围、状态、指标;不含验真/分享口令/规格原文 |
security_compare_reports |
Reports:VIEW |
两份报告摘要与问题指纹差 |
security_download_report |
Reports:EXECUTE |
仅报告已就绪(READY);format:JSON/HTML/CSV/PDF/SARIF;文本约 64 KB 后截断并标 truncated;PDF/压缩包只回文件名、字节数与控制台路径 |
security_create_report |
Reports:EXECUTE + 写开关 |
仅已结束任务;参数主要是 jobId(+ 可选 name/format);创建后先是生成中(PENDING)——先等就绪再下载,用 security_get_report 轮询至 READY 或失败;不发布、不分享、不设打开密码 |
不在列表中: 抑制、揭密、发布、分享、删除报告、改策略、通用上传整棵目录、引擎原始输出导出。
报告是生成时刻的快照,不会随下一次扫描改写——与文末「安全扫描报告怎么出」一致。
4. 账号能看见哪些工具
| 角色 | 写开关打开 | 写开关关闭 |
|---|---|---|
只读(SEC_VIEWER) |
12:有 security_issues;无扫、无门禁模拟、无报告下载/创建 |
同左(12) |
研发(SEC_DEVELOPER) |
13:只读 + security_scan |
12 |
分析师 / 管理员(SEC_ANALYST / SEC_ADMIN) |
16 | 14(无扫、无创建报告) |
缺权限的工具不会出现在列表;按名硬调 → permission_denied。MCP 不会扩大账号权限。先用同一账号在控制台做同样操作,再怪 MCP。
5. 鉴权边界(容易踩坑)
| 凭证 | 结果 |
|---|---|
| 门户签发的用户访问令牌(PAT) | 可进;工具集随角色与写开关收窄 |
repod_ 或 AngusRepo 等其他产品令牌 |
401,无工具列表 |
| OAuth 刷新令牌 | 401 |
| 无 Bearer | 401(避免收成工具内错误导致模型盲重试) |
可见范围 = 该用户在 /api/v1 的范围,与控制台一致。个人令牌:头像 → 我的(/profile)。CI 用服务账号,勿把个人登录态写进仓库。
6. 宿主接入(最小可复制片段)
令牌放环境变量,勿写入仓库:
{
"mcpServers": {
"angus-security": {
"url": "https://<gateway-host>/security/mcp",
"headers": {
"Authorization": "Bearer ${ANGUS_SECURITY_TOKEN}" }
}
}
}
对外用网关 {host}/security/mcp。私有化直连改为 https://<security-host>/mcp(默认端口 1811,经反代时不必把端口暴露公网)。地址可在控制台 系统 → MCP 接入 复制。
| 宿主 | 配置文件(以各宿主文档为准) |
|---|---|
| Cursor | 项目 .cursor/mcp.json 或用户级 ~/.cursor/mcp.json |
| Claude | claude_desktop_config.json |
| VS Code | 工作区 .vscode/mcp.json |
| Codex / Qoder | 见对应宿主 MCP 说明 |
仅 stdio 的宿主用 @anguskit/mcp --product security 转发(读 ANGUS_TOKEN / ANGUS_BASE_URL,与 ANGUS_SECURITY_TOKEN 不是同一变量名):
{
"mcpServers": {
"angus-security": {
"command": "npx",
"args": ["-y", "@anguskit/mcp", "--product", "security"],
"env": {
"ANGUS_BASE_URL": "https://<gateway-host>",
"ANGUS_TOKEN": "${ANGUS_SECURITY_TOKEN}"
}
}
}
}
ANGUS_BASE_URL 是网关根,不要带 /security/mcp。私有化无产品前缀时改用 --endpoint + https://<security-host>/mcp。默认 npm 源没有该包时,文档建议 https://repo.anguskit.com/npm/npm-public/。完整宿主表见文末 MCP 文档。
6.1 对话示例:用户问 → 工具 → 期望字段
例 A:扫完再问问题
| 步骤 | 内容 |
|---|---|
| 用户问 | 扫一下这个仓库的代码安全和秘钥。 |
| 应调用 | security_scan(kind=git,https gitUrl,gitRef=用户/当前分支,可选 capabilities)→ 稍后 security_issues / security_list_jobs |
| 期望字段 | 立刻拿到任务 id(jobId,十进制字符串);扫描结束后再看分组结果;密钥片段为掩码 |
| 不应出现 | 猜 main、在对话里填 PAT、把 SSH git@ 原样提交而不改 https |
例 B:解释一条已有 Finding
| 步骤 | 内容 |
|---|---|
| 用户问 | 解释这条 Finding,并说明怎么改。 |
| 应调用 | 先 security_list_findings(带过滤)拿完整 id,再 security_explain_finding |
| 期望字段 | 规则含义、remediation / 固定版本、路径行号、掩码 snippet |
| 不应出现 | 密钥原文、抑制/审批、把模型自己的改法说成扫描器结论 |
例 C:门禁与报告
| 步骤 | 内容 |
|---|---|
| 用户问 | 按这个策略会不会挡住?给这次已结束检查出一份 HTML 报告。 |
| 应调用 | security_simulate_gate(需 Policies:VIEW)→ 写开关开且有 Reports:EXECUTE 时 security_create_report → 轮询 security_get_report |
| 期望字段 | 模拟不新建扫描;创建后先是生成中;就绪后再 security_download_report(文本可带 truncated) |
| 不应出现 | 只读/研发硬调门禁或创建报告;把「生成中」当成已出报告;发布/分享 |
连上后也可先 tools/list 对角色表对一下个数,再对控制台里已有 Finding 做一次 security_explain_finding 冒烟。
7. 与业界形态、与 Repo 的对照(极短)
| 形态 | 代表 | 与 AngusSecurity(一句话) |
|---|---|---|
| 本机 stdio 扫工作区 | Snyk CLI MCP | 服务端拉仓库/镜像/制品;点名文件走有上限上传 |
| 平台检索 + 可改状态 | SonarQube MCP | 采纳检索与门禁模拟;不改 Finding 状态、不挂载工作区 |
| 制品情报 MCP | Sonatype Guide / JFrog Xray | 坐标归属走 Repo MCP;这里答扫描结论与门禁 |
| 进程内语义工具 | AngusSecurity | 回环本进程 REST;抑制/揭密/发布不进工具面 |
对照说明取舍,不是采购排名。细节以各厂商当日文档为准。
8. 边界与翻车表
连上之后最常见的三种翻车:拿错产品令牌连不上、空 Finding 列表被说成「安全」、扫描或报告还没出完就追问正文——对照下表与 FAQ。
| 现象 | 原因 | 处理 |
|---|---|---|
| 连不上 | enabled=false / URL 错 / 控制台域名 /mcp 被反代拦 |
开开关;核对网关 /security/mcp;宿主须 POST |
| 401 | 其他产品令牌或 repod_ / 无 Bearer / 令牌过期 |
「我的」里重签 PAT;刷新宿主 MCP |
| 工具很少 / 比同事少 | 角色缺权限或写开关关 | 对照 §4;只读无扫;研发无门禁模拟与报告下载/创建 |
permission_denied |
列表外硬调或控制台也无权限 | 先控制台验证同一账号;MCP 不扩权 |
| 助手说扫不了当前仓 | 无 ScanJobs:EXECUTE、写开关关、缺 gitRef、私有仓未给凭据名 |
开写开关;给 https + 分支;说出控制台凭据名称 |
| 想抑制误报 | 无对应工具 | 回控制台处置(避免模型把「接受风险」写成自动抑制) |
| 密钥看不清原文 | 设计如此 | 揭密只在控制台 |
刚创建报告仍是生成中(PENDING) |
报告异步出 | 轮询 security_get_report 至就绪(READY)/失败——不要刚创建就读正文 |
| PDF「下载了」却无正文 | 二进制不进对话 | 看文件名 + consolePath,去控制台取 |
rate_limited |
超过 30 次/分钟 | 稍后再试;合并提问 |
| 空 Finding 列表 | 未扫、未完成、或筛选未命中 | 说明未扫/未完成,不改写成安全 |
-32020 |
自加 Mcp-Method / Mcp-Name 与正文不一致 |
去掉自加头,或保证与当次 JSON 一致 |
FAQ
MCP 会不会揭开密钥或把误报标掉?
不会。解释与告警保持掩码;抑制、揭密、审批仍在控制台。原因之一:抑制在部分范围会自动批准——模型若把「接受风险」说成修复,会写成一条生效抑制。
写开关关掉还能查 / 下载报告吗?
能查(Reports:VIEW)。下载要 Reports:EXECUTE,不靠写开关。写开关关掉的是 security_scan 与 security_create_report。
和 CLI / CI 什么关系?
CLI 与流水线仍是批量与门禁主路径;MCP 把同一套任务与 Finding 接到 IDE 对话。统一引擎见文末:用一套扫描替换脚本。
为什么不做通用只读网关?
具名工具限制回环白名单,避免把管理 API 整面暴露给模型,并便于投影脱敏。
其他产品令牌 / repod_ 为什么不能连?
MCP 使用本门户用户访问令牌,权限与控制台一致。把自动化或跨产品令牌当成对话身份会扩大面——鉴权前直接 401。
security_license_summary 为什么答不了「这次检查」?
它汇总的是账号当前可见许可证,不能绑 jobId。问某次检查的许可问题用 security_issues。
空列表能不能说成安全?
不能。还要区分:任务未完成、某能力 notScanned=true、筛选没命中。三者都不是「目标安全」。
小结
- 与 Repo MCP 错开:这边是扫描结论 / 门禁 / 报告;写面仅扫 + 创建报告,且受开关与角色约束。
- 接入:网关
/security/mcp+ PAT;repod_与其他产品令牌不行;密钥掩码;空 ≠ 安全。 - 接入细节对照文档与控制台「系统 → MCP 接入」。
参考文章
- 通过 MCP 连接 AngusSecurity:https://www.anguskit.com/zh/docs/security/get-started/mcp
- 用一套扫描替换 Semgrep、Trivy 和 Gitleaks 脚本:https://www.anguskit.com/zh/blog/replace-semgrep-trivy-gitleaks-with-one-scan
- 安全扫描报告怎么出:https://www.anguskit.com/zh/blog/security-scan-report-snapshot-export
- 按能力出报告:https://www.anguskit.com/zh/blog/capability-security-reports-sast-sca-secret-license
- 内网漏洞库怎么更新:https://www.anguskit.com/zh/blog/intranet-vuln-db-offline-update-rollback
- 等保和审计要留哪些扫描记录:https://www.anguskit.com/zh/blog/compliance-audit-security-scan-evidence
- 用 AI 助手只读查制品库(AngusRepo MCP):https://www.anguskit.com/zh/blog/angusrepo-mcp-server-design