// mcp tool catalog
MCP + CLI · 87 TOOLS

Every tool, every parameter, every schema.

The full surface of 87 tools across 21 categories exposed by the hosted MCP server and the pipeline-gtm CLI. Same inputs for both surfaces. Use the call pattern below once, then look up any tool by name. For the REST surface, see the REST API reference →

// how to call a tool

Same shape for every tool below.

Every tool below is callable two ways. Both use the same API key from your workspace. The pattern is identical; only the tool name and arguments change.

MCP · tools/call
json-rpc
POST https://www.pipeline.help/api/mcp-server
Authorization: Bearer sk_live_...
Content-Type: application/json
 
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "<tool-name>",
"arguments": { /* see parameter table */ }
}
}
CLI · pipeline-gtm
bash
# auth once
$ export PIPELINE_API_KEY=sk_live_...
 
# call any tool by name; flags mirror the
# parameter table for that tool below.
$ npx pipeline-gtm <tool-name> \
--flag1 value1 \
--flag2 value2
 
# pipe-friendly · exit-code-correct · zero-token
$ npx pipeline-gtm <tool-name> --json | jq
// note: The Authorization header is the same Bearer key used by the REST API. Generate one from workspace → Settings → API Keys. Rate-limited per workspace; honour Retry-After on 429.
// campaigns

Campaigns

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

7 tools
list-campaigns#

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

parametertypedescription
status
string
No description.
enum: "draft", "active", "paused", "completed"
page
number
No description.
limit
number
No description.
full inputSchema (json)
list-campaigns
json schema
{
"type": "object",
"properties": {
"status": {
"type": "string",
"enum": [
"draft",
"active",
"paused",
"completed"
]
},
"page": {
"type": "number"
},
"limit": {
"type": "number"
}
}
}
get-campaign#

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

parametertypedescription
campaignIdrequired
string
The unique identifier of the campaign
full inputSchema (json)
get-campaign
json schema
{
"type": "object",
"properties": {
"campaignId": {
"type": "string",
"description": "The unique identifier of the campaign"
}
},
"required": [
"campaignId"
]
}
create-campaign#

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

parametertypedescription
namerequired
string
No description.
workspaceIdrequired
string
No description.
description
string
No description.
full inputSchema (json)
create-campaign
json schema
{
"type": "object",
"properties": {
"name": {
"type": "string"
},
"workspaceId": {
"type": "string"
},
"description": {
"type": "string"
}
},
"required": [
"name",
"workspaceId"
]
}
start-campaign#

Start a campaign to begin executing its workflow.

parametertypedescription
campaignIdrequired
string
No description.
full inputSchema (json)
start-campaign
json schema
{
"type": "object",
"properties": {
"campaignId": {
"type": "string"
}
},
"required": [
"campaignId"
]
}
pause-campaign#

Pause an active campaign.

parametertypedescription
campaignIdrequired
string
No description.
full inputSchema (json)
pause-campaign
json schema
{
"type": "object",
"properties": {
"campaignId": {
"type": "string"
}
},
"required": [
"campaignId"
]
}
resume-campaign#

Resume a paused campaign.

parametertypedescription
campaignIdrequired
string
No description.
full inputSchema (json)
resume-campaign
json schema
{
"type": "object",
"properties": {
"campaignId": {
"type": "string"
}
},
"required": [
"campaignId"
]
}
clone-campaign#

Clone an existing campaign with a new name.

parametertypedescription
campaignIdrequired
string
No description.
newName
string
No description.
full inputSchema (json)
clone-campaign
json schema
{
"type": "object",
"properties": {
"campaignId": {
"type": "string"
},
"newName": {
"type": "string"
}
},
"required": [
"campaignId"
]
}
// prospects

Prospects

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

6 tools
list-prospects#

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

parametertypedescription
campaignId
string
No description.
status
string
No description.
enum: "pending", "connection_sent", "connected", "message_sent", "replied", "completed", "failed"
icpScoreMin
number
No description.
page
number
No description.
limit
number
No description.
full inputSchema (json)
list-prospects
json schema
{
"type": "object",
"properties": {
"campaignId": {
"type": "string"
},
"status": {
"type": "string",
"enum": [
"pending",
"connection_sent",
"connected",
"message_sent",
"replied",
"completed",
"failed"
]
},
"icpScoreMin": {
"type": "number"
},
"page": {
"type": "number"
},
"limit": {
"type": "number"
}
}
}
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.

parametertypedescription
prospectIdrequired
string
No description.
full inputSchema (json)
get-prospect
json schema
{
"type": "object",
"properties": {
"prospectId": {
"type": "string"
}
},
"required": [
"prospectId"
]
}
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. For imports >1000, chunk client-side: omit prospectListId on the first call to create a list (response returns prospectListId), then pass that same prospectListId on subsequent calls so all chunks land in the same list. The Pipeline CLI exposes a sugar wrapper `pipeline import-prospects --file leads.csv --campaign-id X` that handles the chunking automatically. Returns { added, failed, errors, prospectListId }.

parametertypedescription
campaignIdrequired
string
No description.
prospectsrequired
object[]
No description.
prospectListId
string
Optional. Append to this existing prospect list instead of creating a new one. Returned in the response of the first chunk — pass it back on subsequent chunks of a paginated import.
prospectListName
string
Optional. Custom name for the prospect list created when prospectListId is omitted.
full inputSchema (json)
add-prospects-bulk
json schema
{
"type": "object",
"properties": {
"campaignId": {
"type": "string"
},
"prospects": {
"type": "array",
"minItems": 1,
"maxItems": 1000,
"items": {
"type": "object",
"properties": {
"linkedinUrl": {
"type": "string"
},
"firstName": {
"type": "string"
},
"lastName": {
"type": "string"
},
"email": {
"type": "string"
},
"company": {
"type": "string"
},
"position": {
"type": "string"
}
},
"additionalProperties": true
}
},
"prospectListId": {
"type": "string",
"description": "Optional. Append to this existing prospect list instead of creating a new one. Returned in the response of the first chunk — pass it back on subsequent chunks of a paginated import."
},
"prospectListName": {
"type": "string",
"description": "Optional. Custom name for the prospect list created when prospectListId is omitted."
}
},
"required": [
"campaignId",
"prospects"
]
}
remove-prospect#

