Skip to main content
Glama

Security Scan

scan
Read-onlyIdempotent

Scan a repo, config, image, SBOM, or package to generate an AI-BOM with CVEs, exposed credentials, blast radius, and remediation guidance. Static, read-only analysis.

Instructions

Run a full AI supply chain security scan and return an AI-BOM.

    Point it at a target with one of:
      • repo_url     — a public git repo URL (cloned + scanned, no checkout)
      • config_path  — a local project / MCP-config directory
      • image        — a Docker image
      • sbom_path    — an existing CycloneDX/SPDX SBOM
      • package      — a single package or MCP launch command (pair it with
                       ``ecosystem`` when the spec names no launcher)
    With none of these, it auto-discovers local MCP clients (Claude Desktop,
    Cursor, Windsurf, VS Code Copilot, OpenClaw, etc.).

    It extracts package dependencies, queries OSV.dev for CVEs, assesses
    config security (credential exposure, tool access), computes blast
    radius, and returns structured results. Scanning is fully static and
    read-only — repository and image contents are parsed, never executed.

    Returns:
        JSON with the complete AI-BOM report including agents, packages,
        vulnerabilities, blast radius, and remediation guidance.
    

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
imageNoDocker image to scan (e.g. 'nginx:1.25', 'ghcr.io/org/app:v1').
enrichNoEnable NVD CVSS, EPSS probability, and CISA KEV enrichment.
policyNoPolicy object to evaluate alongside scan results, e.g. {"rules": [{"id": "no-critical", "severity_gte": "critical", "action": "fail"}]}.
offlineNoUse the local vulnerability DB only and skip registry, OSV, GHSA, and NVIDIA network lookups.
packageNoDirect package or MCP launch command to scan, e.g. 'npx @modelcontextprotocol/server-filesystem@2025.1.14' or '@modelcontextprotocol/server-filesystem'. A bare 'name@version' spec is assumed to be npm — pass ``ecosystem`` for anything else.
repo_urlNoPublic git repository URL to clone and scan, e.g. 'https://github.com/org/repo'. Maps the repo's dependencies, project structure, secrets, IaC, and AI/MCP usage into an AI-BOM. Static and read-only: the repository is shallow-cloned into a temporary directory, scanned without ever executing its code, then deleted. The fastest way to point this tool at a target — no local checkout required.
ecosystemNoEcosystem of ``package`` when the spec does not name a launcher: 'npm', 'pypi', 'go', 'cargo', 'maven', 'nuget', 'rubygems', 'composer', 'swift', 'pub', 'hex', 'conda', 'deb', 'apk', or 'rpm'. Omitted, the ecosystem is inferred from the spec (PEP 440 specifiers such as 'flask==0.12.2' are PyPI) and any assumption is reported in the result warnings.
sbom_pathNoPath to existing CycloneDX or SPDX JSON SBOM file to ingest.
scorecardNoEnrich packages with OpenSSF Scorecard scores (requires resolvable GitHub repos).
db_sourcesNoComma-separated DB sources to sync before scanning (e.g. 'nvd,ghsa,osv,epss,kev').
transitiveNoResolve transitive dependencies for npx/uvx packages.
config_pathNoLocal directory to scan — a project root or an MCP client config directory. Auto-discovers installed MCP clients if omitted unless no_discover=true. Mutually exclusive with repo_url.
no_discoverNoDisable ambient host MCP-client discovery. Explicit repo/config, image, SBOM, and package targets are still scanned; use this for deterministic CI.
fail_severityNoReturn failure status if vulns at this severity or higher: critical, high, medium, low.
output_formatNoOutput format: 'json' (default), 'sarif', 'cyclonedx', 'spdx', 'junit', 'csv', or 'markdown'.json
warn_severityNoReturn warning status (gate_status=warn, exit 0) when vulns at this severity or higher exist. Use with fail_severity for two-tier CI gates, e.g. warn_severity='medium', fail_severity='critical'.
auto_update_dbNoExplicitly refresh the local vuln DB when older than the daily freshness target before scanning.
verify_integrityNoVerify package SHA-256/SRI hashes and SLSA provenance against registries.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
resultYes

Schema Changelog

Changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. Changed2 schema fields changedv0.102.0
    • changedInput schema / properties / config_path / description
      Previous value: -"Local directory to scan — a project root or an MCP client config directory. Auto-discovers all installed MCP clients if omitted. Mutually exclusive with repo_url."New value: +"Local directory to scan — a project root or an MCP client config directory. Auto-discovers installed MCP clients if omitted unless no_discover=true. Mutually exclusive with repo_url."
    • addedInput schema / properties / no_discover
      Added value: +{
      +  "default": false,
      +  "description": "Disable ambient host MCP-client discovery. Explicit repo/config, image, SBOM, and package targets are still scanned; use this for deterministic CI.",
      +  "title": "No Discover",
      +  "type": "boolean"
      +}
  2. Changed2 schema fields changedv0.99.0
    • addedInput schema / properties / ecosystem
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Ecosystem of ``package`` when the spec does not name a launcher: 'npm', 'pypi', 'go', 'cargo', 'maven', 'nuget', 'rubygems', 'composer', 'swift', 'pub', 'hex', 'conda', 'deb', 'apk', or 'rpm'. Omitted, the ecosystem is inferred from the spec (PEP 440 specifiers such as 'flask==0.12.2' are PyPI) and any assumption is reported in the result warnings.",
      +  "title": "Ecosystem"
      +}
    • changedInput schema / properties / package / description
      Previous value: -"Direct package or MCP launch command to scan, e.g. 'npx @modelcontextprotocol/server-filesystem@2025.1.14' or '@modelcontextprotocol/server-filesystem'."New value: +"Direct package or MCP launch command to scan, e.g. 'npx @modelcontextprotocol/server-filesystem@2025.1.14' or '@modelcontextprotocol/server-filesystem'. A bare 'name@version' spec is assumed to be npm — pass ``ecosystem`` for anything else."
  3. Changed2 schema fields changedv0.89.2
    • changedInput schema / properties / config_path / description
      Previous value: -"Path to MCP client config directory. Auto-discovers all if omitted."New value: +"Local directory to scan — a project root or an MCP client config directory. Auto-discovers all installed MCP clients if omitted. Mutually exclusive with repo_url."
    • addedInput schema / properties / repo_url
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Public git repository URL to clone and scan, e.g. 'https://github.com/org/repo'. Maps the repo's dependencies, project structure, secrets, IaC, and AI/MCP usage into an AI-BOM. Static and read-only: the repository is shallow-cloned into a temporary directory, scanned without ever executing its code, then deleted. The fastest way to point this tool at a target — no local checkout required.",
      +  "title": "Repo Url"
      +}
  4. Addedv0.88.4
  5. Removedv0.88.1
  6. Addedv0.87.1
  7. Removedv0.87.0
  8. Changed1 schema field changedv0.86.5
    • changedInput schema / properties / auto_update_db / description
      Previous value: -"Explicitly refresh the local vuln DB if stale (>7 days) before scanning."New value: +"Explicitly refresh the local vuln DB when older than the daily freshness target before scanning."
  9. Changed1 schema field changedv0.85.0
    • addedInput schema / additionalProperties
      Added value: +false
  10. Addedv0.84.5

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations (readOnlyHint, destructiveHint), the description adds crucial behavioral detail: 'Scanning is fully static and read-only — repository and image contents are parsed, never executed.' It also discloses that repos are shallow-cloned into a temporary directory, scanned, and deleted. This goes well beyond the annotations and reassures an agent about side effects.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with a clear opening line, bulleted target options, a compact summary of the scan process, and a Returns section. Every sentence earns its place; there is no filler. The front-loaded purpose and scannable list make it easy for an agent to parse quickly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with 18 parameters and a rich output schema, the description is remarkably complete. It covers all target types, the scanning methodology, the static/read-only safety guarantee, and the return format. The existence of an output schema means the description need not detail the JSON structure. The description leaves no critical gap for an agent to call the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema already documents each parameter with rich descriptions. The tool description adds value by explaining how parameters interact (e.g., package requires ecosystem when no launcher is named) and the auto-discovery behavior when no target is given. This contextual information helps an agent choose parameters correctly without re-reading the schema, though it doesn't describe individual parameters' formats or defaults beyond what the schema provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'Run a full AI supply chain security scan and return an AI-BOM.' It then enumerates the distinct target types (repo_url, config_path, image, sbom_path, package) and outlines what the scan does (extract dependencies, query OSV, assess config, compute blast radius). This clearly distinguishes it from siblings like skill_scan or vector_db_scan, which target narrower scopes.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit guidance on how to select a target: 'Point it at a target with one of...' and explains the auto-discovery fallback when none is provided. It also clarifies the pairings of package with ecosystem and the mutual exclusivity of config_path and repo_url. However, it does not explicitly name alternative tools or state when not to use this tool versus siblings, leaving some inference to the agent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/msaad00/agent-bom'

If you have feedback or need assistance with the MCP directory API, please join our Discord server