Sprint 2 — mcp-replicate-hosted

Image-Generation via MCP statt Bedrock-direkt (Begruendung: bedrock-eu-image-gen-limitation).

Ausgangslage

  • mcp-replicate existiert als active local MCP (replicate) — 35 Tools, Flux/SDXL/Whisper/Llama. Laeuft heute lokal via HTTP auf 127.0.0.1:8769/mcp
  • Hosting-Pattern mcp-hosting-fargate-tunnel bewiesen via mcp-vf-hosted (Fargate + cloudflared-Sidecar, kein ALB)
  • Open WebUI fuer VF laeuft mit mcp-vf-hosted als externen MCP-Server angebunden ueber streamable-http
  • Marvin’s Vault hat Replicate-API-Token fuer den Account (privat oder VF-spezifisch, je nach Setup)

Ziel

mcp-replicate-hosted als zweiter hosted MCP analog mcp-vf-hosted in av-production deployen, unter eigener Domain mit eigener Scalekit-Resource. Open WebUI bei VF (und ggf. weiteren Kunden) bindet ihn als zweiten External-MCP-Server an.

Konkret: VF-User tippt im Chat „erstelle ein Bild von einem Wein-Tasting-Event-Plakat” → Open WebUI sieht das replicate_create_prediction-Tool → ruft den Replicate-MCP → Bild kommt als URL zurueck → Open WebUI rendert inline.

Architektur

claude.ai / Open WebUI
    │ OAuth 2.1 (Scalekit EU) + JWT
    ▼
Cloudflare Edge (replicate.agenticventures.de)
    │
    ▼
Cloudflare Tunnel (eigene Resource)
    │
    ▼
AWS Fargate Task (av-production, eu-central-1)
    ├── Container 1: cloudflared (Sidecar)
    └── Container 2: mcp-replicate-hosted (FastMCP v2 + ScalekitProvider)
            │
            ▼
    Replicate REST API (https://api.replicate.com)
    - Token: REPLICATE_API_TOKEN aus AWS Secrets Manager

Konsequenter Mirror des mcp-vf-hosted-Patterns — gleicher Stack-Aufbau, andere Sub-MCP-Inhalte.

Phasen

Phase 1 — Repo + FastMCP-Wrapper (0.5 Tag)

  1. Neues Repo ~/source/mcps/mcp-replicate-hosted/ analog mcp-vf-hosted:
    • src/mcp_replicate_hosted/main.py mit FastMCP v2 + ScalekitProvider + GuardMiddleware (Rate-Limit + Audit + EMERGENCY_DISABLE)
    • EIN Sub-MCP (mcp-replicate als stdio-Subprozess, via create_proxy)
    • Plus Workflow-Prompts (/image_for_event, /marketing_banner, etc.) wenn sinnvoll
  2. Kein Dockerfile-Refactor noetig — mcp-replicate ist Python, existing Dockerfile-Pattern wiederverwenden
  3. CDK-Stack infra/lib/mcp-replicate-hosted-stack.ts als Copy-Adapt von mcp-vf-hosted-Stack mit angepasstem Service-Name + Secret-Namen + Tunnel-Hostname

Phase 2 — AWS-Deploy (0.5 Tag)

  1. Secrets Manager in av-production:
    • mcp-replicate-hosted/upstream-tokens JSON mit REPLICATE_API_TOKEN
    • mcp-replicate-hosted/cloudflared-token neuer Tunnel-Token
  2. Cloudflare-Tunnel anlegen via CF-API: „mcp-replicate-hosted” mit Ingress replicate.agenticventures.de → http://localhost:8080
  3. Scalekit-Resource anlegen in EU-Region: neuer MCP-Server-Eintrag, Identifier https://replicate.agenticventures.de/mcp
  4. DNS-Record replicate.agenticventures.de<tunnel-id>.cfargotunnel.com proxied
  5. Image bauen + ECR push + Stack deploy

Phase 3 — Integration in VF Open WebUI (0.25 Tag)

  1. Admin-UI von vf-chat.agenticventures.de → Tools → Add MCP Server
  2. URL: https://replicate.agenticventures.de/mcp, Type: Streamable HTTP, OAuth 2.1
  3. OAuth-Flow durchspielen (mit Andre + Christoph + Marvin)
  4. Smoke: „erstelle ein Bild von einem Logo fuer VF im minimalist style” → ruft replicate_create_prediction(model="black-forest-labs/flux-1.1-pro", ...) → Bild kommt zurueck

Phase 4 — Doku + AVV-Update (0.25 Tag)

  1. Pattern-File open-webui-fargate-bedrock um Replicate-MCP-Section ergaenzen (Beispiel-Setup im UI)
  2. Capability-File intern/capabilities/mcps/mcp-replicate-hosted.md analog mcp-vf-hosted
  3. Capability-File intern/capabilities/repos/mcp-replicate-hosted.md analog
  4. VF-AVV: Subprozessor-Liste um Replicate Inc. erweitern, AVV mit Replicate einholen
  5. DSGVO-Briefing fuer Christoph erweitern: Replicate-Datenflusswege transparent machen
  6. VF-Kunden-File update mit zweitem hosted MCP

Cost

  • Hosting: ~33 €/Mo (gleicher Fargate-Footprint wie mcp-vf-hosted)
  • Replicate-API-Calls: Pass-Through an VF
    • Flux 1.1 Pro: $0.04/Bild
    • SDXL: $0.0025/Bild
    • Image-to-Image (Photon, Flux Fill): $0.04-0.06/Bild
    • Realistic fuer 10 Bilder/Woche pro User × 3 User × 4 Wochen = 120 Bilder/Mo × 5/Mo
    • Bei intensiver Nutzung (Marketing-Material-Generation): kann auf $50-100/Mo gehen

Decision-Forks

ForkEmpfehlungWenn anders
Wer zahlt Replicate?Pass-Through an VF (eigener Account oder unser Account mit Klausel)Wir zahlen + im Recurring-Pricing einkalkulieren
Wo Replicate-API-Token?Eigener VF-spezifischer Token mit Spending-LimitUnser Sammel-Token (Risk: Cost-Vermischung)
Welche Models freigeben?Whitelist: Flux 1.1 Pro, SDXL, ggf. Recraft fuer Vectoralle Models frei (Risk: User waehlt $1/Bild-Model)
Multi-Tenant-Replicate-MCP?nein, ein hosted-MCP-Stack pro Kundewenn 5+ Kunden Image-Gen brauchen, Multi-Tenant via Forward-User-Info-Headers + Token-Mapping

Sicherheits-Notizen

  • Prompt-Injection-Risk ist hier real — User-Prompts gehen direkt in Image-Model. Replicate hat Content-Moderation eingebaut, aber nicht 100% zuverlaessig. Bei Production: GuardMiddleware-Check auf NSFW-Keyword-Whitelist
  • Spending-Limit im Replicate-Dashboard setzen ($50/Mo Initial) — verhindert Cost-Explosion bei Bug oder Missbrauch
  • Rate-Limit im hosted MCP analog mcp-vf-hosted (60/min, 1000/h pro Subject-Hash)
  • Audit-Log pro Image-Gen-Call: Model, Prompt-Length, Cost-Estimate (von Replicate-Response), Output-URL