| name | mcp-generate |
| description | Use when user says "mcp:generate", "generiere emails", "email generation", "MCP workflow", "generate emails for campaign", or triggers /mcp:generate. |
MCP Generate โ AI-Variablen-Generierung
Dieser Skill orchestriert die vollautomatische AI-Variablen-Generierung fuer Leads via MCP Business Tools. Claude generiert AI-Variablen basierend auf Research, Qualification und Screenshots, und speichert sie via save_lead_variables. Email-Body und Subject werden NICHT durch diesen Skill erzeugt โ sie sind in der Email-Sequenz hardcoded und werden beim CSV-Export live mit den Variablen gerendert.
Hinweis zur Parallelisierung: Wenn dein Client parallele Subagents unterstuetzt (z.B. Claude Code), spawne pro Lead einen Subagent wie beschrieben. Andernfalls arbeite die Leads sequentiell mit exakt denselben Schritten ab โ das Ergebnis ist identisch, nur langsamer.
Workflow-Uebersicht
1. list_campaigns -> Kampagne identifizieren (oder campaign_id aus Argument)
|
2. list_leads(campaign_id, limit={batch_size})
-> {batch_size} Leads mit Basisdaten (~0.5 KB/Lead)
|
3. Fuer jeden Lead: Sub-Agent spawnen (parallel, bis zu {batch_size} gleichzeitig)
-> Jeder Agent: get_lead_data() -> generiert Variablen -> save_lead_variables()
|
4. Batch-Report: "Batch 1/N done, X/Y leads processed"
|
5. Naechster Batch: list_leads erneut (remaining > 0?)
|
6. Fertig: "Y Leads verarbeitet, Variablen bereit fuer Review"
Aufruf
| Eingabe | Verhalten |
|---|
/mcp:generate | Zeigt Kampagnen via list_campaigns, User waehlt |
/mcp:generate 76 | Startet direkt fuer Kampagne 76 |
generiere emails fuer kampagne 76 | Startet direkt fuer Kampagne 76 |
Schritt-fuer-Schritt Anleitung
Phase 1: Kampagne bestimmen
Wenn KEINE campaign_id als Argument uebergeben wurde:
- Rufe
list_campaigns auf (MCP Tool)
- Zeige dem User die Kampagnen mit
leadCounts.needs_email_generation > 0
- Frage: "Fuer welche Kampagne soll ich Variablen generieren?"
- Merke dir die campaign_id
Wenn campaign_id als Argument uebergeben wurde: Direkt zur Batch-Groesse-Abfrage.
Batch-Groesse abfragen:
Frage den User:
"Wie viele Leads pro Batch? (Default: 10)"
- 10 (Standard)
- 50 (Schneller, 50 parallele Agents)
- 100 (Aggressiv)
- 200 (Maximum)
Merke dir die Antwort als {batch_size}. Wenn der User einfach Enter drueckt oder nichts sagt: batch_size = 10.
Dann weiter zu Phase 2.
Phase 2: Leads laden (Batch)
Rufe auf:
list_leads(
campaign_id = <ID>,
limit = {batch_size}
)
Merke dir aus der Response:
campaign.name und campaign.id
total (Gesamtzahl zu verarbeitender Leads)
remaining (verbleibend nach diesem Batch)
- Die
leads[] mit IDs und Basisdaten
Wenn leads leer ist: "Keine Leads zur Verarbeitung. Alle Leads haben bereits generierte Variablen." -> STOP.
Phase 3: Sub-Agents spawnen (parallel)
Fuer JEDEN Lead im Batch einen Agent spawnen. Verwende das Agent-Tool mit:
subagent_type: nicht gesetzt (general-purpose)
mode: "bypassPermissions"
run_in_background: true (fuer echte Parallelitaet)
name: "gen-{lead.company}" (gekuerzt auf 20 Zeichen)
description: "Generate variables for {lead.company}"
WICHTIG: Spawne ALLE Agents eines Batches in EINEM Message-Block, damit sie parallel laufen.
Sub-Agent Prompt Template
Fuer jeden Lead den folgenden Prompt zusammenbauen. Ersetze die Platzhalter mit den tatsaechlichen Daten aus der list_leads Response:
Du generierst AI-Variablen fuer einen Lead via MCP Tools.
KAMPAGNE: {campaign.name} (ID: {campaign.id})
LEAD: {lead.company} (ID: {lead.id})
## Schritte
1. Rufe get_lead_data(campaign_id={campaign.id}, lead_id={lead.id}) auf
2. Lies den emailGeneration.systemPrompt sorgfaeltig โ er definiert Ton, Stil und Kontext
3. Analysiere Research, Qualification und Custom Attributes
4. Analysiere die Screenshots visuell (falls URLs vorhanden und dein Client Bilder laden kann)
5. Generiere fuer JEDE Variable in emailGeneration.variables[] den Text gemaess ihrem Prompt
6. REVIEW โ Pruefe JEDE generierte Variable gegen diese Checkliste:
- Umlaute korrekt geschrieben? (ร/ร/ร/รค/รถ/รผ/ร โ NIEMALS AE/OE/UE/ae/oe/ue/ss)
- Keine internen Metriken erwaehnt? (SEO-Score, Overall-Score, Fit-Level, Need-Flags, Dimension-Scores, Opportunity Score, ranked Keyword)
- Keine HTTPS/SSL-Behauptungen? ("ohne HTTPS", "kein SSL" etc.)
- Kein harscher Deficit-Sprech? (ausbaufรคhig, nicht erreichbar, fehlerhaft, unzureichend, kaum nutzbar, schwach, schlecht)
- Anrede konsistent ueber alle Variablen? (durchgehend formal ODER team-basiert, nie gemischt)
- Kein "vorallem"? (korrekt: "vor allem")
- Keine Leerzeilen am Anfang oder Ende einer Variable?
- Jede Variable unter 10.000 Zeichen?
Falls ein Kriterium verletzt: Korrigiere die Variable und pruefe erneut.
7. Speichere via save_lead_variables(campaign_id={campaign.id}, lead_id={lead.id}, variables=JSON-String)
WICHTIG: variables ist ein JSON-STRING. ALLE Variablen aus emailGeneration.expectedOutput muessen enthalten sein.
Phase 4: Screenshot-Handling
Screenshots sind in der lead.screenshots[] Liste als relative URLs enthalten (z.B. /api/research-artifacts/abc-123), Basis ist die ListM8-Server-URL.
Wenn dein Client Bilder von URLs laden und visuell analysieren kann: Screenshots laden und in die Generierung einbeziehen. Andernfalls: Screenshots ueberspringen und nur auf Basis von Research-Text, Qualification und Custom Attributes generieren โ im Report vermerken: "Screenshots nicht einbezogen, Text-basierte Generierung."
Phase 5: Ergebnisse sammeln & Report
Warte bis ALLE Sub-Agents des Batches fertig sind (sie laufen im Background โ du wirst benachrichtigt).
Zaehle:
- Erfolgreiche Generierungen (save_lead_variables returned
status: "success")
- Fehler (save_lead_variables returned
status: "error" oder Agent-Fehler)
Zeige Batch-Report:
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
Batch {batch_nr}/{total_batches} abgeschlossen
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
Verarbeitet: {processed}/{total_leads} Leads
Erfolg: {success_count} | Fehler: {error_count}
Verbleibend: {remaining}
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
Phase 6: Naechster Batch oder Abschluss
Wenn remaining > 0: Zurueck zu Phase 2 (naechster list_leads Aufruf).
Wenn remaining == 0 oder keine Leads mehr: Zeige Abschluss-Report:
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
MCP Generate abgeschlossen
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
Kampagne: {campaign.name} (ID: {campaign.id})
Gesamt verarbeitet: {total_processed} Leads
Erfolg: {total_success} | Fehler: {total_errors}
Status: Verarbeitete Leads auf "pending_review" gesetzt
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
Naechster Schritt: /mcp:verify โ Variablen pruefen und freigeben
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
MCP Tool Reference
list_campaigns
Keine Parameter. Gibt alle Kampagnen des Users zurueck.
Response-Felder:
campaigns[].id โ Kampagnen-ID
campaigns[].name โ Name
campaigns[].leadCounts.needs_email_generation โ Anzahl Leads in der Generierungs-Queue
campaigns[].leadCounts.pending_review โ Anzahl Leads mit generierten, noch nicht freigegebenen Variablen
campaigns[].leadCounts.approved / .rejected โ Final-Status
campaigns[].aiVariables[] โ Konfigurierte AI-Variablen (Name + sortOrder)
list_leads
| Parameter | Typ | Default | Beschreibung |
|---|
campaign_id | int | required | Kampagnen-ID |
limit | int | 10 | Anzahl Leads (1-200) |
fit_level | string | "qualified" | Qualification-Filter |
research_status | string | "researched" | Research-Status-Filter |
campaign_status | string | "processing" | Campaign-Status-Filter |
qualification_status | string | '' | Qualification-Status-Filter: '' (alle), 'pending' (inkl. nie qualifiziert), 'processing', 'completed', 'failed' |
Gibt nur Basisdaten zurueck: id, email, company, website, city, phoneNumber, score, qualification (fitLevel, category, summary).
WICHTIG: Der Default campaign_status="processing" ist korrekt fuer den Generierungs-Workflow (= Leads mit Status "Ausstehend").
get_lead_data
| Parameter | Typ | Default | Beschreibung |
|---|
campaign_id | int | required | Kampagnen-ID |
lead_id | int | required | Lead-ID |
Gibt vollen Generierungs-Context zurueck:
- Stammdaten (email, company, website, city, phoneNumber, score)
qualification (fitLevel, category, summary, snapshot)
research (text, bestEmail, decisionMaker, contactRecommendation)
screenshots[] (type, viewport, url, label)
customAttributes (key-value Paare)
emailGeneration.systemPrompt โ Der aufgeloeste System-Prompt
emailGeneration.variables[] โ Variablen mit aufgeloesten Prompts
emailGeneration.expectedOutput โ JSON-Schema der erwarteten Ausgabe (Variablen-Namen)
save_lead_variables
| Parameter | Typ | Default | Beschreibung |
|---|
campaign_id | int | required | Kampagnen-ID |
lead_id | int | required | Lead-ID |
variables | string | required | JSON-String mit generierten Werten |
variables-Format: "{\"hallo\": \"...\", \"intro\": \"...\"}"
Verhalten: Persistiert eine neue LeadAIVariableValue-Version pro Variable (vorherige Versionen bleiben als Historie erhalten). Setzt LeadCampaignStatus.status = pending_review. Beruehrt KEINE Email-Steps (Body/Subject werden beim CSV-Export live aus den Variablen gerendert).
Success-Response:
{
"status": "success",
"lead_id": 456,
"campaign_id": 123,
"version": 1,
"variables_saved": 2,
"campaign_status": "pending_review"
}
Error-Response bei fehlenden Variablen:
{
"status": "error",
"message": "Variable(s) missing from submission: 'intro'",
"expected_variables": ["hallo", "intro"],
"received_variables": ["hallo"]
}
Verification-Tools (siehe /mcp:verify)
Die folgenden Tools werden im Verification-Workflow verwendet, NICHT in der Generierung:
- get_lead_variables โ laedt aktuelle Variablen-Werte (Name, Wert, Status, generatedAt) zur Pruefung
- approve_lead_variables โ gibt Variablen frei (
LeadCampaignStatus = approved, ready fuer CSV-Export)
- reject_lead_variables โ lehnt Variablen ab mit
reason (LeadCampaignStatus = rejected, vom CSV-Export ausgeschlossen)
Details: siehe /mcp:verify Skill.
Fehlerbehandlung
| Fehler | Aktion |
|---|
list_leads gibt leere leads[] | "Keine Leads in Queue" -> STOP |
| Sub-Agent save_lead_variables Error | Fehler notieren, weitermachen mit naechstem Lead |
| Sub-Agent Timeout/Crash | Als Fehler zaehlen, im Report erwaehnen |
| Alle Agents eines Batches fehlgeschlagen | Warnung ausgeben, User fragen ob fortfahren |
| Netzwerk/MCP-Verbindungsfehler | 1x Retry, dann STOP mit Fehlermeldung |
Kein automatischer Retry einzelner Leads โ fehlgeschlagene Leads koennen spaeter mit /mcp:generate erneut verarbeitet werden (sie haben noch keinen pending_review-Status und tauchen wieder in list_leads auf).
Wichtige Hinweise
- Voll autonom โ Keine Rueckfragen waehrend der Generierung. Durchlaufen bis fertig.
- {batch_size}er-Batches โ {batch_size} Leads pro Batch (vom User gewaehlt, Default 10, Maximum 200).
- Parallel โ Alle Agents eines Batches gleichzeitig spawnen (ein Message-Block).
- Idempotent โ Leads mit bereits generierten Variablen tauchen nicht mehr in list_leads (default-filter
campaign_status="processing") auf.
- Versionierung โ Jeder save_lead_variables-Aufruf erzeugt eine neue Version, aeltere Versionen bleiben als Historie erhalten.