mcp-vf-hosted (Eigenbau)

Eigenes Projekt unter ~/source/mcps/mcp-vf-hosted/. Python + FastMCP v2. Aktuell AWS Fargate + Cloudflare-Tunnel (Stand 2026-05-11): Stack live in av-production, Service ACTIVE 1/1/0, Health intern 200, Tunnel 4 Connections nach Frankfurt registered, DNS-Cutover offen — mcp-vf.agenticventures.de zeigt noch auf alten Origin (530-Error). Cutover-Befehl bzw. UI-Schritte: _index.

Wofuer

Template um mehrere bestehende stdio-MCPs (mcp-papierkram, mcp-ticketpay, mcp-m365) hinter einem einzigen Custom-Connector-Endpunkt in claude.ai Pro fuer einen Kunden bereitzustellen — ohne lokales Setup beim Kunden, ohne Eigenbau-OAuth, mit EU-Daten-Standort.

Erste Implementierung: Vibe Factory (Andre, 2026-05-02). Wiederverwendbar:

cp -r ~/source/mcps/mcp-vf-hosted ~/source/mcps/mcp-<kunde>-hosted
# pyproject.toml: Name + Description anpassen
# main.py: _SUB_MCP_COMMANDS und _SUB_MCP_ENV anpassen
# Eigenes Scalekit-Resource-Setup, eigenes Railway-Projekt

Tech-Stack

  • FastMCP v2 (Prefect’s Fork) — hat ScalekitProvider, create_proxy(), mount(namespace=...) — das offizielle mcp.server.fastmcp (v1) hat das nicht
  • Sub-MCP-Komposition: Stdio-Subprozess + create_proxy(Client(StdioTransport(...))). API-Drift zwischen v1 und v2 bricht direkten Library-Mount — Proxy isoliert die Welten, Sub-MCPs bleiben unmodifiziert
  • OAuth: Scalekit AuthKit (EU-Region) via FastMCP ScalekitProvider — DCR + PRM out-of-the-box
  • Hosting: Railway EU-West, Cloudflare als CDN/WAF
  • Domain-Pattern: mcp-<kunde>.agenticventures.de

Sicherheits-Schichten

  1. TLS + WAF + IP-Rate (Cloudflare)
  2. OAuth 2.1 Discovery + Token-Issuing + Refresh (Scalekit EU)
  3. JWT-Signature-Validation pro Request (FastMCP ScalekitProvider, JWKS-Cache)
  4. Per-Subject-Rate-Limit + Audit + Kill-Switch (GuardMiddleware, eigener Code, In-Memory Token-Bucket)
  5. Upstream-API-Auth via Sub-MCPs (Tokens als ENV pro Subprozess)

Notfall-Schalter

EMERGENCY_DISABLE=true in Railway-ENV → Restart → alle Tool-Calls 503.

Secrets-Hygiene

  • Alle .env* in .gitignore, gitleaks in CI
  • Secret-Backup: GPG-verschluesselt unter ~/source/mcps/.secrets/<kunde>-mcp-hosting.env.gpg
  • Scalekit-Owner-Login in 1Password mit MFA
  • Quartalsweise Rotation der Upstream-Tokens

Setup

Vollstaendiges Setup-Pattern siehe mcp-vf-hosted.