MCP Hardening Pass

Folge-Projekt zum Papierkram-raw_get-Vorfall (15.05.2026). Drei konkrete Arbeitsstraenge die der Vorfall als Pflicht-Schritte aufgezeigt hat, plus die Doku-Verstetigung damit zukuenftige MCPs das Pattern direkt mitbringen.

Source of Truth fuer die Regeln: mcp-best-practices.

Was bereits live ist (vor diesem Projekt erledigt, 2026-05-15 nachmittags)

  1. mcp-papierkram Patch: PAPIERKRAM_EXPOSE_RAW-Env-Flag, _format_404_hint()-Wrapper, Docstring-Upgrade auf 7 list_*-Tools
  2. mcp-vf-hosted Whitelist-Fix + Stack-Env-Var PAPIERKRAM_EXPOSE_RAW=false, neues Image (sha256:ef507aa…) deployed, Task-Rev 12 live
  3. System-Prompt v2.8 fuer vf-sonnet (Papierkram-Tool-Disziplin)

Progressive Disclosure live (2026-05-15 abends)

Root-Cause-Analyse (Stufe 1, 17:30 Uhr): 139 Tools (96 papierkram + 28 sharepoint + 15 ticketpay) im Session-Context → Bedrock Sonnet 4.6 macht ListTools aber KEINEN einzigen CallToolRequest. Mit 1 Tool in Whitelist (papierkram_get_info): CallToolRequest geht sofort durch. CloudWatch-Beweis: Vorher 0 CallToolRequests, nach Whitelist-Reduktion sofort Live.

Fix (Stufe 2, 17:40–18:10 Uhr):

  • search_tools(query, namespace?, detail?) Meta-Tool in mcp-vf-hosted/src/mcp_vf_hosted/main.py implementiert — cached beim ersten Call die komplette 139-Tool-Katalog aus Sub-MCP-Spawns, antwortet mit gefilterten Namen/Schemas on-demand
  • ECR-Push + CDK-Deploy → Image sha256:3386ce3b..., Task-Rev 14 live, Startup-Logs sauber
  • Open-WebUI function_name_filter_list: 16 Core-Tools gesetzt (15 Kern + search_tools)

Validation (18:47 Uhr): User fragt „Was liegt in Papierkram alles drin?” → Modell macht 4 parallele Tool-Calls (papierkram_get_info, list_invoices, list_vouchers, list_companies) ohne Halluzination. Strukturierter Summary-Response mit realen Daten.

Token-Overhead vorher vs. nachher: ~74 kB (139 Tools nackt) → ~10 kB (16 Core-Tools) = -86%.

Drei Folge-Items (dieses Projekt)

Item 1 — Papierkram-Aggregations-Tools

Ziel: Wenn User „Monatsabschluss” / „offene Posten” / „Kundenuebersicht” sagt, faellt das Modell NICHT mehr auf 5 list_*-Chains zurueck.

Tools (in mcp-papierkram):

  • papierkram_monatsabschluss(year, month) — Einnahmen + Ausgaben + Saldo + Top-Items
  • papierkram_offene_posten() — offene Rechnungen + ueberfaellige Belege sortiert nach Faelligkeit
  • papierkram_kunde_uebersicht(company_id) — letzte N Rechnungen + Belege + Projekte + Outstanding

Pattern: Server-side Aggregation mit ~200-300 Token Response. Analog ticketpay_event_bilanz.

Item 2 — Tool-Error-Digest Lambda

Ziel: Wir sehen die naechste raw_get-Halluzination / API-Drift, bevor User meckert.

Spezifikation:

  • Wo: agents-platform als neue Routine (Lambda + EventBridge-Cron + CDK-Stack)
  • Wann: Wochentlich Montag 8:00 Berlin
  • Was: CloudWatch-Insights-Query ueber /aws/ecs/default/mcp-vf-hosted und /aws/ecs/default/mcp-whatsapp der letzten 7 Tage → Top-5 failing tools + sample requests
  • Output: Markdown-Mail an hello@marvinkuehlmann.com via existierender gsuite-Lambda-Layer
  • Cost: ~1 Cent/Monat (Lambda + Insights-Scan, sehr selten)

Item 3 — Audit-Sweep ueber die anderen Eigenbau-MCPs

Ziel: Die drei Patches (raw-gating, error-hints, reiche Docstrings) auf alle anderen MCPs anwenden wo passend.

MCP-Liste mit Audit-Status:

MCPAudit-StatusHat raw_*Hat fragile API-PfadeAktion
mcp-papierkramdone (Trigger)jajadone
mcp-ticketpaytbdtbdAPI ist read-only flach — wahrscheinlich n/acheck
mcp-m365tbdtbdGraph-API ist robust, aber Excel-Worksheets-Pfadecheck
mcp-gsuitetbdtbdGmail-Labels-API, Calendarcheck
mcp-calcomtbdtbdtbdcheck
mcp-whatsapptbdtbdMeta Cloud API — versionierte Pfadecheck
mcp-replicatetbdtbdversionierte Model-IDscheck
mcp-runwaytbdtbdtbdcheck
mcp-hetznertbd (dkruyt-Fork, kein Eigenbau)n/an/askip
mcp-elevenlabsn/a (offizieller MCP)n/an/askip
mcp-lexware, mcp-sevdeskconfigured, not activetbdtbdcheck at activation time

Output pro MCP: Ein Eintrag im Audit-File intern/runs/2026-05-15-mcp-audit-sweep.md mit Status ok / gap / n/a pro Checklisten-Punkt.

Reihenfolge

Heute (15.05.):

  1. Item 1 — Aggregations-Tools (~40 Min)
  2. Item 2 — Error-Digest-Lambda (~1.5h)
  3. Item 3 — Audit-Sweep (Dokumentation, ~1h)

Beim Audit gefundene konkrete Gaps werden NICHT in dieser Session gefixt — sie wandern als Folge-TODOs in operations/action-items.md, ausser sie sind so klein dass es sich nicht lohnt sie zu vertaggen.

Acceptance-Kriterien

  • papierkram_monatsabschluss(2026, 5) liefert in VF-WebUI einen Aggregations-Report ohne 5 list_*-Chains
  • papierkram_offene_posten() liefert sortierte ueberfaellige Posten in einem Call
  • Tool-Error-Digest-Lambda laeuft erfolgreich gegen Test-Payload und schickt Mail
  • Audit-File enthaelt Status fuer alle 8 Eigenbau-MCPs
  • mcp-best-practices hat alle drei Patterns als wiederverwendbare Templates

1 Datei in diesem Ordner.