Leadspicker Master Pipeline (MCP)
End-to-end orchestrator that takes a project from "leads loaded" to "outreach sequence
ready". Runs five phases:
- Setup — resolve project, gather business context.
- Enrichment — populate the data needed for everything downstream.
- Classification — score / filter by ICP fit and any boolean criteria.
- Personalization — generate hooks, icebreakers, salutations.
- Outreach sequence — build the email / LinkedIn / multi-channel graph.
This skill does not duplicate the detailed how-to of each phase. For prompt templates,
column tables, BASHO rules, vocative grammar, and so on, request the dedicated skill by
name when you start that phase:
mcp-data-enrichment — built-in + AI columns, dependency map, lean defaults.
mcp-classification — boolean / string / scored prompts, output mode decision.
mcp-personalizer — 14–16-word hooks, icebreakers, multi-language salutations & vocatives.
mcp-outreach — sequence step types, BASHO framework, multi-channel graph.
Mention them by name in your replies (e.g. "loading mcp-classification for this phase") —
the user / runtime decides whether to load the full skill content.
MCP tools used directly by this skill
For navigation only — each phase mostly delegates to the skill above, which calls its own
tools.
| MCP tool |
Purpose |
mcp__leadspicker__list_projects |
Resolve project by name or list recent |
mcp__leadspicker__get_project |
Fetch project detail + headers_data for boolean column IDs |
mcp__leadspicker__list_contacts |
Read count (page=1, page_size=1) and pull a few sample rows for context |
mcp__leadspicker__list_magic_columns |
Inspect what columns already exist in the project |
⚠️ Credit discipline (applies across all phases)
Every enrichment / AI column costs credits. Default to a lean minimum. Only add
optional columns when explicitly triggered by the user's persona or criteria.
- NEVER default to
li_company_employee_count (exact count). Use li_company_size (range).
- NEVER default to
li_latest_posts. It is the most expensive enrichment.
- For each phase, present the planned columns, let the user approve, and explicitly call out what's NOT being enriched and why ("saves credits").
For full credit-discipline rules and the lean default column set, request mcp-data-enrichment.
Phase 0 — Setup
Resolve the target project and collect business context.
- Display format: always render projects as
{name} (#{id}).
- Resolve the project:
- User named one →
mcp__leadspicker__list_projects(search_query="{name}", limit=5). If multiple match, ask which.
- Otherwise →
mcp__leadspicker__list_projects(order_by="last_active", limit=20) and ask the user to pick.
- Gather, in one consolidated question if possible:
- What you sell / offer. Product, value prop, problem solved.
- ICP. Industry / vertical, company size, role / seniority of the buyer, geography.
- Language. Default English; ask if non-English (sequences + personalization need it).
- LinkedIn Premium? Determines connection-request text and InMail availability.
- Sender name for LinkedIn messages (LinkedIn has no auto-signature).
- Inspect the project:
mcp__leadspicker__list_contacts(project_id=X, page=1, page_size=1) — total contacts.
mcp__leadspicker__list_magic_columns(project_id=X) — what already exists (avoid re-creating columns).
- Show a one-line summary of what you understood, and confirm before moving to Phase 1.
Phase 1 — Enrichment
Goal: populate the data classification + personalization need, no more.
- Request mcp-data-enrichment for column tables, dependency map, and the Lean Outreach Prep pipeline.
- Build the lean default column set from the user's input:
- Always:
company_name, company_website, company_linkedin, person_linkedin, li_full_name, person_position, li_company_description, website_text_summary, enrich_emails, validate_emails.
- Add only when triggered by the user's persona / criteria:
- geography →
person_country and/or li_company_country
- size band →
li_company_size (range; never the exact count)
- department → matching
li_company_people_*
- company age →
company_founded_year
- personal bio / experience →
li_about_me, present_experience
- icebreakers from posts →
li_latest_posts (confirm first — expensive)
- Show the enrichment plan in three sections: Always, Added because you mentioned X, NOT enriching (saves credits).
- After approval, launch via
mcp__leadspicker__enrich_contacts per column (≈1 s delay between calls).
Checkpoint A
Enrichment is asynchronous — columns populate over minutes. Tell the user:
"Enrichment is running. Check the project in Leadspicker; once the columns are populated, say continue and I'll move on to classification."
Do not start Phase 2 until the user says continue.
Phase 2 — Classification
Goal: score and filter contacts by ICP fit. Two waves:
2a — scored relevance
For prompt structure, output-mode decision (boolean / string / scored), and variable
selection, request mcp-classification.
Suggested scored columns (is_boolean=False, "Yes | score | reasoning" format):
- Position relevance — does the person's role match the ICP?
- Variables:
{{position}}
- Prompt customized to the ICP roles the user described.
- Company relevance — does the company match the ICP?
- Variables:
{{company_name}}, {{company_website}}, {{linkedin_company_description}}, {{website_text_summary}}
- Prompt customized to the ICP industry / vertical / size.
Run a preview (mcp__leadspicker__preview_ai_prompt) on the first 5 rows for each column.
Show the user the combined preview.
Checkpoint B
"Scored classifications are running. Please check the previews / first results in
Leadspicker. When you're happy, say continue and I'll add the boolean filter columns."
2b — boolean filter columns
After the scored columns finish, add boolean filter columns that wrap them:
Position Relevant? (is_boolean=True) reading the position-relevance score (e.g. score ≥ 7 → true)
Company Relevant? (is_boolean=True) reading the company-relevance score similarly
Plus any extra boolean filters the user asked for (e.g. "is decision maker", "targets enterprise").
These boolean columns become the condition gates of the outreach sequence in Phase 5.
Checkpoint C
"Boolean filters are processing. Once they finish in Leadspicker, say continue and
I'll move on to personalization."
Phase 3 — Personalization
Goal: short, natural, language-correct opener fragments — never full messages.
For prompt rules, language tables, vocative grammar, and auto-generation rules, request
mcp-personalizer.
Default for the user's language
| Language |
Auto-generate columns |
| English |
Website Hook, Company Hook, optional Experience Hook, Icebreaker |
| Czech |
Website Hook - CZ, Company Hook - CZ, CZ Salutation, CZ First Name Vocative, CZ Last Name Vocative, optional Icebreaker - CZ |
| Polish |
Website Hook - PL, Company Hook - PL, PL Salutation, PL First Name Vocative, PL Last Name Vocative, optional Icebreaker - PL |
| Slovak |
same pattern as Czech, SK Salutation + vocatives |
| German |
Website Hook - DE, Company Hook - DE, DE Salutation (no vocatives) |
| French |
Website Hook - FR, Company Hook - FR, FR Salutation |
| Spanish |
Website Hook - ES, Company Hook - ES, ES Salutation |
Icebreaker is only generated if li_latest_posts was enriched in Phase 1.
Checkpoint D
Preview at least the website hook on first 5 rows (mcp__leadspicker__preview_ai_prompt).
Show the combined table to the user. After approval, launch all personalization columns
(mcp__leadspicker__enrich_contacts, ≈1 s delay between calls).
"Personalization columns are processing. Once they finish in Leadspicker, say
continue and I'll build the outreach sequence."
Phase 4 — Outreach sequence
Goal: turn approved data + personalization into the sequence graph.
For step types, BASHO framework, word limits, spintax, and the multi-channel graph,
request mcp-outreach.
- Ask the user which sequence type to build: email, LinkedIn, or multi-channel.
- Reuse the answers from Phase 0 (offer / ICP / language / Premium / sender name) — don't ask again.
- Find boolean column header IDs:
mcp__leadspicker__get_project(project_id=X, info_type="detail")
Look in headers_data for entries with is_boolean: true and pick their id.
- If any boolean columns exist, ALWAYS add them as
magic_column_condition steps at the root of the sequence (chained via relation_type: "yes"). Filters rolled out in Phase 2b act as the gate.
- Use available variables when generating message text:
{{first_name}}, {{last_name}}, {{full_name}}, {{position}}, {{company_name}}
- Personalization columns from Phase 3:
{{website_hook}}, {{company_hook}}, {{icebreaker}}, {{salutation}}, vocative columns.
- Apply BASHO + word limits + spintax (mcp-outreach has the details).
- Show all messages to the user for approval.
- Delete any existing sequence:
mcp__leadspicker__delete_sequence(project_id=X).
- Build the sequence in one call:
mcp__leadspicker__create_sequence(project_id=X, sequence_messages=...). Never chain multiple create_sequence_step calls.
- Verify:
mcp__leadspicker__list_sequence(project_id=X).
Skip rules
The pipeline shrinks when the user does not need every phase:
- Project already enriched (most lean columns exist) → skim Phase 1, only add what's missing.
- No boolean classifications needed → skip Phase 2b; Phase 5 has no condition gates.
- English-only outreach without posts → Phase 3 skips icebreaker + vocative columns; only website / company hooks.
- User already has a sequence and only wants data prep → stop after Phase 3.
- User already has data + classification + personalization and only wants the sequence → jump straight to Phase 4 (mcp-outreach).
Pipeline summary template
After Phase 4 finishes, give the user a one-screen recap:
Pipeline complete ✓ — {project_name} (#{id})
Enrichment: {N} columns ({list})
Classification: {scored cols}, {boolean filter cols}
Personalization: {hook / salutation / vocative cols}
Sequence: {type} ({step count} steps, {condition gates} gates)
Next step in Leadspicker:
• Connect the email / LinkedIn account if not yet attached
• Set sending hours via mcp-outreach (`get_sequence_settings`)
• Launch the sequence from the Leadspicker UI
Natural language matching
| User says (EN) |
User says (CZ) |
Action |
| "prepare project for outreach" |
"připrav projekt na outreach" |
Run the full pipeline (Phases 0–4) |
| "we sell X to Y, prepare …" |
"prodáváme X pro Y, připrav …" |
Use the description as the offer + ICP, run Phases 0–4 |
| "run full pipeline" |
"spusť celou pipeline" |
Phases 0–4 |
| "enrich and create sequence" |
"připrav data a sekvenci" |
Phases 0–4, possibly skipping classification if user opts out |
| "just enrich" |
"jen enrich" |
Phase 0 + Phase 1 only |
| "just sequence" |
"jen sekvenci" |
Phase 0 + Phase 4 (assumes data + personalization already exist) |
Safety
- Always show the plan before each phase and wait for explicit approval.
- Apply credit discipline — never auto-enrich "just in case".
- Use checkpoints (A, B, C, D) — wait for the user to say continue between phases that depend on async results.
- Treat each phase's detailed rules as the source of truth — request the corresponding
mcp-… skill before generating prompts or sequence graphs.
1---2name: mcp-master3description: End-to-end Leadspicker pipeline orchestrator for the MCP server: enrich, classify, personalize, and create an outreach sequence in a single workflow. Use this skill whenever the user wants to prepare a Leadspicker project for outreach from scratch — for example "prepare project for outreach", "run full pipeline", "enrich and create sequence", "set up outreach for project 12345", "we sell X to Y, prepare the project", "připrav projekt na outreach", "spusť celou pipeline", "připrav data a sekvenci", or any request that combines multiple Leadspicker steps (enrichment + classification + personalization + outreach sequence) into one flow. Triggers when the user describes their business and target audience alongside a Leadspicker project name or ID.4---56# Leadspicker Master Pipeline (MCP)78End-to-end orchestrator that takes a project from "leads loaded" to "outreach sequence9ready". Runs five phases:10111. **Setup** — resolve project, gather business context.122. **Enrichment** — populate the data needed for everything downstream.133. **Classification** — score / filter by ICP fit and any boolean criteria.144. **Personalization** — generate hooks, icebreakers, salutations.155. **Outreach sequence** — build the email / LinkedIn / multi-channel graph.1617This skill **does not** duplicate the detailed how-to of each phase. For prompt templates,18column tables, BASHO rules, vocative grammar, and so on, request the dedicated skill by19name when you start that phase:2021- `mcp-data-enrichment` — built-in + AI columns, dependency map, lean defaults.22- `mcp-classification` — boolean / string / scored prompts, output mode decision.23- `mcp-personalizer` — 14–16-word hooks, icebreakers, multi-language salutations & vocatives.24- `mcp-outreach` — sequence step types, BASHO framework, multi-channel graph.2526Mention them by name in your replies (e.g. _"loading mcp-classification for this phase"_) —27the user / runtime decides whether to load the full skill content.2829---3031## MCP tools used directly by this skill3233For navigation only — each phase mostly delegates to the skill above, which calls its own34tools.3536| MCP tool | Purpose |37| -------------------------------------- | --------------------------------------------------------------------------- |38| `mcp__leadspicker__list_projects` | Resolve project by name or list recent |39| `mcp__leadspicker__get_project` | Fetch project detail + `headers_data` for boolean column IDs |40| `mcp__leadspicker__list_contacts` | Read `count` (`page=1, page_size=1`) and pull a few sample rows for context |41| `mcp__leadspicker__list_magic_columns` | Inspect what columns already exist in the project |4243---4445## ⚠️ Credit discipline (applies across all phases)4647Every enrichment / AI column costs credits. **Default to a lean minimum.** Only add48optional columns when explicitly triggered by the user's persona or criteria.4950- **NEVER default to `li_company_employee_count` (exact count).** Use `li_company_size` (range).51- **NEVER default to `li_latest_posts`.** It is the most expensive enrichment.52- For each phase, present the planned columns, let the user approve, and explicitly call out what's NOT being enriched and why ("saves credits").5354For full credit-discipline rules and the lean default column set, request **mcp-data-enrichment**.5556---5758## Phase 0 — Setup5960Resolve the target project and collect business context.61621. **Display format:** always render projects as **`{name} (#{id})`**.632. Resolve the project:64 - User named one → `mcp__leadspicker__list_projects(search_query="{name}", limit=5)`. If multiple match, ask which.65 - Otherwise → `mcp__leadspicker__list_projects(order_by="last_active", limit=20)` and ask the user to pick.663. Gather, in one consolidated question if possible:67 - **What you sell / offer.** Product, value prop, problem solved.68 - **ICP.** Industry / vertical, company size, role / seniority of the buyer, geography.69 - **Language.** Default English; ask if non-English (sequences + personalization need it).70 - **LinkedIn Premium?** Determines connection-request text and InMail availability.71 - **Sender name** for LinkedIn messages (LinkedIn has no auto-signature).724. Inspect the project:73 - `mcp__leadspicker__list_contacts(project_id=X, page=1, page_size=1)` — total contacts.74 - `mcp__leadspicker__list_magic_columns(project_id=X)` — what already exists (avoid re-creating columns).755. Show a one-line summary of what you understood, and confirm before moving to Phase 1.7677---7879## Phase 1 — Enrichment8081Goal: populate the data classification + personalization need, no more.82831. Request **mcp-data-enrichment** for column tables, dependency map, and the **Lean Outreach Prep** pipeline.842. Build the lean default column set from the user's input:85 - Always: `company_name`, `company_website`, `company_linkedin`, `person_linkedin`, `li_full_name`, `person_position`, `li_company_description`, `website_text_summary`, `enrich_emails`, `validate_emails`.86 - Add only when triggered by the user's persona / criteria:87 - geography → `person_country` and/or `li_company_country`88 - size band → `li_company_size` (range; never the exact count)89 - department → matching `li_company_people_*`90 - company age → `company_founded_year`91 - personal bio / experience → `li_about_me`, `present_experience`92 - icebreakers from posts → `li_latest_posts` (**confirm first — expensive**)933. Show the enrichment plan in three sections: **Always**, **Added because you mentioned X**, **NOT enriching (saves credits)**.944. After approval, launch via `mcp__leadspicker__enrich_contacts` per column (≈1 s delay between calls).9596### Checkpoint A9798Enrichment is **asynchronous** — columns populate over minutes. Tell the user:99100> "Enrichment is running. Check the project in Leadspicker; once the columns are populated, say _continue_ and I'll move on to classification."101102Do not start Phase 2 until the user says _continue_.103104---105106## Phase 2 — Classification107108Goal: score and filter contacts by ICP fit. Two waves:109110### 2a — scored relevance111112For prompt structure, output-mode decision (boolean / string / scored), and variable113selection, request **mcp-classification**.114115Suggested scored columns (`is_boolean=False`, `"Yes | score | reasoning"` format):116117- **Position relevance** — does the person's role match the ICP?118 - Variables: `{{position}}`119 - Prompt customized to the ICP roles the user described.120- **Company relevance** — does the company match the ICP?121 - Variables: `{{company_name}}`, `{{company_website}}`, `{{linkedin_company_description}}`, `{{website_text_summary}}`122 - Prompt customized to the ICP industry / vertical / size.123124Run a preview (`mcp__leadspicker__preview_ai_prompt`) on the first 5 rows for each column.125Show the user the combined preview.126127### Checkpoint B128129> "Scored classifications are running. Please check the previews / first results in130> Leadspicker. When you're happy, say _continue_ and I'll add the boolean filter columns."131132### 2b — boolean filter columns133134After the scored columns finish, add boolean filter columns that wrap them:135136- `Position Relevant?` (`is_boolean=True`) reading the position-relevance score (e.g. score ≥ 7 → true)137- `Company Relevant?` (`is_boolean=True`) reading the company-relevance score similarly138139Plus any extra boolean filters the user asked for (e.g. "is decision maker", "targets enterprise").140141These boolean columns become the condition gates of the outreach sequence in Phase 5.142143### Checkpoint C144145> "Boolean filters are processing. Once they finish in Leadspicker, say _continue_ and146> I'll move on to personalization."147148---149150## Phase 3 — Personalization151152Goal: short, natural, language-correct opener fragments — never full messages.153154For prompt rules, language tables, vocative grammar, and auto-generation rules, request155**mcp-personalizer**.156157### Default for the user's language158159| Language | Auto-generate columns |160| -------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- |161| English | `Website Hook`, `Company Hook`, optional `Experience Hook`, `Icebreaker` |162| Czech | `Website Hook - CZ`, `Company Hook - CZ`, **`CZ Salutation`**, **`CZ First Name Vocative`**, **`CZ Last Name Vocative`**, optional `Icebreaker - CZ` |163| Polish | `Website Hook - PL`, `Company Hook - PL`, **`PL Salutation`**, **`PL First Name Vocative`**, **`PL Last Name Vocative`**, optional `Icebreaker - PL` |164| Slovak | same pattern as Czech, **`SK Salutation`** + vocatives |165| German | `Website Hook - DE`, `Company Hook - DE`, **`DE Salutation`** (no vocatives) |166| French | `Website Hook - FR`, `Company Hook - FR`, **`FR Salutation`** |167| Spanish | `Website Hook - ES`, `Company Hook - ES`, **`ES Salutation`** |168169`Icebreaker` is only generated if `li_latest_posts` was enriched in Phase 1.170171### Checkpoint D172173Preview at least the website hook on first 5 rows (`mcp__leadspicker__preview_ai_prompt`).174Show the combined table to the user. After approval, launch all personalization columns175(`mcp__leadspicker__enrich_contacts`, ≈1 s delay between calls).176177> "Personalization columns are processing. Once they finish in Leadspicker, say178> _continue_ and I'll build the outreach sequence."179180---181182## Phase 4 — Outreach sequence183184Goal: turn approved data + personalization into the sequence graph.185186For step types, BASHO framework, word limits, spintax, and the multi-channel graph,187request **mcp-outreach**.1881891. Ask the user which sequence type to build: **email**, **LinkedIn**, or **multi-channel**.1902. Reuse the answers from Phase 0 (offer / ICP / language / Premium / sender name) — don't ask again.1913. Find boolean column header IDs:192 ```193 mcp__leadspicker__get_project(project_id=X, info_type="detail")194 ```195 Look in `headers_data` for entries with `is_boolean: true` and pick their `id`.1964. **If any boolean columns exist, ALWAYS add them as `magic_column_condition` steps at the root** of the sequence (chained via `relation_type: "yes"`). Filters rolled out in Phase 2b act as the gate.1975. Use available variables when generating message text:198 - `{{first_name}}`, `{{last_name}}`, `{{full_name}}`, `{{position}}`, `{{company_name}}`199 - Personalization columns from Phase 3: `{{website_hook}}`, `{{company_hook}}`, `{{icebreaker}}`, `{{salutation}}`, vocative columns.2006. Apply BASHO + word limits + spintax (mcp-outreach has the details).2017. Show all messages to the user for approval.2028. Delete any existing sequence: `mcp__leadspicker__delete_sequence(project_id=X)`.2039. Build the sequence in **one call**: `mcp__leadspicker__create_sequence(project_id=X, sequence_messages=...)`. Never chain multiple `create_sequence_step` calls.20410. Verify: `mcp__leadspicker__list_sequence(project_id=X)`.205206---207208## Skip rules209210The pipeline shrinks when the user does not need every phase:211212- **Project already enriched** (most lean columns exist) → skim Phase 1, only add what's missing.213- **No boolean classifications needed** → skip Phase 2b; Phase 5 has no condition gates.214- **English-only outreach without posts** → Phase 3 skips icebreaker + vocative columns; only website / company hooks.215- **User already has a sequence and only wants data prep** → stop after Phase 3.216- **User already has data + classification + personalization** and only wants the sequence → jump straight to Phase 4 (mcp-outreach).217218---219220## Pipeline summary template221222After Phase 4 finishes, give the user a one-screen recap:223224```225Pipeline complete ✓ — {project_name} (#{id})226227Enrichment: {N} columns ({list})228Classification: {scored cols}, {boolean filter cols}229Personalization: {hook / salutation / vocative cols}230Sequence: {type} ({step count} steps, {condition gates} gates)231232Next step in Leadspicker:233 • Connect the email / LinkedIn account if not yet attached234 • Set sending hours via mcp-outreach (`get_sequence_settings`)235 • Launch the sequence from the Leadspicker UI236```237238---239240## Natural language matching241242| User says (EN) | User says (CZ) | Action |243| ------------------------------ | ------------------------------ | ---------------------------------------------------------------- |244| "prepare project for outreach" | "připrav projekt na outreach" | Run the full pipeline (Phases 0–4) |245| "we sell X to Y, prepare …" | "prodáváme X pro Y, připrav …" | Use the description as the offer + ICP, run Phases 0–4 |246| "run full pipeline" | "spusť celou pipeline" | Phases 0–4 |247| "enrich and create sequence" | "připrav data a sekvenci" | Phases 0–4, possibly skipping classification if user opts out |248| "just enrich" | "jen enrich" | Phase 0 + Phase 1 only |249| "just sequence" | "jen sekvenci" | Phase 0 + Phase 4 (assumes data + personalization already exist) |250251---252253## Safety254255- Always show the plan before each phase and wait for explicit approval.256- Apply credit discipline — never auto-enrich "just in case".257- Use checkpoints (A, B, C, D) — wait for the user to say _continue_ between phases that depend on async results.258- Treat each phase's detailed rules as the source of truth — request the corresponding `mcp-…` skill before generating prompts or sequence graphs.