Skip to main content

bomscout

An MCP server for OWASP Dependency-Track. Ask Claude, Cursor, VS Code or any MCP client about your software portfolio in plain words: "which of our projects are affected by CVE-2021-44228, and has anyone triaged it?", "what should we fix first in shop?", "do we ship any GPL code?".

Dependency-Track already knows the answers, but getting them means clicking through the UI or writing scripts against several REST endpoints. bomscout wraps those endpoints as a handful of read-only tools that return small, ranked results a model can reason over.

pip install bomscout        # or run it without installing: uvx bomscout

Set up

You need the URL of the Dependency-Track API server and an API key of a team (Administration > Access Management > Teams). Give the team VIEW_PORTFOLIO, VIEW_VULNERABILITY and VIEW_POLICY_VIOLATION. Check the connection and permissions:

DT_URL=https://dtrack.example.com DT_API_KEY=odt_... bomscout check

Claude Code

claude mcp add bomscout -e DT_URL=https://dtrack.example.com -e DT_API_KEY=odt_... -- uvx bomscout

Claude Desktop, Cursor, VS Code and others (the usual mcpServers JSON):

{
  "mcpServers": {
    "bomscout": {
      "command": "uvx",
      "args": ["bomscout"],
      "env": { "DT_URL": "https://dtrack.example.com", "DT_API_KEY": "odt_..." }
    }
  }
}
Setting Meaning
DT_URL API server URL (a trailing /api is fine). DEPENDENCY_TRACK_URL also works.
DT_API_KEY Team API key. DEPENDENCY_TRACK_API_KEY also works.
DT_CA_BUNDLE Path to a CA bundle for a server with a private certificate.
DT_INSECURE=1 Skip TLS certificate checks (test servers only).
DT_TIMEOUT Seconds per request (default 30).
BOMSCOUT_ALLOW_WRITE=1 Add the record_analysis tool (or run bomscout --allow-write).

Tools

Tool Answers
portfolio_overview Vulnerabilities by severity, audited vs unaudited findings, policy violations, riskiest projects
list_projects Projects by name or tag, with UUID, version, risk score and vulnerability counts
project_findings A project's vulnerabilities, most severe first (CVSS, EPSS, component, triage state); filter by severity or analysis state, e.g. untriaged only
vulnerability_impact One CVE/GHSA: details, fixed versions, every affected project and its remediation status there
project_components A project's dependencies with license and newer versions; only outdated, only direct
project_licenses Components per license, grouped as strong copyleft, weak copyleft, permissive, unknown
find_component Every project that uses a package, by package URL or name and version
policy_violations Security, license and operational policy violations for a project or the portfolio, FAIL first
record_analysis Opt-in. Record a triage decision (state, justification, response, comment, suppression)

Projects can be named by UUID, by name (its latest version) or as name@version. All tools except record_analysis are marked read-only, so clients can run them without asking.

Example

A tool result is compact JSON. project_findings with project="shop", min_severity="HIGH":

{
  "project": "shop@2.0",
  "by_severity": {"CRITICAL": 1, "HIGH": 1},
  "by_analysis": {"EXPLOITABLE": 1, "NOT_SET": 1},
  "total": 2, "shown": 2,
  "findings": [
    {"vuln": "CVE-2021-44228", "source": "NVD", "severity": "CRITICAL", "cvss": 10.0, "epss": 0.944,
     "aliases": ["GHSA-jfh8-c2jp-5v3q"], "component": "org.apache.logging.log4j/log4j-core@2.14.1",
     "purl": "pkg:maven/org.apache.logging.log4j/log4j-core@2.14.1", "analysis": "EXPLOITABLE",
     "component_uuid": "...", "vulnerability_uuid": "..."}
  ]
}

The same questions work from Python, without MCP:

from bomscout import Scout

scout = Scout.from_env()  # reads DT_URL and DT_API_KEY
impact = scout.vulnerability_impact("CVE-2021-44228")
for project in impact["projects"]:
    print(project["project"], [c["analysis"] for c in project["components"]])

Limits

  • Dependency-Track 4.x REST API (field names checked against the 4.14.6 API server). The Hyades / v5 API is not supported yet.
  • An API key sees what its team sees. With portfolio access control on, other teams' projects are invisible to bomscout too.
  • vulnerability_impact reads the findings of each affected project to report its analysis state: one request per project, 20 projects by default (max_projects).
  • License families are a quick triage aid, not legal advice. Components without a resolved license count as "unknown".
  • stdio transport only. Run one instance per user, with that user's (or a read-only team's) API key.
  • Writing is limited to record_analysis; bomscout never uploads BOMs, deletes projects or changes policies.

Why this exists

Dependency-Track users asked for an MCP server so they could query their portfolio's security posture in natural language instead of hand-writing API scripts: DependencyTrack/dependency-track#5791 (open, 18 upvotes). Its examples ("show me all critical vulnerabilities", "summary of component license risks", "what's the current remediation status for CVE-...") map to portfolio_overview / project_findings, project_licenses and vulnerability_impact.

Part of kitforge. MIT licensed.

Metadata

Release files for bomscout 0.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for bomscout 0.1.0
File Size Uploaded Provenance Actions
bomscout-0.1.0.tar.gz 29.7 kB Without provenance Details for bomscout-0.1.0.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for bomscout 0.1.0
File Interpreter ABI Platform Actions
bomscout-0.1.0-py3-none-any.whl Python 3 none any Details for bomscout-0.1.0-py3-none-any.whl

Total release size: 52.6 kB

Release files / bomscout-0.1.0.tar.gz

Download URL bomscout-0.1.0.tar.gz
Size 29.7 kB
Tags Source
SHA-256 checksum
How to use checksums
c4043cd5580cb3318c5b296733d68b9901969562b732e1395b2a9fc1118d807e
BLAKE2b-256 checksum
How to use checksums
21377f35a515f955f7c842658faa47a2640d443012022c0790c0b384f9616deb
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.16

Release files / bomscout-0.1.0-py3-none-any.whl

Download URL bomscout-0.1.0-py3-none-any.whl
Size 22.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
e8f1e9c3beac070c9ca7c8c4b111ba1876c369af96a632d64298948e83366a83
BLAKE2b-256 checksum
How to use checksums
d83183704d8301d2f68d505cf248935b4de5b9099ecfc7e4afdb6e3f3b0f4ca0
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.16

Security for bomscout 0.1.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 release files No provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page