Back to MCP overviewMCP REFERENCE · 84 TOOLS

Complete tool reference. Every input. Every schema.

All 84 MCP tools, grouped by surface area. Generated directly from the live tool catalog — new tools appear here the moment we ship them.

Authentication

Every tool runs as your workspace API key. Pass it once when you install the MCP server — the same key works across MCP, CLI, and REST.

bash
npx -y pipeline-mcp --api-key YOUR_API_KEY
7

Campaigns

Create, run, pause, resume, and clone outreach campaigns.

list-campaigns#

List all campaigns in your workspace. Filter by status (draft, active, paused, completed) and paginate results.

Parameters
Name
Type
Required
Description
status
"draft" | "active" | "paused" | "completed"
no
page
number
no
limit
number
no
Example
json
{
  "tool": "list-campaigns",
  "arguments": {
    "status": "draft",
    "page": 0,
    "limit": 0
  }
}
get-campaign#

Get detailed information about a specific campaign including settings, prospect count, and current status.

Parameters
Name
Type
Required
Description
campaignId
string
yes
The unique identifier of the campaign
Example
json
{
  "tool": "get-campaign",
  "arguments": {
    "campaignId": "..."
  }
}
create-campaign#

Create a new campaign in your workspace. The campaign will be created in draft status.

Parameters
Name
Type
Required
Description
name
string
yes
workspaceId
string
yes
description
string
no
Example
json
{
  "tool": "create-campaign",
  "arguments": {
    "name": "...",
    "workspaceId": "..."
  }
}
start-campaign#

Start a campaign to begin executing its workflow.

Parameters
Name
Type
Required
Description
campaignId
string
yes
Example
json
{
  "tool": "start-campaign",
  "arguments": {
    "campaignId": "..."
  }
}
pause-campaign#

Pause an active campaign.

Parameters
Name
Type
Required
Description
campaignId
string
yes
Example
json
{
  "tool": "pause-campaign",
  "arguments": {
    "campaignId": "..."
  }
}
resume-campaign#

Resume a paused campaign.

Parameters
Name
Type
Required
Description
campaignId
string
yes
Example
json
{
  "tool": "resume-campaign",
  "arguments": {
    "campaignId": "..."
  }
}
clone-campaign#

Clone an existing campaign with a new name.

Parameters
Name
Type
Required
Description
campaignId
string
yes
newName
string
no
Example
json
{
  "tool": "clone-campaign",
  "arguments": {
    "campaignId": "..."
  }
}
7

Prospects

Add, fetch, list, and manage prospects across campaigns and lists.

list-prospects#

List prospects with optional filtering by campaign, status, or ICP score.

Parameters
Name
Type
Required
Description
campaignId
string
no
status
"pending" | "connection_sent" | "connected" | "message_sent" | "replied" | "completed" | "failed"
no
icpScoreMin
number
no
page
number
no
limit
number
no
Example
json
{
  "tool": "list-prospects",
  "arguments": {
    "campaignId": "...",
    "status": "pending",
    "icpScoreMin": 0,
    "page": 0,
    "limit": 0
  }
}
get-prospect#

Get the full prospect record: profile, company, ICP score + analysis, enrichments, agentExecutions (research/scoring/messaging history), conversion stage, conversation activity, and prospect_lists membership. Use this when you need everything about one prospect — for partial views (just profile or just stage), use the more specific tools.

Parameters
Name
Type
Required
Description
prospectId
string
yes
Example
json
{
  "tool": "get-prospect",
  "arguments": {
    "prospectId": "..."
  }
}
add-prospect#

