4de5628b053ca7e3756c0acb6a6e5b493583b4ba
dependencyTrack-MCP
MCP-Server fuer OWASP Dependency-Track, in Rust. Read-only Zugriff auf Projekte, Findings und Metriken.
Zwei Frontends, eine gemeinsame Tool-Logik:
| Modus | Binary | Einsatz |
|---|---|---|
| stdio | dtrack-stdio |
Arbeitsrechner: von Claude Desktop via podman run -i gestartet |
| HTTP | dtrack-http |
Server: StreamableHTTP /mcp, Multi-Client, Bearer-Auth |
Status: Stage 2 -- HTTP-Frontend + Bearer-Auth stehen. Admin-UI + Permission-Engine + SSO folgen (siehe Roadmap).
Architektur
crates/dtrack-config Config (TOML laden/speichern, Secret-Masking)
crates/dtrack-core DT-REST-Client (reqwest+rustls, read-only)
crates/dtrack-tools rmcp-Server (die Tools) -- transport-unabhaengig, geteilt
crates/dtrack-stdio Bin: stdio-Frontend
crates/dtrack-http Bin: HTTP-Frontend (axum + StreamableHTTP)
Tools
| Tool | Argument | DT-Endpoint |
|---|---|---|
list_projects |
-- | GET /project |
project_findings |
uuid |
GET /finding/project/{uuid} |
project_metrics |
uuid |
GET /metrics/project/{uuid}/current |
Konfiguration (Umgebungsvariablen)
| Var | Pflicht | Bedeutung |
|---|---|---|
DTRACK_URL |
ja* | Basis-URL der DT-Instanz |
DTRACK_API_KEY |
ja* | API-Key eines read-only Teams (VIEW_PORTFOLIO, VIEW_VULNERABILITY) |
DTRACK_INSECURE |
nein | 1/true -> TLS-Pruefung aus (Notbehelf bei internem CA-Cert) |
DTRACK_CONFIG |
nein | Pfad zu einer TOML-Config; hat Vorrang vor den env-Werten |
DTRACK_HTTP_TOKENS |
nein | (nur HTTP) kommagetrennte erlaubte Bearer-Tokens; leer = ungeschuetzt |
DTRACK_HTTP_ADDR |
nein | (nur HTTP) Bind-Adresse, Default 0.0.0.0:8080 |
* oder ueber DTRACK_CONFIG-Datei.
Server-Modus testen (z.B. Gaming-PC)
cp .env.example .env # DTRACK_URL / DTRACK_API_KEY ausfuellen
podman compose up --build
MCP-Client auf http://<host>:8080/mcp zeigen lassen; falls DTRACK_HTTP_TOKENS
gesetzt ist, Authorization: Bearer <token> mitgeben. Health-Check:
curl http://localhost:8080/health.
stdio-Modus (Arbeitsrechner)
# bauen
cargo build --release --bin dtrack-stdio
podman build -t dtrack-mcp:latest -f Containerfile .
# transfer ohne Registry
podman save dtrack-mcp:latest | gzip > dtrack-mcp.tar.gz # -> uebertragen
podman load < dtrack-mcp.tar.gz # auf dem Laptop
Claude Desktop (--network=host fuer DT ueber die VPN-Route des Hosts):
{
"mcpServers": {
"dependency-track": {
"command": "podman",
"args": [
"run", "-i", "--rm", "--network=host",
"-e", "DTRACK_URL", "-e", "DTRACK_API_KEY", "-e", "DTRACK_INSECURE",
"dtrack-mcp:latest"
],
"env": {
"DTRACK_URL": "https://dtrack.firma.intern",
"DTRACK_API_KEY": "odt_...",
"DTRACK_INSECURE": "0"
}
}
}
}
Roadmap
| Stage | Inhalt | Status |
|---|---|---|
| 0 | stdio, read-only, 3 Tools, CI, Container | ✅ |
| 1 | Config-Layer + geteiltes Tool-Crate | ✅ |
| 2 | HTTP-Frontend + Bearer-Auth | ✅ |
| 3 | Admin-UI (URL/Key/Rechte pflegbar, maskiert) + Permission-Engine + Audit | … |
| 4 | SSO (Gitea-OIDC) | … |
Description
Languages
Rust
98.3%
Dockerfile
1.7%