# MCP Personalizer

> Generates short personalization hooks, icebreakers, salutations, and vocatives for cold email campaigns in Leadspicker projects through the Leadspicker MCP server, using GPT-4o-Mini behind the scenes. Use whenever the user wants to create personalized opening lines, hooks, greetings, salutations, vocative forms, or any short text fragment for outreach — for example "create a website hook", "write an icebreaker from LinkedIn posts", "generate Czech salutation", "personalize the opening line", "create vocative from first name", "napiš oslovení", "vytvoř personalizaci", "úvodní věta", "hook z webu", "icebreaker z příspěvků", or any request to add a personalization column. Triggers on personalization, opening lines, hooks, icebreakers, greetings, formal address, vocative case, name declension, or multi-language salutations in the context of Leadspicker.

- Skill: `tomasblatak/mcp-personalizer` (Agent Skill)
- Install (CLI): `npx skillmds@latest add tomasblatak/mcp-personalizer`
- Raw SKILL.md: https://api.skillmd.com/api/skills/tomasblatak/mcp-personalizer/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: AI & ML
- Author: tomasblatak (https://skillmd.com/u/tomasblatak)
- Updated: 2026-09-22
- Page: https://skillmd.com/skills/tomasblatak/mcp-personalizer

---


# Leadspicker Personalizer (MCP)

Generates short personalization fragments for cold email campaigns in Leadspicker projects
through the Leadspicker MCP server. Each column runs GPT-4o-Mini on every contact and
produces a short sentence fragment or a grammar-correct salutation.

This skill is a companion to **mcp-data-enrichment** (provides input data) and
**mcp-classification** (filters contacts).

---

## Core philosophy

**Leadspicker never generates full messages — only short parts.**

Every personalization output is a short sentence fragment (typically **14–16 words**). This
keeps GPT-4o-Mini focused, reduces hallucination, and gives the user full control over the
final message structure. The exact word limit can be adjusted per request.

Examples:

- `"I saw your company specializes in AI-powered sales automation"` (website hook)
- `"I noticed your recent post about hiring challenges in tech"` (icebreaker)
- `"Dobrý den, pane Nováku"` (Czech salutation)
- `"Tomáši"` (Czech first-name vocative)

These fragments are inserted into message templates alongside static text the user controls.

---

## MCP tools used

| MCP tool                              | Purpose                                                                                                               |
| ------------------------------------- | --------------------------------------------------------------------------------------------------------------------- |
| `mcp__leadspicker__list_projects`     | Look up project by name (`search_query`) or list recent (`order_by="last_active"`)                                    |
| `mcp__leadspicker__get_project`       | Fetch project detail by `project_id`                                                                                  |
| `mcp__leadspicker__list_contacts`     | Fetch contact rows for context (`page=1, page_size=5` for previews)                                                   |
| `mcp__leadspicker__preview_ai_prompt` | Submit personalization prompt for preview on first 5 rows. `is_boolean=False`, `magic_column_type="ai_custom_column"` |
| `mcp__leadspicker__enrich_contacts`   | Launch full personalization. `magic_column_type="ai_custom_column"`, `is_boolean=False`                               |

---

## User input

| Parameter               | Description                                   | Example                           |
| ----------------------- | --------------------------------------------- | --------------------------------- |
| `project_id`            | Target Leadspicker project (resolved by name) | `29842`                           |
| Personalization request | What hook or greeting to generate             | `"website hook in Czech"`         |
| `column_name`           | New column name                               | `"Website Hook - CZ"`             |
| Output language         | Output language (default English)             | `"Czech"`, `"German"`, `"Polish"` |

### Project resolution

**Display format:** always render projects as **`{name} (#{id})`**.

1. **User named a project** → `mcp__leadspicker__list_projects(search_query="{name}", limit=5)`. Confirm; if multiple, ask which one.
2. **No named project** → `mcp__leadspicker__list_projects(order_by="last_active", limit=20)` and ask the user to pick.

If the user did not provide `column_name`, generate one from the type + language (e.g.
`"Website Hook"`, `"CZ Salutation"`, `"Icebreaker - DE"`).

---

## System prompt — fixed, do not modify

All personalization columns use **string mode** (`is_boolean=False`).

```
Server forces: {"result": "response"}
```

**Implications:**

- NEVER include output-format instructions — the system prompt enforces JSON.
- Just describe the task, rules, and input variables.
- Output is wrapped in `{"result": "..."}` automatically.

---

## Personalization types

### A. Company-based hooks

Short sentences referencing what the company does.

#### Website hook

References what the company does based on website content. **Always include
`{{linkedin_company_description}}` as a fallback** — when website data is empty, LinkedIn
fills the gap.

- Variables: `{{company_name}}`, `{{website_text_summary}}`, `{{linkedin_company_description}}`
- Typical output: `"I saw your company helps retailers optimize their supply chain"`

#### LinkedIn company hook

References the company's LinkedIn description (mission / positioning).

- Variables: `{{company_name}}`, `{{linkedin_company_description}}`
- Typical output: `"I noticed your team is building AI tools for sales teams"`

#### Combined company hook

Uses both website and LinkedIn for richest context.

- Variables: `{{company_name}}`, `{{company_website}}`, `{{linkedin_company_description}}`, `{{website_text_summary}}`

### B. Person-based hooks

#### Experience hook

References the person's role / background / career trajectory.

- Variables: `{{full_name}}`, `{{position}}`, `{{linkedin_about_me}}`, `{{present_experiences}}`
- Typical output: `"With your experience leading sales teams at enterprise companies"`

#### LinkedIn posts icebreaker

References something the person recently posted on LinkedIn.

- Variables: `{{linkedin_latest_posts}}`
- Typical output: `"I noticed your post about the challenges of scaling outbound"`

#### Education / skills hook

References education or specific expertise.

- Variables: `{{full_name}}`, `{{education_summary}}`, `{{linkedin_skills}}`
- Typical output: `"With your background in data science and machine learning"`

### C. Language-specific columns

#### Salutation — formal greeting with declined name

- Variables: `{{full_name}}`, `{{position}}`
- Czech: `"Dobrý den, pane Nováku"` / `"Dobrý den, paní Nováková"`
- German: `"Sehr geehrter Herr Schmidt"` / `"Sehr geehrte Frau Müller"`
- Polish: `"Szanowny Panie Kowalski"` / `"Szanowna Pani Kowalska"`

#### First-name vocative — declined first name

- Variables: `{{first_name}}`
- Czech: `"Tomáši"` from Tomáš, `"Kateřino"` from Kateřina
- Polish: `"Tomaszu"` from Tomasz, `"Katarzyno"` from Katarzyna

#### Last-name vocative — declined last name with title

- Variables: `{{last_name}}`, `{{full_name}}`, `{{position}}`
- Czech: `"pane Blaťáku"` / `"paní Blaťáková"`

---

## Smart variable selection

| Personalization           | Variables                                                                                                 |
| ------------------------- | --------------------------------------------------------------------------------------------------------- |
| Website hook              | `{{company_name}}`, `{{website_text_summary}}`, `{{linkedin_company_description}}`                        |
| LinkedIn company hook     | `{{company_name}}`, `{{linkedin_company_description}}`                                                    |
| Combined company hook     | `{{company_name}}`, `{{company_website}}`, `{{linkedin_company_description}}`, `{{website_text_summary}}` |
| Experience hook           | `{{full_name}}`, `{{position}}`, `{{linkedin_about_me}}`, `{{present_experiences}}`                       |
| LinkedIn posts icebreaker | `{{linkedin_latest_posts}}`                                                                               |
| Education / skills hook   | `{{full_name}}`, `{{education_summary}}`, `{{linkedin_skills}}`                                           |
| Salutation (any language) | `{{full_name}}`, `{{position}}`                                                                           |
| First-name vocative       | `{{first_name}}`                                                                                          |
| Last-name vocative        | `{{last_name}}`, `{{full_name}}`, `{{position}}`                                                          |

---

## Prompt-writing rules

1. **Word limit always.** Every prompt must contain: "Keep your output under 16 words." Single most important rule — controls hallucination.
2. **Natural tone.** Should sound like something a human would write. Never salesy.
3. **Sentence fragment, not full sentence.** Hooks are part of a larger message.
4. **Fallback for missing data.** "If there is not enough information, return empty string."
5. **No output-format instructions.** System prompt handles JSON.
6. **One task per prompt.** Don't combine hook + salutation in one column.
7. **Language instruction.** For non-English output, append at the end: `"Write your output in {language}."`

### Hook-specific rules

- Reference something **specific** from the input — never generic.
  - Bad: "I see your company is doing great things."
  - Good: "I saw your company helps SaaS teams reduce churn with AI."
- Start with natural openers: "I saw...", "I noticed...", "With your...", "Given your...".
- Don't add a transition phrase — the user controls what follows.
- Focus on business-relevant content; skip vacations / birthdays.

### Vocative / salutation rules

- Include explicit declension rules with examples in the prompt.
- Include gender-detection logic (name endings, position keywords).
- Czech: masculine names typically end in consonant, feminine in -a / -á / -e.
- Provide fallback for ambiguous names — use the more formal / neutral option.
- Never use diminutive forms — always formal / standard vocative.

---

## Prompt templates

### Company website hook

**`column_name`: `Website Hook`** (or `Website Hook - {LANG}`) &nbsp;·&nbsp; **`is_boolean=False`**

⚠️ Always include `{{linkedin_company_description}}` alongside `{{website_text_summary}}`.

```
Write a short personalization sentence for a cold email that references what this company does.

Rules:
- Keep your output under 16 words
- Start with "I saw" or "I noticed" followed by a specific reference to the company's activity
- Use the most interesting and specific detail from the available data
- Reference a product, service, market, technology, or initiative — be concrete
- Do NOT be generic (no "I see your company is doing great things")
- Do NOT include a call to action or transition phrase
- The tone should be natural and conversational, not salesy
- If there is not enough information, return empty string

Input:
- Company Name: {{company_name}}
- Company Website Summary: {{website_text_summary}}
- LinkedIn Company Description: {{linkedin_company_description}}
```

For non-English output, append at the end:

```
Write your output in {language}.
```

Native-language opener equivalents:

- German: "Ich habe gesehen" / "Mir ist aufgefallen"
- Polish: "Zauważyłem" / "Zauważyłam"
- Czech: "Všiml jsem si" / "Zaujalo mě"

### LinkedIn company hook

**`column_name`: `Company Hook`** &nbsp;·&nbsp; **`is_boolean=False`**

```
Write a short personalization sentence for a cold email that references this company's focus or mission based on their LinkedIn description.

Rules:
- Keep your output under 16 words
- Start with "I noticed" or "I saw" followed by a specific reference to the company
- Reference their mission, product focus, or market positioning
- Do NOT be generic or vague
- Do NOT include a call to action or transition phrase
- The tone should be natural and conversational, not salesy
- If there is not enough information, return empty string

Input:
- Company Name: {{company_name}}
- LinkedIn Company Description: {{linkedin_company_description}}
```

### Person experience hook

**`column_name`: `Experience Hook`** &nbsp;·&nbsp; **`is_boolean=False`**

```
Write a short personalization sentence for a cold email that references this person's professional background or current role.

Rules:
- Keep your output under 16 words
- Start with "With your experience" or "Given your background" or similar natural opener
- Reference something specific from their role, expertise, or career focus
- Do NOT mention the person's name in the output
- Do NOT be generic
- Do NOT include a call to action or transition phrase
- Focus on business-relevant aspects of their experience
- If there is not enough information, return empty string

Input:
- Position: {{position}}
- LinkedIn About Me: {{linkedin_about_me}}
- Present Positions Summary: {{present_experiences}}
```

### LinkedIn posts icebreaker

**`column_name`: `Icebreaker`** &nbsp;·&nbsp; **`is_boolean=False`**

```
Write a personalized icebreaker sentence for a cold email based on the person's latest LinkedIn post.

Rules:
- Keep your output under 16 words
- Start with "I noticed" or "I saw"
- If the input is a personal post, use "I noticed on your LinkedIn..."
- If the input starts with "Company post:", use "I noticed on your company LinkedIn..."
- Focus on business-related content (product launches, insights, industry opinions)
- Skip personal posts about vacations, birthdays, hobbies — if only personal content exists, return empty string
- The tone should be natural and not salesy
- Do NOT include a call to action or transition phrase
- If the input is empty or has no meaningful business content, return empty string

Input:
- LinkedIn Latest Posts: {{linkedin_latest_posts}}
```

### Education / skills hook

**`column_name`: `Skills Hook`** &nbsp;·&nbsp; **`is_boolean=False`**

```
Write a short personalization sentence for a cold email that references this person's education or specific expertise.

Rules:
- Keep your output under 16 words
- Start with "With your background in" or "Given your expertise in" or similar natural opener
- Reference a specific field of study, skill, or area of expertise
- Do NOT mention the person's name in the output
- Do NOT be generic
- Do NOT include a call to action or transition phrase
- If there is not enough information, return empty string

Input:
- Education Summary: {{education_summary}}
- LinkedIn Skills: {{linkedin_skills}}
```

---

## Language-specific templates

### Czech salutation

**`column_name`: `CZ Salutation`** &nbsp;·&nbsp; **`is_boolean=False`**

```
Generate a formal Czech salutation for a business email.

Your task:
1. Determine the person's gender from their name and job title
2. Create the correct formal greeting in Czech

Gender detection rules:
- Feminine indicators: first name ends in -a, -e, or -ie (Jana, Marie, Kateřina, Lucie); last name ends in -ová, -á (Nováková, Černá)
- Masculine indicators: first name ends in a consonant or -o (Jan, Tomáš, Michal, Marek); last name without -ová/-á suffix
- Position can help: "ředitelka", "manažerka", "náměstkyně" indicate female; "ředitel", "manažer", "náměstek" indicate male
- If ambiguous, default to masculine form

Czech salutation rules:
- Masculine: "Dobrý den, pane" + last name in vocative case
  - -ák → -áku (Novák → Nováku, Dvořák → Dvořáku)
  - -ek → -ku (Voříšek → Voříšku, Havlíček → Havlíčku)
  - -ec → -če (Němec → Němče)
  - -ský/-cký → unchanged (Novotný → Novotný)
  - -ka → -ko (Procházka → Procházko, Růžička → Růžičko)
  - -da → -do (Svoboda → Svobodo)
  - general consonant → add -e (Vlach → Vlache)
- Feminine: "Dobrý den, paní" + last name unchanged (Nováková → Nováková)

Return only the salutation, nothing else.
Examples: "Dobrý den, pane Nováku", "Dobrý den, paní Dvořáková", "Dobrý den, pane Blaťáku"

If the name is not recognizable or empty, return empty string.

Input:
- Full Name: {{full_name}}
- Position: {{position}}
```

### Czech first-name vocative

**`column_name`: `CZ First Name Vocative`** &nbsp;·&nbsp; **`is_boolean=False`**

```
You are an expert in Czech grammar, specifically declension rules for the vocative case (5. pád).

Given a Czech first name:
1. Add any missing diacritics (háčky and čárky)
2. Transform the name into the correct vocative form

Masculine vocative rules:
- -áš → -áši (Tomáš → Tomáši, Lukáš → Lukáši)
- -an → -ane (Jan → Jane, Štěpán → Štěpáne)
- -el → -ele (Michal → Michale, Pavel → Pavle)
- -ek → -ku (Marek → Marku, Zdeněk → Zdeňku)
- -in → -ine (Martin → Martine)
- -ír → -íře (Vladimír → Vladimíre)
- -ej → -eji (Ondřej → Ondřeji, Matěj → Matěji)
- -tr → -tře (Petr → Petře)
- -ip → -ipe (Filip → Filipe)
- -ub → -ube (Jakub → Jakube)
- -id → -ide (David → Davide)
- -os → -oši (Miloš → Miloši)
- -áv → -áve (Václav → Václave)
- -o ending: stays the same (Ivo → Ivo)

Feminine vocative rules:
- -a → -o (Jana → Jano, Petra → Petro, Simona → Simono, Kateřina → Kateřino)
- -ie/-e → stays the same (Marie → Marie, Lucie → Lucie)

IMPORTANT: Use only the standard (official) vocative form, never diminutives.
- "Marie" → "Marie" (NOT "Maruško")
- "Simona" → "Simono" (NOT "Simonko")
- "Kateřina" → "Kateřino" (NOT "Katko")

Return only the vocative form, nothing else. If no name is provided, return empty string.

Input:
- First Name: {{first_name}}
```

### Czech last-name vocative

**`column_name`: `CZ Last Name Vocative`** &nbsp;·&nbsp; **`is_boolean=False`**

```
You are an expert in Czech grammar. Generate the vocative form (5. pád) of a Czech last name with the appropriate title (pane/paní).

Your task:
1. Determine the person's gender from their full name and position
2. Apply the correct vocative declension to the last name
3. Return the title + declined last name

Gender detection:
- Feminine: first name ends in -a/-e/-ie (Jana, Marie, Lucie); last name ends in -ová/-á (Nováková)
- Masculine: first name ends in consonant/-o (Jan, Tomáš, Michal); last name without -ová
- Position keywords: -ka/-kyně suffix = female (manažerka, ředitelka), no suffix = male (manažer, ředitel)

Masculine last-name vocative rules:
- -ák → -áku (Novák → Nováku, Dvořák → Dvořáku, Blaťák → Blaťáku)
- -ek → -ku (Havlíček → Havlíčku, Voříšek → Voříšku)
- -ec → -če (Němec → Němče)
- -ík → -íku (Sedlačík → Sedlačíku)
- -ka → -ko (Procházka → Procházko, Růžička → Růžičko)
- -da → -do (Svoboda → Svobodo)
- -ý/-í → unchanged (Novotný → Novotný, Malý → Malý)
- general consonant → add -e (Vlach → Vlache)
- Output format: "pane {vocative_last_name}"

Feminine last-name rules:
- Keep the last name unchanged (nominative = vocative)
- Output format: "paní {last_name}"

Return only the title + last name (e.g., "pane Nováku" or "paní Dvořáková"), nothing else.
If the name is not recognizable or empty, return empty string.

Input:
- Last Name: {{last_name}}
- Full Name: {{full_name}}
- Position: {{position}}
```

### Polish salutation

**`column_name`: `PL Salutation`** &nbsp;·&nbsp; **`is_boolean=False`**

```
Generate a formal Polish salutation for a business email.

Your task:
1. Determine the person's gender from their first name and last name
2. Create the correct formal greeting in Polish

Gender detection rules:
- Feminine indicators: first name ends in -a (Anna, Katarzyna, Monika, Agnieszka, Magdalena, Joanna, Ewa, Dorota, Aleksandra, Natalia); last name ends in -ska, -cka, -dzka, -wska (Kowalska, Nowacka)
- Masculine indicators: first name ends in a consonant or -o (Jan, Tomasz, Michał, Marek, Piotr, Krzysztof, Andrzej, Adam); last name ends in -ski, -cki, -dzki, -wski or consonant (Kowalski, Nowak)
- If ambiguous, default to masculine form

Polish salutation format:
- Male: "Szanowny Panie" + last name in nominative (unchanged)
  - Kowalski → "Szanowny Panie Kowalski"
- Female: "Szanowna Pani" + last name in nominative (unchanged)
  - Kowalska → "Szanowna Pani Kowalska"

Extract the last name from the full name (last word in the name).

Return only the salutation, nothing else.
Examples: "Szanowny Panie Kowalski", "Szanowna Pani Nowak"

If the name is not recognizable or empty, return empty string.

Input:
- Full Name: {{full_name}}
- Position: {{position}}
```

### German salutation

**`column_name`: `DE Salutation`** &nbsp;·&nbsp; **`is_boolean=False`**

```
Generate a formal German salutation for a business email.

Your task:
1. Determine the person's gender from their first name
2. Create the correct formal greeting in German

Gender detection rules:
- Common male first names: Hans, Peter, Thomas, Michael, Stefan, Andreas, Martin, Marco, Alexander, David, Daniel, Christian, Markus, Frank, Klaus, Jürgen, Wolfgang, Bernd, Ralf, Uwe, Dirk, Oliver, Patrick, Sven, Tobias, Florian, Matthias, Christoph
- Common female first names: Anna, Maria, Marie, Claudia, Sabine, Petra, Monika, Susanne, Andrea, Karin, Julia, Sandra, Nicole, Katharina, Stefanie, Birgit, Heike, Martina, Simone, Christina, Laura, Lisa, Sarah, Elena, Nadine, Anja, Tanja, Silke, Melanie
- Names ending in -a, -e, -ie, -ine are typically female
- Names ending in consonant are typically male
- If ambiguous, use "Sehr geehrte/r" as neutral form

German salutation format:
- Male: "Sehr geehrter Herr {last_name}"
- Female: "Sehr geehrte Frau {last_name}"
- Last name stays unchanged (no declension in German)

Extract the last name from the full name (last word in the name).

Return only the salutation, nothing else.
Examples: "Sehr geehrter Herr Schmidt", "Sehr geehrte Frau Müller"

If the name is not recognizable or empty, return empty string.

Input:
- Full Name: {{full_name}}
- Position: {{position}}
```

### Generic salutation template (any language)

When the user requests a salutation in a language not covered above:

```
Generate a formal {language} salutation for a business email.

Your task:
1. Determine the person's gender from their name and job title
2. Create the correct formal greeting in {language}

{LANGUAGE_SPECIFIC_GENDER_RULES}
{LANGUAGE_SPECIFIC_SALUTATION_FORMAT}

Return only the salutation, nothing else.
If the name is not recognizable or empty, return empty string.

Input:
- Full Name: {{full_name}}
- Position: {{position}}
```

Sample formats:

- **French:** `"Cher Monsieur {last_name}"` / `"Chère Madame {last_name}"` (no declension)
- **Spanish:** `"Estimado Sr. {last_name}"` / `"Estimada Sra. {last_name}"` (no declension)

---

## Multi-language system

### Language selection

1. **User specifies the language** in their request: "website hook in German", "Czech salutation", "icebreaker in Polish".
2. **Default is English** when no language specified.
3. **For hooks:** append `"Write your output in {language}."` at the end of the prompt.
4. **For vocatives / salutations:** use the language-specific template with built-in grammar rules.

### Capabilities

| Language | Hooks | Salutation          | First-name vocative | Last-name vocative |
| -------- | ----- | ------------------- | ------------------- | ------------------ |
| English  | ✅    | N/A                 | N/A                 | N/A                |
| Czech    | ✅    | ✅                  | ✅                  | ✅                 |
| Polish   | ✅    | ✅                  | ✅                  | ✅                 |
| Slovak   | ✅    | ✅                  | ✅                  | ✅                 |
| German   | ✅    | ✅                  | N/A                 | N/A                |
| French   | ✅    | ✅                  | N/A                 | N/A                |
| Spanish  | ✅    | ✅                  | N/A                 | N/A                |
| Other    | ✅    | Ask user for format | Ask user for rules  | Ask user for rules |

### Auto-generate salutation with hooks

**Whenever a user requests any hook in a specific language, automatically also prepare the
salutation column for that language.** A salutation is fundamental to outreach — the user
should never have to ask for it separately.

**For languages with vocatives (Czech, Polish, Slovak)** also auto-prepare:

- `{LANG} Salutation`
- `{LANG} First Name Vocative`
- `{LANG} Last Name Vocative`

**For languages without vocatives (German, French, Spanish, English)** auto-prepare:

- `{LANG} Salutation` (Herr/Frau, Monsieur/Madame, Sr./Sra.)

The user can opt out by saying "just the hook" or "no salutation".

---

## Workflow

### Step 1 — collect input

Resolve the project (see **Project resolution**) and gather the personalization request and
target language. If `column_name` is missing, generate one from type + language.

### Step 2 — determine type

1. **Type:** company hook / person hook / icebreaker / salutation / vocative
2. **Variables:** pick from **Smart variable selection**
3. **Language:** default English, or user-specified
4. **Auto-include salutation** for any non-English hook request (see Auto-generate above)

### Step 3 — write the prompt

Follow the rules above:

1. Clear task definition
2. Word-limit rule (≤ 16 words for hooks)
3. Tone / style / content rules
4. Fallback for missing data
5. Input variables (only relevant ones)
6. Language instruction if non-English

### Step 4 — show prompt to user

Show:

- `column_name`
- Full prompt text
- Target language

Ask for approval.

### Step 5 — preview on first 5 rows

```
mcp__leadspicker__preview_ai_prompt(
    project_id=29842,
    column_name="Website Hook - CZ",
    prompt="Write a short personalization sentence …\n…\nInput:\n- Company Name: {{company_name}}\n…\n\nWrite your output in Czech.",
    is_boolean=False,
    magic_column_type="ai_custom_column",
)
```

While that processes, fetch contact context:

```
mcp__leadspicker__list_contacts(project_id=29842, page=1, page_size=5)
```

Show a combined table:

```
Preview (first 5 rows):

| Name           | Position       | Company        | Result                                           |
|----------------|----------------|----------------|--------------------------------------------------|
| Tomáš Blaťák   | Sales Manager  | Leadspicker    | Všiml jsem si, že vaše firma pomáhá …            |
| Jana Nováková  | CEO            | Acme s.r.o.    | Všimla jsem si, že vaše firma se specializuje … |
…

Does this look correct? Should I launch for all contacts?
```

If changes are needed → adjust prompt and re-preview. If cancel → stop.

### Step 6 — launch full personalization

```
mcp__leadspicker__enrich_contacts(
    project_id=29842,
    magic_column_type="ai_custom_column",
    column_name="Website Hook - CZ",
    prompt="<same prompt>",
    is_boolean=False,
)
```

### Step 7 — report and suggest next steps

- Confirm column was created and is processing.
- Suggest related personalizations:
  - After website hook → "Want a LinkedIn company hook too?"
  - After icebreaker → "Want a hook based on their experience?"
  - After salutation → "Want first-name and last-name vocatives too?"
  - After CZ columns → "Want hooks in Czech as well?"

---

## Batch mode — personalization packages

When the user asks for "full personalization" or "all hooks":

### English package

```
Column 1: Website Hook
Column 2: Company Hook (LinkedIn)
Column 3: Experience Hook
Column 4: Icebreaker
```

### Czech package

```
Column 1: Website Hook - CZ
Column 2: Company Hook - CZ
Column 3: Experience Hook - CZ
Column 4: Icebreaker - CZ
Column 5: CZ Salutation
Column 6: CZ First Name Vocative
Column 7: CZ Last Name Vocative
```

### Any-language package

```
Column 1: Website Hook - {LANG}
Column 2: Company Hook - {LANG}
Column 3: Experience Hook - {LANG}
Column 4: Icebreaker - {LANG}
Column 5: {LANG} Salutation (always)
Column 6: {LANG} First Name Vocative (vocative languages only)
Column 7: {LANG} Last Name Vocative (vocative languages only)
```

Execute via `mcp__leadspicker__enrich_contacts` sequentially with ≈1 s delay between calls.
Preview the first column to verify quality, then launch all after approval.

---

## Natural language → personalization matching

| User says...                                   | Type                          | Variables            |
| ---------------------------------------------- | ----------------------------- | -------------------- |
| "website hook", "hook z webu"                  | Website Hook                  | Company              |
| "company hook", "hook o firmě"                 | Company LinkedIn Hook         | Company              |
| "experience hook", "hook o zkušenostech"       | Experience Hook               | Person detailed      |
| "icebreaker", "hook z příspěvků"               | LinkedIn Posts Icebreaker     | Posts                |
| "skills hook", "hook o dovednostech"           | Education / Skills Hook       | Education + Skills   |
| "salutation", "oslovení", "pozdrav"            | Salutation                    | Name + Position      |
| "vocative", "vokativ", "5. pád"                | Vocative (first or last name) | Name                 |
| "first name vocative", "křestní jméno vokativ" | First Name Vocative           | First Name           |
| "last name vocative", "příjmení vokativ"       | Last Name Vocative            | Last Name + Position |
| "full personalization", "celá personalizace"   | Batch package                 | All                  |
| "Czech greeting", "české oslovení"             | CZ Salutation                 | Name + Position      |
| "German greeting", "German salutation"         | DE Salutation                 | Name + Position      |
| "personalize in Czech", "personalizace česky"  | Czech package                 | All                  |
| "hook in German", "hook auf Deutsch"           | Hook in German                | Company or Person    |

---

## Common errors

| Symptom            | Likely cause                         | Fix                                                              |
| ------------------ | ------------------------------------ | ---------------------------------------------------------------- |
| Tool returns `404` | Wrong project                        | Re-list and reconfirm                                            |
| Tool returns `400` | Malformed body                       | Check `magic_column_type="ai_custom_column"`, `is_boolean=False` |
| Tool returns `422` | Column with that name already exists | Use a different `column_name`                                    |
| Tool returns `429` | Rate limit                           | Increase delay between calls to 2–3 s                            |

---

## Safety

- Always show the prompt to the user before previewing or launching.
- Always preview before launching.
- Write all prompts in **English** for best GPT-4o-Mini performance, with `"Write your output in {language}."` appended for non-English output. The exception is vocative output (Czech / Polish / Slovak grammar rules ARE in the prompt itself).

