Dtrack Mcp — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited Dtrack Mcp (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
MCP server that connects Claude (or any MCP-compatible LLM) to Dependency-Track.
Instead of clicking through the DT UI to triage hundreds of vulnerability findings, describe what you need in natural language — Claude pulls the data, reasons over it, and writes the verdict back.
Dependency-Track accumulates findings fast. A product with 5 versions and 100+ vulnerabilities each means 500+ rows to triage — each requiring you to open a finding, read the CVE, check CVSS, look at EPSS/KEV signals, see what other projects decided, and pick a state. That's hours of browser clicking per release cycle.
dtrack-mcp exposes DT as an MCP server so Claude can do the data work:
1. Triage a batch of findings
Show me all CRITICAL and HIGH findings in project "myapp v2.3.0"
that haven't been analysed yet. Group by alias so I don't see
the same CVE twice. For each group tell me the CVSS vector,
EPSS score, and whether it's in CISA KEV.2. Carry triage forward when upgrading
We just uploaded the SBOM for myapp v2.4.0. Carry over all
triage decisions from v2.3.0 — dry run first, then apply.3. Propagate a decision across versions
A new CVE is found in v1.0, v1.1, v2.0, and v2.1 simultaneously. Triage it in one version, then carry the decision backward and forward to the others:
Set CVE-2024-12345 in myapp v2.1.0 as NOT_AFFECTED
(justification: CODE_NOT_REACHABLE). Then carry that decision
to v1.0, v1.1, and v2.0.| Tool | Description |
|---|---|
list_projects | List projects with vulnerability counts |
resolve_project | Find project by UUID or by exact name + version |
list_findings | Findings with severity / state / suppressed filters |
group_findings_by_alias | Deduplicate CVE/GHSA/OSV via union-find |
find_vulnerability | Full detail by id, optionally specifying source |
search_vulnerability | Which projects are affected by a given CVE? |
get_analysis | Current triage state + full comment history |
find_duplicate_analyses | Same vuln in other components / projects, with prior analyses |
set_analysis | ⚠ WRITE — set state, justification, response, comment. Accepts raw UUIDs or a finding dict |
get_project_versions | All versions of a project, newest first |
diff_findings | Carried / updated / new / gone between two versions |
carry_over_triage | ⚠ WRITE — transfer decisions v1 → v2 (or v2 → v1) |
broadcast_triage | ⚠ WRITE — fan out one decision to all versions of a project |
upload_bom | ⚠ WRITE — upload CycloneDX/SPDX SBOM |
All tools are read-only except the four marked ⚠ WRITE. The HTTP layer enforces this: any write path other than PUT /api/v1/analysis and POST /api/v1/bom raises before reaching the network.
lack EPSS-for-GHSA data and CVSSv4 fields, and purl distro-qualifier matching degrades. The server logs a warning at startup when it detects an older DT.
stdio MCP runtime.
VIEW_PORTFOLIO + VULNERABILITY_ANALYSISpermissions (and BOM_UPLOAD if you use upload_bom).
Linux and macOS are the primary targets; Windows works under WSL.
pip install dtrack-mcpOr from source (for development):
git clone https://github.com/drewrukin/dtrack-mcp.git
cd dtrack-mcp
pip install -e .After pip install, the dtrack-mcp command is on $PATH and starts the MCP server on stdio. A quick local smoke test against your DT instance:
DTRACK_URL=https://dt.example.com \
DTRACK_API_KEY=odt_... \
python scripts/smoke.pyscripts/smoke.py is read-only and safe to re-run — it exercises every GET-based tool on one real project and prints a compact summary.
Claude Desktop — add to ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows):
{
"mcpServers": {
"dtrack": {
"command": "dtrack-mcp",
"env": {
"DTRACK_URL": "https://dt.example.com",
"DTRACK_API_KEY": "odt_..."
}
}
}
}Claude Code — add to ~/.claude.json:
{
"mcpServers": {
"dtrack": {
"command": "dtrack-mcp",
"env": {
"DTRACK_URL": "https://dt.example.com",
"DTRACK_API_KEY": "odt_..."
}
}
}
}Restart Claude after editing the config.
| Variable | Description |
|---|---|
DTRACK_URL | Base URL of your DT instance |
DTRACK_API_KEY | Preferred. Requires VIEW_PORTFOLIO + VULNERABILITY_ANALYSIS permissions. Add BOM_UPLOAD for upload_bom. |
DTRACK_USER + DTRACK_PASSWORD | Alternative. Exchanges credentials for a JWT; re-fetches on 401. |
| Variable | Default | Description |
|---|---|---|
DTRACK_TIMEOUT | 30 | HTTP timeout in seconds. |
DTRACK_VERIFY_TLS | false | Set true when your DT instance has a certificate your system trust store recognises. |
DTRACK_RETRY_MAX | 3 | Retries on HTTP 429/502/503/504 and transport errors (connect refused, read timeout). 0 disables retries. |
DTRACK_RETRY_BACKOFF_MS | 500 | Base for exponential backoff: base · 2^attempt + jitter. Retry-After header is honoured up to a 60 s cap. |
DTRACK_WRITE_DELAY_MS | 0 | Sleep between writes in carry_over_triage / broadcast_triage. Use when DT is under load. |
DTRACK_LOG_LEVEL | INFO | Standard logging level (DEBUG, INFO, WARNING, ERROR). Logs go to stderr. |
DTRACK_SKIP_VERSION_CHECK | false | Skip the one-shot GET /api/v1/version probe at first request. Useful for offline or heavily-mocked tests. |
Proxies are disabled inside the client (trust_env=False) because DT is typically on an internal network and corporate proxies refuse to tunnel it. Equivalent to curl --noproxy '*'.
PUT /api/v1/analysis (triage) and POST /api/v1/bom (SBOM upload).additionalProperties: false in JSON schema).mode="exact" after reviewing the plan.DTRACK_RETRY_*); no other status is retried, so a broken caller never loops.env block of your client config (examples above), not just in your shell.VULNERABILITY_ANALYSIS. Read-only tools work without it.DTRACK_API_KEY for long sessions.SPEC.md — full protocol specification: normalized schemas,per-tool input/output contracts, hard invariants, per-stage evolution.
scripts/smoke.py — end-to-end read-only smoketest; mirrors the shape of a real triage session.
scripts/smoke_retry.py — retry-layerintegration check; includes a recovery-probe mode that requires a live DT instance you can restart.
MIT — see LICENSE.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.