# MCP Master

> 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.

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

---


# Leadspicker Master Pipeline (MCP)

End-to-end orchestrator that takes a project from "leads loaded" to "outreach sequence
ready". Runs five phases:

1. **Setup** — resolve project, gather business context.
2. **Enrichment** — populate the data needed for everything downstream.
3. **Classification** — score / filter by ICP fit and any boolean criteria.
4. **Personalization** — generate hooks, icebreakers, salutations.
5. **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.

1. **Display format:** always render projects as **`{name} (#{id})`**.
2. 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.
3. 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).
4. 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).
5. 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.

1. Request **mcp-data-enrichment** for column tables, dependency map, and the **Lean Outreach Prep** pipeline.
2. 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**)
3. Show the enrichment plan in three sections: **Always**, **Added because you mentioned X**, **NOT enriching (saves credits)**.
4. 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**.

1. Ask the user which sequence type to build: **email**, **LinkedIn**, or **multi-channel**.
2. Reuse the answers from Phase 0 (offer / ICP / language / Premium / sender name) — don't ask again.
3. 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`.
4. **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.
5. 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.
6. Apply BASHO + word limits + spintax (mcp-outreach has the details).
7. Show all messages to the user for approval.
8. Delete any existing sequence: `mcp__leadspicker__delete_sequence(project_id=X)`.
9. Build the sequence in **one call**: `mcp__leadspicker__create_sequence(project_id=X, sequence_messages=...)`. Never chain multiple `create_sequence_step` calls.
10. 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.

