docs: README auf Stage 2 (stdio + HTTP, Server-Modus, Compose)
CI / test (push) Successful in 13m15s
CI / test (push) Successful in 13m15s
This commit is contained in:
@@ -1,22 +1,28 @@
|
|||||||
# dependencyTrack-MCP
|
# dependencyTrack-MCP
|
||||||
|
|
||||||
MCP-Server fuer [OWASP Dependency-Track](https://dependencytrack.org/), in Rust.
|
MCP-Server fuer [OWASP Dependency-Track](https://dependencytrack.org/), in Rust.
|
||||||
Read-only Zugriff auf Projekte, Findings und Metriken -- gedacht fuer den
|
Read-only Zugriff auf Projekte, Findings und Metriken.
|
||||||
Einsatz mit Claude Desktop (stdio) auf dem Arbeitsrechner.
|
|
||||||
|
|
||||||
> **Status: Stage 0** -- stdio, read-only, 3 Tools. Multi-Client / Permissions /
|
Zwei Frontends, eine gemeinsame Tool-Logik:
|
||||||
> Admin-UI / SSO folgen in spaeteren Stages (siehe Roadmap).
|
|
||||||
|
| 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
|
## Architektur
|
||||||
|
|
||||||
```
|
```
|
||||||
|
crates/dtrack-config Config (TOML laden/speichern, Secret-Masking)
|
||||||
crates/dtrack-core DT-REST-Client (reqwest+rustls, read-only)
|
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-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
|
## Tools
|
||||||
|
|
||||||
| Tool | Argument | DT-Endpoint |
|
| Tool | Argument | DT-Endpoint |
|
||||||
@@ -29,35 +35,39 @@ Tool-Logik in `dtrack-core` bleibt dabei dieselbe.
|
|||||||
|
|
||||||
| Var | Pflicht | Bedeutung |
|
| Var | Pflicht | Bedeutung |
|
||||||
|---|---|---|
|
|---|---|---|
|
||||||
| `DTRACK_URL` | ja | Basis-URL der DT-Instanz, z.B. `https://dtrack.firma.intern` |
|
| `DTRACK_URL` | ja* | Basis-URL der DT-Instanz |
|
||||||
| `DTRACK_API_KEY` | ja | API-Key eines **read-only** Teams (`VIEW_PORTFOLIO`, `VIEW_VULNERABILITY`) |
|
| `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_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
|
```sh
|
||||||
# Lokal
|
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)
|
||||||
|
|
||||||
|
```sh
|
||||||
|
# bauen
|
||||||
cargo build --release --bin dtrack-stdio
|
cargo build --release --bin dtrack-stdio
|
||||||
|
|
||||||
# Container
|
|
||||||
podman build -t dtrack-mcp:latest -f Containerfile .
|
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)
|
Claude Desktop (`--network=host` fuer DT ueber die VPN-Route des Hosts):
|
||||||
|
|
||||||
```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:
|
|
||||||
|
|
||||||
```json
|
```json
|
||||||
{
|
{
|
||||||
@@ -81,10 +91,10 @@ Hosts erreicht:
|
|||||||
|
|
||||||
## Roadmap
|
## Roadmap
|
||||||
|
|
||||||
| Stage | Inhalt |
|
| Stage | Inhalt | Status |
|
||||||
|---|---|
|
|---|---|---|
|
||||||
| **0** (jetzt) | stdio, read-only, 3 Tools, CI, Container |
|
| 0 | stdio, read-only, 3 Tools, CI, Container | ✅ |
|
||||||
| 1 | Permission-Engine (config-getrieben) |
|
| 1 | Config-Layer + geteiltes Tool-Crate | ✅ |
|
||||||
| 2 | HTTP-Frontend + Auth-Trait, Multi-Client |
|
| 2 | HTTP-Frontend + Bearer-Auth | ✅ |
|
||||||
| 3 | Admin-UI (Token/URL pflegbar, maskiert) + Audit-Log |
|
| 3 | Admin-UI (URL/Key/Rechte pflegbar, maskiert) + Permission-Engine + Audit | … |
|
||||||
| 4 | SSO (Gitea-OIDC) |
|
| 4 | SSO (Gitea-OIDC) | … |
|
||||||
|
|||||||
Reference in New Issue
Block a user