Skip to content

Tools reference ​

Complete parameter reference for all 32 MCP tools, grouped by category.

Tip: Call start_pipeline_journey first whenever you want to build a new pipeline — it returns a full guided plan and all the option IDs you'll need.


Analytics ​

get_account_summary ​

Account snapshot: total pipelines, opportunities, and message counts.

No parameters required.


get_ai_performance ​

Total AI messages, average response time, and total cost.

No parameters required.


get_messaging_stats ​

Messaging volume with optional filtering.

ParameterTypeRequiredDescription
start_datestringNoISO 8601 lower bound on message date
end_datestringNoISO 8601 upper bound on message date
pipeline_idintegerNoRestrict to a specific pipeline
providerstringNowhatsapp, messenger, instagram, linkedin, web, or widget

Discover ​

list_pipelines ​

Your pipelines with status, description, and stage counts. No parameters required.


list_pipeline_stages ​

Stages of a pipeline ordered by stage order.

ParameterTypeRequiredDescription
pipeline_idintegerYesThe pipeline to list stages for

list_actions ​

Actions for a pipeline, optionally filtered to a specific stage.

ParameterTypeRequiredDescription
pipeline_idintegerYesThe pipeline that owns the actions
stage_idintegerNoRestrict to a specific stage; omit to return all actions including pipeline-level ones

list_action_results ​

Execution log for a pipeline's actions — one row per recorded run. Use it to check whether a webhook actually fired, and what it returned.

ParameterTypeRequiredDescription
pipeline_idintegerYesThe pipeline whose action results to list
opportunity_idintegerNoRestrict to a single opportunity
conversation_idintegerNoRestrict to opportunities linked to this conversation
action_idintegerNoRestrict to a single action. Use list_actions
limitintegerNoResults to return (default 50, max 100)
offsetintegerNoResults to skip for pagination (default 0)

list_variables ​

Pipeline variables available for use in actions. Call this before create_action to see which {{variable_name}} references already exist.

ParameterTypeRequiredDescription
pipeline_idintegerYesThe pipeline to list variables for
qstringNoFilter by variable name substring

list_contacts ​

Contacts (one row per contact) with merged custom overrides. Filters mirror those of the opportunities view.

ParameterTypeRequiredDescription
pipeline_idintegerNoRestrict to contacts in this pipeline
statusstringNoactive, pending, won, or lost
prioritystringNohigh, medium, or low
qstringNoSearch name, email, phone, or identifier
tag_idsinteger[]NoRestrict to contacts tagged with any of these IDs
start_datestringNoISO 8601 lower bound on created_at
end_datestringNoISO 8601 upper bound on created_at
pageintegerNoPage number (default 1)
per_pageintegerNoPage size (default 25, max 100)

list_opportunities ​

Opportunities (one row per opportunity) with contact, stage, and tags context. A single contact can appear multiple times if they have multiple opportunities.

ParameterTypeRequiredDescription
pipeline_idintegerNoRestrict to this pipeline
stage_idintegerNoRestrict to this stage
statusstringNoactive, pending, won, or lost
prioritystringNohigh, medium, or low
qstringNoSearch contact name, email, phone, identifier, or custom name
tag_idsinteger[]NoRestrict to opportunities tagged with any of these IDs
tagsstring[]NoSame filter by tag name, case-insensitive. Prefer this when you know the name
start_datestringNoISO 8601 lower bound on created_at
end_datestringNoISO 8601 upper bound on created_at
pageintegerNoPage number (default 1)
per_pageintegerNoPage size (default 25, max 100)

list_messages ​

Messages across pipelines, returned in chunks via cursor pagination for large result sets.

ParameterTypeRequiredDescription
pipeline_idintegerNoRestrict to this pipeline
contact_idintegerNoRestrict to a specific contact
rolestringNouser or assistant
start_datestringNoISO 8601 lower bound on message date
end_datestringNoISO 8601 upper bound on message date
cursorstringNoPagination cursor returned by the previous call
limitintegerNoChunk size (default 100, max 500)

Pass the returned next_cursor back to fetch the next chunk.


list_knowledge_tables ​

Lists the authenticated user's knowledge tables with column counts and attached pipelines. No parameters required.


search_knowledge_table ​

Search a knowledge table by natural-language query and return the most relevant rows.

ParameterTypeRequiredDescription
knowledge_table_idintegerYesThe table to search. Use list_knowledge_tables to find IDs
querystringYesNatural-language search query
limitintegerNoMax results to return (default 5, max 20)
use_hybridbooleanNotrue (default) for vector + keyword search; false for pure vector search