Add a single prospect to a campaign. Thin wrapper over the bulk endpoint — for >1 prospect prefer add-prospects-bulk (same backend, one round-trip). Requires a valid LinkedIn profile URL (https://linkedin.com/in/...).

Parameters
Name
Type
Required
Description
campaignId
string
yes
linkedinUrl
string
yes
firstName
string
no
lastName
string
no
email
string
no
company
string
no
position
string
no
Example
json
{
  "tool": "add-prospect",
  "arguments": {
    "campaignId": "...",
    "linkedinUrl": "..."
  }
}
add-prospects-bulk#

Add multiple prospects to a campaign at once. Maximum 1000 per request. Each prospect must include a valid linkedinUrl (https://linkedin.com/in/<slug>); firstName/lastName/email/company/position are optional. Custom fields beyond those are stored as customFields. Returns { added, failed, errors, prospectListId }.

Parameters
Name
Type
Required
Description
campaignId
string
yes
prospects
object[]
yes
Example
json
{
  "tool": "add-prospects-bulk",
  "arguments": {
    "campaignId": "...",
    "prospects": []
  }
}
remove-prospect#

Remove a prospect from a campaign.

Parameters
Name
Type
Required
Description
prospectId
string
yes
campaignId
string
yes
Example
json
{
  "tool": "remove-prospect",
  "arguments": {
    "prospectId": "...",
    "campaignId": "..."
  }
}
get-prospect-stats#

Get prospect statistics for a campaign including counts by status.

Parameters
Name
Type
Required
Description
campaignId
string
yes
Example
json
{
  "tool": "get-prospect-stats",
  "arguments": {
    "campaignId": "..."
  }
}
list-prospect-lists#

List all prospect lists in a workspace.

Parameters
Name
Type
Required
Description
workspaceId
string
yes
Example
json
{
  "tool": "list-prospect-lists",
  "arguments": {
    "workspaceId": "..."
  }
}
10

Analytics

Campaign, account, ICP, and reply analytics for your workspace.

get-campaign-analytics#

Get detailed analytics for a campaign including connection rates, reply rates, and message performance.

Parameters
Name
Type
Required
Description
campaignId
string
yes
start
string
no
end
string
no
Example
json
{
  "tool": "get-campaign-analytics",
  "arguments": {
    "campaignId": "..."
  }
}
get-account-analytics#

Get analytics for a connected LinkedIn account: connection accept rate, message reply rate, daily usage, and per-period totals. Pass linkedin_account_id (UUID of the linkedin_accounts row).

Parameters
Name
Type
Required
Description
linkedin_account_id
string
yes
UUID of the LinkedIn account.
period
"day" | "week" | "month" | "quarter"
no
Default: week.
start
string
no
ISO date YYYY-MM-DD (overrides period).
end
string
no
ISO date YYYY-MM-DD.
compare
"true" | "false"
no
Include comparison with previous period.
format
"summary" | "detailed" | "chart"
no
Default: detailed.
Example
json
{
  "tool": "get-account-analytics",
  "arguments": {
    "linkedin_account_id": "..."
  }
}
get-reply-analytics#

Get reply rate analytics for a campaign.

Parameters
Name
Type
Required
Description
campaignId
string
yes
Example
json
{
  "tool": "get-reply-analytics",
  "arguments": {
    "campaignId": "..."
  }
}
get-icp-distribution#

Get ICP score distribution for prospects in a campaign.

Parameters
Name
Type
Required
Description
campaignId
string
yes
Example
json
{
  "tool": "get-icp-distribution",
  "arguments": {
    "campaignId": "..."
  }
}
top-performers#

Rank workspace campaigns by a metric (replies, completions, or connections). Returns the top N campaigns ordered by the chosen metric.

Parameters
Name
Type
Required
Description
metric
"replies" | "completions" | "connections"
yes
limit
number
no
Top N to return (1-50, default 5).
Example
json
{
  "tool": "top-performers",
  "arguments": {
    "metric": "replies"
  }
}
recent-replies#

Cross-campaign feed of recent prospect replies in this workspace. Returns prospect, campaign, current conversation stage, and last message timestamp.

Parameters
Name
Type
Required
Description
limit
number
no
Max replies to return (1-100, default 20).
since
string
no
ISO date — only return replies after this timestamp.
Example
json
{
  "tool": "recent-replies",
  "arguments": {
    "limit": 0,
    "since": "..."
  }
}
compare-campaigns#

Compare execution stats (total/completed/failed/completionRate) across 2-10 campaigns side-by-side.

Parameters
Name
Type
Required
Description
campaignIds
string[]
yes
2-10 campaign IDs to compare.
Example
json
{
  "tool": "compare-campaigns",
  "arguments": {
    "campaignIds": []
  }
}
execution-progress#

Detailed campaign progress with ETA — total prospects, completed, failed, completed today, % progress, and estimated days remaining based on current throughput.

Parameters
Name
Type
Required
Description
campaignId
string
yes
Example
json
{
  "tool": "execution-progress",
  "arguments": {
    "campaignId": "..."
  }
}
pending-actions#

Inspect the workflow queue for a campaign — list executions in pending or waiting status with their next action timestamp and current node.

Parameters
Name
Type
Required
Description
campaignId
string
yes
limit
number
no
Max rows (1-200, default 50).
Example
json
{
  "tool": "pending-actions",
  "arguments": {
    "campaignId": "..."
  }
}
failed-actions#

Inspect failed executions for a campaign — list each failed prospect with the last error message and retry count for diagnosing campaign issues.

Parameters
Name
Type
Required
Description
campaignId
string
yes
Example
json
{
  "tool": "failed-actions",
  "arguments": {
    "campaignId": "..."
  }
}
6

LinkedIn Accounts

Connected accounts, daily usage, InMail balance, profile lookups.

list-linkedin-accounts#

List all LinkedIn accounts connected to a workspace.

Parameters
Name
Type
Required
Description
workspaceId
string
yes
Example
json
{
  "tool": "list-linkedin-accounts",
  "arguments": {
    "workspaceId": "..."
  }
}
get-linkedin-account#

Get details of a specific LinkedIn account.

Parameters
Name
Type
Required
Description
accountId
string
yes
Example
json
{
  "tool": "get-linkedin-account",
  "arguments": {
    "accountId": "..."
  }
}
get-daily-usage#

Get daily usage statistics for a LinkedIn account.

Parameters
Name
Type
Required
Description
accountId
string
yes
Example
json
{
  "tool": "get-daily-usage",
  "arguments": {
    "accountId": "..."
  }
}
get-inmail-balance#

Get InMail credit balance for a LinkedIn account.

Parameters
Name
Type
Required
Description
accountId
string
yes
Example
json
{
  "tool": "get-inmail-balance",
  "arguments": {
    "accountId": "..."
  }
}
send-connection-request#

Send a LinkedIn connection request to a profile.

Parameters
Name
Type
Required
Description
accountId
string
yes
profileUrl
string
yes
message
string
no
Example
json
{
  "tool": "send-connection-request",
  "arguments": {
    "accountId": "...",
    "profileUrl": "..."
  }
}
get-linkedin-profile#

Look up a LinkedIn profile by URL.

Parameters
Name
Type
Required
Description
profileUrl
string
yes
accountId
string
yes
Example
json
{
  "tool": "get-linkedin-profile",
  "arguments": {
    "profileUrl": "...",
    "accountId": "..."
  }
}
1

Workflows

Status of workflow runs powering each campaign.

get-workflow-status#

Get the execution status of a campaign workflow, including progress %, ETA, pending actions, and failed actions. Use detail=summary (default) for high-level status, detail=full for pending + failed action lists.

Parameters
Name
Type
Required
Description
campaignId
string
yes
detail
"summary" | "full"
no
Defaults to summary.
Example
json
{
  "tool": "get-workflow-status",
  "arguments": {
    "campaignId": "..."
  }
}
3

Conversations

Read and search conversation threads from connected inboxes.

list-conversations#

List LinkedIn conversations with filtering options.

Parameters
Name
Type
Required
Description
campaignId
string
no
status
string
no
page
number
no
limit
number
no
Example
json
{
  "tool": "list-conversations",
  "arguments": {
    "campaignId": "...",
    "status": "...",
    "page": 0,
    "limit": 0
  }
}
get-conversation#

Get a specific conversation and its messages.

Parameters
Name
Type
Required
Description
conversationId
string
yes
Example
json
{
  "tool": "get-conversation",
  "arguments": {
    "conversationId": "..."
  }
}
search-conversations#

Search conversations by text.

Parameters
Name
Type
Required
Description
query
string
yes
campaignId
string
no
Example
json
{
  "tool": "search-conversations",
  "arguments": {
    "query": "..."
  }
}
11

Enrichment Tables

Build, enrich, and ship spreadsheet-style prospect tables.

list-tables#

List all enrichment tables in a workspace.

Parameters
Name
Type
Required
Description
workspaceId
string
yes
Example
json
{
  "tool": "list-tables",
  "arguments": {
    "workspaceId": "..."
  }
}
get-table#

Get details of a specific enrichment table.

Parameters
Name
Type
Required
Description
tableId
string
yes
Example
json
{
  "tool": "get-table",
  "arguments": {
    "tableId": "..."
  }
}
create-table#

Create a new enrichment table in a workspace. The minimum is { name, workspaceId } — everything else is optional. You can pre-seed columns, point at a sourceType (webhook/rss/crm/job-scraper/etc), attach to a workbook, opt in to AI messages, or pre-configure enrichmentOptions (companyEnrichment / icpScoring / messaging) so the table is ready to enrich on first row.

Parameters
Name
Type
Required
Description
name
string
yes
workspaceId
string
yes
description
string
no
columns
object[]
no
Optional pre-seeded Column[] (id, name, type, config…).
sourceType
string
no
Optional source type, e.g. webhook, rss, crm, job-scraper, signal.
sourceConfig
object
no
Source-specific config (e.g. RSS feed URL, webhook secret).
workbookId
string
no
Optional workbook UUID to attach this table to.
webhookToken
string
no
Optional webhook token for sourceType=webhook.
enrichmentOptions
object
no
Same shape as on signal trackers: { companyEnrichment, icpScoring?, messaging? }.
aiMessagesEnabled
boolean
no
Pre-enable the AI messages column.
Example
json
{
  "tool": "create-table",
  "arguments": {
    "name": "...",
    "workspaceId": "..."
  }
}
add-table-rows#

Add rows to an enrichment table.

Parameters
Name
Type
Required
Description
tableId
string
yes
rows
object[]
yes
Example
json
{
  "tool": "add-table-rows",
  "arguments": {
    "tableId": "...",
    "rows": []
  }
}
get-table-rows#

Get rows from an enrichment table with pagination.

Parameters
Name
Type
Required
Description
tableId
string
yes
page
number
no
limit
number
no
Example
json
{
  "tool": "get-table-rows",
  "arguments": {
    "tableId": "..."
  }
}
add-table-column#

Add a column to an enrichment table. The column id auto-generates if omitted. Type must be one of the supported column kinds (text/number/currency/date/url/email/image/checkbox/select/formula/enrichment/action/source/signal-type).

Parameters
Name
Type
Required
Description
tableId
string
yes
name
string
yes
type
"text" | "number" | "currency" | "date" | "url" | "email" | "image" | "checkbox" | "select" | "formula" | "enrichment" | "action" | "source" | "signal-type"
yes
id
string
no
Optional column ID — auto-generated when omitted.
config
object
no
Type-specific config (formula expression, enrichment provider, select options, etc.).
width
number
no
Optional column width in pixels.
Example
json
{
  "tool": "add-table-column",
  "arguments": {
    "tableId": "...",
    "name": "...",
    "type": "text"
  }
}
get-enrichment-job-status#

Check the status of an enrichment job.

Parameters
Name
Type
Required
Description
jobId
string
yes
Example
json
{
  "tool": "get-enrichment-job-status",
  "arguments": {
    "jobId": "..."
  }
}
export-table-csv#

Export an enrichment table as a CSV download URL.

Parameters
Name
Type
Required
Description
tableId
string
yes
Example
json
{
  "tool": "export-table-csv",
  "arguments": {
    "tableId": "..."
  }
}
send-table-to-campaign#

Send all rows from an enrichment table to a campaign as prospects.

Parameters
Name
Type
Required
Description
tableId
string
yes
campaignId
string
yes
Example
json
{
  "tool": "send-table-to-campaign",
  "arguments": {
    "tableId": "...",
    "campaignId": "..."
  }
}
list-enrichment-providers#

List available enrichment providers for a workspace.

Parameters
Name
Type
Required
Description
workspaceId
string
yes
Example
json
{
  "tool": "list-enrichment-providers",
  "arguments": {
    "workspaceId": "..."
  }
}
6

Signals

Track competitor posts, hiring, funding, and other buying signals.

list-signals#

List buying signals detected in your workspace.

Parameters
Name
Type
Required
Description
workspaceId
string
yes
Example
json
{
  "tool": "list-signals",
  "arguments": {
    "workspaceId": "..."
  }
}
list-signal-trackers#

List all signal trackers in a workspace.

Parameters
Name
Type
Required
Description
workspaceId
string
yes
Example
json
{
  "tool": "list-signal-trackers",
  "arguments": {
    "workspaceId": "..."
  }
}
create-signal-tracker#

Create a signal tracker. Auto-provisions a backing enrichment table (or companies+people tables for web-scout types) that you can then enrich and push to a campaign. Response includes trackerId plus enrichment_table_id (or companies_table_id + people_table_id for hiring/funding/ai_discovery) for downstream use with send-table-to-campaign. Supported types and required fields: - keyword: keywords (string[]) - own_post_engagers / competitor_post_engagers: monitored_post_url - hiring / funding / ai_discovery: no keywords required; set search_provider + credential_id Requires workspace-configured search provider key (Tavily/Exa/Firecrawl/Serper) for hiring/funding/ai_discovery types.

Parameters
Name
Type
Required
Description
workspace_id
string
no
Workspace UUID (optional when using API key auth — inferred from the key).
name
string
yes
Human-friendly tracker name.
type
"keyword" | "own_post_engagers" | "competitor_post_engagers" | "hiring" | "funding" | "ai_discovery"
yes
keywords
string[]
no
Required for keyword type.
monitored_post_url
string
no
Required for own_post_engagers and competitor_post_engagers.
linkedin_account_id
string
no
Optional — first workspace account is auto-assigned when omitted.
search_provider
"platform" | "serper" | "tavily" | "exa" | "firecrawl" | "spider" | "brave"
no
For web-scout types (hiring/funding/ai_discovery). Platform is admin-only; non-admins must choose another provider + credential_id.
credential_id
string
no
Workspace credential for the chosen search_provider.
max_people_per_company
number
no
For web-scout types. Defaults to 5.
enrichment_options
object
no
AI enrichment columns to add to the tracker table. ASK THE USER which they want before submitting (three independent toggles). (1) companyEnrichment: Prospector AI column that returns company_name, website, company_description, company_linkedin, company_headcount. Defaults ON for engager/follower types (LinkedIn only returns name+headline+url), OFF for hiring/funding/ai_discovery (search results already include company data). (2) messaging: AI-generated personalized opener column. Defaults ON for engager/follower types, OFF otherwise. (3) icpScoring: 0-100 fit score against the workspace ICP. ALWAYS opt-in, never auto-enabled. Shape: { companyEnrichment?: {enabled: boolean}, messaging?: {enabled: boolean}, icpScoring?: {enabled: boolean} }. Omit the whole field to accept defaults.
run_settings
object
no
Optional. Shape: { autoProcessNewRows?: boolean }. Defaults to false (cells render as click-to-enrich).
campaign_id
string
no
For engager types — push leads directly to this campaign instead of creating a table.
webhook_url
string
no
Optional webhook to notify on new signals.
Example
json
{
  "tool": "create-signal-tracker",
  "arguments": {
    "name": "...",
    "type": "keyword"
  }
}
pause-signal-tracker#

Pause a signal tracker.

Parameters
Name
Type
Required
Description
trackerId
string
yes
Example
json
{
  "tool": "pause-signal-tracker",
  "arguments": {
    "trackerId": "..."
  }
}
resume-signal-tracker#

Resume a paused signal tracker.

Parameters
Name
Type
Required
Description
trackerId
string
yes
Example
json
{
  "tool": "resume-signal-tracker",
  "arguments": {
    "trackerId": "..."
  }
}
add-signal-to-campaign#

Add a signal to a campaign to auto-enroll matching prospects.

Parameters
Name
Type
Required
Description
signalId
string
yes
campaignId
string
yes
Example
json
{
  "tool": "add-signal-to-campaign",
  "arguments": {
    "signalId": "...",
    "campaignId": "..."
  }
}
3

Raw Data

Read-only scrape feeds. Chain with add-prospects-bulk to push curated rows.

list-post-engagers#

Return the raw list of people who commented on or reacted to a LinkedIn post. READ-ONLY: no campaign, table, or prospect records are created. Use this when you want to enrich, filter, or qualify the list yourself (e.g. with WebSearch/WebFetch) before pushing a curated subset to a campaign via add-prospects-bulk. For the automated pipeline (scrape → auto-enrich → campaign on a cron), use create-signal-tracker with type=competitor_post_engagers instead.

Parameters
Name
Type
Required
Description
postUrl
string
yes
The LinkedIn post URL.
linkedinAccountId
string
yes
Connected LinkedIn account in this workspace used to fetch via Unipile.
Example
json
{
  "tool": "list-post-engagers",
  "arguments": {
    "postUrl": "...",
    "linkedinAccountId": "..."
  }
}
list-profile-followers#

Return the raw follower list for the LinkedIn account attached to the given linkedinAccountId (the user's own profile). READ-ONLY: no campaign, table, or prospect records are created. Pair with add-prospects-bulk after you filter/enrich externally.

Parameters
Name
Type
Required
Description
linkedinAccountId
string
yes
Connected LinkedIn account whose followers to fetch.
limit
number
no
Max followers to return (default 500, max 5000).
Example
json
{
  "tool": "list-profile-followers",
  "arguments": {
    "linkedinAccountId": "..."
  }
}
list-company-followers#

Return the raw follower list for a LinkedIn company page. READ-ONLY: no campaign, table, or prospect records are created. Pair with add-prospects-bulk after you filter/enrich externally.

Parameters
Name
Type
Required
Description
companyUrl
string
yes
LinkedIn company page URL.
linkedinAccountId
string
yes
Connected LinkedIn account in this workspace used to fetch via Unipile.
limit
number
no
Max followers to return (default 500, max 5000).
Example
json
{
  "tool": "list-company-followers",
  "arguments": {
    "companyUrl": "...",
    "linkedinAccountId": "..."
  }
}
7

Content

Generate, publish, schedule, and strategise LinkedIn content.

generate-content#

Generate a LinkedIn / Twitter / YouTube post using the workspace voice config + inspiration corpus + intelligence context. The route requires workspace_id as a query param (auto-injected from the API key when present). Returns hook + body + cta + alternatives + reasoning.

Parameters
Name
Type
Required
Description
workspace_id
string
no
Workspace UUID (sent as ?workspace_id query param). Auto-injected with API key auth.
workspace_slug
string
no
Optional workspace slug for the agent context.
topic
string
yes
What the post should be about (10-5000 chars).
postType
"thought_leadership" | "lead_magnet" | "case_study" | "personal_story"
no
postLength
"short" | "medium" | "long"
no
linkedinAccountId
string
no
Optional — pin the post to a specific account voice.
hookStyle
"question" | "contrarian" | "story" | "statistic" | "bold_claim" | "curiosity_gap"
no
regenerateInstructions
string
no
User feedback when iterating on a previous draft.
previousPost
string
no
Previous post content for regeneration context.
platform
"linkedin" | "youtube" | "twitter"
no
Default linkedin.
platformPostType
string
no
Platform-specific subtype.
twitterFormat
"single_tweet" | "thread"
no
youtubeDurationMin
number
no
Target video length in minutes.
strategyContext
object
no
Example
json
{
  "tool": "generate-content",
  "arguments": {
    "topic": "..."
  }
}
list-posts#

List content posts in a workspace.

Parameters
Name
Type
Required
Description
workspaceId
string
yes
Example
json
{
  "tool": "list-posts",
  "arguments": {
    "workspaceId": "..."
  }
}
get-post#

Get a specific content post.

Parameters
Name
Type
Required
Description
postId
string
yes
Example
json
{
  "tool": "get-post",
  "arguments": {
    "postId": "..."
  }
}
publish-post#

Publish a content post to LinkedIn IMMEDIATELY via Unipile. The post must already have a LinkedIn account associated (set when generated). Returns the live LinkedIn post URL on success. Use schedule-post if you want a delay/safety window before it goes live.

Parameters
Name
Type
Required
Description
postId
string
yes
The content post ID (must be in draft status).
Example
json
{
  "tool": "publish-post",
  "arguments": {
    "postId": "..."
  }
}
schedule-post#

Schedule a content post to publish at a future time. The cron worker will pick it up and publish via Unipile when scheduled_at is reached. Use this instead of publish-post when you want a confirmation window (e.g. schedule for 10 minutes from now so a human can sanity-check). To cancel a scheduled post before it publishes, the user does that in the UI.

Parameters
Name
Type
Required
Description
postId
string
yes
The content post ID (must be in draft status).
scheduled_at
string
yes
ISO 8601 datetime in the future, e.g. 2026-04-23T18:30:00Z.
Example
json
{
  "tool": "schedule-post",
  "arguments": {
    "postId": "...",
    "scheduled_at": "..."
  }
}
get-content-strategy#

Get the content strategy for a workspace.

Parameters
Name
Type
Required
Description
workspaceId
string
yes
Example
json
{
  "tool": "get-content-strategy",
  "arguments": {
    "workspaceId": "..."
  }
}
generate-content-strategy#

Generate a content strategy using AI.

Parameters
Name
Type
Required
Description
workspaceSlug
string
yes
Example
json
{
  "tool": "generate-content-strategy",
  "arguments": {
    "workspaceSlug": "..."
  }
}
1

Inbox

AI-driven sentiment classification on incoming replies.

analyze-sentiment#

Run the SentimentAgent on a conversation: classifies the prospect across 7 stages (cold → engaged → meeting_request → objection → not_interested → unsubscribed → spam) and updates the conversation_contexts row. Pass the full conversation object plus its messages — the agent uses the message thread, not the chat_id alone.

Parameters
Name
Type
Required
Description
workspaceSlug
string
no
Required for Clerk auth. Ignored when using API key (workspace inferred from key).
conversation
object
yes
Required. The conversation object (must include chat_id).
messages
object[]
no
Message thread to analyze.
currentTags
string[]
no
Existing conversation tags so the agent can update incrementally.
Example
json
{
  "tool": "analyze-sentiment",
  "arguments": {
    "conversation": {}
  }
}
2

Workspaces

Workspace metadata and credit balance.

get-workspace#

Get workspace information.

Parameters
Name
Type
Required
Description
workspaceId
string
yes
Example
json
{
  "tool": "get-workspace",
  "arguments": {
    "workspaceId": "..."
  }
}
get-workspace-credits#

Get the workspace owner's subscription state in one call: planType (starter/pro/etc), status, isAdmin, trialEnd, trialDaysRemaining, isTrialActive, totalSeats, usedSeats, currentPeriodEnd, and creditsBalance. Resolves to the workspace owner so all members see the same plan.

Parameters
Name
Type
Required
Description
workspaceId
string
no
Optional. Omitting it falls back to the authenticated user's personal subscription.
Example
json
{
  "tool": "get-workspace-credits",
  "arguments": {
    "workspaceId": "..."
  }
}
3

CRM / Pipeline

Move prospects between pipeline stages and add notes.

get-crm-pipeline#

Get the workspace CRM kanban: prospects grouped by conversionStage (connected, replied, interested, meeting_request, qualified, meeting_scheduled, meeting_completed, won, lost, not_interested, unqualified). Excludes prospects still in the initial "prospect" stage. Each card includes ICP score, last activity timestamp, and any active conversation chat_id/account_id.

Parameters
Name
Type
Required
Description
workspaceId
string
no
Optional with API key auth — inferred from the key.
Example
json
{
  "tool": "get-crm-pipeline",
  "arguments": {
    "workspaceId": "..."
  }
}
move-prospect-stage#

Move a prospect along the CRM funnel by setting their conversionStage. Stage must be one of the canonical ConversionStage values. This updates conversionStageUpdatedAt so the kanban reorders correctly.

Parameters
Name
Type
Required
Description
prospectId
string
yes
stage
"prospect" | "connected" | "replied" | "interested" | "meeting_request" | "qualified" | "meeting_scheduled" | "meeting_completed" | "won" | "lost" | "not_interested" | "unqualified"
yes
Example
json
{
  "tool": "move-prospect-stage",
  "arguments": {
    "prospectId": "...",
    "stage": "prospect"
  }
}
add-prospect-note#

Add a note to a prospect.

Parameters
Name
Type
Required
Description
prospectId
string
yes
note
string
yes
Example
json
{
  "tool": "add-prospect-note",
  "arguments": {
    "prospectId": "...",
    "note": "..."
  }
}
3

ICP / GTM

ICP profile, GTM context, and live ICP scoring.

get-icp-profile#

Get the ICP profile for a workspace.

Parameters
Name
Type
Required
Description
workspaceId
string
no
Example
json
{
  "tool": "get-icp-profile",
  "arguments": {
    "workspaceId": "..."
  }
}
get-gtm-context#

Read the workspace's full GTM context: personas (who you sell to + their pain points), offerings (what you sell + positioning), demand gen offers (what you pitch in outreach), case studies, ICP criteria, and company/service descriptions. Use this BEFORE generating messages, evaluating "does this prospect fit," or recommending campaigns — it gives you the ground truth the UI workflow assistant and internal pipeline already rely on. Returns { configured: boolean, hint?: string } so you can detect incomplete setup and nudge the user to finish onboarding.

Parameters
Name
Type
Required
Description
workspaceId
string
no
Optional when using API key auth — inferred from the key.
Example
json
{
  "tool": "get-gtm-context",
  "arguments": {
    "workspaceId": "..."
  }
}
score-prospect#

Score a prospect against the workspace ICP.

Parameters
Name
Type
Required
Description
prospectId
string
yes
workspaceId
string
yes
Example
json
{
  "tool": "score-prospect",
  "arguments": {
    "prospectId": "...",
    "workspaceId": "..."
  }
}
3

Blocklist

Domain and prospect blocklist management.

list-blocklist#

List blocked domains and profiles.

No parameters
Example
json
{
  "tool": "list-blocklist",
  "arguments": {}
}
add-to-blocklist#

Add a domain or profile to the blocklist.

Parameters
Name
Type
Required
Description
value
string
yes
type
"domain" | "profile"
yes
Example
json
{
  "tool": "add-to-blocklist",
  "arguments": {
    "value": "...",
    "type": "domain"
  }
}
check-blocklist#

Check if a domain or profile is blocklisted.

Parameters
Name
Type
Required
Description
value
string
yes
Example
json
{
  "tool": "check-blocklist",
  "arguments": {
    "value": "..."
  }
}
2

Power Tools

Composite tools that chain multiple steps into a single call.

zero-to-outreach#

ONE-TIME list import pipeline. Import a static Sales Navigator list URL or a CSV of prospect rows, enrich each row, build a campaign, optionally auto-start. Returns a jobId — poll get-job to track progress. For ONGOING LinkedIn signal monitoring (competitor post engagers, own post engagers, hiring signals, funding signals, AI mentions), use create-signal-tracker instead — that tool sets up a cron that keeps scraping new prospects on a schedule, this one does not.

Parameters
Name
Type
Required
Description
workspaceId
string
yes
Workspace ID
mode
"sales_nav" | "csv"
yes
Source mode. Use sales_nav for a Sales Navigator list URL, csv for a rows array.
salesNav
object
no
Sales Nav config (required for mode=sales_nav)
csv
object
no
CSV rows config (required for mode=csv)
enrichment
object
no
Enrichment options
campaignConfig
object
no
Campaign configuration
autoStart
boolean
no
Auto-start campaign when ready
Example
json
{
  "tool": "zero-to-outreach",
  "arguments": {
    "workspaceId": "...",
    "mode": "sales_nav"
  }
}
build-campaign-from-table#

Create a campaign from an enrichment table. Optionally filter rows by ICP score or required fields before adding as prospects.

Parameters
Name
Type
Required
Description
tableId
string
yes
workspaceId
string
yes
filters
object
no
campaignConfig
object
yes
autoStart
boolean
no
Example
json
{
  "tool": "build-campaign-from-table",
  "arguments": {
    "tableId": "...",
    "workspaceId": "...",
    "campaignConfig": {}
  }
}
2

Async Jobs

Poll and cancel long-running async jobs (e.g. zero-to-outreach).

get-job#

Poll the status of an async MCP job (e.g. zero-to-outreach). Returns progress, status, and result when complete.

Parameters
Name
Type
Required
Description
jobId
string
yes
Job ID returned by async tools
Example
json
{
  "tool": "get-job",
  "arguments": {
    "jobId": "..."
  }
}
cancel-job#

Cancel a running async MCP job.

Parameters
Name
Type
Required
Description
jobId
string
yes
Example
json
{
  "tool": "cancel-job",
  "arguments": {
    "jobId": "..."
  }
}
1

Messaging

Send LinkedIn messages programmatically.

send-message#

Send a LinkedIn message in a conversation.

Parameters
Name
Type
Required
Description
conversationId
string
yes
linkedinAccountId
string
yes
message
string
yes
Example
json
{
  "tool": "send-message",
  "arguments": {
    "conversationId": "...",
    "linkedinAccountId": "...",
    "message": "..."
  }
}
4

Draft Queue

Approve, edit, or reject AI-generated reply drafts.

list-drafts#

List pending AI message drafts awaiting approval.

No parameters
Example
json
{
  "tool": "list-drafts",
  "arguments": {}
}
approve-draft#

Approve an AI message draft so it gets sent.

Parameters
Name
Type
Required
Description
draftId
string
yes
Example
json
{
  "tool": "approve-draft",
  "arguments": {
    "draftId": "..."
  }
}
edit-draft#

Edit an AI message draft before approving.

Parameters
Name
Type
Required
Description
draftId
string
yes
message
string
yes
Example
json
{
  "tool": "edit-draft",
  "arguments": {
    "draftId": "...",
    "message": "..."
  }
}
reject-draft#

Reject an AI message draft.

Parameters
Name
Type
Required
Description
draftId
string
yes
Example
json
{
  "tool": "reject-draft",
  "arguments": {
    "draftId": "..."
  }
}
GET YOUR API KEY

Connect Pipeline to your IDE in 30 seconds.

14-day trial · No credit card