{
  "markdown": "<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/msaad00/agent-bom/main/docs/images/social-preview.svg\" alt=\"agent-bom — Discover. Scan. Correlate. Act. Security evidence across repositories, software supply chains, AI and MCP, cloud, identity, and data.\" width=\"960\" />\n</p>\n\n<p align=\"center\"><sub>Supported backends vary by capability. <a href=\"docs/INTEGRATIONS.md\">Capability matrix.</a></sub></p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/msaad00/agent-bom/actions/workflows/ci.yml\"><img src=\"https://img.shields.io/github/actions/workflow/status/msaad00/agent-bom/ci.yml?branch=main&style=flat&label=Build\" alt=\"Build\"></a>\n  <a href=\"https://pypi.org/project/agent-bom/\"><img src=\"https://img.shields.io/pypi/v/agent-bom?style=flat&label=PyPI&cacheSeconds=60\" alt=\"PyPI\"></a>\n  <a href=\"https://pypi.org/project/agent-bom/\"><img src=\"https://img.shields.io/badge/Python-3.11%E2%80%933.14-blue?style=flat\" alt=\"Python 3.11 through 3.14\"></a>\n  <a href=\"https://hub.docker.com/r/agentbom/agent-bom\"><img src=\"https://img.shields.io/docker/pulls/agentbom/agent-bom?style=flat&label=Docker%20pulls\" alt=\"Docker pulls\"></a>\n  <a href=\"LICENSE\"><img src=\"https://img.shields.io/badge/License-Apache%202.0-blue?style=flat\" alt=\"Apache-2.0 license\"></a>\n  <a href=\"https://securityscorecards.dev/viewer/?uri=github.com/msaad00/agent-bom\"><img src=\"https://img.shields.io/ossf-scorecard/github.com/msaad00/agent-bom?style=flat&label=OpenSSF%20scorecard\" alt=\"OpenSSF Scorecard\"></a>\n  <a href=\"https://glama.ai/mcp/servers/msaad00/agent-bom\"><img src=\"https://img.shields.io/badge/MCP-Glama-7c3aed?style=flat\" alt=\"Glama MCP server\"></a>\n  <a href=\"https://smithery.ai/servers/agent-bom/agent-bom\"><img src=\"https://img.shields.io/badge/MCP-Smithery-1f6feb?style=flat\" alt=\"Smithery MCP server\"></a>\n</p>\n<!-- mcp-name: io.github.msaad00/agent-bom -->\n\n<h1 align=\"center\">Turn scattered infrastructure evidence into prioritized, correlated, and verifiable action</h1>\n\n<p align=\"center\"><b>Open security scanner and self-hosted control plane for AI, MCP, and cloud infrastructure.</b></p>\n\n<p align=\"center\">\n  <a href=\"#quick-start\"><b>Quick start</b></a> ·\n  <a href=\"https://msaad00.github.io/agent-bom/\">Docs</a>\n</p>\n\n## From evidence source to verified action\n\nSecurity teams rarely lack scanners. They lack one trustworthy view of what was\nscanned, what was discovered, which findings are actually connected to critical\nsystems, who owns the fix, and whether the fix held.\n\n`agent-bom` closes that loop with two honest entry paths:\n\n| Start from | First action | What produces inventory |\n|---|---|---|\n| A repository, image, SBOM, workstation, or MCP config | Run a local or CI scan—no connection required | The scanner reads the target and emits inventory, findings, provenance, and graph evidence together |\n| AWS, Azure, GCP, Snowflake, Kubernetes, or another managed source | Add a read-only connection in the self-hosted control plane, then run or schedule a scan | The connection defines scope and credentials; the scan collects the source and creates the inventory snapshot |\n\nBoth paths converge after collection: normalize evidence into the same Finding +\nUnifiedGraph contracts, correlate reachable risk, assign an owner and SLA, then\nre-scan to verify the result. Inventory is always the output of a named target or\nconnected source—never unexplained preloaded data.\n\n<p align=\"center\">\n  <picture>\n    <source media=\"(prefers-color-scheme: dark)\" srcset=\"docs/images/workflow-dark.svg\">\n    <source media=\"(prefers-color-scheme: light)\" srcset=\"docs/images/workflow-light.svg\">\n    <img src=\"docs/images/workflow-light.svg\" alt=\"Evidence sources flow through read-only collection and scanning, normalization, correlation, ownership, remediation, verification, and export or runtime policy\" width=\"920\" />\n  </picture>\n</p>\n\n**The product promise:** start with one useful artifact today; keep the same\nevidence model as you add CI, connected sources, history, assignments,\ncompliance exports, and runtime enforcement in your own environment.\n\n[Quick start](#quick-start) · [Evidence workflow](docs/HOW_IT_WORKS.md) · [Integration capability matrix](docs/INTEGRATIONS.md) · [Measured matcher proof](docs/CVE_MATCHING_ACCURACY.json) · [Control-plane architecture](docs/ARCHITECTURE.md)\n\n### Product proof: independent evidence, one verifiable path\n\nThe views below come from the committed **Reference evidence lab — modeled\nlocal infrastructure**. The credential-free run uses the real repository,\nCycloneDX, Kubernetes IaC, and MCP parsers plus the bundled advisory scanner for\n`pillow@9.0.0` / `CVE-2023-4863`, then correlates exact OCI digest, Kubernetes\nUID, MCP tool, workload identity, and live local gateway receipts. It is not\ncustomer evidence or a live-cloud claim.\n\nInvestigation loads the latest completed correlation automatically and shows\nthe source-to-path journey first. Custom snapshot selection remains available\nas an explicit advanced workflow with the freshness policy visible.\n\n<p align=\"center\">\n  <a href=\"docs/images/correlation-receipts-live.png\"><img src=\"docs/images/correlation-receipts-live.png\" alt=\"Reference evidence lab correlation outcome showing the affected service and data asset, CVE-2023-4863, runtime evidence, and remediation action\" width=\"920\" /></a>\n</p>\n\nThe resulting path is confirmed only because every directed hop is traversable\nand provenance-backed: exposed service → workload → digest-pinned container →\n`pillow@9.0.0` / `CVE-2023-4863` → MCP capability → workload identity →\nmodeled sensitive object store. The same lab records an observed gateway call\nand a separate strict opt-in block before the remediation handoff.\n\n<p align=\"center\">\n  <a href=\"docs/images/correlation-path-live.png\"><img src=\"docs/images/correlation-path-live.png\" alt=\"Reference evidence lab Investigation path for CVE-2023-4863 with exact container digest, per-hop source provenance, freshness, runtime observation and strict block proof, and remediation handoff\" width=\"920\" /></a>\n</p>\n\n[Regenerate the reference lab](examples/reference-evidence-lab/README.md) · [Open the full product gallery](docs/GALLERY.md) · [See the capture protocol](docs/CAPTURE.md)\n\n## Value by role\n\n| Role | Start here | Primary outcome |\n|---|---|---|\n| Developer / AI engineer | `agent-bom scan .` | See dependencies, secrets, IaC, agents, MCP, and whether Click, Flask, or FastAPI entry points can reach vulnerable packages before shipping |\n| AppSec / product security | `agent-bom agents --gha . --offline` | Inventory remote actions and reusable workflows with their refs, source provenance, and CI-hardening findings |\n| Cloud security | Add a read-only connection, then run a scan | Build scoped cloud, identity, and posture inventory with explicit coverage and provenance |\n| Platform / DevOps | `pip install 'agent-bom[ui]' && AGENT_BOM_NO_AUTH_ROLE=analyst agent-bom serve --persist ~/.agent-bom/control-plane.db` | Schedule scans, centralize evidence, assign owners and SLAs, and verify remediation |\n| GRC / audit | `agent-bom report compliance-narrative scan.json` | Export mapped evidence while preserving unavailable, partial, and not-assessed states |\n| CISO / engineering leader | Open **Architecture** in the self-hosted graph | Compare observed **Current** state with modeled **Proposed** and **Difference** views; proposals remain labeled as not observed or deployed |\n\nSecurity engineering and GRC remain separate workflows: findings and\nreachability are not presented as audit certification. See\n[product boundaries](docs/PRODUCT_BOUNDARIES.md). GitHub Actions collection and\ncredential requirements are documented in [permissions](docs/PERMISSIONS.md);\nscenario truth boundaries are defined by the [graph contract](docs/graph/CONTRACT.md).\n\n## Quick start\n\nChoose the smallest path that proves value. No account or control plane is\nrequired for repository, image, SBOM, workstation, or MCP configuration scans.\n\n### Path A — scan now, no connection\n\nThe offline sample completes without downloading an advisory database and shows\nthe inventory, finding, reachable path, and remediation output shape.\n\n```bash\npip install agent-bom\nagent-bom scan --demo --offline\n```\n\nThe sample intentionally contains a known-malicious package, so exit status `1` is expected\nand the printed report is complete. Scan a repository next:\n\n```bash\nagent-bom scan .\n```\n\nThe repository scan shows inventory, findings, and reachable impact.\n`agent-bom scan .` and `agent-bom scan -p .` are the same command; `PATH` is an\nalias for `--project`.\n\n### Path B — connect a source, then scan\n\nUse this path when the source is an account or platform rather than a local\ntarget. Start the customer-controlled control plane, open **Connections**, add\nthe provider's read-only grant, and run the first scan. The browser flow\ndefaults to an explicit first scan after verification; scheduled scans are an\nexplicit operator opt-in.\n\n```bash\npip install 'agent-bom[ui]'\nAGENT_BOM_NO_AUTH_ROLE=analyst agent-bom serve --persist ~/.agent-bom/control-plane.db\n```\n\nThe explicit role applies to the generated loopback API key and browser sessions.\n`analyst` can run scans but cannot manage API keys. With no explicit role, the\nlocal bootstrap retains its admin default; non-loopback listeners still require\nconfigured authentication. Restart after changing the bootstrap role.\n\n\nThe explicit SQLite path keeps scan jobs, findings, compliance history, and\ngraph inventory available together after a restart. Omit `--persist` only for\nan intentionally ephemeral process. The explicit local `analyst` role permits\nthis loopback operator to run scans; the server's default anonymous role remains\nread-only.\n\nFor headless onboarding, `agent-bom connect <provider>` prints the exact grant,\ncredential boundary, verification step, and next scan command. The\n[cloud connection guide](docs/CLOUD_CONNECT.md) documents AWS, Azure, GCP, and\nSnowflake, including organization scope and scheduler behavior.\n\nNeed a disconnected scan? Seed the smallest package-advisory database first:\n\n```bash\nagent-bom db update --osv-ecosystem PyPI\nagent-bom scan . --offline\n```\n\nIf that database is missing or unreadable, the scan writes a partial artifact\nwhen `-o` is set and exits `1`; CI therefore cannot mistake unavailable\nadvisory coverage for a clean scan.\n\nOn a fresh database, that command covers only the selected ecosystem; packages\nfrom other ecosystems remain explicit offline coverage gaps. Repeat\n`--osv-ecosystem` for a polyglot repository, or use\n`agent-bom db update --source osv` for OSV's all-ecosystems archive. The full\narchive can exceed 1 GB, may take several minutes, and shows live progress with\nthe exact total when the server supplies it. Run the broader\n`agent-bom db update` when you also need distro, exploit-probability, and\nknown-exploited-vulnerability feeds.\n\n**A non-zero exit is a verdict, not a crash.** `scan` exits `0` when nothing\nmatched a gate, and `1` when one did — a `--fail-on-*` threshold you set, a\nknown-malicious package, or a scan that did not complete. The report is printed\nin full either way, and the last line names the gate that matched. Full\n[exit-code contract](site-docs/reference/exit-codes.md).\n\nSave an artifact with `agent-bom scan . -f sarif -o findings.sarif`, or follow\nthe [first-run guide](docs/FIRST_RUN.md) for formats and CI use.\n\n### Daily developer loop\n\nTry the scanner without installing it, then check a package before adding it:\n\n```bash\nuvx agent-bom scan .\nuvx agent-bom check requests@2.33.0 --ecosystem pypi\n```\n\n`check` returns an allow/unsafe/incomplete pre-install verdict; `scan` covers the\nrepository plus discovered AI/MCP configuration. To make both dependency and\nsecret gates automatic for a team, pin the shipped consumer hooks:\n\n```yaml\nrepos:\n  - repo: https://github.com/msaad00/agent-bom\n    rev: v0.103.2\n    hooks:\n      - id: agent-bom-secrets\n      - id: agent-bom-scan\n```\n\nRun `pre-commit install` once. The hooks install agent-bom into their own\nisolated environment, so contributors do not need a separate global install.\n[Hook behavior and CI examples](docs/DEPLOYMENT.md#pre-commit-hook).\n\n<details>\n<summary><b>Expansion paths — pick one only after the front door works</b></summary>\n\n| You want to | Go to |\n|---|---|\n| Scan your repository | `agent-bom scan .` |\n| A dashboard on your laptop | [Self-host](#self-host) |\n| A shared deployment (Docker, Helm, EKS, Snowflake) | [Self-host](#self-host) table |\n| Gate a pull request | [first-run guide §5](docs/FIRST_RUN.md#5-gate-ci-on-the-result) |\n| Give an AI agent the tools | `agent-bom mcp server` — [MCP server](docs/MCP_SERVER.md) |\n| Connect a cloud account | `agent-bom connect aws --emit --out agent-bom-aws-readonly.json` — [cloud connections](docs/CLOUD_CONNECT.md) |\n\n</details>\n\n<details>\n<summary><b>Try without a repository</b></summary>\n\nUse the curated, explicitly synthetic sample when you only want to inspect the\noutput shape:\n\n```bash\nagent-bom scan --demo --offline\n```\n\nThe sample intentionally contains a known-malicious package, which fails closed.\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/msaad00/agent-bom/main/docs/images/demo-latest.gif\" alt=\"Synthetic agent-bom console scan showing inventory, findings, and remediation\" width=\"820\" />\n</p>\n\n</details>\n\n## Self-host\n\nThe control plane is the growth path, not a prerequisite. Use it when one-off\nartifacts need to become a durable team workflow: registered sources, scheduled\nscans, history, inventory snapshots, finding ownership, graph investigation,\ncompliance evidence, and runtime policy—all inside the customer's cloud,\ncluster, database, identity, and audit boundary.\n\nStart the loopback evaluation profile:\n\n```bash\npip install 'agent-bom[ui]'\nAGENT_BOM_NO_AUTH_ROLE=analyst agent-bom serve --persist ~/.agent-bom/control-plane.db\n```\n\nThen open **Connections** to add a source or **New Scan** to target a repository,\nimage, SBOM, MCP configuration, or IaC path. A scan produces the inventory;\ninventory is not populated merely by starting the server.\n\nFor a shared deployment, use the production-shaped Docker or Helm path and\nconfigure real identity, TLS, PostgreSQL, encryption, and audit keys before\nexposing it.\n\n| Target | Start here |\n|---|---|\n| Docker Compose | [Platform compose](deploy/docker-compose.platform.yml) — PostgreSQL, split secrets, migration job |\n| Docker Compose (evaluation) | [Pilot compose](deploy/docker-compose.pilot.yml) — loopback only, SQLite, no auth |\n| Helm / Kubernetes | `helm install agent-bom oci://ghcr.io/msaad00/charts/agent-bom --version 0.103.2` |\n| EKS | [Terraform module](deploy/terraform/platform-eks) |\n| Snowflake SPCS / Native App | `scripts/deploy/install.sh snowflake-native` · [install guide](docs/snowflake-native-app/INSTALL.md) |\n| Air-gapped | [Image bundle guide](site-docs/deployment/airgapped-image-bundle.md) |\n\n> Examples target this release candidate; confirm release availability before copying an\n> exact pin. Otherwise, use the latest version shown on PyPI.\n\n[Deployment overview](site-docs/deployment/overview.md) ·\n[Enterprise configuration](docs/ENTERPRISE.md) ·\n[Cloud connections](docs/CLOUD_CONNECT.md)\n\n<details>\n<summary><b>Advanced integrations and runtime entry points</b></summary>\n\n| Need | First action | Artifact or next step |\n|---|---|---|\n| GitHub CI | `uses: msaad00/agent-bom@v0.103.2` | SARIF, PR summary, and a policy exit code |\n| Cloud evidence | `agent-bom connect aws --emit --out agent-bom-aws-readonly.json` | Deploy the read-only grant, then connect and scan |\n| Runtime gateway | `agent-bom gateway serve --from-control-plane http://127.0.0.1:8422 --bind 127.0.0.1:8090` | Allow, warn, and block audit events |\n| Agent interface | `agent-bom mcp server` | 86 MCP tools, 6 resources, and 8 workflow prompts |\n| Agent distribution | [Smithery manifest](integrations/smithery.yaml) · [Glama](glama.json) · [MCP registry](integrations/mcp-registry) · [Docker MCP](integrations/docker-mcp-registry) | Registry-specific installation metadata |\n\nMCP server mode exposes 86 MCP tools, 6 resources, and 8 workflow prompts, all\nread-first: discovery and analysis never mutate a scanned target.\n\nSet `YDC_API_KEY` to enable the optional `youcom_search` MCP tool for live web\nand news context alongside the local threat-intel database. It is the only tool\nthat sends your query to a third party, it is off unless the key is set, and the\nrequest is pinned to the You.com origin over TLS — so the key cannot be\nredirected to another host by configuration.\n\nThe CLI, Docker, API, Helm chart, MCP server, gateway, and SDK are distribution\nsurfaces of the same product. The Snowflake SPCS / Native App lane runs inside\nthe customer's Snowflake account; it is a customer-owned deployment target,\nnot an agent-bom-hosted service. Snowflake and Snowpark also remain connector\nand runtime integrations for the other deployment profiles.\n\n</details>\n\n<details>\n<summary><b>Every way to install it</b></summary>\n\n| Surface | Get it |\n|---|---|\n| Python package | `pip install agent-bom` — [PyPI](https://pypi.org/project/agent-bom/) |\n| Container | `docker pull agentbom/agent-bom:0.103.2` — signed release image on [Docker Hub](https://hub.docker.com/r/agentbom/agent-bom) |\n| Kubernetes | `helm install agent-bom oci://ghcr.io/msaad00/charts/agent-bom` |\n| GitHub Action | [`msaad00/agent-bom`](action.yml) |\n| MCP server | `pip install 'agent-bom[mcp-server]' && agent-bom mcp server` |\n| MCP registries | [Smithery manifest](integrations/smithery.yaml) · [Glama](glama.json) · [MCP registry](integrations/mcp-registry) · [Docker MCP](integrations/docker-mcp-registry) |\n| SDKs | [Python](sdks/python) · [TypeScript](sdks/typescript) · [Go](sdks/go) |\n\n</details>\n\n## Trust\n\n- Read-only discovery by default; runtime write decisions are separate and explicit.\n- Credentials are write-only where stored, encrypted at rest, and never returned by API responses.\n- API and control-plane routes are tenant scoped and auth protected outside explicit local mode.\n- Missing evidence is shown as unavailable or partial, never converted into a factual zero.\n- Public examples and screenshots use deterministic synthetic identifiers only.\n\n[Threat model](docs/THREAT_MODEL.md) ·\n[Release verification](docs/RELEASE_VERIFICATION.md) ·\n[Security policy](SECURITY.md) ·\n[MCP security model](docs/MCP_SECURITY_MODEL.md)\n\n## Contributing and support\n\nStuck, or not sure where a question belongs? [SUPPORT.md](SUPPORT.md) has the\nrouting and an honest statement of what response to expect.\n\nTo contribute, start with [CONTRIBUTING.md](CONTRIBUTING.md), [AGENTS.md](AGENTS.md),\nand the [open issues](https://github.com/msaad00/agent-bom/issues).\n\nApache-2.0 licensed.\n",
  "bytes": 18811,
  "sha": "b842504d266b9bc86b36110275cc386a7299f5be21f3b1d3f0755be3c8079b7e",
  "repo_slug": "msaad00/agent-bom",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_io_github_msaad00_agent_bom_5d323b4d/readme"
}