Secret-Inventar (Stand 2026-05-17)
Spalten:
- Name — Identifier wie er im Quell-System heißt
- Quelle — wo das Secret aktuell liegt
- Zweck — wofür
- Konsumenten — was zieht den Secret
- Soll-Tier — was Best Practice wäre (0 = Workload-Identity, 1 = AWS SM, 1.5 = AWS SM + 1P-Pointer, 2 = 1P only)
- Action — was zu tun ist
AWS Secrets Manager — av-production / eu-central-1
| Name | Zweck | Konsumenten | Soll-Tier | Action |
|---|---|---|---|---|
cloudflare/api-token | CF API Token (Account:Tunnel:Edit + Zone:DNS:Edit für agenticventures.de) | Alle Tunnel-Setup-Skripte, lokal + CDK | 1.5 | 1P-Pointer fehlt — anlegen |
mcp-vf-hosted/cloudflared-token | CF Tunnel Connector Token mcp-vf-hosted | Fargate-Sidecar | 1 | ✓ stays |
mcp-vf-hosted/upstream-tokens | VF Papierkram + TicketPAY + M365 Tokens (JSON) | Fargate-Container mcp-vf-hosted | 1 | ✓ stays — Source of Truth, lokale Duplikate konsolidieren |
mcp-whatsapp-hosted/cloudflared-token | CF Tunnel Token mcp-whatsapp | Fargate-Sidecar | 1 | ✓ stays |
mcp-whatsapp-hosted/whatsapp-config | Meta WhatsApp API: PHONE_NUMBER_ID, BUSINESS_ACCOUNT_ID, ACCESS_TOKEN, WEBHOOK_VERIFY_TOKEN | Fargate-Container | 1 | ✓ stays |
mcp-calcom-hosted/calcom-config | Cal.com API v2 Key + phone-derived-email domain | Fargate-Container | 1 | ✓ stays |
mcp-calcom-hosted/cloudflared-token | CF Tunnel Token mcp-calcom | Fargate-Sidecar | 1 | ✓ stays |
open-webui-vf/webui-secret-key | WEBUI_SECRET_KEY für Session/JWT | Fargate Open-WebUI | 1 | ✓ stays |
open-webui-vf/cloudflared-token | CF Tunnel Token Open-WebUI VF | Fargate-Sidecar | 1 | ✓ stays |
open-webui-vf/mongo-credentials | Mongo root creds für Open-WebUI VF | Fargate-Container | 1 | ✓ stays |
open-webui-vf/db-credentials | RDS Postgres creds (CDK-generated) | Fargate-Container | 1 | ✓ stays — auto-rotated by CDK |
open-webui-vf/litellm-master-key | Shared key zw. Open-WebUI und LiteLLM-Sidecar | beide Container | 1 | ✓ stays |
open-webui-vf/groq-api-key | Groq API Key für LiteLLM | LiteLLM-Container | 1 | ✓ stays |
open-webui-vf/tavily-api-key | Tavily Web-Search Key für Open-WebUI | Open-WebUI-Container | 1 | ✓ stays |
presenton-vf/config | Presenton Auth + LiteLLM Key (Pexels Key pending) | Fargate-Container | 1 | ✓ stays — Pexels-Key noch ergänzen |
presenton-vf/cloudflared-token | CF Tunnel Token Presenton | Fargate-Sidecar | 1 | ✓ stays |
inference-service-prod/api-key | Bearer-API-Key Icking-Inference (JSON: api_key_v1, api_key_v2) | a-icking Clients | 1.5 | 1P-Pointer für Recovery anlegen |
inference-service-prod/cloudflared-tunnel-token | CF Tunnel Token Icking | Fargate-Sidecar | 1 | ✓ stays |
inference-service-prod/db-password | RDS Master-Password Icking | Fargate-Container | 1 | ✓ stays — auto-rotate via Lambda erwägen |
stirling-pdf-vf/cloudflared-token | CF Tunnel Token Stirling (legacy) | unused — neuer Stack cert-basiert | 1 | Cleanup: prüfen ob unused → löschen |
agent-platform/telegram-bot-token | Telegram BotFather Token für Marvin-Pushes | Lambda agents-platform | 1 | ✓ stays |
agent-platform/gmail-oauth-refresh | OAuth Refresh Tokens (hello@ + privat@) | Lambda agents-platform | 1 | ✓ stays — kritisches Recovery-Asset, 1P-Pointer anlegen |
agent-platform/github-pat | Fine-Grained PAT mit repo-Scope für Vault-Stub-Commits | Lambda agents-platform | 1.5 | ✓ stays — ROT: dieser Token vs. der in claude.json sind möglicherweise dupliziert! Bei Rotation einen Single-Use entscheiden |
receptionist-brain/cf-access-mcp | CF Access Service Token für receptionist-brain Lambda | Lambda | 1 | ✓ stays — Rotation due 2027-05-15 vermerkt im Description |
tmp/owui-admin-key | unklar, keine Description | unklar | — | Cleanup: prüfen + ggf. löschen |
AWS SM Cost: ~25 Secrets × 10/Monat.
1Password — Vault Personal
| ID | Title | Type | Zweck | Konsumenten | Soll-Tier |
|---|---|---|---|---|---|
fkm22mrp2ztnbctpekc3ajpg4a | API-Zugangsdaten | API_CREDENTIAL | Hetzner Cloud API Token (HCLOUD_TOKEN) | hetzner-MCP via op run -- | 2 ✓ — bleibt 1P (lokal-only) |
pu5tfghpcg26g6nxou6mozlnxm | API-Zugangsdaten | API_CREDENTIAL | unbekannt — Marvin prüfen welcher Token | unbekannt | tbd |
twsc5ddjhsei44du67cvbgl4xq | 1Password-Konto (Marvin) | LOGIN | Master | Mensch | 2 ✓ |
mhegtrcfr6pb7ajz4r4t6bawlq | Marvin Kühlmann | IDENTITY | persönliche Daten | Mensch | 2 ✓ |
ubougcjqv5... | Replicate API Token (mcp-replicate-hosted) | API_CREDENTIAL | Replicate-Token vf-hosted fuer Fargate-Container, Spending-Cap $100/Mo | mcp-replicate-hosted via AWS SM mcp-replicate-hosted/upstream-tokens | 1.5 ✓ — neu 2026-05-19, Recovery-Pointer im Notes-Feld |
Scalekit-Update (2026-05-19): kein Admin-API-Key noetig — Scalekit hat einen offiziellen MCP-Server der OAuth-basiert laeuft (analog cloudflare-MCP-Pattern). Resource-Creation fuer hosted MCPs geht jetzt via Tool-Call statt Dashboard-Klick. Kein eigenes 1P-Item noetig ausser ggf. ein Pointer-Notes-Item fuer Recovery (Master-Login ist twsc5ddjhsei44du67cvbgl4xq, Scalekit-Account-Wiederherstellung ueber Email-Reset).
Auffällig: Vault enthält nur 4 Items. Erwartet wären deutlich mehr (Google-Account, AWS-Root, Domain-Registrar, Stripe, Banken). Entweder andere Vaults existieren (Family/Shared) oder es liegt vieles außerhalb 1P.
→ Phase 1 Action: Marvin prüft welche weiteren Vaults existieren (op vault list) und welche Items in pu5tfghpcg26g6nxou6mozlnxm sind.
.env.local und .env Files
| Datei | Variablen | Zweck | Konsumenten | Soll-Tier | Action |
|---|---|---|---|---|---|
~/source/agentic-ventures/.env.local | ELEVENLABS_API_KEY | ElevenLabs Voice API | elevenlabs MCP (stdio) | 2 | Nach 1P verschieben + op run Wrapper bauen |
~/source/mcps/mcp-vf-hosted/.env | PAPIERKRAM_TOKEN, M365_CLIENT_*, TICKETPAY_API_KEY, SCALEKIT_* | Lokale Sub-MCP-Configs für vf-hosted local-dev | mcp-vf-hosted local-dev | 1 → 2 hybrid | Werte sind dupliziert mit AWS SM mcp-vf-hosted/upstream-tokens. Lokal-Dev kann via aws secretsmanager get-secret-value lesen statt File |
~/source/mcps/mcp-replicate/.env.local | REPLICATE_API_TOKEN | Replicate API | replicate MCP | 2 | Nach 1P + op run |
~/source/mcps/mcp-runway/.env.local | RUNWAYML_API_SECRET | Runway API | runway MCP | 2 | Nach 1P + op run |
~/source/mcps/mcp-papierkram/.env.local | PAPIERKRAM_TOKEN | Papierkram API | papierkram MCP lokal | 1 → 2 hybrid | Konsolidieren mit AWS SM mcp-vf-hosted/upstream-tokens |
~/source/mcps/mcp-lexware-office/.env.local | LEXWARE_OFFICE_API_KEY | Lexware Office API | lexware MCP (configured, nicht aktiv) | 2 | Nach 1P |
~/source/mcps/mcp-m365/.env.local | M365_CLIENT_ID, M365_CLIENT_SECRET, M365_TENANT_ID | M365 Service-Principal | m365 MCP lokal | 1 → 2 hybrid | Konsolidieren mit AWS SM |
~/source/mcps/mcp-sevdesk/.env.local | SEVDESK_API_TOKEN | SevDesk (configured) | sevdesk MCP | 2 | Nach 1P |
~/source/mcps/mcp-ticketpay/.env.local | TICKETPAY_API_KEY | TicketPAY Export API | ticketpay MCP lokal | 1 → 2 hybrid | Konsolidieren mit AWS SM |
~/source/mcps/mcp-calcom/.env.local | CALCOM_API_KEY | Cal.com API | calcom MCP | 2 | Nach 1P + op run. Hosted-Variante hat AWS SM Secret |
~/source/agentic-ventures/intern/projekte/telefon-assistent-aws/livekit-agent/.env.local | LIVEKIT_*, TELNYX_*, OPENAI_API_KEY, CARTESIA_API_KEY, DEEPGRAM_API_KEY | LiveKit + Telnyx + STT/TTS für Telefon-POC | LiveKit-Agent lokal | 1 | Wenn Telefon-Stack productionized: AWS SM. Solange POC: belassen aber 1P-Pointer für Recovery |
claude.json — ~/.claude.json
Pro MCP-Server-Eintrag in mcpServers.*.env:
| MCP | Env-Vars | Aktuell | Soll | Action |
|---|---|---|---|---|
github | GITHUB_PERSONAL_ACCESS_TOKEN | PLAINTEXT (gho_…) | op run -- Wrapper | ROT — sofort rotieren + migrieren |
banksapi | — | — | — | — (kein Env in claude.json sichtbar) |
gsuite | — | — | — | OAuth-Refresh in start.sh — prüfen ob File-basiert OK ist |
aws-api, aws-docs, aws-iac, aws-pricing | AWS_PROFILE, AWS_REGION | Klartext-Profile-Namen (keine Secrets) | — | ✓ ok |
elevenlabs | ELEVENLABS_API_KEY | aus .env.local (vermutlich dotenvx oder ähnlich) | op run -- | Konsolidieren mit .env.local-Migration |
hetzner | HCLOUD_TOKEN | op://idfj3ggccgqdd27ghe2v2ibeau/fkm22mrp.../credential | — | ✓ ok — Referenz-Pattern für andere |
cloudflare | — | OAuth-Flow bei Connect | — | ✓ ok — kein Token in Config |
Außerhalb dieses Inventars (noch zu prüfen)
Folgende Secret-Kategorien existieren mit hoher Wahrscheinlichkeit, sind aber nicht im Scan aufgetaucht. Phase-1-Audit klärt:
- AWS Sub-Account Root-User-Credentials (av-production, av-shared, av-icking, av-becker, …) — vermutlich in 1P oder bei Marvin im Kopf. Sollten in 1P liegen mit MFA-Backup-Codes.
- AWS SSO / IAM-Identity-Center Admin-Recovery-Codes — vermutlich Mailbox/1P
- GitHub Org Owner Backup-Codes (2FA)
- Anthropic Console API Keys (für Claude-API direkt)
- Domain-Registrar Login (für agenticventures.de — vermutlich Cloudflare Registrar nach Migration?)
- Stripe / Steuerberater / Banken — Geschäftskonto-Logins
- NDA-relevante Customer-Secrets (Becker, BSS, VF-Tokens für direkten Customer-Account-Zugriff) — falls vorhanden, sehr sensibel
- Cloudflare-Account-Master-Login (vs. API-Token)
- Hetzner-Account-Master-Login
- Apple-ID, iCloud, Notion, Linear, falls genutzt
- SSH-Keys —
~/.ssh/*und ihre Passphrases (falls gesetzt). Hetzner-Keyhetzner_av_tools, Vibe-Factoryid_ed25519_vibe_factory, GitHub-Key (Default), Mac → Server-Keys
Beobachtungen
- Hosted-MCPs sind disziplinierter inventarisiert als lokale. Jede Fargate-Task hat ihr Secret in AWS SM mit Description. Die
.env.local-Welt ist undokumentiert. - Pattern „MCP-Tokens lokal + Cloud parallel” ist ein Konsolidierungs-Kandidat. Wenn Papierkram-Token rotiert, müssen 3 Stellen aktualisiert werden.
- Keine Rotation-Disziplin sichtbar. Außer
receptionist-brain/cf-access-mcp(“Rotation due 2027-05-15”) undinference-service-prod/api-key(Two-Key-Rotation-fähig via JSON) gibt es keinen Hinweis auf nächste Rotation. - 1Password wirkt unter-genutzt. 4 Items in der Personal-Vault ist auffällig wenig für jemanden mit 25+ externen API-Verbindungen.
- Claude Code Memory wird in Rule 18 (CLAUDE.md) vor Secret-Speicherung geschützt. Memory-Lokation ist
~/.claude/projects/.../memory/— gehört nicht ins Inventar (transient).