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)
mcp-papierkramPatch:PAPIERKRAM_EXPOSE_RAW-Env-Flag,_format_404_hint()-Wrapper, Docstring-Upgrade auf 7 list_*-Toolsmcp-vf-hostedWhitelist-Fix + Stack-Env-VarPAPIERKRAM_EXPOSE_RAW=false, neues Image (sha256:ef507aa…) deployed, Task-Rev 12 live- 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 inmcp-vf-hosted/src/mcp_vf_hosted/main.pyimplementiert — 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-Itemspapierkram_offene_posten()— offene Rechnungen + ueberfaellige Belege sortiert nach Faelligkeitpapierkram_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-platformals neue Routine (Lambda + EventBridge-Cron + CDK-Stack) - Wann: Wochentlich Montag 8:00 Berlin
- Was: CloudWatch-Insights-Query ueber
/aws/ecs/default/mcp-vf-hostedund/aws/ecs/default/mcp-whatsappder 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:
| MCP | Audit-Status | Hat raw_* | Hat fragile API-Pfade | Aktion |
|---|---|---|---|---|
| mcp-papierkram | done (Trigger) | ja | ja | done |
| mcp-ticketpay | tbd | tbd | API ist read-only flach — wahrscheinlich n/a | check |
| mcp-m365 | tbd | tbd | Graph-API ist robust, aber Excel-Worksheets-Pfade | check |
| mcp-gsuite | tbd | tbd | Gmail-Labels-API, Calendar | check |
| mcp-calcom | tbd | tbd | tbd | check |
| mcp-whatsapp | tbd | tbd | Meta Cloud API — versionierte Pfade | check |
| mcp-replicate | tbd | tbd | versionierte Model-IDs | check |
| mcp-runway | tbd | tbd | tbd | check |
| mcp-hetzner | tbd (dkruyt-Fork, kein Eigenbau) | n/a | n/a | skip |
| mcp-elevenlabs | n/a (offizieller MCP) | n/a | n/a | skip |
| mcp-lexware, mcp-sevdesk | configured, not active | tbd | tbd | check 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.):
- Item 1 — Aggregations-Tools (~40 Min)
- Item 2 — Error-Digest-Lambda (~1.5h)
- 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
Related
- mcp-best-practices — Source of Truth fuer die Regeln
- papierkram — der MCP der heute den Vorfall hatte
- open-webui-vf — wo der Vorfall passierte
- agents-platform — Hosting fuer Item 2
- Run-Log: 2026-05-15-mcp-audit-sweep (wird in Item 3 erzeugt)