MCP Tools: Outreach
E-Mail-Kampagnen, Outreach-Synchronisierung und Kampagnen-Analytics — technische Referenz auf Englisch.
Technische Referenz auf Englisch.
Outreach
Email campaigns, outreach sync, and campaign analytics
list_email_campaigns
read-only
List all Email Outreach email campaigns.
Required integration: instantly
No parameters.
get_email_campaign_analytics
read-only
Get analytics for an Email Outreach email campaign (sent, opened, replied, bounced).
Required integration: instantly
| Parameter | Type | Required | Description |
|---|---|---|---|
campaign_id | string | yes | Email Outreach campaign ID |
pause_email_campaign
action
Pause an active Email Outreach email campaign.
Required integration: instantly
| Parameter | Type | Required | Description |
|---|---|---|---|
campaign_id | string | yes | Email Outreach campaign ID |
resume_email_campaign
action
Resume a paused Email Outreach email campaign.
Required integration: instantly
| Parameter | Type | Required | Description |
|---|---|---|---|
campaign_id | string | yes | Email Outreach campaign ID |
update_email_lead_status
destructive
Update a lead status in Email Outreach (interested, not_interested, meeting_booked, closed).
Required integration: instantly
| Parameter | Type | Required | Description |
|---|---|---|---|
email | string | yes | Lead email |
campaign_id | string | yes | Campaign ID |
status | enum(interested \ | not_interested \ | meeting_booked \ |
get_lemlist_campaign_stats
read-only
Get stats for an Email Outreach email campaign (sent, opened, replied, bounced, unsubscribed).
Required integration: lemlist
| Parameter | Type | Required | Description |
|---|---|---|---|
campaign_id | string | yes | Email Outreach campaign ID |
list_linkedin_campaigns
read-only
List all LinkedIn Outreach LinkedIn campaigns.
Required integration: heyreach
No parameters.
get_linkedin_campaign
read-only
Get full LinkedIn Outreach campaign details including sequence steps and linked accounts.
Required integration: heyreach
| Parameter | Type | Required | Description |
|---|---|---|---|
campaign_id | string | yes | LinkedIn Outreach campaign ID |
get_linkedin_campaign_stats
read-only
Get stats for a LinkedIn Outreach LinkedIn campaign (connections sent/accepted, messages, replies).
Required integration: heyreach
| Parameter | Type | Required | Description |
|---|---|---|---|
campaign_id | string | yes | LinkedIn Outreach campaign ID |
get_linkedin_campaign_leads
read-only
Get leads from a LinkedIn Outreach campaign with their status.
Required integration: heyreach
| Parameter | Type | Required | Description |
|---|---|---|---|
campaign_id | string | yes | LinkedIn Outreach campaign ID |
offset | number | no | |
limit | number | no |
list_heyreach_lists
read-only
List all LinkedIn Outreach lead lists.
Required integration: heyreach
No parameters.
check_heyreach_connection
read-only
Check if LinkedIn Outreach API is configured and accessible.
Required integration: heyreach
No parameters.
pause_linkedin_campaign
action
Pause an active LinkedIn Outreach LinkedIn campaign.
Required integration: heyreach
| Parameter | Type | Required | Description |
|---|---|---|---|
campaign_id | string | yes | LinkedIn Outreach campaign ID |
resume_linkedin_campaign
action
Resume a paused LinkedIn Outreach LinkedIn campaign.
Required integration: heyreach
| Parameter | Type | Required | Description |
|---|---|---|---|
campaign_id | string | yes | LinkedIn Outreach campaign ID |
get_linkedin_accounts
read-only
List connected LinkedIn sender accounts in LinkedIn Outreach.
Required integration: heyreach
No parameters.
send_linkedin_message
action
Send a LinkedIn message to a lead via LinkedIn Outreach.
Required integration: heyreach
| Parameter | Type | Required | Description |
|---|---|---|---|
conversation_id | string | yes | LinkedIn Outreach conversation ID |
linkedin_account_id | number | yes | Sender LinkedIn account ID |
message | string | yes | Message text |
add_leads_to_heyreach_campaign
action
Add leads to a LinkedIn Outreach LinkedIn campaign. Each lead needs a LinkedIn URL (leads without one are counted as failed). linkedin_account_id optionally pins which LinkedIn Outreach sender the campaign uses for these leads. personalization_variables is a map of lead_id → { key: value } merged into each lead’s customVariables.
Required integration: heyreach
| Parameter | Type | Required | Description |
|---|---|---|---|
campaign_id | string | yes | LinkedIn Outreach campaign ID |
lead_ids | string[] | yes | Lead IDs from the leads table — their linkedin_url / first_name / last_name / email are read to build the LinkedIn Outreach payload |
linkedin_account_id | string | no | |
personalization_variables | object | no |
stop_heyreach_lead
action
Stop a single lead in a LinkedIn Outreach LinkedIn campaign (the lead is removed from further steps). Pass the lead’s LinkedIn profile URL. Use this when the lead replied on another channel or asked to stop. LinkedIn Outreach-only; for LinkedIn/WhatsApp LinkedIn sequences use pause_linkedin_lead.
Required integration: heyreach
| Parameter | Type | Required | Description |
|---|---|---|---|
campaign_id | string | yes | LinkedIn Outreach campaign ID |
linkedin_url | string | yes | LinkedIn profile URL of the lead to stop |
get_email_campaign_details
read-only
Get full Email Outreach campaign details with email steps, subjects, bodies, delays.
Required integration: instantly
| Parameter | Type | Required | Description |
|---|---|---|---|
campaign_id | string | yes | Email Outreach campaign ID |
list_email_accounts
read-only
List the workspace’s email sending accounts in Email Outreach.
Required integration: instantly
No parameters.
remove_email_lead
destructive
Remove leads from an Email Outreach campaign by email.
Required integration: instantly
| Parameter | Type | Required | Description |
|---|---|---|---|
campaign_id | string | yes | |
emails | string[] | yes |
send_whatsapp_message
action
Send an APPROVED WhatsApp message. Only use after user confirms the draft from draft_reply tool.
Required integration: unipile:whatsapp
| Parameter | Type | Required | Description |
|---|---|---|---|
phone_number | string | yes | Phone number in E.164 format (e.g. +491234567890) |
message | string | yes | The approved message text to send |
get_whatsapp_messages
read-only
Get recent WhatsApp messages from a conversation.
Required integration: unipile:whatsapp
| Parameter | Type | Required | Description |
|---|---|---|---|
chat_id | string | yes | WhatsApp chat ID |
limit | number | no |
get_email_campaign_detailed_stats
read-only
Get detailed stats for all email campaigns including per-campaign sent, opened, replied, bounced counts.
Required integration: instantly
No parameters.
get_linkedin_campaign_detailed_stats
read-only
Get detailed stats for all LinkedIn campaigns including per-campaign connections, messages, replies.
Required integration: heyreach
No parameters.
list_whatsapp_enrollments
read-only
List WhatsApp sequence enrollments for the workspace. Each row represents a lead enrolled in a 3-step WhatsApp sequence. Filter by status or playbook_id.
| Parameter | Type | Required | Description |
|---|---|---|---|
status | enum(active \ | paused \ | completed \ |
playbook_id | string | no | |
limit | number | no |
pause_whatsapp_enrollment
action
Pause a single WhatsApp enrollment for a lead (stops further steps). Also pauses any other enrollments matching the same phone number. Use resume_whatsapp_enrollment to continue.
| Parameter | Type | Required | Description |
|---|---|---|---|
lead_id | string | yes | Lead ID whose WhatsApp sequence to pause |
resume_whatsapp_enrollment
action
Resume a paused WhatsApp enrollment. Recomputes next_step_at from the current step delay.
| Parameter | Type | Required | Description |
|---|---|---|---|
lead_id | string | yes | Lead ID whose WhatsApp sequence to resume |
pause_whatsapp_by_playbook
action
Pause ALL active WhatsApp enrollments that belong to leads in the given playbook. Returns the count paused.
| Parameter | Type | Required | Description |
|---|---|---|---|
playbook_id | string | yes | Playbook ID — all active enrollments for leads under it will be paused |
resume_whatsapp_by_playbook
action
Resume ALL paused WhatsApp enrollments for leads under the given playbook. Completed-past-last-step enrollments are marked completed instead.
| Parameter | Type | Required | Description |
|---|---|---|---|
playbook_id | string | yes | Playbook ID |
bulk_enroll_whatsapp
action
Enroll multiple leads into a WhatsApp 3-step sequence. Each lead needs a phone number. If whatsapp_account_id is omitted, the playbook-scoped sender is auto-selected (playbook_id required in that case). Idempotent — leads already enrolled (by lead_id OR phone) are silently skipped.
| Parameter | Type | Required | Description |
|---|---|---|---|
leads | object[] | yes | Leads to enroll |
steps | object[] | yes | Ordered steps. step_number is 1-indexed, delay_days is how long to wait AFTER the previous step. |
whatsapp_account_id | string | no | |
playbook_id | string | no | |
sequence_id | string | no |
get_whatsapp_stats
read-only
Aggregate WhatsApp sequence stats for the workspace: active / completed / replied / failed / no_whatsapp counts plus total_sent messages.
No parameters.
Copy Generation
Generate personalized emails, LinkedIn messages, reply drafts, meeting prep
generate_personalization
action
Generate personalization variables (icebreaker, pain_point, value_hook) for a lead.
| Parameter | Type | Required | Description |
|---|---|---|---|
lead_id | string | yes | Lead ID |
batch_generate_personalization
action
Generate personalization for multiple leads in parallel.
| Parameter | Type | Required | Description |
|---|---|---|---|
lead_ids | string[] | yes | Lead IDs |
concurrency | number | no |
generate_email
action
Generate an email for a specific sequence step.
| Parameter | Type | Required | Description |
|---|---|---|---|
lead_id | string | yes | Lead ID |
sequence_id | string | yes | Sequence ID |
step_number | number | yes | Step number (1-based) |
generate_linkedin_message
action
Generate a LinkedIn message for a specific sequence step.
| Parameter | Type | Required | Description |
|---|---|---|---|
lead_id | string | yes | Lead ID |
sequence_id | string | yes | Sequence ID |
step_number | number | yes | Step number (1-based) |
draft_reply
action
Generate an AI reply draft to an inbound message from a lead. Use this for email, LinkedIn, AND WhatsApp replies.
| Parameter | Type | Required | Description |
|---|---|---|---|
lead_id | string | yes | Lead ID |
inbound_message | string | yes | The inbound message text |
channel | enum(email \ | linkedin \ | whatsapp) |
sentiment | string | no | |
intent | string | no |
generate_meeting_prep
action
Generate meeting preparation notes for a lead (pain points, solutions, talking points).
| Parameter | Type | Required | Description |
|---|---|---|---|
lead_id | string | yes | Lead ID |
LinkedIn search, profiles, company data, sequence management
linkedin_search_companies
action
Search companies on LinkedIn Sales Navigator by keyword, industry, headcount, or location. Use when the user wants to find companies matching specific criteria (e.g. “SaaS companies in Germany with 50-200 employees”). For searching by a saved Sales Navigator URL, use linkedin_search_companies_by_url.
Required integration: unipile:linkedin
| Parameter | Type | Required | Description |
|---|---|---|---|
keywords | string | no | |
industry | string[] | no | |
headcount | string | no | |
location | string[] | no | |
max_pages | number | no |
linkedin_search_companies_by_url
action
Search companies using a LinkedIn Sales Navigator search URL. Use when the user has a pre-built Sales Navigator search link. NOT for company page URLs (use linkedin_company_profile for those).
Required integration: unipile:linkedin
| Parameter | Type | Required | Description |
|---|---|---|---|
search_url | string | yes | Sales Navigator company search URL |
max_pages | number | no |
linkedin_search_people
action
Search people at a company on LinkedIn Sales Navigator by role and seniority. Use when the user says “find decision-makers at company X” or “who works at Y?”. Accepts a company name OR a LinkedIn company URL (linkedin.com/company/{slug}). For searching by a saved Sales Navigator people URL, use linkedin_search_people_by_url.
Required integration: unipile:linkedin
| Parameter | Type | Required | Description |
|---|---|---|---|
company | string | yes | Company name OR LinkedIn company URL (e.g. “Acme GmbH” or “https://linkedin.com/company/acme-gmbh”) |
roles | string[] | no | |
seniority | enum(owner/partner \ | cxo \ | vice_president \ |
geography | string[] | no | |
keywords | string | no | |
max_pages | number | no |
linkedin_search_people_by_url
action
Search people using a LinkedIn Sales Navigator search URL. Use when the user has a pre-built Sales Navigator search link. NOT for company page URLs (use linkedin_search_people with the company URL instead).
Required integration: unipile:linkedin
| Parameter | Type | Required | Description |
|---|---|---|---|
search_url | string | yes | Sales Navigator people search URL |
max_pages | number | no |
linkedin_company_profile
action
Get a detailed LinkedIn company profile — name, description, industry, headcount, website, headquarters, specialties. Use when the user pastes a company LinkedIn URL or asks “tell me about company X on LinkedIn”. Accepts a full URL (linkedin.com/company/{slug}), a vanity slug, or a numeric company ID.
Required integration: unipile:linkedin
| Parameter | Type | Required | Description |
|---|---|---|---|
company | string | yes | LinkedIn company URL, vanity slug, or numeric ID (e.g. “https://linkedin.com/company/acme-gmbh” or “acme-gmbh”) |
get_linkedin_sequence_stats
read-only
Get LinkedIn sequence stats, sender pool health, and active enrollments.
Required integration: unipile:linkedin
| Parameter | Type | Required | Description |
|---|---|---|---|
limit | number | no |
enroll_linkedin_sequence
action
Enroll leads in a LinkedIn sequence. Provide manual steps or auto-generate from personalization variables.
Required integration: unipile:linkedin
| Parameter | Type | Required | Description |
|---|---|---|---|
lead_ids | string[] | yes | Lead IDs to enroll |
steps | object[] | no | |
sender_account_id | string | no | |
sequence_id | string | no |
pause_linkedin_lead
action
Pause a LinkedIn sequence enrollment for a specific lead.
Required integration: unipile:linkedin
| Parameter | Type | Required | Description |
|---|---|---|---|
lead_id | string | yes | Lead ID to pause |
resume_linkedin_lead
action
Resume a paused LinkedIn sequence enrollment for a lead.
Required integration: unipile:linkedin
| Parameter | Type | Required | Description |
|---|---|---|---|
lead_id | string | yes | Lead ID to resume |
pause_linkedin_sequence
action
Pause all active enrollments in a LinkedIn sequence.
Required integration: unipile:linkedin
| Parameter | Type | Required | Description |
|---|---|---|---|
sequence_id | string | yes | Sequence ID to pause |
resume_linkedin_sequence
action
Resume all paused enrollments in a LinkedIn sequence.
Required integration: unipile:linkedin
| Parameter | Type | Required | Description |
|---|---|---|---|
sequence_id | string | yes | Sequence ID to resume |
cancel_linkedin_enrollment
action
Cancel a specific LinkedIn sequence enrollment.
Required integration: unipile:linkedin
| Parameter | Type | Required | Description |
|---|---|---|---|
enrollment_id | string | yes | Enrollment ID to cancel |
retry_linkedin_enrollment
action
Retry a FAILED LinkedIn/WhatsApp LinkedIn enrollment for a lead. Resets retry_count, clears last_error, and makes the enrollment due now — the cron will pick it up in the next tick and resume from the step that failed. Only applies to LinkedIn/WhatsApp-driven enrollments (LinkedIn Outreach campaigns have no per-lead retry).
Required integration: unipile:linkedin
| Parameter | Type | Required | Description |
|---|---|---|---|
lead_id | string | yes | Lead ID whose failed LinkedIn enrollment to retry |
Senders
Manage email and LinkedIn sender accounts, health monitoring, deliverability
list_senders
read-only
List all senders (persons with linked email/LinkedIn/WhatsApp accounts) for the workspace.
No parameters.
start_unipile_auth
action
Generate a LinkedIn/WhatsApp hosted-auth URL for the user to connect an email, LinkedIn, or WhatsApp account. The URL expires in 30 minutes. After the user opens the URL and authenticates, a webhook saves the account to this workspace — then call list_unipile_connections to verify it appeared. Use this as step 1 of any sender setup flow when list_available_accounts shows no accounts for the desired provider.
| Parameter | Type | Required | Description |
|---|---|---|---|
provider | enum(email \ | linkedin \ | whatsapp \ |
list_unipile_connections
read-only
List ALL LinkedIn/WhatsApp accounts for this workspace with their connection status (connected / pending / disconnected / error). Use this to troubleshoot connection issues or to verify that a newly-started OAuth flow finished. For picking accounts to link to a sender, prefer list_available_accounts (which filters to connected + shows assignment).
No parameters.
list_available_accounts
read-only
List all connected channel accounts (email, LinkedIn, WhatsApp via LinkedIn/WhatsApp) that can be linked to a sender. Shows current assignment so the chat can pick accounts that are not yet linked. Use this BEFORE create_sender or update_sender to get valid account_id values.
No parameters.
create_sender
action
Create or update a sender (one person with their contact data, signature, and linked channel accounts). Idempotent by email — calling this twice with the same email updates the existing row instead of creating a duplicate. Pass only the fields you have; account IDs are optional and can be linked later via update_sender. Use list_available_accounts first to get valid LinkedIn/WhatsApp account_id values.
| Parameter | Type | Required | Description |
|---|---|---|---|
name | string | yes | Person display name (e.g. “Luca Bardelli”) |
email | string | yes | Primary email address — identifies this person and is the idempotency key |
signature | string | no | |
linkedin_profile_url | string | no | |
calendar_link | string | no | |
unipile_email_account_id | string | no | |
linkedin_account_id | string | no | |
whatsapp_account_id | string | no |
update_sender
destructive
Update sender contact data, signature, and linked channel accounts. Pass only fields you want to change. Account IDs must come from list_available_accounts (validated to belong to this workspace).
| Parameter | Type | Required | Description |
|---|---|---|---|
sender_id | string | yes | Sender ID |
name | string | no | |
signature | string | no | |
linkedin_profile_url | string | no | |
calendar_link | string | no | |
unipile_email_account_id | string | no | |
linkedin_account_id | string | no | |
whatsapp_account_id | string | no | |
status | enum(active \ | paused) | no |
delete_sender
destructive
Delete a sender. Use force=true to remove even if used by playbooks.
| Parameter | Type | Required | Description |
|---|---|---|---|
sender_id | string | yes | Sender ID |
force | boolean | no |
get_sender_pool_health
read-only
Get LinkedIn sender pool health: warmup progress, daily limits, sends today, and account status for all connected LinkedIn accounts.
No parameters.
set_linkedin_plan
destructive
Set the LinkedIn plan type (standard or sales_navigator) for a sender account. Affects search and messaging capabilities.
| Parameter | Type | Required | Description |
|---|---|---|---|
account_id | string | yes | LinkedIn sender account ID |
linkedin_plan | enum(standard \ | sales_navigator) | yes |
get_deliverability_health
read-only
Email deliverability health from the latest monitoring run: per-inbox status/ESP/daily limit/warmup, plus campaign bounce/reply rates. Sourced from hourly/daily Email Outreach checks.
No parameters.
get_esp_segment_report
read-only
Recipient-ESP segment report (Gmail / Microsoft / T-Online·GMX / other): bounce and reply rate per recipient mailbox provider. Exposes a Microsoft-specific collapse that aggregate numbers hide.
No parameters.
get_placement_report
read-only
Inbox placement test results (Email Outreach Inbox Placement add-on): inbox / spam / missing rate per provider (Google / Microsoft / Yahoo) from the latest seed test. The direct “are we in spam” signal. Empty if the add-on is not active or no test has run.
No parameters.
resume_email_sender
action
Resume a paused/errored email sender (Email Outreach). Human-gated recovery step after investigating why it was auto-actioned. Restores to 50% of the pre-pause daily limit (min 15).
| Parameter | Type | Required | Description |
|---|---|---|---|
email | string | yes | Email address of the sender to resume |
Sequences
Create, edit, clone multi-channel outreach sequences
get_sequence
read-only
Get sequence details and locked status.
| Parameter | Type | Required | Description |
|---|---|---|---|
sequence_id | string | yes | Sequence ID |
update_sequence
destructive
Update sequence steps or status. Cannot edit steps if the sequence is locked (already linked to a campaign).
| Parameter | Type | Required | Description |
|---|---|---|---|
sequence_id | string | yes | Sequence ID |
steps | any[] | no | |
status | string | no |
clone_sequence
action
Clone a locked sequence to create an editable copy (without campaign links).
| Parameter | Type | Required | Description |
|---|---|---|---|
sequence_id | string | yes | Sequence ID to clone |
create_sequence
action
Create a new sequence for a playbook.
| Parameter | Type | Required | Description |
|---|---|---|---|
playbook_id | string | yes | Playbook ID |
name | string | yes | Sequence name |
channel | enum(email \ | linkedin) | yes |
persona_id | string | no | |
steps | any[] | no |
Phone Agent
Provision and check workspace Twilio subaccounts for phone outreach
provision_workspace_phone_subaccount
action
Idempotently provision a Twilio subaccount for the current workspace. Creates a new subaccount under the master Twilio account if none exists; returns existing data if it does. Run once per workspace before enabling phone for any sender. Returns only the subaccount SID — auth tokens are never returned to MCP clients.
No parameters.
get_workspace_phone_subaccount_status
read-only
Return the workspace’s Twilio subaccount SID if provisioned, else null. Read-only; never returns auth tokens.
No parameters.
Replies
Review, approve, edit, bulk-manage pending reply drafts
list_replies
read-only
List pending reply drafts in the reply queue with lead and conversation context.
| Parameter | Type | Required | Description |
|---|---|---|---|
limit | number | no |
approve_reply
action
Approve and send a reply draft from the queue.
| Parameter | Type | Required | Description |
|---|---|---|---|
reply_id | string | yes | Reply queue item ID |
edit_and_send_reply
action
Edit a reply draft and send the edited version.
| Parameter | Type | Required | Description |
|---|---|---|---|
reply_id | string | yes | Reply queue item ID |
edited_text | string | yes | Edited reply text to send |
reject_reply
action
Reject a reply draft (remove from queue without sending).
| Parameter | Type | Required | Description |
|---|---|---|---|
reply_id | string | yes | Reply queue item ID |
get_reply_feedback_history
read-only
Get reply feedback history: how drafts were handled (approved, edited, rejected) with edit distances and classification data. Useful for analyzing reply quality.
| Parameter | Type | Required | Description |
|---|---|---|---|
channel | enum(email \ | linkedin \ | whatsapp) |
action | enum(approved \ | edited \ | rejected) |
limit | number | no |
bulk_approve_replies
action
Approve and send multiple reply drafts at once.
| Parameter | Type | Required | Description |
|---|---|---|---|
reply_ids | string[] | yes | Reply queue item IDs to approve |
bulk_reject_replies
action
Reject multiple reply drafts at once (remove from queue without sending).
| Parameter | Type | Required | Description |
|---|---|---|---|
reply_ids | string[] | yes | Reply queue item IDs to reject |
backfill_replies
action
Import historical replies from connected outreach platforms (Email Outreach, LinkedIn Outreach) into the workspace. Idempotent — re-running with the same since window does not duplicate.
| Parameter | Type | Required | Description |
|---|---|---|---|
channels | enum(email \ | linkedin)[] | yes |
since | string | no | |
limit | number | no |
Conversations
View email/LinkedIn/WhatsApp conversation threads per lead
list_conversations
read-only
List conversations for a specific lead (email, LinkedIn, WhatsApp messages).
| Parameter | Type | Required | Description |
|---|---|---|---|
lead_id | string | yes | Lead ID |
list_recent_replies
read-only
List recent inbound replies across all leads (for monitoring inbox).
| Parameter | Type | Required | Description |
|---|---|---|---|
limit | number | no | |
intent | enum(interested \ | not_interested \ | meeting_request \ |
sentiment | enum(positive \ | negative \ | neutral) |
get_conversation_stats
read-only
Get conversation statistics: total replies, unhandled count, by channel breakdown.
No parameters.