Search results carry point_ids, not default_ids — to delete or update a row you found here, look up its default_id with list_knowledge_points.


list_knowledge_points ​

Lists the rows stored in a knowledge table, with each row's default_id and column values. Use it to find the default_ids to pass to delete_knowledge_points or upsert_knowledge_points.

ParameterTypeRequiredDescription
knowledge_table_idintegerYesThe table to list. Use list_knowledge_tables to find IDs
per_pageintegerNoRows per page (default 20, max 100)
next_page_offsetstringNoOffset returned by the previous call. Omit for the first page

Each entry in points has point_id, default_id, data (the row's column values), and modified_date. Pass the returned next_page_offset back to fetch the next page; has_more is false on the last page. All IDs are returned as strings so they survive JSON parsing without rounding.


get_stage_followup ​

Returns the followup configuration for a stage, including the full interval schedule.

ParameterTypeRequiredDescription
stage_idintegerYesThe stage to retrieve the followup for. Use list_pipeline_stages

Returns has_followup (boolean) and followup (object with id, is_active, intervals, instructions, after_followup_stage_id, max_messages).


list_model_pool ​

The Smart Routing model pool for a pipeline — the current router / simple / moderate / complex assignments. Call this before update_model_pool to see what you are changing.

ParameterTypeRequiredDescription
pipeline_idintegerYesThe pipeline whose model pool to list. Use list_pipelines

get_pipeline_options ​

Returns available agent types, AI providers, AI models, languages, dialects, and user-connected channels. Call this before create_pipeline to obtain the valid IDs.

Models are returned per provider: call it once with no ai_provider_id to get the provider list, ask the user which one they want, then call it again with their choice to get that provider's models.

ParameterTypeRequiredDescription
language_codestringNoDefaults to en
ai_provider_idintegerNoOmit to get ai_providers with an empty ai_models; supply it to get that provider's full model rows

Build ​

start_pipeline_journey ​

Begins a guided, step-by-step journey to build a complete pipeline: pipeline settings → stages → actions. Call this first whenever a user wants to create a pipeline. Returns the full plan, all available options, and the exact questions to ask at each step.

ParameterTypeRequiredDescription
language_codestringNoLanguage for the guided plan (default en)
ai_provider_idintegerNoProvider to return models for. Omit on the first call to get ai_providers and ask the user to choose

create_pipeline ​

Creates a new AI pipeline.

ParameterTypeRequiredDescription
agent_type_idintegerYesAgent type (e.g. Sales, Support). Use get_pipeline_options for valid IDs
namestringYesUnique name for the pipeline
ai_model_idintegerYesAI model to use. Use get_pipeline_options for valid IDs
language_idintegerYesPrimary language. Use get_pipeline_options for valid IDs
descriptionstringNoShort description of the pipeline's purpose
personastringNoTop-level AI persona: voice, tone, and identity across all stages
instructionsstringNoTop-level AI behavioral guidelines across all stages
channel_idintegerNoLink to a specific communication channel
rag_modestringNonone, vector, or hybrid
dialect_idintegerNoLanguage dialect. Use get_pipeline_options
model_temperaturenumberNoAI creativity (0.1 – 1.0)
no_of_relevant_pointsintegerNoRAG knowledge points per request
agent_memory_windowintegerNoSize of the agent's memory window
max_conversation_costnumberNoCost cap per conversation
max_conversation_messagesintegerNoMessage cap per conversation (min 1)
context_message_countintegerNoPrior messages included as context in each AI request
followup_limitintegerNoMax follow-up messages per opportunity (default 6, min 1)
is_unknown_contacts_enabledbooleanNoAccept contacts the workspace has never seen and open opportunities for them. Defaults to true
is_model_routing_enabledbooleanNoEnable Smart Routing. When true, is_model_routing is required
is_model_routingobject[]NoExactly 4 tier entries. Required when Smart Routing is on
is_model_routing[].tierstringYesrouter, simple, moderate, or complex
is_model_routing[].ai_model_idintegerYesModel for this tier. Use get_pipeline_options
is_model_routing[].instructionsstringNoWhen the router should pick this tier, or how the worker should behave

Smart Routing

Smart Routing is the user-facing name for model routing. A router model reads each request and hands it to one of three worker tiers — simple, moderate, complex — so cheap requests do not pay for an expensive model. On an existing pipeline, set the pool with update_model_pool instead.


create_stage ​

Creates a new stage inside a pipeline.

ParameterTypeRequiredDescription
pipeline_idintegerYesThe pipeline this stage belongs to
namestringYesStage name (min 3 characters)
naturestringYesneutral (in-progress), won (closed successfully), or lost (closed unsuccessfully)
orderintegerYesPosition in the pipeline (1 = first)
descriptionstringNoHuman-readable stage description
enter_conditionstringNoNatural-language criteria an opportunity must meet to enter this stage (min 20 characters). Strongly recommended for production
ai_personastringNoAI persona override for conversations in this stage
instructionsstringNoStage-specific AI behavioral guidelines
notesstringNoInternal notes (not visible to end users)
parent_idintegerNoParent stage ID for sub-stage hierarchy
is_opening_messagebooleanNoWhether to send an opening message when an opportunity enters this stage
opening_message_typestringNoai_generated or static. Required when is_opening_message is true
static_opening_messagestringNoThe fixed opening message text. Used when opening_message_type is static

Production stages

enter_condition, ai_persona, instructions, and notes are what separates a stage that "kind of works" from one that performs. Add them on creation or update them immediately after.


create_variable ​

Creates a pipeline variable that actions can reference as {{variable_name}} in their URL, headers, or payload.

ParameterTypeRequiredDescription
pipeline_idintegerYesThe pipeline that owns this variable
namestringYesVariable name — letters, digits, underscores only (^[A-Za-z0-9_]+$). Must be unique within the pipeline
valuestringYesThe variable's underlying value. Format depends on type (see below)
typestringYesfixed, from_system, from_action, or from_ai
is_requiredbooleanYesWhether the variable must resolve before any referencing action fires
descriptionstringNoHuman-readable note about what this variable represents
data_typestringNostring, integer, boolean, or float (default: string)

value format by type:

TypeValue formatExample
fixedLiteral stringBearer abc123
from_systementity.field — no bracesopportunity.contact_email
from_actionaction_name.response.path.to.field or action_name.statusget_crm_user.response.data.id
from_aiShort extraction instructionThe customer's preferred delivery date

Available from_system fields:

EntityFields
opportunityid, contact_id, stage_id, pipeline_id, name, notes, status, contact_name, contact_priority, contact_identifier, contact_email, contact_phone, nature, conversation_id
stageid, pipeline_id, pipeline_name, name, order
messageid, message, is_manual, role, call_type, files, status, error

Variables are the only way to inject runtime values into actions

Never put raw system placeholders like {{opportunity.contact_email}} directly in an action URL, header, or payload. Wrap them in a from_system variable first, then reference that variable by its name.


create_action ​

Creates an HTTP webhook action that fires when its trigger condition is met.

ParameterTypeRequiredDescription
pipeline_idintegerYesThe pipeline that owns this action
namestringYesUnique name within the pipeline (max 255 characters)
methodstringYesHTTP method: GET, POST, PUT, PATCH, or DELETE
urlstringYesExternal endpoint URL. May contain {{variable_name}} placeholders
is_activebooleanYesSet false to create in draft mode
fixed_triggerstringYesWhen the action fires (see below)
stage_idintegerNoAttach to a specific stage. Omit for a pipeline-level (global) action
descriptionstringNoHuman-readable description
headersobjectNoHTTP headers as key/value pairs. Values may contain {{variable_name}} placeholders
payloadobjectNoRequest body as a JSON object. Values may contain {{variable_name}} placeholders
instructionsstringNoNatural-language guidance for AI-driven triggers
max_firesintegerNoCap on how many times this action fires per opportunity (min 1)
retriesintegerNoRetry attempts on HTTP failure (1 – 10)
orderintegerNoExecution order among actions with the same trigger (lower runs first, min 1)
response_exampleobjectNoExample of the expected response (used to scaffold from_action variables)

fixed_trigger values:

ValueWhen it firesChangeable after creation
stage_startedWhen an opportunity enters the stageNo
on_any_messageOn every messageNo
on_user_messageAI decides per user messageYes
customAI triggers on its own logicYes

from_ai variables not compatible with system triggers

Variables of type from_ai are resolved after the AI processes a message. They cannot be used with stage_started or on_any_message actions, which fire before the AI runs.


create_followup ​

Creates a re-engagement followup sequence for a stage. Each stage supports one followup. The followup fires timed messages to opportunities that have gone quiet in that stage.

ParameterTypeRequiredDescription
stage_idintegerYesThe stage to attach this followup to. Each stage can only have one followup
is_activebooleanYesStart sending immediately (true) or create in draft mode (false)
intervalsobject[]YesTimed schedule (1 – 100 entries). Array order determines sequence
intervals[].interval_valueintegerYesWait duration (1 – 100)
intervals[].interval_unitstringYesminute, hour, day, week, or month
instructionsstringNoAI instructions for what to say in follow-up messages
after_followup_stage_idintegerNoStage to move the opportunity to once all intervals are exhausted
assetsstringNoMedia or links to include in follow-up messages

Which stages need followups?

Use followups on neutral stages where leads go quiet (e.g. "Waiting for reply", "Proposal sent"). Won and lost stages never need followups. start_pipeline_journey will suggest candidates automatically.


create_knowledge_table ​

Creates a new knowledge table with its columns in one call. The table stores structured data the pipeline AI agent can search and retrieve during conversations.

ParameterTypeRequiredDescription
namestringYesUnique table name
descriptionstringNoWhat this table contains and when the agent should use it
columnsobject[]YesColumn definitions (min 1)
columns[].namestringYesColumn name — unique within the table
columns[].data_typestringYesstring, number, or boolean
columns[].orderintegerYesDisplay order (1 = first)
columns[].is_searchablebooleanNoAgent can search by this column. Enable for your primary text/content column
columns[].is_retrievablebooleanNoColumn is included in search results returned to the agent
columns[].is_filterablebooleanNoAgent can filter results by this column value
columns[].is_uniquebooleanNoValues must be unique across rows

After creation, populate rows with upsert_knowledge_points, then attach the table to the pipeline that should use it.

A new table is inert until it is attached

Creating a table and filling it with rows does not make it reachable. Attach it with update_pipeline:

json
{ "pipeline_id": 12, "attach_knowledge_table_ids": [<the new table id>] }

list_knowledge_tables shows which pipelines each table is currently attached to.


upsert_knowledge_points ​

Inserts or updates rows in a knowledge table. Each row matched by default_id — existing rows are updated, new ones are inserted. This operation costs training credits.

ParameterTypeRequiredDescription
knowledge_table_idintegerYesThe table to upsert rows into. Use list_knowledge_tables to find IDs
pointsobject[]YesRows to upsert (min 1). Each object must include default_id plus column values
points[].default_idstringYesStable identifier for the row — used to match for updates (e.g. a product SKU or an FAQ slug)

Include a key/value pair for every column defined on the table. Example:

json
{
  "knowledge_table_id": 42,
  "points": [
    { "default_id": "faq-001", "question": "What is your return policy?", "answer": "30 days, no questions asked." },
    { "default_id": "faq-002", "question": "Do you ship internationally?", "answer": "Yes, to 50+ countries." }
  ]
}

Update ​

update_pipeline ​

Updates an existing pipeline. Only the fields you provide are changed.

ParameterTypeRequiredDescription
pipeline_idintegerYesThe pipeline to update. Use list_pipelines
namestringNoNew pipeline name
descriptionstringNoNew description
personastringNoUpdated AI persona
instructionsstringNoUpdated AI behavioral guidelines
statusstringNoPipeline status
is_archivedbooleanNoArchive or restore the pipeline
ai_model_idintegerNoNew AI model. Use get_pipeline_options
language_idintegerNoNew language. Use get_pipeline_options
dialect_idintegerNoNew dialect
model_temperaturenumberNoAI creativity (0.1 – 1.0)
rag_modestringNonone, vector, or hybrid
no_of_relevant_pointsintegerNoRAG points per request
agent_memory_windowintegerNoMemory window size
context_message_countintegerNoContext message count
max_conversation_costnumberNoCost cap per conversation
max_conversation_messagesintegerNoMessage cap per conversation
followup_limitintegerNoMax follow-up messages per opportunity (min 1)
is_unknown_contacts_enabledbooleanNoAccept contacts the workspace has never seen
is_model_routing_enabledbooleanNoToggle Smart Routing
attach_knowledge_table_idsinteger[]NoKnowledge tables to attach, so this pipeline's agent can search them. Additive — tables already attached stay attached
detach_knowledge_table_idsinteger[]NoKnowledge tables to unlink from this pipeline. The table and its rows survive; other pipelines using it are unaffected

Note: agent_type cannot be changed after pipeline creation. This tool toggles Smart Routing but does not carry the tier assignments — use update_model_pool for those.

Attaching knowledge ​

A knowledge table is inert until it is attached to a pipeline. Creating it and filling it with rows is not enough — no agent searches it until you attach it here.

Both fields are relative, not a replacement: they add or remove exactly the IDs you list and leave every other attachment on the pipeline alone. Both are idempotent — re-attaching a table that is already attached comes back under already_attached, and detaching one that was not attached comes back under not_attached, neither being an error. Sending the same ID in both lists is rejected outright, and nothing changes.

json
{
  "pipeline_id": 12,
  "attach_knowledge_table_ids": [3, 7],
  "detach_knowledge_table_ids": [4]
}

The response carries a knowledge_tables object with attached, detached, already_attached, not_attached, and now_attached — each a list of {id, name}, so you can read the change back without a follow-up call. A table you do not own fails the whole call before anything is written.


update_model_pool ​

Creates or replaces the Smart Routing model pool on an existing pipeline. Requires exactly 4 models — one per tier. Smart Routing is switched on for the pipeline once the update succeeds.

ParameterTypeRequiredDescription
pipeline_idintegerYesThe pipeline to update. Use list_pipelines
modelsobject[]YesExactly 4 tier assignments — no more, no fewer
models[].tierstringYesrouter, simple, moderate, or complex, each used once
models[].ai_model_idintegerYesModel for this tier. Use get_pipeline_options
models[].instructionsstringNoWhen the router should pick this tier, or how the worker should behave

Call list_model_pool first to see the current assignments — this replaces all four, not just the ones you name.


update_stage ​

Updates an existing stage. Only the fields you provide are changed.

ParameterTypeRequiredDescription
stage_idintegerYesThe stage to update. Use list_pipeline_stages
namestringNoNew stage name (min 3 characters)
descriptionstringNoNew description
naturestringNoneutral, won, or lost
orderintegerNoNew position in the pipeline
enter_conditionstringNoUpdated entry criteria (min 20 characters)
ai_personastringNoUpdated AI persona for this stage
instructionsstringNoUpdated stage-specific AI instructions
notesstringNoUpdated internal notes
is_opening_messagebooleanNoToggle opening message
opening_message_typestringNoai_generated or static
static_opening_messagestringNoUpdated static opening message text
is_foldedbooleanNoCollapse this stage in the UI

update_action ​

Updates an existing action. Only the fields you provide are changed.

ParameterTypeRequiredDescription
action_idintegerYesThe action to update
namestringNoNew action name
descriptionstringNoNew description
is_activebooleanNoEnable or disable the action
methodstringNoNew HTTP method
urlstringNoNew endpoint URL
headersobjectNoUpdated headers
payloadobjectNoUpdated request body
fixed_triggerstringNoon_user_message or custom only — system triggers (stage_started, on_any_message) cannot be changed after creation
instructionsstringNoUpdated AI trigger instructions
max_firesintegerNoUpdated fire cap
retriesintegerNoUpdated retry count (1 – 10)
orderintegerNoUpdated execution order
response_exampleobjectNoUpdated response example

update_variable ​

Updates an existing pipeline variable. Only the fields you provide are changed.

ParameterTypeRequiredDescription
variable_idintegerYesThe variable to update
namestringNoNew name. Ignored if the variable is already referenced by one or more actions
valuestringNoNew value (format rules same as create_variable)
typestringNoNew type: fixed, from_system, from_action, or from_ai
is_requiredbooleanNoUpdated required flag
descriptionstringNoUpdated description
data_typestringNostring, integer, boolean, or float

update_opportunities ​

Bulk update one or many opportunities at once.

ParameterTypeRequiredDescription
opportunity_idsinteger[]YesIDs to update. Pass [123] for a single update
statusstringNoNew status: pending, active, won, or lost
stage_idintegerNoMove to this stage (must be in the same pipeline)
namestringNoOverride the opportunity name
notesstringNoNew notes
tagsstring[]NoTag names to add (missing tags are created automatically)
deleted_tagsinteger[]NoTag IDs to remove

Returns updated_ids and skipped entries with reasons (e.g. cross-pipeline stage moves are rejected).


update_followup ​

Updates an existing followup configuration. Only the fields you provide are changed. When intervals is provided it replaces the entire schedule — supply all intervals you want, not just the changed ones.

ParameterTypeRequiredDescription
followup_idintegerYesThe followup to update. Use get_stage_followup to find this
is_activebooleanNoEnable or disable the followup
intervalsobject[]NoReplacement interval schedule (see create_followup for item schema)
instructionsstringNoUpdated AI instructions for follow-up message content
after_followup_stage_idinteger | nullNoUpdated transition stage. Pass null to remove
assetsstring | nullNoUpdated assets

Delete ​

delete_knowledge_points ​

Remove specific rows from a knowledge table by their default_id values. Use list_knowledge_points to find them.

ParameterTypeRequiredDescription
knowledge_table_idintegerYesThe table to delete rows from. Use list_knowledge_tables to find IDs
idsstring[]YesArray of default_id values identifying the rows to delete

Returns deleted_count — the number of rows removed.