Remove a prospect from a campaign.

parametertypedescription
prospectIdrequired
string
No description.
campaignIdrequired
string
No description.
full inputSchema (json)
remove-prospect
json schema
{
"type": "object",
"properties": {
"prospectId": {
"type": "string"
},
"campaignId": {
"type": "string"
}
},
"required": [
"prospectId",
"campaignId"
]
}
get-prospect-stats#

Get prospect statistics for a campaign including counts by status.

parametertypedescription
campaignIdrequired
string
No description.
full inputSchema (json)
get-prospect-stats
json schema
{
"type": "object",
"properties": {
"campaignId": {
"type": "string"
}
},
"required": [
"campaignId"
]
}
list-prospect-lists#

List all prospect lists in a workspace.

parametertypedescription
workspaceIdrequired
string
No description.
full inputSchema (json)
list-prospect-lists
json schema
{
"type": "object",
"properties": {
"workspaceId": {
"type": "string"
}
},
"required": [
"workspaceId"
]
}
// analytics

Analytics

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

10 tools
get-campaign-analytics#

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

parametertypedescription
campaignIdrequired
string
No description.
start
string
No description.
end
string
No description.
full inputSchema (json)
get-campaign-analytics
json schema
{
"type": "object",
"properties": {
"campaignId": {
"type": "string"
},
"start": {
"type": "string"
},
"end": {
"type": "string"
}
},
"required": [
"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).

parametertypedescription
linkedin_account_idrequired
string
UUID of the LinkedIn account.
period
string
Default: week.
enum: "day", "week", "month", "quarter"
start
string
ISO date YYYY-MM-DD (overrides period).
end
string
ISO date YYYY-MM-DD.
compare
string
Include comparison with previous period.
enum: "true", "false"
format
string
Default: detailed.
enum: "summary", "detailed", "chart"
full inputSchema (json)
get-account-analytics
json schema
{
"type": "object",
"properties": {
"linkedin_account_id": {
"type": "string",
"description": "UUID of the LinkedIn account."
},
"period": {
"type": "string",
"enum": [
"day",
"week",
"month",
"quarter"
],
"description": "Default: week."
},
"start": {
"type": "string",
"description": "ISO date YYYY-MM-DD (overrides period)."
},
"end": {
"type": "string",
"description": "ISO date YYYY-MM-DD."
},
"compare": {
"type": "string",
"enum": [
"true",
"false"
],
"description": "Include comparison with previous period."
},
"format": {
"type": "string",
"enum": [
"summary",
"detailed",
"chart"
],
"description": "Default: detailed."
}
},
"required": [
"linkedin_account_id"
]
}
get-reply-analytics#

Get reply rate analytics for a campaign.

parametertypedescription
campaignIdrequired
string
No description.
full inputSchema (json)
get-reply-analytics
json schema
{
"type": "object",
"properties": {
"campaignId": {
"type": "string"
}
},
"required": [
"campaignId"
]
}
get-icp-distribution#

Get ICP score distribution for prospects in a campaign.

parametertypedescription
campaignIdrequired
string
No description.
full inputSchema (json)
get-icp-distribution
json schema
{
"type": "object",
"properties": {
"campaignId": {
"type": "string"
}
},
"required": [
"campaignId"
]
}
top-performers#

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

parametertypedescription
metricrequired
string
No description.
enum: "replies", "completions", "connections"
limit
number
Top N to return (1-50, default 5).
full inputSchema (json)
top-performers
json schema
{
"type": "object",
"properties": {
"metric": {
"type": "string",
"enum": [
"replies",
"completions",
"connections"
]
},
"limit": {
"type": "number",
"description": "Top N to return (1-50, default 5)."
}
},
"required": [
"metric"
]
}
recent-replies#

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

parametertypedescription
limit
number
Max replies to return (1-100, default 20).
since
string
ISO date — only return replies after this timestamp.
full inputSchema (json)
recent-replies
json schema
{
"type": "object",
"properties": {
"limit": {
"type": "number",
"description": "Max replies to return (1-100, default 20)."
},
"since": {
"type": "string",
"description": "ISO date — only return replies after this timestamp."
}
}
}
compare-campaigns#

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

parametertypedescription
campaignIdsrequired
string[]
2-10 campaign IDs to compare.
full inputSchema (json)
compare-campaigns
json schema
{
"type": "object",
"properties": {
"campaignIds": {
"type": "array",
"items": {
"type": "string"
},
"minItems": 2,
"maxItems": 10,
"description": "2-10 campaign IDs to compare."
}
},
"required": [
"campaignIds"
]
}
execution-progress#

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

parametertypedescription
campaignIdrequired
string
No description.
full inputSchema (json)
execution-progress
json schema
{
"type": "object",
"properties": {
"campaignId": {
"type": "string"
}
},
"required": [
"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.

parametertypedescription
campaignIdrequired
string
No description.
limit
number
Max rows (1-200, default 50).
full inputSchema (json)
pending-actions
json schema
{
"type": "object",
"properties": {
"campaignId": {
"type": "string"
},
"limit": {
"type": "number",
"description": "Max rows (1-200, default 50)."
}
},
"required": [
"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.

parametertypedescription
campaignIdrequired
string
No description.
full inputSchema (json)
failed-actions
json schema
{
"type": "object",
"properties": {
"campaignId": {
"type": "string"
}
},
"required": [
"campaignId"
]
}
// linkedin-accounts

LinkedIn Accounts

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

6 tools
list-linkedin-accounts#

List all LinkedIn accounts connected to a workspace.

parametertypedescription
workspaceIdrequired
string
No description.
full inputSchema (json)
list-linkedin-accounts
json schema
{
"type": "object",
"properties": {
"workspaceId": {
"type": "string"
}
},
"required": [
"workspaceId"
]
}
get-linkedin-account#

Get details of a specific LinkedIn account.

parametertypedescription
accountIdrequired
string
No description.
full inputSchema (json)
get-linkedin-account
json schema
{
"type": "object",
"properties": {
"accountId": {
"type": "string"
}
},
"required": [
"accountId"
]
}
get-daily-usage#

Get daily usage statistics for a LinkedIn account.

parametertypedescription
accountIdrequired
string
No description.
full inputSchema (json)
get-daily-usage
json schema
{
"type": "object",
"properties": {
"accountId": {
"type": "string"
}
},
"required": [
"accountId"
]
}
get-inmail-balance#

Get InMail credit balance for a LinkedIn account.

parametertypedescription
accountIdrequired
string
No description.
full inputSchema (json)
get-inmail-balance
json schema
{
"type": "object",
"properties": {
"accountId": {
"type": "string"
}
},
"required": [
"accountId"
]
}
send-connection-request#

Send a LinkedIn connection request to a profile.

parametertypedescription
accountIdrequired
string
No description.
profileUrlrequired
string
No description.
message
string
No description.
full inputSchema (json)
send-connection-request
json schema
{
"type": "object",
"properties": {
"accountId": {
"type": "string"
},
"profileUrl": {
"type": "string"
},
"message": {
"type": "string"
}
},
"required": [
"accountId",
"profileUrl"
]
}
get-linkedin-profile#

Look up a LinkedIn profile by URL.

parametertypedescription
profileUrlrequired
string
No description.
accountIdrequired
string
No description.
full inputSchema (json)
get-linkedin-profile
json schema
{
"type": "object",
"properties": {
"profileUrl": {
"type": "string"
},
"accountId": {
"type": "string"
}
},
"required": [
"profileUrl",
"accountId"
]
}
// workflows

Workflows

Status of workflow runs powering each campaign.

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

parametertypedescription
campaignIdrequired
string
No description.
detail
string
Defaults to summary.
enum: "summary", "full"
full inputSchema (json)
get-workflow-status
json schema
{
"type": "object",
"properties": {
"campaignId": {
"type": "string"
},
"detail": {
"type": "string",
"enum": [
"summary",
"full"
],
"description": "Defaults to summary."
}
},
"required": [
"campaignId"
]
}
// conversations

Conversations

Read and search conversation threads from connected inboxes.

3 tools
list-conversations#

List LinkedIn conversations with filtering options.

parametertypedescription
campaignId
string
No description.
status
string
No description.
page
number
No description.
limit
number
No description.
full inputSchema (json)
list-conversations
json schema
{
"type": "object",
"properties": {
"campaignId": {
"type": "string"
},
"status": {
"type": "string"
},
"page": {
"type": "number"
},
"limit": {
"type": "number"
}
}
}
get-conversation#

Get a specific conversation and its messages.

parametertypedescription
conversationIdrequired
string
No description.
full inputSchema (json)
get-conversation
json schema
{
"type": "object",
"properties": {
"conversationId": {
"type": "string"
}
},
"required": [
"conversationId"
]
}
search-conversations#

Search conversations by text.

parametertypedescription
queryrequired
string
No description.
campaignId
string
No description.
full inputSchema (json)
search-conversations
json schema
{
"type": "object",
"properties": {
"query": {
"type": "string"
},
"campaignId": {
"type": "string"
}
},
"required": [
"query"
]
}
// enrichment-tables

Enrichment Tables

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

11 tools
list-tables#

List all enrichment tables in a workspace.

parametertypedescription
workspaceIdrequired
string
No description.
full inputSchema (json)
list-tables
json schema
{
"type": "object",
"properties": {
"workspaceId": {
"type": "string"
}
},
"required": [
"workspaceId"
]
}
get-table#

Get details of a specific enrichment table.

parametertypedescription
tableIdrequired
string
No description.
full inputSchema (json)
get-table
json schema
{
"type": "object",
"properties": {
"tableId": {
"type": "string"
}
},
"required": [
"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.

parametertypedescription
namerequired
string
No description.
workspaceIdrequired
string
No description.
description
string
No description.
columns
object[]
Optional pre-seeded Column[] (id, name, type, config…).
sourceType
string
Optional source type, e.g. webhook, rss, crm, job-scraper, signal.
sourceConfig
object
Source-specific config (e.g. RSS feed URL, webhook secret).
workbookId
string
Optional workbook UUID to attach this table to.
webhookToken
string
Optional webhook token for sourceType=webhook.
enrichmentOptions
object
Same shape as on signal trackers: { companyEnrichment, icpScoring?, messaging? }.
aiMessagesEnabled
boolean
Pre-enable the AI messages column.
full inputSchema (json)
create-table
json schema
{
"type": "object",
"properties": {
"name": {
"type": "string"
},
"workspaceId": {
"type": "string"
},
"description": {
"type": "string"
},
"columns": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": true
},
"description": "Optional pre-seeded Column[] (id, name, type, config…)."
},
"sourceType": {
"type": "string",
"description": "Optional source type, e.g. webhook, rss, crm, job-scraper, signal."
},
"sourceConfig": {
"type": "object",
"additionalProperties": true,
"description": "Source-specific config (e.g. RSS feed URL, webhook secret)."
},
"workbookId": {
"type": "string",
"description": "Optional workbook UUID to attach this table to."
},
"webhookToken": {
"type": "string",
"description": "Optional webhook token for sourceType=webhook."
},
"enrichmentOptions": {
"type": "object",
"additionalProperties": true,
"description": "Same shape as on signal trackers: { companyEnrichment, icpScoring?, messaging? }."
},
"aiMessagesEnabled": {
"type": "boolean",
"description": "Pre-enable the AI messages column."
}
},
"required": [
"name",
"workspaceId"
]
}
add-table-rows#

Add rows to an enrichment table.

parametertypedescription
tableIdrequired
string
No description.
rowsrequired
object[]
No description.
full inputSchema (json)
add-table-rows
json schema
{
"type": "object",
"properties": {
"tableId": {
"type": "string"
},
"rows": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": true
}
}
},
"required": [
"tableId",
"rows"
]
}
get-table-rows#

Get rows from an enrichment table with pagination.

parametertypedescription
tableIdrequired
string
No description.
page
number
No description.
limit
number
No description.
full inputSchema (json)
get-table-rows
json schema
{
"type": "object",
"properties": {
"tableId": {
"type": "string"
},
"page": {
"type": "number"
},
"limit": {
"type": "number"
}
},
"required": [
"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).

parametertypedescription
tableIdrequired
string
No description.
namerequired
string
No description.
typerequired
string
No description.
enum: "text", "number", "currency", "date", "url", "email", "image", "checkbox", "select", "formula", "enrichment", "action", "source", "signal-type"
id
string
Optional column ID — auto-generated when omitted.
config
object
Type-specific config (formula expression, enrichment provider, select options, etc.).
width
number
Optional column width in pixels.
full inputSchema (json)
add-table-column
json schema
{
"type": "object",
"properties": {
"tableId": {
"type": "string"
},
"name": {
"type": "string"
},
"type": {
"type": "string",
"enum": [
"text",
"number",
"currency",
"date",
"url",
"email",
"image",
"checkbox",
"select",
"formula",
"enrichment",
"action",
"source",
"signal-type"
]
},
"id": {
"type": "string",
"description": "Optional column ID — auto-generated when omitted."
},
"config": {
"type": "object",
"additionalProperties": true,
"description": "Type-specific config (formula expression, enrichment provider, select options, etc.)."
},
"width": {
"type": "number",
"description": "Optional column width in pixels."
}
},
"required": [
"tableId",
"name",
"type"
]
}
get-enrichment-job-status#

Check the status of an enrichment job.

parametertypedescription
jobIdrequired
string
No description.
full inputSchema (json)
get-enrichment-job-status
json schema
{
"type": "object",
"properties": {
"jobId": {
"type": "string"
}
},
"required": [
"jobId"
]
}
export-table-csv#

Export an enrichment table as a CSV download URL.

parametertypedescription
tableIdrequired
string
No description.
full inputSchema (json)
export-table-csv
json schema
{
"type": "object",
"properties": {
"tableId": {
"type": "string"
}
},
"required": [
"tableId"
]
}
send-table-to-campaign#

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

parametertypedescription
tableIdrequired
string
No description.
campaignIdrequired
string
No description.
full inputSchema (json)
send-table-to-campaign
json schema
{
"type": "object",
"properties": {
"tableId": {
"type": "string"
},
"campaignId": {
"type": "string"
}
},
"required": [
"tableId",
"campaignId"
]
}
list-enrichment-providers#

List available enrichment providers for a workspace.

parametertypedescription
workspaceIdrequired
string
No description.
full inputSchema (json)
list-enrichment-providers
json schema
{
"type": "object",
"properties": {
"workspaceId": {
"type": "string"
}
},
"required": [
"workspaceId"
]
}
// signals

Signals

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

6 tools
list-signals#

List buying signals detected in your workspace.

parametertypedescription
workspaceIdrequired
string
No description.
full inputSchema (json)
list-signals
json schema
{
"type": "object",
"properties": {
"workspaceId": {
"type": "string"
}
},
"required": [
"workspaceId"
]
}
list-signal-trackers#

List all signal trackers in a workspace.

parametertypedescription
workspaceIdrequired
string
No description.
full inputSchema (json)
list-signal-trackers
json schema
{
"type": "object",
"properties": {
"workspaceId": {
"type": "string"
}
},
"required": [
"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.

parametertypedescription
workspace_id
string
Workspace UUID (optional when using API key auth — inferred from the key).
namerequired
string
Human-friendly tracker name.
typerequired
string
No description.
enum: "keyword", "own_post_engagers", "competitor_post_engagers", "hiring", "funding", "ai_discovery"
keywords
string[]
Required for keyword type.
monitored_post_url
string
Required for own_post_engagers and competitor_post_engagers.
linkedin_account_id
string
Optional — first workspace account is auto-assigned when omitted.
search_provider
string
For web-scout types (hiring/funding/ai_discovery). Platform is admin-only; non-admins must choose another provider + credential_id.
enum: "platform", "serper", "tavily", "exa", "firecrawl", "spider", "brave"
credential_id
string
Workspace credential for the chosen search_provider.
max_people_per_company
number
For web-scout types. Defaults to 5.
enrichment_options
object
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
Optional. Shape: { autoProcessNewRows?: boolean }. Defaults to false (cells render as click-to-enrich).
campaign_id
string
For engager types — push leads directly to this campaign instead of creating a table.
webhook_url
string
Optional webhook to notify on new signals.
full inputSchema (json)
create-signal-tracker
json schema
{
"type": "object",
"properties": {
"workspace_id": {
"type": "string",
"description": "Workspace UUID (optional when using API key auth — inferred from the key)."
},
"name": {
"type": "string",
"description": "Human-friendly tracker name."
},
"type": {
"type": "string",
"enum": [
"keyword",
"own_post_engagers",
"competitor_post_engagers",
"hiring",
"funding",
"ai_discovery"
]
},
"keywords": {
"type": "array",
"items": {
"type": "string"
},
"description": "Required for keyword type."
},
"monitored_post_url": {
"type": "string",
"description": "Required for own_post_engagers and competitor_post_engagers."
},
"linkedin_account_id": {
"type": "string",
"description": "Optional — first workspace account is auto-assigned when omitted."
},
"search_provider": {
"type": "string",
"enum": [
"platform",
"serper",
"tavily",
"exa",
"firecrawl",
"spider",
"brave"
],
"description": "For web-scout types (hiring/funding/ai_discovery). Platform is admin-only; non-admins must choose another provider + credential_id."
},
"credential_id": {
"type": "string",
"description": "Workspace credential for the chosen search_provider."
},
"max_people_per_company": {
"type": "number",
"description": "For web-scout types. Defaults to 5."
},
"enrichment_options": {
"type": "object",
"description": "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": {
"type": "object",
"description": "Optional. Shape: { autoProcessNewRows?: boolean }. Defaults to false (cells render as click-to-enrich)."
},
"campaign_id": {
"type": "string",
"description": "For engager types — push leads directly to this campaign instead of creating a table."
},
"webhook_url": {
"type": "string",
"description": "Optional webhook to notify on new signals."
}
},
"required": [
"name",
"type"
]
}
pause-signal-tracker#

Pause a signal tracker.

parametertypedescription
trackerIdrequired
string
No description.
full inputSchema (json)
pause-signal-tracker
json schema
{
"type": "object",
"properties": {
"trackerId": {
"type": "string"
}
},
"required": [
"trackerId"
]
}
resume-signal-tracker#

Resume a paused signal tracker.

parametertypedescription
trackerIdrequired
string
No description.
full inputSchema (json)
resume-signal-tracker
json schema
{
"type": "object",
"properties": {
"trackerId": {
"type": "string"
}
},
"required": [
"trackerId"
]
}
add-signal-to-campaign#

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

parametertypedescription
signalIdrequired
string
No description.
campaignIdrequired
string
No description.
full inputSchema (json)
add-signal-to-campaign
json schema
{
"type": "object",
"properties": {
"signalId": {
"type": "string"
},
"campaignId": {
"type": "string"
}
},
"required": [
"signalId",
"campaignId"
]
}
// raw-data

Raw Data

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

3 tools
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. Works on any publicly-visible post (yours or a competitor's) — LinkedIn surfaces engagement on public posts to anyone with a connected account. 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.

parametertypedescription
postUrlrequired
string
The LinkedIn post URL.
linkedinAccountIdrequired
string
Connected LinkedIn account in this workspace used to fetch.
full inputSchema (json)
list-post-engagers
json schema
{
"type": "object",
"properties": {
"postUrl": {
"type": "string",
"description": "The LinkedIn post URL."
},
"linkedinAccountId": {
"type": "string",
"description": "Connected LinkedIn account in this workspace used to fetch."
}
},
"required": [
"postUrl",
"linkedinAccountId"
]
}
list-profile-followers#

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

parametertypedescription
linkedinAccountIdrequired
string
Connected LinkedIn account whose followers to fetch.
limit
number
Max followers to return (default 500, max 5000).
full inputSchema (json)
list-profile-followers
json schema
{
"type": "object",
"properties": {
"linkedinAccountId": {
"type": "string",
"description": "Connected LinkedIn account whose followers to fetch."
},
"limit": {
"type": "number",
"description": "Max followers to return (default 500, max 5000)."
}
},
"required": [
"linkedinAccountId"
]
}
list-company-followers#

Return the raw follower list for a LinkedIn company page. READ-ONLY: no campaign, table, or prospect records are created. IMPORTANT: LinkedIn restricts company followers — full list is returned only for pages your connected account ADMINISTERS (your own company or pages you manage). Arbitrary competitor pages typically return empty due to LinkedIn permissions. Accepts either a company URL (slug auto-resolves to numeric org ID) or a numeric org ID directly. Pair with add-prospects-bulk after you filter/enrich externally.

parametertypedescription
companyUrlrequired
string
LinkedIn company page URL.
linkedinAccountIdrequired
string
Connected LinkedIn account in this workspace used to fetch.
limit
number
Max followers to return (default 500, max 5000).
full inputSchema (json)
list-company-followers
json schema
{
"type": "object",
"properties": {
"companyUrl": {
"type": "string",
"description": "LinkedIn company page URL."
},
"linkedinAccountId": {
"type": "string",
"description": "Connected LinkedIn account in this workspace used to fetch."
},
"limit": {
"type": "number",
"description": "Max followers to return (default 500, max 5000)."
}
},
"required": [
"companyUrl",
"linkedinAccountId"
]
}
// content

Content

Generate, publish, schedule, and strategise LinkedIn content.

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

parametertypedescription
workspace_id
string
Workspace UUID (sent as ?workspace_id query param). Auto-injected with API key auth.
workspace_slug
string
Optional workspace slug for the agent context.
topicrequired
string
What the post should be about (10-5000 chars).
postType
string
No description.
enum: "thought_leadership", "lead_magnet", "case_study", "personal_story"
postLength
string
No description.
enum: "short", "medium", "long"
linkedinAccountId
string
Optional — pin the post to a specific account voice.
hookStyle
string
No description.
enum: "question", "contrarian", "story", "statistic", "bold_claim", "curiosity_gap"
regenerateInstructions
string
User feedback when iterating on a previous draft.
previousPost
string
Previous post content for regeneration context.
platform
string
Default linkedin.
enum: "linkedin", "youtube", "twitter"
platformPostType
string
Platform-specific subtype.
twitterFormat
string
No description.
enum: "single_tweet", "thread"
youtubeDurationMin
number
Target video length in minutes.
strategyContext
object
No description.
full inputSchema (json)
generate-content
json schema
{
"type": "object",
"properties": {
"workspace_id": {
"type": "string",
"description": "Workspace UUID (sent as ?workspace_id query param). Auto-injected with API key auth."
},
"workspace_slug": {
"type": "string",
"description": "Optional workspace slug for the agent context."
},
"topic": {
"type": "string",
"description": "What the post should be about (10-5000 chars)."
},
"postType": {
"type": "string",
"enum": [
"thought_leadership",
"lead_magnet",
"case_study",
"personal_story"
]
},
"postLength": {
"type": "string",
"enum": [
"short",
"medium",
"long"
]
},
"linkedinAccountId": {
"type": "string",
"description": "Optional — pin the post to a specific account voice."
},
"hookStyle": {
"type": "string",
"enum": [
"question",
"contrarian",
"story",
"statistic",
"bold_claim",
"curiosity_gap"
]
},
"regenerateInstructions": {
"type": "string",
"description": "User feedback when iterating on a previous draft."
},
"previousPost": {
"type": "string",
"description": "Previous post content for regeneration context."
},
"platform": {
"type": "string",
"enum": [
"linkedin",
"youtube",
"twitter"
],
"description": "Default linkedin."
},
"platformPostType": {
"type": "string",
"description": "Platform-specific subtype."
},
"twitterFormat": {
"type": "string",
"enum": [
"single_tweet",
"thread"
]
},
"youtubeDurationMin": {
"type": "number",
"description": "Target video length in minutes."
},
"strategyContext": {
"type": "object",
"additionalProperties": true
}
},
"required": [
"topic"
]
}
list-posts#

List content posts in a workspace.

parametertypedescription
workspaceIdrequired
string
No description.
full inputSchema (json)
list-posts
json schema
{
"type": "object",
"properties": {
"workspaceId": {
"type": "string"
}
},
"required": [
"workspaceId"
]
}
get-post#

Get a specific content post.

parametertypedescription
postIdrequired
string
No description.
full inputSchema (json)
get-post
json schema
{
"type": "object",
"properties": {
"postId": {
"type": "string"
}
},
"required": [
"postId"
]
}
publish-post#

Publish a content post to LinkedIn IMMEDIATELY. 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.

parametertypedescription
postIdrequired
string
The content post ID (must be in draft status).
full inputSchema (json)
publish-post
json schema
{
"type": "object",
"properties": {
"postId": {
"type": "string",
"description": "The content post ID (must be in draft status)."
}
},
"required": [
"postId"
]
}
schedule-post#

Schedule a content post to publish at a future time. The cron worker will pick it up and publish to LinkedIn 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.

parametertypedescription
postIdrequired
string
The content post ID (must be in draft status).
scheduled_atrequired
string
ISO 8601 datetime in the future, e.g. 2026-04-23T18:30:00Z.
full inputSchema (json)
schedule-post
json schema
{
"type": "object",
"properties": {
"postId": {
"type": "string",
"description": "The content post ID (must be in draft status)."
},
"scheduled_at": {
"type": "string",
"description": "ISO 8601 datetime in the future, e.g. 2026-04-23T18:30:00Z."
}
},
"required": [
"postId",
"scheduled_at"
]
}
// inbox

Inbox

AI-driven sentiment classification on incoming replies.

1 tool
analyze-sentiment#

Run the SentimentAgent on a conversation: classifies the prospect across the canonical 7 stages (initial, interested, neutral, objection, meeting_ready, closed_lost, closed_won) 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.

parametertypedescription
workspaceSlug
string
Required for Clerk auth. Ignored when using API key (workspace inferred from key).
conversationrequired
object
Required. The conversation object (must include chat_id).
messages
object[]
Message thread to analyze.
currentTags
string[]
Existing conversation tags so the agent can update incrementally.
full inputSchema (json)
analyze-sentiment
json schema
{
"type": "object",
"properties": {
"workspaceSlug": {
"type": "string",
"description": "Required for Clerk auth. Ignored when using API key (workspace inferred from key)."
},
"conversation": {
"type": "object",
"additionalProperties": true,
"description": "Required. The conversation object (must include chat_id)."
},
"messages": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": true
},
"description": "Message thread to analyze."
},
"currentTags": {
"type": "array",
"items": {
"type": "string"
},
"description": "Existing conversation tags so the agent can update incrementally."
}
},
"required": [
"conversation"
]
}
// workspaces

Workspaces

Workspace metadata and subscription state.

2 tools
get-workspace#

Get workspace information.

parametertypedescription
workspaceIdrequired
string
No description.
full inputSchema (json)
get-workspace
json schema
{
"type": "object",
"properties": {
"workspaceId": {
"type": "string"
}
},
"required": [
"workspaceId"
]
}
get-workspace-subscription#

Get the workspace owner's subscription state in one call: planType (starter/pro/etc), status, isAdmin, trialEnd, trialDaysRemaining, isTrialActive, totalSeats, usedSeats, and currentPeriodEnd. Resolves to the workspace owner so all members see the same plan. Pipeline is BYOK — no usage credits are charged.

parametertypedescription
workspaceId
string
Optional. Omitting it falls back to the authenticated user's personal subscription.
full inputSchema (json)
get-workspace-subscription
json schema
{
"type": "object",
"properties": {
"workspaceId": {
"type": "string",
"description": "Optional. Omitting it falls back to the authenticated user's personal subscription."
}
}
}
// crm

CRM / Pipeline

Move prospects between pipeline stages and add notes.

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

parametertypedescription
workspaceId
string
Optional with API key auth — inferred from the key.
full inputSchema (json)
get-crm-pipeline
json schema
{
"type": "object",
"properties": {
"workspaceId": {
"type": "string",
"description": "Optional with API key auth — inferred from the key."
}
}
}
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.

parametertypedescription
prospectIdrequired
string
No description.
stagerequired
string
No description.
enum: "prospect", "connected", "replied", "interested", "meeting_request", "qualified", "meeting_scheduled", "meeting_completed", "won", "lost", "not_interested", "unqualified"
full inputSchema (json)
move-prospect-stage
json schema
{
"type": "object",
"properties": {
"prospectId": {
"type": "string"
},
"stage": {
"type": "string",
"enum": [
"prospect",
"connected",
"replied",
"interested",
"meeting_request",
"qualified",
"meeting_scheduled",
"meeting_completed",
"won",
"lost",
"not_interested",
"unqualified"
]
}
},
"required": [
"prospectId",
"stage"
]
}
add-prospect-note#

Add a note to a prospect.

parametertypedescription
prospectIdrequired
string
No description.
noterequired
string
No description.
full inputSchema (json)
add-prospect-note
json schema
{
"type": "object",
"properties": {
"prospectId": {
"type": "string"
},
"note": {
"type": "string"
}
},
"required": [
"prospectId",
"note"
]
}
// icp-gtm

ICP / GTM

ICP profile, GTM context, and live ICP scoring.

3 tools
get-icp-profile#

Get the ICP profile for a workspace.

parametertypedescription
workspaceId
string
No description.
full inputSchema (json)
get-icp-profile
json schema
{
"type": "object",
"properties": {
"workspaceId": {
"type": "string"
}
}
}
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.

parametertypedescription
workspaceId
string
Optional when using API key auth — inferred from the key.
full inputSchema (json)
get-gtm-context
json schema
{
"type": "object",
"properties": {
"workspaceId": {
"type": "string",
"description": "Optional when using API key auth — inferred from the key."
}
}
}
score-prospect#

Score a prospect against the workspace ICP.

parametertypedescription
prospectIdrequired
string
No description.
workspaceIdrequired
string
No description.
full inputSchema (json)
score-prospect
json schema
{
"type": "object",
"properties": {
"prospectId": {
"type": "string"
},
"workspaceId": {
"type": "string"
}
},
"required": [
"prospectId",
"workspaceId"
]
}
// blocklist

Blocklist

Domain and prospect blocklist management.

3 tools
list-blocklist#

List blocked domains and profiles.

No parameters.
full inputSchema (json)
list-blocklist
json schema
{
"type": "object",
"properties": {}
}
add-to-blocklist#

Add a domain or profile to the blocklist.

parametertypedescription
valuerequired
string
No description.
typerequired
string
No description.
enum: "domain", "profile"
full inputSchema (json)
add-to-blocklist
json schema
{
"type": "object",
"properties": {
"value": {
"type": "string"
},
"type": {
"type": "string",
"enum": [
"domain",
"profile"
]
}
},
"required": [
"value",
"type"
]
}
check-blocklist#

Check if a domain or profile is blocklisted.

parametertypedescription
valuerequired
string
No description.
full inputSchema (json)
check-blocklist
json schema
{
"type": "object",
"properties": {
"value": {
"type": "string"
}
},
"required": [
"value"
]
}
// power-tools

Power Tools

Composite tools that chain multiple steps into a single call.

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

parametertypedescription
workspaceIdrequired
string
Workspace ID
moderequired
string
Source mode. Use sales_nav for a Sales Navigator list URL, csv for a rows array.
enum: "sales_nav", "csv"
salesNav
object
Sales Nav config (required for mode=sales_nav)
csv
object
CSV rows config (required for mode=csv)
enrichment
object
Enrichment options
campaignConfig
object
Campaign configuration
autoStart
boolean
Auto-start campaign when ready
full inputSchema (json)
zero-to-outreach
json schema
{
"type": "object",
"properties": {
"workspaceId": {
"type": "string",
"description": "Workspace ID"
},
"mode": {
"type": "string",
"enum": [
"sales_nav",
"csv"
],
"description": "Source mode. Use sales_nav for a Sales Navigator list URL, csv for a rows array."
},
"salesNav": {
"type": "object",
"description": "Sales Nav config (required for mode=sales_nav)",
"properties": {
"listUrl": {
"type": "string"
},
"linkedinAccountId": {
"type": "string"
},
"limit": {
"type": "number"
}
}
},
"csv": {
"type": "object",
"description": "CSV rows config (required for mode=csv)",
"properties": {
"rows": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": true
}
}
}
},
"enrichment": {
"type": "object",
"description": "Enrichment options",
"properties": {
"columnTemplateIds": {
"type": "array",
"items": {
"type": "string"
}
}
}
},
"campaignConfig": {
"type": "object",
"description": "Campaign configuration",
"properties": {
"templateId": {
"type": "string"
},
"name": {
"type": "string"
},
"linkedinAccountIds": {
"type": "array",
"items": {
"type": "string"
}
},
"nodeOverrides": {
"type": "object",
"additionalProperties": true
}
}
},
"autoStart": {
"type": "boolean",
"description": "Auto-start campaign when ready"
}
},
"required": [
"workspaceId",
"mode"
]
}
build-campaign-from-table#

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

parametertypedescription
tableIdrequired
string
No description.
workspaceIdrequired
string
No description.
filters
object
No description.
campaignConfigrequired
object
No description.
autoStart
boolean
No description.
full inputSchema (json)
build-campaign-from-table
json schema
{
"type": "object",
"properties": {
"tableId": {
"type": "string"
},
"workspaceId": {
"type": "string"
},
"filters": {
"type": "object",
"properties": {
"minIcpScore": {
"type": "number"
},
"requiredFields": {
"type": "array",
"items": {
"type": "string"
}
}
}
},
"campaignConfig": {
"type": "object",
"properties": {
"templateId": {
"type": "string"
},
"name": {
"type": "string"
},
"linkedinAccountIds": {
"type": "array",
"items": {
"type": "string"
}
},
"nodeOverrides": {
"type": "object",
"additionalProperties": true
}
},
"required": [
"templateId",
"name",
"linkedinAccountIds"
]
},
"autoStart": {
"type": "boolean"
}
},
"required": [
"tableId",
"workspaceId",
"campaignConfig"
]
}
// jobs

Async Jobs

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

2 tools
get-job#

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

parametertypedescription
jobIdrequired
string
Job ID returned by async tools
full inputSchema (json)
get-job
json schema
{
"type": "object",
"properties": {
"jobId": {
"type": "string",
"description": "Job ID returned by async tools"
}
},
"required": [
"jobId"
]
}
cancel-job#

Cancel a running async MCP job.

parametertypedescription
jobIdrequired
string
No description.
full inputSchema (json)
cancel-job
json schema
{
"type": "object",
"properties": {
"jobId": {
"type": "string"
}
},
"required": [
"jobId"
]
}
// messaging

Messaging

Send LinkedIn messages programmatically.

1 tool
send-message#

Send a LinkedIn message in a conversation.

parametertypedescription
conversationIdrequired
string
No description.
linkedinAccountIdrequired
string
No description.
messagerequired
string
No description.
full inputSchema (json)
send-message
json schema
{
"type": "object",
"properties": {
"conversationId": {
"type": "string"
},
"linkedinAccountId": {
"type": "string"
},
"message": {
"type": "string"
}
},
"required": [
"conversationId",
"linkedinAccountId",
"message"
]
}
// draft-queue

Draft Queue

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

4 tools
list-drafts#

List pending AI message drafts awaiting approval.

No parameters.
full inputSchema (json)
list-drafts
json schema
{
"type": "object",
"properties": {}
}
approve-draft#

Approve an AI message draft so it gets sent.

parametertypedescription
draftIdrequired
string
No description.
full inputSchema (json)
approve-draft
json schema
{
"type": "object",
"properties": {
"draftId": {
"type": "string"
}
},
"required": [
"draftId"
]
}
edit-draft#

Edit an AI message draft before approving.

parametertypedescription
draftIdrequired
string
No description.
messagerequired
string
No description.
full inputSchema (json)
edit-draft
json schema
{
"type": "object",
"properties": {
"draftId": {
"type": "string"
},
"message": {
"type": "string"
}
},
"required": [
"draftId",
"message"
]
}
reject-draft#

Reject an AI message draft.

parametertypedescription
draftIdrequired
string
No description.
full inputSchema (json)
reject-draft
json schema
{
"type": "object",
"properties": {
"draftId": {
"type": "string"
}
},
"required": [
"draftId"
]
}
// agents

Agents

Read-only observation of your Pipeline Agents (Scout, Researcher, Writer, Sender, Closer, Coach) plus manual skill execution.

6 tools
list-agents-status#

List the current state of each Pipeline Agent (Scout, Researcher, Writer, Sender, Closer, Coach) in your workspace: autonomy setting, schedule, daily cap, active skills, and the last run summary. Read-only.

parametertypedescription
workspaceId
string
Optional with API key auth — inferred from the key.
full inputSchema (json)
list-agents-status
json schema
{
"type": "object",
"properties": {
"workspaceId": {
"type": "string",
"description": "Optional with API key auth — inferred from the key."
}
}
}
list-recent-agent-runs#

Paginated activity log of recent agent wake-ups in the workspace. Each row is one agent run with status, tool-call count, tokens used, and cost. Filter by agentRole. Read-only.

parametertypedescription
workspaceId
string
No description.
agentRole
string
No description.
enum: "scout", "researcher", "writer", "sender", "closer", "coach"
limit
number
Max rows (1-100, default 20).
full inputSchema (json)
list-recent-agent-runs
json schema
{
"type": "object",
"properties": {
"workspaceId": {
"type": "string"
},
"agentRole": {
"type": "string",
"enum": [
"scout",
"researcher",
"writer",
"sender",
"closer",
"coach"
]
},
"limit": {
"type": "number",
"description": "Max rows (1-100, default 20)."
}
}
}
get-agent-run#

Drill into a specific agent run: full input/output summary plus every tool call (agent_run_steps) with its arguments, output, duration, and tokens. Use for debugging or auditing what an agent actually did. Read-only.

parametertypedescription
runIdrequired
string
No description.
full inputSchema (json)
get-agent-run
json schema
{
"type": "object",
"properties": {
"runId": {
"type": "string"
}
},
"required": [
"runId"
]
}
list-workspace-skills#

List the skills installed in the workspace: first-party defaults, GitHub-synced, and custom. Each row includes name, description, source, agent roles it serves, and whether it is currently available. Read-only.

parametertypedescription
workspaceId
string
No description.
full inputSchema (json)
list-workspace-skills
json schema
{
"type": "object",
"properties": {
"workspaceId": {
"type": "string"
}
}
}
get-coach-briefing#

Read the latest Coach digest: the workspace-scoped learned_context that Coach writes after each daily synthesis. Surfaces what is working and what to change. Returns null when Coach has not run yet. Read-only.

parametertypedescription
workspaceId
string
No description.
full inputSchema (json)
get-coach-briefing
json schema
{
"type": "object",
"properties": {
"workspaceId": {
"type": "string"
}
}
}
run-skill#

Manually invoke a Pipeline skill with a payload (no Agents mode required). Useful from Cursor / Claude Code: "run deep-research-outreach on these 50 prospects." Goes through the bounded runtime so cost + budget are enforced. Returns a run summary including the runId you can pass to get-agent-run for full step-by-step output.

parametertypedescription
skillNamerequired
string
The skill name from frontmatter (e.g. dream-one-hundred, cold-email-write).
payload
object
Arbitrary input passed to the skill.
agentRole
string
Optional: pin which agent role context to use.
enum: "scout", "researcher", "writer", "sender", "closer", "coach"
full inputSchema (json)
run-skill
json schema
{
"type": "object",
"properties": {
"skillName": {
"type": "string",
"description": "The skill name from frontmatter (e.g. dream-one-hundred, cold-email-write)."
},
"payload": {
"type": "object",
"additionalProperties": true,
"description": "Arbitrary input passed to the skill."
},
"agentRole": {
"type": "string",
"enum": [
"scout",
"researcher",
"writer",
"sender",
"closer",
"coach"
],
"description": "Optional: pin which agent role context to use."
}
},
"required": [
"skillName"
]
}