From c91fbe7c92e8fdc4910566077ecec6a53013fa17 Mon Sep 17 00:00:00 2001 From: Sebas Date: Tue, 23 Jun 2026 20:04:55 +0000 Subject: [PATCH] docs: README auf Stage 2 (stdio + HTTP, Server-Modus, Compose) --- README.md | 84 +++++++++++++++++++++++++++++++------------------------ 1 file changed, 47 insertions(+), 37 deletions(-) diff --git a/README.md b/README.md index 6ada9db..bac3308 100644 --- a/README.md +++ b/README.md @@ -1,22 +1,28 @@ # dependencyTrack-MCP MCP-Server fuer [OWASP Dependency-Track](https://dependencytrack.org/), in Rust. -Read-only Zugriff auf Projekte, Findings und Metriken -- gedacht fuer den -Einsatz mit Claude Desktop (stdio) auf dem Arbeitsrechner. +Read-only Zugriff auf Projekte, Findings und Metriken. -> **Status: Stage 0** -- stdio, read-only, 3 Tools. Multi-Client / Permissions / -> Admin-UI / SSO folgen in spaeteren Stages (siehe Roadmap). +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-core DT-REST-Client (reqwest+rustls, read-only) -crates/dtrack-stdio rmcp stdio-Server -> ARBEIT: vom Desktop via `run -i` gestartet +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) ``` -Spaeter kommt ein `dtrack-http`-Frontend (Multi-Client, Admin-UI) dazu; die -Tool-Logik in `dtrack-core` bleibt dabei dieselbe. - ## Tools | Tool | Argument | DT-Endpoint | @@ -29,35 +35,39 @@ Tool-Logik in `dtrack-core` bleibt dabei dieselbe. | Var | Pflicht | Bedeutung | |---|---|---| -| `DTRACK_URL` | ja | Basis-URL der DT-Instanz, z.B. `https://dtrack.firma.intern` | -| `DTRACK_API_KEY` | ja | API-Key eines **read-only** Teams (`VIEW_PORTFOLIO`, `VIEW_VULNERABILITY`) | +| `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` | -## Bauen +\* oder ueber `DTRACK_CONFIG`-Datei. + +## Server-Modus testen (z.B. Gaming-PC) ```sh -# Lokal +cp .env.example .env # DTRACK_URL / DTRACK_API_KEY ausfuellen +podman compose up --build +``` + +MCP-Client auf `http://:8080/mcp` zeigen lassen; falls `DTRACK_HTTP_TOKENS` +gesetzt ist, `Authorization: Bearer ` mitgeben. Health-Check: +`curl http://localhost:8080/health`. + +## stdio-Modus (Arbeitsrechner) + +```sh +# bauen cargo build --release --bin dtrack-stdio - -# Container 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 ``` -## Transfer auf den Arbeitsrechner (ohne Registry) - -```sh -# daheim -podman save dtrack-mcp:latest | gzip > dtrack-mcp.tar.gz -# -> Datei uebertragen, dann auf dem Laptop: -podman load < dtrack-mcp.tar.gz -``` - -(Automatisiert spaeter ueber CI als Gitea-Release-Asset.) - -## Claude Desktop einbinden - -`--network=host`, damit der Container die DT-Instanz ueber die VPN-Route des -Hosts erreicht: +Claude Desktop (`--network=host` fuer DT ueber die VPN-Route des Hosts): ```json { @@ -81,10 +91,10 @@ Hosts erreicht: ## Roadmap -| Stage | Inhalt | -|---|---| -| **0** (jetzt) | stdio, read-only, 3 Tools, CI, Container | -| 1 | Permission-Engine (config-getrieben) | -| 2 | HTTP-Frontend + Auth-Trait, Multi-Client | -| 3 | Admin-UI (Token/URL pflegbar, maskiert) + Audit-Log | -| 4 | SSO (Gitea-OIDC) | +| 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) | … |