{
  "executive_summary": {
    "badge": "Caution",
    "security_score": 96.5,
    "view": "composite",
    "scanner_badges": {
      "cisco-skill-scanner": "Verified",
      "agent-audit-kit": "Caution",
      "nerlo-behavioral": "Verified",
      "nerlo-install-instruction": "Verified",
      "nerlo-multi-source": "Verified",
      "trivy": "Verified",
      "osv-scanner": "Verified",
      "trivy_image": "unavailable"
    },
    "finding_counts": {
      "critical": 0,
      "high": 1,
      "medium": 2,
      "low": 2,
      "informational": 6
    },
    "recommendation": "ara-rgaa-mcp may be integrated with compensating controls: review the 1 high-severity findings below, restrict granted permissions to the minimum the manifest declares, and subscribe to monitoring alerts for score changes."
  },
  "source_provenance": {
    "repository_url": "https://github.com/DavidPivert/ara-rgaa-mcp",
    "commit_sha_scanned": null,
    "license": "EUPL-1.2",
    "maintainer": "David Pivert",
    "name": "ara-rgaa-mcp",
    "version": "2.2.0"
  },
  "per_scanner_detail": [
    {
      "scanner_name": "cisco-skill-scanner",
      "scanner_version": "2.0.11",
      "score": 97.0,
      "scanner_badge": "Verified",
      "findings": [
        {
          "tool_name": "cisco-skill-scanner",
          "severity": "informational",
          "category": "policy_violation",
          "file_path": "/repo",
          "line_number": null,
          "rule_identifier": "LOW_ANALYZABILITY",
          "title": "Critically low analyzability score",
          "description": "[mcp_server policy: capability-matches-purpose class; severity high -> informational] Only 60% of skill content could be analyzed. 4 of 12 files are opaque to the scanner. The safety assessment has low confidence.",
          "remediation": "Replace opaque files (binaries, encrypted content) with inspectable source code to improve scan confidence."
        },
        {
          "tool_name": "cisco-skill-scanner",
          "severity": "informational",
          "category": "social_engineering",
          "file_path": "/repo/SKILL.md",
          "line_number": null,
          "rule_identifier": "SOCIAL_ENG_VAGUE_DESCRIPTION",
          "title": "Vague skill description",
          "description": "[mcp_server policy: capability-matches-purpose class; severity low -> informational] Skill description is too short (16 chars). Provide detailed explanation.",
          "remediation": "Provide a clear, detailed description of what the skill does and when to use it"
        },
        {
          "tool_name": "cisco-skill-scanner",
          "severity": "informational",
          "category": "policy_violation",
          "file_path": "/repo/SKILL.md",
          "line_number": null,
          "rule_identifier": "MANIFEST_MISSING_LICENSE",
          "title": "Skill does not specify a license",
          "description": "Skill manifest does not include a 'license' field. Specifying a license helps users understand usage terms.",
          "remediation": "Add 'license' field to SKILL.md frontmatter (e.g., MIT, Apache-2.0)"
        },
        {
          "tool_name": "cisco-skill-scanner",
          "severity": "informational",
          "category": "data_exfiltration",
          "file_path": "/repo/scripts/build-rgaa-data.mjs",
          "line_number": 23,
          "rule_identifier": "DATA_EXFIL_JS_NETWORK",
          "title": "Outbound network request primitives in JavaScript/TypeScript",
          "description": "[mcp_server policy: capability-matches-purpose class; severity medium -> informational] Pattern detected: fetch(",
          "remediation": "Ensure network operations are necessary and document allowed destinations"
        },
        {
          "tool_name": "cisco-skill-scanner",
          "severity": "informational",
          "category": "data_exfiltration",
          "file_path": "/repo/scripts/build-rgaa-data.mjs",
          "line_number": 25,
          "rule_identifier": "DATA_EXFIL_JS_NETWORK",
          "title": "Outbound network request primitives in JavaScript/TypeScript",
          "description": "[mcp_server policy: capability-matches-purpose class; severity medium -> informational] Pattern detected: fetch(",
          "remediation": "Ensure network operations are necessary and document allowed destinations"
        },
        {
          "tool_name": "cisco-skill-scanner",
          "severity": "informational",
          "category": "data_exfiltration",
          "file_path": "/repo/src/ara-client.ts",
          "line_number": 55,
          "rule_identifier": "DATA_EXFIL_JS_NETWORK",
          "title": "Outbound network request primitives in JavaScript/TypeScript",
          "description": "[mcp_server policy: capability-matches-purpose class; severity medium -> informational] Pattern detected: fetch(",
          "remediation": "Ensure network operations are necessary and document allowed destinations"
        }
      ],
      "execution_duration_seconds": 36.59450880502118,
      "status": "complete",
      "examined": {
        "unit": "skills",
        "count": 1
      },
      "metadata": {
        "source": "pypi",
        "source_url": "https://pypi.org/project/cisco-ai-skill-scanner/2.0.11/",
        "report_type": "cisco-skill-sast",
        "analyzers_used": [
          "bytecode",
          "pipeline",
          "static_analyzer"
        ],
        "skills_scanned": [
          "repo"
        ],
        "install_command": "pip install --require-hashes -r docker/scanner-base/cisco-skill-scanner/requirements.txt",
        "severity_counts": {
          "low": 0,
          "high": 0,
          "medium": 0,
          "critical": 0,
          "informational": 6
        },
        "artifact_type_policy": "mcp_server",
        "downweighted_findings": 5
      },
      "display_score": 97.0,
      "display_badge": "Verified"
    },
    {
      "scanner_name": "agent-audit-kit",
      "scanner_version": "0.3.26",
      "score": 83.0,
      "scanner_badge": "Caution",
      "findings": [
        {
          "tool_name": "agent-audit-kit",
          "severity": "high",
          "category": "legal-compliance",
          "file_path": "package.json",
          "line_number": 6,
          "rule_identifier": "AAK-LEGAL-001",
          "title": "Copyleft license (AGPL/SSPL) in dependency",
          "description": "A dependency uses a copyleft license (AGPL, SSPL) that may impose obligations on your project.",
          "remediation": "Review license obligations. Consider replacing with permissively-licensed alternatives."
        },
        {
          "tool_name": "agent-audit-kit",
          "severity": "low",
          "category": "supply-chain",
          "file_path": "SECURITY.md",
          "line_number": null,
          "rule_identifier": "AAK-SEC-MD-001",
          "title": "MCP server repo missing SECURITY.md or security_contact",
          "description": "A repository whose name or pyproject keywords declare it as an MCP server ships without a top-level SECURITY.md AND without a `security_contact` entry in marketplace.json / pyproject.toml / package.json. Anthropic's April 2026 SECURITY.md guidance makes this the baseline expectation so researchers have a channel.",
          "remediation": "Add SECURITY.md at the repo root with a disclosure email and response SLA; OR add `security_contact` to the project manifest."
        }
      ],
      "execution_duration_seconds": 7.237475865986198,
      "status": "complete",
      "examined": {
        "unit": "files",
        "count": 11
      },
      "metadata": {
        "source": "pypi",
        "source_url": "https://pypi.org/project/agent-audit-kit/0.3.26/",
        "report_type": "agent-audit-kit-sast",
        "install_command": "pip install --require-hashes -r docker/scanner-base/agent-audit-kit/requirements.txt",
        "rules_evaluated": 211,
        "severity_counts": {
          "low": 1,
          "high": 1,
          "medium": 0,
          "critical": 0,
          "informational": 0
        }
      },
      "display_score": 83.0,
      "display_badge": "Caution"
    },
    {
      "scanner_name": "nerlo-behavioral",
      "scanner_version": "0.1.0",
      "score": 90.0,
      "scanner_badge": "Verified",
      "findings": [
        {
          "tool_name": "nerlo-behavioral",
          "severity": "medium",
          "category": "undisclosed-egress",
          "file_path": "/repo/scripts/build-rgaa-data.mjs",
          "line_number": 23,
          "rule_identifier": "opt.nerlo-rules.nerlo-hardcoded-external-egress",
          "title": "opt.nerlo-rules.nerlo-hardcoded-external-egress",
          "description": "Network request to a hardcoded external host/URL. Undisclosed egress in an MCP server is a common exfiltration channel \u2014 confirm it is expected.",
          "remediation": null
        },
        {
          "tool_name": "nerlo-behavioral",
          "severity": "medium",
          "category": "undisclosed-egress",
          "file_path": "/repo/scripts/build-rgaa-data.mjs",
          "line_number": 25,
          "rule_identifier": "opt.nerlo-rules.nerlo-hardcoded-external-egress",
          "title": "opt.nerlo-rules.nerlo-hardcoded-external-egress",
          "description": "Network request to a hardcoded external host/URL. Undisclosed egress in an MCP server is a common exfiltration channel \u2014 confirm it is expected.",
          "remediation": null
        }
      ],
      "execution_duration_seconds": 47.07693366301828,
      "status": "complete",
      "examined": {
        "unit": "files",
        "count": 4
      },
      "metadata": {
        "source": "nerlo-original",
        "source_url": "https://github.com/nerlo-ai/nerlo",
        "report_type": "nerlo-behavioral",
        "ruleset_path": "/opt/nerlo-rules/exfiltration.yaml",
        "ruleset_paths": [
          "/opt/nerlo-rules/exfiltration.yaml",
          "/opt/nerlo-rules/clipboard_exfiltration.yaml",
          "/opt/nerlo-rules/rce_endpoint.yaml",
          "/opt/nerlo-rules/taint_egress.yaml"
        ],
        "install_command": "pip install 'semgrep==1.97.0'",
        "severity_counts": {
          "low": 0,
          "high": 0,
          "medium": 2,
          "critical": 0,
          "informational": 0
        },
        "merged_invocation": true
      },
      "display_score": 90.0,
      "display_badge": "Verified"
    },
    {
      "scanner_name": "nerlo-install-instruction",
      "scanner_version": "0.1.0",
      "score": 100.0,
      "scanner_badge": "Verified",
      "findings": [],
      "execution_duration_seconds": 47.07727363301092,
      "status": "complete",
      "examined": {
        "unit": "files",
        "count": 1
      },
      "metadata": {
        "source": "nerlo-original",
        "source_url": "https://github.com/nerlo-ai/nerlo",
        "report_type": "nerlo-install-instruction",
        "ruleset_path": "/opt/nerlo-rules/install_instructions.yaml",
        "ruleset_paths": [
          "/opt/nerlo-rules/install_instructions.yaml",
          "/opt/nerlo-rules/cursor_rules.yaml"
        ],
        "install_command": "pip install 'semgrep==1.97.0'",
        "merged_invocation": true
      },
      "display_score": 100.0,
      "display_badge": "Verified"
    },
    {
      "scanner_name": "nerlo-multi-source",
      "scanner_version": "0.1.0",
      "score": 100.0,
      "scanner_badge": "Verified",
      "findings": [],
      "execution_duration_seconds": 33.32314221400884,
      "status": "complete",
      "examined": null,
      "metadata": {
        "source": "nerlo-original",
        "per_source": [
          {
            "badge": "Verified",
            "label": "npm@2.2.0",
            "score": 100.0,
            "version": "2.2.0",
            "identifier": "ara-rgaa-mcp",
            "provenance": "clean",
            "source_type": "npm",
            "artifact_type": "mcp_server",
            "finding_count": 0,
            "malware_status": "complete",
            "injected_rule_ids": []
          }
        ],
        "report_type": "nerlo-multi-source",
        "diverged_sources": [],
        "published_surfaces_scanned": 1
      },
      "display_score": 100.0,
      "display_badge": "Verified"
    },
    {
      "scanner_name": "trivy",
      "scanner_version": "0.71.0",
      "score": 100.0,
      "scanner_badge": "Verified",
      "findings": [],
      "execution_duration_seconds": 1.8365451929857954,
      "status": "complete",
      "examined": {
        "unit": "manifests",
        "count": 1
      },
      "metadata": {
        "source": "github-releases",
        "source_url": "https://github.com/aquasecurity/trivy/releases/tag/v0.71.0",
        "report_type": "filesystem-vulnerability",
        "install_command": "curl -sfL -o /tmp/trivy.deb https://github.com/aquasecurity/trivy/releases/download/v0.71.0/trivy_0.71.0_Linux-64bit.deb && echo '<sha256>  /tmp/trivy.deb' | sha256sum -c - && dpkg -i /tmp/trivy.deb",
        "manifests_scanned": [
          "package-lock.json"
        ]
      },
      "display_score": 100.0,
      "display_badge": "Verified"
    },
    {
      "scanner_name": "osv-scanner",
      "scanner_version": "2.3.8",
      "score": 98.0,
      "scanner_badge": "Verified",
      "findings": [
        {
          "tool_name": "osv-scanner",
          "severity": "low",
          "category": "npm",
          "file_path": "/repo/package-lock.json",
          "line_number": null,
          "rule_identifier": "GHSA-g7r4-m6w7-qqqr",
          "title": "GHSA-g7r4-m6w7-qqqr \u2014 npm esbuild@0.27.7",
          "description": "aliases: GHSA-g7r4-m6w7-qqqr | CVSS: 2.5",
          "remediation": null
        }
      ],
      "execution_duration_seconds": 23.84628618802526,
      "status": "complete",
      "examined": {
        "unit": "manifests",
        "count": 1
      },
      "metadata": {
        "source": "github-releases",
        "source_url": "https://github.com/google/osv-scanner/releases/tag/v2.3.8",
        "report_type": "osv-vulnerability",
        "ecosystems_seen": [
          "npm"
        ],
        "install_command": "curl -sfL -o /usr/local/bin/osv-scanner https://github.com/google/osv-scanner/releases/download/v2.3.8/osv-scanner_linux_amd64 && echo '<sha256>  /usr/local/bin/osv-scanner' | sha256sum -c - && chmod +x /usr/local/bin/osv-scanner",
        "severity_counts": {
          "low": 1,
          "high": 0,
          "medium": 0,
          "critical": 0,
          "informational": 0
        },
        "manifests_scanned": [
          "/repo/package-lock.json"
        ],
        "finding_id_aliases": {},
        "cross_scanner_correlation": {
          "only_osv": [
            "GHSA-g7r4-m6w7-qqqr"
          ],
          "only_trivy": [],
          "intersection_ids": []
        }
      },
      "display_score": 98.0,
      "display_badge": "Verified"
    },
    {
      "scanner_name": "trivy_image",
      "scanner_version": "0.71.0",
      "score": 100.0,
      "scanner_badge": "Verified",
      "findings": [],
      "execution_duration_seconds": 0.00011555998935364187,
      "status": "not_applicable",
      "examined": {
        "unit": "image_targets",
        "count": 0
      },
      "metadata": {
        "reason": "no OCI image acquired for this artifact"
      },
      "display_score": null,
      "display_badge": "unavailable"
    }
  ],
  "threat_model": "Threat model synthesis has not yet run for this scan. This section is generated by the registry's LLM pipeline (Req 22.3) and will appear in the next regeneration of this report.",
  "audit_chain": {
    "scan_job_id": "9460fd88-f3a9-4013-b9bc-cec6e977e6ab",
    "scan_completed_at": "2026-07-29T13:13:15.044356+00:00",
    "scanner_versions": {
      "cisco-skill-scanner": "2.0.11",
      "agent-audit-kit": "0.3.26",
      "nerlo-behavioral": "0.1.0",
      "nerlo-install-instruction": "0.1.0",
      "nerlo-multi-source": "0.1.0",
      "trivy": "0.71.0",
      "osv-scanner": "2.3.8",
      "trivy_image": "0.71.0"
    },
    "scanner_base_image": "us-central1-docker.pkg.dev/nerlo-vsk-prod/nerlo/scanner-base@sha256:18193e789f73339d5d3d9d784011bdb7c9af4b815925f756cc1dc842ecb3fe2d",
    "ai_decision_log_ids": [
      "cf5cee03-092c-455d-8ef4-4aa4ed39d67a",
      "0f119f59-a441-4c2f-9484-7828953ba17c"
    ],
    "self_attestation_url": "http://localhost:8000/api/v1/registry/self-attestation"
  },
  "appendix": {
    "raw_scanner_reports": [
      {
        "scanner_name": "cisco-skill-scanner",
        "scanner_version": "2.0.11",
        "score": 97.0,
        "scanner_badge": "Verified",
        "findings": [
          {
            "tool_name": "cisco-skill-scanner",
            "severity": "informational",
            "category": "policy_violation",
            "file_path": "/repo",
            "line_number": null,
            "rule_identifier": "LOW_ANALYZABILITY",
            "title": "Critically low analyzability score",
            "description": "[mcp_server policy: capability-matches-purpose class; severity high -> informational] Only 60% of skill content could be analyzed. 4 of 12 files are opaque to the scanner. The safety assessment has low confidence.",
            "remediation": "Replace opaque files (binaries, encrypted content) with inspectable source code to improve scan confidence."
          },
          {
            "tool_name": "cisco-skill-scanner",
            "severity": "informational",
            "category": "social_engineering",
            "file_path": "/repo/SKILL.md",
            "line_number": null,
            "rule_identifier": "SOCIAL_ENG_VAGUE_DESCRIPTION",
            "title": "Vague skill description",
            "description": "[mcp_server policy: capability-matches-purpose class; severity low -> informational] Skill description is too short (16 chars). Provide detailed explanation.",
            "remediation": "Provide a clear, detailed description of what the skill does and when to use it"
          },
          {
            "tool_name": "cisco-skill-scanner",
            "severity": "informational",
            "category": "policy_violation",
            "file_path": "/repo/SKILL.md",
            "line_number": null,
            "rule_identifier": "MANIFEST_MISSING_LICENSE",
            "title": "Skill does not specify a license",
            "description": "Skill manifest does not include a 'license' field. Specifying a license helps users understand usage terms.",
            "remediation": "Add 'license' field to SKILL.md frontmatter (e.g., MIT, Apache-2.0)"
          },
          {
            "tool_name": "cisco-skill-scanner",
            "severity": "informational",
            "category": "data_exfiltration",
            "file_path": "/repo/scripts/build-rgaa-data.mjs",
            "line_number": 23,
            "rule_identifier": "DATA_EXFIL_JS_NETWORK",
            "title": "Outbound network request primitives in JavaScript/TypeScript",
            "description": "[mcp_server policy: capability-matches-purpose class; severity medium -> informational] Pattern detected: fetch(",
            "remediation": "Ensure network operations are necessary and document allowed destinations"
          },
          {
            "tool_name": "cisco-skill-scanner",
            "severity": "informational",
            "category": "data_exfiltration",
            "file_path": "/repo/scripts/build-rgaa-data.mjs",
            "line_number": 25,
            "rule_identifier": "DATA_EXFIL_JS_NETWORK",
            "title": "Outbound network request primitives in JavaScript/TypeScript",
            "description": "[mcp_server policy: capability-matches-purpose class; severity medium -> informational] Pattern detected: fetch(",
            "remediation": "Ensure network operations are necessary and document allowed destinations"
          },
          {
            "tool_name": "cisco-skill-scanner",
            "severity": "informational",
            "category": "data_exfiltration",
            "file_path": "/repo/src/ara-client.ts",
            "line_number": 55,
            "rule_identifier": "DATA_EXFIL_JS_NETWORK",
            "title": "Outbound network request primitives in JavaScript/TypeScript",
            "description": "[mcp_server policy: capability-matches-purpose class; severity medium -> informational] Pattern detected: fetch(",
            "remediation": "Ensure network operations are necessary and document allowed destinations"
          }
        ],
        "execution_duration_seconds": 36.59450880502118,
        "status": "complete",
        "examined": {
          "unit": "skills",
          "count": 1
        },
        "metadata": {
          "source": "pypi",
          "source_url": "https://pypi.org/project/cisco-ai-skill-scanner/2.0.11/",
          "report_type": "cisco-skill-sast",
          "analyzers_used": [
            "bytecode",
            "pipeline",
            "static_analyzer"
          ],
          "skills_scanned": [
            "repo"
          ],
          "install_command": "pip install --require-hashes -r docker/scanner-base/cisco-skill-scanner/requirements.txt",
          "severity_counts": {
            "low": 0,
            "high": 0,
            "medium": 0,
            "critical": 0,
            "informational": 6
          },
          "artifact_type_policy": "mcp_server",
          "downweighted_findings": 5
        },
        "display_score": 97.0,
        "display_badge": "Verified"
      },
      {
        "scanner_name": "agent-audit-kit",
        "scanner_version": "0.3.26",
        "score": 83.0,
        "scanner_badge": "Caution",
        "findings": [
          {
            "tool_name": "agent-audit-kit",
            "severity": "high",
            "category": "legal-compliance",
            "file_path": "package.json",
            "line_number": 6,
            "rule_identifier": "AAK-LEGAL-001",
            "title": "Copyleft license (AGPL/SSPL) in dependency",
            "description": "A dependency uses a copyleft license (AGPL, SSPL) that may impose obligations on your project.",
            "remediation": "Review license obligations. Consider replacing with permissively-licensed alternatives."
          },
          {
            "tool_name": "agent-audit-kit",
            "severity": "low",
            "category": "supply-chain",
            "file_path": "SECURITY.md",
            "line_number": null,
            "rule_identifier": "AAK-SEC-MD-001",
            "title": "MCP server repo missing SECURITY.md or security_contact",
            "description": "A repository whose name or pyproject keywords declare it as an MCP server ships without a top-level SECURITY.md AND without a `security_contact` entry in marketplace.json / pyproject.toml / package.json. Anthropic's April 2026 SECURITY.md guidance makes this the baseline expectation so researchers have a channel.",
            "remediation": "Add SECURITY.md at the repo root with a disclosure email and response SLA; OR add `security_contact` to the project manifest."
          }
        ],
        "execution_duration_seconds": 7.237475865986198,
        "status": "complete",
        "examined": {
          "unit": "files",
          "count": 11
        },
        "metadata": {
          "source": "pypi",
          "source_url": "https://pypi.org/project/agent-audit-kit/0.3.26/",
          "report_type": "agent-audit-kit-sast",
          "install_command": "pip install --require-hashes -r docker/scanner-base/agent-audit-kit/requirements.txt",
          "rules_evaluated": 211,
          "severity_counts": {
            "low": 1,
            "high": 1,
            "medium": 0,
            "critical": 0,
            "informational": 0
          }
        },
        "display_score": 83.0,
        "display_badge": "Caution"
      },
      {
        "scanner_name": "nerlo-behavioral",
        "scanner_version": "0.1.0",
        "score": 90.0,
        "scanner_badge": "Verified",
        "findings": [
          {
            "tool_name": "nerlo-behavioral",
            "severity": "medium",
            "category": "undisclosed-egress",
            "file_path": "/repo/scripts/build-rgaa-data.mjs",
            "line_number": 23,
            "rule_identifier": "opt.nerlo-rules.nerlo-hardcoded-external-egress",
            "title": "opt.nerlo-rules.nerlo-hardcoded-external-egress",
            "description": "Network request to a hardcoded external host/URL. Undisclosed egress in an MCP server is a common exfiltration channel \u2014 confirm it is expected.",
            "remediation": null
          },
          {
            "tool_name": "nerlo-behavioral",
            "severity": "medium",
            "category": "undisclosed-egress",
            "file_path": "/repo/scripts/build-rgaa-data.mjs",
            "line_number": 25,
            "rule_identifier": "opt.nerlo-rules.nerlo-hardcoded-external-egress",
            "title": "opt.nerlo-rules.nerlo-hardcoded-external-egress",
            "description": "Network request to a hardcoded external host/URL. Undisclosed egress in an MCP server is a common exfiltration channel \u2014 confirm it is expected.",
            "remediation": null
          }
        ],
        "execution_duration_seconds": 47.07693366301828,
        "status": "complete",
        "examined": {
          "unit": "files",
          "count": 4
        },
        "metadata": {
          "source": "nerlo-original",
          "source_url": "https://github.com/nerlo-ai/nerlo",
          "report_type": "nerlo-behavioral",
          "ruleset_path": "/opt/nerlo-rules/exfiltration.yaml",
          "ruleset_paths": [
            "/opt/nerlo-rules/exfiltration.yaml",
            "/opt/nerlo-rules/clipboard_exfiltration.yaml",
            "/opt/nerlo-rules/rce_endpoint.yaml",
            "/opt/nerlo-rules/taint_egress.yaml"
          ],
          "install_command": "pip install 'semgrep==1.97.0'",
          "severity_counts": {
            "low": 0,
            "high": 0,
            "medium": 2,
            "critical": 0,
            "informational": 0
          },
          "merged_invocation": true
        },
        "display_score": 90.0,
        "display_badge": "Verified"
      },
      {
        "scanner_name": "nerlo-install-instruction",
        "scanner_version": "0.1.0",
        "score": 100.0,
        "scanner_badge": "Verified",
        "findings": [],
        "execution_duration_seconds": 47.07727363301092,
        "status": "complete",
        "examined": {
          "unit": "files",
          "count": 1
        },
        "metadata": {
          "source": "nerlo-original",
          "source_url": "https://github.com/nerlo-ai/nerlo",
          "report_type": "nerlo-install-instruction",
          "ruleset_path": "/opt/nerlo-rules/install_instructions.yaml",
          "ruleset_paths": [
            "/opt/nerlo-rules/install_instructions.yaml",
            "/opt/nerlo-rules/cursor_rules.yaml"
          ],
          "install_command": "pip install 'semgrep==1.97.0'",
          "merged_invocation": true
        },
        "display_score": 100.0,
        "display_badge": "Verified"
      },
      {
        "scanner_name": "nerlo-multi-source",
        "scanner_version": "0.1.0",
        "score": 100.0,
        "scanner_badge": "Verified",
        "findings": [],
        "execution_duration_seconds": 33.32314221400884,
        "status": "complete",
        "examined": null,
        "metadata": {
          "source": "nerlo-original",
          "per_source": [
            {
              "badge": "Verified",
              "label": "npm@2.2.0",
              "score": 100.0,
              "version": "2.2.0",
              "identifier": "ara-rgaa-mcp",
              "provenance": "clean",
              "source_type": "npm",
              "artifact_type": "mcp_server",
              "finding_count": 0,
              "malware_status": "complete",
              "injected_rule_ids": []
            }
          ],
          "report_type": "nerlo-multi-source",
          "diverged_sources": [],
          "published_surfaces_scanned": 1
        },
        "display_score": 100.0,
        "display_badge": "Verified"
      },
      {
        "scanner_name": "trivy",
        "scanner_version": "0.71.0",
        "score": 100.0,
        "scanner_badge": "Verified",
        "findings": [],
        "execution_duration_seconds": 1.8365451929857954,
        "status": "complete",
        "examined": {
          "unit": "manifests",
          "count": 1
        },
        "metadata": {
          "source": "github-releases",
          "source_url": "https://github.com/aquasecurity/trivy/releases/tag/v0.71.0",
          "report_type": "filesystem-vulnerability",
          "install_command": "curl -sfL -o /tmp/trivy.deb https://github.com/aquasecurity/trivy/releases/download/v0.71.0/trivy_0.71.0_Linux-64bit.deb && echo '<sha256>  /tmp/trivy.deb' | sha256sum -c - && dpkg -i /tmp/trivy.deb",
          "manifests_scanned": [
            "package-lock.json"
          ]
        },
        "display_score": 100.0,
        "display_badge": "Verified"
      },
      {
        "scanner_name": "osv-scanner",
        "scanner_version": "2.3.8",
        "score": 98.0,
        "scanner_badge": "Verified",
        "findings": [
          {
            "tool_name": "osv-scanner",
            "severity": "low",
            "category": "npm",
            "file_path": "/repo/package-lock.json",
            "line_number": null,
            "rule_identifier": "GHSA-g7r4-m6w7-qqqr",
            "title": "GHSA-g7r4-m6w7-qqqr \u2014 npm esbuild@0.27.7",
            "description": "aliases: GHSA-g7r4-m6w7-qqqr | CVSS: 2.5",
            "remediation": null
          }
        ],
        "execution_duration_seconds": 23.84628618802526,
        "status": "complete",
        "examined": {
          "unit": "manifests",
          "count": 1
        },
        "metadata": {
          "source": "github-releases",
          "source_url": "https://github.com/google/osv-scanner/releases/tag/v2.3.8",
          "report_type": "osv-vulnerability",
          "ecosystems_seen": [
            "npm"
          ],
          "install_command": "curl -sfL -o /usr/local/bin/osv-scanner https://github.com/google/osv-scanner/releases/download/v2.3.8/osv-scanner_linux_amd64 && echo '<sha256>  /usr/local/bin/osv-scanner' | sha256sum -c - && chmod +x /usr/local/bin/osv-scanner",
          "severity_counts": {
            "low": 1,
            "high": 0,
            "medium": 0,
            "critical": 0,
            "informational": 0
          },
          "manifests_scanned": [
            "/repo/package-lock.json"
          ],
          "finding_id_aliases": {},
          "cross_scanner_correlation": {
            "only_osv": [
              "GHSA-g7r4-m6w7-qqqr"
            ],
            "only_trivy": [],
            "intersection_ids": []
          }
        },
        "display_score": 98.0,
        "display_badge": "Verified"
      },
      {
        "scanner_name": "trivy_image",
        "scanner_version": "0.71.0",
        "score": 100.0,
        "scanner_badge": "Verified",
        "findings": [],
        "execution_duration_seconds": 0.00011555998935364187,
        "status": "not_applicable",
        "examined": {
          "unit": "image_targets",
          "count": 0
        },
        "metadata": {
          "reason": "no OCI image acquired for this artifact"
        },
        "display_score": null,
        "display_badge": "unavailable"
      }
    ]
  },
  "report": {
    "report_id": "fcbad2e2-a8ff-48d5-b89e-c824cfbcfacb",
    "format": "json",
    "generated_at": "2026-07-30T09:36:47.092609+00:00",
    "scanner_filter": null,
    "signature": null
  }
}