Available tools
Find the Acquisity MCP tool for campaigns, leads and supported CRM records.
Acquisity exposes 27 campaign tools. A signed-in connection or workspace API key receives the additional CRM catalogue in every workspace, subject to connection permissions. Your assistant chooses a tool from your request, then supplies its arguments. The tools use the same permissions and validation as the REST APIs.
Start with list_workspaces. Pass the chosen workspaceId to other tools; get_operation takes an operationId instead.
Workspaces and campaign results
| Tool | What it does |
|---|---|
list_workspaces | Lists the workspace your signed-in connection can access, or the workspaces available to a static key. An Acquisity staff key lists every workspace. |
get_workspace | Reads one workspace's details. |
list_email_accounts | Lists the workspace's sending inboxes and their status, so you can pick valid emailAccounts for a campaign. Inboxes in warmup are marked and are not yet usable. |
get_workspace_usage | Reads the credit balance and contact capacity (used, limit, remaining). Read-only; waits for the result. Requires workspaces:read. |
list_campaigns | Lists campaigns in a workspace. |
get_campaign | Reads a campaign and its current state, including sequence copy and the AI SDR call type. |
get_campaign_metrics | Reads performance metrics, including per-step and per-variant sent, replies, positive replies and meetings (zero-based step and variant). |
validate_campaign | Checks campaign readiness and reports missing setup. Provider-side launch checks can still reject a launch. |
Read-only and Full connections can use these tools. Static keys need workspaces:read for workspace tools and campaigns:read for campaign reads, validation and list_email_accounts.
CRM records
CRM MCP is available to signed-in connections and workspace API keys in every workspace, subject to connection permissions. Personal access tokens never receive these tools. Read-only connections receive the read tools; Full connections receive the read and write tools.
| Resource | Read tools | Write tools |
|---|---|---|
| Search | search_crm | — |
| People | list_people, get_person | create_person, update_person |
| Companies | list_companies, get_company | create_company, update_company |
| Deals | list_deals, get_deal | create_deal, update_deal |
| Tasks | list_tasks, get_task | create_task, update_task |
| Notes | list_notes, get_note | create_note, update_note |
search_crm searches People and Companies. Lists return at most 100 records per page and use opaque cursors. To complete a Task, call update_task with body.status set to completed. To move a Deal, first call get_deal, then call update_deal with both the desired stageId and the observed expectedCurrentStageId.
CRM discovery and relationships
| Purpose | Tools |
|---|---|
| Pipelines and stages | list_pipelines, get_pipeline, list_pipeline_stages, get_pipeline_stage |
| Owners and assignees | list_members, get_member |
| Existing custom fields | list_custom_fields, get_custom_field |
| Supported links | link_person_company, link_person_deal, link_company_deal |
The catalogue does not expose delete, unlink, merge, bulk edit, pipeline editing, payments, calling, messaging or arbitrary HTTP tools. Every CRM mutation requires an idempotencyKey. Keep the same key only when retrying the identical tool call; changed arguments require a new key.
Campaign changes
These tools require Full access, or a workspace key with campaigns:write.
| Tool | What it does |
|---|---|
create_campaign | Creates a draft. Does not launch it; configured campaign-created automations may run. |
update_campaign | Changes supported campaign settings, including the AI SDR call type (callTypeId, also on active and paused campaigns). To change schedule and a workspace call type, send two separate updates; only a built-in call type can ride with schedule. Requires ifMatch from the latest get_campaign response's updatedAt. |
duplicate_campaign | Creates a draft copy. Provider duplication and lead import can continue asynchronously. |
launch_campaign | Starts or resumes real outreach. Can send email and spend money. |
pause_campaign | Requests a pause to future sending; cannot recall messages already handed off. |
delete_campaign | Permanently deletes a campaign, its leads and its activity, here and at the provider. Irreversible. Requires idempotencyKey. |
set_campaign_sequence | Attaches an exact or AI-generated sequence to a draft without an existing sequence. |
copy_campaign_sequence | Replaces a draft's sequence with a copy from another campaign. |
update_campaign_variant | Turns one sequence variant on or off, or edits its subject and body, on a draft or live campaign. |
add_campaign_step | Appends one email step to the end of a draft or live campaign's sequence. |
For set_campaign_sequence, supply either exact steps or an AI brief with niche and emailMethod. AI generation requires the workspace's cold-email and niche-research setup; the direct method also needs its direct-method setup. To change a step after it exists, use update_campaign_variant (zero-based stepIndex and variantIndex) and add_campaign_step; both need ifMatch, the campaign's latest updatedAt from get_campaign, and return the new updatedAt once the write has finished. Removing or replacing steps is done in the app. On an active campaign a step added with add_campaign_step starts turned off until you enable it with update_campaign_variant. Review the copy with get_campaign, which returns the sequence's subjects and bodies, before launching. Follow-up steps (index 1 and up) are sent as a reply in the first email's thread when subject is "" or missing in set_campaign_sequence and add_campaign_step. To make an existing follow-up a reply, update_campaign_variant must send subject: "" explicitly, because leaving subject out keeps the current one. Step 0 always needs a subject.
Read the latest campaign before updating it. If another change makes ifMatch stale, read it again before retrying. Campaign creation guide.
Campaign leads
| Tool | What it does | Required scope |
|---|---|---|
list_campaign_leads | Lists leads already in a campaign. | campaignLeads:read |
get_campaign_lead | Reads one campaign lead. | campaignLeads:read |
export_campaign_leads | Exports existing leads as paginated CSV. | campaignLeads:read |
preview_campaign_lead_search | Counts matching leads and returns a redacted sample without spending credits. Supports maxLeadsPerCompany, which caps the sample per company. Returns capacityWarning when the matches are more than the contact capacity left. | Full, or campaigns:write on a workspace key |
ai_search_campaign_leads | Turns a brief into proposed filters for review. Does not run the search or spend credits. | Full, or campaigns:write on a workspace key |
search_campaign_leads | Runs a paid search and attaches matching leads to the campaign. | Full, or campaigns:write on a workspace key |
add_campaign_leads | Adds supplied lead objects and their customVariables; returns an operation to track. | Full, or campaigns:write on a workspace key |
delete_campaign_leads | Permanently deletes all of a campaign's leads, or up to 100 by id, here and at the provider. Irreversible. Requires idempotencyKey. | Full, or campaigns:write on a workspace key |
export_campaign_leads returns up to 3,000 records per page. Follow its returned nextCursor until there is no next page; the cursor is in a separate JSON content block alongside the CSV.
Adding leads to an active campaign enrols them in its live sequence. Confirm the target campaign before running a paid search or importing supplied leads.
add_campaign_leads accepts { workspaceId, campaignId, idempotencyKey, body }, where body contains leads and optional skipExistingInOtherCampaigns. Each lead has email, existing manual lead fields, and optional string-valued customVariables, such as { "icebreaker": "Saw your launch." }. Send 1–1,000 leads within the 1 MiB serialized tool envelope. Reuse the same key only for a retry of the same batch. Existing duplicates in the same campaign are skipped and are not overwritten; the default cross-campaign protection remains enabled.
delete_campaign and delete_campaign_leads cannot be undone. Confirm the campaign and leads with the user first. Send a stable idempotencyKey and reuse it only to retry the same delete; a retry returns the original operation and never deletes twice.
delete_campaign_leads accepts { workspaceId, campaignId, idempotencyKey, body }, where body is { "all": true } or { "leadIds": [...] } with 1–100 ids from list_campaign_leads. If any id is not in the campaign, nothing is deleted and the error lists those ids. The tool returns once the provider and local deletes finish, and the freed lead capacity is available again. Pending AI SDR follow-ups for the deleted leads are cancelled first.
A delete that does not finish ends needs_attention, not failed. When result.retryWithNewIdempotencyKey is true, send the request again with a new idempotencyKey: for delete_campaign_leads by id, send only result.remainingLeadIds; with all, send { "all": true } again; for delete_campaign, send the same request. result.providerUnconfirmedLeadIds lists leads removed here that the provider did not confirm, which a retry cannot fix. A failed delete follows error.retryable: when it is true, for example after an infrastructure error, send the same request again with a new idempotencyKey; when it is false, such as a missing campaign, child campaigns or no outreach subscription, don't retry it as is.
MCP does not read a local CSV path. Map CSV rows to these objects with authorized client file tools, or provide the mapped data. CSV mapping and batching.
Standalone lead search
These tools work in a workspace without attaching results to a campaign. Read-only connections can propose filters and preview results; paid search requires Full access. Static-key requirements are listed below; search_leads also requires an organization-scoped key.
| Tool | What it does | Required scope |
|---|---|---|
ai_search_leads | Proposes filters from a brief, without searching or spending credits. | leads:read |
preview_lead_search | Shows match counts and a redacted sample without spending credits. Supports maxLeadsPerCompany, which caps the sample per company. Returns capacityWarning when the matches are more than the contact capacity left. | leads:read |
search_leads | Runs a paid search and exports verified results. Does not change a campaign. | leads:search |
Every lead-search tool takes the same filters. By default a search leaves out leads your workspace already has; set skipOwnedLeads: false to search the full pool, which can return leads you already have. B2B searches can also target people by name with leadNames, and include or exclude cities or states with locationCities and excludeLocationCities.
Both paid search tools require an idempotencyKey. Reuse the same key and arguments for a retry; a new key can start another billed search.
AI SDR knowledge base
| Tool | What it does | Required scope |
|---|---|---|
get_ai_sdr_knowledge_base | Reads the free text the AI SDR uses when it replies to prospects, and the updatedAt to send back when you change it. | workspaces:read |
update_ai_sdr_knowledge_base | Replaces the whole text (up to 200,000 characters). Requires ifMatch: the updatedAt from get_ai_sdr_knowledge_base, or * when it returned null. | workspaces:write on a workspace key, or a personal token of a workspace owner or admin |
update_ai_sdr_knowledge_base is not available to signed-in connections, because they never receive workspaces:write. Use a workspace API key, or a personal access token owned by a workspace owner or admin. It runs asynchronously and waits for the operation to finish. The text is stored exactly as sent, so read it first, change it, and send the full text back. The updatedAt you pass as ifMatch versions all AI SDR settings, so if anyone saved any AI SDR setting in between, the tool returns a 412 error and writes nothing; read it again and retry. Like the AI SDR settings page, it needs an active outreach subscription; without one the operation fails with code forbidden and the message "An active outreach subscription is required to make changes." Other AI SDR settings are never touched.
Webhooks and operations
| Tool | What it does |
|---|---|
create_webhook | Registers an HTTPS destination for events. A signed-in connection requires Full access and an owner or admin role. A static key requires webhooks:write; personal-token users must also be owners or admins. Save the signing secret when it is returned, because it is shown once. |
get_operation | Checks an asynchronous operation using its ID. Workspace-owned operations accept a key from the same workspace; user-owned operations require a token belonging to the same user. |
When a tool says it is still running
Write tools wait briefly for an operation to finish. They can return before the work is complete. Always inspect the operation's status and keep its id.
- For
queuedorrunning, callget_operationwith the returned ID. Do not submit the original change again just because it is still running. - For
failed,cancelledorneeds_attention, read the returned error and any suggested fix. - A polling timeout or failure can still include the accepted operation's ID and links. Use those to check what happened before retrying.
For campaign lead search, succeeded means the search was dispatched. Leads may take several more minutes to appear; check list_campaign_leads afterward.
For campaign lead imports, succeeded means the import finished. Inspect its received, linked, uploaded, duplicates, invalid, and skipped results, then use list_campaign_leads or get_campaign_lead to check customVariables on a small sample.
For standalone lead search, succeeded means search and verification have finished. The result includes downloadUrl, leadCount, format and expiresAt. Download before the link expires.
Each underlying request, including operation checks, consumes API quota. Read the operations guide.