, or saves it as a draft (Optimize add-on). It goes live publicly at once unless status is 'draft'. It uses one article from the monthly allowance, whether live or draft. With none left it returns 400 'No articles left this month. Add more articles on the Billing page.' Confirm with the user before publishing. To change an existing article use update_blog_article. Returns 201 with \{ article, url \}; url is the public address.
| Connection | Account-owner URL or OAuth (not a team member URL) |
| --- | --- |
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `websiteId` | `string` | Yes | any | Website ID from list_websites. |
| `title` | `string` | Yes | any | Article title (H1). Required. |
| `html` | `string` | Yes | any | Article body as HTML. Supported: p, h2, h3, ul/ol, blockquote, img, table. Required. |
| `metaDescription` | `string` | No | any | Search-result description, about 150–160 characters. |
| `excerpt` | `string` | No | any | Short summary for the blog index. Defaults to the meta description. |
| `category` | `string` | No | any | Category name. Default 'Guides'. |
| `coverImage` | `string` | No | any | Absolute cover image URL starting with http(s)://; other values are dropped. |
| `slug` | `string` | No | any | URL path segment, e.g. "lead-scoring-guide". Defaults to the title. A number is added if the slug is already taken. |
| `status` | `string` | No | `live`, `draft` | 'live' (default) publishes now; 'draft' saves without publishing. |
| `faq` | `object[]` | No | any | FAQ entries shown under the article. Entries missing q or a are dropped. |
| `faq[].q` | `string` | No | any | Question text. |
| `faq[].a` | `string` | No | any | Answer text. |
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "create_blog_article",
"title": "Create blog article",
"annotations": {
"title": "Create blog article",
"readOnlyHint": false,
"destructiveHint": false,
"idempotentHint": false,
"openWorldHint": true
},
"inputSchema": {
"type": "object",
"properties": {
"websiteId": {
"type": "string",
"description": "Website ID from list_websites."
},
"title": {
"type": "string",
"description": "Article title (H1). Required."
},
"html": {
"type": "string",
"description": "Article body as HTML. Supported: p, h2, h3, ul/ol, blockquote, img, table. Required."
},
"metaDescription": {
"type": "string",
"description": "Search-result description, about 150–160 characters."
},
"excerpt": {
"type": "string",
"description": "Short summary for the blog index. Defaults to the meta description."
},
"category": {
"type": "string",
"description": "Category name. Default 'Guides'."
},
"coverImage": {
"type": "string",
"description": "Absolute cover image URL starting with http(s)://; other values are dropped."
},
"slug": {
"type": "string",
"description": "URL path segment, e.g. \"lead-scoring-guide\". Defaults to the title. A number is added if the slug is already taken."
},
"status": {
"type": "string",
"enum": [
"live",
"draft"
],
"description": "'live' (default) publishes now; 'draft' saves without publishing."
},
"faq": {
"type": "array",
"items": {
"type": "object",
"properties": {
"q": {
"type": "string",
"description": "Question text."
},
"a": {
"type": "string",
"description": "Answer text."
}
}
},
"description": "FAQ entries shown under the article. Entries missing q or a are dropped."
}
},
"required": [
"websiteId",
"title",
"html"
]
}
}
```
# create_campaign (/docs/mcp/tools/create-campaign)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/create_campaign.mdx. */}
**Create email campaign** · Changes data
Create a new email sequence: the campaign plus one email per entry in steps (the first is the initial email, the rest follow-ups). The campaign is created active but sends nothing until contacts are added with add_prospect_to_campaign. To change one email later use update_campaign_step; to see the result use get_campaign. websiteId comes from list_websites. Returns emailCampaign (its _id is the campaignId) and templates[], one server response per step: a step rejected for bad merge fields comes back with an error there while the campaign and the other steps still exist, so check every entry and fix failures with update_campaign_step (templateId from get_campaign). Writing rules: Write the body as plain text, one paragraph per line, no blank lines between paragraphs (each line becomes one \; never add empty paragraphs or \
\
for spacing). Merge fields need a fallback with this syntax: \{\{ first_name | there \}\}, \{\{ company_name | your company \}\}, \{\{ position | your role \}\}, \{\{ industry | your industry \}\}, \{\{ website | your website \}\} (not default("...")); a bare \{\{company_name\}\} renders empty when the company is unknown. End every body with \{\{sender_signature\}\} on its own line, then \{\{unsubscribe_text\}\} on its own line, and nothing after them; never type your own sign-off (Best regards, name) or unsubscribe sentence, those two variables render them. They and sender_* fields take no fallback.
| Connection | Account URL, team member URL or OAuth |
| --- | --- |
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `websiteId` | `string` | Yes | any | Website id (24 hex characters) from list_websites. |
| `name` | `string` | Yes | any | Campaign name shown in the app. |
| `emailAccountId` | `string` | Yes | any | Required by the schema but not used: a campaign is not tied to one mailbox. Sending mailboxes are picked per contact in add_prospect_to_campaign. Pass any mailbox id from list_email_accounts. |
| `steps` | `object[]` | Yes | any | The emails of the sequence, in order, one object per email. At least one step is needed before contacts can be added. |
| `steps[].subject` | `string` | Yes | any | Subject line. Merge fields need a fallback, e.g. Quick idea for \{\{ company_name \| your team \}\}. |
| `steps[].body` | `string` | Yes | any | Plain text, one paragraph per line, no blank lines, ending with \{\{sender_signature\}\} then \{\{unsubscribe_text\}\} on their own lines. |
| `steps[].delayDays` | `number` | No | any | Whole days to wait after the previous step. 0 for the first step. Default 0. |
| `settings` | `object` | No | any | Optional sending schedule object; omitted keys use the defaults. daysRange: days of the week it may send, numbers 0-6 where 0 is Sunday, default [1,2,3,4,5] (Monday to Friday). timeSlot: sending window \{ start, end \} in whole hours (0-23) of the campaign timezone, default \{ start: 9, end: 17 \}. timezone: IANA timezone of the window, default America/New_York; supported: America/Los_Angeles, America/Denver, America/Chicago, America/New_York, UTC, Europe/London, Europe/Paris, Europe/Athens, Australia/Perth, Australia/Adelaide, Australia/Sydney, Asia/Dubai, Asia/Riyadh, Asia/Karachi, Asia/Kolkata, Asia/Dhaka, Asia/Ho_Chi_Minh, Asia/Tokyo, Pacific/Guadalcanal, Pacific/Auckland, Pacific/Midway, Pacific/Honolulu, America/Anchorage, America/Puerto_Rico, America/St_Johns, America/Sao_Paulo. |
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "create_campaign",
"title": "Create email campaign",
"annotations": {
"title": "Create email campaign",
"readOnlyHint": false,
"destructiveHint": false,
"idempotentHint": false,
"openWorldHint": false
},
"inputSchema": {
"type": "object",
"properties": {
"websiteId": {
"type": "string",
"description": "Website id (24 hex characters) from list_websites."
},
"name": {
"type": "string",
"description": "Campaign name shown in the app."
},
"emailAccountId": {
"type": "string",
"description": "Required by the schema but not used: a campaign is not tied to one mailbox. Sending mailboxes are picked per contact in add_prospect_to_campaign. Pass any mailbox id from list_email_accounts."
},
"steps": {
"type": "array",
"description": "The emails of the sequence, in order, one object per email. At least one step is needed before contacts can be added.",
"items": {
"type": "object",
"properties": {
"subject": {
"type": "string",
"description": "Subject line. Merge fields need a fallback, e.g. Quick idea for {{ company_name | your team }}."
},
"body": {
"type": "string",
"description": "Plain text, one paragraph per line, no blank lines, ending with {{sender_signature}} then {{unsubscribe_text}} on their own lines."
},
"delayDays": {
"type": "number",
"description": "Whole days to wait after the previous step. 0 for the first step. Default 0."
}
},
"required": [
"subject",
"body"
]
}
},
"settings": {
"type": "object",
"description": "Optional sending schedule object; omitted keys use the defaults. daysRange: days of the week it may send, numbers 0-6 where 0 is Sunday, default [1,2,3,4,5] (Monday to Friday). timeSlot: sending window { start, end } in whole hours (0-23) of the campaign timezone, default { start: 9, end: 17 }. timezone: IANA timezone of the window, default America/New_York; supported: America/Los_Angeles, America/Denver, America/Chicago, America/New_York, UTC, Europe/London, Europe/Paris, Europe/Athens, Australia/Perth, Australia/Adelaide, Australia/Sydney, Asia/Dubai, Asia/Riyadh, Asia/Karachi, Asia/Kolkata, Asia/Dhaka, Asia/Ho_Chi_Minh, Asia/Tokyo, Pacific/Guadalcanal, Pacific/Auckland, Pacific/Midway, Pacific/Honolulu, America/Anchorage, America/Puerto_Rico, America/St_Johns, America/Sao_Paulo."
}
},
"required": [
"websiteId",
"name",
"emailAccountId",
"steps"
]
}
}
```
# create_contact (/docs/mcp/tools/create-contact)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/create_contact.mdx. */}
**Create contact** · Changes data
Saves a new person record (name, job title, company domain) and returns it with its _id. Its main use is to get a contactId for verify_contact. To find new people use search_people. To push someone into a CRM use push_lead_to_crm. The name, position, company domain and email (businessEmail, or personalEmail when there is no work email) are stored; phone and LinkedIn are not. Costs nothing. Errors: 405 when firstName, lastName or position is missing.
| Connection | Account URL, team member URL or OAuth |
| --- | --- |
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `websiteId` | `string` | Yes | any | Website ID from list_websites. Required by the tool schema; the saved record is not linked to it. |
| `firstName` | `string` | Yes | any | Person's first name. Required. |
| `lastName` | `string` | Yes | any | Person's last name. Required. |
| `position` | `string` | Yes | any | Job title, e.g. "Head of Marketing". Required. |
| `domain` | `string` | No | any | Company domain without protocol, e.g. "acme.example". Without it verify_contact cannot guess an address. |
| `businessEmail` | `string` | No | any | Work email. Saved on the contact; verify_contact checks it. |
| `personalEmail` | `string` | No | any | Personal email, used only when businessEmail is not given. |
| `linkedinUrl` | `string` | No | any | LinkedIn profile URL. Accepted but not stored. |
| `phone` | `string` | No | any | Phone number. Accepted but not stored. |
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "create_contact",
"title": "Create contact",
"annotations": {
"title": "Create contact",
"readOnlyHint": false,
"destructiveHint": false,
"idempotentHint": false,
"openWorldHint": false
},
"inputSchema": {
"type": "object",
"properties": {
"websiteId": {
"type": "string",
"description": "Website ID from list_websites. Required by the tool schema; the saved record is not linked to it."
},
"firstName": {
"type": "string",
"description": "Person's first name. Required."
},
"lastName": {
"type": "string",
"description": "Person's last name. Required."
},
"position": {
"type": "string",
"description": "Job title, e.g. \"Head of Marketing\". Required."
},
"domain": {
"type": "string",
"description": "Company domain without protocol, e.g. \"acme.example\". Without it verify_contact cannot guess an address."
},
"businessEmail": {
"type": "string",
"description": "Work email. Saved on the contact; verify_contact checks it."
},
"personalEmail": {
"type": "string",
"description": "Personal email, used only when businessEmail is not given."
},
"linkedinUrl": {
"type": "string",
"description": "LinkedIn profile URL. Accepted but not stored."
},
"phone": {
"type": "string",
"description": "Phone number. Accepted but not stored."
}
},
"required": [
"websiteId",
"firstName",
"lastName",
"position"
]
}
}
```
# create_filter (/docs/mcp/tools/create-filter)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/create_filter.mdx. */}
**Save a lead filter** · Changes data
Save a lead filter under a name so it shows as a saved view on the leads page and can be used as an automation segment. url is a query string of lead filter parameters (the same names get_leads uses); date and pagination parameters are removed before saving, so a saved filter always applies to whatever date range is chosen. websiteId comes from list_websites. Saving the same name twice creates two filters. Returns the saved filter (_id, name, url, tab).
| Connection | Account URL, team member URL or OAuth |
| --- | --- |
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `websiteId` | `string` | Yes | any | Website id (24 hex characters) from list_websites. |
| `name` | `string` | Yes | any | Name shown for the saved view, e.g. "US SaaS visitors". |
| `url` | `string` | Yes | any | Query string of filter parameters, e.g. "?visitorLocation=US&industries=Software&tag=HOT". dateFrom, dateTo, page and similar date/pagination parameters are stripped. |
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "create_filter",
"title": "Save a lead filter",
"annotations": {
"title": "Save a lead filter",
"readOnlyHint": false,
"destructiveHint": false,
"idempotentHint": false,
"openWorldHint": false
},
"inputSchema": {
"type": "object",
"properties": {
"websiteId": {
"type": "string",
"description": "Website id (24 hex characters) from list_websites."
},
"name": {
"type": "string",
"description": "Name shown for the saved view, e.g. \"US SaaS visitors\"."
},
"url": {
"type": "string",
"description": "Query string of filter parameters, e.g. \"?visitorLocation=US&industries=Software&tag=HOT\". dateFrom, dateTo, page and similar date/pagination parameters are stripped."
}
},
"required": [
"websiteId",
"name",
"url"
]
}
}
```
# create_lead_scoring_model (/docs/mcp/tools/create-lead-scoring-model)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/create_lead_scoring_model.mdx. */}
**Create a lead scoring model** · Changes data
Create a lead scoring model on a website, with its rules: criteria (same shape as get_lead_scoring_model / update_lead_scoring_model), active and aiMatching are saved with it. Leave criteria out to start with an empty model and add rules later with update_lead_scoring_model. Names must be unique per website (case-insensitive). To have AI build a model from your website instead, use ai_generate_scoring_model. websiteId comes from list_websites. Returns the saved model with its _id. If the model was created but its rules could not be saved, the result is an error with modelId and a note to retry with update_lead_scoring_model.
| Connection | Account URL, team member URL or OAuth |
| --- | --- |
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `websiteId` | `string` | Yes | any | Website id (24 hex characters) from list_websites. |
| `name` | `string` | Yes | any | Model name, unique on the website, e.g. "Enterprise SaaS". |
| `active` | `boolean` | No | any | true (default) to score leads with it straight away, false to save it switched off. |
| `criteria` | `object` | No | any | Rules keyed by criterion, in the shape get_lead_scoring_model returns (industry, employees, revenue, jobTitle, pageVisited, …), e.g. \{"industry":[\{"values":["Software"],"score":8,"filter":"any"\}]\}. |
| `aiMatching` | `object` | No | any | AI matching settings, in the shape get_lead_scoring_model returns. |
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "create_lead_scoring_model",
"title": "Create a lead scoring model",
"annotations": {
"title": "Create a lead scoring model",
"readOnlyHint": false,
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false
},
"inputSchema": {
"type": "object",
"properties": {
"websiteId": {
"type": "string",
"description": "Website id (24 hex characters) from list_websites."
},
"name": {
"type": "string",
"description": "Model name, unique on the website, e.g. \"Enterprise SaaS\"."
},
"active": {
"type": "boolean",
"description": "true (default) to score leads with it straight away, false to save it switched off."
},
"criteria": {
"type": "object",
"description": "Rules keyed by criterion, in the shape get_lead_scoring_model returns (industry, employees, revenue, jobTitle, pageVisited, …), e.g. {\"industry\":[{\"values\":[\"Software\"],\"score\":8,\"filter\":\"any\"}]}."
},
"aiMatching": {
"type": "object",
"description": "AI matching settings, in the shape get_lead_scoring_model returns."
}
},
"required": [
"websiteId",
"name"
]
}
}
```
# create_list (/docs/mcp/tools/create-list)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/create_list.mdx. */}
**Create a list** · Changes data
Creates an empty contact or company list on a website and returns it. Add people to it from the dashboard or a campaign.
| Connection | Account URL, team member URL or OAuth |
| --- | --- |
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `websiteId` | `string` | Yes | any | Website ID from list_websites. |
| `listType` | `string` | Yes | `contact`, `company` | contact for lists of people, company for lists of companies. |
| `name` | `string` | Yes | any | The list's name. |
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "create_list",
"title": "Create a list",
"annotations": {
"title": "Create a list",
"readOnlyHint": false,
"destructiveHint": false,
"idempotentHint": false,
"openWorldHint": false
},
"inputSchema": {
"type": "object",
"properties": {
"websiteId": {
"type": "string",
"description": "Website ID from list_websites."
},
"listType": {
"type": "string",
"enum": [
"contact",
"company"
],
"description": "contact for lists of people, company for lists of companies."
},
"name": {
"type": "string",
"description": "The list's name."
}
},
"required": [
"websiteId",
"listType",
"name"
]
}
}
```
# create_tag (/docs/mcp/tools/create-tag)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/create_tag.mdx. */}
**Create a tag** · Changes data
Create a new tag on a website so you can label leads with tag_lead. The name is stored in upper case and must be unique on the website (a duplicate returns 'Tag text already exist'). websiteId comes from list_websites. Check list_tags first to reuse an existing tag. Returns status 'Successful' and tagId.
| Connection | Account URL, team member URL or OAuth |
| --- | --- |
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `websiteId` | `string` | Yes | any | Website id (24 hex characters) from list_websites. |
| `name` | `string` | Yes | any | Tag name, e.g. "Hot account" (saved as "HOT ACCOUNT"). |
| `color` | `string` | No | any | Hex colour as #RRGGBB, e.g. "#059669". Default "#1E4EFF". Any other format is refused. |
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "create_tag",
"title": "Create a tag",
"annotations": {
"title": "Create a tag",
"readOnlyHint": false,
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false
},
"inputSchema": {
"type": "object",
"properties": {
"websiteId": {
"type": "string",
"description": "Website id (24 hex characters) from list_websites."
},
"name": {
"type": "string",
"description": "Tag name, e.g. \"Hot account\" (saved as \"HOT ACCOUNT\")."
},
"color": {
"type": "string",
"description": "Hex colour as #RRGGBB, e.g. \"#059669\". Default \"#1E4EFF\". Any other format is refused."
}
},
"required": [
"websiteId",
"name"
]
}
}
```
# delete_ai_scout (/docs/mcp/tools/delete-ai-scout)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/delete_ai_scout.mdx. */}
**Delete an AI Scout** · Deletes or overwrites data
Deletes an AI Scout: it stops for good and is removed from the list. The leads it already delivered stay in Leads.
| Connection | Account URL, team member URL or OAuth |
| --- | --- |
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `websiteId` | `string` | Yes | any | Website ID from list_websites. |
| `scoutId` | `string` | Yes | any | AI Scout ID from list_ai_scouts. |
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "delete_ai_scout",
"title": "Delete an AI Scout",
"annotations": {
"title": "Delete an AI Scout",
"readOnlyHint": false,
"destructiveHint": true,
"idempotentHint": true,
"openWorldHint": false
},
"inputSchema": {
"type": "object",
"properties": {
"websiteId": {
"type": "string",
"description": "Website ID from list_websites."
},
"scoutId": {
"type": "string",
"description": "AI Scout ID from list_ai_scouts."
}
},
"required": [
"websiteId",
"scoutId"
]
}
}
```
# delete_automation (/docs/mcp/tools/delete-automation)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/delete_automation.mdx. */}
**Delete automation** · Deletes or overwrites data
Deletes an automation permanently, so it no longer acts on any lead. Records already pushed to CRMs or campaigns stay where they are. To stop it while keeping the setup, use toggle_automation with isActive false. Get automationId from list_automations. Confirm with the user before calling. Returns status 'Successful', 404 'No automation found', or 405 when automationId is not an automation id.
| Connection | Account URL, team member URL or OAuth |
| --- | --- |
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `automationId` | `string` | Yes | any | Automation _id from list_automations. |
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "delete_automation",
"title": "Delete automation",
"annotations": {
"title": "Delete automation",
"readOnlyHint": false,
"destructiveHint": true,
"idempotentHint": true,
"openWorldHint": false
},
"inputSchema": {
"type": "object",
"properties": {
"automationId": {
"type": "string",
"pattern": "^[0-9a-fA-F]{24}$",
"description": "Automation _id from list_automations."
}
},
"required": [
"automationId"
]
}
}
```
# delete_campaign_step (/docs/mcp/tools/delete-campaign-step)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/delete_campaign_step.mdx. */}
**Delete a campaign step** · Deletes or overwrites data
Removes one email from a campaign's sequence for good. Contacts who already got it keep it. Confirm with the user before calling. Returns 404 when templateId is not a step of the campaign.
| Connection | Account URL, team member URL or OAuth |
| --- | --- |
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `websiteId` | `string` | Yes | any | Website ID from list_websites (the campaign's website). |
| `campaignId` | `string` | Yes | any | campaignId from list_campaigns. |
| `templateId` | `string` | Yes | any | _id of the step, from get_campaign (emailCampaignTemplates). |
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "delete_campaign_step",
"title": "Delete a campaign step",
"annotations": {
"title": "Delete a campaign step",
"readOnlyHint": false,
"destructiveHint": true,
"idempotentHint": true,
"openWorldHint": false
},
"inputSchema": {
"type": "object",
"properties": {
"websiteId": {
"type": "string",
"description": "Website ID from list_websites (the campaign's website)."
},
"campaignId": {
"type": "string",
"description": "campaignId from list_campaigns."
},
"templateId": {
"type": "string",
"description": "_id of the step, from get_campaign (emailCampaignTemplates)."
}
},
"required": [
"websiteId",
"campaignId",
"templateId"
]
}
}
```
# delete_campaign (/docs/mcp/tools/delete-campaign)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/delete_campaign.mdx. */}
**Delete email campaign** · Deletes or overwrites data
Permanently delete an email campaign together with all its steps and every prospect in it; scheduled emails are never sent and the history is lost. This cannot be undone and nothing is refunded. To stop only some contacts use stop_prospect or remove_prospect_from_campaign. Confirm with the user before calling. campaignId comes from list_campaigns. Returns a status message and deletedProspects (how many prospects were removed).
| Connection | Account URL, team member URL or OAuth |
| --- | --- |
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `campaignId` | `string` | Yes | any | Email campaign id from list_campaigns. |
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "delete_campaign",
"title": "Delete email campaign",
"annotations": {
"title": "Delete email campaign",
"readOnlyHint": false,
"destructiveHint": true,
"idempotentHint": true,
"openWorldHint": false
},
"inputSchema": {
"type": "object",
"properties": {
"campaignId": {
"type": "string",
"description": "Email campaign id from list_campaigns."
}
},
"required": [
"campaignId"
]
}
}
```
# delete_email_account (/docs/mcp/tools/delete-email-account)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/delete_email_account.mdx. */}
**Remove mailbox** · Deletes or overwrites data
Remove a connected mailbox from the account. Prospects that were scheduled or in progress on it are moved to error-sending and paused, so their next steps will not send until they are given another mailbox. The mailbox slot is freed. This does not delete the mailbox at its email provider. Confirm with the user before calling. emailAccountId comes from list_email_accounts. Returns a status message.
| Connection | Account URL, team member URL or OAuth |
| --- | --- |
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `emailAccountId` | `string` | Yes | any | Mailbox id from list_email_accounts (_id). |
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "delete_email_account",
"title": "Remove mailbox",
"annotations": {
"title": "Remove mailbox",
"readOnlyHint": false,
"destructiveHint": true,
"idempotentHint": true,
"openWorldHint": false
},
"inputSchema": {
"type": "object",
"properties": {
"emailAccountId": {
"type": "string",
"description": "Mailbox id from list_email_accounts (_id)."
}
},
"required": [
"emailAccountId"
]
}
}
```
# delete_filter (/docs/mcp/tools/delete-filter)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/delete_filter.mdx. */}
**Delete a saved filter** · Deletes or overwrites data
Delete a saved lead filter. Any automation that used it as its segment is switched to 'All leads', so it will then run for every new lead; check list_automations before deleting a filter an automation depends on. filterId is the _id from list_filters. Confirm with the user before calling. Returns status 'successful', or an error when the filter does not exist.
| Connection | Account URL, team member URL or OAuth |
| --- | --- |
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `filterId` | `string` | Yes | any | Saved filter id (the _id from list_filters). |
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "delete_filter",
"title": "Delete a saved filter",
"annotations": {
"title": "Delete a saved filter",
"readOnlyHint": false,
"destructiveHint": true,
"idempotentHint": true,
"openWorldHint": false
},
"inputSchema": {
"type": "object",
"properties": {
"filterId": {
"type": "string",
"description": "Saved filter id (the _id from list_filters)."
}
},
"required": [
"filterId"
]
}
}
```
# delete_intent_topic (/docs/mcp/tools/delete-intent-topic)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/delete_intent_topic.mdx. */}
**Unsubscribe intent topic** · Deletes or overwrites data
Unsubscribes a website from an intent topic and deletes the subscription, including its delivery counters. Leads already delivered stay. To stop it only for a while, use update_intent_topic with paused true. Confirm with the user before calling. Returns \{ result: \{ deleted: true, topicSlug \} \}, or 404 when the website is not subscribed.
| Connection | Account URL, team member URL or OAuth |
| --- | --- |
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `websiteId` | `string` | Yes | any | Website ID from list_websites. |
| `topicSlug` | `string` | Yes | any | Slug of a subscribed topic, from list_intent_topics. |
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "delete_intent_topic",
"title": "Unsubscribe intent topic",
"annotations": {
"title": "Unsubscribe intent topic",
"readOnlyHint": false,
"destructiveHint": true,
"idempotentHint": true,
"openWorldHint": false
},
"inputSchema": {
"type": "object",
"properties": {
"websiteId": {
"type": "string",
"description": "Website ID from list_websites."
},
"topicSlug": {
"type": "string",
"description": "Slug of a subscribed topic, from list_intent_topics."
}
},
"required": [
"websiteId",
"topicSlug"
]
}
}
```
# delete_lead_comment (/docs/mcp/tools/delete-lead-comment)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/delete_lead_comment.mdx. */}
**Delete a lead comment** · Deletes or overwrites data
Permanently delete a comment from a lead. Only the user who wrote the comment can delete it; others get 'You do not have permission'. commentId is the _id from get_lead_comments. Confirm with the user before calling. Returns status 'Successful'.
| Connection | Account URL, team member URL or OAuth |
| --- | --- |
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `commentId` | `string` | Yes | any | Comment id (the _id from get_lead_comments). |
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "delete_lead_comment",
"title": "Delete a lead comment",
"annotations": {
"title": "Delete a lead comment",
"readOnlyHint": false,
"destructiveHint": true,
"idempotentHint": true,
"openWorldHint": false
},
"inputSchema": {
"type": "object",
"properties": {
"commentId": {
"type": "string",
"description": "Comment id (the _id from get_lead_comments)."
}
},
"required": [
"commentId"
]
}
}
```
# delete_lead_scoring_model (/docs/mcp/tools/delete-lead-scoring-model)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/delete_lead_scoring_model.mdx. */}
**Delete a lead scoring model** · Deletes or overwrites data
Permanently delete a lead scoring model and remove its score from every lead of the website. This cannot be undone. To stop a model scoring without losing it, use update_lead_scoring_model with active=false instead. modelId from list_lead_scoring_models. Confirm with the user before calling. Returns status 'Successful'.
| Connection | Account URL, team member URL or OAuth |
| --- | --- |
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `modelId` | `string` | Yes | any | Scoring model id from list_lead_scoring_models. |
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "delete_lead_scoring_model",
"title": "Delete a lead scoring model",
"annotations": {
"title": "Delete a lead scoring model",
"readOnlyHint": false,
"destructiveHint": true,
"idempotentHint": true,
"openWorldHint": false
},
"inputSchema": {
"type": "object",
"properties": {
"modelId": {
"type": "string",
"description": "Scoring model id from list_lead_scoring_models."
}
},
"required": [
"modelId"
]
}
}
```
# delete_lead (/docs/mcp/tools/delete-lead)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/delete_lead.mdx. */}
**Delete leads permanently** · Deletes or overwrites data
Permanently delete one or more leads. This cannot be undone, the credits they used are not given back, and the companies of the deleted leads are added to the website's blocked company domains (the Exclude list in Qualify), so new leads from those companies stop appearing. To only take a lead off the list, use hide_lead instead. leadIds come from get_leads. Confirm with the user before calling. Returns deletedCount, the number of leads actually deleted (leads outside your account are skipped).
| Connection | Account URL, team member URL or OAuth |
| --- | --- |
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `leadIds` | `string[]` | Yes | any | Array of lead ids (the _id values from get_leads), e.g. ["66f1...", "66f2..."]. Use leads from one website per call. |
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "delete_lead",
"title": "Delete leads permanently",
"annotations": {
"title": "Delete leads permanently",
"readOnlyHint": false,
"destructiveHint": true,
"idempotentHint": true,
"openWorldHint": false
},
"inputSchema": {
"type": "object",
"properties": {
"leadIds": {
"type": "array",
"items": {
"type": "string"
},
"description": "Array of lead ids (the _id values from get_leads), e.g. [\"66f1...\", \"66f2...\"]. Use leads from one website per call."
}
},
"required": [
"leadIds"
]
}
}
```
# delete_linkedin_campaign (/docs/mcp/tools/delete-linkedin-campaign)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/delete_linkedin_campaign.mdx. */}
**Delete a LinkedIn campaign** · Deletes or overwrites data
Deletes a LinkedIn campaign and stops everything it would still send. Connections already made on LinkedIn stay.
| Connection | Account-owner URL or OAuth (not a team member URL) |
| --- | --- |
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `websiteId` | `string` | Yes | any | Website ID from list_websites. |
| `linkedinCampaignId` | `string` | Yes | any | LinkedIn campaign ID from list_linkedin_campaigns. |
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "delete_linkedin_campaign",
"title": "Delete a LinkedIn campaign",
"annotations": {
"title": "Delete a LinkedIn campaign",
"readOnlyHint": false,
"destructiveHint": true,
"idempotentHint": true,
"openWorldHint": false
},
"inputSchema": {
"type": "object",
"properties": {
"websiteId": {
"type": "string",
"description": "Website ID from list_websites."
},
"linkedinCampaignId": {
"type": "string",
"description": "LinkedIn campaign ID from list_linkedin_campaigns."
}
},
"required": [
"websiteId",
"linkedinCampaignId"
]
}
}
```
# delete_linkedin_keyword (/docs/mcp/tools/delete-linkedin-keyword)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/delete_linkedin_keyword.mdx. */}
**Delete a LinkedIn keyword** · Deletes or overwrites data
Stops watching a LinkedIn keyword for good and removes it from the list. The leads it already found stay.
| Connection | Account URL, team member URL or OAuth |
| --- | --- |
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `websiteId` | `string` | Yes | any | Website ID from list_websites. |
| `keywordId` | `string` | Yes | any | Keyword ID from list_linkedin_keywords. |
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "delete_linkedin_keyword",
"title": "Delete a LinkedIn keyword",
"annotations": {
"title": "Delete a LinkedIn keyword",
"readOnlyHint": false,
"destructiveHint": true,
"idempotentHint": true,
"openWorldHint": false
},
"inputSchema": {
"type": "object",
"properties": {
"websiteId": {
"type": "string",
"description": "Website ID from list_websites."
},
"keywordId": {
"type": "string",
"description": "Keyword ID from list_linkedin_keywords."
}
},
"required": [
"websiteId",
"keywordId"
]
}
}
```
# delete_list (/docs/mcp/tools/delete-list)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/delete_list.mdx. */}
**Delete a list** · Deletes or overwrites data
Deletes a list for good. The contacts or companies in it stay in the account. Confirm with the user before calling. Returns 404 when the list is not one of this website's.
| Connection | Account URL, team member URL or OAuth |
| --- | --- |
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `websiteId` | `string` | Yes | any | Website ID from list_websites. |
| `listType` | `string` | Yes | `contact`, `company` | contact for lists of people, company for lists of companies. |
| `listId` | `string` | Yes | any | _id from list_lists. |
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "delete_list",
"title": "Delete a list",
"annotations": {
"title": "Delete a list",
"readOnlyHint": false,
"destructiveHint": true,
"idempotentHint": true,
"openWorldHint": false
},
"inputSchema": {
"type": "object",
"properties": {
"websiteId": {
"type": "string",
"description": "Website ID from list_websites."
},
"listType": {
"type": "string",
"enum": [
"contact",
"company"
],
"description": "contact for lists of people, company for lists of companies."
},
"listId": {
"type": "string",
"description": "_id from list_lists."
}
},
"required": [
"websiteId",
"listType",
"listId"
]
}
}
```
# delete_tag (/docs/mcp/tools/delete-tag)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/delete_tag.mdx. */}
**Delete a tag** · Deletes or overwrites data
Deletes a tag from this website; it is removed from every lead that had it. The leads themselves stay. tagId comes from list_tags.
| Connection | Account URL, team member URL or OAuth |
| --- | --- |
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `websiteId` | `string` | Yes | any | Website ID from list_websites. |
| `tagId` | `string` | Yes | any | Tag ID from list_tags. |
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "delete_tag",
"title": "Delete a tag",
"annotations": {
"title": "Delete a tag",
"readOnlyHint": false,
"destructiveHint": true,
"idempotentHint": true,
"openWorldHint": false
},
"inputSchema": {
"type": "object",
"properties": {
"websiteId": {
"type": "string",
"description": "Website ID from list_websites."
},
"tagId": {
"type": "string",
"description": "Tag ID from list_tags."
}
},
"required": [
"websiteId",
"tagId"
]
}
}
```
# delete_website (/docs/mcp/tools/delete-website)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/delete_website.mdx. */}
**Delete website** · Deletes or overwrites data
Deletes a website: tracking stops, it disappears from list_websites and its leads are no longer shown, and its website slot is freed. It cannot be restored with these tools. websiteId comes from list_websites. Confirm with the user before calling, naming the website. Needs an account-level key.
| Connection | Account-owner URL or OAuth (not a team member URL) |
| --- | --- |
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `websiteId` | `string` | Yes | any | Website ID from list_websites. Double-check it is the website the user means. |
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "delete_website",
"title": "Delete website",
"annotations": {
"title": "Delete website",
"readOnlyHint": false,
"destructiveHint": true,
"idempotentHint": true,
"openWorldHint": false
},
"inputSchema": {
"type": "object",
"properties": {
"websiteId": {
"type": "string",
"description": "Website ID from list_websites. Double-check it is the website the user means."
}
},
"required": [
"websiteId"
]
}
}
```
# dismiss_campaign_capacity_warning (/docs/mcp/tools/dismiss-campaign-capacity-warning)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/dismiss_campaign_capacity_warning.mdx. */}
**Dismiss a capacity warning** · Changes data
Hides a campaign's capacity warning (more contacts than its mailboxes can send to in time) for some days. Nothing about sending changes; add mailboxes or lower the contacts to fix the cause.
| Connection | Account URL, team member URL or OAuth |
| --- | --- |
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `websiteId` | `string` | Yes | any | Website ID from list_websites. |
| `campaignId` | `string` | Yes | any | Campaign ID from list_campaigns. |
| `dismissDays` | `number` | No | 1–90 | How many days to hide it (1-90, default 7). |
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "dismiss_campaign_capacity_warning",
"title": "Dismiss a capacity warning",
"annotations": {
"title": "Dismiss a capacity warning",
"readOnlyHint": false,
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false
},
"inputSchema": {
"type": "object",
"properties": {
"websiteId": {
"type": "string",
"description": "Website ID from list_websites."
},
"campaignId": {
"type": "string",
"description": "Campaign ID from list_campaigns."
},
"dismissDays": {
"type": "number",
"minimum": 1,
"maximum": 90,
"description": "How many days to hide it (1-90, default 7)."
}
},
"required": [
"websiteId",
"campaignId"
]
}
}
```
# downgrade_plan (/docs/mcp/tools/downgrade-plan)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/downgrade_plan.mdx. */}
**Downgrade plan** · Changes data · Acts outside your account
Schedules the subscription to change to a new number of leads per month from the next billing date; nothing is charged or refunded now and current credits stay until then. Current add-ons are kept. Returns tierName, leads, the new monthly price and effectiveAt (when it takes effect); get_subscription then shows it under pendingDowngrade. Use upgrade_plan for more leads now; to stop paying use cancel_subscription or pause_subscription. Confirm with the user before calling.
| Connection | Account-owner URL or OAuth (not a team member URL) |
| --- | --- |
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `leads` | `integer` | Yes | 1–1000000 | Leads per month of the plan to switch to at the next billing date: a whole number from 1 to 1,000,000. |
| `annual` | `boolean` | No | any | true for yearly billing, false for monthly. Leave it out to keep the current billing interval; only pass a value when the user wants to switch. |
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "downgrade_plan",
"title": "Downgrade plan",
"annotations": {
"title": "Downgrade plan",
"readOnlyHint": false,
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": true
},
"inputSchema": {
"type": "object",
"properties": {
"leads": {
"type": "integer",
"minimum": 1,
"maximum": 1000000,
"description": "Leads per month of the plan to switch to at the next billing date: a whole number from 1 to 1,000,000."
},
"annual": {
"type": "boolean",
"description": "true for yearly billing, false for monthly. Leave it out to keep the current billing interval; only pass a value when the user wants to switch."
}
},
"required": [
"leads"
]
}
}
```
## Used in [#used-in]
- [/docs/account/billing/mcp](/docs/account/billing/mcp)
# enrich_domain (/docs/mcp/tools/enrich-domain)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/enrich_domain.mdx. */}
**Find contacts at a company** · Changes data · Spends credits or money
Look up the people known at a company domain and return them as contacts[] (name, position, email, LinkedIn, isDecisionMaker, plus scores against your scoring models when they have job-title rules). Use it to find who to reach at a company that visited; for firmographics without credits use free_enrich_company, to search people by title use search_people. websiteId (from list_websites) is required even though the schema marks it optional. Cost: 1 credit the first time your account gets contacts for a domain; repeating the same domain is not charged again, and nothing is charged when no contacts are found. Refused when the account has no credits left. Confirm with the user before calling.
| Connection | Account URL, team member URL or OAuth |
| --- | --- |
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `domain` | `string` | Yes | any | Company domain, e.g. "acme.example" (a full URL is reduced to its domain). |
| `websiteId` | `string` | No | any | Website id from list_websites whose credits pay for the lookup. Required: the call returns an error without it. |
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "enrich_domain",
"title": "Find contacts at a company",
"annotations": {
"title": "Find contacts at a company",
"readOnlyHint": false,
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false
},
"inputSchema": {
"type": "object",
"properties": {
"domain": {
"type": "string",
"description": "Company domain, e.g. \"acme.example\" (a full URL is reduced to its domain)."
},
"websiteId": {
"type": "string",
"description": "Website id from list_websites whose credits pay for the lookup. Required: the call returns an error without it."
}
},
"required": [
"domain"
]
}
}
```
## Used in [#used-in]
- [/docs/leads/company-enrichment](/docs/leads/company-enrichment)
- [/docs/leads/company-enrichment/mcp](/docs/leads/company-enrichment/mcp)
# export_leads_csv (/docs/mcp/tools/export-leads-csv)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/export_leads_csv.mdx. */}
**Export leads to CSV** · Changes data · Acts outside your account
Queue a CSV export of a website's leads whose last visit falls in the date range. The file is built in the background: the user gets an email with the download link and it is listed under Downloads in the dashboard for 30 days; this tool does not return the file itself. Each finished export uses one of the plan's CSV downloads; it fails when the plan has no CSV downloads or none are left. websiteId from list_websites. For leads you want to read in the conversation, use get_leads. Returns status 'queued' and job (id, status, stage, progress, rowCount, fileName, expiresAt).
| Connection | Account URL, team member URL or OAuth |
| --- | --- |
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `websiteId` | `string` | Yes | any | Website id (24 hex characters) from list_websites. |
| `dateFrom` | `string` | Yes | any | Start of the range (last visit date). Accepts YYYY-MM-DD, MM/DD/YYYY, ISO 8601 or epoch milliseconds. |
| `dateTo` | `string` | Yes | any | End of the range, inclusive. Same formats as dateFrom. |
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "export_leads_csv",
"title": "Export leads to CSV",
"annotations": {
"title": "Export leads to CSV",
"readOnlyHint": false,
"destructiveHint": false,
"idempotentHint": false,
"openWorldHint": true
},
"inputSchema": {
"type": "object",
"properties": {
"websiteId": {
"type": "string",
"description": "Website id (24 hex characters) from list_websites."
},
"dateFrom": {
"type": "string",
"description": "Start of the range (last visit date). Accepts YYYY-MM-DD, MM/DD/YYYY, ISO 8601 or epoch milliseconds."
},
"dateTo": {
"type": "string",
"description": "End of the range, inclusive. Same formats as dateFrom."
}
},
"required": [
"websiteId",
"dateFrom",
"dateTo"
]
}
}
```
# export_list_csv (/docs/mcp/tools/export-list-csv)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/export_list_csv.mdx. */}
**Export a list to CSV** · Changes data · Acts outside your account
Builds a CSV of a list and emails the download link to the user. Returns as soon as the export has started.
| Connection | Account URL, team member URL or OAuth |
| --- | --- |
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `websiteId` | `string` | Yes | any | Website ID from list_websites. |
| `listType` | `string` | Yes | `contact`, `company` | contact for lists of people, company for lists of companies. |
| `listId` | `string` | Yes | any | _id from list_lists. |
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "export_list_csv",
"title": "Export a list to CSV",
"annotations": {
"title": "Export a list to CSV",
"readOnlyHint": false,
"destructiveHint": false,
"idempotentHint": false,
"openWorldHint": true
},
"inputSchema": {
"type": "object",
"properties": {
"websiteId": {
"type": "string",
"description": "Website ID from list_websites."
},
"listType": {
"type": "string",
"enum": [
"contact",
"company"
],
"description": "contact for lists of people, company for lists of companies."
},
"listId": {
"type": "string",
"description": "_id from list_lists."
}
},
"required": [
"websiteId",
"listType",
"listId"
]
}
}
```
# find_contact_email (/docs/mcp/tools/find-contact-email)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/find_contact_email.mdx. */}
**Find contact email** · Changes data · Acts outside your account · Spends credits or money
Looks for a business email for one search_people contact by trying likely address patterns at their company and verifying each one. Use it only when reveal_contact found no email for that person. depth 'popular' tries the common patterns and costs 50 credits. 'deep' tries more patterns and costs 100 credits. Credits are charged whether or not an address is found. Confirm the cost with the user before calling.
| Connection | Account URL, team member URL or OAuth |
| --- | --- |
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `websiteId` | `string` | Yes | any | Website ID from list_websites (the same one used for search_people). |
| `profileId` | `string` | Yes | any | profileId from a search_people row. |
| `depth` | `string` | No | `popular`, `deep` | 'popular' (default, 50 credits) or 'deep' (100 credits). |
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "find_contact_email",
"title": "Find contact email",
"annotations": {
"title": "Find contact email",
"readOnlyHint": false,
"destructiveHint": false,
"idempotentHint": false,
"openWorldHint": true
},
"inputSchema": {
"type": "object",
"properties": {
"websiteId": {
"type": "string",
"description": "Website ID from list_websites (the same one used for search_people)."
},
"profileId": {
"type": "string",
"description": "profileId from a search_people row."
},
"depth": {
"type": "string",
"enum": [
"popular",
"deep"
],
"description": "'popular' (default, 50 credits) or 'deep' (100 credits)."
}
},
"required": [
"websiteId",
"profileId"
]
}
}
```
# generate_campaign_emails_ai (/docs/mcp/tools/generate-campaign-emails-ai)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/generate_campaign_emails_ai.mdx. */}
**Write campaign emails with AI** · Changes data
Writes a sequence of emails for a campaign with AI, from your website, offer and ideal customer, and saves them as the campaign steps. Review them with get_campaign before starting the campaign.
| Connection | Account URL, team member URL or OAuth |
| --- | --- |
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `websiteId` | `string` | Yes | any | Website ID from list_websites. |
| `campaignId` | `string` | Yes | any | Campaign ID from list_campaigns. |
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "generate_campaign_emails_ai",
"title": "Write campaign emails with AI",
"annotations": {
"title": "Write campaign emails with AI",
"readOnlyHint": false,
"destructiveHint": false,
"idempotentHint": false,
"openWorldHint": false
},
"inputSchema": {
"type": "object",
"properties": {
"websiteId": {
"type": "string",
"description": "Website ID from list_websites."
},
"campaignId": {
"type": "string",
"description": "Campaign ID from list_campaigns."
}
},
"required": [
"websiteId",
"campaignId"
]
}
}
```
# get_account (/docs/mcp/tools/get-account)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/get_account.mdx. */}
**Get account** · Read-only
Shows the signed-in account: plan, credit limits and remaining credits, refresh and trial dates, add-ons, features, settings, pause status, failed-payment flag and the account's websites (the first 11 only). Use it to get an overview or to check credits before a credit-spending action. For subscription price and renewal date use get_subscription; for credit usage line by line use get_credit_history; for the complete website list use list_websites. Needs an account-level key.
| Connection | Account-owner URL or OAuth (not a team member URL) |
| --- | --- |
## Parameters [#parameters]
This tool takes no parameters.
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "get_account",
"title": "Get account",
"annotations": {
"title": "Get account",
"readOnlyHint": true,
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false
},
"inputSchema": {
"type": "object",
"properties": {}
}
}
```
# get_ai_scout (/docs/mcp/tools/get-ai-scout)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/get_ai_scout.mdx. */}
**Get an AI Scout** · Read-only
One AI Scout with its sources, how many people it found, qualified and delivered, and the latest people it picked with why they fit. Free.
| Connection | Account URL, team member URL or OAuth |
| --- | --- |
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `websiteId` | `string` | Yes | any | Website ID from list_websites. |
| `scoutId` | `string` | Yes | any | AI Scout ID from list_ai_scouts. |
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "get_ai_scout",
"title": "Get an AI Scout",
"annotations": {
"title": "Get an AI Scout",
"readOnlyHint": true,
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false
},
"inputSchema": {
"type": "object",
"properties": {
"websiteId": {
"type": "string",
"description": "Website ID from list_websites."
},
"scoutId": {
"type": "string",
"description": "AI Scout ID from list_ai_scouts."
}
},
"required": [
"websiteId",
"scoutId"
]
}
}
```
# get_auto_topup (/docs/mcp/tools/get-auto-topup)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/get_auto_topup.mdx. */}
**Get auto top-up** · Read-only
Whether auto top-up is on: when credits run out, a pack of leads is bought automatically at your plan's price per lead, up to a monthly cap in USD. Returns eligible (true only on an active, unpaused paid subscription with a card on file; false on a trial or lifetime plan), enabled, packLeads, capUsd and minCapUsd (the lowest cap allowed: your plan price), perLeadCents and packPriceCents, spentThisCycleCents and refreshOn (when the cycle restarts), lowThreshold (credits left when it buys), recent (the last 10 top-ups), extraLeads (bought leads still unused; they roll over) and monthlyLeadsLeft. Free.
| Connection | Account-owner URL or OAuth (not a team member URL) |
| --- | --- |
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `websiteId` | `string` | No | any | Optional, kept for older callers: auto top-up is set per account, so the result is the same for every website. |
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "get_auto_topup",
"title": "Get auto top-up",
"annotations": {
"title": "Get auto top-up",
"readOnlyHint": true,
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false
},
"inputSchema": {
"type": "object",
"properties": {
"websiteId": {
"type": "string",
"description": "Optional, kept for older callers: auto top-up is set per account, so the result is the same for every website."
}
}
}
}
```
# get_automation_runs (/docs/mcp/tools/get-automation-runs)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/get_automation_runs.mdx. */}
**Get an automation's runs** · Read-only
The runs of one automation, newest first: which lead each run handled, when, and whether it succeeded (and why not). Use it to check that an automation really sent leads to Slack, your CRM or a webhook. Free.
| Connection | Account URL, team member URL or OAuth |
| --- | --- |
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `websiteId` | `string` | Yes | any | Website ID from list_websites. |
| `automationId` | `string` | Yes | any | Automation ID from list_automations. |
| `limit` | `number` | No | 1–200 | Runs to return (1-200). |
| `skip` | `number` | No | min 0 | Runs to skip, for paging. |
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "get_automation_runs",
"title": "Get an automation's runs",
"annotations": {
"title": "Get an automation's runs",
"readOnlyHint": true,
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false
},
"inputSchema": {
"type": "object",
"properties": {
"websiteId": {
"type": "string",
"description": "Website ID from list_websites."
},
"automationId": {
"type": "string",
"pattern": "^[0-9a-fA-F]{24}$",
"description": "Automation ID from list_automations."
},
"limit": {
"type": "number",
"minimum": 1,
"maximum": 200,
"description": "Runs to return (1-200)."
},
"skip": {
"type": "number",
"minimum": 0,
"description": "Runs to skip, for paging."
}
},
"required": [
"websiteId",
"automationId"
]
}
}
```
# get_automation_stats (/docs/mcp/tools/get-automation-stats)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/get_automation_stats.mdx. */}
**Get automation statistics** · Read-only
Last 7 days (UTC) for every automation of a website, keyed by automation id, each with its name and isActive: runs7d (leads it ran on), delivered7d (sent), failed7d (failed attempts), failedLeads7d (leads whose latest attempt still failed; retries that worked drop out), lastRunAt (last run within 90 days) and series (one row per day). Runs that are neither delivered nor failed were skipped by the automation's filters. Paused automations count nothing. Free.
| Connection | Account URL, team member URL or OAuth |
| --- | --- |
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `websiteId` | `string` | Yes | any | Website ID from list_websites. |
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "get_automation_stats",
"title": "Get automation statistics",
"annotations": {
"title": "Get automation statistics",
"readOnlyHint": true,
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false
},
"inputSchema": {
"type": "object",
"properties": {
"websiteId": {
"type": "string",
"description": "Website ID from list_websites."
}
},
"required": [
"websiteId"
]
}
}
```
# get_automation (/docs/mcp/tools/get-automation)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/get_automation.mdx. */}
**Get automation** · Read-only
Returns the full setup of one automation: name, isActive, when (trigger event), then (action), trigger, interval, frequency settings (repeatWindowHours, dedupeScope), contact selection, email verification rules, filter and the action settings, plus draft (true = unfinished, never runs) and errorMessage (why the last run failed, null when fine). Read it before update_automation. For what an automation did for a specific lead, use get_lead_automation_history. Get automationId from list_automations. Errors: 400 for an invalid id, 404 'automation not found.'
| Connection | Account URL, team member URL or OAuth |
| --- | --- |
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `automationId` | `string` | Yes | any | Automation _id from list_automations (24 hex characters). |
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "get_automation",
"title": "Get automation",
"annotations": {
"title": "Get automation",
"readOnlyHint": true,
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false
},
"inputSchema": {
"type": "object",
"properties": {
"automationId": {
"type": "string",
"pattern": "^[0-9a-fA-F]{24}$",
"description": "Automation _id from list_automations (24 hex characters)."
}
},
"required": [
"automationId"
]
}
}
```
## Used in [#used-in]
- [/docs/automations/automations/mcp](/docs/automations/automations/mcp)
# get_billing (/docs/mcp/tools/get-billing)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/get_billing.mdx. */}
**Get billing (subscription)** · Read-only
Returns the same subscription summary as get_subscription: plan, leads per month, credits used and remaining, top-up credits, price, billing interval, next billing date, whether it is set to cancel or is paused, pending downgrade and any running retention discount. Billing is per account, so websiteId is optional and does not change the result. Prefer get_subscription. Needs an account-level key.
| Connection | Account-owner URL or OAuth (not a team member URL) |
| --- | --- |
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `websiteId` | `string` | No | any | Optional, kept for older callers: the result always covers the whole account. |
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "get_billing",
"title": "Get billing (subscription)",
"annotations": {
"title": "Get billing (subscription)",
"readOnlyHint": true,
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false
},
"inputSchema": {
"type": "object",
"properties": {
"websiteId": {
"type": "string",
"description": "Optional, kept for older callers: the result always covers the whole account."
}
}
}
}
```
# get_blog_article (/docs/mcp/tools/get-blog-article)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/get_blog_article.mdx. */}
**Get blog article** · Read-only
Returns one blog article in full (Optimize add-on): its content blocks, FAQ, every version with its status, the public url and the visits it received. Use it before update_blog_article to see the current text. Get articleId from list_blog_articles. Returns \{ article, visits, url \}, or 404 'Article not found'.
| Connection | Account-owner URL or OAuth (not a team member URL) |
| --- | --- |
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `websiteId` | `string` | Yes | any | Website ID from list_websites. |
| `articleId` | `string` | Yes | any | Article _id from list_blog_articles. |
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "get_blog_article",
"title": "Get blog article",
"annotations": {
"title": "Get blog article",
"readOnlyHint": true,
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false
},
"inputSchema": {
"type": "object",
"properties": {
"websiteId": {
"type": "string",
"description": "Website ID from list_websites."
},
"articleId": {
"type": "string",
"description": "Article _id from list_blog_articles."
}
},
"required": [
"websiteId",
"articleId"
]
}
}
```
# get_campaign_capacity (/docs/mcp/tools/get-campaign-capacity)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/get_campaign_capacity.mdx. */}
**Get campaign health** · Read-only
Returns the campaign's health: connected mailboxes and their daily limits, how many emails it can send a day, and what is holding it back (e.g. no mailbox, warmup, limits). Free.
| Connection | Account URL, team member URL or OAuth |
| --- | --- |
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `websiteId` | `string` | Yes | any | Website ID from list_websites (the campaign's website). |
| `campaignId` | `string` | Yes | any | campaignId from list_campaigns. |
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "get_campaign_capacity",
"title": "Get campaign health",
"annotations": {
"title": "Get campaign health",
"readOnlyHint": true,
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false
},
"inputSchema": {
"type": "object",
"properties": {
"websiteId": {
"type": "string",
"description": "Website ID from list_websites (the campaign's website)."
},
"campaignId": {
"type": "string",
"description": "campaignId from list_campaigns."
}
},
"required": [
"websiteId",
"campaignId"
]
}
}
```
# get_campaign_stats (/docs/mcp/tools/get-campaign-stats)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/get_campaign_stats.mdx. */}
**Get campaign statistics** · Read-only
Returns how a campaign is doing: emails sent, opened, clicked, replied, bounced and unsubscribed, with rates. Free.
| Connection | Account URL, team member URL or OAuth |
| --- | --- |
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `websiteId` | `string` | Yes | any | Website ID from list_websites (the campaign's website). |
| `campaignId` | `string` | Yes | any | campaignId from list_campaigns. |
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "get_campaign_stats",
"title": "Get campaign statistics",
"annotations": {
"title": "Get campaign statistics",
"readOnlyHint": true,
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false
},
"inputSchema": {
"type": "object",
"properties": {
"websiteId": {
"type": "string",
"description": "Website ID from list_websites (the campaign's website)."
},
"campaignId": {
"type": "string",
"description": "campaignId from list_campaigns."
}
},
"required": [
"websiteId",
"campaignId"
]
}
}
```
# get_campaign (/docs/mcp/tools/get-campaign)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/get_campaign.mdx. */}
**Get campaign details** · Read-only
Get one email campaign with live analytics: settings (isActive, schedule, timezone), its steps in emailCampaignTemplates[] (each with _id = templateId for update_campaign_step, subject, body and per-step stats), stats (prospect total, scheduledCount, uniqueContacted, totalEmailsSent, opens, clicks, replies, warm replies, bounced, unsubscribed and their rates), steps[] (per-step sent/opened/clicked/replied), statusBuckets (prospect counts per status) and statistics (sent vs scheduled over time). campaignId comes from list_campaigns. Use get_prospects for the contacts themselves.
| Connection | Account URL, team member URL or OAuth |
| --- | --- |
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `campaignId` | `string` | Yes | any | Email campaign id from list_campaigns or create_campaign. |
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "get_campaign",
"title": "Get campaign details",
"annotations": {
"title": "Get campaign details",
"readOnlyHint": true,
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false
},
"inputSchema": {
"type": "object",
"properties": {
"campaignId": {
"type": "string",
"description": "Email campaign id from list_campaigns or create_campaign."
}
},
"required": [
"campaignId"
]
}
}
```
# get_company_people (/docs/mcp/tools/get-company-people)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/get_company_people.mdx. */}
**Get people at the lead's company** · Read-only
Other people who work at the company of a lead (name, job title, department, seniority, LinkedIn), optionally only one department, to find the right contact when the visitor was not the buyer. Free.
| Connection | Account URL, team member URL or OAuth |
| --- | --- |
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `websiteId` | `string` | Yes | any | Website ID from list_websites. |
| `leadId` | `string` | Yes | any | Lead ID from get_leads. |
| `department` | `string` | No | any | Only this department, e.g. Sales Department. |
| `page` | `number` | No | min 1 | Page of results, from 1. |
| `limit` | `number` | No | 1–100 | People per page (1-100). |
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "get_company_people",
"title": "Get people at the lead's company",
"annotations": {
"title": "Get people at the lead's company",
"readOnlyHint": true,
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false
},
"inputSchema": {
"type": "object",
"properties": {
"websiteId": {
"type": "string",
"description": "Website ID from list_websites."
},
"leadId": {
"type": "string",
"description": "Lead ID from get_leads."
},
"department": {
"type": "string",
"description": "Only this department, e.g. Sales Department."
},
"page": {
"type": "number",
"minimum": 1,
"description": "Page of results, from 1."
},
"limit": {
"type": "number",
"minimum": 1,
"maximum": 100,
"description": "People per page (1-100)."
}
},
"required": [
"websiteId",
"leadId"
]
}
}
```
# get_country_blacklist (/docs/mcp/tools/get-country-blacklist)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/get_country_blacklist.mdx. */}
**Get blocked countries** · Read-only
Returns the countries whose visitors are never identified on this website (two-letter codes such as DE or FR). Visits from them are not turned into leads and use no credits. Free.
| Connection | Account URL, team member URL or OAuth |
| --- | --- |
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `websiteId` | `string` | Yes | any | Website ID from list_websites. |
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "get_country_blacklist",
"title": "Get blocked countries",
"annotations": {
"title": "Get blocked countries",
"readOnlyHint": true,
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false
},
"inputSchema": {
"type": "object",
"properties": {
"websiteId": {
"type": "string",
"description": "Website ID from list_websites."
}
},
"required": [
"websiteId"
]
}
}
```
## Used in [#used-in]
- [/docs/qualify/exclusions/mcp](/docs/qualify/exclusions/mcp)
# get_credit_history (/docs/mcp/tools/get-credit-history)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/get_credit_history.mdx. */}
**Get credit history** · Read-only
Lists the account's credit transactions from the last 90 days, newest first: each row has operation (CHARGE, REFUND or DUPLICATE_PREVENTED), amount, credits before/after, the website, the lead's domain/email, a source category (WEBSITE_VISITOR, INTENT_SIGNALS, WEB_SCRAPING, PROSPECTOR, ENRICHMENT, EMAIL_VERIFICATION, CONTACT_UNLOCK, ADJUSTMENT, OTHER), a reason and createdAt. Returns \{ count, hasMore, logs \}. Filter by date range, website, source, operation or lead domain to answer where credits went. For one website's per-cycle allowance snapshots use get_website_credit_history. Needs an account-level key.
| Connection | Account-owner URL or OAuth (not a team member URL) |
| --- | --- |
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `page` | `integer` | No | min 1 · default 1 | Page number, a whole number from 1 (default 1). Use hasMore in the result to know if there is a next page. |
| `limit` | `integer` | No | 1–500 · default 100 | Rows per page, a whole number from 1 to 500 (default 100). |
| `from` | `string` | No | date | Earliest date, ISO (2026-10-01; a time may follow). Default: 90 days ago. |
| `to` | `string` | No | date | Latest date, ISO (2026-10-31; a time may follow). Default: now. |
| `websiteId` | `string` | No | any | Only this website's rows (from list_websites). Leave out for the whole account. |
| `source` | `string` | No | [9 values](#accepted-values) | Only one source category: WEBSITE_VISITOR, INTENT_SIGNALS, WEB_SCRAPING, PROSPECTOR, ENRICHMENT, EMAIL_VERIFICATION, CONTACT_UNLOCK, ADJUSTMENT or OTHER. |
| `operation` | `string` | No | `CHARGE`, `REFUND`, `DUPLICATE_PREVENTED` | Only CHARGE (credit used), REFUND (credit given back) or DUPLICATE_PREVENTED (a repeat that cost nothing). |
| `domain` | `string` | No | any | Only rows for leads from this company domain, e.g. acme.com. |
## Accepted values [#accepted-values]
The exact values these fields take; anything else is refused.
### `source` [#source]
`WEBSITE_VISITOR` · `INTENT_SIGNALS` · `WEB_SCRAPING` · `PROSPECTOR` · `ENRICHMENT` · `EMAIL_VERIFICATION` · `CONTACT_UNLOCK` · `ADJUSTMENT` · `OTHER`
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "get_credit_history",
"title": "Get credit history",
"annotations": {
"title": "Get credit history",
"readOnlyHint": true,
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false
},
"inputSchema": {
"type": "object",
"properties": {
"page": {
"type": "integer",
"minimum": 1,
"default": 1,
"description": "Page number, a whole number from 1 (default 1). Use hasMore in the result to know if there is a next page."
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 500,
"default": 100,
"description": "Rows per page, a whole number from 1 to 500 (default 100)."
},
"from": {
"type": "string",
"format": "date",
"description": "Earliest date, ISO (2026-10-01; a time may follow). Default: 90 days ago."
},
"to": {
"type": "string",
"format": "date",
"description": "Latest date, ISO (2026-10-31; a time may follow). Default: now."
},
"websiteId": {
"type": "string",
"description": "Only this website's rows (from list_websites). Leave out for the whole account."
},
"source": {
"type": "string",
"enum": [
"WEBSITE_VISITOR",
"INTENT_SIGNALS",
"WEB_SCRAPING",
"PROSPECTOR",
"ENRICHMENT",
"EMAIL_VERIFICATION",
"CONTACT_UNLOCK",
"ADJUSTMENT",
"OTHER"
],
"description": "Only one source category: WEBSITE_VISITOR, INTENT_SIGNALS, WEB_SCRAPING, PROSPECTOR, ENRICHMENT, EMAIL_VERIFICATION, CONTACT_UNLOCK, ADJUSTMENT or OTHER."
},
"operation": {
"type": "string",
"enum": [
"CHARGE",
"REFUND",
"DUPLICATE_PREVENTED"
],
"description": "Only CHARGE (credit used), REFUND (credit given back) or DUPLICATE_PREVENTED (a repeat that cost nothing)."
},
"domain": {
"type": "string",
"description": "Only rows for leads from this company domain, e.g. acme.com."
}
}
}
}
```
# get_credit_summary (/docs/mcp/tools/get-credit-summary)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/get_credit_summary.mdx. */}
**Get the credit summary** · Read-only
Credits used in a billing cycle, by source (website visitors, Prospector, AI Scout, Web Scraping…) and by day (byDay: charges, refunds and duplicates prevented per date, UTC), with the plan limit, what is left and leads bought. For single credit events use get_credit_history. Free.
| Connection | Account URL, team member URL or OAuth |
| --- | --- |
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `websiteId` | `string` | Yes | any | Website ID from list_websites. |
| `cycle` | `integer` | No | 0–5 · default 0 | Which billing cycle: 0 = the current one (default), 1 = the one before, up to 5 (the last six cycles are kept; none before the account was created). The answer's cycles list shows each one's dates. |
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "get_credit_summary",
"title": "Get the credit summary",
"annotations": {
"title": "Get the credit summary",
"readOnlyHint": true,
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false
},
"inputSchema": {
"type": "object",
"properties": {
"websiteId": {
"type": "string",
"description": "Website ID from list_websites."
},
"cycle": {
"type": "integer",
"minimum": 0,
"maximum": 5,
"default": 0,
"description": "Which billing cycle: 0 = the current one (default), 1 = the one before, up to 5 (the last six cycles are kept; none before the account was created). The answer's cycles list shows each one's dates."
}
},
"required": [
"websiteId"
]
}
}
```
# get_crm_mappings (/docs/mcp/tools/get-crm-mappings)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/get_crm_mappings.mdx. */}
**Get CRM field mappings** · Read-only
The field mappings used when leads are pushed to a CRM: which lead field fills which CRM field, for contacts and companies. Free.
| Connection | Account URL, team member URL or OAuth |
| --- | --- |
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `websiteId` | `string` | Yes | any | Website ID from list_websites. |
| `crm` | `string` | Yes | `hubspot`, `salesforce`, `pipedrive`, `zoho`, `gohighlevel` | The CRM. |
| `objectType` | `string` | No | `contact`, `company` | contact or company. |
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "get_crm_mappings",
"title": "Get CRM field mappings",
"annotations": {
"title": "Get CRM field mappings",
"readOnlyHint": true,
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false
},
"inputSchema": {
"type": "object",
"properties": {
"websiteId": {
"type": "string",
"description": "Website ID from list_websites."
},
"crm": {
"type": "string",
"enum": [
"hubspot",
"salesforce",
"pipedrive",
"zoho",
"gohighlevel"
],
"description": "The CRM."
},
"objectType": {
"type": "string",
"enum": [
"contact",
"company"
],
"description": "contact or company."
}
},
"required": [
"websiteId",
"crm"
]
}
}
```
## Used in [#used-in]
- [/docs/automations/crm/overview/mcp](/docs/automations/crm/overview/mcp)
# get_domain_blacklist (/docs/mcp/tools/get-domain-blacklist)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/get_domain_blacklist.mdx. */}
**List blocked domains** · Read-only
Lists the company domains blocked from becoming leads on a website. Returns \{ result: [ \{ domain, csv, ... \} ] \}, where csv is the name of the group each domain was added under. Use the group name with remove_from_domain_blacklist. To block more domains use add_to_domain_blacklist. websiteId comes from list_websites.
| Connection | Account URL, team member URL or OAuth |
| --- | --- |
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `websiteId` | `string` | Yes | any | Website ID from list_websites. |
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "get_domain_blacklist",
"title": "List blocked domains",
"annotations": {
"title": "List blocked domains",
"readOnlyHint": true,
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false
},
"inputSchema": {
"type": "object",
"properties": {
"websiteId": {
"type": "string",
"description": "Website ID from list_websites."
}
},
"required": [
"websiteId"
]
}
}
```
# get_domain_setup_status (/docs/mcp/tools/get-domain-setup-status)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/get_domain_setup_status.mdx. */}
**Domain setup progress** · Read-only
Check the setup progress of the outreach domains bought for a website (unpaid picks are not shown). Call it after purchase_outreach_domains until every domain is ready. websiteId comes from list_websites. Per domain read status, completedSteps of totalSteps (5: purchased, DNS configured, mail setup, mailboxes created, ready), progressPercent, terminal (true when ready), mailboxCount, awaitingSenderInfo, hasError with retryCount / retriesExhausted / nextRetryAt (failed steps are retried automatically) and paymentError. Also returns hasEmailSenderInfo and a summary (total, ready, inFlight, errored, paymentErrored, awaitingSenderInfo). Not available with a website-scoped key.
| Connection | Account-owner URL or OAuth (not a team member URL) |
| --- | --- |
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `websiteId` | `string` | Yes | any | Website id from list_websites. |
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "get_domain_setup_status",
"title": "Domain setup progress",
"annotations": {
"title": "Domain setup progress",
"readOnlyHint": true,
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false
},
"inputSchema": {
"type": "object",
"properties": {
"websiteId": {
"type": "string",
"description": "Website id from list_websites."
}
},
"required": [
"websiteId"
]
}
}
```
# get_domain_suggestions (/docs/mcp/tools/get-domain-suggestions)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/get_domain_suggestions.mdx. */}
**Suggest outreach domains** · Read-only
Suggest look-alike domain names for cold outreach, built from the website's own domain and keeping its ending (e.g. acme.example gives getacme.example, tryacme.example, useacme.example, goacme.example, acmeapp.example, acmehq.example). Availability is not checked: run search_domain_availability on a name before add_outreach_domain. websiteId comes from list_websites. Returns baseDomain and suggestions[]. Not available with a website-scoped key.
| Connection | Account-owner URL or OAuth (not a team member URL) |
| --- | --- |
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `websiteId` | `string` | Yes | any | Website id from list_websites. Suggestions are derived from this website's domain. |
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "get_domain_suggestions",
"title": "Suggest outreach domains",
"annotations": {
"title": "Suggest outreach domains",
"readOnlyHint": true,
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false
},
"inputSchema": {
"type": "object",
"properties": {
"websiteId": {
"type": "string",
"description": "Website id from list_websites. Suggestions are derived from this website's domain."
}
},
"required": [
"websiteId"
]
}
}
```
# get_email_account_stats (/docs/mcp/tools/get-email-account-stats)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/get_email_account_stats.mdx. */}
**Mailbox sending load** · Read-only
Get the sending load of every mailbox on a website: how many campaign emails are scheduled on it and how full its next 30 days are. It does not return opens, replies or bounces; use get_campaign for campaign results and get_warmup_stats for warmup numbers. websiteId comes from list_websites. Returns one entry per mailbox with emailAccount (the mailbox id, match it to list_email_accounts), totalScheduledEmails and capacity (a percentage string; anything above 100% is shown as 200%), or a note when the website has no mailboxes.
| Connection | Account URL, team member URL or OAuth |
| --- | --- |
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `websiteId` | `string` | Yes | any | Website id from list_websites. |
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "get_email_account_stats",
"title": "Mailbox sending load",
"annotations": {
"title": "Mailbox sending load",
"readOnlyHint": true,
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false
},
"inputSchema": {
"type": "object",
"properties": {
"websiteId": {
"type": "string",
"description": "Website id from list_websites."
}
},
"required": [
"websiteId"
]
}
}
```
# get_email_account (/docs/mcp/tools/get-email-account)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/get_email_account.mdx. */}
**Get a mailbox** · Read-only
One mailbox in full: address, sender name and signature, daily sending limit, warmup state and health, and whether it is connected. Passwords are never returned. Free.
| Connection | Account URL, team member URL or OAuth |
| --- | --- |
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `websiteId` | `string` | Yes | any | Website ID from list_websites. |
| `emailAccountId` | `string` | Yes | any | Mailbox ID from list_email_accounts. |
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "get_email_account",
"title": "Get a mailbox",
"annotations": {
"title": "Get a mailbox",
"readOnlyHint": true,
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false
},
"inputSchema": {
"type": "object",
"properties": {
"websiteId": {
"type": "string",
"description": "Website ID from list_websites."
},
"emailAccountId": {
"type": "string",
"description": "Mailbox ID from list_email_accounts."
}
},
"required": [
"websiteId",
"emailAccountId"
]
}
}
```
# get_email_template (/docs/mcp/tools/get-email-template)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/get_email_template.mdx. */}
**Get a campaign email** · Read-only
Returns one email (step) of a campaign in full: subject and body templates with their merge fields, the sender, the delay before it is sent and its position in the sequence. templateId comes from get_campaign (emailCampaignTemplates). Free.
| Connection | Account URL, team member URL or OAuth |
| --- | --- |
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `websiteId` | `string` | Yes | any | Website ID from list_websites. |
| `campaignId` | `string` | Yes | any | Campaign ID from list_campaigns. |
| `templateId` | `string` | Yes | any | Step ID from get_campaign, emailCampaignTemplates. |
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "get_email_template",
"title": "Get a campaign email",
"annotations": {
"title": "Get a campaign email",
"readOnlyHint": true,
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false
},
"inputSchema": {
"type": "object",
"properties": {
"websiteId": {
"type": "string",
"description": "Website ID from list_websites."
},
"campaignId": {
"type": "string",
"description": "Campaign ID from list_campaigns."
},
"templateId": {
"type": "string",
"description": "Step ID from get_campaign, emailCampaignTemplates."
}
},
"required": [
"websiteId",
"campaignId",
"templateId"
]
}
}
```
# get_email_thread (/docs/mcp/tools/get-email-thread)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/get_email_thread.mdx. */}
**Read email thread** · Read-only
Read one outreach email conversation: the email that was sent (subject, send time, opens) and every reply under it, incoming and outgoing. emailId comes from get_inbox_emails (prospects[].emails[].emailId). Returns prospectEmail with the prospect's _id, name and recipientEmail, email (the sent email with its replies[]) and emailAccount (the mailbox that sent it). Use reply_to_prospect to answer.
| Connection | Account URL, team member URL or OAuth |
| --- | --- |
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `emailId` | `string` | Yes | any | Email id from get_inbox_emails, prospects[].emails[].emailId (not the prospect _id). |
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "get_email_thread",
"title": "Read email thread",
"annotations": {
"title": "Read email thread",
"readOnlyHint": true,
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false
},
"inputSchema": {
"type": "object",
"properties": {
"emailId": {
"type": "string",
"description": "Email id from get_inbox_emails, prospects[].emails[].emailId (not the prospect _id)."
}
},
"required": [
"emailId"
]
}
}
```
## Used in [#used-in]
- [/docs/engage/master-inbox/mcp](/docs/engage/master-inbox/mcp)
# get_google_ads_audience (/docs/mcp/tools/get-google-ads-audience)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/get_google_ads_audience.mdx. */}
**Get a Google Ads audience** · Read-only
One retargeting audience: settings, contacts uploaded, match rate and the stats of its Google campaign. Free.
| Connection | Account URL, team member URL or OAuth |
| --- | --- |
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `websiteId` | `string` | Yes | any | Website ID from list_websites. |
| `audienceId` | `string` | Yes | any | Audience ID from list_google_ads_audiences. |
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "get_google_ads_audience",
"title": "Get a Google Ads audience",
"annotations": {
"title": "Get a Google Ads audience",
"readOnlyHint": true,
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false
},
"inputSchema": {
"type": "object",
"properties": {
"websiteId": {
"type": "string",
"description": "Website ID from list_websites."
},
"audienceId": {
"type": "string",
"description": "Audience ID from list_google_ads_audiences."
}
},
"required": [
"websiteId",
"audienceId"
]
}
}
```
# get_icp (/docs/mcp/tools/get-icp)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/get_icp.mdx. */}
**Get ideal customer profile** · Read-only
Returns the ideal customer profile (ICP) saved for a website: the companies the user wants to reach. Read it before update_icp, or when explaining why a lead is or is not a good fit. Lead scoring rules are separate: use list_lead_scoring_models. Returns employeeLowerBound / employeeUpperBound, revenueLowerBound / revenueUpperBound, location[], role[], industries[], sector[], the priority values for each criterion and any AI qualification questions. Returns null when no ICP is saved.
| Connection | Account URL, team member URL or OAuth |
| --- | --- |
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `websiteId` | `string` | Yes | any | Website ID from list_websites. |
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "get_icp",
"title": "Get ideal customer profile",
"annotations": {
"title": "Get ideal customer profile",
"readOnlyHint": true,
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false
},
"inputSchema": {
"type": "object",
"properties": {
"websiteId": {
"type": "string",
"description": "Website ID from list_websites."
}
},
"required": [
"websiteId"
]
}
}
```
# get_inbox_emails (/docs/mcp/tools/get-inbox-emails)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/get_inbox_emails.mdx. */}
**List outreach inbox** · Read-only
List prospects from the outreach master inbox of a website across all campaigns, most recent activity first. Default status inbox shows prospects who replied (including out-of-office) and are not archived. Use get_email_thread to read one conversation, reply_to_prospect to answer and archive_email to clear it. websiteId comes from list_websites. Returns prospects[] (each with _id, recipientEmail, firstName, lastName, status, the sending emailAccount, emailCampaign and emails[]; each emails[].emailId is the emailId the other inbox tools take), totalProspects, currentPage and totalPages.
| Connection | Account URL, team member URL or OAuth |
| --- | --- |
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `websiteId` | `string` | Yes | any | Website id from list_websites. |
| `status` | `string` | No | any | Which view to list: inbox (replied, not archived; default), contacted (an email was sent), scheduled (an email is due and not sent yet) or archived. |
| `page` | `number` | No | any | Page number, starting at 1. Default 1. |
| `limit` | `number` | No | any | Prospects per page. Default 20. |
| `searchQuery` | `string` | No | any | Optional case-insensitive text matched against first name, last name and email address. |
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "get_inbox_emails",
"title": "List outreach inbox",
"annotations": {
"title": "List outreach inbox",
"readOnlyHint": true,
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false
},
"inputSchema": {
"type": "object",
"properties": {
"websiteId": {
"type": "string",
"description": "Website id from list_websites."
},
"status": {
"type": "string",
"description": "Which view to list: inbox (replied, not archived; default), contacted (an email was sent), scheduled (an email is due and not sent yet) or archived."
},
"page": {
"type": "number",
"description": "Page number, starting at 1. Default 1."
},
"limit": {
"type": "number",
"description": "Prospects per page. Default 20."
},
"searchQuery": {
"type": "string",
"description": "Optional case-insensitive text matched against first name, last name and email address."
}
},
"required": [
"websiteId"
]
}
}
```
# get_intent_topics_catalog (/docs/mcp/tools/get-intent-topics-catalog)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/get_intent_topics_catalog.mdx. */}
**Browse intent topics** · Read-only
Lists every third-party intent topic you can subscribe to, e.g. 'CRM Software' or 'Cybersecurity'. Each topic tracks companies that are actively researching that category across the web. Use it to find a topicSlug for subscribe_to_intent_topic. To see the topics a website already follows, use list_intent_topics. Costs nothing. Returns \{ result[] \} sorted by name; each row has topicSlug, displayName, profile.roleKeywords, profile.industryConstraint, surgeThreshold and availabilityPerDay.
| Connection | Account URL, team member URL or OAuth |
| --- | --- |
## Parameters [#parameters]
This tool takes no parameters.
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "get_intent_topics_catalog",
"title": "Browse intent topics",
"annotations": {
"title": "Browse intent topics",
"readOnlyHint": true,
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false
},
"inputSchema": {
"type": "object",
"properties": {}
}
}
```
# get_lead_ai_summary (/docs/mcp/tools/get-lead-ai-summary)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/get_lead_ai_summary.mdx. */}
**AI visit summary for a lead** · Read-only
Get a short AI-written summary (about 50 words) of what this visitor did on your website, based on their company, country and the pages they viewed, ending with one verdict: 'Ready to Buy', 'Research' or 'Just Browsing'. Returned as aISummary (text, may contain \
tags). leadId comes from get_leads. Use get_lead for the raw page-visit data. Generated fresh on each call, so wording can differ between calls. Changes nothing in the account.
| Connection | Account URL, team member URL or OAuth |
| --- | --- |
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `leadId` | `string` | Yes | any | Lead id (the _id of a row returned by get_leads). |
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "get_lead_ai_summary",
"title": "AI visit summary for a lead",
"annotations": {
"title": "AI visit summary for a lead",
"readOnlyHint": true,
"destructiveHint": false,
"idempotentHint": false,
"openWorldHint": false
},
"inputSchema": {
"type": "object",
"properties": {
"leadId": {
"type": "string",
"description": "Lead id (the _id of a row returned by get_leads)."
}
},
"required": [
"leadId"
]
}
}
```
# get_lead_automation_history (/docs/mcp/tools/get-lead-automation-history)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/get_lead_automation_history.mdx. */}
**Lead automation history** · Read-only
List every automation run recorded for one lead, newest first, as automationLogs[] with status, message (the result or error text), automation (the automation id, see list_automations) and executedAt. Use it to check whether a lead reached Slack, a CRM, a webhook or an email campaign and why a run failed. leadId comes from get_leads. To run automations again use retrigger_automations or rerun_automation_for_lead. Read-only.
| Connection | Account URL, team member URL or OAuth |
| --- | --- |
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `leadId` | `string` | Yes | any | Lead id (the _id of a row returned by get_leads). |
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "get_lead_automation_history",
"title": "Lead automation history",
"annotations": {
"title": "Lead automation history",
"readOnlyHint": true,
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false
},
"inputSchema": {
"type": "object",
"properties": {
"leadId": {
"type": "string",
"description": "Lead id (the _id of a row returned by get_leads)."
}
},
"required": [
"leadId"
]
}
}
```
# get_lead_comments (/docs/mcp/tools/get-lead-comments)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/get_lead_comments.mdx. */}
**Get lead comments** · Read-only
Get the comments (team notes) on a lead. Each comment has _id (commentId for update_lead_comment / delete_lead_comment), content, the author's firstName, lastName, userEmail, role and picture, and createdAt. leadId comes from get_leads. Add one with add_lead_comment. Returns \{ comments: [...] \}. Read-only.
| Connection | Account URL, team member URL or OAuth |
| --- | --- |
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `leadId` | `string` | Yes | any | Lead id (the _id of a row returned by get_leads). |
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "get_lead_comments",
"title": "Get lead comments",
"annotations": {
"title": "Get lead comments",
"readOnlyHint": true,
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false
},
"inputSchema": {
"type": "object",
"properties": {
"leadId": {
"type": "string",
"description": "Lead id (the _id of a row returned by get_leads)."
}
},
"required": [
"leadId"
]
}
}
```
# get_lead_quality (/docs/mcp/tools/get-lead-quality)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/get_lead_quality.mdx. */}
**Get the lead quality bar** · Read-only
Returns the lead quality settings of a website: the minimum ideal-customer score a lead needs to be kept, the bar per source (website visitors, intent, Web Scraping, Prospector, AI Scout), contacts-only options and the audience focus (B2B, B2C or both). Free.
| Connection | Account URL, team member URL or OAuth |
| --- | --- |
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `websiteId` | `string` | Yes | any | Website ID from list_websites. |
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "get_lead_quality",
"title": "Get the lead quality bar",
"annotations": {
"title": "Get the lead quality bar",
"readOnlyHint": true,
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false
},
"inputSchema": {
"type": "object",
"properties": {
"websiteId": {
"type": "string",
"description": "Website ID from list_websites."
}
},
"required": [
"websiteId"
]
}
}
```
# get_lead_recordings (/docs/mcp/tools/get-lead-recordings)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/get_lead_recordings.mdx. */}
**List session recordings** · Read-only
List session recordings (replays of what a visitor did on your website), newest first, up to 100. Pass clientId to list a website's recordings, or email to list one identified visitor's recordings. Each recording has session_id, client_id, lead_email, started_at, ended_at, duration_ms, page_count, first_page and finalized. Recordings exist only when session recording is enabled for the website. clientId comes from get_website or get_tracking_pixel; the email is the lead's exactPerson email from get_leads. To watch one, pass its session_id and client_id to get_recording_url. At least one of clientId or email is required. Read-only.
| Connection | Account URL, team member URL or OAuth |
| --- | --- |
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `clientId` | `string` | No | any | The website's clientId (16-32 characters) from get_website or get_tracking_pixel. |
| `email` | `string` | No | any | Email address of an identified visitor (from get_leads). When given, the list is the recordings for this email. |
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "get_lead_recordings",
"title": "List session recordings",
"annotations": {
"title": "List session recordings",
"readOnlyHint": true,
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false
},
"inputSchema": {
"type": "object",
"properties": {
"clientId": {
"type": "string",
"description": "The website's clientId (16-32 characters) from get_website or get_tracking_pixel."
},
"email": {
"type": "string",
"description": "Email address of an identified visitor (from get_leads). When given, the list is the recordings for this email."
}
}
}
}
```
# get_lead_scoring_model (/docs/mcp/tools/get-lead-scoring-model)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/get_lead_scoring_model.mdx. */}
**Get a lead scoring model** · Read-only
Get one lead scoring model with all its rules. Each criterion (industry, employees, revenue, hqLocation, sector, technologies, companyType, tag, keywords, jobTitle, department, seniority, visitorLocation, visitorCity, visitorState, pageVisited, numberVisits, duration, recency, referrerDomain, campaignSource/Medium/Name/Term, companyDomain, contactEmail) holds a list of rules with values, score (-10 to +10 points) and filter ('any' = add points, 'only' = keep only matching leads, 'excl' = exclude matching leads). Also returns name, active, status, bands (warm/hot thresholds) and revision. modelId is an _id from list_lead_scoring_models. Read it before update_lead_scoring_model. Read-only.
| Connection | Account URL, team member URL or OAuth |
| --- | --- |
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `modelId` | `string` | Yes | any | Scoring model id (24 hex characters), the _id from list_lead_scoring_models. |
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "get_lead_scoring_model",
"title": "Get a lead scoring model",
"annotations": {
"title": "Get a lead scoring model",
"readOnlyHint": true,
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false
},
"inputSchema": {
"type": "object",
"properties": {
"modelId": {
"type": "string",
"description": "Scoring model id (24 hex characters), the _id from list_lead_scoring_models."
}
},
"required": [
"modelId"
]
}
}
```
# get_lead (/docs/mcp/tools/get-lead)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/get_lead.mdx. */}
**Get lead details** · Read-only
Get one lead's company profile and visit history: company (name, domain, industry, sector, type, founded year, location, employee range, estimated revenue, LinkedIn/Facebook pages), tags, UTM values, pageVisits[] (url, path, timeSpentMs/timeSpentSeconds, visitCount, sorted by time spent) and summary (totalVisits, lastVisit, totalTimeOnSiteMs, referrer), plus CRM record ids when the lead was pushed. leadId is the _id of a row from get_leads. exactPerson is the identified person (firstName, lastName, fullName, businessEmail, personalEmail, email, phone, position, linkedinUrl), or null when only the company is known; exactPersonType says Exact Visitor or Suggested Contact. Use get_lead_ai_summary for a short written read of the visit, get_lead_automation_history for automation runs. Read-only.
| Connection | Account URL, team member URL or OAuth |
| --- | --- |
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `leadId` | `string` | Yes | any | Lead id (the _id of a row returned by get_leads). |
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "get_lead",
"title": "Get lead details",
"annotations": {
"title": "Get lead details",
"readOnlyHint": true,
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false
},
"inputSchema": {
"type": "object",
"properties": {
"leadId": {
"type": "string",
"description": "Lead id (the _id of a row returned by get_leads)."
}
},
"required": [
"leadId"
]
}
}
```
# get_leads (/docs/mcp/tools/get-leads)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/get_leads.mdx. */}
**List website leads** · Read-only
List the identified visitors (leads) of one website whose last visit falls in a date range, newest first: the exact person (exactPerson: name, email, phone, LinkedIn, position), their company, visitor location, pages viewed, visits, UTM data, tags and lead scores. Use get_lead for one lead's full page history, get_lead_comments for notes, export_leads_csv for a full file. websiteId comes from list_websites. Read-only. 50 leads per page; totalLeads, totalPages and currentPage tell you where you are, and paginationCapped=true means narrow the dates or filters to reach every lead. Hidden leads are never listed. When nothing matches, emptyStateReason says why (not_verified, too_restrictive_filters, no_leads_in_date_range, no_leads_ever). Results may be up to 60 seconds old.
| Connection | Account URL, team member URL or OAuth |
| --- | --- |
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `websiteId` | `string` | Yes | any | Website id (24 hex characters) from list_websites. |
| `dateFrom` | `string` | Yes | any | Start of the range, matched on the lead's last visit date (whole day). Accepts YYYY-MM-DD, MM/DD/YYYY, a full ISO 8601 timestamp or epoch milliseconds. |
| `dateTo` | `string` | Yes | any | End of the range (inclusive, whole day). Same formats as dateFrom. |
| `page` | `number` | No | any | Page number, 1-based, 50 leads per page. Default 1; pages beyond 100 return page 100. |
| `domain` | `string` | No | any | Free-text search across company name and domain, person names and emails, e.g. "acme.example" or "Jane Smith". |
| `industries` | `string` | No | any | One industry to match (case-insensitive, partial match), e.g. "Software". A single value, not a list. |
| `sectors` | `string` | No | any | One company sector to match (case-insensitive, partial match). |
| `visitorLocation` | `string` | No | any | Visitor country as a two-letter ISO code, e.g. "US", "GB" (case-insensitive). |
| `visitorLocationState` | `string` | No | any | Visitor state/region, e.g. "California". When set without visitorLocation, results are limited to US visitors. |
| `tag` | `string` | No | any | Tag name (not id) to filter by, e.g. "HOT"; tag names are stored in upper case and matched case-insensitively. Names come from list_tags. |
| `visits_lower_bound` | `number` | No | any | Minimum number of visits (sessions). Default 0. |
| `visits_upper_bound` | `number` | No | any | Maximum number of visits (sessions). Leave it out to include every lead, however many visits. |
| `employeesMin` | `number` | No | any | Smallest company headcount to include, e.g. 10. |
| `employeesMax` | `number` | No | any | Largest company headcount to include, e.g. 200. |
| `tech` | `string` | No | any | Technology the company uses, case-insensitive partial match, e.g. "HubSpot", or a JSON array string of several: '["HubSpot","Shopify"]'. |
| `exactVisitor` | `boolean` | No | any | true to list only leads where the exact person was identified (name and contact details), false for all leads. Leave it out for all leads. |
| `utmSource` | `string` | No | any | JSON array string of [operator, value] pairs, e.g. '[["contains","google"]]'. Operators: contains, not-contains, starts-with, ends-with. A plain string (not JSON) makes the call fail. |
| `utmMedium` | `string` | No | any | JSON array string of [operator, value] pairs, e.g. '[["contains","cpc"]]'. Same operators as utmSource. |
| `pageVisited` | `string` | No | any | JSON array string of [operator, value] pairs matched against visited page paths, e.g. '[["contains","pricing"]]' or '[["not-contains","careers"]]'. Operators: contains, not-contains, starts-with (value without the leading slash), ends-with. A plain string makes the call fail. |
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "get_leads",
"title": "List website leads",
"annotations": {
"title": "List website leads",
"readOnlyHint": true,
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false
},
"inputSchema": {
"type": "object",
"properties": {
"websiteId": {
"type": "string",
"description": "Website id (24 hex characters) from list_websites."
},
"dateFrom": {
"type": "string",
"description": "Start of the range, matched on the lead's last visit date (whole day). Accepts YYYY-MM-DD, MM/DD/YYYY, a full ISO 8601 timestamp or epoch milliseconds."
},
"dateTo": {
"type": "string",
"description": "End of the range (inclusive, whole day). Same formats as dateFrom."
},
"page": {
"type": "number",
"description": "Page number, 1-based, 50 leads per page. Default 1; pages beyond 100 return page 100."
},
"domain": {
"type": "string",
"description": "Free-text search across company name and domain, person names and emails, e.g. \"acme.example\" or \"Jane Smith\"."
},
"industries": {
"type": "string",
"description": "One industry to match (case-insensitive, partial match), e.g. \"Software\". A single value, not a list."
},
"sectors": {
"type": "string",
"description": "One company sector to match (case-insensitive, partial match)."
},
"visitorLocation": {
"type": "string",
"description": "Visitor country as a two-letter ISO code, e.g. \"US\", \"GB\" (case-insensitive)."
},
"visitorLocationState": {
"type": "string",
"description": "Visitor state/region, e.g. \"California\". When set without visitorLocation, results are limited to US visitors."
},
"tag": {
"type": "string",
"description": "Tag name (not id) to filter by, e.g. \"HOT\"; tag names are stored in upper case and matched case-insensitively. Names come from list_tags."
},
"visits_lower_bound": {
"type": "number",
"description": "Minimum number of visits (sessions). Default 0."
},
"visits_upper_bound": {
"type": "number",
"description": "Maximum number of visits (sessions). Leave it out to include every lead, however many visits."
},
"employeesMin": {
"type": "number",
"description": "Smallest company headcount to include, e.g. 10."
},
"employeesMax": {
"type": "number",
"description": "Largest company headcount to include, e.g. 200."
},
"tech": {
"type": "string",
"description": "Technology the company uses, case-insensitive partial match, e.g. \"HubSpot\", or a JSON array string of several: '[\"HubSpot\",\"Shopify\"]'."
},
"exactVisitor": {
"type": "boolean",
"description": "true to list only leads where the exact person was identified (name and contact details), false for all leads. Leave it out for all leads."
},
"utmSource": {
"type": "string",
"description": "JSON array string of [operator, value] pairs, e.g. '[[\"contains\",\"google\"]]'. Operators: contains, not-contains, starts-with, ends-with. A plain string (not JSON) makes the call fail."
},
"utmMedium": {
"type": "string",
"description": "JSON array string of [operator, value] pairs, e.g. '[[\"contains\",\"cpc\"]]'. Same operators as utmSource."
},
"pageVisited": {
"type": "string",
"description": "JSON array string of [operator, value] pairs matched against visited page paths, e.g. '[[\"contains\",\"pricing\"]]' or '[[\"not-contains\",\"careers\"]]'. Operators: contains, not-contains, starts-with (value without the leading slash), ends-with. A plain string makes the call fail."
}
},
"required": [
"websiteId",
"dateFrom",
"dateTo"
]
}
}
```
## Used in [#used-in]
- [/docs/automations/run-history/mcp](/docs/automations/run-history/mcp)
- [/docs/leads/csv-export/mcp](/docs/leads/csv-export/mcp)
- [/docs/leads/hide-delete/mcp](/docs/leads/hide-delete/mcp)
- [/docs/leads/lead-details/mcp](/docs/leads/lead-details/mcp)
- [/docs/leads/tags/mcp](/docs/leads/tags/mcp)
# get_linkedin_campaign_timeline (/docs/mcp/tools/get-linkedin-campaign-timeline)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/get_linkedin_campaign_timeline.mdx. */}
**Get a LinkedIn campaign timeline** · Read-only
What a LinkedIn campaign did day by day over the last days: invitations sent, accepted, messages sent and replies. Free.
| Connection | Account-owner URL or OAuth (not a team member URL) |
| --- | --- |
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `websiteId` | `string` | Yes | any | Website ID from list_websites. |
| `linkedinCampaignId` | `string` | Yes | any | LinkedIn campaign ID from list_linkedin_campaigns. |
| `days` | `number` | No | 1–90 | How many days back (1-90). |
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "get_linkedin_campaign_timeline",
"title": "Get a LinkedIn campaign timeline",
"annotations": {
"title": "Get a LinkedIn campaign timeline",
"readOnlyHint": true,
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false
},
"inputSchema": {
"type": "object",
"properties": {
"websiteId": {
"type": "string",
"description": "Website ID from list_websites."
},
"linkedinCampaignId": {
"type": "string",
"description": "LinkedIn campaign ID from list_linkedin_campaigns."
},
"days": {
"type": "number",
"minimum": 1,
"maximum": 90,
"description": "How many days back (1-90)."
}
},
"required": [
"websiteId",
"linkedinCampaignId"
]
}
}
```
# get_linkedin_campaign (/docs/mcp/tools/get-linkedin-campaign)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/get_linkedin_campaign.mdx. */}
**Get a LinkedIn campaign** · Read-only
One LinkedIn campaign of this website: its settings and the people in it with their status (invited, connected, messaged, replied), optionally one status, page by page. Free.
| Connection | Account-owner URL or OAuth (not a team member URL) |
| --- | --- |
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `websiteId` | `string` | Yes | any | Website ID from list_websites. |
| `linkedinCampaignId` | `string` | Yes | any | LinkedIn campaign ID from list_linkedin_campaigns. |
| `status` | `string` | No | any | Only people with this status. |
| `page` | `number` | No | min 1 | Page of people, from 1. |
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "get_linkedin_campaign",
"title": "Get a LinkedIn campaign",
"annotations": {
"title": "Get a LinkedIn campaign",
"readOnlyHint": true,
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false
},
"inputSchema": {
"type": "object",
"properties": {
"websiteId": {
"type": "string",
"description": "Website ID from list_websites."
},
"linkedinCampaignId": {
"type": "string",
"description": "LinkedIn campaign ID from list_linkedin_campaigns."
},
"status": {
"type": "string",
"description": "Only people with this status."
},
"page": {
"type": "number",
"minimum": 1,
"description": "Page of people, from 1."
}
},
"required": [
"websiteId",
"linkedinCampaignId"
]
}
}
```
# get_list (/docs/mcp/tools/get-list)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/get_list.mdx. */}
**Get a list** · Read-only
Returns one list with its contacts or companies, page by page. Returns 404 when the list is not one of this website's.
| Connection | Account URL, team member URL or OAuth |
| --- | --- |
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `websiteId` | `string` | Yes | any | Website ID from list_websites. |
| `listType` | `string` | Yes | `contact`, `company` | contact for lists of people, company for lists of companies. |
| `listId` | `string` | Yes | any | _id from list_lists. |
| `page` | `number` | No | min 1 | Page of items, starting at 1. |
| `limit` | `number` | No | min 1 | Items per page. |
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "get_list",
"title": "Get a list",
"annotations": {
"title": "Get a list",
"readOnlyHint": true,
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false
},
"inputSchema": {
"type": "object",
"properties": {
"websiteId": {
"type": "string",
"description": "Website ID from list_websites."
},
"listType": {
"type": "string",
"enum": [
"contact",
"company"
],
"description": "contact for lists of people, company for lists of companies."
},
"listId": {
"type": "string",
"description": "_id from list_lists."
},
"page": {
"type": "number",
"minimum": 1,
"description": "Page of items, starting at 1."
},
"limit": {
"type": "number",
"minimum": 1,
"description": "Items per page."
}
},
"required": [
"websiteId",
"listType",
"listId"
]
}
}
```
# get_permissions_catalog (/docs/mcp/tools/get-permissions-catalog)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/get_permissions_catalog.mdx. */}
**Get the permissions catalog** · Read-only
Returns every permission a member can be given and the presets (full, sales, developer, viewer, team, client) with the permissions each one ticks. Use it before invite_members or update_member.
| Connection | Account-owner URL or OAuth (not a team member URL) |
| --- | --- |
## Parameters [#parameters]
This tool takes no parameters.
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "get_permissions_catalog",
"title": "Get the permissions catalog",
"annotations": {
"title": "Get the permissions catalog",
"readOnlyHint": true,
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false
},
"inputSchema": {
"type": "object",
"properties": {}
}
}
```
# get_pricing (/docs/mcp/tools/get-pricing)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/get_pricing.mdx. */}
**Get outreach mailbox and domain pricing** · Read-only
Returns the account's prices for outreach mailboxes and sending domains: mailboxPricePerMonthUSD (and the yearly equivalent), whether custom or default pricing applies, the defaults, and the outreach starter-kit state (available now, or earned on upgrade). It does NOT return subscription plan prices; to see what a plan change would cost use preview_plan_change, and for the current plan use get_subscription. Needs an account-level key.
| Connection | Account-owner URL or OAuth (not a team member URL) |
| --- | --- |
## Parameters [#parameters]
This tool takes no parameters.
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "get_pricing",
"title": "Get outreach mailbox and domain pricing",
"annotations": {
"title": "Get outreach mailbox and domain pricing",
"readOnlyHint": true,
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false
},
"inputSchema": {
"type": "object",
"properties": {}
}
}
```
# get_prospects (/docs/mcp/tools/get-prospects)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/get_prospects.mdx. */}
**List campaign prospects** · Read-only
List the contacts (prospects) already added to email campaigns on a website, newest first. Pass campaignId (from list_campaigns) to see one campaign's prospects; each prospect carries its emails[] with the per-step schedule, send time, opens and replies. Use get_inbox_emails for replies only, and search_people/get_leads to find new contacts. websiteId comes from list_websites. Returns prospects[], totalCount and totalPages. Page size is 50 for the whole website, 200 for one campaign. The prospect _id is the prospectId used by stop_prospect and remove_prospect_from_campaign. When the campaign is paused, every prospect is shown with paused: true.
| Connection | Account URL, team member URL or OAuth |
| --- | --- |
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `websiteId` | `string` | Yes | any | Website id (24 hex characters) from list_websites. |
| `campaignId` | `string` | No | any | Optional email campaign id from list_campaigns. Limits the list to that campaign. |
| `page` | `number` | No | any | Page number, starting at 1. Default 1. |
| `status` | `string` | No | any | Optional prospect status filter, e.g. scheduled, contacted, warm-reply, cold-reply, bounced, unsubscribed, out-of-office, error-sending, manually-paused, delayed, skipped. An unknown value is ignored and all prospects are returned. |
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "get_prospects",
"title": "List campaign prospects",
"annotations": {
"title": "List campaign prospects",
"readOnlyHint": true,
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false
},
"inputSchema": {
"type": "object",
"properties": {
"websiteId": {
"type": "string",
"description": "Website id (24 hex characters) from list_websites."
},
"campaignId": {
"type": "string",
"description": "Optional email campaign id from list_campaigns. Limits the list to that campaign."
},
"page": {
"type": "number",
"description": "Page number, starting at 1. Default 1."
},
"status": {
"type": "string",
"description": "Optional prospect status filter, e.g. scheduled, contacted, warm-reply, cold-reply, bounced, unsubscribed, out-of-office, error-sending, manually-paused, delayed, skipped. An unknown value is ignored and all prospects are returned."
}
},
"required": [
"websiteId"
]
}
}
```
# get_recording_url (/docs/mcp/tools/get-recording-url)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/get_recording_url.mdx. */}
**Get recording playback link** · Read-only
Get a signed playback link for one session recording. The link expires after 5 minutes, so open or share it right away and request a new one later. sessionId is session_id and clientId is client_id from get_lead_recordings (clientId also from get_website). The session must be among the website's 100 most recent recordings, otherwise access is refused. Returns url. Read-only.
| Connection | Account URL, team member URL or OAuth |
| --- | --- |
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `sessionId` | `string` | Yes | any | Recording id (session_id from get_lead_recordings), 16-64 characters. |
| `clientId` | `string` | Yes | any | The website's clientId that owns the recording (client_id from get_lead_recordings, or from get_website). |
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "get_recording_url",
"title": "Get recording playback link",
"annotations": {
"title": "Get recording playback link",
"readOnlyHint": true,
"destructiveHint": false,
"idempotentHint": false,
"openWorldHint": false
},
"inputSchema": {
"type": "object",
"properties": {
"sessionId": {
"type": "string",
"description": "Recording id (session_id from get_lead_recordings), 16-64 characters."
},
"clientId": {
"type": "string",
"description": "The website's clientId that owns the recording (client_id from get_lead_recordings, or from get_website)."
}
},
"required": [
"sessionId",
"clientId"
]
}
}
```
# get_slack_message_template (/docs/mcp/tools/get-slack-message-template)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/get_slack_message_template.mdx. */}
**Get the Slack message template** · Read-only
The template of the message posted to Slack for each lead: template (null = the default is used), defaultTemplate and mergeFields (every field a template may use). Merge fields are written \{\{lead.company.name\}\}, \{\{lead.person.firstName\}\} and so on. Free.
| Connection | Account URL, team member URL or OAuth |
| --- | --- |
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `websiteId` | `string` | Yes | any | Website ID from list_websites. |
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "get_slack_message_template",
"title": "Get the Slack message template",
"annotations": {
"title": "Get the Slack message template",
"readOnlyHint": true,
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false
},
"inputSchema": {
"type": "object",
"properties": {
"websiteId": {
"type": "string",
"description": "Website ID from list_websites."
}
},
"required": [
"websiteId"
]
}
}
```
# get_subscription (/docs/mcp/tools/get-subscription)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/get_subscription.mdx. */}
**Get subscription** · Read-only
Shows the current subscription: plan, tierName, leads per month, usedCredits, remaining, topUpCredits, refreshOn, price (monthly equivalent, USD), annualTotal, interval ('month' or 'year'), nextBillingDate, cancelAtPeriodEnd, subscriptionStatus, isPausedByUser/pausedUntil, pendingDowngrade, retentionDiscount and add-ons. Read-only. Call it before any plan change: the interval tells you which value of `annual` to pass to preview_plan_change, upgrade_plan and downgrade_plan. Price fields are empty when there is no paid subscription. Needs an account-level key.
| Connection | Account-owner URL or OAuth (not a team member URL) |
| --- | --- |
## Parameters [#parameters]
This tool takes no parameters.
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "get_subscription",
"title": "Get subscription",
"annotations": {
"title": "Get subscription",
"readOnlyHint": true,
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false
},
"inputSchema": {
"type": "object",
"properties": {}
}
}
```
# get_tracking_pixel (/docs/mcp/tools/get-tracking-pixel)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/get_tracking_pixel.mdx. */}
**Get tracking snippet** · Read-only
Returns the JavaScript snippet to install on a website so visitors can be identified, plus websiteId, clientId, status and url. Give trackingScript to the user to add to every page of their site (or their tag manager / site builder). After it is installed, run verify_website. websiteId comes from list_websites or add_website.
| Connection | Account URL, team member URL or OAuth |
| --- | --- |
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `websiteId` | `string` | Yes | any | Website ID from list_websites or add_website. |
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "get_tracking_pixel",
"title": "Get tracking snippet",
"annotations": {
"title": "Get tracking snippet",
"readOnlyHint": true,
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false
},
"inputSchema": {
"type": "object",
"properties": {
"websiteId": {
"type": "string",
"description": "Website ID from list_websites or add_website."
}
},
"required": [
"websiteId"
]
}
}
```
## Used in [#used-in]
- [/docs/websites/websites/mcp](/docs/websites/websites/mcp)
# get_warmup_health (/docs/mcp/tools/get-warmup-health)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/get_warmup_health.mdx. */}
**Get warmup health** · Read-only
Returns one mailbox's warmup health: reputation, inbox vs spam placement and what to fix. Free.
| Connection | Account URL, team member URL or OAuth |
| --- | --- |
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `websiteId` | `string` | Yes | any | Website ID from list_websites. |
| `emailAccountId` | `string` | Yes | any | _id of the mailbox from list_email_accounts. |
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "get_warmup_health",
"title": "Get warmup health",
"annotations": {
"title": "Get warmup health",
"readOnlyHint": true,
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false
},
"inputSchema": {
"type": "object",
"properties": {
"websiteId": {
"type": "string",
"description": "Website ID from list_websites."
},
"emailAccountId": {
"type": "string",
"description": "_id of the mailbox from list_email_accounts."
}
},
"required": [
"websiteId",
"emailAccountId"
]
}
}
```
# get_warmup_stats (/docs/mcp/tools/get-warmup-stats)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/get_warmup_stats.mdx. */}
**Get warmup stats** · Read-only
Get warmup statistics for all mailboxes on a website: totals (mailboxes, warmup on, connected, warmup emails sent and received) and per mailbox the daily volume, inbox placement and reputation. websiteId comes from list_websites. reputation is only reported when a health check from the last 7 days backs it, otherwise it is insufficient_data with healthScore null. sentToday is the real number of warmup emails sent today and effectiveDailyLimit the limit actually enforced; currentDailyVolume resets daily. rampWeek (= warmupSettings.currentWeek) is the warmup ramp week and is null while warmup is off; rampingCurrentWeek on list_email_accounts is a different thing, the campaign sending ramp. warmupPlacement counts warmup emails that landed in inbox vs spam.
| Connection | Account URL, team member URL or OAuth |
| --- | --- |
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `websiteId` | `string` | Yes | any | Website id from list_websites. |
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "get_warmup_stats",
"title": "Get warmup stats",
"annotations": {
"title": "Get warmup stats",
"readOnlyHint": true,
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false
},
"inputSchema": {
"type": "object",
"properties": {
"websiteId": {
"type": "string",
"description": "Website id from list_websites."
}
},
"required": [
"websiteId"
]
}
}
```
# get_web_scraping (/docs/mcp/tools/get-web-scraping)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/get_web_scraping.mdx. */}
**Get Web Scraping keywords** · Read-only
Web Scraping looks for your keywords on websites across the open web — in the page text or in the scripts a site loads — and adds the companies that match, with their people, as leads under Leads › Web Scraping. A keyword can be a phrase your buyers write about themselves ("ships worldwide") or a domain such as a competitor's tracker (competitor-tool.com). Returns whether it is on, the keywords and their match mode, the daily limit, contacts-only, leads today and in total, and leads per keyword over the last 7 days. Free.
| Connection | Account URL, team member URL or OAuth |
| --- | --- |
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `websiteId` | `string` | Yes | any | Website ID from list_websites. |
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "get_web_scraping",
"title": "Get Web Scraping keywords",
"annotations": {
"title": "Get Web Scraping keywords",
"readOnlyHint": true,
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false
},
"inputSchema": {
"type": "object",
"properties": {
"websiteId": {
"type": "string",
"description": "Website ID from list_websites."
}
},
"required": [
"websiteId"
]
}
}
```
# get_website_analytics (/docs/mcp/tools/get-website-analytics)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/get_website_analytics.mdx. */}
**Get website audience breakdown** · Read-only
Summarises who the identified leads on a website are, over a date range (default the last 30 days): top 10 industries, all company-size ranges, top 10 job titles and top 5 countries, each with a count. Empty lists mean no data in the range. For leads per day use get_website_daily_stats; for the leads themselves use get_leads. websiteId comes from list_websites.
| Connection | Account URL, team member URL or OAuth |
| --- | --- |
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `websiteId` | `string` | Yes | any | Website ID from list_websites. |
| `dateFrom` | `string` | No | any | Start date, e.g. 2026-10-01 (ISO), 10/01/2026 or epoch milliseconds. Only used when dateTo is also given; otherwise the last 30 days. |
| `dateTo` | `string` | No | any | End date (inclusive), same formats as dateFrom. Only used together with dateFrom. |
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "get_website_analytics",
"title": "Get website audience breakdown",
"annotations": {
"title": "Get website audience breakdown",
"readOnlyHint": true,
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false
},
"inputSchema": {
"type": "object",
"properties": {
"websiteId": {
"type": "string",
"description": "Website ID from list_websites."
},
"dateFrom": {
"type": "string",
"description": "Start date, e.g. 2026-10-01 (ISO), 10/01/2026 or epoch milliseconds. Only used when dateTo is also given; otherwise the last 30 days."
},
"dateTo": {
"type": "string",
"description": "End date (inclusive), same formats as dateFrom. Only used together with dateFrom."
}
},
"required": [
"websiteId"
]
}
}
```
# get_website_credit_history (/docs/mcp/tools/get-website-credit-history)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/get_website_credit_history.mdx. */}
**Get website credit history** · Read-only
Returns the credit snapshots stored for one website: each entry has creditsLimit, creditsRemaining, creditsUsed, refreshOn and timestamps. Returns \{ history: [...] \}, newest first, the full list (no paging). Use it for a website that has its own credit allowance. For individual credit charges and refunds use get_credit_history. websiteId comes from list_websites.
| Connection | Account URL, team member URL or OAuth |
| --- | --- |
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `websiteId` | `string` | Yes | any | Website ID from list_websites (24-character ID). |
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "get_website_credit_history",
"title": "Get website credit history",
"annotations": {
"title": "Get website credit history",
"readOnlyHint": true,
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false
},
"inputSchema": {
"type": "object",
"properties": {
"websiteId": {
"type": "string",
"description": "Website ID from list_websites (24-character ID)."
}
},
"required": [
"websiteId"
]
}
}
```
# get_website_daily_stats (/docs/mcp/tools/get-website-daily-stats)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/get_website_daily_stats.mdx. */}
**Get daily lead counts** · Read-only
Returns one row per day for a website (default the last 30 days, every day included even with 0): date (YYYY-MM-DD, UTC), leadsIdentified, avgIcpScore and leadsWithIcpScore. Each lead is counted on the day of its most recent visit, so a returning lead moves to its latest day. leadsProspected, emailsSent and emailsScheduled are always 0 here. For the audience breakdown use get_website_analytics. websiteId comes from list_websites.
| Connection | Account URL, team member URL or OAuth |
| --- | --- |
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `websiteId` | `string` | Yes | any | Website ID from list_websites. |
| `dateFrom` | `string` | No | any | Start date, e.g. 2026-10-01 (ISO), 10/01/2026 or epoch milliseconds. Only used when dateTo is also given; otherwise the last 30 days. |
| `dateTo` | `string` | No | any | End date (inclusive), same formats as dateFrom. Only used together with dateFrom. |
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "get_website_daily_stats",
"title": "Get daily lead counts",
"annotations": {
"title": "Get daily lead counts",
"readOnlyHint": true,
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false
},
"inputSchema": {
"type": "object",
"properties": {
"websiteId": {
"type": "string",
"description": "Website ID from list_websites."
},
"dateFrom": {
"type": "string",
"description": "Start date, e.g. 2026-10-01 (ISO), 10/01/2026 or epoch milliseconds. Only used when dateTo is also given; otherwise the last 30 days."
},
"dateTo": {
"type": "string",
"description": "End date (inclusive), same formats as dateFrom. Only used together with dateFrom."
}
},
"required": [
"websiteId"
]
}
}
```
# get_website_diagnostics (/docs/mcp/tools/get-website-diagnostics)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/get_website_diagnostics.mdx. */}
**Diagnose website** · Read-only
Checks why a website may not be producing leads. Returns processing.isBlocked and shouldExpectLeads, credits (account, website and effective credits, and whether the website has its own allowance), recentActivity (leadsLast48Hours, lastLeadCreatedAt, hasNeverGeneratedLeads) and messages.primary, a one-line status that names the block reason (e.g. trial expired, credits exhausted, account paused). Use it for 'no leads' questions; to check the snippet is installed use verify_website. websiteId comes from list_websites.
| Connection | Account URL, team member URL or OAuth |
| --- | --- |
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `websiteId` | `string` | Yes | any | Website ID from list_websites. |
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "get_website_diagnostics",
"title": "Diagnose website",
"annotations": {
"title": "Diagnose website",
"readOnlyHint": true,
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false
},
"inputSchema": {
"type": "object",
"properties": {
"websiteId": {
"type": "string",
"description": "Website ID from list_websites."
}
},
"required": [
"websiteId"
]
}
}
```
## Used in [#used-in]
- [/docs/websites/tracking-pixel](/docs/websites/tracking-pixel)
- [/docs/websites/tracking-pixel/mcp](/docs/websites/tracking-pixel/mcp)
# get_website (/docs/mcp/tools/get-website)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/get_website.mdx. */}
**Get website** · Read-only
Returns one website's details: name, url, domain, clientId, trackingScript (the install snippet), status (unverified, verified, removed or failed), lastVerifiedAt, tracking settings (identifySettings, trackExactVisitors, trackCompanyWithSuggestedContacts, trackPersonalEmails, session recording, email digest), credit limits and remaining, trial dates, tags, intent-topic state, integrations and members. websiteId comes from list_websites. If the ID is unknown the result says 'No website found'. For just the snippet use get_tracking_pixel.
| Connection | Account URL, team member URL or OAuth |
| --- | --- |
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `websiteId` | `string` | Yes | any | Website ID from list_websites (24-character ID). |
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "get_website",
"title": "Get website",
"annotations": {
"title": "Get website",
"readOnlyHint": true,
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false
},
"inputSchema": {
"type": "object",
"properties": {
"websiteId": {
"type": "string",
"description": "Website ID from list_websites (24-character ID)."
}
},
"required": [
"websiteId"
]
}
}
```
# hide_lead (/docs/mcp/tools/hide-lead)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/hide_lead.mdx. */}
**Hide or unhide a lead** · Changes data
Hide a lead from the leads list (hide=true, the default) or bring a hidden lead back (hide=false). Hidden leads no longer appear in get_leads. Hiding is reversible and keeps the lead's data; it does not give back the credit the lead used. To remove a lead for good use delete_lead. leadId comes from get_leads. Returns status 'Successful'; hiding an already hidden lead returns an error 'Lead is already hidden.'
| Connection | Account URL, team member URL or OAuth |
| --- | --- |
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `leadId` | `string` | Yes | any | Lead id (the _id of a row returned by get_leads). |
| `hide` | `boolean` | No | any | true (default) hides the lead; false makes a hidden lead visible again. |
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "hide_lead",
"title": "Hide or unhide a lead",
"annotations": {
"title": "Hide or unhide a lead",
"readOnlyHint": false,
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false
},
"inputSchema": {
"type": "object",
"properties": {
"leadId": {
"type": "string",
"description": "Lead id (the _id of a row returned by get_leads)."
},
"hide": {
"type": "boolean",
"description": "true (default) hides the lead; false makes a hidden lead visible again."
}
},
"required": [
"leadId"
]
}
}
```
# All tools (/docs/mcp/tools)
{/* Generated by scripts/sync-mcp-tools.mjs. Do not edit. */}
Your assistant sees these automatically and picks the right one for your request; you never call them by name. **232 tools**: 100 read-only, 101 that change data, 31 that delete or overwrite data, 44 that act outside your account (send email, push to a CRM, charge a card) and 13 that can spend credits or money.
## Account & billing [#account--billing]
| Tool | What it does | |
| --- | --- | --- |
| [`get_account`](/docs/mcp/tools/get-account) | Shows the signed-in account: plan, credit limits and remaining credits, refresh and trial dates, add-ons, features, settings, pause status, failed-payment flag and the account's websites (the first 11 only). | Read-only |
| [`update_account_tracking_settings`](/docs/mcp/tools/update-account-tracking-settings) | Turns tracking options on or off for every website of the account at once: identify people, suggested contacts, personal emails, session recordings. | Changes data |
| [`get_credit_summary`](/docs/mcp/tools/get-credit-summary) | Credits used in a billing cycle, by source (website visitors, Prospector, AI Scout, Web Scraping…) and by day (byDay: charges, refunds and duplicates prevented per date, UTC), with the plan limit, what is left and leads bought. | Read-only |
| [`list_billing_domains`](/docs/mcp/tools/list-billing-domains) | The account's sending domains with their billing: price and renewalPrice (USD a year), expiresAt (renewal date), autoRenew and cancelAtPeriodEnd, setupCompleted and activeDate. | Read-only |
| [`list_open_invoices`](/docs/mcp/tools/list-open-invoices) | The account invoices that are still unpaid (open or past due): amount, currency, due date, what it is for, the payment status, the PDF link and hosted (the page where it can be paid); at most 5, newest first; plus the next upcoming invoice (amount and the date the period ends), or null on a cancelled or lifetime plan. | Read-only |
| [`list_invoices`](/docs/mcp/tools/list-invoices) | The account's invoices, newest first: date, amount, refunded amount, currency, status (paid, open, void, uncollectible, refunded, partially_refunded), description (what it was for), a link to the PDF and hosted (the invoice's web page, where an open one can be paid). | Read-only |
| [`get_auto_topup`](/docs/mcp/tools/get-auto-topup) | Whether auto top-up is on: when credits run out, a pack of leads is bought automatically at your plan's price per lead, up to a monthly cap in USD. | Read-only |
| [`set_auto_topup`](/docs/mcp/tools/set-auto-topup) | Turns auto top-up on or off and sets the pack of leads bought each time credits run out and the monthly cap in USD. | Changes data |
| [`get_billing`](/docs/mcp/tools/get-billing) | Returns the same subscription summary as get_subscription: plan, leads per month, credits used and remaining, top-up credits, price, billing interval, next billing date, whether it is set to cancel or is paused, pending downgrade and any running retention discount. | Read-only |
| [`get_pricing`](/docs/mcp/tools/get-pricing) | Returns the account's prices for outreach mailboxes and sending domains: mailboxPricePerMonthUSD (and the yearly equivalent), whether custom or default pricing applies, the defaults, and the outreach starter-kit state (available now, or earned on upgrade). | Read-only |
| [`get_credit_history`](/docs/mcp/tools/get-credit-history) | Lists the account's credit transactions from the last 90 days, newest first: each row has operation (CHARGE, REFUND or DUPLICATE_PREVENTED), amount, credits before/after, the website, the lead's domain/email, a source category (WEBSITE_VISITOR, INTENT_SIGNALS, WEB_SCRAPING, PROSPECTOR, ENRICHMENT, EMAIL_VERIFICATION, CONTACT_UNLOCK, ADJUSTMENT, OTHER), a reason and createdAt. | Read-only |
| [`get_website_credit_history`](/docs/mcp/tools/get-website-credit-history) | Returns the credit snapshots stored for one website: each entry has creditsLimit, creditsRemaining, creditsUsed, refreshOn and timestamps. | Read-only |
| [`get_subscription`](/docs/mcp/tools/get-subscription) | Shows the current subscription: plan, tierName, leads per month, usedCredits, remaining, topUpCredits, refreshOn, price (monthly equivalent, USD), annualTotal, interval ('month' or 'year'), nextBillingDate, cancelAtPeriodEnd, subscriptionStatus, isPausedByUser/pausedUntil, pendingDowngrade, retentionDiscount and add-ons. | Read-only |
| [`preview_plan_change`](/docs/mcp/tools/preview-plan-change) | Shows what a plan change would cost without changing anything. | Read-only |
| [`upgrade_plan`](/docs/mcp/tools/upgrade-plan) | Moves the subscription to more leads per month right away and charges the card on file today. | Changes data · Credits |
| [`downgrade_plan`](/docs/mcp/tools/downgrade-plan) | Schedules the subscription to change to a new number of leads per month from the next billing date; nothing is charged or refunded now and current credits stay until then. | Changes data |
| [`pause_subscription`](/docs/mcp/tools/pause-subscription) | Pauses the subscription for 1 to 6 months: invoices during the pause are not collected, no new leads come in while paused, and it resumes automatically on pausedUntil. | Deletes or overwrites data |
| [`cancel_subscription`](/docs/mcp/tools/cancel-subscription) | Cancels the subscription at the end of the current billing period (it stays usable until then) and records why. | Deletes or overwrites data |
| [`reactivate_subscription`](/docs/mcp/tools/reactivate-subscription) | Undoes a cancellation that has not taken effect yet, or ends a pause early. | Changes data |
## Free tools [#free-tools]
| Tool | What it does | |
| --- | --- | --- |
| [`free_enrich_company`](/docs/mcp/free-tools/free-enrich-company) | Free on every plan of a signed-in account, also after the trial ends, no credits used. | Read-only |
| [`free_intent_signals`](/docs/mcp/free-tools/free-intent-signals) | Free on every plan of a signed-in account, also after the trial ends, no credits used. | Read-only |
| [`free_find_decision_makers`](/docs/mcp/free-tools/free-find-decision-makers) | Free on every plan of a signed-in account, also after the trial ends, no credits used. | Read-only |
| [`free_companies_using_tech`](/docs/mcp/free-tools/free-companies-using-tech) | Free on every plan of a signed-in account, also after the trial ends, no credits used. | Read-only |
| [`free_find_lookalikes`](/docs/mcp/free-tools/free-find-lookalikes) | Free on every plan of a signed-in account, also after the trial ends, no credits used. | Read-only |
| [`free_people_search`](/docs/mcp/free-tools/free-people-search) | Free on every plan of a signed-in account, also after the trial ends, no credits used. | Read-only |
| [`free_email_pattern`](/docs/mcp/free-tools/free-email-pattern) | Free on every plan of a signed-in account, also after the trial ends, no credits used. | Read-only |
## Team [#team]
| Tool | What it does | |
| --- | --- | --- |
| [`list_members`](/docs/mcp/tools/list-members) | Lists the people on the account as team: userId, name, email, role (Owner or Member), permissions, preset, allWebsites, websites (website ids, empty when allWebsites is true) and whether their invite is still pending (invitePending). | Read-only |
| [`get_permissions_catalog`](/docs/mcp/tools/get-permissions-catalog) | Returns every permission a member can be given and the presets (full, sales, developer, viewer, team, client) with the permissions each one ticks. | Read-only |
| [`invite_members`](/docs/mcp/tools/invite-members) | Invites people to the account; each one gets an invitation email to set a password (emailed: false when invite emails are off, then they copy the join link from the Team page). | Changes data |
| [`update_member`](/docs/mcp/tools/update-member) | Changes a member's role, permissions or websites and returns the member as list_members does. | Changes data |
| [`remove_member`](/docs/mcp/tools/remove-member) | Removes a person from the account: they lose access straight away, their website access is removed and the invitation is given back. | Deletes or overwrites data |
## Prospector [#prospector]
| Tool | What it does | |
| --- | --- | --- |
| [`create_contact`](/docs/mcp/tools/create-contact) | Saves a new person record (name, job title, company domain) and returns it with its _id. | Changes data |
| [`verify_contact`](/docs/mcp/tools/verify-contact) | Checks whether the email of a saved contact is valid and deliverable. | Changes data · Credits |
| [`search_companies`](/docs/mcp/tools/search-companies) | Searches the company database by name or domain keyword, industry, HQ country, headcount, revenue and technologies. | Read-only |
| [`search_people`](/docs/mcp/tools/search-people) | Searches the 209M-contact people database by job title, company, company HQ country, seniority, department, industry, technology and company size. | Read-only |
| [`reveal_contact`](/docs/mcp/tools/reveal-contact) | Returns the email address and phone number held for one person from search_people. | Changes data · Credits |
| [`find_contact_email`](/docs/mcp/tools/find-contact-email) | Looks for a business email for one search_people contact by trying likely address patterns at their company and verifying each one. | Changes data · Credits |
| [`list_auto_searches`](/docs/mcp/tools/list-auto-searches) | Lists the Auto Searches of one website: name, status (running or paused), preferences, people per day, leads delivered today and in total, the matching pool and the last run. | Read-only |
| [`build_auto_search_profile`](/docs/mcp/tools/build-auto-search-profile) | Turns a plain-English description of the ideal customer ("founders of US SaaS companies with 10-200 staff") into Auto Search preferences: field, values and weight (Must, High, Prefer or Bonus). | Read-only |
| [`create_auto_search`](/docs/mcp/tools/create-auto-search) | Creates an Auto Search and starts it: every day new people matching the preferences are verified and added to the website's leads, 1 credit per lead delivered, up to perDay a day, until it is paused. | Changes data · Credits |
| [`pause_auto_search`](/docs/mcp/tools/pause-auto-search) | Pauses one Auto Search: no more leads are delivered and no more credits are used until it is resumed. | Changes data |
| [`resume_auto_search`](/docs/mcp/tools/resume-auto-search) | Resumes a paused Auto Search: deliveries start again today, 1 credit per lead delivered. | Changes data · Credits |
| [`get_icp`](/docs/mcp/tools/get-icp) | Returns the ideal customer profile (ICP) saved for a website: the companies the user wants to reach. | Read-only |
| [`update_icp`](/docs/mcp/tools/update-icp) | Changes a website's ideal customer profile: target industries, sectors, HQ locations, headcount and revenue ranges. | Changes data |
## Qualify (lead scoring) [#qualify-lead-scoring]
| Tool | What it does | |
| --- | --- | --- |
| [`recalculate_lead_scores`](/docs/mcp/tools/recalculate-lead-scores) | Re-run lead scoring for specific leads against the website's current scoring models, and answer any AI qualification questions those leads do not have an answer for yet. | Changes data |
| [`list_lead_scoring_models`](/docs/mcp/tools/list-lead-scoring-models) | List a website's lead scoring models (Qualify): the rules that score each lead on company, people and behaviour criteria and mark it warm or hot. | Read-only |
| [`create_lead_scoring_model`](/docs/mcp/tools/create-lead-scoring-model) | Create a lead scoring model on a website, with its rules: criteria (same shape as get_lead_scoring_model / update_lead_scoring_model), active and aiMatching are saved with it. | Changes data |
| [`ai_generate_scoring_model`](/docs/mcp/tools/ai-generate-scoring-model) | Have AI build a lead scoring model from the website's own pages (it reads the site to infer the ideal customer) and save it as 'ICP Score - AI Generated'. | Changes data |
| [`get_lead_scoring_model`](/docs/mcp/tools/get-lead-scoring-model) | Get one lead scoring model with all its rules. | Read-only |
| [`update_lead_scoring_model`](/docs/mcp/tools/update-lead-scoring-model) | Change a lead scoring model's name, on/off state and/or rules. | Deletes or overwrites data |
| [`delete_lead_scoring_model`](/docs/mcp/tools/delete-lead-scoring-model) | Permanently delete a lead scoring model and remove its score from every lead of the website. | Deletes or overwrites data |
## Automations & CRM [#automations--crm]
| Tool | What it does | |
| --- | --- | --- |
| [`get_lead_automation_history`](/docs/mcp/tools/get-lead-automation-history) | List every automation run recorded for one lead, newest first, as automationLogs[] with status, message (the result or error text), automation (the automation id, see list_automations) and executedAt. | Read-only |
| [`retrigger_automations`](/docs/mcp/tools/retrigger-automations) | Runs a website's automations again for a list of leads, for example after a CRM or Slack connection was fixed. | Changes data |
| [`list_crm_variables`](/docs/mcp/tools/list-crm-variables) | The lead and company fields (name, email, job title, company size, pages visited, score…) that can be mapped to fields in your CRM. | Read-only |
| [`get_crm_mappings`](/docs/mcp/tools/get-crm-mappings) | The field mappings used when leads are pushed to a CRM: which lead field fills which CRM field, for contacts and companies. | Read-only |
| [`set_crm_mappings`](/docs/mcp/tools/set-crm-mappings) | Sets the field mappings for contacts or companies pushed to a CRM. | Deletes or overwrites data |
| [`get_slack_message_template`](/docs/mcp/tools/get-slack-message-template) | The template of the message posted to Slack for each lead: template (null = the default is used), defaultTemplate and mergeFields (every field a template may use). | Read-only |
| [`set_slack_message_template`](/docs/mcp/tools/set-slack-message-template) | Changes the template of the message posted to Slack for each lead (Slack formatting: *bold*, _italic_). | Changes data |
| [`send_slack_test_message`](/docs/mcp/tools/send-slack-test-message) | Posts a sample lead message (marked [Test Notification]) to a Slack channel so you can see how it looks. | Changes data |
| [`test_webhook`](/docs/mcp/tools/test-webhook) | Sends a sample lead, as automations send them, to a URL so you can check your endpoint receives and parses it. | Changes data |
| [`preview_automation_filter`](/docs/mcp/tools/preview-automation-filter) | Counts the leads of the last days (days, default 7, at most 90) that match a saved filter, before you use it in an automation. | Read-only |
| [`get_automation_stats`](/docs/mcp/tools/get-automation-stats) | Last 7 days (UTC) for every automation of a website, keyed by automation id, each with its name and isActive: runs7d (leads it ran on), delivered7d (sent), failed7d (failed attempts), failedLeads7d (leads whose latest attempt still failed; retries that worked drop out), lastRunAt (last run within 90 days) and series (one row per day). | Read-only |
| [`get_automation_runs`](/docs/mcp/tools/get-automation-runs) | The runs of one automation, newest first: which lead each run handled, when, and whether it succeeded (and why not). | Read-only |
| [`list_slack_channels`](/docs/mcp/tools/list-slack-channels) | The channels of the Slack workspace connected to this website (archived ones left out), to pick one for a Slack automation: id, name, isPrivate, isMember (the app is in it) and members. | Read-only |
| [`list_automations`](/docs/mcp/tools/list-automations) | Lists a website's automations: rules that act when a lead matches, for example sending to Slack, a CRM, a webhook, Zapier, an email or LinkedIn campaign, or an email alert. | Read-only |
| [`create_automation`](/docs/mcp/tools/create-automation) | Creates an automation that is active straight away and runs whenever a lead matches it. | Changes data |
| [`get_automation`](/docs/mcp/tools/get-automation) | Returns the full setup of one automation: name, isActive, when (trigger event), then (action), trigger, interval, frequency settings (repeatWindowHours, dedupeScope), contact selection, email verification rules, filter and the action settings, plus draft (true = unfinished, never runs) and errorMessage (why the last run failed, null when fine). | Read-only |
| [`update_automation`](/docs/mcp/tools/update-automation) | Changes an existing automation: its name, rule, action settings or on/off state. | Changes data |
| [`delete_automation`](/docs/mcp/tools/delete-automation) | Deletes an automation permanently, so it no longer acts on any lead. | Deletes or overwrites data |
| [`toggle_automation`](/docs/mcp/tools/toggle-automation) | Switches an automation on or off without changing its setup. | Changes data |
| [`rerun_automation_for_lead`](/docs/mcp/tools/rerun-automation-for-lead) | Runs one type of automation again for a single lead right now and reports the outcome. | Changes data |
| [`push_lead_to_crm`](/docs/mcp/tools/push-lead-to-crm) | Creates a contact in the website's connected CRM: HubSpot, Pipedrive, Salesforce, Zoho or GoHighLevel. | Changes data |
| [`list_crm_owners`](/docs/mcp/tools/list-crm-owners) | Lists the users in a connected CRM that a contact can be assigned to. | Read-only |
| [`list_crm_pipelines`](/docs/mcp/tools/list-crm-pipelines) | Lists the deal pipelines of a connected CRM and the stages in each. | Read-only |
## Intent data [#intent-data]
| Tool | What it does | |
| --- | --- | --- |
| [`get_intent_topics_catalog`](/docs/mcp/tools/get-intent-topics-catalog) | Lists every third-party intent topic you can subscribe to, e.g. | Read-only |
| [`list_intent_topics`](/docs/mcp/tools/list-intent-topics) | Lists the intent topics a website is subscribed to, with delivery numbers. | Read-only |
| [`subscribe_to_intent_topic`](/docs/mcp/tools/subscribe-to-intent-topic) | Subscribes a website to an intent topic, so companies researching that topic start arriving as leads each day, up to the daily limit. | Changes data · Credits |
| [`update_intent_topic`](/docs/mcp/tools/update-intent-topic) | Pauses or resumes an intent topic subscription, or changes its daily lead limit. | Changes data |
| [`delete_intent_topic`](/docs/mcp/tools/delete-intent-topic) | Unsubscribes a website from an intent topic and deletes the subscription, including its delivery counters. | Deletes or overwrites data |
## Campaigns & inbox [#campaigns--inbox]
| Tool | What it does | |
| --- | --- | --- |
| [`list_email_blacklist`](/docs/mcp/tools/list-email-blacklist) | Lists the email addresses campaigns on this website never send to, grouped by the name they were added under. | Read-only |
| [`add_to_email_blacklist`](/docs/mcp/tools/add-to-email-blacklist) | Adds email addresses that campaigns on this website must never send to, e.g. | Changes data |
| [`remove_from_email_blacklist`](/docs/mcp/tools/remove-from-email-blacklist) | Removes every address added under one group name; campaigns can email them again. | Deletes or overwrites data |
| [`update_campaign`](/docs/mcp/tools/update-campaign) | Renames a campaign, starts it (status active: emails start going out to its contacts) or pauses it, or changes its sending days (0 Sunday to 6 Saturday), hours (timeSlot start and end, 0-24), timezone or open/click tracking. | Changes data |
| [`clone_campaign`](/docs/mcp/tools/clone-campaign) | Copies a campaign with its steps and settings, named '\ (copy)'. | Changes data |
| [`get_campaign_stats`](/docs/mcp/tools/get-campaign-stats) | Returns how a campaign is doing: emails sent, opened, clicked, replied, bounced and unsubscribed, with rates. | Read-only |
| [`get_campaign_capacity`](/docs/mcp/tools/get-campaign-capacity) | Returns the campaign's health: connected mailboxes and their daily limits, how many emails it can send a day, and what is holding it back (e.g. | Read-only |
| [`add_campaign_step`](/docs/mcp/tools/add-campaign-step) | Adds one email at the end of a campaign's sequence, sent delayDays after the previous one (the first step of an empty campaign becomes the opening email). | Changes data |
| [`delete_campaign_step`](/docs/mcp/tools/delete-campaign-step) | Removes one email from a campaign's sequence for good. | Deletes or overwrites data |
| [`reorder_campaign_steps`](/docs/mcp/tools/reorder-campaign-steps) | Puts a campaign's emails in a new order. | Changes data |
| [`resume_prospects`](/docs/mcp/tools/resume-prospects) | Resumes paused prospects so their emails are sent again from their next scheduled step. | Changes data |
| [`send_prospects_now`](/docs/mcp/tools/send-prospects-now) | Sends the next email of their sequence to the given prospects right away instead of at their scheduled time, within the mailbox limits. | Changes data |
| [`change_prospects_mailbox`](/docs/mcp/tools/change-prospects-mailbox) | Moves prospects to another mailbox: their next emails are sent from it. | Changes data |
| [`reschedule_prospects`](/docs/mcp/tools/reschedule-prospects) | Recalculates when the next email of each prospect goes out, spread over the coming days within the mailbox limits, e.g. | Changes data |
| [`generate_campaign_emails_ai`](/docs/mcp/tools/generate-campaign-emails-ai) | Writes a sequence of emails for a campaign with AI, from your website, offer and ideal customer, and saves them as the campaign steps. | Changes data |
| [`list_linkedin_keywords`](/docs/mcp/tools/list-linkedin-keywords) | The keywords watched on LinkedIn (LinkedIn Fans): people who post or comment about them become leads. | Read-only |
| [`add_linkedin_keyword`](/docs/mcp/tools/add-linkedin-keyword) | Starts watching a keyword on LinkedIn: people who post or comment about it become leads. | Changes data |
| [`set_linkedin_keyword_status`](/docs/mcp/tools/set-linkedin-keyword-status) | Pauses or resumes watching one LinkedIn keyword. | Changes data |
| [`delete_linkedin_keyword`](/docs/mcp/tools/delete-linkedin-keyword) | Stops watching a LinkedIn keyword for good and removes it from the list. | Deletes or overwrites data |
| [`list_linkedin_tracked_posts`](/docs/mcp/tools/list-linkedin-tracked-posts) | The LinkedIn posts being tracked: people who react to or comment on them become leads. | Read-only |
| [`add_linkedin_tracked_post`](/docs/mcp/tools/add-linkedin-tracked-post) | Starts tracking a LinkedIn post (yours or someone else’s): people who react to or comment on it become leads. | Changes data |
| [`update_linkedin_account`](/docs/mcp/tools/update-linkedin-account) | Changes the label of a connected LinkedIn account, or pauses and resumes it (paused: its campaigns send nothing). | Changes data |
| [`list_google_ads_audiences`](/docs/mcp/tools/list-google-ads-audiences) | The Google Ads retargeting audiences of a website: name, linked Google campaign, contacts uploaded and match stats. | Read-only |
| [`get_google_ads_audience`](/docs/mcp/tools/get-google-ads-audience) | One retargeting audience: settings, contacts uploaded, match rate and the stats of its Google campaign. | Read-only |
| [`sync_google_ads_audience_stats`](/docs/mcp/tools/sync-google-ads-audience-stats) | Fetches the latest impressions, clicks and conversions of an audience’s campaign from Google Ads. | Changes data |
| [`dismiss_campaign_capacity_warning`](/docs/mcp/tools/dismiss-campaign-capacity-warning) | Hides a campaign's capacity warning (more contacts than its mailboxes can send to in time) for some days. | Changes data |
| [`spam_check_email`](/docs/mcp/tools/spam-check-email) | Checks an email subject and body for words and patterns that send mail to spam, and returns a score with each issue and how to fix it. | Read-only |
| [`get_linkedin_campaign`](/docs/mcp/tools/get-linkedin-campaign) | One LinkedIn campaign of this website: its settings and the people in it with their status (invited, connected, messaged, replied), optionally one status, page by page. | Read-only |
| [`get_linkedin_campaign_timeline`](/docs/mcp/tools/get-linkedin-campaign-timeline) | What a LinkedIn campaign did day by day over the last days: invitations sent, accepted, messages sent and replies. | Read-only |
| [`activate_linkedin_campaign`](/docs/mcp/tools/activate-linkedin-campaign) | Starts a LinkedIn campaign: it begins sending invitations and messages from the connected LinkedIn account, within the account's daily LinkedIn limits. | Changes data |
| [`pause_linkedin_campaign`](/docs/mcp/tools/pause-linkedin-campaign) | Pauses a running LinkedIn campaign: nothing more is sent until it is resumed. | Changes data |
| [`resume_linkedin_campaign`](/docs/mcp/tools/resume-linkedin-campaign) | Resumes a paused LinkedIn campaign: it continues sending invitations and messages where it stopped. | Changes data |
| [`delete_linkedin_campaign`](/docs/mcp/tools/delete-linkedin-campaign) | Deletes a LinkedIn campaign and stops everything it would still send. | Deletes or overwrites data |
| [`get_email_template`](/docs/mcp/tools/get-email-template) | Returns one email (step) of a campaign in full: subject and body templates with their merge fields, the sender, the delay before it is sent and its position in the sequence. | Read-only |
| [`get_prospects`](/docs/mcp/tools/get-prospects) | List the contacts (prospects) already added to email campaigns on a website, newest first. | Read-only |
| [`list_campaigns`](/docs/mcp/tools/list-campaigns) | List the email campaigns of one website, newest first, with their status (isActive), schedule, steps (emailCampaignTemplates), health and a cached stats snapshot (statsRollup: contacted, sent, opens, clicks, replies, bounces and rates, refreshed about every 5 minutes; see computedAt). | Read-only |
| [`create_campaign`](/docs/mcp/tools/create-campaign) | Create a new email sequence: the campaign plus one email per entry in steps (the first is the initial email, the rest follow-ups). | Changes data |
| [`update_campaign_step`](/docs/mcp/tools/update-campaign-step) | Rewrite one email (step) of an existing campaign: its subject, body and/or delay. | Changes data |
| [`get_campaign`](/docs/mcp/tools/get-campaign) | Get one email campaign with live analytics: settings (isActive, schedule, timezone), its steps in emailCampaignTemplates[] (each with _id = templateId for update_campaign_step, subject, body and per-step stats), stats (prospect total, scheduledCount, uniqueContacted, totalEmailsSent, opens, clicks, replies, warm replies, bounced, unsubscribed and their rates), steps[] (per-step sent/opened/clicked/replied), statusBuckets (prospect counts per status) and statistics (sent vs scheduled over time). | Read-only |
| [`add_prospect_to_campaign`](/docs/mcp/tools/add-prospect-to-campaign) | Add one contact to an existing email campaign so it receives the sequence, like Manual Entry in the app. | Changes data |
| [`remove_prospect_from_campaign`](/docs/mcp/tools/remove-prospect-from-campaign) | Delete a prospect from its campaign, like "Remove from campaign" in the app: the prospect and its scheduled emails are deleted, emails already sent stay sent, and its history is gone. | Deletes or overwrites data |
| [`stop_prospect`](/docs/mcp/tools/stop-prospect) | Stop one prospect's email sequence: no further steps are sent and the prospect is marked manually-paused, keeping it and its history in the campaign. | Deletes or overwrites data |
| [`list_linkedin_accounts`](/docs/mcp/tools/list-linkedin-accounts) | List the LinkedIn accounts connected to a website through the browser extension, newest first. | Read-only |
| [`list_linkedin_campaigns`](/docs/mcp/tools/list-linkedin-campaigns) | List the LinkedIn connection-request campaigns of a website, newest first, with each campaign's status (draft, active, paused, completed), stats and progress (\{ pct, terminalCount, total \}). | Read-only |
| [`get_inbox_emails`](/docs/mcp/tools/get-inbox-emails) | List prospects from the outreach master inbox of a website across all campaigns, most recent activity first. | Read-only |
| [`get_email_thread`](/docs/mcp/tools/get-email-thread) | Read one outreach email conversation: the email that was sent (subject, send time, opens) and every reply under it, incoming and outgoing. | Read-only |
| [`reply_to_prospect`](/docs/mcp/tools/reply-to-prospect) | Send a reply email to a prospect in an existing outreach conversation. | Changes data |
| [`archive_email`](/docs/mcp/tools/archive-email) | Archive one email conversation in the outreach master inbox so it leaves the inbox view; it stays visible with get_inbox_emails status archived. | Changes data |
| [`delete_campaign`](/docs/mcp/tools/delete-campaign) | Permanently delete an email campaign together with all its steps and every prospect in it; scheduled emails are never sent and the history is lost. | Deletes or overwrites data |
## Mailboxes & domains [#mailboxes--domains]
| Tool | What it does | |
| --- | --- | --- |
| [`list_email_providers`](/docs/mcp/tools/list-email-providers) | Returns the SMTP and IMAP host, port and TLS settings of common providers (Gmail, Outlook, Zoho…). | Read-only |
| [`test_email_account`](/docs/mcp/tools/test-email-account) | Connects to the SMTP and IMAP servers with these settings and says whether sending and reading work, without saving anything. | Read-only |
| [`update_warmup_settings`](/docs/mcp/tools/update-warmup-settings) | Changes how hard a mailbox warms up: intensity conservative, normal or aggressive, and the most warmup emails a day (5-100). | Changes data |
| [`get_warmup_health`](/docs/mcp/tools/get-warmup-health) | Returns one mailbox's warmup health: reputation, inbox vs spam placement and what to fix. | Read-only |
| [`verify_tracking_domain`](/docs/mcp/tools/verify-tracking-domain) | Checks that a mailbox's custom tracking domain has its CNAME record set, so open and click tracking links use your own domain. | Changes data |
| [`list_domains`](/docs/mcp/tools/list-domains) | The domains bought or imported for sending, with their mailboxes, DNS state, expiry date and auto-renew. | Read-only |
| [`set_domain_auto_renew`](/docs/mcp/tools/set-domain-auto-renew) | Turns automatic yearly renewal of a sending domain on or off. | Changes data |
| [`rename_email_account`](/docs/mcp/tools/rename-email-account) | Changes the sender name a mailbox shows, and for mailboxes on our servers the part of the address before the @. | Changes data |
| [`reconnect_email_account`](/docs/mcp/tools/reconnect-email-account) | Tries the saved SMTP and IMAP settings of a disconnected mailbox again; when they work, the mailbox is connected and its paused prospects continue. | Changes data |
| [`unmark_email_account_spam`](/docs/mcp/tools/unmark-email-account-spam) | Clears the flag set when a mailbox looked like it was going to spam, so it sends again. | Changes data |
| [`remove_tracking_domain`](/docs/mcp/tools/remove-tracking-domain) | Stops using the custom open and click tracking domain of a mailbox; tracking falls back to the shared domain. | Deletes or overwrites data |
| [`get_email_account`](/docs/mcp/tools/get-email-account) | One mailbox in full: address, sender name and signature, daily sending limit, warmup state and health, and whether it is connected. | Read-only |
| [`update_email_account`](/docs/mcp/tools/update-email-account) | Changes a mailbox: the daily sending limit (queued emails are rescheduled to match), the sender name, company, position, phone and the HTML signature. | Changes data |
| [`list_email_accounts`](/docs/mcp/tools/list-email-accounts) | List the mailboxes connected to a website for sending outreach, with their health and warmup state. | Read-only |
| [`add_email_account`](/docs/mcp/tools/add-email-account) | Connect an existing mailbox to a website for sending outreach, using its SMTP (sending) and IMAP (reading replies) settings. | Changes data |
| [`get_email_account_stats`](/docs/mcp/tools/get-email-account-stats) | Get the sending load of every mailbox on a website: how many campaign emails are scheduled on it and how full its next 30 days are. | Read-only |
| [`delete_email_account`](/docs/mcp/tools/delete-email-account) | Remove a connected mailbox from the account. | Deletes or overwrites data |
| [`toggle_warmup`](/docs/mcp/tools/toggle-warmup) | Turn email warmup on or off for one mailbox. | Changes data |
| [`get_warmup_stats`](/docs/mcp/tools/get-warmup-stats) | Get warmup statistics for all mailboxes on a website: totals (mailboxes, warmup on, connected, warmup emails sent and received) and per mailbox the daily volume, inbox placement and reputation. | Read-only |
| [`run_deliverability_check`](/docs/mcp/tools/run-deliverability-check) | Run the deliverability check for one mailbox: SPF, DKIM and DMARC of its domain, its custom tracking domain and an IP blacklist score. | Changes data |
| [`get_domain_suggestions`](/docs/mcp/tools/get-domain-suggestions) | Suggest look-alike domain names for cold outreach, built from the website's own domain and keeping its ending (e.g. | Read-only |
| [`search_domain_availability`](/docs/mcp/tools/search-domain-availability) | Check whether a domain can be registered for outreach and what it costs. | Read-only |
| [`add_outreach_domain`](/docs/mcp/tools/add-outreach-domain) | Add an available domain to a website's picked list (the purchase cart). | Changes data |
| [`remove_outreach_domain`](/docs/mcp/tools/remove-outreach-domain) | Remove a domain from a website's picked list (purchase cart) before it is bought. | Changes data |
| [`purchase_outreach_domains`](/docs/mcp/tools/purchase-outreach-domains) | Buy every domain in the website's picked list (added with add_outreach_domain) and set each one up for outreach: registration, DNS, SPF/DKIM/DMARC, a mailbox and warmup. | Deletes or overwrites data · Credits |
| [`get_domain_setup_status`](/docs/mcp/tools/get-domain-setup-status) | Check the setup progress of the outreach domains bought for a website (unpaid picks are not shown). | Read-only |
| [`list_outreach_domains`](/docs/mcp/tools/list-outreach-domains) | List every outreach domain of a website, picked or bought, with its status, setup progress, mailboxes and expiry. | Read-only |
## AI Scout [#ai-scout]
| Tool | What it does | |
| --- | --- | --- |
| [`list_ai_scouts`](/docs/mcp/tools/list-ai-scouts) | Lists the AI Scouts of one website: name, description, status (running or paused), people per day, minimum fit, the sources it reads (readsFrom) and how many people each delivered, plus the website's daily AI Scout limit. | Read-only |
| [`get_ai_scout`](/docs/mcp/tools/get-ai-scout) | One AI Scout with its sources, how many people it found, qualified and delivered, and the latest people it picked with why they fit. | Read-only |
| [`plan_ai_scout`](/docs/mcp/tools/plan-ai-scout) | Turns a description of who to find ("founders of B2B SaaS companies who talk about outbound on podcasts") into a scout name and the sources it would read. | Read-only |
| [`create_ai_scout`](/docs/mcp/tools/create-ai-scout) | Creates an AI Scout and runs it right away. | Changes data · Credits |
| [`update_ai_scout`](/docs/mcp/tools/update-ai-scout) | Changes an AI Scout's name, description, people per day, minimum fit or sources. | Changes data |
| [`pause_ai_scout`](/docs/mcp/tools/pause-ai-scout) | Pauses an AI Scout: no more people are delivered until it is resumed. | Changes data |
| [`resume_ai_scout`](/docs/mcp/tools/resume-ai-scout) | Resumes a paused AI Scout. | Changes data · Credits |
| [`run_ai_scout`](/docs/mcp/tools/run-ai-scout) | Starts a run of an AI Scout now instead of waiting for its daily run. | Changes data · Credits |
| [`delete_ai_scout`](/docs/mcp/tools/delete-ai-scout) | Deletes an AI Scout: it stops for good and is removed from the list. | Deletes or overwrites data |
| [`set_ai_scout_daily_limit`](/docs/mcp/tools/set-ai-scout-daily-limit) | Sets how many AI Scout leads (= credits) the website may receive per day across all its scouts, 1 to 500. | Changes data |
## Web Scraping keywords [#web-scraping-keywords]
| Tool | What it does | |
| --- | --- | --- |
| [`get_web_scraping`](/docs/mcp/tools/get-web-scraping) | Web Scraping looks for your keywords on websites across the open web — in the page text or in the scripts a site loads — and adds the companies that match, with their people, as leads under Leads › Web Scraping. | Read-only |
| [`update_web_scraping`](/docs/mcp/tools/update-web-scraping) | Turns Web Scraping on or off and sets its keywords (exact or fuzzy match, each can be paused), the daily limit (1-500 leads, 1 credit each) and contacts-only (only companies where we found a person). | Changes data · Credits |
| [`suggest_web_scraping_keywords`](/docs/mcp/tools/suggest-web-scraping-keywords) | Keyword ideas for Web Scraping: phrases the website's buyers would write about themselves on their own sites (never the seller's own category words). | Read-only |
## Optimize blog [#optimize-blog]
| Tool | What it does | |
| --- | --- | --- |
| [`list_blog_articles`](/docs/mcp/tools/list-blog-articles) | Lists the articles on a website's hosted blog (Optimize add-on), newest first. | Read-only |
| [`get_blog_article`](/docs/mcp/tools/get-blog-article) | Returns one blog article in full (Optimize add-on): its content blocks, FAQ, every version with its status, the public url and the visits it received. | Read-only |
| [`create_blog_article`](/docs/mcp/tools/create-blog-article) | Publishes a hand-written article on the website's hosted blog at \/\, or saves it as a draft (Optimize add-on). | Changes data |
| [`update_blog_article`](/docs/mcp/tools/update-blog-article) | Edits a blog article by saving a new version at the same URL (Optimize add-on). | Changes data |
| [`clear_blog_cache`](/docs/mcp/tools/clear-blog-cache) | Clears every cached copy of the website's hosted blog (Optimize add-on), so visitors get the latest version on their next page load. | Changes data |
## Websites & tracking [#websites--tracking]
| Tool | What it does | |
| --- | --- | --- |
| [`list_websites`](/docs/mcp/tools/list-websites) | Lists the account's tracked websites, newest first, with _id (the websiteId other tools need), name, url, domain, clientId, status (unverified, verified, removed or failed), trial and credit fields, tags and tracking settings. | Read-only |
| [`add_website`](/docs/mcp/tools/add-website) | Creates a new website on the account and returns only its websiteId. | Changes data |
| [`get_website`](/docs/mcp/tools/get-website) | Returns one website's details: name, url, domain, clientId, trackingScript (the install snippet), status (unverified, verified, removed or failed), lastVerifiedAt, tracking settings (identifySettings, trackExactVisitors, trackCompanyWithSuggestedContacts, trackPersonalEmails, session recording, email digest), credit limits and remaining, trial dates, tags, intent-topic state, integrations and members. | Read-only |
| [`get_tracking_pixel`](/docs/mcp/tools/get-tracking-pixel) | Returns the JavaScript snippet to install on a website so visitors can be identified, plus websiteId, clientId, status and url. | Read-only |
| [`verify_website`](/docs/mcp/tools/verify-website) | Loads the website's home page (from its saved url) and checks whether this website's tracking snippet is in the HTML. | Changes data |
| [`update_website`](/docs/mcp/tools/update-website) | Changes a website's name, url and tracking settings. | Changes data |
| [`delete_website`](/docs/mcp/tools/delete-website) | Deletes a website: tracking stops, it disappears from list_websites and its leads are no longer shown, and its website slot is freed. | Deletes or overwrites data |
| [`get_website_analytics`](/docs/mcp/tools/get-website-analytics) | Summarises who the identified leads on a website are, over a date range (default the last 30 days): top 10 industries, all company-size ranges, top 10 job titles and top 5 countries, each with a count. | Read-only |
| [`get_website_daily_stats`](/docs/mcp/tools/get-website-daily-stats) | Returns one row per day for a website (default the last 30 days, every day included even with 0): date (YYYY-MM-DD, UTC), leadsIdentified, avgIcpScore and leadsWithIcpScore. | Read-only |
| [`get_website_diagnostics`](/docs/mcp/tools/get-website-diagnostics) | Checks why a website may not be producing leads. | Read-only |
| [`set_website_tags`](/docs/mcp/tools/set-website-tags) | Sets the labels of a website, used to group websites (for example by client or market) in the websites list. | Changes data |
| [`set_page_tracking_rules`](/docs/mcp/tools/set-page-tracking-rules) | Sets the page rules of a website. | Deletes or overwrites data |
| [`set_website_limits`](/docs/mcp/tools/set-website-limits) | Sets how many of the account's credits and mailboxes one website may use, for accounts that share them between websites (for example one website per client). | Changes data |
| [`set_website_billing_mode`](/docs/mcp/tools/set-website-billing-mode) | For websites you run for your own clients: start a trial until a date (its leads go to 0 when it ends), switch to paid (the leads refill to the website's limit every month on refreshOn, then the date moves on a month) or stop the monthly refill when a client cancels. | Changes data |
| [`get_country_blacklist`](/docs/mcp/tools/get-country-blacklist) | Returns the countries whose visitors are never identified on this website (two-letter codes such as DE or FR). | Read-only |
| [`set_country_blacklist`](/docs/mcp/tools/set-country-blacklist) | Sets the countries whose visitors are never identified on this website. | Deletes or overwrites data |
| [`search_locations`](/docs/mcp/tools/search-locations) | Looks up location names as the location filters expect them: every country with city data, US states (optionally matching q) or cities matching q (optionally within one country). | Read-only |
| [`get_domain_blacklist`](/docs/mcp/tools/get-domain-blacklist) | Lists the company domains blocked from becoming leads on a website. | Read-only |
| [`add_to_domain_blacklist`](/docs/mcp/tools/add-to-domain-blacklist) | Blocks company domains from becoming new leads on a website (e.g. | Changes data |
| [`remove_from_domain_blacklist`](/docs/mcp/tools/remove-from-domain-blacklist) | Deletes a whole named group of blocked domains from a website, so those companies can become leads again. | Deletes or overwrites data |
## Visitors (leads) [#visitors-leads]
| Tool | What it does | |
| --- | --- | --- |
| [`get_leads`](/docs/mcp/tools/get-leads) | List the identified visitors (leads) of one website whose last visit falls in a date range, newest first: the exact person (exactPerson: name, email, phone, LinkedIn, position), their company, visitor location, pages viewed, visits, UTM data, tags and lead scores. | Read-only |
| [`get_lead`](/docs/mcp/tools/get-lead) | Get one lead's company profile and visit history: company (name, domain, industry, sector, type, founded year, location, employee range, estimated revenue, LinkedIn/Facebook pages), tags, UTM values, pageVisits[] (url, path, timeSpentMs/timeSpentSeconds, visitCount, sorted by time spent) and summary (totalVisits, lastVisit, totalTimeOnSiteMs, referrer), plus CRM record ids when the lead was pushed. | Read-only |
| [`get_lead_ai_summary`](/docs/mcp/tools/get-lead-ai-summary) | Get a short AI-written summary (about 50 words) of what this visitor did on your website, based on their company, country and the pages they viewed, ending with one verdict: 'Ready to Buy', 'Research' or 'Just Browsing'. | Read-only |
| [`tag_lead`](/docs/mcp/tools/tag-lead) | Attach an existing tag to a lead. | Changes data |
| [`remove_tags_from_lead`](/docs/mcp/tools/remove-tags-from-lead) | Remove one tag from a lead. | Changes data |
| [`hide_lead`](/docs/mcp/tools/hide-lead) | Hide a lead from the leads list (hide=true, the default) or bring a hidden lead back (hide=false). | Changes data |
| [`delete_lead`](/docs/mcp/tools/delete-lead) | Permanently delete one or more leads. | Deletes or overwrites data |
| [`export_leads_csv`](/docs/mcp/tools/export-leads-csv) | Queue a CSV export of a website's leads whose last visit falls in the date range. | Changes data |
| [`enrich_domain`](/docs/mcp/tools/enrich-domain) | Look up the people known at a company domain and return them as contacts[] (name, position, email, LinkedIn, isDecisionMaker, plus scores against your scoring models when they have job-title rules). | Changes data · Credits |
| [`list_lists`](/docs/mcp/tools/list-lists) | Lists the contact or company lists of one website with their names and ids. | Read-only |
| [`create_list`](/docs/mcp/tools/create-list) | Creates an empty contact or company list on a website and returns it. | Changes data |
| [`get_list`](/docs/mcp/tools/get-list) | Returns one list with its contacts or companies, page by page. | Read-only |
| [`delete_list`](/docs/mcp/tools/delete-list) | Deletes a list for good. | Deletes or overwrites data |
| [`remove_list_items`](/docs/mcp/tools/remove-list-items) | Removes contacts or companies from a list; they stay in the account. | Deletes or overwrites data |
| [`export_list_csv`](/docs/mcp/tools/export-list-csv) | Builds a CSV of a list and emails the download link to the user. | Changes data |
| [`update_filter`](/docs/mcp/tools/update-filter) | Marks a saved leads filter as a favourite (shown first) or not. | Changes data |
| [`block_domain`](/docs/mcp/tools/block-domain) | Adds a company domain to the website exclusions: its visitors are not identified and use no credits. | Changes data |
| [`block_person`](/docs/mcp/tools/block-person) | Excludes one person (by email, LinkedIn URL or name) from the leads of a website, e.g. | Changes data |
| [`purge_leads_below_bar`](/docs/mcp/tools/purge-leads-below-bar) | Removes the leads already in the table that score below the lead quality bar (get_lead_quality). | Deletes or overwrites data |
| [`undo_lead_purge`](/docs/mcp/tools/undo-lead-purge) | Brings back the leads removed by the last purge_leads_below_bar, with their tags, comments and history as they were. | Changes data |
| [`update_tag`](/docs/mcp/tools/update-tag) | Renames a tag or changes its colour on this website. | Changes data |
| [`delete_tag`](/docs/mcp/tools/delete-tag) | Deletes a tag from this website; it is removed from every lead that had it. | Deletes or overwrites data |
| [`update_lead_notes`](/docs/mcp/tools/update-lead-notes) | Sets the free-form notes on a lead, replacing what was there; an empty string clears them. | Changes data |
| [`get_company_people`](/docs/mcp/tools/get-company-people) | Other people who work at the company of a lead (name, job title, department, seniority, LinkedIn), optionally only one department, to find the right contact when the visitor was not the buyer. | Read-only |
| [`rename_list`](/docs/mcp/tools/rename-list) | Renames a contact or company list of this website. | Changes data |
| [`set_session_recording`](/docs/mcp/tools/set-session-recording) | Turns session recordings on or off for one website. | Changes data |
| [`get_lead_quality`](/docs/mcp/tools/get-lead-quality) | Returns the lead quality settings of a website: the minimum ideal-customer score a lead needs to be kept, the bar per source (website visitors, intent, Web Scraping, Prospector, AI Scout), contacts-only options and the audience focus (B2B, B2C or both). | Read-only |
| [`update_lead_quality`](/docs/mcp/tools/update-lead-quality) | Changes the lead quality settings of a website. | Changes data |
| [`list_tags`](/docs/mcp/tools/list-tags) | List the tags available on a website: the website's own tags plus the built-in default tags. | Read-only |
| [`create_tag`](/docs/mcp/tools/create-tag) | Create a new tag on a website so you can label leads with tag_lead. | Changes data |
| [`list_filters`](/docs/mcp/tools/list-filters) | List the saved lead filters (saved views) of a website. | Read-only |
| [`create_filter`](/docs/mcp/tools/create-filter) | Save a lead filter under a name so it shows as a saved view on the leads page and can be used as an automation segment. | Changes data |
| [`delete_filter`](/docs/mcp/tools/delete-filter) | Delete a saved lead filter. | Deletes or overwrites data |
| [`get_lead_comments`](/docs/mcp/tools/get-lead-comments) | Get the comments (team notes) on a lead. | Read-only |
| [`add_lead_comment`](/docs/mcp/tools/add-lead-comment) | Add a note to a lead, visible to everyone on the account's team, signed with the connected user's name. | Changes data |
| [`update_lead_comment`](/docs/mcp/tools/update-lead-comment) | Replace the text of an existing lead comment. | Deletes or overwrites data |
| [`delete_lead_comment`](/docs/mcp/tools/delete-lead-comment) | Permanently delete a comment from a lead. | Deletes or overwrites data |
| [`get_lead_recordings`](/docs/mcp/tools/get-lead-recordings) | List session recordings (replays of what a visitor did on your website), newest first, up to 100. | Read-only |
| [`get_recording_url`](/docs/mcp/tools/get-recording-url) | Get a signed playback link for one session recording. | Read-only |
# invite_members (/docs/mcp/tools/invite-members)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/invite_members.mdx. */}
**Invite team members** · Changes data · Acts outside your account
Invites people to the account; each one gets an invitation email to set a password (emailed: false when invite emails are off, then they copy the join link from the Team page). Returns the new members under team (userId, preset, websites) for update_member. One invitation is used per person; a batch larger than the invitations left is refused. Members get what their role, preset or permissions allow on the websites given. Returns 405 when everyone listed is already on the account. Confirm the emails and access with the user before calling. Needs the master key.
| Connection | Account-owner URL or OAuth (not a team member URL) |
| --- | --- |
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `invites` | `object[]` | Yes | any | One entry per person to invite. |
| `invites[].email` | `string` | Yes | any | Their email address. An invitation email is sent to it. |
| `invites[].role` | `string` | No | `Owner`, `Member` | Owner (everything, including billing) or Member (what permissions allow). Only an Owner can make another Owner. |
| `invites[].preset` | `string` | No | `full`, `sales`, `developer`, `viewer`, `team`, `client` | Start from a preset of permissions: full, sales, developer, viewer, team or client (see get_permissions_catalog). |
| `invites[].permissions` | `string[]` | No | [21 values](#accepted-values) | Exact permission ids, from get_permissions_catalog. Overrides the preset. |
| `invites[].allWebsites` | `boolean` | No | any | true: access to every current and future website. |
| `invites[].websites` | `string[]` | No | any | Website ids the member can see, when allWebsites is false. |
## Accepted values [#accepted-values]
The exact values these fields take; anything else is refused.
### `invites[].permissions` [#invitespermissions]
`pixel` · `add_website` · `website` · `delete_website` · `integrations` · `leads_view` · `leads_export` · `qualify` · `campaigns` · `buy_mailboxes` · `connect_mailboxes` · `warmup` · `inbox` · `optimize_seo` · `optimize_google_ads` · `optimize_meta_ads` · `optimize_linkedin_ads` · `team` · `api_keys` · `billing` · `whitelabel`
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "invite_members",
"title": "Invite team members",
"annotations": {
"title": "Invite team members",
"readOnlyHint": false,
"destructiveHint": false,
"idempotentHint": false,
"openWorldHint": true
},
"inputSchema": {
"type": "object",
"properties": {
"invites": {
"type": "array",
"items": {
"type": "object",
"properties": {
"email": {
"type": "string",
"description": "Their email address. An invitation email is sent to it."
},
"role": {
"type": "string",
"enum": [
"Owner",
"Member"
],
"description": "Owner (everything, including billing) or Member (what permissions allow). Only an Owner can make another Owner."
},
"preset": {
"type": "string",
"enum": [
"full",
"sales",
"developer",
"viewer",
"team",
"client"
],
"description": "Start from a preset of permissions: full, sales, developer, viewer, team or client (see get_permissions_catalog)."
},
"permissions": {
"type": "array",
"items": {
"type": "string",
"enum": [
"pixel",
"add_website",
"website",
"delete_website",
"integrations",
"leads_view",
"leads_export",
"qualify",
"campaigns",
"buy_mailboxes",
"connect_mailboxes",
"warmup",
"inbox",
"optimize_seo",
"optimize_google_ads",
"optimize_meta_ads",
"optimize_linkedin_ads",
"team",
"api_keys",
"billing",
"whitelabel"
]
},
"description": "Exact permission ids, from get_permissions_catalog. Overrides the preset."
},
"allWebsites": {
"type": "boolean",
"description": "true: access to every current and future website."
},
"websites": {
"type": "array",
"items": {
"type": "string"
},
"description": "Website ids the member can see, when allWebsites is false."
}
},
"required": [
"email"
]
},
"description": "One entry per person to invite."
}
},
"required": [
"invites"
]
}
}
```
# list_ai_scouts (/docs/mcp/tools/list-ai-scouts)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/list_ai_scouts.mdx. */}
**List AI Scouts** · Read-only
Lists the AI Scouts of one website: name, description, status (running or paused), people per day, minimum fit, the sources it reads (readsFrom) and how many people each delivered, plus the website's daily AI Scout limit. Free. Use it to find a scoutId.
| Connection | Account URL, team member URL or OAuth |
| --- | --- |
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `websiteId` | `string` | Yes | any | Website ID from list_websites. |
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "list_ai_scouts",
"title": "List AI Scouts",
"annotations": {
"title": "List AI Scouts",
"readOnlyHint": true,
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false
},
"inputSchema": {
"type": "object",
"properties": {
"websiteId": {
"type": "string",
"description": "Website ID from list_websites."
}
},
"required": [
"websiteId"
]
}
}
```
# list_auto_searches (/docs/mcp/tools/list-auto-searches)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/list_auto_searches.mdx. */}
**List Auto Searches** · Read-only
Lists the Auto Searches of one website: name, status (running or paused), preferences, people per day, leads delivered today and in total, the matching pool and the last run. Free. Use it before pause_auto_search or resume_auto_search to find the autoSearchId.
| Connection | Account URL, team member URL or OAuth |
| --- | --- |
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `websiteId` | `string` | Yes | any | Website ID from list_websites. |
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "list_auto_searches",
"title": "List Auto Searches",
"annotations": {
"title": "List Auto Searches",
"readOnlyHint": true,
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false
},
"inputSchema": {
"type": "object",
"properties": {
"websiteId": {
"type": "string",
"description": "Website ID from list_websites."
}
},
"required": [
"websiteId"
]
}
}
```
## Used in [#used-in]
- [/docs/leads/prospector/search-prospects/auto-search/mcp](/docs/leads/prospector/search-prospects/auto-search/mcp)
# list_automations (/docs/mcp/tools/list-automations)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/list_automations.mdx. */}
**List automations** · Read-only
Lists a website's automations: rules that act when a lead matches, for example sending to Slack, a CRM, a webhook, Zapier, an email or LinkedIn campaign, or an email alert. Use it to find an automationId for get_automation, update_automation, toggle_automation or delete_automation. Each automation shows its name, isActive, draft, errorMessage, when (the trigger event), then (the action), trigger, interval and the settings of the action it uses (get_automation returns all of them).
| Connection | Account URL, team member URL or OAuth |
| --- | --- |
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `websiteId` | `string` | Yes | any | Website ID from list_websites. |
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "list_automations",
"title": "List automations",
"annotations": {
"title": "List automations",
"readOnlyHint": true,
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false
},
"inputSchema": {
"type": "object",
"properties": {
"websiteId": {
"type": "string",
"description": "Website ID from list_websites."
}
},
"required": [
"websiteId"
]
}
}
```
## Used in [#used-in]
- [/docs/automations/run-history/mcp](/docs/automations/run-history/mcp)
# list_billing_domains (/docs/mcp/tools/list-billing-domains)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/list_billing_domains.mdx. */}
**List billed domains** · Read-only
The account's sending domains with their billing: price and renewalPrice (USD a year), expiresAt (renewal date), autoRenew and cancelAtPeriodEnd, setupCompleted and activeDate. source says how the domain came in: bundle (the outreach bundle), premium (bought on its own through the extras checkout) or imported (the customer's own domain: it renews at their registrar and is never billed here). isPremium is separate: true when the registration price is above $14. Free.
| Connection | Account-owner URL or OAuth (not a team member URL) |
| --- | --- |
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `websiteId` | `string` | No | any | Optional, kept for older callers: billed domains belong to the account, so the list is the same for every website. |
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "list_billing_domains",
"title": "List billed domains",
"annotations": {
"title": "List billed domains",
"readOnlyHint": true,
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false
},
"inputSchema": {
"type": "object",
"properties": {
"websiteId": {
"type": "string",
"description": "Optional, kept for older callers: billed domains belong to the account, so the list is the same for every website."
}
}
}
}
```
# list_blog_articles (/docs/mcp/tools/list-blog-articles)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/list_blog_articles.mdx. */}
**List blog articles** · Read-only
Lists the articles on a website's hosted blog (Optimize add-on), newest first. Use it to find an articleId for get_blog_article or update_blog_article. Each row has _id, title, slug, url, status (live, draft…), source, category, version, visits, firstAvg / currentAvg (the average ICP match of visitors to the first and current version), versionAvgs, pendingRefinement, publishedAt, issues and locked (locked articles cannot be edited). Errors: 403 without the Optimize add-on or the SEO permission, 404 when the blog is not set up.
| Connection | Account-owner URL or OAuth (not a team member URL) |
| --- | --- |
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `websiteId` | `string` | Yes | any | Website ID from list_websites. |
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "list_blog_articles",
"title": "List blog articles",
"annotations": {
"title": "List blog articles",
"readOnlyHint": true,
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false
},
"inputSchema": {
"type": "object",
"properties": {
"websiteId": {
"type": "string",
"description": "Website ID from list_websites."
}
},
"required": [
"websiteId"
]
}
}
```
# list_campaigns (/docs/mcp/tools/list-campaigns)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/list_campaigns.mdx. */}
**List email campaigns** · Read-only
List the email campaigns of one website, newest first, with their status (isActive), schedule, steps (emailCampaignTemplates), health and a cached stats snapshot (statsRollup: contacted, sent, opens, clicks, replies, bounces and rates, refreshed about every 5 minutes; see computedAt). For exact live numbers and per-step stats of one campaign use get_campaign. websiteId comes from list_websites and is required even though the schema marks it optional. Returns emailCampaigns[], totalDocs and remaining (campaigns not yet shown). 50 campaigns per page.
| Connection | Account URL, team member URL or OAuth |
| --- | --- |
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `websiteId` | `string` | No | any | Website id (24 hex characters) from list_websites. Required by the server. |
| `page` | `number` | No | any | Page number, starting at 1. Default 1. 50 campaigns per page. |
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "list_campaigns",
"title": "List email campaigns",
"annotations": {
"title": "List email campaigns",
"readOnlyHint": true,
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false
},
"inputSchema": {
"type": "object",
"properties": {
"websiteId": {
"type": "string",
"description": "Website id (24 hex characters) from list_websites. Required by the server."
},
"page": {
"type": "number",
"description": "Page number, starting at 1. Default 1. 50 campaigns per page."
}
}
}
}
```
## Used in [#used-in]
- [/docs/leads/prospector/search-prospects/manual-search/mcp](/docs/leads/prospector/search-prospects/manual-search/mcp)
# list_crm_owners (/docs/mcp/tools/list-crm-owners)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/list_crm_owners.mdx. */}
**List CRM owners** · Read-only · Acts outside your account
Lists the users in a connected CRM that a contact can be assigned to. Use it to get the ownerId that push_lead_to_crm needs for HubSpot, Zoho and Pipedrive. Reads from the CRM and changes nothing. Returns \{ data: [\{ id, name, email \}] \} — use id as ownerId. Errors: the CRM is not connected for this website, 401 when the CRM login has expired and needs reconnecting.
| Connection | Account URL, team member URL or OAuth |
| --- | --- |
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `crm` | `string` | Yes | `hubspot`, `pipedrive`, `salesforce`, `zoho`, `gohighlevel` | One of: hubspot, pipedrive, salesforce, zoho, gohighlevel. |
| `websiteId` | `string` | Yes | any | Website ID from list_websites; the CRM must be connected on this website. |
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "list_crm_owners",
"title": "List CRM owners",
"annotations": {
"title": "List CRM owners",
"readOnlyHint": true,
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": true
},
"inputSchema": {
"type": "object",
"properties": {
"crm": {
"type": "string",
"enum": [
"hubspot",
"pipedrive",
"salesforce",
"zoho",
"gohighlevel"
],
"description": "One of: hubspot, pipedrive, salesforce, zoho, gohighlevel."
},
"websiteId": {
"type": "string",
"description": "Website ID from list_websites; the CRM must be connected on this website."
}
},
"required": [
"crm",
"websiteId"
]
}
}
```
## Used in [#used-in]
- [/docs/automations/crm/gohighlevel/mcp](/docs/automations/crm/gohighlevel/mcp)
- [/docs/automations/crm/hubspot/mcp](/docs/automations/crm/hubspot/mcp)
# list_crm_pipelines (/docs/mcp/tools/list-crm-pipelines)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/list_crm_pipelines.mdx. */}
**List CRM deal pipelines** · Read-only · Acts outside your account
Lists the deal pipelines of a connected CRM and the stages in each. Use it to get the pipelineId and dealStageId that create_automation or update_automation need for a HubSpot automation that also creates deals (\{ sentToHubspot: \{ createDeal: true, pipelineId, dealStageId \} \}). Reads from the CRM and changes nothing. Returns \{ data \}: the CRM's pipelines with their id and stages (each stage has an id). Errors: the CRM is not connected for this website, 401 or 403 when the CRM connection must be reconnected to allow deals.
| Connection | Account URL, team member URL or OAuth |
| --- | --- |
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `crm` | `string` | Yes | `hubspot`, `gohighlevel` | One of: hubspot, gohighlevel. |
| `websiteId` | `string` | Yes | any | Website ID from list_websites; the CRM must be connected on this website. |
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "list_crm_pipelines",
"title": "List CRM deal pipelines",
"annotations": {
"title": "List CRM deal pipelines",
"readOnlyHint": true,
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": true
},
"inputSchema": {
"type": "object",
"properties": {
"crm": {
"type": "string",
"enum": [
"hubspot",
"gohighlevel"
],
"description": "One of: hubspot, gohighlevel."
},
"websiteId": {
"type": "string",
"description": "Website ID from list_websites; the CRM must be connected on this website."
}
},
"required": [
"crm",
"websiteId"
]
}
}
```
## Used in [#used-in]
- [/docs/automations/crm/gohighlevel/mcp](/docs/automations/crm/gohighlevel/mcp)
- [/docs/automations/crm/hubspot/mcp](/docs/automations/crm/hubspot/mcp)
# list_crm_variables (/docs/mcp/tools/list-crm-variables)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/list_crm_variables.mdx. */}
**List CRM variables** · Read-only
The lead and company fields (name, email, job title, company size, pages visited, score…) that can be mapped to fields in your CRM. Free.
| Connection | Account URL, team member URL or OAuth |
| --- | --- |
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `websiteId` | `string` | Yes | any | Website ID from list_websites. |
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "list_crm_variables",
"title": "List CRM variables",
"annotations": {
"title": "List CRM variables",
"readOnlyHint": true,
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false
},
"inputSchema": {
"type": "object",
"properties": {
"websiteId": {
"type": "string",
"description": "Website ID from list_websites."
}
},
"required": [
"websiteId"
]
}
}
```
## Used in [#used-in]
- [/docs/automations/crm/overview/mcp](/docs/automations/crm/overview/mcp)
# list_domains (/docs/mcp/tools/list-domains)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/list_domains.mdx. */}
**List sending domains** · Read-only
The domains bought or imported for sending, with their mailboxes, DNS state, expiry date and auto-renew. Free.
| Connection | Account URL, team member URL or OAuth |
| --- | --- |
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `websiteId` | `string` | Yes | any | Website ID from list_websites. |
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "list_domains",
"title": "List sending domains",
"annotations": {
"title": "List sending domains",
"readOnlyHint": true,
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false
},
"inputSchema": {
"type": "object",
"properties": {
"websiteId": {
"type": "string",
"description": "Website ID from list_websites."
}
},
"required": [
"websiteId"
]
}
}
```
# list_email_accounts (/docs/mcp/tools/list-email-accounts)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/list_email_accounts.mdx. */}
**List sending mailboxes** · Read-only
List the mailboxes connected to a website for sending outreach, with their health and warmup state. Passwords and login tokens are never returned. websiteId comes from list_websites and is required even though the schema marks it optional. Per mailbox read _id (the emailAccountId other tools take), email, connected, disabled, the sending limit and its ramp (messagesPerDayLimit, rampingCurrentWeek = the campaign sending ramp), dailyLimitCeiling, warmupEnabled, warmupDailyLimit and warmupSentToday, warmupStats, warmupPlacement (warmup emails landing in inbox vs spam), and warmupNeedsFilter / warmupFilterVerified (whether the mailbox has the inbox filter warmup needs). Use get_warmup_stats for warmup totals and run_deliverability_check for DNS health.
| Connection | Account URL, team member URL or OAuth |
| --- | --- |
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `websiteId` | `string` | No | any | Website id (24 hex characters) from list_websites. Required by the server. |
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "list_email_accounts",
"title": "List sending mailboxes",
"annotations": {
"title": "List sending mailboxes",
"readOnlyHint": true,
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false
},
"inputSchema": {
"type": "object",
"properties": {
"websiteId": {
"type": "string",
"description": "Website id (24 hex characters) from list_websites. Required by the server."
}
}
}
}
```
# list_email_blacklist (/docs/mcp/tools/list-email-blacklist)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/list_email_blacklist.mdx. */}
**List the email blocklist** · Read-only
Lists the email addresses campaigns on this website never send to, grouped by the name they were added under. Free.
| Connection | Account URL, team member URL or OAuth |
| --- | --- |
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `websiteId` | `string` | Yes | any | Website ID from list_websites. |
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "list_email_blacklist",
"title": "List the email blocklist",
"annotations": {
"title": "List the email blocklist",
"readOnlyHint": true,
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false
},
"inputSchema": {
"type": "object",
"properties": {
"websiteId": {
"type": "string",
"description": "Website ID from list_websites."
}
},
"required": [
"websiteId"
]
}
}
```
# list_email_providers (/docs/mcp/tools/list-email-providers)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/list_email_providers.mdx. */}
**List email provider settings** · Read-only
Returns the SMTP and IMAP host, port and TLS settings of common providers (Gmail, Outlook, Zoho…). Pass an email to get the settings for its provider. Use the result for test_email_account and add_email_account.
| Connection | Account URL, team member URL or OAuth |
| --- | --- |
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `email` | `string` | No | any | Optional. A mailbox address, to get its provider's settings. |
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "list_email_providers",
"title": "List email provider settings",
"annotations": {
"title": "List email provider settings",
"readOnlyHint": true,
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false
},
"inputSchema": {
"type": "object",
"properties": {
"email": {
"type": "string",
"description": "Optional. A mailbox address, to get its provider's settings."
}
}
}
}
```
# list_filters (/docs/mcp/tools/list-filters)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/list_filters.mdx. */}
**List saved lead filters** · Read-only
List the saved lead filters (saved views) of a website. Each has _id (use it with delete_filter), name, url (the filter as a query string of get_leads-style parameters), tab and isDefault. Saved filters can also be chosen as the segment of an automation. websiteId comes from list_websites. Filters that exist only for automations are not listed. Returns \{ filters: [...] \}. Read-only.
| Connection | Account URL, team member URL or OAuth |
| --- | --- |
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `websiteId` | `string` | Yes | any | Website id (24 hex characters) from list_websites. |
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "list_filters",
"title": "List saved lead filters",
"annotations": {
"title": "List saved lead filters",
"readOnlyHint": true,
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false
},
"inputSchema": {
"type": "object",
"properties": {
"websiteId": {
"type": "string",
"description": "Website id (24 hex characters) from list_websites."
}
},
"required": [
"websiteId"
]
}
}
```
## Used in [#used-in]
- [/docs/automations/automations/mcp](/docs/automations/automations/mcp)
# list_google_ads_audiences (/docs/mcp/tools/list-google-ads-audiences)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/list_google_ads_audiences.mdx. */}
**List Google Ads audiences** · Read-only
The Google Ads retargeting audiences of a website: name, linked Google campaign, contacts uploaded and match stats. Free.
| Connection | Account URL, team member URL or OAuth |
| --- | --- |
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `websiteId` | `string` | Yes | any | Website ID from list_websites. |
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "list_google_ads_audiences",
"title": "List Google Ads audiences",
"annotations": {
"title": "List Google Ads audiences",
"readOnlyHint": true,
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false
},
"inputSchema": {
"type": "object",
"properties": {
"websiteId": {
"type": "string",
"description": "Website ID from list_websites."
}
},
"required": [
"websiteId"
]
}
}
```
# list_intent_topics (/docs/mcp/tools/list-intent-topics)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/list_intent_topics.mdx. */}
**List subscribed intent topics** · Read-only
Lists the intent topics a website is subscribed to, with delivery numbers. Use get_intent_topics_catalog to browse topics it is not subscribed to yet. Returns \{ result[], totalActive \}. Each row has topicSlug, displayName, paused, enabledAt, pausedAt, userDailyLimit, dailyDeliveredToday, totalDeliveredCount and recentSurgeCount7d (leads with this topic seen in the last 7 days). If intent signals are not enabled for the website, it returns an empty result with featureEnabled false.
| Connection | Account URL, team member URL or OAuth |
| --- | --- |
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `websiteId` | `string` | Yes | any | Website ID from list_websites. |
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "list_intent_topics",
"title": "List subscribed intent topics",
"annotations": {
"title": "List subscribed intent topics",
"readOnlyHint": true,
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false
},
"inputSchema": {
"type": "object",
"properties": {
"websiteId": {
"type": "string",
"description": "Website ID from list_websites."
}
},
"required": [
"websiteId"
]
}
}
```
# list_invoices (/docs/mcp/tools/list-invoices)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/list_invoices.mdx. */}
**List invoices** · Read-only
The account's invoices, newest first: date, amount, refunded amount, currency, status (paid, open, void, uncollectible, refunded, partially_refunded), description (what it was for), a link to the PDF and hosted (the invoice's web page, where an open one can be paid). Paged: when hasMore is true, pass nextCursor as startingAfter. Account owners and billing admins only. Free.
| Connection | Account-owner URL or OAuth (not a team member URL) |
| --- | --- |
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `websiteId` | `string` | No | any | Optional, kept for older callers: invoices belong to the account, so the list is the same for every website. |
| `limit` | `integer` | No | 1–50 · default 10 | Invoices per page, a whole number from 1 to 50 (default 10). |
| `startingAfter` | `string` | No | any | For the next page: the nextCursor from the previous answer. Leave empty for the newest invoices. |
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "list_invoices",
"title": "List invoices",
"annotations": {
"title": "List invoices",
"readOnlyHint": true,
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false
},
"inputSchema": {
"type": "object",
"properties": {
"websiteId": {
"type": "string",
"description": "Optional, kept for older callers: invoices belong to the account, so the list is the same for every website."
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 50,
"default": 10,
"description": "Invoices per page, a whole number from 1 to 50 (default 10)."
},
"startingAfter": {
"type": "string",
"description": "For the next page: the nextCursor from the previous answer. Leave empty for the newest invoices."
}
}
}
}
```
# list_lead_scoring_models (/docs/mcp/tools/list-lead-scoring-models)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/list_lead_scoring_models.mdx. */}
**List lead scoring models** · Read-only
List a website's lead scoring models (Qualify): the rules that score each lead on company, people and behaviour criteria and mark it warm or hot. Returns results.scores[] with each model's _id (modelId for the other scoring tools), name, active, status (live, draft, archived), bands (warm/hot thresholds, default 40/70) and its rules per criterion, plus pagination fields. 50 models per page. websiteId comes from list_websites. Use get_lead_scoring_model for one model. Read-only.
| Connection | Account URL, team member URL or OAuth |
| --- | --- |
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `websiteId` | `string` | Yes | any | Website id (24 hex characters) from list_websites. |
| `page` | `number` | No | any | Page number, 1-based, 50 models per page. Default 1. |
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "list_lead_scoring_models",
"title": "List lead scoring models",
"annotations": {
"title": "List lead scoring models",
"readOnlyHint": true,
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false
},
"inputSchema": {
"type": "object",
"properties": {
"websiteId": {
"type": "string",
"description": "Website id (24 hex characters) from list_websites."
},
"page": {
"type": "number",
"description": "Page number, 1-based, 50 models per page. Default 1."
}
},
"required": [
"websiteId"
]
}
}
```
# list_linkedin_accounts (/docs/mcp/tools/list-linkedin-accounts)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/list_linkedin_accounts.mdx. */}
**List LinkedIn accounts** · Read-only
List the LinkedIn accounts connected to a website through the browser extension, newest first. Use list_linkedin_campaigns for the LinkedIn connection-request campaigns themselves. websiteId comes from list_websites. Returns accounts[]; per account read status (unpaired or paired) and connectionState: connected (extension seen in the last 6 hours), stale (seen before that), never_seen, cooldown (paused for a while by LinkedIn limits), unpaired. Not available with a website-scoped key.
| Connection | Account-owner URL or OAuth (not a team member URL) |
| --- | --- |
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `websiteId` | `string` | Yes | any | Website id from list_websites. |
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "list_linkedin_accounts",
"title": "List LinkedIn accounts",
"annotations": {
"title": "List LinkedIn accounts",
"readOnlyHint": true,
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false
},
"inputSchema": {
"type": "object",
"properties": {
"websiteId": {
"type": "string",
"description": "Website id from list_websites."
}
},
"required": [
"websiteId"
]
}
}
```
# list_linkedin_campaigns (/docs/mcp/tools/list-linkedin-campaigns)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/list_linkedin_campaigns.mdx. */}
**List LinkedIn campaigns** · Read-only
List the LinkedIn connection-request campaigns of a website, newest first, with each campaign's status (draft, active, paused, completed), stats and progress (\{ pct, terminalCount, total \}). The prospect list itself is not included. Use list_linkedin_accounts for the LinkedIn accounts that send them and list_campaigns for email campaigns. websiteId comes from list_websites and is required even though the schema marks it optional. Returns campaigns[].
| Connection | Account URL, team member URL or OAuth |
| --- | --- |
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `websiteId` | `string` | No | any | Website id from list_websites. Required by the server. |
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "list_linkedin_campaigns",
"title": "List LinkedIn campaigns",
"annotations": {
"title": "List LinkedIn campaigns",
"readOnlyHint": true,
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false
},
"inputSchema": {
"type": "object",
"properties": {
"websiteId": {
"type": "string",
"description": "Website id from list_websites. Required by the server."
}
}
}
}
```
# list_linkedin_keywords (/docs/mcp/tools/list-linkedin-keywords)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/list_linkedin_keywords.mdx. */}
**List LinkedIn keywords** · Read-only
The keywords watched on LinkedIn (LinkedIn Fans): people who post or comment about them become leads. With their status and leads found. Free.
| Connection | Account URL, team member URL or OAuth |
| --- | --- |
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `websiteId` | `string` | Yes | any | Website ID from list_websites. |
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "list_linkedin_keywords",
"title": "List LinkedIn keywords",
"annotations": {
"title": "List LinkedIn keywords",
"readOnlyHint": true,
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false
},
"inputSchema": {
"type": "object",
"properties": {
"websiteId": {
"type": "string",
"description": "Website ID from list_websites."
}
},
"required": [
"websiteId"
]
}
}
```
# list_linkedin_tracked_posts (/docs/mcp/tools/list-linkedin-tracked-posts)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/list_linkedin_tracked_posts.mdx. */}
**List tracked LinkedIn posts** · Read-only
The LinkedIn posts being tracked: people who react to or comment on them become leads. Free.
| Connection | Account URL, team member URL or OAuth |
| --- | --- |
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `websiteId` | `string` | Yes | any | Website ID from list_websites. |
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "list_linkedin_tracked_posts",
"title": "List tracked LinkedIn posts",
"annotations": {
"title": "List tracked LinkedIn posts",
"readOnlyHint": true,
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false
},
"inputSchema": {
"type": "object",
"properties": {
"websiteId": {
"type": "string",
"description": "Website ID from list_websites."
}
},
"required": [
"websiteId"
]
}
}
```
# list_lists (/docs/mcp/tools/list-lists)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/list_lists.mdx. */}
**List lists** · Read-only
Lists the contact or company lists of one website with their names and ids. Free. Use it to find the listId for get_list, delete_list, remove_list_items or export_list_csv.
| Connection | Account URL, team member URL or OAuth |
| --- | --- |
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `websiteId` | `string` | Yes | any | Website ID from list_websites. |
| `listType` | `string` | Yes | `contact`, `company` | contact for lists of people, company for lists of companies. |
| `page` | `number` | No | min 1 | Page number, starting at 1. |
| `limit` | `number` | No | min 1 | Lists per page. |
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "list_lists",
"title": "List lists",
"annotations": {
"title": "List lists",
"readOnlyHint": true,
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false
},
"inputSchema": {
"type": "object",
"properties": {
"websiteId": {
"type": "string",
"description": "Website ID from list_websites."
},
"listType": {
"type": "string",
"enum": [
"contact",
"company"
],
"description": "contact for lists of people, company for lists of companies."
},
"page": {
"type": "number",
"minimum": 1,
"description": "Page number, starting at 1."
},
"limit": {
"type": "number",
"minimum": 1,
"description": "Lists per page."
}
},
"required": [
"websiteId",
"listType"
]
}
}
```
## Used in [#used-in]
- [/docs/leads/lists/mcp](/docs/leads/lists/mcp)
# list_members (/docs/mcp/tools/list-members)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/list_members.mdx. */}
**List team members** · Read-only
Lists the people on the account as team: userId, name, email, role (Owner or Member), permissions, preset, allWebsites, websites (website ids, empty when allWebsites is true) and whether their invite is still pending (invitePending). status is false until they set a password. Needs the master key.
| Connection | Account-owner URL or OAuth (not a team member URL) |
| --- | --- |
## Parameters [#parameters]
This tool takes no parameters.
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "list_members",
"title": "List team members",
"annotations": {
"title": "List team members",
"readOnlyHint": true,
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false
},
"inputSchema": {
"type": "object",
"properties": {}
}
}
```
## Used in [#used-in]
- [/docs/account/team/mcp](/docs/account/team/mcp)
# list_open_invoices (/docs/mcp/tools/list-open-invoices)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/list_open_invoices.mdx. */}
**List open invoices** · Read-only
The account invoices that are still unpaid (open or past due): amount, currency, due date, what it is for, the payment status, the PDF link and hosted (the page where it can be paid); at most 5, newest first; plus the next upcoming invoice (amount and the date the period ends), or null on a cancelled or lifetime plan. Free.
| Connection | Account-owner URL or OAuth (not a team member URL) |
| --- | --- |
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `websiteId` | `string` | No | any | Optional, kept for older callers: invoices belong to the account, so the list is the same for every website. |
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "list_open_invoices",
"title": "List open invoices",
"annotations": {
"title": "List open invoices",
"readOnlyHint": true,
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false
},
"inputSchema": {
"type": "object",
"properties": {
"websiteId": {
"type": "string",
"description": "Optional, kept for older callers: invoices belong to the account, so the list is the same for every website."
}
}
}
}
```
# list_outreach_domains (/docs/mcp/tools/list-outreach-domains)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/list_outreach_domains.mdx. */}
**List outreach domains** · Read-only
List every outreach domain of a website, picked or bought, with its status, setup progress, mailboxes and expiry. Use get_domain_setup_status for a compact progress view after a purchase. websiteId comes from list_websites. Per domain read domain, status (picked = in the cart, not bought), progress, timestamps, error, paymentError, price / renewalPrice, the registration (expiresAt, autoRenew) and mailboxes[] (email, status). Also returns emailSenderInfo and a summary (total, ready, inFlight, errored, paymentErrored). Not available with a website-scoped key.
| Connection | Account-owner URL or OAuth (not a team member URL) |
| --- | --- |
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `websiteId` | `string` | Yes | any | Website id from list_websites. |
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "list_outreach_domains",
"title": "List outreach domains",
"annotations": {
"title": "List outreach domains",
"readOnlyHint": true,
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false
},
"inputSchema": {
"type": "object",
"properties": {
"websiteId": {
"type": "string",
"description": "Website id from list_websites."
}
},
"required": [
"websiteId"
]
}
}
```
# list_slack_channels (/docs/mcp/tools/list-slack-channels)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/list_slack_channels.mdx. */}
**List Slack channels** · Read-only
The channels of the Slack workspace connected to this website (archived ones left out), to pick one for a Slack automation: id, name, isPrivate, isMember (the app is in it) and members. The app can post to any public channel, member or not; a private channel only appears here once someone invites the app to it (/invite in Slack). Returns an error when Slack is not connected. Free.
| Connection | Account URL, team member URL or OAuth |
| --- | --- |
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `websiteId` | `string` | Yes | any | Website ID from list_websites. |
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "list_slack_channels",
"title": "List Slack channels",
"annotations": {
"title": "List Slack channels",
"readOnlyHint": true,
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false
},
"inputSchema": {
"type": "object",
"properties": {
"websiteId": {
"type": "string",
"description": "Website ID from list_websites."
}
},
"required": [
"websiteId"
]
}
}
```
# list_tags (/docs/mcp/tools/list-tags)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/list_tags.mdx. */}
**List tags** · Read-only
List the tags available on a website: the website's own tags plus the built-in default tags. Each tag has _id (use it as tagId in tag_lead / remove_tags_from_lead), text (the name, in upper case; use it for the tag filter in get_leads) and colour. websiteId comes from list_websites. Create a new tag with create_tag. Returns \{ tags: [...] \}. Read-only.
| Connection | Account URL, team member URL or OAuth |
| --- | --- |
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `websiteId` | `string` | Yes | any | Website id (24 hex characters) from list_websites. |
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "list_tags",
"title": "List tags",
"annotations": {
"title": "List tags",
"readOnlyHint": true,
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false
},
"inputSchema": {
"type": "object",
"properties": {
"websiteId": {
"type": "string",
"description": "Website id (24 hex characters) from list_websites."
}
},
"required": [
"websiteId"
]
}
}
```
## Used in [#used-in]
- [/docs/leads/tags/mcp](/docs/leads/tags/mcp)
# list_websites (/docs/mcp/tools/list-websites)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/list_websites.mdx. */}
**List websites** · Read-only
Lists the account's tracked websites, newest first, with _id (the websiteId other tools need), name, url, domain, clientId, status (unverified, verified, removed or failed), trial and credit fields, tags and tracking settings. Returns \{ websites, pagination: \{ total, page, limit, totalPages, hasNext, hasPrev \} \}. Default 50 per page, max 100. Start here to find a websiteId. For the install snippet use get_tracking_pixel; for full settings use get_website. Needs an account-level key.
| Connection | Account-owner URL or OAuth (not a team member URL) |
| --- | --- |
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `page` | `number` | No | any | Page number, starting at 1 (default 1). |
| `limit` | `number` | No | any | Websites per page (default 50, max 100). |
| `search` | `string` | No | any | Optional text matched (case-insensitive) against domain, url and name. |
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "list_websites",
"title": "List websites",
"annotations": {
"title": "List websites",
"readOnlyHint": true,
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false
},
"inputSchema": {
"type": "object",
"properties": {
"page": {
"type": "number",
"description": "Page number, starting at 1 (default 1)."
},
"limit": {
"type": "number",
"description": "Websites per page (default 50, max 100)."
},
"search": {
"type": "string",
"description": "Optional text matched (case-insensitive) against domain, url and name."
}
}
}
}
```
## Used in [#used-in]
- [/docs/websites/tracking-pixel/mcp](/docs/websites/tracking-pixel/mcp)
# pause_ai_scout (/docs/mcp/tools/pause-ai-scout)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/pause_ai_scout.mdx. */}
**Pause an AI Scout** · Changes data
Pauses an AI Scout: no more people are delivered until it is resumed. The leads it already delivered stay.
| Connection | Account URL, team member URL or OAuth |
| --- | --- |
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `websiteId` | `string` | Yes | any | Website ID from list_websites. |
| `scoutId` | `string` | Yes | any | AI Scout ID from list_ai_scouts. |
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "pause_ai_scout",
"title": "Pause an AI Scout",
"annotations": {
"title": "Pause an AI Scout",
"readOnlyHint": false,
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false
},
"inputSchema": {
"type": "object",
"properties": {
"websiteId": {
"type": "string",
"description": "Website ID from list_websites."
},
"scoutId": {
"type": "string",
"description": "AI Scout ID from list_ai_scouts."
}
},
"required": [
"websiteId",
"scoutId"
]
}
}
```
# pause_auto_search (/docs/mcp/tools/pause-auto-search)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/pause_auto_search.mdx. */}
**Pause an Auto Search** · Changes data
Pauses one Auto Search: no more leads are delivered and no more credits are used until it is resumed. Leads already delivered stay. Returns the Auto Search with status paused, or 404 when it does not belong to the website.
| Connection | Account URL, team member URL or OAuth |
| --- | --- |
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `websiteId` | `string` | Yes | any | Website ID from list_websites. |
| `autoSearchId` | `string` | Yes | any | _id from list_auto_searches. |
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "pause_auto_search",
"title": "Pause an Auto Search",
"annotations": {
"title": "Pause an Auto Search",
"readOnlyHint": false,
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false
},
"inputSchema": {
"type": "object",
"properties": {
"websiteId": {
"type": "string",
"description": "Website ID from list_websites."
},
"autoSearchId": {
"type": "string",
"description": "_id from list_auto_searches."
}
},
"required": [
"websiteId",
"autoSearchId"
]
}
}
```
## Used in [#used-in]
- [/docs/leads/prospector/search-prospects/auto-search/mcp](/docs/leads/prospector/search-prospects/auto-search/mcp)
# pause_linkedin_campaign (/docs/mcp/tools/pause-linkedin-campaign)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/pause_linkedin_campaign.mdx. */}
**Pause a LinkedIn campaign** · Changes data
Pauses a running LinkedIn campaign: nothing more is sent until it is resumed. People already in it keep their place.
| Connection | Account-owner URL or OAuth (not a team member URL) |
| --- | --- |
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `websiteId` | `string` | Yes | any | Website ID from list_websites. |
| `linkedinCampaignId` | `string` | Yes | any | LinkedIn campaign ID from list_linkedin_campaigns. |
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "pause_linkedin_campaign",
"title": "Pause a LinkedIn campaign",
"annotations": {
"title": "Pause a LinkedIn campaign",
"readOnlyHint": false,
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false
},
"inputSchema": {
"type": "object",
"properties": {
"websiteId": {
"type": "string",
"description": "Website ID from list_websites."
},
"linkedinCampaignId": {
"type": "string",
"description": "LinkedIn campaign ID from list_linkedin_campaigns."
}
},
"required": [
"websiteId",
"linkedinCampaignId"
]
}
}
```
# pause_subscription (/docs/mcp/tools/pause-subscription)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/pause_subscription.mdx. */}
**Pause subscription** · Deletes or overwrites data · Acts outside your account
Pauses the subscription for 1 to 6 months: invoices during the pause are not collected, no new leads come in while paused, and it resumes automatically on pausedUntil. Only the account owner or a teammate with billing permission can do it (others get 403 with the owner's email). Use reactivate_subscription to end a pause early. Confirm with the user before calling. Returns pausedUntil and months.
| Connection | Account-owner URL or OAuth (not a team member URL) |
| --- | --- |
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `months` | `integer` | Yes | `1`, `2`, `3`, `4`, `5`, `6` | Number of months to pause, 1 to 6. |
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "pause_subscription",
"title": "Pause subscription",
"annotations": {
"title": "Pause subscription",
"readOnlyHint": false,
"destructiveHint": true,
"idempotentHint": false,
"openWorldHint": true
},
"inputSchema": {
"type": "object",
"properties": {
"months": {
"type": "integer",
"enum": [
1,
2,
3,
4,
5,
6
],
"description": "Number of months to pause, 1 to 6."
}
},
"required": [
"months"
]
}
}
```
## Used in [#used-in]
- [/docs/account/billing/mcp](/docs/account/billing/mcp)
# plan_ai_scout (/docs/mcp/tools/plan-ai-scout)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/plan_ai_scout.mdx. */}
**Plan an AI Scout** · Read-only
Turns a description of who to find ("founders of B2B SaaS companies who talk about outbound on podcasts") into a scout name and the sources it would read. Nothing is saved or charged. Show it to the user, then pass it to create_ai_scout. Returns 400 when the description is too short.
| Connection | Account URL, team member URL or OAuth |
| --- | --- |
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `websiteId` | `string` | Yes | any | Website ID from list_websites. |
| `description` | `string` | Yes | any | Who to find, in a sentence or two. |
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "plan_ai_scout",
"title": "Plan an AI Scout",
"annotations": {
"title": "Plan an AI Scout",
"readOnlyHint": true,
"destructiveHint": false,
"idempotentHint": false,
"openWorldHint": false
},
"inputSchema": {
"type": "object",
"properties": {
"websiteId": {
"type": "string",
"description": "Website ID from list_websites."
},
"description": {
"type": "string",
"description": "Who to find, in a sentence or two."
}
},
"required": [
"websiteId",
"description"
]
}
}
```
# preview_automation_filter (/docs/mcp/tools/preview-automation-filter)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/preview_automation_filter.mdx. */}
**Preview an automation filter** · Read-only
Counts the leads of the last days (days, default 7, at most 90) that match a saved filter, before you use it in an automation. Answers total7d (all leads in the window) and matched7d (leads the filter lets through) — both cover windowDays despite the names — plus up to 8 samples (name, domain, industry, employees, country, score) and the top 4 industries with their share among the first 50 matching leads. Takes a few seconds. 404 when the filter does not exist. Free.
| Connection | Account URL, team member URL or OAuth |
| --- | --- |
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `websiteId` | `string` | Yes | any | Website ID from list_websites. |
| `filterId` | `string` | Yes | any | Saved filter ID from list_filters. |
| `days` | `number` | No | 1–90 | How many days back (1-90). |
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "preview_automation_filter",
"title": "Preview an automation filter",
"annotations": {
"title": "Preview an automation filter",
"readOnlyHint": true,
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false
},
"inputSchema": {
"type": "object",
"properties": {
"websiteId": {
"type": "string",
"description": "Website ID from list_websites."
},
"filterId": {
"type": "string",
"description": "Saved filter ID from list_filters."
},
"days": {
"type": "number",
"minimum": 1,
"maximum": 90,
"description": "How many days back (1-90)."
}
},
"required": [
"websiteId",
"filterId"
]
}
}
```
# preview_plan_change (/docs/mcp/tools/preview-plan-change)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/preview_plan_change.mdx. */}
**Preview plan change** · Read-only
Shows what a plan change would cost without changing anything. Returns direction (upgrade, downgrade or flat), intervalChanged, current and new leads, newMonthlyCents, chargedNowCents (amount charged today, in cents), nextInvoiceCents and nextInvoiceDate. For a same-interval upgrade, today's charge is the extra leads at the new plan's per-lead price (newPerLeadCents), not a time-based proration. chargedNowCents is 0 for downgrades and for monthly/yearly switches. Always run this before upgrade_plan and show the user the price. Fails if the account has no active paid subscription.
| Connection | Account-owner URL or OAuth (not a team member URL) |
| --- | --- |
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `leads` | `integer` | Yes | 1–1000000 | Leads per month of the new plan: a whole number from 1 to 1,000,000. Below 300 is priced as 300. |
| `annual` | `boolean` | No | any | true for yearly billing, false for monthly. Leave it out to keep the current billing interval; only pass a value when the user wants to switch. |
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "preview_plan_change",
"title": "Preview plan change",
"annotations": {
"title": "Preview plan change",
"readOnlyHint": true,
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false
},
"inputSchema": {
"type": "object",
"properties": {
"leads": {
"type": "integer",
"minimum": 1,
"maximum": 1000000,
"description": "Leads per month of the new plan: a whole number from 1 to 1,000,000. Below 300 is priced as 300."
},
"annual": {
"type": "boolean",
"description": "true for yearly billing, false for monthly. Leave it out to keep the current billing interval; only pass a value when the user wants to switch."
}
},
"required": [
"leads"
]
}
}
```
## Used in [#used-in]
- [/docs/engage/mailboxes/domains/mcp](/docs/engage/mailboxes/domains/mcp)
# purchase_outreach_domains (/docs/mcp/tools/purchase-outreach-domains)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/purchase_outreach_domains.mdx. */}
**Buy outreach domains** · Deletes or overwrites data · Acts outside your account · Spends credits or money
Buy every domain in the website's picked list (added with add_outreach_domain) and set each one up for outreach: registration, DNS, SPF/DKIM/DMARC, a mailbox and warmup. This charges the card immediately for the first year of each domain, and each mailbox is then billed as a monthly subscription. Confirm the domains and the total with the user before calling. Setup runs in the background and the user is emailed when it is done; follow it with get_domain_setup_status. By default each domain gets one mailbox named firstname.lastname from emailSenderInfo. Errors: no domains picked, missing sender info, payment_method_required, or HTTP 402 when the payment fails. Returns success, a message and outreachDomains[]. Not available with a website-scoped key.
| Connection | Account-owner URL or OAuth (not a team member URL) |
| --- | --- |
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `websiteId` | `string` | Yes | any | Website id from list_websites whose picked domains are bought. |
| `domains` | `any[]` | Yes | any | Not used to choose domains: the purchase always covers every domain currently picked for the website. Use add_outreach_domain / remove_outreach_domain to change the selection. |
| `paymentMethodId` | `string` | No | any | Id of the saved payment card to charge. Required unless a coupon makes the order free. |
| `emailSenderInfo` | `object` | No | any | Sender details for the new mailboxes: \{ firstName, lastName, jobTitle \}, all three required. |
| `couponCode` | `string` | No | any | Optional coupon code for the order. |
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "purchase_outreach_domains",
"title": "Buy outreach domains",
"annotations": {
"title": "Buy outreach domains",
"readOnlyHint": false,
"destructiveHint": true,
"idempotentHint": false,
"openWorldHint": true
},
"inputSchema": {
"type": "object",
"properties": {
"websiteId": {
"type": "string",
"description": "Website id from list_websites whose picked domains are bought."
},
"domains": {
"type": "array",
"description": "Not used to choose domains: the purchase always covers every domain currently picked for the website. Use add_outreach_domain / remove_outreach_domain to change the selection."
},
"paymentMethodId": {
"type": "string",
"description": "Id of the saved payment card to charge. Required unless a coupon makes the order free."
},
"emailSenderInfo": {
"type": "object",
"description": "Sender details for the new mailboxes: { firstName, lastName, jobTitle }, all three required."
},
"couponCode": {
"type": "string",
"description": "Optional coupon code for the order."
}
},
"required": [
"websiteId",
"domains"
]
}
}
```
# purge_leads_below_bar (/docs/mcp/tools/purge-leads-below-bar)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/purge_leads_below_bar.mdx. */}
**Purge leads below the bar** · Deletes or overwrites data
Removes the leads already in the table that score below the lead quality bar (get_lead_quality). It can be undone with undo_lead_purge.
| Connection | Account URL, team member URL or OAuth |
| --- | --- |
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `websiteId` | `string` | Yes | any | Website ID from list_websites. |
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "purge_leads_below_bar",
"title": "Purge leads below the bar",
"annotations": {
"title": "Purge leads below the bar",
"readOnlyHint": false,
"destructiveHint": true,
"idempotentHint": true,
"openWorldHint": false
},
"inputSchema": {
"type": "object",
"properties": {
"websiteId": {
"type": "string",
"description": "Website ID from list_websites."
}
},
"required": [
"websiteId"
]
}
}
```
# push_lead_to_crm (/docs/mcp/tools/push-lead-to-crm)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/push_lead_to_crm.mdx. */}
**Push contact to CRM** · Changes data · Acts outside your account
Creates a contact in the website's connected CRM: HubSpot, Pipedrive, Salesforce, Zoho or GoHighLevel. The contact details come from a saved contact with that email if one exists, otherwise from the lead's identified person when you pass leadId. With leadId, the lead is marked as added to the CRM. contactData.email is always required. HubSpot, Zoho and Pipedrive also need ownerId, which you get from list_crm_owners. To set up automatic pushes for every lead, use create_automation instead. It writes to a third-party system, so confirm with the user before calling. Errors: the CRM is not connected for this website, 'No Contact Found', 401 when the CRM login has expired.
| Connection | Account URL, team member URL or OAuth |
| --- | --- |
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `leadId` | `string` | No | any | Lead _id from get_leads (optional). Supplies the person's details and links the CRM record to the lead. |
| `crm` | `string` | Yes | `hubspot`, `pipedrive`, `salesforce`, `zoho`, `gohighlevel` | One of: hubspot, pipedrive, salesforce, zoho, gohighlevel. |
| `websiteId` | `string` | Yes | any | Website ID from list_websites; the CRM must be connected on this website. |
| `ownerId` | `string` | No | any | CRM user id to assign the contact to, from list_crm_owners. Required for hubspot, zoho and pipedrive. |
| `contactData` | `object` | Yes | any | Contact fields: email (required), firstName, lastName, position. ownerId may also be given here. |
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "push_lead_to_crm",
"title": "Push contact to CRM",
"annotations": {
"title": "Push contact to CRM",
"readOnlyHint": false,
"destructiveHint": false,
"idempotentHint": false,
"openWorldHint": true
},
"inputSchema": {
"type": "object",
"properties": {
"leadId": {
"type": "string",
"description": "Lead _id from get_leads (optional). Supplies the person's details and links the CRM record to the lead."
},
"crm": {
"type": "string",
"enum": [
"hubspot",
"pipedrive",
"salesforce",
"zoho",
"gohighlevel"
],
"description": "One of: hubspot, pipedrive, salesforce, zoho, gohighlevel."
},
"websiteId": {
"type": "string",
"description": "Website ID from list_websites; the CRM must be connected on this website."
},
"ownerId": {
"type": "string",
"description": "CRM user id to assign the contact to, from list_crm_owners. Required for hubspot, zoho and pipedrive."
},
"contactData": {
"type": "object",
"description": "Contact fields: email (required), firstName, lastName, position. ownerId may also be given here."
}
},
"required": [
"crm",
"websiteId",
"contactData"
]
}
}
```
# reactivate_subscription (/docs/mcp/tools/reactivate-subscription)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/reactivate_subscription.mdx. */}
**Reactivate subscription** · Changes data · Acts outside your account
Undoes a cancellation that has not taken effect yet, or ends a pause early. Ending a pause restarts billing, so only the account owner or a teammate with billing permission can do it; undoing a scheduled cancellation is open to the team. Some custom plans cannot be unpaused here (409 needs_support) and need the support team. Confirm with the user before ending a pause. Returns ok and the plan; when nothing was paused or set to cancel it changes nothing and returns changed: false with a message.
| Connection | Account-owner URL or OAuth (not a team member URL) |
| --- | --- |
## Parameters [#parameters]
This tool takes no parameters.
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "reactivate_subscription",
"title": "Reactivate subscription",
"annotations": {
"title": "Reactivate subscription",
"readOnlyHint": false,
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": true
},
"inputSchema": {
"type": "object",
"properties": {}
}
}
```
## Used in [#used-in]
- [/docs/account/billing/mcp](/docs/account/billing/mcp)
# recalculate_lead_scores (/docs/mcp/tools/recalculate-lead-scores)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/recalculate_lead_scores.mdx. */}
**Re-score leads** · Changes data
Re-run lead scoring for specific leads against the website's current scoring models, and answer any AI qualification questions those leads do not have an answer for yet. Use it after changing a model with update_lead_scoring_model when you want selected leads updated now. AI questions count against the plan's monthly AI qualification allowance; leads that already have every answer are re-scored without any AI use (counted in aiSkipped). websiteId from list_websites, leadIds from get_leads; leadIds must contain at least one id (an empty list is refused). Leads are processed one by one, so keep batches small. Returns processed, failed, total, aiSkipped and updatedLeads[] (_id, scores, aiQualification).
| Connection | Account URL, team member URL or OAuth |
| --- | --- |
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `websiteId` | `string` | Yes | any | Website id (24 hex characters) from list_websites. |
| `leadIds` | `string[]` | Yes | any | Array of lead ids from get_leads to re-score. At least one id. |
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "recalculate_lead_scores",
"title": "Re-score leads",
"annotations": {
"title": "Re-score leads",
"readOnlyHint": false,
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false
},
"inputSchema": {
"type": "object",
"properties": {
"websiteId": {
"type": "string",
"description": "Website id (24 hex characters) from list_websites."
},
"leadIds": {
"type": "array",
"items": {
"type": "string"
},
"description": "Array of lead ids from get_leads to re-score. At least one id."
}
},
"required": [
"websiteId",
"leadIds"
]
}
}
```
# reconnect_email_account (/docs/mcp/tools/reconnect-email-account)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/reconnect_email_account.mdx. */}
**Reconnect a mailbox** · Changes data
Tries the saved SMTP and IMAP settings of a disconnected mailbox again; when they work, the mailbox is connected and its paused prospects continue.
| Connection | Account URL, team member URL or OAuth |
| --- | --- |
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `websiteId` | `string` | Yes | any | Website ID from list_websites. |
| `emailAccountId` | `string` | Yes | any | Mailbox ID from list_email_accounts. |
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "reconnect_email_account",
"title": "Reconnect a mailbox",
"annotations": {
"title": "Reconnect a mailbox",
"readOnlyHint": false,
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false
},
"inputSchema": {
"type": "object",
"properties": {
"websiteId": {
"type": "string",
"description": "Website ID from list_websites."
},
"emailAccountId": {
"type": "string",
"description": "Mailbox ID from list_email_accounts."
}
},
"required": [
"websiteId",
"emailAccountId"
]
}
}
```
# remove_from_domain_blacklist (/docs/mcp/tools/remove-from-domain-blacklist)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/remove_from_domain_blacklist.mdx. */}
**Remove blocked-domain group** · Deletes or overwrites data
Deletes a whole named group of blocked domains from a website, so those companies can become leads again. It removes every domain in the group; single domains cannot be removed on their own. Get group names from get_domain_blacklist (the csv field). Confirm with the user before calling.
| Connection | Account URL, team member URL or OAuth |
| --- | --- |
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `websiteId` | `string` | Yes | any | Website ID from list_websites. |
| `csv` | `string` | Yes | any | Exact name of the group to delete, as shown in the csv field of get_domain_blacklist. |
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "remove_from_domain_blacklist",
"title": "Remove blocked-domain group",
"annotations": {
"title": "Remove blocked-domain group",
"readOnlyHint": false,
"destructiveHint": true,
"idempotentHint": true,
"openWorldHint": false
},
"inputSchema": {
"type": "object",
"properties": {
"websiteId": {
"type": "string",
"description": "Website ID from list_websites."
},
"csv": {
"type": "string",
"description": "Exact name of the group to delete, as shown in the csv field of get_domain_blacklist."
}
},
"required": [
"websiteId",
"csv"
]
}
}
```
# remove_from_email_blacklist (/docs/mcp/tools/remove-from-email-blacklist)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/remove_from_email_blacklist.mdx. */}
**Remove a group from the email blocklist** · Deletes or overwrites data
Removes every address added under one group name; campaigns can email them again. Confirm with the user before calling.
| Connection | Account URL, team member URL or OAuth |
| --- | --- |
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `websiteId` | `string` | Yes | any | Website ID from list_websites. |
| `group` | `string` | Yes | any | The group name from list_email_blacklist. |
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "remove_from_email_blacklist",
"title": "Remove a group from the email blocklist",
"annotations": {
"title": "Remove a group from the email blocklist",
"readOnlyHint": false,
"destructiveHint": true,
"idempotentHint": true,
"openWorldHint": false
},
"inputSchema": {
"type": "object",
"properties": {
"websiteId": {
"type": "string",
"description": "Website ID from list_websites."
},
"group": {
"type": "string",
"description": "The group name from list_email_blacklist."
}
},
"required": [
"websiteId",
"group"
]
}
}
```
# remove_list_items (/docs/mcp/tools/remove-list-items)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/remove_list_items.mdx. */}
**Remove items from a list** · Deletes or overwrites data
Removes contacts or companies from a list; they stay in the account. Confirm with the user before calling.
| Connection | Account URL, team member URL or OAuth |
| --- | --- |
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `websiteId` | `string` | Yes | any | Website ID from list_websites. |
| `listType` | `string` | Yes | `contact`, `company` | contact for lists of people, company for lists of companies. |
| `listId` | `string` | Yes | any | _id from list_lists. |
| `itemIds` | `string[]` | Yes | any | Ids of the contacts or companies to remove, from get_list. |
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "remove_list_items",
"title": "Remove items from a list",
"annotations": {
"title": "Remove items from a list",
"readOnlyHint": false,
"destructiveHint": true,
"idempotentHint": true,
"openWorldHint": false
},
"inputSchema": {
"type": "object",
"properties": {
"websiteId": {
"type": "string",
"description": "Website ID from list_websites."
},
"listType": {
"type": "string",
"enum": [
"contact",
"company"
],
"description": "contact for lists of people, company for lists of companies."
},
"listId": {
"type": "string",
"description": "_id from list_lists."
},
"itemIds": {
"type": "array",
"items": {
"type": "string"
},
"description": "Ids of the contacts or companies to remove, from get_list."
}
},
"required": [
"websiteId",
"listType",
"listId",
"itemIds"
]
}
}
```
# remove_member (/docs/mcp/tools/remove-member)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/remove_member.mdx. */}
**Remove a team member** · Deletes or overwrites data
Removes a person from the account: they lose access straight away, their website access is removed and the invitation is given back. Refused for the last Owner, and only an Owner can remove an Owner. Confirm with the user before calling. Needs the master key.
| Connection | Account-owner URL or OAuth (not a team member URL) |
| --- | --- |
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `userId` | `string` | Yes | any | userId from list_members. |
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "remove_member",
"title": "Remove a team member",
"annotations": {
"title": "Remove a team member",
"readOnlyHint": false,
"destructiveHint": true,
"idempotentHint": true,
"openWorldHint": false
},
"inputSchema": {
"type": "object",
"properties": {
"userId": {
"type": "string",
"description": "userId from list_members."
}
},
"required": [
"userId"
]
}
}
```
# remove_outreach_domain (/docs/mcp/tools/remove-outreach-domain)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/remove_outreach_domain.mdx. */}
**Unpick outreach domain** · Changes data
Remove a domain from a website's picked list (purchase cart) before it is bought. Only unpurchased picks can be removed; a bought domain is refused with an error. websiteId comes from list_websites; the domain from add_outreach_domain or list_outreach_domains. Returns success and outreachDomains[] (the remaining picks), or 404 when the domain is not on the list. Not available with a website-scoped key.
| Connection | Account-owner URL or OAuth (not a team member URL) |
| --- | --- |
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `websiteId` | `string` | Yes | any | Website id from list_websites. |
| `domain` | `string` | Yes | any | Picked domain to remove, e.g. getacme.example. |
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "remove_outreach_domain",
"title": "Unpick outreach domain",
"annotations": {
"title": "Unpick outreach domain",
"readOnlyHint": false,
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false
},
"inputSchema": {
"type": "object",
"properties": {
"websiteId": {
"type": "string",
"description": "Website id from list_websites."
},
"domain": {
"type": "string",
"description": "Picked domain to remove, e.g. getacme.example."
}
},
"required": [
"websiteId",
"domain"
]
}
}
```
# remove_prospect_from_campaign (/docs/mcp/tools/remove-prospect-from-campaign)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/remove_prospect_from_campaign.mdx. */}
**Remove contact from campaign** · Deletes or overwrites data
Delete a prospect from its campaign, like "Remove from campaign" in the app: the prospect and its scheduled emails are deleted, emails already sent stay sent, and its history is gone. Nothing is refunded. To halt the sequence but keep the prospect and its history, use stop_prospect instead. Confirm with the user before calling. prospectId comes from get_prospects or add_prospect_to_campaign; campaignId from list_campaigns. Both must be 24 hex characters. Returns removed: true and the prospectId.
| Connection | Account URL, team member URL or OAuth |
| --- | --- |
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `prospectId` | `string` | Yes | any | Prospect id (24 hex characters) from get_prospects or add_prospect_to_campaign. |
| `campaignId` | `string` | Yes | any | Id of the campaign the prospect belongs to (24 hex characters), from list_campaigns. |
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "remove_prospect_from_campaign",
"title": "Remove contact from campaign",
"annotations": {
"title": "Remove contact from campaign",
"readOnlyHint": false,
"destructiveHint": true,
"idempotentHint": true,
"openWorldHint": false
},
"inputSchema": {
"type": "object",
"properties": {
"prospectId": {
"type": "string",
"description": "Prospect id (24 hex characters) from get_prospects or add_prospect_to_campaign."
},
"campaignId": {
"type": "string",
"description": "Id of the campaign the prospect belongs to (24 hex characters), from list_campaigns."
}
},
"required": [
"prospectId",
"campaignId"
]
}
}
```
# remove_tags_from_lead (/docs/mcp/tools/remove-tags-from-lead)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/remove_tags_from_lead.mdx. */}
**Remove a tag from a lead** · Changes data
Remove one tag from a lead. The tag itself stays available for other leads. leadId comes from get_leads; tagId comes from list_tags (or the lead's tags in get_lead). Add a tag with tag_lead. Returns status 'Successful', or 'Failed' (404) when nothing was removed.
| Connection | Account URL, team member URL or OAuth |
| --- | --- |
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `leadId` | `string` | Yes | any | Lead id (the _id of a row returned by get_leads). |
| `tagId` | `string` | Yes | any | Id of the tag to remove (from list_tags). |
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "remove_tags_from_lead",
"title": "Remove a tag from a lead",
"annotations": {
"title": "Remove a tag from a lead",
"readOnlyHint": false,
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false
},
"inputSchema": {
"type": "object",
"properties": {
"leadId": {
"type": "string",
"description": "Lead id (the _id of a row returned by get_leads)."
},
"tagId": {
"type": "string",
"description": "Id of the tag to remove (from list_tags)."
}
},
"required": [
"leadId",
"tagId"
]
}
}
```
# remove_tracking_domain (/docs/mcp/tools/remove-tracking-domain)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/remove_tracking_domain.mdx. */}
**Remove a tracking domain** · Deletes or overwrites data
Stops using the custom open and click tracking domain of a mailbox; tracking falls back to the shared domain.
| Connection | Account URL, team member URL or OAuth |
| --- | --- |
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `websiteId` | `string` | Yes | any | Website ID from list_websites. |
| `emailAccountId` | `string` | Yes | any | Mailbox ID from list_email_accounts. |
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "remove_tracking_domain",
"title": "Remove a tracking domain",
"annotations": {
"title": "Remove a tracking domain",
"readOnlyHint": false,
"destructiveHint": true,
"idempotentHint": true,
"openWorldHint": false
},
"inputSchema": {
"type": "object",
"properties": {
"websiteId": {
"type": "string",
"description": "Website ID from list_websites."
},
"emailAccountId": {
"type": "string",
"description": "Mailbox ID from list_email_accounts."
}
},
"required": [
"websiteId",
"emailAccountId"
]
}
}
```
# rename_email_account (/docs/mcp/tools/rename-email-account)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/rename_email_account.mdx. */}
**Rename a mailbox** · Changes data
Changes the sender name a mailbox shows, and for mailboxes on our servers the part of the address before the @. The mailbox keeps its warmup and history.
| Connection | Account URL, team member URL or OAuth |
| --- | --- |
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `websiteId` | `string` | Yes | any | Website ID from list_websites. |
| `emailAccountId` | `string` | Yes | any | Mailbox ID from list_email_accounts. |
| `fullName` | `string` | No | any | The sender name. |
| `localPart` | `string` | No | any | Our mailboxes only: the new part before the @. |
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "rename_email_account",
"title": "Rename a mailbox",
"annotations": {
"title": "Rename a mailbox",
"readOnlyHint": false,
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false
},
"inputSchema": {
"type": "object",
"properties": {
"websiteId": {
"type": "string",
"description": "Website ID from list_websites."
},
"emailAccountId": {
"type": "string",
"description": "Mailbox ID from list_email_accounts."
},
"fullName": {
"type": "string",
"description": "The sender name."
},
"localPart": {
"type": "string",
"description": "Our mailboxes only: the new part before the @."
}
},
"required": [
"websiteId",
"emailAccountId"
]
}
}
```
# rename_list (/docs/mcp/tools/rename-list)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/rename_list.mdx. */}
**Rename a list** · Changes data
Renames a contact or company list of this website. Its contacts or companies do not change. listId comes from list_lists.
| Connection | Account URL, team member URL or OAuth |
| --- | --- |
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `websiteId` | `string` | Yes | any | Website ID from list_websites. |
| `listType` | `string` | Yes | `contact`, `company` | contact or company. |
| `listId` | `string` | Yes | any | List ID from list_lists. |
| `name` | `string` | Yes | any | The new name. |
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "rename_list",
"title": "Rename a list",
"annotations": {
"title": "Rename a list",
"readOnlyHint": false,
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false
},
"inputSchema": {
"type": "object",
"properties": {
"websiteId": {
"type": "string",
"description": "Website ID from list_websites."
},
"listType": {
"type": "string",
"enum": [
"contact",
"company"
],
"description": "contact or company."
},
"listId": {
"type": "string",
"description": "List ID from list_lists."
},
"name": {
"type": "string",
"description": "The new name."
}
},
"required": [
"websiteId",
"listType",
"listId",
"name"
]
}
}
```
# reorder_campaign_steps (/docs/mcp/tools/reorder-campaign-steps)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/reorder_campaign_steps.mdx. */}
**Reorder campaign steps** · Changes data
Puts a campaign's emails in a new order. templateIds must list every step of the campaign exactly once, in the new order (from get_campaign, emailCampaignTemplates); anything else returns 400 and changes nothing.
| Connection | Account URL, team member URL or OAuth |
| --- | --- |
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `websiteId` | `string` | Yes | any | Website ID from list_websites (the campaign's website). |
| `campaignId` | `string` | Yes | any | campaignId from list_campaigns. |
| `templateIds` | `string[]` | Yes | any | Every step _id of the campaign, in the new order. |
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "reorder_campaign_steps",
"title": "Reorder campaign steps",
"annotations": {
"title": "Reorder campaign steps",
"readOnlyHint": false,
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false
},
"inputSchema": {
"type": "object",
"properties": {
"websiteId": {
"type": "string",
"description": "Website ID from list_websites (the campaign's website)."
},
"campaignId": {
"type": "string",
"description": "campaignId from list_campaigns."
},
"templateIds": {
"type": "array",
"items": {
"type": "string"
},
"description": "Every step _id of the campaign, in the new order."
}
},
"required": [
"websiteId",
"campaignId",
"templateIds"
]
}
}
```
# reply_to_prospect (/docs/mcp/tools/reply-to-prospect)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/reply_to_prospect.mdx. */}
**Reply to prospect** · Changes data · Acts outside your account
Send a reply email to a prospect in an existing outreach conversation. It is sent right away from the mailbox that sent the original email, with the subject "Re: \", and is added to the thread. Confirm the text with the user before calling: it is real email and cannot be recalled. emailId comes from get_inbox_emails (prospects[].emails[].emailId); read the conversation first with get_email_thread. Merge fields such as \{\{ first_name | there \}\} are filled in. Returns a success status, or an error saying the mailbox could not be reached (504), its login failed (401) or delivery failed (502).
| Connection | Account URL, team member URL or OAuth |
| --- | --- |
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `emailId` | `string` | Yes | any | Email id from get_inbox_emails, prospects[].emails[].emailId. |
| `body` | `string` | Yes | any | The reply text. Merge fields with a fallback, e.g. \{\{ first_name \| there \}\}, are filled in. |
| `emailAccountId` | `string` | No | any | Not used: the reply always goes from the mailbox that sent the original email. |
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "reply_to_prospect",
"title": "Reply to prospect",
"annotations": {
"title": "Reply to prospect",
"readOnlyHint": false,
"destructiveHint": false,
"idempotentHint": false,
"openWorldHint": true
},
"inputSchema": {
"type": "object",
"properties": {
"emailId": {
"type": "string",
"description": "Email id from get_inbox_emails, prospects[].emails[].emailId."
},
"body": {
"type": "string",
"description": "The reply text. Merge fields with a fallback, e.g. {{ first_name | there }}, are filled in."
},
"emailAccountId": {
"type": "string",
"description": "Not used: the reply always goes from the mailbox that sent the original email."
}
},
"required": [
"emailId",
"body"
]
}
}
```
## Used in [#used-in]
- [/docs/engage/master-inbox/mcp](/docs/engage/master-inbox/mcp)
# rerun_automation_for_lead (/docs/mcp/tools/rerun-automation-for-lead)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/rerun_automation_for_lead.mdx. */}
**Rerun automation for one lead** · Changes data · Acts outside your account
Runs one type of automation again for a single lead right now and reports the outcome. Use it to resend a failed Slack, CRM, webhook or campaign push. Failed and duplicate checks are skipped for webhooks, so the lead is sent again even if it went before. Use retrigger_automations for many leads, and get_lead_automation_history to see past runs. Get leadId from get_leads. It sends data outside the account, so confirm with the user before calling. Returns \{ status, result: \{ success, message, executedAt \} \}. Errors: 404 'Lead not found' or 'Lead not found in specified website'.
| Connection | Account URL, team member URL or OAuth |
| --- | --- |
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `leadId` | `string` | Yes | any | Lead _id from get_leads. |
| `websiteId` | `string` | Yes | any | Website ID the lead belongs to, from list_websites. |
| `automationType` | `string` | Yes | any | One of: webhook, slack, hubspot, pipedrive, zoho, zapier, salesforce, gohighlevel, mailchimp, email-campaign. Any other value returns success false with 'Unknown automation type'. |
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "rerun_automation_for_lead",
"title": "Rerun automation for one lead",
"annotations": {
"title": "Rerun automation for one lead",
"readOnlyHint": false,
"destructiveHint": false,
"idempotentHint": false,
"openWorldHint": true
},
"inputSchema": {
"type": "object",
"properties": {
"leadId": {
"type": "string",
"description": "Lead _id from get_leads."
},
"websiteId": {
"type": "string",
"description": "Website ID the lead belongs to, from list_websites."
},
"automationType": {
"type": "string",
"description": "One of: webhook, slack, hubspot, pipedrive, zoho, zapier, salesforce, gohighlevel, mailchimp, email-campaign. Any other value returns success false with 'Unknown automation type'."
}
},
"required": [
"leadId",
"websiteId",
"automationType"
]
}
}
```
## Used in [#used-in]
- [/docs/automations/webhook/mcp](/docs/automations/webhook/mcp)
# reschedule_prospects (/docs/mcp/tools/reschedule-prospects)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/reschedule_prospects.mdx. */}
**Reschedule prospects** · Changes data
Recalculates when the next email of each prospect goes out, spread over the coming days within the mailbox limits, e.g. after a pause or a limit change.
| Connection | Account-owner URL or OAuth (not a team member URL) |
| --- | --- |
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `websiteId` | `string` | Yes | any | Website ID from list_websites. |
| `campaignId` | `string` | Yes | any | Campaign ID from list_campaigns. |
| `prospectIds` | `string[]` | Yes | any | Prospect IDs from get_prospects. |
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "reschedule_prospects",
"title": "Reschedule prospects",
"annotations": {
"title": "Reschedule prospects",
"readOnlyHint": false,
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false
},
"inputSchema": {
"type": "object",
"properties": {
"websiteId": {
"type": "string",
"description": "Website ID from list_websites."
},
"campaignId": {
"type": "string",
"description": "Campaign ID from list_campaigns."
},
"prospectIds": {
"type": "array",
"items": {
"type": "string"
},
"description": "Prospect IDs from get_prospects."
}
},
"required": [
"websiteId",
"campaignId",
"prospectIds"
]
}
}
```
# resume_ai_scout (/docs/mcp/tools/resume-ai-scout)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/resume_ai_scout.mdx. */}
**Resume an AI Scout** · Changes data · Acts outside your account · Spends credits or money
Resumes a paused AI Scout. It delivers again from its next daily run, 1 credit per lead.
| Connection | Account URL, team member URL or OAuth |
| --- | --- |
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `websiteId` | `string` | Yes | any | Website ID from list_websites. |
| `scoutId` | `string` | Yes | any | AI Scout ID from list_ai_scouts. |
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "resume_ai_scout",
"title": "Resume an AI Scout",
"annotations": {
"title": "Resume an AI Scout",
"readOnlyHint": false,
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": true
},
"inputSchema": {
"type": "object",
"properties": {
"websiteId": {
"type": "string",
"description": "Website ID from list_websites."
},
"scoutId": {
"type": "string",
"description": "AI Scout ID from list_ai_scouts."
}
},
"required": [
"websiteId",
"scoutId"
]
}
}
```
# resume_auto_search (/docs/mcp/tools/resume-auto-search)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/resume_auto_search.mdx. */}
**Resume an Auto Search** · Changes data · Spends credits or money
Resumes a paused Auto Search: deliveries start again today, 1 credit per lead delivered. Confirm with the user before calling. Returns the Auto Search with status running, or 404 when it does not belong to the website.
| Connection | Account URL, team member URL or OAuth |
| --- | --- |
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `websiteId` | `string` | Yes | any | Website ID from list_websites. |
| `autoSearchId` | `string` | Yes | any | _id from list_auto_searches. |
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "resume_auto_search",
"title": "Resume an Auto Search",
"annotations": {
"title": "Resume an Auto Search",
"readOnlyHint": false,
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false
},
"inputSchema": {
"type": "object",
"properties": {
"websiteId": {
"type": "string",
"description": "Website ID from list_websites."
},
"autoSearchId": {
"type": "string",
"description": "_id from list_auto_searches."
}
},
"required": [
"websiteId",
"autoSearchId"
]
}
}
```
## Used in [#used-in]
- [/docs/leads/prospector/search-prospects/auto-search/mcp](/docs/leads/prospector/search-prospects/auto-search/mcp)
# resume_linkedin_campaign (/docs/mcp/tools/resume-linkedin-campaign)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/resume_linkedin_campaign.mdx. */}
**Resume a LinkedIn campaign** · Changes data · Acts outside your account
Resumes a paused LinkedIn campaign: it continues sending invitations and messages where it stopped.
| Connection | Account-owner URL or OAuth (not a team member URL) |
| --- | --- |
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `websiteId` | `string` | Yes | any | Website ID from list_websites. |
| `linkedinCampaignId` | `string` | Yes | any | LinkedIn campaign ID from list_linkedin_campaigns. |
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "resume_linkedin_campaign",
"title": "Resume a LinkedIn campaign",
"annotations": {
"title": "Resume a LinkedIn campaign",
"readOnlyHint": false,
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": true
},
"inputSchema": {
"type": "object",
"properties": {
"websiteId": {
"type": "string",
"description": "Website ID from list_websites."
},
"linkedinCampaignId": {
"type": "string",
"description": "LinkedIn campaign ID from list_linkedin_campaigns."
}
},
"required": [
"websiteId",
"linkedinCampaignId"
]
}
}
```
# resume_prospects (/docs/mcp/tools/resume-prospects)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/resume_prospects.mdx. */}
**Resume prospects** · Changes data · Acts outside your account
Resumes paused prospects so their emails are sent again from their next scheduled step. prospectIds come from get_prospects.
| Connection | Account-owner URL or OAuth (not a team member URL) |
| --- | --- |
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `websiteId` | `string` | Yes | any | Website ID from list_websites. |
| `prospectIds` | `string[]` | Yes | any | Prospect IDs from get_prospects. |
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "resume_prospects",
"title": "Resume prospects",
"annotations": {
"title": "Resume prospects",
"readOnlyHint": false,
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": true
},
"inputSchema": {
"type": "object",
"properties": {
"websiteId": {
"type": "string",
"description": "Website ID from list_websites."
},
"prospectIds": {
"type": "array",
"items": {
"type": "string"
},
"description": "Prospect IDs from get_prospects."
}
},
"required": [
"websiteId",
"prospectIds"
]
}
}
```
# retrigger_automations (/docs/mcp/tools/retrigger-automations)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/retrigger_automations.mdx. */}
**Rerun automations for leads** · Changes data · Acts outside your account
Runs a website's automations again for a list of leads, for example after a CRM or Slack connection was fixed. This can send Slack messages, push to CRMs, call webhooks and add people to email campaigns. Confirm with the user before calling. Get leadIds from get_leads and automationIds from list_automations. To rerun one automation type for one lead and see the outcome, use rerun_automation_for_lead. To see what already ran for a lead, use get_lead_automation_history. leadIds and automationIds must both be non-empty lists; otherwise the call returns 400.
| Connection | Account URL, team member URL or OAuth |
| --- | --- |
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `websiteId` | `string` | Yes | any | Website ID from list_websites. |
| `leadIds` | `string[]` | Yes | any | Lead _ids from get_leads, e.g. ["64f1c2..."]. Must not be empty. |
| `automationIds` | `string[]` | Yes | any | Automation _ids from list_automations to run for these leads, e.g. ["65a0..."]. Must not be empty. |
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "retrigger_automations",
"title": "Rerun automations for leads",
"annotations": {
"title": "Rerun automations for leads",
"readOnlyHint": false,
"destructiveHint": false,
"idempotentHint": false,
"openWorldHint": true
},
"inputSchema": {
"type": "object",
"properties": {
"websiteId": {
"type": "string",
"description": "Website ID from list_websites."
},
"leadIds": {
"type": "array",
"items": {
"type": "string"
},
"description": "Lead _ids from get_leads, e.g. [\"64f1c2...\"]. Must not be empty."
},
"automationIds": {
"type": "array",
"items": {
"type": "string"
},
"description": "Automation _ids from list_automations to run for these leads, e.g. [\"65a0...\"]. Must not be empty."
}
},
"required": [
"websiteId",
"leadIds",
"automationIds"
]
}
}
```
# reveal_contact (/docs/mcp/tools/reveal-contact)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/reveal_contact.mdx. */}
**Reveal contact details** · Changes data · Spends credits or money
Returns the email address and phone number held for one person from search_people. Use it when the row shows hasEmail or hasPhone true. When neither is held, use find_contact_email to search for an address. Costs 1 credit when an email or phone is held. When nothing is held it costs 0 and returns status 'no-contact-details' with a hint. Returns 402 'Insufficient credits' when the account is out of credits. Confirm with the user before calling. Returns businessEmail, emailStatus, phone, creditsCharged, status and remainingCredits.
| Connection | Account URL, team member URL or OAuth |
| --- | --- |
## When to use it [#when-to-use-it]
After `search_people`, when you want the email and phone of specific people. Pass the `profileId` from a search row.
## Try asking [#try-asking]
> Reveal the emails for the first five.
## Good to know [#good-to-know]
- **1 credit per person,** and nothing when we hold no details. Check `hasEmail` / `hasPhone` on the search row first.
- One person per call: revealing 25 people is 25 calls and up to 25 credits. Turn on tool approval if you want to confirm each one.
- No email held? `find_contact_email` looks for one, but costs 50 or 100 credits **even when it finds nothing**. Ask before using it.
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `websiteId` | `string` | Yes | any | Website ID from list_websites (the same one used for search_people). |
| `profileId` | `string` | Yes | any | profileId from a search_people row. |
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "reveal_contact",
"title": "Reveal contact details",
"annotations": {
"title": "Reveal contact details",
"readOnlyHint": false,
"destructiveHint": false,
"idempotentHint": false,
"openWorldHint": false
},
"inputSchema": {
"type": "object",
"properties": {
"websiteId": {
"type": "string",
"description": "Website ID from list_websites (the same one used for search_people)."
},
"profileId": {
"type": "string",
"description": "profileId from a search_people row."
}
},
"required": [
"websiteId",
"profileId"
]
}
}
```
## Used in [#used-in]
- [/docs/leads/prospector/search-prospects/manual-search/mcp](/docs/leads/prospector/search-prospects/manual-search/mcp)
# run_ai_scout (/docs/mcp/tools/run-ai-scout)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/run_ai_scout.mdx. */}
**Run an AI Scout now** · Changes data · Acts outside your account · Spends credits or money
Starts a run of an AI Scout now instead of waiting for its daily run. New people appear under Leads › AI Scout within minutes, 1 credit per lead, within the daily limits.
| Connection | Account URL, team member URL or OAuth |
| --- | --- |
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `websiteId` | `string` | Yes | any | Website ID from list_websites. |
| `scoutId` | `string` | Yes | any | AI Scout ID from list_ai_scouts. |
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "run_ai_scout",
"title": "Run an AI Scout now",
"annotations": {
"title": "Run an AI Scout now",
"readOnlyHint": false,
"destructiveHint": false,
"idempotentHint": false,
"openWorldHint": true
},
"inputSchema": {
"type": "object",
"properties": {
"websiteId": {
"type": "string",
"description": "Website ID from list_websites."
},
"scoutId": {
"type": "string",
"description": "AI Scout ID from list_ai_scouts."
}
},
"required": [
"websiteId",
"scoutId"
]
}
}
```
# run_deliverability_check (/docs/mcp/tools/run-deliverability-check)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/run_deliverability_check.mdx. */}
**Check mailbox DNS** · Changes data
Run the deliverability check for one mailbox: SPF, DKIM and DMARC of its domain, its custom tracking domain and an IP blacklist score. It sends no email; inbox placement is a separate test started from the dashboard, which sends real mail from the mailbox. emailAccountId comes from list_email_accounts. The result is saved on the mailbox. Returns domain and deliverability with overallStatus (excellent, good, warning or critical), spf, dkim, dmarc, customTrackingDomain, issues[] (what to fix), lastChecked and testScore when the blacklist check answered.
| Connection | Account URL, team member URL or OAuth |
| --- | --- |
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `emailAccountId` | `string` | Yes | any | Mailbox id from list_email_accounts (_id). |
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "run_deliverability_check",
"title": "Check mailbox DNS",
"annotations": {
"title": "Check mailbox DNS",
"readOnlyHint": false,
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false
},
"inputSchema": {
"type": "object",
"properties": {
"emailAccountId": {
"type": "string",
"description": "Mailbox id from list_email_accounts (_id)."
}
},
"required": [
"emailAccountId"
]
}
}
```
# search_companies (/docs/mcp/tools/search-companies)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/search_companies.mdx. */}
**Search companies** · Read-only
Searches the company database by name or domain keyword, industry, HQ country, headcount, revenue and technologies. Use it to build company target lists. For people at those companies use search_people. For the companies visiting your own website use get_leads. Searching uses no credits, but each search that returns results counts against the plan's search limit, and the call returns 400 ('You have reached your limit.' or 'You have no credit.') when the account is out. It can return 503 provider_unavailable; retry after a minute. Returns \{ total, companies[], note \}. Rows have employees (real headcount), employeesRange, country, countryCode (ISO alpha-2), revenueRange (bounds null when unknown), industries and industry (the one your filter matched). When you set employeesMin or employeesMax, every row is inside the range, and total may be an estimate (totalIsEstimate).
| Connection | Account URL, team member URL or OAuth |
| --- | --- |
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `websiteId` | `string` | Yes | any | Website ID from list_websites. The search runs under this website. |
| `query` | `object` | Yes | any | Search filters as one flat object. Every field is optional; combine them to narrow the search. |
| `query.keywords` | `string` | No | any | Company name or domain keyword, e.g. "acme" or "acme.example". |
| `query.industries` | `string[]` | No | [154 values](#accepted-values) | Industries to match (any of them). Only the values in the accepted list work; anything else is refused. |
| `query.locations` | `string[]` | No | [249 values](#accepted-values) | Company HQ countries by full English name, or a continent (Africa, Asia, Europe, North America, Oceania, South America) for all its countries. Only the values in the accepted list work, spelled exactly ("Germany", not "germany" or "DE"). |
| `query.employeesMin` | `integer` | No | min 1 | Minimum headcount (whole number, at least 1). Applied to the real employee count. |
| `query.employeesMax` | `integer` | No | min 1 | Maximum headcount (whole number, at least 1). Applied to the real employee count. |
| `query.revenueMin` | `number` | No | min 0 | Minimum annual revenue in US dollars (0 or more). Defaults to 0. |
| `query.revenueMax` | `number` | No | min 0 | Maximum annual revenue in US dollars (0 or more). |
| `query.technologies` | `string[]` | No | any | Technologies the company uses, by product name. Case-sensitive: "Hubspot" and "Shopify" match, "hubspot" returns nothing. With this filter, total is the unfiltered count. |
| `query.page` | `integer` | No | min 1 · default 1 | Page number, whole number from 1. Default 1. |
| `query.count` | `integer` | No | min 1 · default 25 | Results per page, whole number from 1. Default 25. |
## Accepted values [#accepted-values]
The exact values these fields take; anything else is refused.
### `query.industries` [#queryindustries]
`Accounting` · `Airlines/Aviation` · `Alternative Dispute Resolution` · `Alternative Medicine` · `Animation` · `Apparel & Fashion` · `Architecture & Planning` · `Artists and Writers` · `Arts and Crafts` · `Automotive` · `Aviation & Aerospace` · `Banking` · `Biotechnology` · `Broadcast Media` · `Building Materials` · `Business Consulting and Services` · `Business Supplies and Equipment` · `Capital Markets` · `Chemicals` · `Civic & Social Organization` · `Civil Engineering` · `Commercial Real Estate` · `Computer & Network Security` · `Computer Games` · `Computer Hardware` · `Computer Networking` · `Computer Software` · `Construction` · `Consumer Electronics` · `Consumer Goods` · `Consumer Services` · `Cosmetics` · `Dairy` · `Defense & Space` · `Design` · `Education Management` · `eCommerce` · `E-Learning` · `Electrical/Electronic Manufacturing` · `Entertainment` · `Environmental Services` · `Events Services` · `Executive Office` · `Facilities Services` · `Farming` · `Financial Services` · `Fine Art` · `Fishery` · `Food & Beverages` · `Food Production` · `Fund-Raising` · `Furniture` · `Gambling & Casinos` · `Glass, Ceramics & Concrete` · `Government Administration` · `Government Relations` · `Graphic Design` · `Health, Wellness and Fitness` · `Higher Education` · `Hospital & Health Care` · `Hospitality` · `Human Resources` · `Import and Export` · `Individual & Family Services` · `Industrial Automation` · `Information Services` · `Information Technology and Services` · `Insurance` · `International Affairs` · `International Trade and Development` · `Internet` · `Internet Marketplace Platforms` · `Investment Banking` · `Investment Management` · `Judiciary` · `Law Enforcement` · `Law Practice` · `Legal Services` · `Legislative Office` · `Leisure, Travel & Tourism` · `Libraries` · `Logistics and Supply Chain` · `Luxury Goods & Jewelry` · `Machinery` · `Management Consulting` · `Maritime` · `Marketing and Advertising` · `Market Research` · `Mechanical or Industrial Engineering` · `Media Production` · `Medical Devices` · `Medical Practice` · `Mental Health Care` · `Military` · `Mining & Metals` · `Mobile Games` · `Motion Pictures and Film` · `Museums and Institutions` · `Music` · `Nanotechnology` · `Newspapers` · `Nonprofit Organization Management` · `Oil & Energy` · `Online Media` · `Other` · `Outsourcing/Offshoring` · `Package/Freight Delivery` · `Packaging and Containers` · `Paper & Forest Products` · `Performing Arts` · `Pharmaceuticals` · `Philanthropy` · `Photography` · `Plastics` · `Political Organization` · `Primary/Secondary Education` · `Printing` · `Professional Training & Coaching` · `Program Development` · `Public Policy` · `Public Relations and Communications` · `Public Safety` · `Publishing` · `Railroad Manufacture` · `Ranching` · `Real Estate` · `Recreational Facilities and Services` · `Religious Institutions` · `Renewables & Environment` · `Research` · `Restaurants` · `Retail` · `SaaS` · `Security and Investigations` · `Semiconductors` · `Shipbuilding` · `Sporting Goods` · `Sports` · `Staffing and Recruiting` · `Supermarkets` · `Telecommunications` · `Textiles` · `Think Tanks` · `Tobacco` · `Translation and Localization` · `Transportation/Trucking/Railroad` · `Utilities` · `Venture Capital & Private Equity` · `Veterinary` · `Warehousing` · `Wholesale` · `Wine and Spirits` · `Wireless` · `Writing and Editing`
### `query.locations` [#querylocations]
`Afghanistan` · `Åland Islands` · `Albania` · `Algeria` · `American Samoa` · `Andorra` · `Angola` · `Anguilla` · `Antarctica` · `Antigua and Barbuda` · `Argentina` · `Armenia` · `Aruba` · `Australia` · `Austria` · `Azerbaijan` · `The Bahamas` · `Bahrain` · `Bangladesh` · `Barbados` · `Belarus` · `Belgium` · `Belize` · `Benin` · `Bermuda` · `Bhutan` · `Bolivia` · `Bosnia and Herzegovina` · `Botswana` · `Bouvet Island` · `Brazil` · `British Indian Ocean Territory` · `Brunei` · `Bulgaria` · `Burkina Faso` · `Burundi` · `Cambodia` · `Cameroon` · `Canada` · `Cape Verde` · `Cayman Islands` · `Central African Republic` · `Chad` · `Chile` · `China` · `Christmas Island` · `Cocos (Keeling) Islands` · `Colombia` · `Comoros` · `Republic of the Congo` · `Cook Islands` · `Costa Rica` · `Cote d'Ivoire` · `Croatia` · `Cuba` · `Cyprus` · `Czechia` · `Denmark` · `Djibouti` · `Dominica` · `Dominican Republic` · `Ecuador` · `Egypt` · `El Salvador` · `Equatorial Guinea` · `Eritrea` · `Estonia` · `Ethiopia` · `Falkland Islands (Islas Malvinas)` · `Faroe Islands` · `Fiji` · `Finland` · `France` · `French Guiana` · `French Polynesia` · `French Southern and Antarctic Lands` · `Gabon` · `The Gambia` · `Georgia` · `Germany` · `Ghana` · `Gibraltar` · `Greece` · `Greenland` · `Grenada` · `Guadeloupe` · `Guam` · `Guatemala` · `Guernsey` · `Guinea` · `Guinea-Bissau` · `Guyana` · `Haiti` · `Heard Island and McDonald Islands` · `Holy See (Vatican City)` · `Honduras` · `Hong Kong` · `Hungary` · `Iceland` · `India` · `Indonesia` · `Iran` · `Iraq` · `Ireland` · `Isle of Man` · `Israel` · `Italy` · `Jamaica` · `Japan` · `Jersey` · `Jordan` · `Kazakhstan` · `Kenya` · `Kiribati` · `North Korea` · `South Korea` · `Kuwait` · `Kyrgyzstan` · `Laos` · `Latvia` · `Lebanon` · `Lesotho` · `Liberia` · `Libya` · `Liechtenstein` · `Lithuania` · `Luxembourg` · `Macau` · `North Macedonia` · `Madagascar` · `Malawi` · `Malaysia` · `Maldives` · `Mali` · `Malta` · `Marshall Islands` · `Martinique` · `Mauritania` · `Mauritius` · `Mayotte` · `Mexico` · `Federated States of Micronesia` · `Moldova` · `Monaco` · `Mongolia` · `Montserrat` · `Morocco` · `Mozambique` · `Myanmar (Burma)` · `Namibia` · `Nauru` · `Nepal` · `Netherlands` · `Netherlands Antilles` · `New Caledonia` · `New Zealand` · `Nicaragua` · `Niger` · `Nigeria` · `Niue` · `Norfolk Island` · `Northern Mariana Islands` · `Norway` · `Oman` · `Pakistan` · `Palau` · `Palestinian Territory` · `Panama` · `Papua New Guinea` · `Paraguay` · `Peru` · `Philippines` · `Pitcairn Islands` · `Poland` · `Portugal` · `Puerto Rico` · `Qatar` · `Reunion` · `Romania` · `Russia` · `Rwanda` · `Saint Helena` · `Saint Kitts and Nevis` · `Saint Lucia` · `Saint Pierre and Miquelon` · `Saint Vincent and the Grenadines` · `Western Samoa` · `San Marino` · `Sao Tome and Principe` · `Saudi Arabia` · `Senegal` · `Montenegro` · `Serbia` · `Seychelles` · `Sierra Leone` · `Singapore` · `Slovakia` · `Slovenia` · `Solomon Islands` · `Somalia` · `South Africa` · `South Georgia and the South Sandwich Islands` · `Spain` · `Sri Lanka` · `Sudan` · `Suriname` · `Svalbard` · `Eswatini` · `Sweden` · `Switzerland` · `Syria` · `Taiwan` · `Tajikistan` · `Tanzania` · `Thailand` · `Timor-Leste` · `Togo` · `Tokelau` · `Tonga` · `Trinidad and Tobago` · `Tunisia` · `Turkey` · `Turkmenistan` · `Turks and Caicos Islands` · `Tuvalu` · `Uganda` · `Ukraine` · `United Arab Emirates` · `United Kingdom` · `United States` · `United States Minor Outlying Islands` · `Uruguay` · `Uzbekistan` · `Vanuatu` · `Venezuela` · `Vietnam` · `British Virgin Islands` · `Virgin Islands` · `Wallis and Futuna` · `Western Sahara` · `Yemen` · `Zambia` · `Zimbabwe` · `Africa` · `Asia` · `Europe` · `North America` · `Oceania` · `South America`
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "search_companies",
"title": "Search companies",
"annotations": {
"title": "Search companies",
"readOnlyHint": true,
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false
},
"inputSchema": {
"type": "object",
"properties": {
"websiteId": {
"type": "string",
"description": "Website ID from list_websites. The search runs under this website."
},
"query": {
"type": "object",
"description": "Search filters as one flat object. Every field is optional; combine them to narrow the search.",
"properties": {
"keywords": {
"type": "string",
"description": "Company name or domain keyword, e.g. \"acme\" or \"acme.example\"."
},
"industries": {
"type": "array",
"items": {
"type": "string",
"enum": [
"Accounting",
"Airlines/Aviation",
"Alternative Dispute Resolution",
"Alternative Medicine",
"Animation",
"Apparel & Fashion",
"Architecture & Planning",
"Artists and Writers",
"Arts and Crafts",
"Automotive",
"Aviation & Aerospace",
"Banking",
"Biotechnology",
"Broadcast Media",
"Building Materials",
"Business Consulting and Services",
"Business Supplies and Equipment",
"Capital Markets",
"Chemicals",
"Civic & Social Organization",
"Civil Engineering",
"Commercial Real Estate",
"Computer & Network Security",
"Computer Games",
"Computer Hardware",
"Computer Networking",
"Computer Software",
"Construction",
"Consumer Electronics",
"Consumer Goods",
"Consumer Services",
"Cosmetics",
"Dairy",
"Defense & Space",
"Design",
"Education Management",
"eCommerce",
"E-Learning",
"Electrical/Electronic Manufacturing",
"Entertainment",
"Environmental Services",
"Events Services",
"Executive Office",
"Facilities Services",
"Farming",
"Financial Services",
"Fine Art",
"Fishery",
"Food & Beverages",
"Food Production",
"Fund-Raising",
"Furniture",
"Gambling & Casinos",
"Glass, Ceramics & Concrete",
"Government Administration",
"Government Relations",
"Graphic Design",
"Health, Wellness and Fitness",
"Higher Education",
"Hospital & Health Care",
"Hospitality",
"Human Resources",
"Import and Export",
"Individual & Family Services",
"Industrial Automation",
"Information Services",
"Information Technology and Services",
"Insurance",
"International Affairs",
"International Trade and Development",
"Internet",
"Internet Marketplace Platforms",
"Investment Banking",
"Investment Management",
"Judiciary",
"Law Enforcement",
"Law Practice",
"Legal Services",
"Legislative Office",
"Leisure, Travel & Tourism",
"Libraries",
"Logistics and Supply Chain",
"Luxury Goods & Jewelry",
"Machinery",
"Management Consulting",
"Maritime",
"Marketing and Advertising",
"Market Research",
"Mechanical or Industrial Engineering",
"Media Production",
"Medical Devices",
"Medical Practice",
"Mental Health Care",
"Military",
"Mining & Metals",
"Mobile Games",
"Motion Pictures and Film",
"Museums and Institutions",
"Music",
"Nanotechnology",
"Newspapers",
"Nonprofit Organization Management",
"Oil & Energy",
"Online Media",
"Other",
"Outsourcing/Offshoring",
"Package/Freight Delivery",
"Packaging and Containers",
"Paper & Forest Products",
"Performing Arts",
"Pharmaceuticals",
"Philanthropy",
"Photography",
"Plastics",
"Political Organization",
"Primary/Secondary Education",
"Printing",
"Professional Training & Coaching",
"Program Development",
"Public Policy",
"Public Relations and Communications",
"Public Safety",
"Publishing",
"Railroad Manufacture",
"Ranching",
"Real Estate",
"Recreational Facilities and Services",
"Religious Institutions",
"Renewables & Environment",
"Research",
"Restaurants",
"Retail",
"SaaS",
"Security and Investigations",
"Semiconductors",
"Shipbuilding",
"Sporting Goods",
"Sports",
"Staffing and Recruiting",
"Supermarkets",
"Telecommunications",
"Textiles",
"Think Tanks",
"Tobacco",
"Translation and Localization",
"Transportation/Trucking/Railroad",
"Utilities",
"Venture Capital & Private Equity",
"Veterinary",
"Warehousing",
"Wholesale",
"Wine and Spirits",
"Wireless",
"Writing and Editing"
]
},
"description": "Industries to match (any of them). Only the values in the accepted list work; anything else is refused."
},
"locations": {
"type": "array",
"items": {
"type": "string",
"enum": [
"Afghanistan",
"Åland Islands",
"Albania",
"Algeria",
"American Samoa",
"Andorra",
"Angola",
"Anguilla",
"Antarctica",
"Antigua and Barbuda",
"Argentina",
"Armenia",
"Aruba",
"Australia",
"Austria",
"Azerbaijan",
"The Bahamas",
"Bahrain",
"Bangladesh",
"Barbados",
"Belarus",
"Belgium",
"Belize",
"Benin",
"Bermuda",
"Bhutan",
"Bolivia",
"Bosnia and Herzegovina",
"Botswana",
"Bouvet Island",
"Brazil",
"British Indian Ocean Territory",
"Brunei",
"Bulgaria",
"Burkina Faso",
"Burundi",
"Cambodia",
"Cameroon",
"Canada",
"Cape Verde",
"Cayman Islands",
"Central African Republic",
"Chad",
"Chile",
"China",
"Christmas Island",
"Cocos (Keeling) Islands",
"Colombia",
"Comoros",
"Republic of the Congo",
"Cook Islands",
"Costa Rica",
"Cote d'Ivoire",
"Croatia",
"Cuba",
"Cyprus",
"Czechia",
"Denmark",
"Djibouti",
"Dominica",
"Dominican Republic",
"Ecuador",
"Egypt",
"El Salvador",
"Equatorial Guinea",
"Eritrea",
"Estonia",
"Ethiopia",
"Falkland Islands (Islas Malvinas)",
"Faroe Islands",
"Fiji",
"Finland",
"France",
"French Guiana",
"French Polynesia",
"French Southern and Antarctic Lands",
"Gabon",
"The Gambia",
"Georgia",
"Germany",
"Ghana",
"Gibraltar",
"Greece",
"Greenland",
"Grenada",
"Guadeloupe",
"Guam",
"Guatemala",
"Guernsey",
"Guinea",
"Guinea-Bissau",
"Guyana",
"Haiti",
"Heard Island and McDonald Islands",
"Holy See (Vatican City)",
"Honduras",
"Hong Kong",
"Hungary",
"Iceland",
"India",
"Indonesia",
"Iran",
"Iraq",
"Ireland",
"Isle of Man",
"Israel",
"Italy",
"Jamaica",
"Japan",
"Jersey",
"Jordan",
"Kazakhstan",
"Kenya",
"Kiribati",
"North Korea",
"South Korea",
"Kuwait",
"Kyrgyzstan",
"Laos",
"Latvia",
"Lebanon",
"Lesotho",
"Liberia",
"Libya",
"Liechtenstein",
"Lithuania",
"Luxembourg",
"Macau",
"North Macedonia",
"Madagascar",
"Malawi",
"Malaysia",
"Maldives",
"Mali",
"Malta",
"Marshall Islands",
"Martinique",
"Mauritania",
"Mauritius",
"Mayotte",
"Mexico",
"Federated States of Micronesia",
"Moldova",
"Monaco",
"Mongolia",
"Montserrat",
"Morocco",
"Mozambique",
"Myanmar (Burma)",
"Namibia",
"Nauru",
"Nepal",
"Netherlands",
"Netherlands Antilles",
"New Caledonia",
"New Zealand",
"Nicaragua",
"Niger",
"Nigeria",
"Niue",
"Norfolk Island",
"Northern Mariana Islands",
"Norway",
"Oman",
"Pakistan",
"Palau",
"Palestinian Territory",
"Panama",
"Papua New Guinea",
"Paraguay",
"Peru",
"Philippines",
"Pitcairn Islands",
"Poland",
"Portugal",
"Puerto Rico",
"Qatar",
"Reunion",
"Romania",
"Russia",
"Rwanda",
"Saint Helena",
"Saint Kitts and Nevis",
"Saint Lucia",
"Saint Pierre and Miquelon",
"Saint Vincent and the Grenadines",
"Western Samoa",
"San Marino",
"Sao Tome and Principe",
"Saudi Arabia",
"Senegal",
"Montenegro",
"Serbia",
"Seychelles",
"Sierra Leone",
"Singapore",
"Slovakia",
"Slovenia",
"Solomon Islands",
"Somalia",
"South Africa",
"South Georgia and the South Sandwich Islands",
"Spain",
"Sri Lanka",
"Sudan",
"Suriname",
"Svalbard",
"Eswatini",
"Sweden",
"Switzerland",
"Syria",
"Taiwan",
"Tajikistan",
"Tanzania",
"Thailand",
"Timor-Leste",
"Togo",
"Tokelau",
"Tonga",
"Trinidad and Tobago",
"Tunisia",
"Turkey",
"Turkmenistan",
"Turks and Caicos Islands",
"Tuvalu",
"Uganda",
"Ukraine",
"United Arab Emirates",
"United Kingdom",
"United States",
"United States Minor Outlying Islands",
"Uruguay",
"Uzbekistan",
"Vanuatu",
"Venezuela",
"Vietnam",
"British Virgin Islands",
"Virgin Islands",
"Wallis and Futuna",
"Western Sahara",
"Yemen",
"Zambia",
"Zimbabwe",
"Africa",
"Asia",
"Europe",
"North America",
"Oceania",
"South America"
]
},
"description": "Company HQ countries by full English name, or a continent (Africa, Asia, Europe, North America, Oceania, South America) for all its countries. Only the values in the accepted list work, spelled exactly (\"Germany\", not \"germany\" or \"DE\")."
},
"employeesMin": {
"type": "integer",
"minimum": 1,
"description": "Minimum headcount (whole number, at least 1). Applied to the real employee count."
},
"employeesMax": {
"type": "integer",
"minimum": 1,
"description": "Maximum headcount (whole number, at least 1). Applied to the real employee count."
},
"revenueMin": {
"type": "number",
"minimum": 0,
"description": "Minimum annual revenue in US dollars (0 or more). Defaults to 0."
},
"revenueMax": {
"type": "number",
"minimum": 0,
"description": "Maximum annual revenue in US dollars (0 or more)."
},
"technologies": {
"type": "array",
"items": {
"type": "string"
},
"description": "Technologies the company uses, by product name. Case-sensitive: \"Hubspot\" and \"Shopify\" match, \"hubspot\" returns nothing. With this filter, total is the unfiltered count."
},
"page": {
"type": "integer",
"minimum": 1,
"default": 1,
"description": "Page number, whole number from 1. Default 1."
},
"count": {
"type": "integer",
"minimum": 1,
"default": 25,
"description": "Results per page, whole number from 1. Default 25."
}
}
}
},
"required": [
"websiteId",
"query"
]
}
}
```
# search_domain_availability (/docs/mcp/tools/search-domain-availability)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/search_domain_availability.mdx. */}
**Check domain availability** · Read-only
Check whether a domain can be registered for outreach and what it costs. Call it before add_outreach_domain, which uses this quote (valid for 6 hours). Returns domain, available, price and renewalPrice (USD per year, registration quote), premium and a rating of the name. The amount charged at purchase can be higher than this registration quote; the dashboard checkout shows the final total. Endings that require multi-year registration are refused with an error; HTTP 503 means the lookup was busy, try again shortly. Not available with a website-scoped key.
| Connection | Account-owner URL or OAuth (not a team member URL) |
| --- | --- |
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `domain` | `string` | Yes | any | Domain name to check, e.g. getacme.example. A pasted URL is reduced to its domain. |
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "search_domain_availability",
"title": "Check domain availability",
"annotations": {
"title": "Check domain availability",
"readOnlyHint": true,
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false
},
"inputSchema": {
"type": "object",
"properties": {
"domain": {
"type": "string",
"description": "Domain name to check, e.g. getacme.example. A pasted URL is reduced to its domain."
}
},
"required": [
"domain"
]
}
}
```
# search_locations (/docs/mcp/tools/search-locations)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/search_locations.mdx. */}
**Search locations** · Read-only
Looks up location names as the location filters expect them: every country with city data, US states (optionally matching q) or cities matching q (optionally within one country). Use it before filtering leads or prospects by a city or state. Free.
| Connection | Account URL, team member URL or OAuth |
| --- | --- |
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `websiteId` | `string` | Yes | any | Website ID from list_websites. |
| `kind` | `string` | Yes | `countries`, `states`, `cities` | countries, states (US) or cities. |
| `q` | `string` | No | any | Part of the name to search for (needed for cities). |
| `country` | `string` | No | any | Cities only: limit to one country. |
| `limit` | `number` | No | 1–100 | Cities only: how many to return (1-100). |
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "search_locations",
"title": "Search locations",
"annotations": {
"title": "Search locations",
"readOnlyHint": true,
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false
},
"inputSchema": {
"type": "object",
"properties": {
"websiteId": {
"type": "string",
"description": "Website ID from list_websites."
},
"kind": {
"type": "string",
"enum": [
"countries",
"states",
"cities"
],
"description": "countries, states (US) or cities."
},
"q": {
"type": "string",
"description": "Part of the name to search for (needed for cities)."
},
"country": {
"type": "string",
"description": "Cities only: limit to one country."
},
"limit": {
"type": "number",
"minimum": 1,
"maximum": 100,
"description": "Cities only: how many to return (1-100)."
}
},
"required": [
"websiteId",
"kind"
]
}
}
```
## Used in [#used-in]
- [/docs/leads/website-visitors/filters/mcp](/docs/leads/website-visitors/filters/mcp)
# search_people (/docs/mcp/tools/search-people)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/search_people.mdx. */}
**Search people** · Read-only
Searches the 209M-contact people database by job title, company, company HQ country, seniority, department, industry, technology and company size. Use it to find decision makers. For companies only use search_companies. For people already visiting your website use get_leads. Searching uses no credits and never returns email or phone. Each search counts against the plan's search limit. Errors: 403 'Your plan does not allow the prospector'; 429 'You exceed the limits' with a reason: either the plan's search limit is used up, or the call came less than a second after the previous search (wait and retry; a refused call is not counted). Returns \{ total, people[], note \}. Rows come in shuffled order, at most `count` per page, with profileId, name, firstName, lastName, jobTitle (the title that matched), jobTitles, position, company/companyName, companyDomain, companyLocation \{city, country, countryCode\} (null when unknown), companyInfo, seniority, department, linkedin, emailStatus, hasEmail, hasPhone. Next steps: reveal_contact (1 credit) when hasEmail or hasPhone is true, otherwise find_contact_email.
| Connection | Account URL, team member URL or OAuth |
| --- | --- |
## When to use it [#when-to-use-it]
Use `search_people` when you want **new** people who match a description: job title, seniority, department, industry, company size, technology or country.
**Use something else when:**
- You want people who **visited your website**: that’s `get_leads`.
- You want **companies**, not people: that’s `search_companies`.
- You already know the person and want their email: that’s `reveal_contact`, with the `profileId` from a search.
## Try asking [#try-asking]
> Find 25 SaaS founders in the United States at companies with 10–200 employees.
The full walkthrough is in [Search for prospects → MCP](/docs/leads/prospector/search-prospects/manual-search/mcp).
## Good to know [#good-to-know]
- **Results never include emails or phone numbers.** `hasEmail` and `hasPhone` say whether we hold them; `reveal_contact` gets them for 1 credit each.
- **`locations` is the company’s headquarters,** not where the person lives. Country names (“United States”) and continents work.
- **List common spellings of a title:** pass both “CTO” and “Chief Technology Officer”.
- **25 results per page by default.** Use `page` for more rather than a huge `count`.
- Searching doesn’t use credits, but counts toward the plan’s Prospector search limit.
## Common mistakes [#common-mistakes]
- Putting company names in `titles`. Companies go in `companies`.
- Treating `employeesMin`/`employeesMax` as revenue. They’re headcount.
- Inventing filters such as `revenue` or `city`. `search_people` doesn’t have them, though `search_companies` filters on revenue.
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `websiteId` | `string` | Yes | any | Website ID from list_websites. The search runs under this website. |
| `query` | `object` | Yes | any | Search filters as one flat object. Every field is optional; combine them to narrow the search. |
| `query.titles` | `string[]` | No | any | Job titles to match, e.g. ["VP of Marketing", "Head of Growth"]. |
| `query.companies` | `string[]` | No | any | Company names or domains, e.g. ["acme.example"]. |
| `query.locations` | `string[]` | No | [249 values](#accepted-values) | Country names, e.g. ["United States"]; continents also accepted. Filters on the company HQ, not where the person lives. |
| `query.seniorities` | `string[]` | No | `Intern`, `Manager`, `Director`, `VP`, `Employee`, `C-Level` | Seniority levels: Intern, Employee, Manager, Director, VP or C-Level. |
| `query.departments` | `string[]` | No | [22 values](#accepted-values) | Departments, e.g. ["Marketing Department", "Sales Department"]. Only the listed values are accepted. |
| `query.industries` | `string[]` | No | [154 values](#accepted-values) | Company industries, e.g. ["Computer Software"]. Only the listed values are accepted. |
| `query.technologies` | `string[]` | No | any | Technologies the company uses, e.g. ["Salesforce"]. |
| `query.employeesMin` | `number` | No | min 1 | Minimum company headcount (whole number). |
| `query.employeesMax` | `number` | No | min 1 | Maximum company headcount (whole number). |
| `query.page` | `number` | No | min 1 | Page number, starting at 1. Default 1. |
| `query.count` | `number` | No | min 1 | Results per page. Default 25. |
## Accepted values [#accepted-values]
The exact values these fields take; anything else is refused.
### `query.locations` [#querylocations]
`Afghanistan` · `Åland Islands` · `Albania` · `Algeria` · `American Samoa` · `Andorra` · `Angola` · `Anguilla` · `Antarctica` · `Antigua and Barbuda` · `Argentina` · `Armenia` · `Aruba` · `Australia` · `Austria` · `Azerbaijan` · `The Bahamas` · `Bahrain` · `Bangladesh` · `Barbados` · `Belarus` · `Belgium` · `Belize` · `Benin` · `Bermuda` · `Bhutan` · `Bolivia` · `Bosnia and Herzegovina` · `Botswana` · `Bouvet Island` · `Brazil` · `British Indian Ocean Territory` · `Brunei` · `Bulgaria` · `Burkina Faso` · `Burundi` · `Cambodia` · `Cameroon` · `Canada` · `Cape Verde` · `Cayman Islands` · `Central African Republic` · `Chad` · `Chile` · `China` · `Christmas Island` · `Cocos (Keeling) Islands` · `Colombia` · `Comoros` · `Republic of the Congo` · `Cook Islands` · `Costa Rica` · `Cote d'Ivoire` · `Croatia` · `Cuba` · `Cyprus` · `Czechia` · `Denmark` · `Djibouti` · `Dominica` · `Dominican Republic` · `Ecuador` · `Egypt` · `El Salvador` · `Equatorial Guinea` · `Eritrea` · `Estonia` · `Ethiopia` · `Falkland Islands (Islas Malvinas)` · `Faroe Islands` · `Fiji` · `Finland` · `France` · `French Guiana` · `French Polynesia` · `French Southern and Antarctic Lands` · `Gabon` · `The Gambia` · `Georgia` · `Germany` · `Ghana` · `Gibraltar` · `Greece` · `Greenland` · `Grenada` · `Guadeloupe` · `Guam` · `Guatemala` · `Guernsey` · `Guinea` · `Guinea-Bissau` · `Guyana` · `Haiti` · `Heard Island and McDonald Islands` · `Holy See (Vatican City)` · `Honduras` · `Hong Kong` · `Hungary` · `Iceland` · `India` · `Indonesia` · `Iran` · `Iraq` · `Ireland` · `Isle of Man` · `Israel` · `Italy` · `Jamaica` · `Japan` · `Jersey` · `Jordan` · `Kazakhstan` · `Kenya` · `Kiribati` · `North Korea` · `South Korea` · `Kuwait` · `Kyrgyzstan` · `Laos` · `Latvia` · `Lebanon` · `Lesotho` · `Liberia` · `Libya` · `Liechtenstein` · `Lithuania` · `Luxembourg` · `Macau` · `North Macedonia` · `Madagascar` · `Malawi` · `Malaysia` · `Maldives` · `Mali` · `Malta` · `Marshall Islands` · `Martinique` · `Mauritania` · `Mauritius` · `Mayotte` · `Mexico` · `Federated States of Micronesia` · `Moldova` · `Monaco` · `Mongolia` · `Montserrat` · `Morocco` · `Mozambique` · `Myanmar (Burma)` · `Namibia` · `Nauru` · `Nepal` · `Netherlands` · `Netherlands Antilles` · `New Caledonia` · `New Zealand` · `Nicaragua` · `Niger` · `Nigeria` · `Niue` · `Norfolk Island` · `Northern Mariana Islands` · `Norway` · `Oman` · `Pakistan` · `Palau` · `Palestinian Territory` · `Panama` · `Papua New Guinea` · `Paraguay` · `Peru` · `Philippines` · `Pitcairn Islands` · `Poland` · `Portugal` · `Puerto Rico` · `Qatar` · `Reunion` · `Romania` · `Russia` · `Rwanda` · `Saint Helena` · `Saint Kitts and Nevis` · `Saint Lucia` · `Saint Pierre and Miquelon` · `Saint Vincent and the Grenadines` · `Western Samoa` · `San Marino` · `Sao Tome and Principe` · `Saudi Arabia` · `Senegal` · `Montenegro` · `Serbia` · `Seychelles` · `Sierra Leone` · `Singapore` · `Slovakia` · `Slovenia` · `Solomon Islands` · `Somalia` · `South Africa` · `South Georgia and the South Sandwich Islands` · `Spain` · `Sri Lanka` · `Sudan` · `Suriname` · `Svalbard` · `Eswatini` · `Sweden` · `Switzerland` · `Syria` · `Taiwan` · `Tajikistan` · `Tanzania` · `Thailand` · `Timor-Leste` · `Togo` · `Tokelau` · `Tonga` · `Trinidad and Tobago` · `Tunisia` · `Turkey` · `Turkmenistan` · `Turks and Caicos Islands` · `Tuvalu` · `Uganda` · `Ukraine` · `United Arab Emirates` · `United Kingdom` · `United States` · `United States Minor Outlying Islands` · `Uruguay` · `Uzbekistan` · `Vanuatu` · `Venezuela` · `Vietnam` · `British Virgin Islands` · `Virgin Islands` · `Wallis and Futuna` · `Western Sahara` · `Yemen` · `Zambia` · `Zimbabwe` · `Africa` · `Asia` · `Europe` · `North America` · `Oceania` · `South America`
### `query.departments` [#querydepartments]
`Administrative Department` · `Consulting Department` · `Creative Department` · `Customer Service Department` · `University Department` · `Engineering Department` · `CEO Department` · `Finance Department` · `HR Department` · `Healthcare Department` · `IT Department` · `Legal Department` · `Logistics Department` · `Maintenance Department` · `Marketing Department` · `Operations Department` · `Other Department` · `Production Department` · `Program and Project Management Department` · `Purchasing Department` · `Quality Assurance Department` · `Sales Department`
### `query.industries` [#queryindustries]
`Accounting` · `Airlines/Aviation` · `Alternative Dispute Resolution` · `Alternative Medicine` · `Animation` · `Apparel & Fashion` · `Architecture & Planning` · `Artists and Writers` · `Arts and Crafts` · `Automotive` · `Aviation & Aerospace` · `Banking` · `Biotechnology` · `Broadcast Media` · `Building Materials` · `Business Consulting and Services` · `Business Supplies and Equipment` · `Capital Markets` · `Chemicals` · `Civic & Social Organization` · `Civil Engineering` · `Commercial Real Estate` · `Computer & Network Security` · `Computer Games` · `Computer Hardware` · `Computer Networking` · `Computer Software` · `Construction` · `Consumer Electronics` · `Consumer Goods` · `Consumer Services` · `Cosmetics` · `Dairy` · `Defense & Space` · `Design` · `Education Management` · `eCommerce` · `E-Learning` · `Electrical/Electronic Manufacturing` · `Entertainment` · `Environmental Services` · `Events Services` · `Executive Office` · `Facilities Services` · `Farming` · `Financial Services` · `Fine Art` · `Fishery` · `Food & Beverages` · `Food Production` · `Fund-Raising` · `Furniture` · `Gambling & Casinos` · `Glass, Ceramics & Concrete` · `Government Administration` · `Government Relations` · `Graphic Design` · `Health, Wellness and Fitness` · `Higher Education` · `Hospital & Health Care` · `Hospitality` · `Human Resources` · `Import and Export` · `Individual & Family Services` · `Industrial Automation` · `Information Services` · `Information Technology and Services` · `Insurance` · `International Affairs` · `International Trade and Development` · `Internet` · `Internet Marketplace Platforms` · `Investment Banking` · `Investment Management` · `Judiciary` · `Law Enforcement` · `Law Practice` · `Legal Services` · `Legislative Office` · `Leisure, Travel & Tourism` · `Libraries` · `Logistics and Supply Chain` · `Luxury Goods & Jewelry` · `Machinery` · `Management Consulting` · `Maritime` · `Marketing and Advertising` · `Market Research` · `Mechanical or Industrial Engineering` · `Media Production` · `Medical Devices` · `Medical Practice` · `Mental Health Care` · `Military` · `Mining & Metals` · `Mobile Games` · `Motion Pictures and Film` · `Museums and Institutions` · `Music` · `Nanotechnology` · `Newspapers` · `Nonprofit Organization Management` · `Oil & Energy` · `Online Media` · `Other` · `Outsourcing/Offshoring` · `Package/Freight Delivery` · `Packaging and Containers` · `Paper & Forest Products` · `Performing Arts` · `Pharmaceuticals` · `Philanthropy` · `Photography` · `Plastics` · `Political Organization` · `Primary/Secondary Education` · `Printing` · `Professional Training & Coaching` · `Program Development` · `Public Policy` · `Public Relations and Communications` · `Public Safety` · `Publishing` · `Railroad Manufacture` · `Ranching` · `Real Estate` · `Recreational Facilities and Services` · `Religious Institutions` · `Renewables & Environment` · `Research` · `Restaurants` · `Retail` · `SaaS` · `Security and Investigations` · `Semiconductors` · `Shipbuilding` · `Sporting Goods` · `Sports` · `Staffing and Recruiting` · `Supermarkets` · `Telecommunications` · `Textiles` · `Think Tanks` · `Tobacco` · `Translation and Localization` · `Transportation/Trucking/Railroad` · `Utilities` · `Venture Capital & Private Equity` · `Veterinary` · `Warehousing` · `Wholesale` · `Wine and Spirits` · `Wireless` · `Writing and Editing`
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "search_people",
"title": "Search people",
"annotations": {
"title": "Search people",
"readOnlyHint": true,
"destructiveHint": false,
"idempotentHint": false,
"openWorldHint": false
},
"inputSchema": {
"type": "object",
"properties": {
"websiteId": {
"type": "string",
"description": "Website ID from list_websites. The search runs under this website."
},
"query": {
"type": "object",
"description": "Search filters as one flat object. Every field is optional; combine them to narrow the search.",
"properties": {
"titles": {
"type": "array",
"items": {
"type": "string"
},
"description": "Job titles to match, e.g. [\"VP of Marketing\", \"Head of Growth\"]."
},
"companies": {
"type": "array",
"items": {
"type": "string"
},
"description": "Company names or domains, e.g. [\"acme.example\"]."
},
"locations": {
"type": "array",
"items": {
"type": "string",
"enum": [
"Afghanistan",
"Åland Islands",
"Albania",
"Algeria",
"American Samoa",
"Andorra",
"Angola",
"Anguilla",
"Antarctica",
"Antigua and Barbuda",
"Argentina",
"Armenia",
"Aruba",
"Australia",
"Austria",
"Azerbaijan",
"The Bahamas",
"Bahrain",
"Bangladesh",
"Barbados",
"Belarus",
"Belgium",
"Belize",
"Benin",
"Bermuda",
"Bhutan",
"Bolivia",
"Bosnia and Herzegovina",
"Botswana",
"Bouvet Island",
"Brazil",
"British Indian Ocean Territory",
"Brunei",
"Bulgaria",
"Burkina Faso",
"Burundi",
"Cambodia",
"Cameroon",
"Canada",
"Cape Verde",
"Cayman Islands",
"Central African Republic",
"Chad",
"Chile",
"China",
"Christmas Island",
"Cocos (Keeling) Islands",
"Colombia",
"Comoros",
"Republic of the Congo",
"Cook Islands",
"Costa Rica",
"Cote d'Ivoire",
"Croatia",
"Cuba",
"Cyprus",
"Czechia",
"Denmark",
"Djibouti",
"Dominica",
"Dominican Republic",
"Ecuador",
"Egypt",
"El Salvador",
"Equatorial Guinea",
"Eritrea",
"Estonia",
"Ethiopia",
"Falkland Islands (Islas Malvinas)",
"Faroe Islands",
"Fiji",
"Finland",
"France",
"French Guiana",
"French Polynesia",
"French Southern and Antarctic Lands",
"Gabon",
"The Gambia",
"Georgia",
"Germany",
"Ghana",
"Gibraltar",
"Greece",
"Greenland",
"Grenada",
"Guadeloupe",
"Guam",
"Guatemala",
"Guernsey",
"Guinea",
"Guinea-Bissau",
"Guyana",
"Haiti",
"Heard Island and McDonald Islands",
"Holy See (Vatican City)",
"Honduras",
"Hong Kong",
"Hungary",
"Iceland",
"India",
"Indonesia",
"Iran",
"Iraq",
"Ireland",
"Isle of Man",
"Israel",
"Italy",
"Jamaica",
"Japan",
"Jersey",
"Jordan",
"Kazakhstan",
"Kenya",
"Kiribati",
"North Korea",
"South Korea",
"Kuwait",
"Kyrgyzstan",
"Laos",
"Latvia",
"Lebanon",
"Lesotho",
"Liberia",
"Libya",
"Liechtenstein",
"Lithuania",
"Luxembourg",
"Macau",
"North Macedonia",
"Madagascar",
"Malawi",
"Malaysia",
"Maldives",
"Mali",
"Malta",
"Marshall Islands",
"Martinique",
"Mauritania",
"Mauritius",
"Mayotte",
"Mexico",
"Federated States of Micronesia",
"Moldova",
"Monaco",
"Mongolia",
"Montserrat",
"Morocco",
"Mozambique",
"Myanmar (Burma)",
"Namibia",
"Nauru",
"Nepal",
"Netherlands",
"Netherlands Antilles",
"New Caledonia",
"New Zealand",
"Nicaragua",
"Niger",
"Nigeria",
"Niue",
"Norfolk Island",
"Northern Mariana Islands",
"Norway",
"Oman",
"Pakistan",
"Palau",
"Palestinian Territory",
"Panama",
"Papua New Guinea",
"Paraguay",
"Peru",
"Philippines",
"Pitcairn Islands",
"Poland",
"Portugal",
"Puerto Rico",
"Qatar",
"Reunion",
"Romania",
"Russia",
"Rwanda",
"Saint Helena",
"Saint Kitts and Nevis",
"Saint Lucia",
"Saint Pierre and Miquelon",
"Saint Vincent and the Grenadines",
"Western Samoa",
"San Marino",
"Sao Tome and Principe",
"Saudi Arabia",
"Senegal",
"Montenegro",
"Serbia",
"Seychelles",
"Sierra Leone",
"Singapore",
"Slovakia",
"Slovenia",
"Solomon Islands",
"Somalia",
"South Africa",
"South Georgia and the South Sandwich Islands",
"Spain",
"Sri Lanka",
"Sudan",
"Suriname",
"Svalbard",
"Eswatini",
"Sweden",
"Switzerland",
"Syria",
"Taiwan",
"Tajikistan",
"Tanzania",
"Thailand",
"Timor-Leste",
"Togo",
"Tokelau",
"Tonga",
"Trinidad and Tobago",
"Tunisia",
"Turkey",
"Turkmenistan",
"Turks and Caicos Islands",
"Tuvalu",
"Uganda",
"Ukraine",
"United Arab Emirates",
"United Kingdom",
"United States",
"United States Minor Outlying Islands",
"Uruguay",
"Uzbekistan",
"Vanuatu",
"Venezuela",
"Vietnam",
"British Virgin Islands",
"Virgin Islands",
"Wallis and Futuna",
"Western Sahara",
"Yemen",
"Zambia",
"Zimbabwe",
"Africa",
"Asia",
"Europe",
"North America",
"Oceania",
"South America"
]
},
"description": "Country names, e.g. [\"United States\"]; continents also accepted. Filters on the company HQ, not where the person lives."
},
"seniorities": {
"type": "array",
"items": {
"type": "string",
"enum": [
"Intern",
"Manager",
"Director",
"VP",
"Employee",
"C-Level"
]
},
"description": "Seniority levels: Intern, Employee, Manager, Director, VP or C-Level."
},
"departments": {
"type": "array",
"items": {
"type": "string",
"enum": [
"Administrative Department",
"Consulting Department",
"Creative Department",
"Customer Service Department",
"University Department",
"Engineering Department",
"CEO Department",
"Finance Department",
"HR Department",
"Healthcare Department",
"IT Department",
"Legal Department",
"Logistics Department",
"Maintenance Department",
"Marketing Department",
"Operations Department",
"Other Department",
"Production Department",
"Program and Project Management Department",
"Purchasing Department",
"Quality Assurance Department",
"Sales Department"
]
},
"description": "Departments, e.g. [\"Marketing Department\", \"Sales Department\"]. Only the listed values are accepted."
},
"industries": {
"type": "array",
"items": {
"type": "string",
"enum": [
"Accounting",
"Airlines/Aviation",
"Alternative Dispute Resolution",
"Alternative Medicine",
"Animation",
"Apparel & Fashion",
"Architecture & Planning",
"Artists and Writers",
"Arts and Crafts",
"Automotive",
"Aviation & Aerospace",
"Banking",
"Biotechnology",
"Broadcast Media",
"Building Materials",
"Business Consulting and Services",
"Business Supplies and Equipment",
"Capital Markets",
"Chemicals",
"Civic & Social Organization",
"Civil Engineering",
"Commercial Real Estate",
"Computer & Network Security",
"Computer Games",
"Computer Hardware",
"Computer Networking",
"Computer Software",
"Construction",
"Consumer Electronics",
"Consumer Goods",
"Consumer Services",
"Cosmetics",
"Dairy",
"Defense & Space",
"Design",
"Education Management",
"eCommerce",
"E-Learning",
"Electrical/Electronic Manufacturing",
"Entertainment",
"Environmental Services",
"Events Services",
"Executive Office",
"Facilities Services",
"Farming",
"Financial Services",
"Fine Art",
"Fishery",
"Food & Beverages",
"Food Production",
"Fund-Raising",
"Furniture",
"Gambling & Casinos",
"Glass, Ceramics & Concrete",
"Government Administration",
"Government Relations",
"Graphic Design",
"Health, Wellness and Fitness",
"Higher Education",
"Hospital & Health Care",
"Hospitality",
"Human Resources",
"Import and Export",
"Individual & Family Services",
"Industrial Automation",
"Information Services",
"Information Technology and Services",
"Insurance",
"International Affairs",
"International Trade and Development",
"Internet",
"Internet Marketplace Platforms",
"Investment Banking",
"Investment Management",
"Judiciary",
"Law Enforcement",
"Law Practice",
"Legal Services",
"Legislative Office",
"Leisure, Travel & Tourism",
"Libraries",
"Logistics and Supply Chain",
"Luxury Goods & Jewelry",
"Machinery",
"Management Consulting",
"Maritime",
"Marketing and Advertising",
"Market Research",
"Mechanical or Industrial Engineering",
"Media Production",
"Medical Devices",
"Medical Practice",
"Mental Health Care",
"Military",
"Mining & Metals",
"Mobile Games",
"Motion Pictures and Film",
"Museums and Institutions",
"Music",
"Nanotechnology",
"Newspapers",
"Nonprofit Organization Management",
"Oil & Energy",
"Online Media",
"Other",
"Outsourcing/Offshoring",
"Package/Freight Delivery",
"Packaging and Containers",
"Paper & Forest Products",
"Performing Arts",
"Pharmaceuticals",
"Philanthropy",
"Photography",
"Plastics",
"Political Organization",
"Primary/Secondary Education",
"Printing",
"Professional Training & Coaching",
"Program Development",
"Public Policy",
"Public Relations and Communications",
"Public Safety",
"Publishing",
"Railroad Manufacture",
"Ranching",
"Real Estate",
"Recreational Facilities and Services",
"Religious Institutions",
"Renewables & Environment",
"Research",
"Restaurants",
"Retail",
"SaaS",
"Security and Investigations",
"Semiconductors",
"Shipbuilding",
"Sporting Goods",
"Sports",
"Staffing and Recruiting",
"Supermarkets",
"Telecommunications",
"Textiles",
"Think Tanks",
"Tobacco",
"Translation and Localization",
"Transportation/Trucking/Railroad",
"Utilities",
"Venture Capital & Private Equity",
"Veterinary",
"Warehousing",
"Wholesale",
"Wine and Spirits",
"Wireless",
"Writing and Editing"
]
},
"description": "Company industries, e.g. [\"Computer Software\"]. Only the listed values are accepted."
},
"technologies": {
"type": "array",
"items": {
"type": "string"
},
"description": "Technologies the company uses, e.g. [\"Salesforce\"]."
},
"employeesMin": {
"type": "number",
"minimum": 1,
"description": "Minimum company headcount (whole number)."
},
"employeesMax": {
"type": "number",
"minimum": 1,
"description": "Maximum company headcount (whole number)."
},
"page": {
"type": "number",
"minimum": 1,
"description": "Page number, starting at 1. Default 1."
},
"count": {
"type": "number",
"minimum": 1,
"description": "Results per page. Default 25."
}
}
}
},
"required": [
"websiteId",
"query"
]
}
}
```
## Used in [#used-in]
- [/docs/leads/prospector/search-companies/mcp](/docs/leads/prospector/search-companies/mcp)
# send_prospects_now (/docs/mcp/tools/send-prospects-now)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/send_prospects_now.mdx. */}
**Send to prospects now** · Changes data · Acts outside your account
Sends the next email of their sequence to the given prospects right away instead of at their scheduled time, within the mailbox limits.
| Connection | Account-owner URL or OAuth (not a team member URL) |
| --- | --- |
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `websiteId` | `string` | Yes | any | Website ID from list_websites. |
| `prospectIds` | `string[]` | Yes | any | Prospect IDs from get_prospects. |
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "send_prospects_now",
"title": "Send to prospects now",
"annotations": {
"title": "Send to prospects now",
"readOnlyHint": false,
"destructiveHint": false,
"idempotentHint": false,
"openWorldHint": true
},
"inputSchema": {
"type": "object",
"properties": {
"websiteId": {
"type": "string",
"description": "Website ID from list_websites."
},
"prospectIds": {
"type": "array",
"items": {
"type": "string"
},
"description": "Prospect IDs from get_prospects."
}
},
"required": [
"websiteId",
"prospectIds"
]
}
}
```
# send_slack_test_message (/docs/mcp/tools/send-slack-test-message)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/send_slack_test_message.mdx. */}
**Send a Slack test message** · Changes data · Acts outside your account
Posts a sample lead message (marked [Test Notification]) to a Slack channel so you can see how it looks. It is a real Slack message. Without channelName it uses the channel of the first active Slack automation. Answers \{ success, channel \} plus unknownFields when the template uses merge fields that don't exist; when Slack refuses (channel not found, app not invited to it, archived) it answers 400 with the reason and slackError.
| Connection | Account URL, team member URL or OAuth |
| --- | --- |
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `websiteId` | `string` | Yes | any | Website ID from list_websites. |
| `channelName` | `string` | No | any | Channel name from list_slack_channels, e.g. leads. Optional: defaults to the channel of the first active Slack automation. |
| `template` | `string` | No | any | Optional template to try instead of the saved one. |
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "send_slack_test_message",
"title": "Send a Slack test message",
"annotations": {
"title": "Send a Slack test message",
"readOnlyHint": false,
"destructiveHint": false,
"idempotentHint": false,
"openWorldHint": true
},
"inputSchema": {
"type": "object",
"properties": {
"websiteId": {
"type": "string",
"description": "Website ID from list_websites."
},
"channelName": {
"type": "string",
"description": "Channel name from list_slack_channels, e.g. leads. Optional: defaults to the channel of the first active Slack automation."
},
"template": {
"type": "string",
"description": "Optional template to try instead of the saved one."
}
},
"required": [
"websiteId"
]
}
}
```
# set_ai_scout_daily_limit (/docs/mcp/tools/set-ai-scout-daily-limit)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/set_ai_scout_daily_limit.mdx. */}
**Set the AI Scout daily limit** · Changes data
Sets how many AI Scout leads (= credits) the website may receive per day across all its scouts, 1 to 500. Returns the limit with how many were used and are left today.
| Connection | Account URL, team member URL or OAuth |
| --- | --- |
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `websiteId` | `string` | Yes | any | Website ID from list_websites. |
| `dailyLimit` | `number` | Yes | 1–500 | Leads per day across all scouts, 1-500. |
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "set_ai_scout_daily_limit",
"title": "Set the AI Scout daily limit",
"annotations": {
"title": "Set the AI Scout daily limit",
"readOnlyHint": false,
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false
},
"inputSchema": {
"type": "object",
"properties": {
"websiteId": {
"type": "string",
"description": "Website ID from list_websites."
},
"dailyLimit": {
"type": "number",
"minimum": 1,
"maximum": 500,
"description": "Leads per day across all scouts, 1-500."
}
},
"required": [
"websiteId",
"dailyLimit"
]
}
}
```
# set_auto_topup (/docs/mcp/tools/set-auto-topup)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/set_auto_topup.mdx. */}
**Set auto top-up** · Changes data · Acts outside your account
Turns auto top-up on or off and sets the pack of leads bought each time credits run out and the monthly cap in USD. When on, the card on file is charged automatically up to the cap. Account owners and billing admins only. Returns the same summary as get_auto_topup: when eligible is false (a trial or lifetime plan, a paused plan or no card on file) the setting is saved but nothing will be bought, so tell the user.
| Connection | Account-owner URL or OAuth (not a team member URL) |
| --- | --- |
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `websiteId` | `string` | No | any | Optional, kept for older callers: auto top-up is set per account, so it changes the same setting for every website. |
| `enabled` | `boolean` | Yes | any | true to buy leads automatically, false to stop. |
| `packLeads` | `integer` | No | 1–100000 | Leads bought each time credits run out: a whole number from 1 to 100,000. Needed the first time you turn it on; the price per lead is your plan's (perLeadCents in get_auto_topup). |
| `capUsd` | `number` | No | min 1 | Most auto top-up may spend per billing cycle, in USD. At least your plan's monthly price (minCapUsd in get_auto_topup); a lower value is refused. Leave it out to keep the current limit. |
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "set_auto_topup",
"title": "Set auto top-up",
"annotations": {
"title": "Set auto top-up",
"readOnlyHint": false,
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": true
},
"inputSchema": {
"type": "object",
"properties": {
"websiteId": {
"type": "string",
"description": "Optional, kept for older callers: auto top-up is set per account, so it changes the same setting for every website."
},
"enabled": {
"type": "boolean",
"description": "true to buy leads automatically, false to stop."
},
"packLeads": {
"type": "integer",
"minimum": 1,
"maximum": 100000,
"description": "Leads bought each time credits run out: a whole number from 1 to 100,000. Needed the first time you turn it on; the price per lead is your plan's (perLeadCents in get_auto_topup)."
},
"capUsd": {
"type": "number",
"minimum": 1,
"description": "Most auto top-up may spend per billing cycle, in USD. At least your plan's monthly price (minCapUsd in get_auto_topup); a lower value is refused. Leave it out to keep the current limit."
}
},
"required": [
"enabled"
]
}
}
```
# set_country_blacklist (/docs/mcp/tools/set-country-blacklist)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/set_country_blacklist.mdx. */}
**Set blocked countries** · Deletes or overwrites data
Sets the countries whose visitors are never identified on this website. The list you send replaces the current one: get_country_blacklist first and send the full list; an empty list blocks nothing. Codes are two letters (DE, FR, US).
| Connection | Account URL, team member URL or OAuth |
| --- | --- |
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `websiteId` | `string` | Yes | any | Website ID from list_websites. |
| `countryCodes` | `string[]` | Yes | any | The full list of two-letter country codes to block. |
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "set_country_blacklist",
"title": "Set blocked countries",
"annotations": {
"title": "Set blocked countries",
"readOnlyHint": false,
"destructiveHint": true,
"idempotentHint": true,
"openWorldHint": false
},
"inputSchema": {
"type": "object",
"properties": {
"websiteId": {
"type": "string",
"description": "Website ID from list_websites."
},
"countryCodes": {
"type": "array",
"items": {
"type": "string"
},
"description": "The full list of two-letter country codes to block."
}
},
"required": [
"websiteId",
"countryCodes"
]
}
}
```
# set_crm_mappings (/docs/mcp/tools/set-crm-mappings)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/set_crm_mappings.mdx. */}
**Set CRM field mappings** · Deletes or overwrites data
Sets the field mappings for contacts or companies pushed to a CRM. The list you send replaces the current one; get_crm_mappings first and list_crm_variables for the fields.
| Connection | Account URL, team member URL or OAuth |
| --- | --- |
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `websiteId` | `string` | Yes | any | Website ID from list_websites. |
| `crm` | `string` | Yes | `hubspot`, `salesforce`, `pipedrive`, `zoho`, `gohighlevel` | The CRM. |
| `objectType` | `string` | Yes | `contact`, `company` | contact or company. |
| `mappings` | `object[]` | Yes | any | The full list for this CRM and object type; it replaces what is saved (an empty list clears it). |
| `mappings[].crmField` | `string` | Yes | any | The CRM field name (its API name, e.g. firstname in HubSpot). |
| `mappings[].crmFieldLabel` | `string` | No | any | Optional label shown in the dashboard; defaults to crmField. |
| `mappings[].valueType` | `string` | No | default "variable" · `variable`, `static` | variable (fill from the lead, default) or static (the same text every time). |
| `mappings[].variable` | `string` | No | [40 values](#accepted-values) | The lead field when valueType is variable, from list_crm_variables. |
| `mappings[].staticValue` | `string` | No | any | The fixed text when valueType is static. |
| `mappings[].enabled` | `boolean` | No | default true | false keeps the row but skips it (default true). |
## Accepted values [#accepted-values]
The exact values these fields take; anything else is refused.
### `mappings[].variable` [#mappingsvariable]
`lead.person.firstName` · `lead.person.lastName` · `lead.person.businessEmail` · `lead.person.personalEmail` · `lead.person.phone` · `lead.person.position` · `lead.person.linkedin` · `lead.person.department` · `lead.person.seniority` · `lead.company.name` · `lead.company.domain` · `lead.company.phone` · `lead.company.city` · `lead.company.state` · `lead.company.country` · `lead.company.countryCode` · `lead.company.industry` · `lead.company.sector` · `lead.company.employees` · `lead.company.employeesRange` · `lead.company.estimatedRevenue` · `lead.company.foundedYear` · `lead.company.linkedinPage` · `lead.company.description` · `lead.visit.pageCount` · `lead.visit.pageList` · `lead.visit.sessionCount` · `lead.visit.ipAddress` · `lead.visit.city` · `lead.visit.state` · `lead.visit.countryCode` · `lead.utm.source` · `lead.utm.medium` · `lead.utm.campaign` · `lead.utm.term` · `lead.utm.referrer` · `lead.score` · `lead.firstSeen` · `lead.lastSeen` · `lead.contactType`
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "set_crm_mappings",
"title": "Set CRM field mappings",
"annotations": {
"title": "Set CRM field mappings",
"readOnlyHint": false,
"destructiveHint": true,
"idempotentHint": true,
"openWorldHint": false
},
"inputSchema": {
"type": "object",
"properties": {
"websiteId": {
"type": "string",
"description": "Website ID from list_websites."
},
"crm": {
"type": "string",
"enum": [
"hubspot",
"salesforce",
"pipedrive",
"zoho",
"gohighlevel"
],
"description": "The CRM."
},
"objectType": {
"type": "string",
"enum": [
"contact",
"company"
],
"description": "contact or company."
},
"mappings": {
"type": "array",
"items": {
"type": "object",
"properties": {
"crmField": {
"type": "string",
"description": "The CRM field name (its API name, e.g. firstname in HubSpot)."
},
"crmFieldLabel": {
"type": "string",
"description": "Optional label shown in the dashboard; defaults to crmField."
},
"valueType": {
"type": "string",
"enum": [
"variable",
"static"
],
"default": "variable",
"description": "variable (fill from the lead, default) or static (the same text every time)."
},
"variable": {
"type": "string",
"enum": [
"lead.person.firstName",
"lead.person.lastName",
"lead.person.businessEmail",
"lead.person.personalEmail",
"lead.person.phone",
"lead.person.position",
"lead.person.linkedin",
"lead.person.department",
"lead.person.seniority",
"lead.company.name",
"lead.company.domain",
"lead.company.phone",
"lead.company.city",
"lead.company.state",
"lead.company.country",
"lead.company.countryCode",
"lead.company.industry",
"lead.company.sector",
"lead.company.employees",
"lead.company.employeesRange",
"lead.company.estimatedRevenue",
"lead.company.foundedYear",
"lead.company.linkedinPage",
"lead.company.description",
"lead.visit.pageCount",
"lead.visit.pageList",
"lead.visit.sessionCount",
"lead.visit.ipAddress",
"lead.visit.city",
"lead.visit.state",
"lead.visit.countryCode",
"lead.utm.source",
"lead.utm.medium",
"lead.utm.campaign",
"lead.utm.term",
"lead.utm.referrer",
"lead.score",
"lead.firstSeen",
"lead.lastSeen",
"lead.contactType"
],
"description": "The lead field when valueType is variable, from list_crm_variables."
},
"staticValue": {
"type": "string",
"description": "The fixed text when valueType is static."
},
"enabled": {
"type": "boolean",
"default": true,
"description": "false keeps the row but skips it (default true)."
}
},
"required": [
"crmField"
]
},
"description": "The full list for this CRM and object type; it replaces what is saved (an empty list clears it)."
}
},
"required": [
"websiteId",
"crm",
"objectType",
"mappings"
]
}
}
```
# set_domain_auto_renew (/docs/mcp/tools/set-domain-auto-renew)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/set_domain_auto_renew.mdx. */}
**Set domain auto-renew** · Changes data · Acts outside your account
Turns automatic yearly renewal of a sending domain on or off. Off: the domain and its mailboxes stop working when it expires.
| Connection | Account-owner URL or OAuth (not a team member URL) |
| --- | --- |
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `websiteId` | `string` | Yes | any | Website ID from list_websites. |
| `domainId` | `string` | Yes | any | Domain ID from list_domains. |
| `autoRenew` | `boolean` | Yes | any | true to renew every year. |
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "set_domain_auto_renew",
"title": "Set domain auto-renew",
"annotations": {
"title": "Set domain auto-renew",
"readOnlyHint": false,
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": true
},
"inputSchema": {
"type": "object",
"properties": {
"websiteId": {
"type": "string",
"description": "Website ID from list_websites."
},
"domainId": {
"type": "string",
"description": "Domain ID from list_domains."
},
"autoRenew": {
"type": "boolean",
"description": "true to renew every year."
}
},
"required": [
"websiteId",
"domainId",
"autoRenew"
]
}
}
```
# set_linkedin_keyword_status (/docs/mcp/tools/set-linkedin-keyword-status)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/set_linkedin_keyword_status.mdx. */}
**Pause or resume a LinkedIn keyword** · Changes data
Pauses or resumes watching one LinkedIn keyword. Paused keywords find no new people; the leads they already found stay.
| Connection | Account URL, team member URL or OAuth |
| --- | --- |
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `websiteId` | `string` | Yes | any | Website ID from list_websites. |
| `keywordId` | `string` | Yes | any | Keyword ID from list_linkedin_keywords. |
| `status` | `string` | Yes | `active`, `paused` | active or paused. |
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "set_linkedin_keyword_status",
"title": "Pause or resume a LinkedIn keyword",
"annotations": {
"title": "Pause or resume a LinkedIn keyword",
"readOnlyHint": false,
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false
},
"inputSchema": {
"type": "object",
"properties": {
"websiteId": {
"type": "string",
"description": "Website ID from list_websites."
},
"keywordId": {
"type": "string",
"description": "Keyword ID from list_linkedin_keywords."
},
"status": {
"type": "string",
"enum": [
"active",
"paused"
],
"description": "active or paused."
}
},
"required": [
"websiteId",
"keywordId",
"status"
]
}
}
```
# set_page_tracking_rules (/docs/mcp/tools/set-page-tracking-rules)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/set_page_tracking_rules.mdx. */}
**Set which pages are tracked** · Deletes or overwrites data
Sets the page rules of a website. In exclude mode visitors on matching pages are not identified (e.g. careers or login pages); in include mode only visitors on matching pages are. The rules you send replace the current ones; an empty list removes them. Rules that could never match are refused with the reason.
| Connection | Account URL, team member URL or OAuth |
| --- | --- |
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `websiteId` | `string` | Yes | any | Website ID from list_websites. |
| `mode` | `string` | No | `exclude`, `include` | exclude (default) or include. |
| `rules` | `object[]` | Yes | any | The full list of rules. |
| `rules[].type` | `string` | Yes | `starts-with`, `ends-with`, `contains`, `does-not-contain` | starts-with, ends-with, contains or does-not-contain. |
| `rules[].url` | `string` | Yes | any | The part of the page URL to match, e.g. /careers. |
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "set_page_tracking_rules",
"title": "Set which pages are tracked",
"annotations": {
"title": "Set which pages are tracked",
"readOnlyHint": false,
"destructiveHint": true,
"idempotentHint": true,
"openWorldHint": false
},
"inputSchema": {
"type": "object",
"properties": {
"websiteId": {
"type": "string",
"description": "Website ID from list_websites."
},
"mode": {
"type": "string",
"enum": [
"exclude",
"include"
],
"description": "exclude (default) or include."
},
"rules": {
"type": "array",
"items": {
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"starts-with",
"ends-with",
"contains",
"does-not-contain"
],
"description": "starts-with, ends-with, contains or does-not-contain."
},
"url": {
"type": "string",
"description": "The part of the page URL to match, e.g. /careers."
}
},
"required": [
"type",
"url"
]
},
"description": "The full list of rules."
}
},
"required": [
"websiteId",
"rules"
]
}
}
```
# set_session_recording (/docs/mcp/tools/set-session-recording)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/set_session_recording.mdx. */}
**Turn session recordings on or off** · Changes data
Turns session recordings on or off for one website. When on, visits are recorded so you can replay what a lead did; when off, no new recordings are made and existing ones stay until they expire.
| Connection | Account URL, team member URL or OAuth |
| --- | --- |
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `websiteId` | `string` | Yes | any | Website ID from list_websites. |
| `enabled` | `boolean` | Yes | any | true to record visits, false to stop. |
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "set_session_recording",
"title": "Turn session recordings on or off",
"annotations": {
"title": "Turn session recordings on or off",
"readOnlyHint": false,
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false
},
"inputSchema": {
"type": "object",
"properties": {
"websiteId": {
"type": "string",
"description": "Website ID from list_websites."
},
"enabled": {
"type": "boolean",
"description": "true to record visits, false to stop."
}
},
"required": [
"websiteId",
"enabled"
]
}
}
```
# set_slack_message_template (/docs/mcp/tools/set-slack-message-template)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/set_slack_message_template.mdx. */}
**Set the Slack message template** · Changes data
Changes the template of the message posted to Slack for each lead (Slack formatting: *bold*, _italic_). Merge fields are filled per lead and left empty when unknown: \{\{lead.company.name\}\}, \{\{lead.company.domain\}\}, \{\{lead.company.industry\}\}, \{\{lead.company.employees\}\}, \{\{lead.person.firstName\}\}, \{\{lead.person.lastName\}\}, \{\{lead.person.businessEmail\}\}, \{\{lead.person.position\}\}, \{\{lead.person.linkedin\}\}, \{\{lead.visit.pageList\}\}, \{\{lead.utm.source\}\} and the other lead.* fields of get_slack_message_template's default. Up to 3000 characters; an empty template goes back to the default. Answers \{ success \} plus unknownFields when the template uses merge fields that don't exist (they would show empty).
| Connection | Account URL, team member URL or OAuth |
| --- | --- |
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `websiteId` | `string` | Yes | any | Website ID from list_websites. |
| `template` | `string` | Yes | max 3000 characters | The message: Slack formatting (*bold*, _italic_) and merge fields like \{\{lead.company.name\}\} (see mergeFields in get_slack_message_template). Up to 3000 characters; an empty string goes back to the default. |
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "set_slack_message_template",
"title": "Set the Slack message template",
"annotations": {
"title": "Set the Slack message template",
"readOnlyHint": false,
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false
},
"inputSchema": {
"type": "object",
"properties": {
"websiteId": {
"type": "string",
"description": "Website ID from list_websites."
},
"template": {
"type": "string",
"maxLength": 3000,
"description": "The message: Slack formatting (*bold*, _italic_) and merge fields like {{lead.company.name}} (see mergeFields in get_slack_message_template). Up to 3000 characters; an empty string goes back to the default."
}
},
"required": [
"websiteId",
"template"
]
}
}
```
# set_website_billing_mode (/docs/mcp/tools/set-website-billing-mode)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/set_website_billing_mode.mdx. */}
**Set a website's trial or paid mode** · Changes data
For websites you run for your own clients: start a trial until a date (its leads go to 0 when it ends), switch to paid (the leads refill to the website's limit every month on refreshOn, then the date moves on a month) or stop the monthly refill when a client cancels. Set the leads themselves with set_website_limits.
| Connection | Account-owner URL or OAuth (not a team member URL) |
| --- | --- |
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `websiteId` | `string` | Yes | any | Website ID from list_websites. |
| `mode` | `string` | Yes | `trial`, `paid`, `stop_refill` | trial, paid or stop_refill. |
| `trialEndsAt` | `string` | No | any | When the trial ends (ISO date). Required for trial. |
| `refreshOn` | `string` | No | any | The client's next billing date (ISO date). Required for paid. |
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "set_website_billing_mode",
"title": "Set a website's trial or paid mode",
"annotations": {
"title": "Set a website's trial or paid mode",
"readOnlyHint": false,
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false
},
"inputSchema": {
"type": "object",
"properties": {
"websiteId": {
"type": "string",
"description": "Website ID from list_websites."
},
"mode": {
"type": "string",
"enum": [
"trial",
"paid",
"stop_refill"
],
"description": "trial, paid or stop_refill."
},
"trialEndsAt": {
"type": "string",
"description": "When the trial ends (ISO date). Required for trial."
},
"refreshOn": {
"type": "string",
"description": "The client's next billing date (ISO date). Required for paid."
}
},
"required": [
"websiteId",
"mode"
]
}
}
```
# set_website_limits (/docs/mcp/tools/set-website-limits)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/set_website_limits.mdx. */}
**Set a website's limits** · Changes data
Sets how many of the account's credits and mailboxes one website may use, for accounts that share them between websites (for example one website per client). The credits cannot go above what the account has left.
| Connection | Account-owner URL or OAuth (not a team member URL) |
| --- | --- |
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `websiteId` | `string` | Yes | any | Website ID from list_websites. |
| `credits` | `number` | Yes | min 0 | Credits this website may use per cycle. |
| `emailAccounts` | `number` | Yes | min 0 | Mailboxes this website may connect. |
| `resetCredits` | `boolean` | No | any | true refills what is left to the full allowance now (use it when a client pays). |
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "set_website_limits",
"title": "Set a website's limits",
"annotations": {
"title": "Set a website's limits",
"readOnlyHint": false,
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false
},
"inputSchema": {
"type": "object",
"properties": {
"websiteId": {
"type": "string",
"description": "Website ID from list_websites."
},
"credits": {
"type": "number",
"minimum": 0,
"description": "Credits this website may use per cycle."
},
"emailAccounts": {
"type": "number",
"minimum": 0,
"description": "Mailboxes this website may connect."
},
"resetCredits": {
"type": "boolean",
"description": "true refills what is left to the full allowance now (use it when a client pays)."
}
},
"required": [
"websiteId",
"credits",
"emailAccounts"
]
}
}
```
# set_website_tags (/docs/mcp/tools/set-website-tags)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/set_website_tags.mdx. */}
**Set a website's labels** · Changes data
Sets the labels of a website, used to group websites (for example by client or market) in the websites list. The list you send replaces the current one.
| Connection | Account URL, team member URL or OAuth |
| --- | --- |
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `websiteId` | `string` | Yes | any | Website ID from list_websites. |
| `tags` | `string[]` | Yes | any | The full list of labels. |
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "set_website_tags",
"title": "Set a website's labels",
"annotations": {
"title": "Set a website's labels",
"readOnlyHint": false,
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false
},
"inputSchema": {
"type": "object",
"properties": {
"websiteId": {
"type": "string",
"description": "Website ID from list_websites."
},
"tags": {
"type": "array",
"items": {
"type": "string"
},
"description": "The full list of labels."
}
},
"required": [
"websiteId",
"tags"
]
}
}
```
# spam_check_email (/docs/mcp/tools/spam-check-email)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/spam_check_email.mdx. */}
**Spam-check an email** · Read-only
Checks an email subject and body for words and patterns that send mail to spam, and returns a score with each issue and how to fix it. Nothing is sent. Use it before add_campaign_step or update_campaign_step.
| Connection | Account URL, team member URL or OAuth |
| --- | --- |
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `websiteId` | `string` | Yes | any | Website ID from list_websites. |
| `subject` | `string` | Yes | any | The subject line. |
| `body` | `string` | Yes | any | The email body (text or HTML). |
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "spam_check_email",
"title": "Spam-check an email",
"annotations": {
"title": "Spam-check an email",
"readOnlyHint": true,
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false
},
"inputSchema": {
"type": "object",
"properties": {
"websiteId": {
"type": "string",
"description": "Website ID from list_websites."
},
"subject": {
"type": "string",
"description": "The subject line."
},
"body": {
"type": "string",
"description": "The email body (text or HTML)."
}
},
"required": [
"websiteId",
"subject",
"body"
]
}
}
```
# stop_prospect (/docs/mcp/tools/stop-prospect)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/stop_prospect.mdx. */}
**Stop contact's sequence** · Deletes or overwrites data
Stop one prospect's email sequence: no further steps are sent and the prospect is marked manually-paused, keeping it and its history in the campaign. Use remove_prospect_from_campaign to delete it instead, or delete_campaign to end a whole campaign. Confirm with the user before calling. prospectId comes from get_prospects or add_prospect_to_campaign. Stopping never refunds anything. Returns stopped: true and the prospectId, or HTTP 404 when the prospect is not on this account.
| Connection | Account URL, team member URL or OAuth |
| --- | --- |
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `prospectId` | `string` | Yes | any | Prospect id (24 hex characters) from get_prospects or add_prospect_to_campaign. |
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "stop_prospect",
"title": "Stop contact's sequence",
"annotations": {
"title": "Stop contact's sequence",
"readOnlyHint": false,
"destructiveHint": true,
"idempotentHint": true,
"openWorldHint": false
},
"inputSchema": {
"type": "object",
"properties": {
"prospectId": {
"type": "string",
"description": "Prospect id (24 hex characters) from get_prospects or add_prospect_to_campaign."
}
},
"required": [
"prospectId"
]
}
}
```
## Used in [#used-in]
- [/docs/engage/campaign-contacts/mcp](/docs/engage/campaign-contacts/mcp)
# subscribe_to_intent_topic (/docs/mcp/tools/subscribe-to-intent-topic)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/subscribe_to_intent_topic.mdx. */}
**Subscribe to intent topic** · Changes data · Acts outside your account · Spends credits or money
Subscribes a website to an intent topic, so companies researching that topic start arriving as leads each day, up to the daily limit. If the website is already subscribed, the call updates the daily limit and resumes a paused subscription. Each new lead it delivers uses 1 credit, and new leads run the website's CRM pushes and automations. A company that is already a lead is merged into that lead at no charge. Confirm with the user before calling. Get topicSlug from get_intent_topics_catalog. Errors: 403 when intent signals are not enabled for the website, 404 when the topic is not in the catalog. Returns \{ result \} with the subscription.
| Connection | Account URL, team member URL or OAuth |
| --- | --- |
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `websiteId` | `string` | Yes | any | Website ID from list_websites. |
| `topicSlug` | `string` | Yes | any | Topic slug from get_intent_topics_catalog, e.g. "crm-software". Not case-sensitive. |
| `userDailyLimit` | `number` | No | any | Maximum leads per day from this topic. Positive whole number, capped at 5000. Default 20. |
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "subscribe_to_intent_topic",
"title": "Subscribe to intent topic",
"annotations": {
"title": "Subscribe to intent topic",
"readOnlyHint": false,
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": true
},
"inputSchema": {
"type": "object",
"properties": {
"websiteId": {
"type": "string",
"description": "Website ID from list_websites."
},
"topicSlug": {
"type": "string",
"description": "Topic slug from get_intent_topics_catalog, e.g. \"crm-software\". Not case-sensitive."
},
"userDailyLimit": {
"type": "number",
"description": "Maximum leads per day from this topic. Positive whole number, capped at 5000. Default 20."
}
},
"required": [
"websiteId",
"topicSlug"
]
}
}
```
# suggest_web_scraping_keywords (/docs/mcp/tools/suggest-web-scraping-keywords)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/suggest_web_scraping_keywords.mdx. */}
**Suggest Web Scraping keywords** · Read-only
Keyword ideas for Web Scraping: phrases the website's buyers would write about themselves on their own sites (never the seller's own category words). Suggestions are cached; regenerate=true asks for new ones. Nothing is saved: add the ones the user picks with update_web_scraping. Not on LTD plans.
| Connection | Account URL, team member URL or OAuth |
| --- | --- |
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `websiteId` | `string` | Yes | any | Website ID from list_websites. |
| `regenerate` | `boolean` | No | any | Ask for new ideas instead of the cached ones. |
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "suggest_web_scraping_keywords",
"title": "Suggest Web Scraping keywords",
"annotations": {
"title": "Suggest Web Scraping keywords",
"readOnlyHint": true,
"destructiveHint": false,
"idempotentHint": false,
"openWorldHint": false
},
"inputSchema": {
"type": "object",
"properties": {
"websiteId": {
"type": "string",
"description": "Website ID from list_websites."
},
"regenerate": {
"type": "boolean",
"description": "Ask for new ideas instead of the cached ones."
}
},
"required": [
"websiteId"
]
}
}
```
# sync_google_ads_audience_stats (/docs/mcp/tools/sync-google-ads-audience-stats)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/sync_google_ads_audience_stats.mdx. */}
**Refresh Google Ads audience stats** · Changes data
Fetches the latest impressions, clicks and conversions of an audience’s campaign from Google Ads.
| Connection | Account URL, team member URL or OAuth |
| --- | --- |
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `websiteId` | `string` | Yes | any | Website ID from list_websites. |
| `audienceId` | `string` | Yes | any | Audience ID from list_google_ads_audiences. |
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "sync_google_ads_audience_stats",
"title": "Refresh Google Ads audience stats",
"annotations": {
"title": "Refresh Google Ads audience stats",
"readOnlyHint": false,
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false
},
"inputSchema": {
"type": "object",
"properties": {
"websiteId": {
"type": "string",
"description": "Website ID from list_websites."
},
"audienceId": {
"type": "string",
"description": "Audience ID from list_google_ads_audiences."
}
},
"required": [
"websiteId",
"audienceId"
]
}
}
```
# tag_lead (/docs/mcp/tools/tag-lead)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/tag_lead.mdx. */}
**Tag a lead** · Changes data · Acts outside your account
Attach an existing tag to a lead. Get the tagId from list_tags, or make a new tag with create_tag first; leadId comes from get_leads. Adding a tag starts any of the website's automations that trigger on a tag being added, which can push the lead to a CRM, Slack, a webhook or an email campaign. Fails with 'Tag Id already exist' when the lead already has the tag. Remove a tag with remove_tags_from_lead. Returns status 'Successful'.
| Connection | Account URL, team member URL or OAuth |
| --- | --- |
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `leadId` | `string` | Yes | any | Lead id (the _id of a row returned by get_leads). |
| `tagId` | `string` | Yes | any | Tag id (24 hex characters) from list_tags or the tagId returned by create_tag. |
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "tag_lead",
"title": "Tag a lead",
"annotations": {
"title": "Tag a lead",
"readOnlyHint": false,
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": true
},
"inputSchema": {
"type": "object",
"properties": {
"leadId": {
"type": "string",
"description": "Lead id (the _id of a row returned by get_leads)."
},
"tagId": {
"type": "string",
"description": "Tag id (24 hex characters) from list_tags or the tagId returned by create_tag."
}
},
"required": [
"leadId",
"tagId"
]
}
}
```
# test_email_account (/docs/mcp/tools/test-email-account)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/test_email_account.mdx. */}
**Test mailbox settings** · Read-only · Acts outside your account
Connects to the SMTP and IMAP servers with these settings and says whether sending and reading work, without saving anything. Use it before add_email_account. Passwords are only used for the test.
| Connection | Account URL, team member URL or OAuth |
| --- | --- |
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `smtpEmail` | `string` | Yes | any | Login for sending, usually the mailbox address. |
| `smtpHost` | `string` | Yes | any | SMTP server, e.g. smtp.gmail.com. |
| `smtpPort` | `number` | Yes | 1–65535 | SMTP port, e.g. 465 or 587. |
| `smtpTLS` | `boolean` | Yes | any | true for SSL/TLS. |
| `imapEmail` | `string` | Yes | any | Login for reading replies, usually the mailbox address. |
| `imapHost` | `string` | Yes | any | IMAP server, e.g. imap.gmail.com. |
| `imapPort` | `number` | Yes | 1–65535 | IMAP port, usually 993. |
| `imapTLS` | `boolean` | Yes | any | true for SSL/TLS. |
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "test_email_account",
"title": "Test mailbox settings",
"annotations": {
"title": "Test mailbox settings",
"readOnlyHint": true,
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": true
},
"inputSchema": {
"type": "object",
"properties": {
"smtpEmail": {
"type": "string",
"description": "Login for sending, usually the mailbox address."
},
"smtpHost": {
"type": "string",
"description": "SMTP server, e.g. smtp.gmail.com."
},
"smtpPort": {
"type": "number",
"minimum": 1,
"maximum": 65535,
"description": "SMTP port, e.g. 465 or 587."
},
"smtpTLS": {
"type": "boolean",
"description": "true for SSL/TLS."
},
"imapEmail": {
"type": "string",
"description": "Login for reading replies, usually the mailbox address."
},
"imapHost": {
"type": "string",
"description": "IMAP server, e.g. imap.gmail.com."
},
"imapPort": {
"type": "number",
"minimum": 1,
"maximum": 65535,
"description": "IMAP port, usually 993."
},
"imapTLS": {
"type": "boolean",
"description": "true for SSL/TLS."
}
},
"required": [
"smtpEmail",
"smtpHost",
"smtpPort",
"smtpPassword",
"smtpTLS",
"imapEmail",
"imapHost",
"imapPort",
"imapPassword",
"imapTLS"
]
}
}
```
# test_webhook (/docs/mcp/tools/test-webhook)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/test_webhook.mdx. */}
**Test a webhook** · Changes data · Acts outside your account
Sends a sample lead, as automations send them, to a URL so you can check your endpoint receives and parses it. Returns the status your endpoint answered.
| Connection | Account URL, team member URL or OAuth |
| --- | --- |
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `websiteId` | `string` | Yes | any | Website ID from list_websites. |
| `webhook` | `string` | Yes | uri | The public http(s) URL to send the sample lead to (private or local addresses are refused). |
| `signalType` | `string` | No | default "visit" · `visit`, `topic`, `web_scraping` | Which sample to send, shaped like the automation that will use it: visit (a website visitor, default), topic (3rd-party intent) or web_scraping (a web-scraping signal). |
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "test_webhook",
"title": "Test a webhook",
"annotations": {
"title": "Test a webhook",
"readOnlyHint": false,
"destructiveHint": false,
"idempotentHint": false,
"openWorldHint": true
},
"inputSchema": {
"type": "object",
"properties": {
"websiteId": {
"type": "string",
"description": "Website ID from list_websites."
},
"webhook": {
"type": "string",
"format": "uri",
"description": "The public http(s) URL to send the sample lead to (private or local addresses are refused)."
},
"signalType": {
"type": "string",
"enum": [
"visit",
"topic",
"web_scraping"
],
"default": "visit",
"description": "Which sample to send, shaped like the automation that will use it: visit (a website visitor, default), topic (3rd-party intent) or web_scraping (a web-scraping signal)."
}
},
"required": [
"websiteId",
"webhook"
]
}
}
```
# toggle_automation (/docs/mcp/tools/toggle-automation)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/toggle_automation.mdx. */}
**Turn automation on or off** · Changes data · Acts outside your account
Switches an automation on or off without changing its setup. When on, it acts on every matching lead (Slack messages, CRM pushes, campaign emails…). Get automationId from list_automations. An unfinished draft cannot be switched on: the call returns 405 and the draft has to be finished in the app first. Returns the updated automation.
| Connection | Account URL, team member URL or OAuth |
| --- | --- |
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `automationId` | `string` | Yes | any | Automation _id from list_automations. |
| `isActive` | `boolean` | Yes | any | true switches it on, false switches it off. |
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "toggle_automation",
"title": "Turn automation on or off",
"annotations": {
"title": "Turn automation on or off",
"readOnlyHint": false,
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": true
},
"inputSchema": {
"type": "object",
"properties": {
"automationId": {
"type": "string",
"pattern": "^[0-9a-fA-F]{24}$",
"description": "Automation _id from list_automations."
},
"isActive": {
"type": "boolean",
"description": "true switches it on, false switches it off."
}
},
"required": [
"automationId",
"isActive"
]
}
}
```
## Used in [#used-in]
- [/docs/automations/automations/mcp](/docs/automations/automations/mcp)
# toggle_warmup (/docs/mcp/tools/toggle-warmup)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/toggle_warmup.mdx. */}
**Turn warmup on or off** · Changes data · Acts outside your account
Turn email warmup on or off for one mailbox. While on, the mailbox automatically exchanges AI-written warmup emails with other warmup mailboxes to build its sender reputation, so the owner will see these emails in it. Confirm with the user before turning it on. emailAccountId comes from list_email_accounts; check warmupNeedsFilter / warmupFilterVerified there, since a mailbox that needs an inbox filter only receives warmup once it is verified. Track results with get_warmup_stats. Returns status, warmupEnabled and a message.
| Connection | Account URL, team member URL or OAuth |
| --- | --- |
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `emailAccountId` | `string` | Yes | any | Mailbox id from list_email_accounts (_id). |
| `enabled` | `boolean` | Yes | any | true to turn warmup on, false to turn it off. |
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "toggle_warmup",
"title": "Turn warmup on or off",
"annotations": {
"title": "Turn warmup on or off",
"readOnlyHint": false,
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": true
},
"inputSchema": {
"type": "object",
"properties": {
"emailAccountId": {
"type": "string",
"description": "Mailbox id from list_email_accounts (_id)."
},
"enabled": {
"type": "boolean",
"description": "true to turn warmup on, false to turn it off."
}
},
"required": [
"emailAccountId",
"enabled"
]
}
}
```
# undo_lead_purge (/docs/mcp/tools/undo-lead-purge)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/undo_lead_purge.mdx. */}
**Undo a lead purge** · Changes data
Brings back the leads removed by the last purge_leads_below_bar, with their tags, comments and history as they were.
| Connection | Account URL, team member URL or OAuth |
| --- | --- |
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `websiteId` | `string` | Yes | any | Website ID from list_websites. |
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "undo_lead_purge",
"title": "Undo a lead purge",
"annotations": {
"title": "Undo a lead purge",
"readOnlyHint": false,
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false
},
"inputSchema": {
"type": "object",
"properties": {
"websiteId": {
"type": "string",
"description": "Website ID from list_websites."
}
},
"required": [
"websiteId"
]
}
}
```
# unmark_email_account_spam (/docs/mcp/tools/unmark-email-account-spam)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/unmark_email_account_spam.mdx. */}
**Clear a mailbox spam flag** · Changes data
Clears the flag set when a mailbox looked like it was going to spam, so it sends again. Fix the cause first (warmup, content, DNS) with get_warmup_health.
| Connection | Account URL, team member URL or OAuth |
| --- | --- |
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `websiteId` | `string` | Yes | any | Website ID from list_websites. |
| `emailAccountId` | `string` | Yes | any | Mailbox ID from list_email_accounts. |
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "unmark_email_account_spam",
"title": "Clear a mailbox spam flag",
"annotations": {
"title": "Clear a mailbox spam flag",
"readOnlyHint": false,
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false
},
"inputSchema": {
"type": "object",
"properties": {
"websiteId": {
"type": "string",
"description": "Website ID from list_websites."
},
"emailAccountId": {
"type": "string",
"description": "Mailbox ID from list_email_accounts."
}
},
"required": [
"websiteId",
"emailAccountId"
]
}
}
```
# update_account_tracking_settings (/docs/mcp/tools/update-account-tracking-settings)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/update_account_tracking_settings.mdx. */}
**Update account-wide tracking** · Changes data
Turns tracking options on or off for every website of the account at once: identify people, suggested contacts, personal emails, session recordings. Switching one off applies to every website.
| Connection | Account-owner URL or OAuth (not a team member URL) |
| --- | --- |
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `websiteId` | `string` | Yes | any | Website ID from list_websites. |
| `trackExactVisitors` | `boolean` | No | any | Identify the person, not only the company. |
| `trackCompanyWithSuggestedContacts` | `boolean` | No | any | Suggest contacts at companies without an identified person. |
| `trackPersonalEmails` | `boolean` | No | any | Keep leads with a personal email. |
| `sessionRecordingEnabled` | `boolean` | No | any | Record visits. |
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "update_account_tracking_settings",
"title": "Update account-wide tracking",
"annotations": {
"title": "Update account-wide tracking",
"readOnlyHint": false,
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false
},
"inputSchema": {
"type": "object",
"properties": {
"websiteId": {
"type": "string",
"description": "Website ID from list_websites."
},
"trackExactVisitors": {
"type": "boolean",
"description": "Identify the person, not only the company."
},
"trackCompanyWithSuggestedContacts": {
"type": "boolean",
"description": "Suggest contacts at companies without an identified person."
},
"trackPersonalEmails": {
"type": "boolean",
"description": "Keep leads with a personal email."
},
"sessionRecordingEnabled": {
"type": "boolean",
"description": "Record visits."
}
},
"required": [
"websiteId"
]
}
}
```
# update_ai_scout (/docs/mcp/tools/update-ai-scout)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/update_ai_scout.mdx. */}
**Update an AI Scout** · Changes data
Changes an AI Scout's name, description, people per day, minimum fit or sources. Only the fields you pass change.
| Connection | Account URL, team member URL or OAuth |
| --- | --- |
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `websiteId` | `string` | Yes | any | Website ID from list_websites. |
| `scoutId` | `string` | Yes | any | AI Scout ID from list_ai_scouts. |
| `name` | `string` | No | any | A short name; made from the description when left out. |
| `description` | `string` | No | any | Who to find, in a sentence or two: roles, industries, company size, where they talk (podcasts, YouTube, review sites). |
| `perDay` | `number` | No | `10`, `25`, `50`, `100` | People per day to deliver: 10, 25, 50 or 100. |
| `minFit` | `number` | No | 10–95 | Minimum fit score (10-95, default 70): people below it are skipped. |
| `sources` | `object[]` | No | any | Where the scout reads: Google searches, YouTube searches, playlists or creators, G2 categories. Made from the description when left out; get them first with plan_ai_scout. |
| `sources[].kind` | `string` | Yes | `google`, `youtube_search`, `youtube_playlist`, `youtube_creators`, `g2_category` | google, youtube_search, youtube_playlist, youtube_creators or g2_category. |
| `sources[].ref` | `string` | Yes | any | The search words, the playlist or channel link, or the G2 category link. |
| `sources[].label` | `string` | No | any | Optional. How the source is shown in the dashboard. |
| `sources[].active` | `boolean` | No | any | false to keep the source but stop reading it. |
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "update_ai_scout",
"title": "Update an AI Scout",
"annotations": {
"title": "Update an AI Scout",
"readOnlyHint": false,
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false
},
"inputSchema": {
"type": "object",
"properties": {
"websiteId": {
"type": "string",
"description": "Website ID from list_websites."
},
"scoutId": {
"type": "string",
"description": "AI Scout ID from list_ai_scouts."
},
"name": {
"type": "string",
"description": "A short name; made from the description when left out."
},
"description": {
"type": "string",
"description": "Who to find, in a sentence or two: roles, industries, company size, where they talk (podcasts, YouTube, review sites)."
},
"perDay": {
"type": "number",
"enum": [
10,
25,
50,
100
],
"description": "People per day to deliver: 10, 25, 50 or 100."
},
"minFit": {
"type": "number",
"minimum": 10,
"maximum": 95,
"description": "Minimum fit score (10-95, default 70): people below it are skipped."
},
"sources": {
"type": "array",
"items": {
"type": "object",
"properties": {
"kind": {
"type": "string",
"enum": [
"google",
"youtube_search",
"youtube_playlist",
"youtube_creators",
"g2_category"
],
"description": "google, youtube_search, youtube_playlist, youtube_creators or g2_category."
},
"ref": {
"type": "string",
"description": "The search words, the playlist or channel link, or the G2 category link."
},
"label": {
"type": "string",
"description": "Optional. How the source is shown in the dashboard."
},
"active": {
"type": "boolean",
"description": "false to keep the source but stop reading it."
}
},
"required": [
"kind",
"ref"
]
},
"description": "Where the scout reads: Google searches, YouTube searches, playlists or creators, G2 categories. Made from the description when left out; get them first with plan_ai_scout."
}
},
"required": [
"websiteId",
"scoutId"
]
}
}
```
# update_automation (/docs/mcp/tools/update-automation)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/update_automation.mdx. */}
**Update automation** · Changes data · Acts outside your account
Changes an existing automation: its name, rule, action settings or on/off state. Fields you leave out keep their current values, but a new actions object replaces all of the saved action settings. To only switch it on or off, use toggle_automation. Get automationId from list_automations, and read the current setup with get_automation first. Changes apply to every future matching lead, and an active LinkedIn campaign automation enrolls matching leads when saved. Confirm with the user when it changes where leads are sent. Returns the updated automation.
| Connection | Account URL, team member URL or OAuth |
| --- | --- |
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `automationId` | `string` | Yes | any | Automation _id from list_automations. |
| `name` | `string` | No | any | New name. |
| `trigger` | `object` | No | any | Rule fields to change (same values as create_automation); anything left out keeps its saved value. |
| `trigger.when` | `string` | No | [7 values](#accepted-values) | What starts it. |
| `trigger.then` | `string` | No | [16 values](#accepted-values) | The action: where matching leads go. |
| `trigger.trigger` | `string` | No | `only-on-first-visit`, `on-every-visit`, `none` | only-on-first-visit, on-every-visit or none. |
| `trigger.interval` | `string` | No | `immediately`, `after-session`, `daily`, `weekly`, `monthly` | immediately, after-session, daily, weekly or monthly. |
| `trigger.repeatWindowHours` | `integer` | No | [7 values](#accepted-values) | Act at most once per company or person in this many hours. |
| `trigger.dedupeScope` | `string` | No | `contact`, `company` | What counts as the same for the repeat limit: contact or company. |
| `trigger.contactSelectionStrategy` | `string` | No | `flexible-job-titles`, `exact-job-titles`, `flexible-find-at-least-one-job-titles` | How contacts are matched to the job titles: flexible-job-titles, exact-job-titles or flexible-find-at-least-one-job-titles. |
| `trigger.maxContactsToSend` | `integer` | No | min 1 | Most contacts sent per company (at least 1). |
| `trigger.emailVerification` | `object` | No | any | Which emails count: allowOnlyValidEmails, allowCatchAllEmails, allowGuessedEmails, allowWithoutEmails (true/false). |
| `trigger.filter` | `string` | No | any | A saved filter id from list_filters, or null to drop the filter. |
| `actions` | `object` | No | any | The action settings object, e.g. \{ "sentToSlack": \{ "sendMessagesTo": "leads" \} \}. Replaces all saved action settings. For HubSpot, \{ sentToHubspot: \{ createDeal: true, pipelineId, dealStageId \} \} also creates a deal per lead (ids from list_crm_pipelines). |
| `enabled` | `boolean` | No | any | true to activate, false to deactivate. |
## Accepted values [#accepted-values]
The exact values these fields take; anything else is refused.
### `trigger.when` [#triggerwhen]
`new-lead-is-identified` · `new-intent-data-triggered` · `new-prospector-lead` · `new-web-scraping-signal` · `new-scout-lead` · `new-linkedin-engagement` · `new-tag-added-to-lead`
### `trigger.then` [#triggerthen]
`send-to-slack` · `send-to-hubspot` · `send-to-pipedrive` · `send-to-salesforce` · `send-to-zoho` · `send-to-gohighlevel` · `trigger-webhook` · `send-to-zapier` · `send-to-clay` · `send-to-emailCampaign` · `send-to-linkedinCampaign` · `send-email-alert` · `send-csv-on-email` · `send-to-googleAdsCampaign` · `send-to-linkedinAdsAudience` · `send-to-metaAdsAudience`
### `trigger.repeatWindowHours` [#triggerrepeatwindowhours]
`12` · `24` · `72` · `168` · `720` · `2160` · `4320`
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "update_automation",
"title": "Update automation",
"annotations": {
"title": "Update automation",
"readOnlyHint": false,
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": true
},
"inputSchema": {
"type": "object",
"properties": {
"automationId": {
"type": "string",
"pattern": "^[0-9a-fA-F]{24}$",
"description": "Automation _id from list_automations."
},
"name": {
"type": "string",
"description": "New name."
},
"trigger": {
"type": "object",
"properties": {
"when": {
"type": "string",
"enum": [
"new-lead-is-identified",
"new-intent-data-triggered",
"new-prospector-lead",
"new-web-scraping-signal",
"new-scout-lead",
"new-linkedin-engagement",
"new-tag-added-to-lead"
],
"description": "What starts it."
},
"then": {
"type": "string",
"enum": [
"send-to-slack",
"send-to-hubspot",
"send-to-pipedrive",
"send-to-salesforce",
"send-to-zoho",
"send-to-gohighlevel",
"trigger-webhook",
"send-to-zapier",
"send-to-clay",
"send-to-emailCampaign",
"send-to-linkedinCampaign",
"send-email-alert",
"send-csv-on-email",
"send-to-googleAdsCampaign",
"send-to-linkedinAdsAudience",
"send-to-metaAdsAudience"
],
"description": "The action: where matching leads go."
},
"trigger": {
"type": "string",
"enum": [
"only-on-first-visit",
"on-every-visit",
"none"
],
"description": "only-on-first-visit, on-every-visit or none."
},
"interval": {
"type": "string",
"enum": [
"immediately",
"after-session",
"daily",
"weekly",
"monthly"
],
"description": "immediately, after-session, daily, weekly or monthly."
},
"repeatWindowHours": {
"type": "integer",
"enum": [
12,
24,
72,
168,
720,
2160,
4320
],
"description": "Act at most once per company or person in this many hours."
},
"dedupeScope": {
"type": "string",
"enum": [
"contact",
"company"
],
"description": "What counts as the same for the repeat limit: contact or company."
},
"contactSelectionStrategy": {
"type": "string",
"enum": [
"flexible-job-titles",
"exact-job-titles",
"flexible-find-at-least-one-job-titles"
],
"description": "How contacts are matched to the job titles: flexible-job-titles, exact-job-titles or flexible-find-at-least-one-job-titles."
},
"maxContactsToSend": {
"type": "integer",
"minimum": 1,
"description": "Most contacts sent per company (at least 1)."
},
"emailVerification": {
"type": "object",
"description": "Which emails count: allowOnlyValidEmails, allowCatchAllEmails, allowGuessedEmails, allowWithoutEmails (true/false)."
},
"filter": {
"type": "string",
"description": "A saved filter id from list_filters, or null to drop the filter."
}
},
"description": "Rule fields to change (same values as create_automation); anything left out keeps its saved value."
},
"actions": {
"type": "object",
"description": "The action settings object, e.g. { \"sentToSlack\": { \"sendMessagesTo\": \"leads\" } }. Replaces all saved action settings. For HubSpot, { sentToHubspot: { createDeal: true, pipelineId, dealStageId } } also creates a deal per lead (ids from list_crm_pipelines)."
},
"enabled": {
"type": "boolean",
"description": "true to activate, false to deactivate."
}
},
"required": [
"automationId"
]
}
}
```
# update_blog_article (/docs/mcp/tools/update-blog-article)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/update_blog_article.mdx. */}
**Edit blog article** · Changes data · Acts outside your account
Edits a blog article by saving a new version at the same URL (Optimize add-on). If the article is live, the new version goes live at once. status 'live' publishes a draft, and status 'draft' takes a live article offline. Only the fields you pass change. Uses one article from the monthly allowance; with none left it returns 400. Locked articles (guest posts, paid placements) are refused. Get articleId from list_blog_articles, and read the current text with get_blog_article first. Confirm with the user before changing a live article. Returns \{ article, url \}.
| Connection | Account-owner URL or OAuth (not a team member URL) |
| --- | --- |
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `websiteId` | `string` | Yes | any | Website ID from list_websites. |
| `articleId` | `string` | Yes | any | Article _id from list_blog_articles. |
| `title` | `string` | No | any | New title. |
| `html` | `string` | No | any | New body as HTML (p, h2, h3, ul/ol, blockquote, img, table). Replaces the whole body. |
| `metaDescription` | `string` | No | any | New search-result description. |
| `excerpt` | `string` | No | any | New short summary for the blog index. |
| `category` | `string` | No | any | New category name. |
| `coverImage` | `string` | No | any | New absolute cover image URL (http/https); other values clear it. |
| `status` | `string` | No | `live`, `draft` | 'live' publishes this version now; 'draft' takes the article offline. Leave it out to keep the current state. |
| `faq` | `object[]` | No | any | Full new FAQ list of \{ q, a \} objects. Replaces the saved FAQ. |
| `summary` | `string` | No | any | What this edit changes, shown in the version history. Default 'Edited by hand'. |
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "update_blog_article",
"title": "Edit blog article",
"annotations": {
"title": "Edit blog article",
"readOnlyHint": false,
"destructiveHint": false,
"idempotentHint": false,
"openWorldHint": true
},
"inputSchema": {
"type": "object",
"properties": {
"websiteId": {
"type": "string",
"description": "Website ID from list_websites."
},
"articleId": {
"type": "string",
"description": "Article _id from list_blog_articles."
},
"title": {
"type": "string",
"description": "New title."
},
"html": {
"type": "string",
"description": "New body as HTML (p, h2, h3, ul/ol, blockquote, img, table). Replaces the whole body."
},
"metaDescription": {
"type": "string",
"description": "New search-result description."
},
"excerpt": {
"type": "string",
"description": "New short summary for the blog index."
},
"category": {
"type": "string",
"description": "New category name."
},
"coverImage": {
"type": "string",
"description": "New absolute cover image URL (http/https); other values clear it."
},
"status": {
"type": "string",
"enum": [
"live",
"draft"
],
"description": "'live' publishes this version now; 'draft' takes the article offline. Leave it out to keep the current state."
},
"faq": {
"type": "array",
"items": {
"type": "object"
},
"description": "Full new FAQ list of { q, a } objects. Replaces the saved FAQ."
},
"summary": {
"type": "string",
"description": "What this edit changes, shown in the version history. Default 'Edited by hand'."
}
},
"required": [
"websiteId",
"articleId"
]
}
}
```
# update_campaign_step (/docs/mcp/tools/update-campaign-step)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/update_campaign_step.mdx. */}
**Edit campaign email** · Changes data
Rewrite one email (step) of an existing campaign: its subject, body and/or delay. Only the fields you pass change. Get campaignId from list_campaigns and templateId from get_campaign (emailCampaignTemplates[]._id); a templateId that is not a step of that campaign is refused. The edit is rejected (HTTP 400 with the reasons) when a merge field has no fallback or the template cannot render; nothing is saved then. Contacts parked in error-sending because of this step are retried after a successful save. Returns the updated step. Writing rules: Write the body as plain text, one paragraph per line, no blank lines between paragraphs (each line becomes one \; never add empty paragraphs or \
\
for spacing). Merge fields need a fallback, e.g. \{\{ first_name | there \}\}, \{\{ company_name | your company \}\}. End every body with \{\{sender_signature\}\} then \{\{unsubscribe_text\}\}, each on its own line, and nothing after them; never type your own sign-off or unsubscribe sentence.
| Connection | Account URL, team member URL or OAuth |
| --- | --- |
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `campaignId` | `string` | Yes | any | Email campaign id from list_campaigns. |
| `templateId` | `string` | Yes | any | Id of the step to edit, from get_campaign emailCampaignTemplates[]._id (24 hex characters). |
| `subject` | `string` | No | any | Optional new subject line. Merge fields need a fallback, e.g. \{\{ company_name \| your team \}\}. |
| `body` | `string` | No | any | Optional new body: plain text, one paragraph per line, ending with \{\{sender_signature\}\} then \{\{unsubscribe_text\}\}. |
| `delayDays` | `number` | No | any | Optional whole days to wait after the previous step. 0 for the first step. |
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "update_campaign_step",
"title": "Edit campaign email",
"annotations": {
"title": "Edit campaign email",
"readOnlyHint": false,
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false
},
"inputSchema": {
"type": "object",
"properties": {
"campaignId": {
"type": "string",
"description": "Email campaign id from list_campaigns."
},
"templateId": {
"type": "string",
"description": "Id of the step to edit, from get_campaign emailCampaignTemplates[]._id (24 hex characters)."
},
"subject": {
"type": "string",
"description": "Optional new subject line. Merge fields need a fallback, e.g. {{ company_name | your team }}."
},
"body": {
"type": "string",
"description": "Optional new body: plain text, one paragraph per line, ending with {{sender_signature}} then {{unsubscribe_text}}."
},
"delayDays": {
"type": "number",
"description": "Optional whole days to wait after the previous step. 0 for the first step."
}
},
"required": [
"campaignId",
"templateId"
]
}
}
```
# update_campaign (/docs/mcp/tools/update-campaign)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/update_campaign.mdx. */}
**Update a campaign** · Changes data · Acts outside your account
Renames a campaign, starts it (status active: emails start going out to its contacts) or pauses it, or changes its sending days (0 Sunday to 6 Saturday), hours (timeSlot start and end, 0-24), timezone or open/click tracking. Fields left out stay as they are. Confirm with the user before setting status active. Returns 404 when the campaign is not one of this website's.
| Connection | Account URL, team member URL or OAuth |
| --- | --- |
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `websiteId` | `string` | Yes | any | Website ID from list_websites (the campaign's website). |
| `campaignId` | `string` | Yes | any | campaignId from list_campaigns. |
| `name` | `string` | No | any | New name. |
| `status` | `string` | No | `active`, `paused` | active to start sending, paused to stop. |
| `daysRange` | `number[]` | No | 0–6 | Days to send on, 0 (Sunday) to 6 (Saturday). |
| `timeSlot` | `object` | No | any | Sending hours in the campaign timezone. |
| `timeSlot.start` | `number` | No | 0–23 | First hour, 0-23. |
| `timeSlot.end` | `number` | No | 1–24 | Last hour, 1-24. |
| `timezone` | `string` | No | any | IANA timezone, e.g. Europe/London. |
| `isTrackingEnabled` | `boolean` | No | any | Track opens and clicks. |
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "update_campaign",
"title": "Update a campaign",
"annotations": {
"title": "Update a campaign",
"readOnlyHint": false,
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": true
},
"inputSchema": {
"type": "object",
"properties": {
"websiteId": {
"type": "string",
"description": "Website ID from list_websites (the campaign's website)."
},
"campaignId": {
"type": "string",
"description": "campaignId from list_campaigns."
},
"name": {
"type": "string",
"description": "New name."
},
"status": {
"type": "string",
"enum": [
"active",
"paused"
],
"description": "active to start sending, paused to stop."
},
"daysRange": {
"type": "array",
"items": {
"type": "number",
"minimum": 0,
"maximum": 6
},
"description": "Days to send on, 0 (Sunday) to 6 (Saturday)."
},
"timeSlot": {
"type": "object",
"properties": {
"start": {
"type": "number",
"minimum": 0,
"maximum": 23,
"description": "First hour, 0-23."
},
"end": {
"type": "number",
"minimum": 1,
"maximum": 24,
"description": "Last hour, 1-24."
}
},
"description": "Sending hours in the campaign timezone."
},
"timezone": {
"type": "string",
"description": "IANA timezone, e.g. Europe/London."
},
"isTrackingEnabled": {
"type": "boolean",
"description": "Track opens and clicks."
}
},
"required": [
"websiteId",
"campaignId"
]
}
}
```
# update_email_account (/docs/mcp/tools/update-email-account)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/update_email_account.mdx. */}
**Update a mailbox** · Changes data
Changes a mailbox: the daily sending limit (queued emails are rescheduled to match), the sender name, company, position, phone and the HTML signature. Only the fields you pass change. Passwords and server settings change only in the dashboard.
| Connection | Account URL, team member URL or OAuth |
| --- | --- |
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `websiteId` | `string` | Yes | any | Website ID from list_websites. |
| `emailAccountId` | `string` | Yes | any | Mailbox ID from list_email_accounts. |
| `messagesPerDayLimit` | `number` | No | 1–500 | Emails per day (1-500); our own mailboxes have a lower cap. |
| `firstname` | `string` | No | any | Sender first name. |
| `lastname` | `string` | No | any | Sender last name. |
| `company` | `string` | No | any | Sender company. |
| `position` | `string` | No | any | Sender job title. |
| `phoneNumber` | `string` | No | any | Sender phone number. |
| `signatureHTML` | `string` | No | any | The signature, as HTML. |
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "update_email_account",
"title": "Update a mailbox",
"annotations": {
"title": "Update a mailbox",
"readOnlyHint": false,
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false
},
"inputSchema": {
"type": "object",
"properties": {
"websiteId": {
"type": "string",
"description": "Website ID from list_websites."
},
"emailAccountId": {
"type": "string",
"description": "Mailbox ID from list_email_accounts."
},
"messagesPerDayLimit": {
"type": "number",
"minimum": 1,
"maximum": 500,
"description": "Emails per day (1-500); our own mailboxes have a lower cap."
},
"firstname": {
"type": "string",
"description": "Sender first name."
},
"lastname": {
"type": "string",
"description": "Sender last name."
},
"company": {
"type": "string",
"description": "Sender company."
},
"position": {
"type": "string",
"description": "Sender job title."
},
"phoneNumber": {
"type": "string",
"description": "Sender phone number."
},
"signatureHTML": {
"type": "string",
"description": "The signature, as HTML."
}
},
"required": [
"websiteId",
"emailAccountId"
]
}
}
```
# update_filter (/docs/mcp/tools/update-filter)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/update_filter.mdx. */}
**Favourite a saved filter** · Changes data
Marks a saved leads filter as a favourite (shown first) or not. Returns 404 when the filter is not one of this website's.
| Connection | Account URL, team member URL or OAuth |
| --- | --- |
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `websiteId` | `string` | Yes | any | Website ID from list_websites. |
| `filterId` | `string` | Yes | any | _id from list_filters. |
| `isFavorite` | `boolean` | Yes | any | true to favourite it, false to un-favourite. |
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "update_filter",
"title": "Favourite a saved filter",
"annotations": {
"title": "Favourite a saved filter",
"readOnlyHint": false,
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false
},
"inputSchema": {
"type": "object",
"properties": {
"websiteId": {
"type": "string",
"description": "Website ID from list_websites."
},
"filterId": {
"type": "string",
"description": "_id from list_filters."
},
"isFavorite": {
"type": "boolean",
"description": "true to favourite it, false to un-favourite."
}
},
"required": [
"websiteId",
"filterId",
"isFavorite"
]
}
}
```
# update_icp (/docs/mcp/tools/update-icp)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/update_icp.mdx. */}
**Update ideal customer profile** · Changes data
Changes a website's ideal customer profile: target industries, sectors, HQ locations, headcount and revenue ranges. Only the fields you pass change; the rest keep their saved values. A list you pass replaces the saved list, so read get_icp first and send the full list you want. Costs nothing and only changes settings inside the account. Returns the saved ICP.
| Connection | Account URL, team member URL or OAuth |
| --- | --- |
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `websiteId` | `string` | Yes | any | Website ID from list_websites. |
| `industries` | `string[]` | No | any | Target industries; replaces the saved list, e.g. ["Computer Software"]. |
| `employeesMin` | `number` | No | any | Smallest company headcount to target (whole number). |
| `employeesMax` | `number` | No | any | Largest company headcount to target (whole number). |
| `locations` | `string[]` | No | any | Target countries; replaces the saved list, e.g. ["United States", "United Kingdom"]. |
| `sectors` | `string[]` | No | any | Target sectors; replaces the saved list. |
| `revenueMin` | `number` | No | any | Smallest annual revenue to target (number). |
| `revenueMax` | `number` | No | any | Largest annual revenue to target (number). |
| `excludedDomains` | `string[]` | No | any | Domains to exclude. Not saved today (see notes); use add_to_domain_blacklist to exclude domains. |
| `excludedIndustries` | `string[]` | No | any | Industries to exclude. Not saved today (see notes). |
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "update_icp",
"title": "Update ideal customer profile",
"annotations": {
"title": "Update ideal customer profile",
"readOnlyHint": false,
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false
},
"inputSchema": {
"type": "object",
"properties": {
"websiteId": {
"type": "string",
"description": "Website ID from list_websites."
},
"industries": {
"type": "array",
"items": {
"type": "string"
},
"description": "Target industries; replaces the saved list, e.g. [\"Computer Software\"]."
},
"employeesMin": {
"type": "number",
"description": "Smallest company headcount to target (whole number)."
},
"employeesMax": {
"type": "number",
"description": "Largest company headcount to target (whole number)."
},
"locations": {
"type": "array",
"items": {
"type": "string"
},
"description": "Target countries; replaces the saved list, e.g. [\"United States\", \"United Kingdom\"]."
},
"sectors": {
"type": "array",
"items": {
"type": "string"
},
"description": "Target sectors; replaces the saved list."
},
"revenueMin": {
"type": "number",
"description": "Smallest annual revenue to target (number)."
},
"revenueMax": {
"type": "number",
"description": "Largest annual revenue to target (number)."
},
"excludedDomains": {
"type": "array",
"items": {
"type": "string"
},
"description": "Domains to exclude. Not saved today (see notes); use add_to_domain_blacklist to exclude domains."
},
"excludedIndustries": {
"type": "array",
"items": {
"type": "string"
},
"description": "Industries to exclude. Not saved today (see notes)."
}
},
"required": [
"websiteId"
]
}
}
```
## Used in [#used-in]
- [/docs/qualify/icp](/docs/qualify/icp)
# update_intent_topic (/docs/mcp/tools/update-intent-topic)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/update_intent_topic.mdx. */}
**Pause or edit intent topic** · Changes data
Pauses or resumes an intent topic subscription, or changes its daily lead limit. Pausing stops new deliveries from that topic. To stop following a topic for good, use delete_intent_topic. Pass at least one of paused or userDailyLimit, otherwise the call returns 400. Returns 404 when the website is not subscribed to that topic. Returns \{ result \} with the updated subscription.
| Connection | Account URL, team member URL or OAuth |
| --- | --- |
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `websiteId` | `string` | Yes | any | Website ID from list_websites. |
| `topicSlug` | `string` | Yes | any | Slug of a subscribed topic, from list_intent_topics. |
| `paused` | `boolean` | No | any | true pauses deliveries, false resumes them. |
| `userDailyLimit` | `number` | No | any | New maximum leads per day. Positive whole number, capped at 5000. |
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "update_intent_topic",
"title": "Pause or edit intent topic",
"annotations": {
"title": "Pause or edit intent topic",
"readOnlyHint": false,
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false
},
"inputSchema": {
"type": "object",
"properties": {
"websiteId": {
"type": "string",
"description": "Website ID from list_websites."
},
"topicSlug": {
"type": "string",
"description": "Slug of a subscribed topic, from list_intent_topics."
},
"paused": {
"type": "boolean",
"description": "true pauses deliveries, false resumes them."
},
"userDailyLimit": {
"type": "number",
"description": "New maximum leads per day. Positive whole number, capped at 5000."
}
},
"required": [
"websiteId",
"topicSlug"
]
}
}
```
# update_lead_comment (/docs/mcp/tools/update-lead-comment)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/update_lead_comment.mdx. */}
**Edit a lead comment** · Deletes or overwrites data
Replace the text of an existing lead comment. Only the user who wrote the comment can edit it; others get 'You do not have permission'. The previous text is not kept. commentId is the _id from get_lead_comments. Returns status 'Successful'.
| Connection | Account URL, team member URL or OAuth |
| --- | --- |
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `commentId` | `string` | Yes | any | Comment id (the _id from get_lead_comments). |
| `content` | `string` | Yes | any | The new comment text; replaces the old text entirely. |
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "update_lead_comment",
"title": "Edit a lead comment",
"annotations": {
"title": "Edit a lead comment",
"readOnlyHint": false,
"destructiveHint": true,
"idempotentHint": true,
"openWorldHint": false
},
"inputSchema": {
"type": "object",
"properties": {
"commentId": {
"type": "string",
"description": "Comment id (the _id from get_lead_comments)."
},
"content": {
"type": "string",
"description": "The new comment text; replaces the old text entirely."
}
},
"required": [
"commentId",
"content"
]
}
}
```
# update_lead_notes (/docs/mcp/tools/update-lead-notes)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/update_lead_notes.mdx. */}
**Update lead notes** · Changes data
Sets the free-form notes on a lead, replacing what was there; an empty string clears them. For a threaded discussion use add_lead_comment instead.
| Connection | Account URL, team member URL or OAuth |
| --- | --- |
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `websiteId` | `string` | Yes | any | Website ID from list_websites. |
| `leadId` | `string` | Yes | any | Lead ID from get_leads. |
| `notes` | `string` | No | any | The full notes text; empty clears them. |
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "update_lead_notes",
"title": "Update lead notes",
"annotations": {
"title": "Update lead notes",
"readOnlyHint": false,
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false
},
"inputSchema": {
"type": "object",
"properties": {
"websiteId": {
"type": "string",
"description": "Website ID from list_websites."
},
"leadId": {
"type": "string",
"description": "Lead ID from get_leads."
},
"notes": {
"type": "string",
"description": "The full notes text; empty clears them."
}
},
"required": [
"websiteId",
"leadId"
]
}
}
```
# update_lead_quality (/docs/mcp/tools/update-lead-quality)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/update_lead_quality.mdx. */}
**Update the lead quality bar** · Changes data
Changes the lead quality settings of a website. Leads scoring below the bar are not added (and use no credits). Only the fields you pass change; the highest bar is 80 (20 on lifetime-deal plans).
| Connection | Account URL, team member URL or OAuth |
| --- | --- |
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `websiteId` | `string` | Yes | any | Website ID from list_websites. |
| `minScore` | `number` | No | 0–80 | Minimum ideal-customer score for every source (0-80). |
| `bySource` | `object` | No | any | Per-source bars that override minScore. |
| `bySource.visitors` | `number` | No | 0–80 | Minimum score for website visitor leads (0-80); null uses the general bar. |
| `bySource.intent` | `number` | No | 0–80 | Minimum score for 3rd-party intent leads (0-80); null uses the general bar. |
| `bySource.scraping` | `number` | No | 0–80 | Minimum score for Web Scraping leads (0-80); null uses the general bar. |
| `bySource.prospector` | `number` | No | 0–80 | Minimum score for Prospector leads (0-80); null uses the general bar. |
| `bySource.scout` | `number` | No | 0–80 | Minimum score for AI Scout leads (0-80); null uses the general bar. |
| `contactsOnly` | `boolean` | No | any | Only keep leads with a person to contact. |
| `audienceFocus` | `string` | No | `B2B`, `B2C`, `BOTH` | B2B, B2C or BOTH. |
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "update_lead_quality",
"title": "Update the lead quality bar",
"annotations": {
"title": "Update the lead quality bar",
"readOnlyHint": false,
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false
},
"inputSchema": {
"type": "object",
"properties": {
"websiteId": {
"type": "string",
"description": "Website ID from list_websites."
},
"minScore": {
"type": "number",
"minimum": 0,
"maximum": 80,
"description": "Minimum ideal-customer score for every source (0-80)."
},
"bySource": {
"type": "object",
"properties": {
"visitors": {
"type": "number",
"minimum": 0,
"maximum": 80,
"description": "Minimum score for website visitor leads (0-80); null uses the general bar."
},
"intent": {
"type": "number",
"minimum": 0,
"maximum": 80,
"description": "Minimum score for 3rd-party intent leads (0-80); null uses the general bar."
},
"scraping": {
"type": "number",
"minimum": 0,
"maximum": 80,
"description": "Minimum score for Web Scraping leads (0-80); null uses the general bar."
},
"prospector": {
"type": "number",
"minimum": 0,
"maximum": 80,
"description": "Minimum score for Prospector leads (0-80); null uses the general bar."
},
"scout": {
"type": "number",
"minimum": 0,
"maximum": 80,
"description": "Minimum score for AI Scout leads (0-80); null uses the general bar."
}
},
"description": "Per-source bars that override minScore."
},
"contactsOnly": {
"type": "boolean",
"description": "Only keep leads with a person to contact."
},
"audienceFocus": {
"type": "string",
"enum": [
"B2B",
"B2C",
"BOTH"
],
"description": "B2B, B2C or BOTH."
}
},
"required": [
"websiteId"
]
}
}
```
# update_lead_scoring_model (/docs/mcp/tools/update-lead-scoring-model)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/update_lead_scoring_model.mdx. */}
**Update a lead scoring model** · Deletes or overwrites data
Change a lead scoring model's name, on/off state and/or rules. Every criterion key you pass in criteria replaces that criterion's whole rule list; criteria you leave out are unchanged, so read the model first with get_lead_scoring_model and send the full list for each criterion you change. Rule changes on a live model queue a re-score of recent leads in the background (rescoring.status 'queued'); removing a domain from companyDomain exclusions also unblocks it. Changes are recorded in the model's history. modelId from list_lead_scoring_models. Returns status 'success', the new revision and a summary of changes.
| Connection | Account URL, team member URL or OAuth |
| --- | --- |
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `modelId` | `string` | Yes | any | Scoring model id from list_lead_scoring_models. |
| `name` | `string` | No | any | New model name. |
| `active` | `boolean` | No | any | true turns the model on (it scores leads), false turns it off. |
| `criteria` | `object` | No | any | Object keyed by criterion name, each value a full list of rules in the shape get_lead_scoring_model returns, e.g. \{"industry":[\{"values":["Software"],"score":8,"filter":"any"\}],"revenue":[\{"values":\{"min":1000000,"max":null\},"score":5\}]\}. score is -10..10; filter is 'any', 'only' or 'excl'. Numeric criteria (revenue, numberVisits, duration, alexaRank) take \{min,max\}; recency takes \{days\}; others take a list of strings. Empty or duplicate rules are dropped. |
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "update_lead_scoring_model",
"title": "Update a lead scoring model",
"annotations": {
"title": "Update a lead scoring model",
"readOnlyHint": false,
"destructiveHint": true,
"idempotentHint": true,
"openWorldHint": false
},
"inputSchema": {
"type": "object",
"properties": {
"modelId": {
"type": "string",
"description": "Scoring model id from list_lead_scoring_models."
},
"name": {
"type": "string",
"description": "New model name."
},
"active": {
"type": "boolean",
"description": "true turns the model on (it scores leads), false turns it off."
},
"criteria": {
"type": "object",
"description": "Object keyed by criterion name, each value a full list of rules in the shape get_lead_scoring_model returns, e.g. {\"industry\":[{\"values\":[\"Software\"],\"score\":8,\"filter\":\"any\"}],\"revenue\":[{\"values\":{\"min\":1000000,\"max\":null},\"score\":5}]}. score is -10..10; filter is 'any', 'only' or 'excl'. Numeric criteria (revenue, numberVisits, duration, alexaRank) take {min,max}; recency takes {days}; others take a list of strings. Empty or duplicate rules are dropped."
}
},
"required": [
"modelId"
]
}
}
```
# update_linkedin_account (/docs/mcp/tools/update-linkedin-account)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/update_linkedin_account.mdx. */}
**Update a LinkedIn account** · Changes data
Changes the label of a connected LinkedIn account, or pauses and resumes it (paused: its campaigns send nothing).
| Connection | Account-owner URL or OAuth (not a team member URL) |
| --- | --- |
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `websiteId` | `string` | Yes | any | Website ID from list_websites. |
| `linkedinAccountId` | `string` | Yes | any | LinkedIn account ID from list_linkedin_accounts. |
| `label` | `string` | No | any | A name for the account. |
| `status` | `string` | No | `active`, `paused` | active or paused. |
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "update_linkedin_account",
"title": "Update a LinkedIn account",
"annotations": {
"title": "Update a LinkedIn account",
"readOnlyHint": false,
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false
},
"inputSchema": {
"type": "object",
"properties": {
"websiteId": {
"type": "string",
"description": "Website ID from list_websites."
},
"linkedinAccountId": {
"type": "string",
"description": "LinkedIn account ID from list_linkedin_accounts."
},
"label": {
"type": "string",
"description": "A name for the account."
},
"status": {
"type": "string",
"enum": [
"active",
"paused"
],
"description": "active or paused."
}
},
"required": [
"websiteId",
"linkedinAccountId"
]
}
}
```
# update_member (/docs/mcp/tools/update-member)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/update_member.mdx. */}
**Update a team member** · Changes data
Changes a member's role, permissions or websites and returns the member as list_members does. Fields left out stay as they are; websites replaces the whole list (send allWebsites false with it). Giving an Owner a preset or permissions makes them a Member; the last Owner cannot be changed. Confirm with the user before calling. Needs the master key.
| Connection | Account-owner URL or OAuth (not a team member URL) |
| --- | --- |
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `userId` | `string` | Yes | any | userId from list_members. |
| `role` | `string` | No | `Owner`, `Member` | Owner (everything, including billing) or Member (what permissions allow). Only an Owner can make another Owner. |
| `preset` | `string` | No | `full`, `sales`, `developer`, `viewer`, `team`, `client` | Start from a preset of permissions: full, sales, developer, viewer, team or client (see get_permissions_catalog). |
| `permissions` | `string[]` | No | [21 values](#accepted-values) | Exact permission ids, from get_permissions_catalog. Overrides the preset. |
| `allWebsites` | `boolean` | No | any | true: access to every current and future website. |
| `websites` | `string[]` | No | any | Website ids the member can see, when allWebsites is false. |
## Accepted values [#accepted-values]
The exact values these fields take; anything else is refused.
### `permissions` [#permissions]
`pixel` · `add_website` · `website` · `delete_website` · `integrations` · `leads_view` · `leads_export` · `qualify` · `campaigns` · `buy_mailboxes` · `connect_mailboxes` · `warmup` · `inbox` · `optimize_seo` · `optimize_google_ads` · `optimize_meta_ads` · `optimize_linkedin_ads` · `team` · `api_keys` · `billing` · `whitelabel`
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "update_member",
"title": "Update a team member",
"annotations": {
"title": "Update a team member",
"readOnlyHint": false,
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false
},
"inputSchema": {
"type": "object",
"properties": {
"userId": {
"type": "string",
"description": "userId from list_members."
},
"role": {
"type": "string",
"enum": [
"Owner",
"Member"
],
"description": "Owner (everything, including billing) or Member (what permissions allow). Only an Owner can make another Owner."
},
"preset": {
"type": "string",
"enum": [
"full",
"sales",
"developer",
"viewer",
"team",
"client"
],
"description": "Start from a preset of permissions: full, sales, developer, viewer, team or client (see get_permissions_catalog)."
},
"permissions": {
"type": "array",
"items": {
"type": "string",
"enum": [
"pixel",
"add_website",
"website",
"delete_website",
"integrations",
"leads_view",
"leads_export",
"qualify",
"campaigns",
"buy_mailboxes",
"connect_mailboxes",
"warmup",
"inbox",
"optimize_seo",
"optimize_google_ads",
"optimize_meta_ads",
"optimize_linkedin_ads",
"team",
"api_keys",
"billing",
"whitelabel"
]
},
"description": "Exact permission ids, from get_permissions_catalog. Overrides the preset."
},
"allWebsites": {
"type": "boolean",
"description": "true: access to every current and future website."
},
"websites": {
"type": "array",
"items": {
"type": "string"
},
"description": "Website ids the member can see, when allWebsites is false."
}
},
"required": [
"userId"
]
}
}
```
# update_tag (/docs/mcp/tools/update-tag)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/update_tag.mdx. */}
**Update a tag** · Changes data
Renames a tag or changes its colour on this website. Every lead that has the tag keeps it. Pass only what changes. tagId comes from list_tags.
| Connection | Account URL, team member URL or OAuth |
| --- | --- |
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `websiteId` | `string` | Yes | any | Website ID from list_websites. |
| `tagId` | `string` | Yes | any | Tag ID from list_tags. |
| `name` | `string` | No | any | New tag name. |
| `color` | `string` | No | any | New colour as a hex code, e.g. #1E4EFF. |
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "update_tag",
"title": "Update a tag",
"annotations": {
"title": "Update a tag",
"readOnlyHint": false,
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false
},
"inputSchema": {
"type": "object",
"properties": {
"websiteId": {
"type": "string",
"description": "Website ID from list_websites."
},
"tagId": {
"type": "string",
"description": "Tag ID from list_tags."
},
"name": {
"type": "string",
"description": "New tag name."
},
"color": {
"type": "string",
"description": "New colour as a hex code, e.g. #1E4EFF."
}
},
"required": [
"websiteId",
"tagId"
]
}
}
```
# update_warmup_settings (/docs/mcp/tools/update-warmup-settings)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/update_warmup_settings.mdx. */}
**Update warmup settings** · Changes data
Changes how hard a mailbox warms up: intensity conservative, normal or aggressive, and the most warmup emails a day (5-100). Returns 404 when the mailbox is not one of this website's.
| Connection | Account URL, team member URL or OAuth |
| --- | --- |
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `websiteId` | `string` | Yes | any | Website ID from list_websites. |
| `emailAccountId` | `string` | Yes | any | _id of the mailbox from list_email_accounts. |
| `intensity` | `string` | No | `conservative`, `normal`, `aggressive` | conservative, normal or aggressive. |
| `dailyLimit` | `number` | No | 5–100 | Most warmup emails a day, 5-100. |
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "update_warmup_settings",
"title": "Update warmup settings",
"annotations": {
"title": "Update warmup settings",
"readOnlyHint": false,
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false
},
"inputSchema": {
"type": "object",
"properties": {
"websiteId": {
"type": "string",
"description": "Website ID from list_websites."
},
"emailAccountId": {
"type": "string",
"description": "_id of the mailbox from list_email_accounts."
},
"intensity": {
"type": "string",
"enum": [
"conservative",
"normal",
"aggressive"
],
"description": "conservative, normal or aggressive."
},
"dailyLimit": {
"type": "number",
"minimum": 5,
"maximum": 100,
"description": "Most warmup emails a day, 5-100."
}
},
"required": [
"websiteId",
"emailAccountId"
]
}
}
```
# update_web_scraping (/docs/mcp/tools/update-web-scraping)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/update_web_scraping.mdx. */}
**Update Web Scraping keywords** · Changes data · Acts outside your account · Spends credits or money
Turns Web Scraping on or off and sets its keywords (exact or fuzzy match, each can be paused), the daily limit (1-500 leads, 1 credit each) and contacts-only (only companies where we found a person). Passing keywords replaces the whole list: get_web_scraping first and send the full list. Not on LTD plans.
| Connection | Account URL, team member URL or OAuth |
| --- | --- |
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `websiteId` | `string` | Yes | any | Website ID from list_websites. |
| `enabled` | `boolean` | No | any | On or off. |
| `keywords` | `object[]` | No | any | The full keyword list: value (a phrase your buyers write, or a domain in a script such as a competitor's tracker), matchMode (exact or fuzzy), paused. |
| `keywords[].value` | `string` | Yes | any | A phrase your buyers write on their own site, or a domain that appears in a script URL. |
| `keywords[].matchMode` | `string` | No | `exact`, `fuzzy` | exact (the phrase as written) or fuzzy (close variants too). |
| `keywords[].paused` | `boolean` | No | any | true to keep the keyword but stop searching for it. |
| `dailyLimit` | `number` | No | 1–500 | Leads per day, 1-500. |
| `contactsOnly` | `boolean` | No | any | Only add companies where a person was found. |
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "update_web_scraping",
"title": "Update Web Scraping keywords",
"annotations": {
"title": "Update Web Scraping keywords",
"readOnlyHint": false,
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": true
},
"inputSchema": {
"type": "object",
"properties": {
"websiteId": {
"type": "string",
"description": "Website ID from list_websites."
},
"enabled": {
"type": "boolean",
"description": "On or off."
},
"keywords": {
"type": "array",
"items": {
"type": "object",
"properties": {
"value": {
"type": "string",
"description": "A phrase your buyers write on their own site, or a domain that appears in a script URL."
},
"matchMode": {
"type": "string",
"enum": [
"exact",
"fuzzy"
],
"description": "exact (the phrase as written) or fuzzy (close variants too)."
},
"paused": {
"type": "boolean",
"description": "true to keep the keyword but stop searching for it."
}
},
"required": [
"value"
]
},
"description": "The full keyword list: value (a phrase your buyers write, or a domain in a script such as a competitor's tracker), matchMode (exact or fuzzy), paused."
},
"dailyLimit": {
"type": "number",
"minimum": 1,
"maximum": 500,
"description": "Leads per day, 1-500."
},
"contactsOnly": {
"type": "boolean",
"description": "Only add companies where a person was found."
}
},
"required": [
"websiteId"
]
}
}
```
# update_website (/docs/mcp/tools/update-website)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/update_website.mdx. */}
**Update website settings** · Changes data
Changes a website's name, url and tracking settings. Send only the fields to change. Returns status (success, partial or error), saved (fields stored) and failed (field + reason); fields that are not website settings are listed under ignored. A setting switched off at account level cannot be switched on here (403). websiteId comes from list_websites. Confirm with the user before switching tracking settings off, since that changes which leads are created.
| Connection | Account URL, team member URL or OAuth |
| --- | --- |
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `websiteId` | `string` | Yes | any | Website ID from list_websites. |
| `name` | `string` | No | any | New display name for the website. |
| `url` | `string` | No | any | Website address, e.g. https://www.acme.example. verify_website checks the home page of this address. |
| `trackExactVisitors` | `boolean` | No | any | true to identify the exact person visiting (name, email, LinkedIn) as well as their company. |
| `trackPersonalEmails` | `boolean` | No | any | true to include personal email addresses (e.g. Gmail) for identified visitors; false for business emails only. |
| `enablePersonalEmails` | `boolean` | No | any | Same as trackPersonalEmails (kept for older clients). trackPersonalEmails wins if both are sent. |
| `trackCompanyWithSuggestedContacts` | `boolean` | No | any | true to still create a lead for the visiting company, with suggested contacts there, when the exact person cannot be identified. |
| `identifySettings` | `string` | No | `both`, `personal-level-data`, `company-level-data` | Which leads to show: 'both' (default), 'personal-level-data' (person leads) or 'company-level-data' (company leads). |
| `emailTrackingEnabled` | `boolean` | No | any | Website-level email tracking flag. Open and click tracking for outreach emails is set per campaign. |
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "update_website",
"title": "Update website settings",
"annotations": {
"title": "Update website settings",
"readOnlyHint": false,
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false
},
"inputSchema": {
"type": "object",
"properties": {
"websiteId": {
"type": "string",
"description": "Website ID from list_websites."
},
"name": {
"type": "string",
"description": "New display name for the website."
},
"url": {
"type": "string",
"description": "Website address, e.g. https://www.acme.example. verify_website checks the home page of this address."
},
"trackExactVisitors": {
"type": "boolean",
"description": "true to identify the exact person visiting (name, email, LinkedIn) as well as their company."
},
"trackPersonalEmails": {
"type": "boolean",
"description": "true to include personal email addresses (e.g. Gmail) for identified visitors; false for business emails only."
},
"enablePersonalEmails": {
"type": "boolean",
"description": "Same as trackPersonalEmails (kept for older clients). trackPersonalEmails wins if both are sent."
},
"trackCompanyWithSuggestedContacts": {
"type": "boolean",
"description": "true to still create a lead for the visiting company, with suggested contacts there, when the exact person cannot be identified."
},
"identifySettings": {
"type": "string",
"enum": [
"both",
"personal-level-data",
"company-level-data"
],
"description": "Which leads to show: 'both' (default), 'personal-level-data' (person leads) or 'company-level-data' (company leads)."
},
"emailTrackingEnabled": {
"type": "boolean",
"description": "Website-level email tracking flag. Open and click tracking for outreach emails is set per campaign."
}
},
"required": [
"websiteId"
]
}
}
```
## Used in [#used-in]
- [/docs/websites/tracking-pixel/mcp](/docs/websites/tracking-pixel/mcp)
- [/docs/websites/websites/mcp](/docs/websites/websites/mcp)
# upgrade_plan (/docs/mcp/tools/upgrade-plan)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/upgrade_plan.mdx. */}
**Upgrade plan** · Changes data · Acts outside your account · Spends credits or money
Moves the subscription to more leads per month right away and charges the card on file today. Same interval: the charge is the extra leads at the new plan's per-lead price, the extra credits are added now and the renewal date stays the same. Switching monthly/yearly: the current subscription is replaced and the full new amount is charged today. If leads is not higher than today's plan, the change is scheduled for the next billing date instead. Run preview_plan_change first, show the price and get an explicit yes. Confirm with the user before calling. Returns status (active, requires_action or scheduled), chargedNowCents and nextBillingDate; requires_action means the bank wants the cardholder to confirm the payment: give the user confirmUrl (or send them to the Billing page). 402 means the card was declined, 409 means the subscription is paused.
| Connection | Account-owner URL or OAuth (not a team member URL) |
| --- | --- |
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `leads` | `integer` | Yes | 1–1000000 | Leads per month of the new plan: a whole number from 1 to 1,000,000; use the same value you previewed. |
| `annual` | `boolean` | No | any | true for yearly billing, false for monthly. Leave it out to keep the current billing interval; only pass a value when the user wants to switch. |
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "upgrade_plan",
"title": "Upgrade plan",
"annotations": {
"title": "Upgrade plan",
"readOnlyHint": false,
"destructiveHint": false,
"idempotentHint": false,
"openWorldHint": true
},
"inputSchema": {
"type": "object",
"properties": {
"leads": {
"type": "integer",
"minimum": 1,
"maximum": 1000000,
"description": "Leads per month of the new plan: a whole number from 1 to 1,000,000; use the same value you previewed."
},
"annual": {
"type": "boolean",
"description": "true for yearly billing, false for monthly. Leave it out to keep the current billing interval; only pass a value when the user wants to switch."
}
},
"required": [
"leads"
]
}
}
```
## Used in [#used-in]
- [/docs/account/billing/mcp](/docs/account/billing/mcp)
# verify_contact (/docs/mcp/tools/verify-contact)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/verify_contact.mdx. */}
**Verify contact email** · Changes data · Acts outside your account · Spends credits or money
Checks whether the email of a saved contact is valid and deliverable. If the contact has no email but has a domain, it tries firstnamelastname@domain and firstname.lastname@domain. Pass the contactId returned by create_contact; a raw email is not accepted. For people from search_people use reveal_contact or find_contact_email instead. Needs the Email Waterfall add-on: without it the call returns 402 with an upgradeUrl. A valid or catch-all result can use a credit, and the call returns 400 'You do not have enough credits!' when credits run out. Confirm with the user before calling. Returns \{ email, phone, verificationStatus \} (e.g. valid, catch-all), or 404 'Contact Details not found' with email null.
| Connection | Account URL, team member URL or OAuth |
| --- | --- |
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `contactId` | `string` | Yes | any | The _id returned by create_contact (24 hex characters). |
| `websiteId` | `string` | Yes | any | Website ID from list_websites. Used for the credit check. |
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "verify_contact",
"title": "Verify contact email",
"annotations": {
"title": "Verify contact email",
"readOnlyHint": false,
"destructiveHint": false,
"idempotentHint": false,
"openWorldHint": true
},
"inputSchema": {
"type": "object",
"properties": {
"contactId": {
"type": "string",
"description": "The _id returned by create_contact (24 hex characters)."
},
"websiteId": {
"type": "string",
"description": "Website ID from list_websites. Used for the credit check."
}
},
"required": [
"contactId",
"websiteId"
]
}
}
```
# verify_tracking_domain (/docs/mcp/tools/verify-tracking-domain)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/verify_tracking_domain.mdx. */}
**Verify a tracking domain** · Changes data · Acts outside your account
Checks that a mailbox's custom tracking domain has its CNAME record set, so open and click tracking links use your own domain. Returns what is missing when it is not set.
| Connection | Account URL, team member URL or OAuth |
| --- | --- |
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `websiteId` | `string` | Yes | any | Website ID from list_websites. |
| `emailAccountId` | `string` | Yes | any | _id of the mailbox from list_email_accounts. |
| `customDomain` | `string` | Yes | any | The tracking domain, e.g. track.yourdomain.com. |
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "verify_tracking_domain",
"title": "Verify a tracking domain",
"annotations": {
"title": "Verify a tracking domain",
"readOnlyHint": false,
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": true
},
"inputSchema": {
"type": "object",
"properties": {
"websiteId": {
"type": "string",
"description": "Website ID from list_websites."
},
"emailAccountId": {
"type": "string",
"description": "_id of the mailbox from list_email_accounts."
},
"customDomain": {
"type": "string",
"description": "The tracking domain, e.g. track.yourdomain.com."
}
},
"required": [
"websiteId",
"emailAccountId",
"customDomain"
]
}
}
```
# verify_website (/docs/mcp/tools/verify-website)
{/* Generated by scripts/sync-mcp-tools.mjs from platform-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/verify_website.mdx. */}
**Verify installation** · Changes data · Acts outside your account
Loads the website's home page (from its saved url) and checks whether this website's tracking snippet is in the HTML. When found, the website is marked verified and the response contains 'verified'; an empty response means the snippet was not found, the page could not be loaded, or no url is set (set it with update_website). Use after installing the snippet from get_tracking_pixel. For deeper problems (no leads arriving, credits, blocks) use get_website_diagnostics.
| Connection | Account URL, team member URL or OAuth |
| --- | --- |
## Parameters [#parameters]
| Parameter | Type | Required | Accepts | Description |
| --- | --- | --- | --- | --- |
| `websiteId` | `string` | Yes | any | Website ID from list_websites. |
## Tool definition [#tool-definition]
What your assistant receives from `tools/list`:
```json
{
"name": "verify_website",
"title": "Verify installation",
"annotations": {
"title": "Verify installation",
"readOnlyHint": false,
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": true
},
"inputSchema": {
"type": "object",
"properties": {
"websiteId": {
"type": "string",
"description": "Website ID from list_websites."
}
},
"required": [
"websiteId"
]
}
}
```
## Used in [#used-in]
- [/docs/websites/tracking-pixel](/docs/websites/tracking-pixel)
- [/docs/websites/websites/mcp](/docs/websites/websites/mcp)
# Blog articles
> Your hosted blog (Optimize add-on): articles written for your ideal customer, reviewed and published by you.
Every section below does the same job: in the dashboard (Guide), from your code (API) or through an AI assistant (MCP).
## Guide — In the dashboard
Source: /docs/optimize/blog-articles
With the Optimize add-on your website gets a hosted blog. New articles are proposed for your ideal customer; you read, edit, approve or reject each one, and every change is kept as a version you can go back to.
1. **Optimize → SEO** lists your articles; filter and sort them.
2. **Open a proposed article**, edit it if you like, then **Approve** or **Reject**.
3. **History** shows every version; **Revert** brings one back.
4. Change not showing? **Clear cache**.
### Common questions [#common-questions]
**Who writes the articles?** They are proposed for you, written for the ideal customer in your [scoring model](/docs/qualify/scoring-models). Nothing goes live until you approve it. You can also publish your own text from your [AI assistant](/docs/optimize/blog-articles/mcp) or the [API](/docs/optimize/blog-articles/api).
**Does a draft use one of my articles?** Yes. Your plan includes a number of articles a month, and each new article or edit uses one, whether it is live or a draft.
**What happens when I have none left this month?** New articles and edits are refused until the next month. Add more articles from the Billing page ([Plan, billing & credits](/docs/account/billing)).
**My change does not show on the blog.** Click **Clear cache** on the SEO page (or ask your assistant to `clear_blog_cache`), then reload the blog.
**Can I go back to an older version?** Yes. Open the article's **History**, pick the version and click **Revert**. The article keeps the same address.
**Can I edit a guest post or a paid placement?** No. Those articles are locked; edits to them are refused.
**How do I know if an article works?** Each article shows its visits and how well its visitors match your ideal customer, for the first version and the current one, so you can see whether an edit helped.
---
## API — From your code
Source: /docs/optimize/blog-articles/api
Authenticated with `?privateKey=YOUR_KEY` (see [Authentication](/docs/authentication)).
### Use case: Publish from your CMS [#use-case-publish-from-your-cms]
`POST /v3/blog/articles` with the `title`, `slug` and `html`; `status: "draft"` keeps it off the site until you are ready.
### Use case: Fix a typo in a live article [#use-case-fix-a-typo-in-a-live-article]
`PUT /v3/blog/articles/{articleId}` saves a new version at the same URL; the old one stays in the history.
---
## MCP — AI agents
Source: /docs/optimize/blog-articles/mcp
Connect the [MCP server](/docs/mcp#quickstart), then just ask.
### Use case [#use-case]
> Which blog articles got the most visits this month?
```json
{
"websiteId": "64b7f0a1c2d3e4f5a6b7c8d9"
}
```
### Use case [#use-case-1]
> Add an FAQ answering 'how is pricing calculated' to my pricing article.
```json
{
"websiteId": "64b7f0a1c2d3e4f5a6b7c8d9",
"articleId": "6a2f00000000000000000002",
"faq": [
{
"q": "How is pricing calculated?",
"a": "By the number of identified visitors per month."
}
]
}
```
# AI Assist
> Describe your business and who you sell to; AI proposes the scoring rules.
Every section below does the same job: in the dashboard (Guide), from your code (API) or through an AI assistant (MCP).
## Guide — In the dashboard
Source: /docs/qualify/ai-assist
No time to write rules? AI Assist reads your website (or a description you type), asks who you sell to, and proposes scoring rules. You accept or skip them one by one, so nothing is added without you.
1. **Qualify → open a model → ✦ AI Assist.**
2. **Let it read your website**, or skip that and describe your business yourself.
3. **Tell it who you sell to**, click **Generate rules**, then accept or skip each proposed rule and **Save and Close**.
### AI prompts: questions the AI answers about each lead [#ai-prompts-questions-the-ai-answers-about-each-lead]
Besides rules, a model can hold **AI prompts**: plain-English questions such as "Is this company a software vendor selling to finance teams?". The AI answers them for each lead and the answer feeds the score. Add one under **✦ AI Prompts → + Add AI prompt**, or click **✦ Suggest prompts**, describe your ideal customer and your domain, and add the suggestions you like. **Business context** (what you sell and who buys it) helps the AI answer well.
### Common questions [#common-questions]
**Can AI build my scoring model?** Yes. AI Assist proposes the rules from your website and your answers; you keep the ones that fit. From your [AI assistant](/docs/qualify/ai-assist/mcp) or the [API](/docs/qualify/ai-assist/api), `ai_generate_scoring_model` builds a whole model named "ICP Score - AI Generated" in one go, once per website.
**Can I edit what AI proposes?** Yes. Every proposed rule is a normal rule: skip it, change its values or its weight, delete it later. The model is yours ([Scoring models](/docs/qualify/scoring-models)).
**AI Assist got my business wrong.** Skip the rules that do not fit and run it again with your own description instead of your website; what you write takes priority over what the site suggests. You can also set **Business context** in the editor.
**Does AI Assist cost credits?** Lead credits are only ever used for new leads ([How credits are used](/docs/account/billing#how-credits-are-used)). AI prompts are answered per lead from your plan's monthly AI qualification allowance, not from your lead credits.
**Do I still need my own rules?** Not necessarily, but check the result with **Test a website** on a few real customers: they should come out warm or hot. Add or tighten rules until they do.
### Every control on this screen [#every-control-on-this-screen]
Every button, field and switch, with what it does.
---
## API — From your code
Source: /docs/qualify/ai-assist/api
Authenticated with `?privateKey=YOUR_KEY` (see [Authentication](/docs/authentication)).
### Use case: A first model for a new website [#use-case-a-first-model-for-a-new-website]
`POST /v3/lead-scoring/ai-generate` reads the website's pages, builds a model named "ICP Score - AI Generated" and saves it; `description` steers it, and what you write there takes priority over what the site suggests. It works once per website: a second call is refused with "AI Lead scoring model has already been generated!". For more models (one per product line, for example) create them with `POST /admin/lead-scoring` and set their rules with `PUT /v3/lead-scoring/{modelId}` ([Scoring models API](/docs/qualify/scoring-models/api)).
---
## MCP — AI agents
Source: /docs/qualify/ai-assist/mcp
Connect the [MCP server](/docs/mcp#quickstart), then just ask.
### Use case [#use-case]
> Build me a scoring model: we sell HR software to UK and US companies with 50 to 1,000 staff.
```json
{
"websiteId": "64b7f0a1c2d3e4f5a6b7c8d9",
"description": "HR software for UK and US companies with 50-1,000 employees; HR directors and COOs buy it."
}
```
# Exclude leads
> Keep companies, domains, countries, industries, job titles or pages out of your leads, and addresses out of your campaigns.
Every section below does the same job: in the dashboard (Guide), from your code (API) or through an AI assistant (MCP).
## Guide — In the dashboard
Source: /docs/qualify/exclusions
An **Exclude** rule in your [scoring model](/docs/qualify/scoring-models) keeps every matching visitor out before they become a lead: a country, a company domain, an industry, a job title, a page on your site. Excluded visitors are never shown and never use a credit. **Only include** does the opposite: it keeps only the visitors that match.
1. **Qualify → open your model → find the criterion** (country, domain, industry, page visited…).
2. Choose **Exclude** and pick the values to leave out, or **Only include** to allow just those.
3. **Save** — it applies to new leads from now on.
### What you can exclude [#what-you-can-exclude]
- **Your own company and your customers:** a **Company domain** rule with their domains (`acme.example`). Visits from you and your teammates are free anyway ([How credits are used](/docs/account/billing#how-credits-are-used)).
- **Countries** you do not sell to.
- **Industries** or **job titles** you never want.
- **Pages:** a **Page visited** rule in exclude mode leaves out visitors who only saw, say, your careers or login pages. In include mode, only visitors of the listed pages become leads (track only your pricing and product pages, for example). A rule matches the part of the address you give: starts with, ends with, contains or does not contain `/careers`.
- **One person:** from the Leads page, **⋮ → Block company / person** keeps them out ([Remove or block leads](/docs/leads/hide-delete)).
For email campaigns there is a separate list: addresses that campaigns must never write to (your customers, people who asked not to be contacted). Your AI assistant or the API manage it ([MCP tab](/docs/qualify/exclusions/mcp), [API tab](/docs/qualify/exclusions/api)).
### Common questions [#common-questions]
**Do excluded leads use credits?** No. A visitor your rules keep out is never shown and never charged.
**Do exclusions remove the leads I already have?** No. They apply to new leads from the moment you save. To clean up existing leads, use [Re-qualify](/docs/qualify/requalify) or remove them from the Leads page ([Remove or block leads](/docs/leads/hide-delete)).
**I excluded a domain by mistake.** Remove it from the rule and save: the domain is unblocked and its visitors become leads again.
**Exclude or Penalize?** **Exclude** means never show them. A **Penalize** weight on a normal rule keeps the lead but lowers its score, so it sorts to the bottom. Use Penalize when you still want to see them.
**Can I exclude people who are not in my ideal customer profile at all?** Yes: give the criteria that define your ICP (industry, company size, country) an **Only include** rule, and everyone else is left out. Fewer leads shown means fewer credits used.
### Every control on this screen [#every-control-on-this-screen]
Every button, field and switch, with what it does.
---
## API — From your code
Source: /docs/qualify/exclusions/api
Authenticated with `?privateKey=YOUR_KEY` (see [Authentication](/docs/authentication)).
### Use case: Keep your customers out of campaigns [#use-case-keep-your-customers-out-of-campaigns]
`POST /admin/email-blacklist` with `{ "websiteId": "…", "csv": "customers", "email": ["jo@acme.example"] }` — campaigns on that website never send to those addresses. `csv` is the group name they are saved under (an empty string for one-off entries).
### Use case: Never count your own company or a competitor as a lead [#use-case-never-count-your-own-company-or-a-competitor-as-a-lead]
`POST /v3/exclusions/domains` with `{ "websiteId": "…", "domain": "acme.example" }` blocks one company domain: its visitors are not identified and use no credits. `POST /admin/domain-blacklist` does the same under a named group (`csv`). `POST /admin/websites/blacklist` with `{ "websiteId": "…", "countryCode": ["DE", "FR"] }` blocks whole countries (two-letter codes; the list replaces the saved one).
### Use case: Track only your product pages [#use-case-track-only-your-product-pages]
`PUT /v3/websites/{websiteId}/page-rules` with `{ "mode": "include", "rules": [{ "type": "starts-with", "url": "/pricing" }, { "type": "starts-with", "url": "/product" }] }` — only visitors of those pages become leads. `mode: "exclude"` leaves out pages such as `/careers` instead. Rule types: `starts-with`, `ends-with`, `contains`, `does-not-contain`.
---
## MCP — AI agents
Source: /docs/qualify/exclusions/mcp
Connect the [MCP server](/docs/mcp#quickstart), then just ask.
### Use case [#use-case]
> Never show visitors from our customers acme.example and northwind.example as leads.
```json
{
"websiteId": "64b7f0a1c2d3e4f5a6b7c8d9",
"csv": "customers",
"domains": [
"acme.example",
"northwind.example"
]
}
```
Blocked domains never become leads and never use a credit. `csv` names the group they are saved under, so you can remove them together later; a group name that already exists on the website is refused, so your assistant picks a new one (or removes the group and adds it again with the full list).
> Stop identifying visitors from Germany and France on this website.
```json
{
"websiteId": "64b7f0a1c2d3e4f5a6b7c8d9",
"countryCodes": ["DE", "FR"]
}
```
The list replaces the saved one, so your assistant reads `get_country_blacklist` first and sends the full list.
> Don't count anyone who only visits our careers or login pages.
```json
{
"websiteId": "64b7f0a1c2d3e4f5a6b7c8d9",
"mode": "exclude",
"rules": [
{ "type": "starts-with", "url": "/careers" },
{ "type": "contains", "url": "/login" }
]
}
```
`mode: "include"` does the opposite: only visitors of the listed pages become leads.
> Never email our existing customers from any campaign.
```json
{
"websiteId": "64b7f0a1c2d3e4f5a6b7c8d9",
"group": "customers",
"emails": ["jo@acme.example", "sam@northwind.example"]
}
```
This list is for campaigns only: the addresses can still appear as leads, but no campaign on this website writes to them.
# Ideal customer profile
> Your ideal customer in one place: industries, company size, revenue, locations and the domains or industries to leave out.
Every section below does the same job: in the dashboard (Guide), from your code (API) or through an AI assistant (MCP).
## Guide — In the dashboard
Source: /docs/qualify/icp
Your **ideal customer profile (ICP)** is who you sell to, in a few facts: industries, company size, revenue and locations, plus the domains and industries to leave out. In the dashboard you describe it with the rules of your [scoring model](/docs/qualify/scoring-models); the model turns it into the **ICP score** every lead gets.
Platform also keeps a short, structured copy of the ICP for each website. Your AI assistant reads it to explain why a lead fits or not and to search for prospects that match, and in the EU and the EEA it decides which contact we suggest at an identified company ([which countries get the exact person](/docs/leads/website-visitors/see-your-leads#which-countries-get-the-exact-person)).
1. **Read it** by asking your [AI assistant](/docs/qualify/icp/mcp) or with `GET /v3/icp` ([API](/docs/qualify/icp/api)).
2. **Change it** with `update_icp` or `PUT /v3/icp`: industries, sectors, locations, headcount and revenue ranges. Only the fields you send change.
3. For scoring with weights, pages visited and job titles, use [Scoring models](/docs/qualify/scoring-models); [AI Assist](/docs/qualify/ai-assist) can write them from your website.
### Common questions [#common-questions]
**What is the ICP?** Your ideal customer profile: the type of company (and person) you want as a customer. Everything in Qualify compares leads with it.
**Is the ICP the same as my scoring model?** Related, not the same. The scoring model is the full set of rules and weights that produce the score. The ICP record is the short summary your AI assistant reads; changing one does not change the other.
**Where do I set it in the dashboard?** Build your scoring model under **Qualify**, or let **AI Assist** read your website and propose it. The structured ICP record is changed from your AI assistant or the API.
**Does changing the ICP cost anything?** No. It only changes settings inside your account; no credits are used.
**Why does the Leads page ask who I sell to (B2B or B2C)?** The Lead quality panel on the Leads page uses it to set a sensible minimum fit for your leads. It is separate from the ICP record described here.
### Every control on this screen [#every-control-on-this-screen]
Every button, field and switch, with what it does.
---
## API — From your code
Source: /docs/qualify/icp/api
Authenticated with `?privateKey=YOUR_KEY` (see [Authentication](/docs/authentication)).
### Use case: Keep it in sync with your CRM [#use-case-keep-it-in-sync-with-your-crm]
`PUT /v3/icp` with the industries and company sizes of your best customers.
---
## MCP — AI agents
Source: /docs/qualify/icp/mcp
Connect the [MCP server](/docs/mcp#quickstart), then just ask.
### Use case [#use-case]
> Find prospects that match my ideal customer profile.
```json
{
"websiteId": "64b7f0a1c2d3e4f5a6b7c8d9"
}
```
# Qualify (/docs/qualify)
Qualify checks each lead against the rules you set (company size, industry, location, job title, pages visited) and gives it a score. Your best-fit leads show up first, your automations can act on the score, and leads that match an **Exclude** rule are left out.
## Set it up, in order [#set-it-up-in-order]
1. **[Describe your ideal customer](/docs/qualify/icp):** industries, company size, revenue, locations. This is the ICP every score is measured against.
2. **[Build a scoring model](/docs/qualify/scoring-models)** with rules, or let **[AI Assist](/docs/qualify/ai-assist)** propose the rules from a description of your business.
3. **[Re-qualify the leads you already have](/docs/qualify/requalify)** so old leads get the new score too.
4. **[Exclude who you never want](/docs/qualify/exclusions):** competitors, your own company, countries you do not sell to, job titles that never buy.
## Common questions [#common-questions]
**Does a low score delete a lead?**
No. The score only decides the order and what your automations do. Only an Exclude rule keeps a lead out. [Exclude leads](/docs/qualify/exclusions).
**Do I need a scoring model to get leads?**
No. Leads arrive without one; a model just tells you which ones to call first and lets automations act on the good ones.
**I changed my model. Are my old leads re-scored?**
Not by themselves. Run [Re-qualify](/docs/qualify/requalify) once and every existing lead gets the new score.
**Does Qualify stop when my trial ends or my credits run out?**
No. Scoring and exclusions keep running on every plan; only new leads stop when there are no credits.
# Re-qualify existing leads
> Score the leads you already have again after changing a model.
Every section below does the same job: in the dashboard (Guide), from your code (API) or through an AI assistant (MCP).
## Guide — In the dashboard
Source: /docs/qualify/requalify
New rules score new leads straight away. The leads you already have keep their old score until you re-qualify them.
1. **Right after you save or publish a model**, the dashboard asks **Re-qualify existing leads?** Choose **Yes, re-qualify**, pick **Last 7 days**, **Last 30 days** or **Last 3 months**, and click **Re-qualify leads**. **No, new leads only** keeps the old scores.
2. **Any time later:** **Qualify → ⋯ on the model → Rescore recent leads** (the last 90 days).
3. **Make this the default** to choose which model's score the Leads table shows.
### Common questions [#common-questions]
**Do changes apply to old leads?** Not by themselves. Rescore them with the steps above, and their ICP score, warm/hot band and sorting follow the new rules.
**How far back can I rescore?** Up to the last 90 days (3 months) from the dashboard. Older leads keep their score. From the [API](/docs/qualify/requalify/api) or your [AI assistant](/docs/qualify/requalify/mcp) you can rescore any specific leads by id.
**Does rescoring cost credits?** No lead credits. If your model has AI prompts, a lead that is missing an answer uses your plan's monthly AI qualification allowance; leads that already have every answer are rescored without AI.
**Why did my leads' scores change?** Someone saved rule changes on a live model and re-qualified, or changed the default model (the Leads table shows the default model's score). Every rule change is recorded in the model's history.
### Every control on this screen [#every-control-on-this-screen]
Every button, field and switch, with what it does.
---
## API — From your code
Source: /docs/qualify/requalify/api
Authenticated with `?privateKey=YOUR_KEY` (see [Authentication](/docs/authentication)).
### Use case: Rescore after a CRM update [#use-case-rescore-after-a-crm-update]
`POST /v3/lead-scoring/recalculate` with the `leadIds` whose data changed (at least one; an empty list is refused). Leads are processed one by one, so send small batches. The answer has `processed`, `failed`, `aiSkipped` (leads rescored without any AI use because every AI prompt was already answered) and `updatedLeads[]` with each lead's new scores.
---
## MCP — AI agents
Source: /docs/qualify/requalify/mcp
Connect the [MCP server](/docs/mcp#quickstart), then just ask.
### Use case [#use-case]
> Rescore the leads from this week with my new rules.
```json
{
"websiteId": "64b7f0a1c2d3e4f5a6b7c8d9",
"leadIds": [
"6530c1d2e3f4a5b6c7d8e9f2"
]
}
```
# Scoring models
> Score every new lead against your ideal customer with rules for company, location, pages visited and more.
Every section below does the same job: in the dashboard (Guide), from your code (API) or through an AI assistant (MCP).
## Guide — In the dashboard
Source: /docs/qualify/scoring-models
A scoring model is your definition of a good lead. It is a list of rules: company size, industry, location, pages visited, job title and more, each with a weight. Every new lead is checked against the rules and gets a score from 0 to 100. The score is the **ICP score** you see on every lead, and it is what sorts your best leads to the top.
1. **Qualify → open a model** (or **+ New model**, or **Create your first model**).
2. **Add or change rules:** find a criterion, choose the values, set the weight from **Penalize** to **Very important**.
3. **Test a website** to see how any company would score, then **Save and Close**.
### How a rule works [#how-a-rule-works]
Pick a criterion (for example *Industry*), then decide what it does:
- **Score it:** leads that match gain points; the weight says how many. A negative weight (**Penalize**) takes points away.
- **Only include:** only leads that match are kept; everyone else is left out.
- **Exclude:** leads that match are left out before they come in ([Exclude leads](/docs/qualify/exclusions)).
The **Live impact** panel on the right shows, for the last 30 days, how many leads were identified, how many passed your filters and how many were hot, so you see the effect before you save.
### Warm and hot [#warm-and-hot]
Scores fall into bands: below warm, **warm** and **hot**. Warm starts at 40 and hot at 70 unless you change it under **Edit score bands** (**Reset to 40 / 70** brings the defaults back). Changing the bands only changes the labels; it never rescores leads. Your [automations](/docs/automations) can act on the band, for example "post hot leads to Slack".
### Draft, live, default [#draft-live-default]
- A **draft** is saved but scores nothing yet. **Publish** makes it **live**.
- The **default** model is the one whose score shows in the Leads table. Only a live model can be the default (**⋯ → Make this the default**).
- **Archive** stops a model scoring at once; you can **Restore** it. **Duplicate** creates a draft copy to experiment with.
New rules score new leads straight away. To apply them to the leads you already have, see [Re-qualify existing leads](/docs/qualify/requalify).
### Common questions [#common-questions]
**Do I need a scoring model to get leads?** No. Visitors are identified and shown with or without one. A model adds the score that sorts them and that your automations can act on, and its Exclude rules keep out the leads you never want.
**Does a low score delete the lead?** No. A low score only means a low ICP score; the lead stays in your list and is still charged a credit. Leads are kept out only by an **Exclude** or **Only include** rule, or by the Lead quality bar on the Leads page ([Remove or block leads](/docs/leads/hide-delete)), and those leads never use a credit.
**Does qualifying cost credits?** Rules cost nothing. **AI prompts** (questions the AI answers about each lead) use your plan's monthly AI qualification allowance, not your lead credits; a lead that already has every answer is rescored without any AI use.
**What makes a lead hot?** A score at or above your hot band (70 by default). Which rules get it there is up to you: a company in your target industry and size, on a pricing page, with a job title that buys from you, for example.
**Can I have several models?** Yes, as many as you like, each with its own rules: one per product line or market. The default model is the one the Leads table shows. Names must be unique on a website.
**What is the ICP?** Your ideal customer profile: who you sell to. In the dashboard you describe it with the rules of your scoring model; [Ideal customer profile](/docs/qualify/icp) explains the short version your AI assistant reads.
**How do I test a model?** Click **Test a website**, type any company's domain and **Score it** to see how it would score. The calibration run scores 5 to 20 domains at once, good to check that your real customers come out hot.
### Every control on this screen [#every-control-on-this-screen]
Every button, field and switch, with what it does.
---
## API — From your code
Source: /docs/qualify/scoring-models/api
Authenticated with `?privateKey=YOUR_KEY` (see [Authentication](/docs/authentication)).
### Use case: Read a model’s rules [#use-case-read-a-models-rules]
`GET /admin/lead-scoring/{id}` returns its criteria; change them with `PUT /v3/lead-scoring/{modelId}` — each criterion you send replaces that criterion’s rules.
---
## MCP — AI agents
Source: /docs/qualify/scoring-models/mcp
Connect the [MCP server](/docs/mcp#quickstart), then just ask.
### Use case [#use-case]
> Show me how my default scoring model works.
```json
{
"websiteId": "64b7f0a1c2d3e4f5a6b7c8d9"
}
```
# Website analytics
> Visits, identified leads, ICP match rate and who your visitors are, per website.
Every section below does the same job: in the dashboard (Guide), from your code (API) or through an AI assistant (MCP).
## Guide — In the dashboard
Source: /docs/websites/analytics
The dashboard (the logo in the sidebar takes you back to it) shows how the selected website is doing: how many leads were identified, how many of them fit your ideal customer, and who they are.
1. **The cards at the top:** your plan (trial end or next credit refresh), the tracking pixel (installed, last seen), leads identified this billing cycle and your average ICP score.
2. **Identify:** the **Website Identifications** chart, one bar per day for the last 30 days.
3. **Qualify:** the **ICP Match Rate** over the same 30 days, then **Top Industries**, **Company Sizes** and **Top Job Titles** of the people identified.
### Common questions [#common-questions]
**How many of my visitors are identified?** The **Leads Identified** card counts the leads of this billing cycle; the **Website Identifications** chart shows them day by day for the last 30 days. Each person counts once, on the day of their latest visit.
**Why is it fewer than my analytics tool shows?** An analytics tool counts every visit; we count people we could identify. In 174 countries that is the exact person; in the EU and the EEA, GDPR limits us to the company plus a suggested contact ([which countries get the exact person](/docs/leads/website-visitors/see-your-leads#which-countries-get-the-exact-person)). Visitors your [Exclude rules](/docs/qualify/exclusions) keep out are not counted either.
**What is the ICP match rate?** The share of identified leads that fit your ideal customer, according to your default [scoring model](/docs/qualify/scoring-models). Low? Make your rules match who you sell to, or let [AI Assist](/docs/qualify/ai-assist) propose them.
**What is the Avg ICP Score?** The average score of your identified leads (0 to 100) from your default scoring model. Click the card to set your model up when you have none yet.
**Can I see other dates, or export it?** The dashboard shows the last 30 days. For any date range, use the [API](/docs/websites/analytics/api) or ask your [AI assistant](/docs/websites/analytics/mcp); the [Leads page](/docs/leads/website-visitors/see-your-leads) has every lead and the [CSV export](/docs/leads/csv-export).
### Every control on this screen [#every-control-on-this-screen]
Every button, field and switch, with what it does.
---
## API — From your code
Source: /docs/websites/analytics/api
Authenticated with `?privateKey=YOUR_KEY` (see [Authentication](/docs/authentication)).
### Use case: A weekly report [#use-case-a-weekly-report]
`GET /admin/website/daily-stats?websiteId=…` returns the last 30 days, day by day.
---
## MCP — AI agents
Source: /docs/websites/analytics/mcp
Connect the [MCP server](/docs/mcp#quickstart), then just ask.
### Use case [#use-case]
> How many leads did acme.example get this month?
```json
{
"websiteId": "64b7f0a1c2d3e4f5a6b7c8d9"
}
```
It answers with the top 10 industries, all company-size ranges, the top 10 job titles and the top 5 countries of the leads identified in the last 30 days, each with a count. For another period, your assistant passes `dateFrom` and `dateTo` together (for example `2026-10-01` and `2026-10-31`).
> Show me leads per day for the last two weeks, with the average ICP score.
```json
{
"websiteId": "64b7f0a1c2d3e4f5a6b7c8d9",
"dateFrom": "2026-10-17",
"dateTo": "2026-10-31"
}
```
One row per day, every day included even with 0: `leadsIdentified`, `avgIcpScore` and `leadsWithIcpScore`. A returning lead counts on the day of its latest visit.
> My website is verified but I have had no leads for a week. Why?
```json
{
"websiteId": "64b7f0a1c2d3e4f5a6b7c8d9"
}
```
The answer says in one line whether new leads are blocked and why (trial ended, no credits left, account paused), the credits the website can use, how many leads came in the last 48 hours and when the last one was created. If nothing is blocked and the pixel is verified, the site simply had no visitors we could identify in that time ([which countries get the exact person](/docs/leads/website-visitors/see-your-leads#which-countries-get-the-exact-person)).
# Websites & tracking (/docs/websites)
Each website has its own tracking pixel, leads, settings and keys. Add one, install the pixel, and identified visitors start showing up in Leads.
## Set it up, in order [#set-it-up-in-order]
1. **[Add the website](/docs/websites/websites)** with its address. You get a tracking snippet for it.
2. **[Install the pixel](/docs/websites/tracking-pixel)** with Google Tag Manager, the WordPress plugin or a line of HTML, on every page.
3. **Check it:** the website turns **verified** in the dashboard once it has seen the pixel. If it stays unverified, the pixel page explains what to check.
4. **[Read the analytics](/docs/websites/analytics):** visits, identified leads, ICP match rate and who your visitors are.
## Common questions [#common-questions]
**Can I track more than one website?**
Yes. Each website is added separately, with its own pixel, leads, settings and website key. Switch between them with the website switcher at the top of the dashboard.
**Does the pixel slow my website down?**
It loads after your page, like any analytics script, and is built to be small. [Install the tracking pixel](/docs/websites/tracking-pixel).
**I installed it. Why no leads yet?**
Give it a little traffic first; then check the website is verified and that your visitors come from countries we cover. The [pixel page](/docs/websites/tracking-pixel) has the checklist.
# Install the tracking pixel
> Install the pixel with Google Tag Manager, WordPress or a snippet of HTML, then check it works.
Every section below does the same job: in the dashboard (Guide), from your code (API) or through an AI assistant (MCP).
## Guide — In the dashboard
Source: /docs/websites/tracking-pixel
The tracking pixel is a few lines of code that go on your website. It is how Platform sees your visitors and turns them into leads. You install it once, on every page, and never touch it again.
Open **Website Settings → Tracking Pixel** for the website you want to track and pick the method that matches how your website is built.
1. **Pick a method:** Google Tag Manager, WordPress or HTML.
2. **Install it** by following the steps for that method below.
3. **Verify** it: click **Verify my website**. The website turns **verified** when we see the code on your site.
### Method 1: Google Tag Manager [#method-1-google-tag-manager]
Use this if your website already loads Google Tag Manager (a marketer or developer set it up).
1. Click **Google Tag Manager**.
2. Click **Continue with Google** and sign in with the Google account that owns your Tag Manager container.
3. We add the Platform tag to your container and publish it. Nothing to paste.
4. Back on the screen, click **Verify my website**.
Want it out again later? The same screen shows **Google Tag Manager — installed** with an **Uninstall tracking pixel** button.
### Method 2: WordPress [#method-2-wordpress]
The Platform plugin is in the official WordPress plugin directory. There is nothing to download from Platform.
1. In your WordPress admin, go to **Plugins → Add New**.
2. Search for **Platform**, click **Install Now**, then **Activate**.
3. Back in Platform, click **Verify my website**.
The plugin adds the code to every page for you, so there is no snippet to paste.
### Method 3: HTML (any other website) [#method-3-html-any-other-website]
Use this for Shopify, Webflow, Wix, Squarespace, HubSpot or any website where you (or your developer) can edit the code of the page.
1. Click **HTML (any other website)**.
2. Under **Where will you paste it?**, pick your platform, or click **Not sure? Detect it**. The steps on the screen then match your platform: where its code box is and how to save.
3. Click **Copy code** under **Your pixel code**.
4. Paste the code inside the `
` of your website, in the place your platform uses for site-wide code (often called "custom code", "header code" or "code injection"). It must load on **every page**, so use a site-wide setting, not a single page.
5. Publish your website if your platform needs it, then click **Verify my website**.
Not technical? Click **Not technical? Invite your web developer**, type their email and an optional message, and click **Send**: they get the code and the steps. After a verification attempt you can also click **Email these steps to a developer**.
#### Where the code goes on each platform [#where-the-code-goes-on-each-platform]
Paste the code exactly as copied, site-wide, then publish and **Verify**.
| Platform | Where |
|---|---|
| Hand-coded HTML | Just before ``. If your pages share a header or template file, add it there once; otherwise add it to every page, then upload the files. |
| BigCommerce | **Storefront → Script Manager → Create a Script.** Placement **Head**, Location **All pages**, Script category **Targeting**, Script type **Script**; paste the code and **Save**. |
| Drupal | Easiest: the Google Tag Manager module, then [Method 1](#method-1-google-tag-manager). Or a head-script module such as **Header and Footer Scripts** (paste in **Header**), or just before `` in your theme's `html.html.twig` (Drupal 7: `html.tpl.php`). Then **Configuration → Performance → Clear all caches**. |
| GoDaddy Website Builder | **Edit Website → Settings → Site-wide code**, paste it in the head box, then **Publish**. Use the site-wide setting, not an HTML section on one page: a section only covers the page it sits on. |
| Joomla | Easiest: a header-code extension (paste it in its head / header field, then enable it). Or edit your template: **System → Site Templates** (Joomla 3: **Extensions → Templates**) → your template → `index.php`, just before ``. Then clear the Joomla cache. |
| Magento | **Content → Design → Configuration**, edit your store view → **HTML Head → Scripts and Style Sheets**, paste, **Save Configuration**, then flush the cache (System → Cache Management). Magento 1: **System → Configuration → Design → HTML Head → Miscellaneous Scripts**. |
| PrestaShop | Easiest: a header-code module (paste it in its header / `` field). Or, in your theme files, just before `` in `templates/_partials/head.tpl`. Then **Advanced Parameters → Performance → Clear cache**. |
| Shopify | **Online Store → Themes → ⋯ → Edit code**, open `layout/theme.liquid`, paste just before `` and **Save**. |
| Squarespace | **Settings → Developer Tools → Code Injection**, paste into **Header**, **Save**. Code Injection is not on Squarespace's Personal plan. |
| Webflow | **Project Settings → Custom Code**, paste into **Head Code**, **Save**, then **Publish**: code only goes live after publishing. Site-wide custom code needs a paid Webflow site plan. |
| Weebly | **Settings → SEO → Header Code**, paste, **Save**, then **Publish**. |
| Wix | **Settings → Custom Code → + Add Custom Code**, paste, place it in **Head**, apply to **All pages**, **Apply**, then **Publish**. Custom Code needs a Premium Wix plan with a connected domain. |
### Check that it works [#check-that-it-works]
Click **Verify my website**. We load the home page of the domain shown under **Website domain** and look for your code; we also count real visits from your site in the last 24 hours.
- **Pixel verified:** the website is marked **verified**. Click **Continue**, or **Qualify Setup** to go straight to [scoring your leads](/docs/qualify/scoring-models).
- **Pixel not found yet:** the screen shows what we found and what to check for your platform. Fix it, then click **Verify again**.
Afterwards the **Tracking Pixel** card on your dashboard shows that it is installed and when it last saw a visit, and the website shows as **verified** in [Websites](/docs/websites/websites). A website shows **unverified** until we have seen the code, and **failed** when we looked and did not find it.
From your AI assistant or your code, `verify_website` does the same check, and `get_website_diagnostics` explains why a verified website gets no leads ([MCP tab](/docs/websites/tracking-pixel/mcp), [API tab](/docs/websites/tracking-pixel/api)).
### Still unverified? [#still-unverified]
Go through this list, then click **Verify again**:
1. **Is the domain right?** The check loads the domain under **Website domain**. If your site lives on `www.` or on another domain, click **Different domain? Change**.
2. **Is the change live?** Site builders and WordPress caching plugins often need you to **publish** or **clear the cache** before the new code is on the page.
3. **Is the code on the home page?** The check loads your home page. Code pasted into a single page or a blog template is not enough: it must be in a site-wide setting.
4. **Is it the whole code?** Click **Copy code again** and paste it once more; a partly pasted snippet is not recognised.
5. **Google Tag Manager:** make sure the container that got the tag is the one your website loads, and that it is published.
If visitors are already reaching your site, the check also passes from their visits in the last 24 hours, even before we find the code on the page. Still stuck? Click **Need a hand? Ask the assistant** on the screen, or **Email these steps to a developer**.
### Pass your own data [#pass-your-own-data]
Attach your own value to each visitor (a session key, Google Analytics ID, user or CRM ID) by setting it **before** the pixel loads:
```js
window.trackingExtraInfo = { sessionKey: 'abc123', userId: 'u_42' }; // or a plain string
```
It comes back as `customData` in [webhooks](/docs/automations/webhook) (an object arrives as JSON text: parse it), as `platformExtraInfo` on the lead in the API, and as the **Custom Data** column in CSV exports. It is not returned over MCP. If the value contains an email address, the pixel also uses it to identify the visitor. Run `window.trackingTestExtraInfo()` in the browser console to create a test lead with your current value.
### Consent banners and GPC [#consent-banners-and-gpc]
- **With a consent manager** (OneTrust, Cookiebot, CookieYes, Complianz…), put the pixel in the **marketing** ("sale or share") category. It then loads only for visitors who allow it, and most consent managers also hold it back for browsers that send the Global Privacy Control (GPC) signal. The pixel does not read GPC itself.
- **Where to put it in each tool** (never in Essential / Strictly necessary or Functional):
- *OneTrust:* the Targeting Cookies group (C0004), or set the tag to `type="text/plain"` with `class="optanon-category-C0004"`.
- *Cookiebot:* set the tag to `type="text/plain"` and add `data-cookieconsent="marketing"`.
- *CookieYes:* add `data-cookieyes="cookieyes-advertisement"` to the tag.
- *Complianz (WordPress):* Integrations → Script Center → add the pixel → Marketing.
- *Google Tag Manager with Consent Mode:* the pixel's tag → Advanced Settings → Consent Settings → **Require additional consent for tag to fire** → `ad_storage`.
- *Wix:* Settings → Custom Code → the pixel's code → Code type → Marketing.
- **Check it:** in a private window accept all cookies, browse two pages, then **Verify** the website. No leads at all afterwards usually means the pixel is blocked for everyone: check the category.
- **Without one, on Google Tag Manager:** add a Custom JavaScript variable that returns `navigator.globalPrivacyControl === true` and use it as an exception on the pixel's trigger.
- Visitors who decline or ignore the banner are not identified, so expect fewer leads than without a banner.
### Common questions [#common-questions]
**Does the pixel slow my website down?** No. The code is marked `defer`, so the browser loads it after your page has shown, and visitors never wait for it.
**Do I need it on every page?** Yes. A visitor who only opens a page without the code is never seen. Google Tag Manager and the WordPress plugin cover every page for you; with HTML, use your platform's site-wide code setting.
**The pixel is verified but I see no leads.** Give it a little traffic first, and check that your visitors come from [countries we cover](/docs/leads/website-visitors/see-your-leads#which-countries-get-the-exact-person). Then check that nothing stops new leads: an ended trial, no credits left or a paused plan ([what happens when my trial ends](/docs/account/trials-and-codes#when-your-trial-ends), [when your leads run out](/docs/account/billing#when-your-leads-run-out)). Your Qualify rules can also keep leads out on purpose ([Exclude leads](/docs/qualify/exclusions)).
**I moved to a new website or domain.** Install the same code on the new site, then change the domain under **Different domain? Change** and verify again. Each website in Platform has its own code: use the one from that website's screen.
**Can I turn the pixel off?** Yes. Remove the code (or the plugin, or the Tag Manager tag) and visitors are no longer identified. [Deleting the website](/docs/websites/websites) also stops tracking.
### Every control on this screen [#every-control-on-this-screen]
Every button, field and switch, with what it does.
---
## API — From your code
Source: /docs/websites/tracking-pixel/api
Authenticated with `?privateKey=YOUR_KEY` (see [Authentication](/docs/authentication)).
### Use case: Install for a client [#use-case-install-for-a-client]
`GET /v3/websites/{websiteId}/pixel` returns `trackingScript` (the code to put on every page), `clientId`, `status` and `url`. Once the code is live, `POST /utilities/verify-website` with `{ "id": "", "websiteURL": "acme.example" }` loads that page and looks for the code; it also counts real visits from the site in the last 24 hours. The answer is `{ "verified": true, "verificationMethod": "script" }` (or `"recent-activity"` when visits proved it). On success the website's `status` becomes `verified`; otherwise it stays `unverified` (or becomes `removed` if it was verified before) and the answer says what to check.
### Use case: Switch a tracking option for every website [#use-case-switch-a-tracking-option-for-every-website]
`PUT /v3/account/tracking-settings` turns `trackExactVisitors`, `trackCompanyWithSuggestedContacts`, `trackPersonalEmails` or `sessionRecordingEnabled` on or off for all websites of the account at once. For one website only, use `PUT /admin/websites/{id}` ([Websites API](/docs/websites/websites/api)).
---
## MCP — AI agents
Source: /docs/websites/tracking-pixel/mcp
Connect the [MCP server](/docs/mcp#quickstart), then just ask.
### Use case [#use-case]
> Give me the pixel code for acme.example and check if it is installed.
```json
{
"websiteId": "64b7f0a1c2d3e4f5a6b7c8d9"
}
```
Your assistant finds the `websiteId` with `list_websites` first, hands you the code to put on every page, then runs the check:
```json
{
"websiteId": "64b7f0a1c2d3e4f5a6b7c8d9"
}
```
It loads your website's home page (the `url` saved on the website) and looks for the code. When found, the website is marked **verified**. An empty answer means the code was not on the page, the page could not be loaded, or the website has no `url` yet; your assistant sets it with `update_website` and tries again.
> My website is verified but I get no leads. Why?
Your assistant calls `get_website_diagnostics` ([Website analytics](/docs/websites/analytics/mcp)): it answers in one line whether new leads are blocked and why (trial ended, no credits left, account paused), how many leads came in the last 48 hours and when the last one was created.
> Stop identifying people with personal email addresses on all my websites.
```json
{
"websiteId": "64b7f0a1c2d3e4f5a6b7c8d9",
"trackPersonalEmails": false
}
```
This applies to every website of the account at once. Your assistant confirms with you first, because it changes which leads are created.
# Websites
> Add, edit and remove the websites you track, and share your plan's leads between them.
Every section below does the same job: in the dashboard (Guide), from your code (API) or through an AI assistant (MCP).
## Guide — In the dashboard
Source: /docs/websites/websites
A website in Platform is one site you track. Each one gets its own tracking pixel, its own leads, its own Qualify rules and settings. The website you are looking at is shown at the top of the sidebar; the **website switcher** there moves you to another one.
1. **Websites → Add new website.** Give it a name (you can change it later).
2. **Install its pixel** on that site ([Install the tracking pixel](/docs/websites/tracking-pixel)). Until then the website shows as **unverified**.
3. **Quick edit** a website (click its row) to see its plan, credits and pixel, copy its code, add a tag or open **All website settings**.
### The Websites list [#the-websites-list]
Every website you have, with its tracking status, plan and credits. Search by domain, sort, or use the filters at the top: **Trial ending**, **Low credits**, **Pixel not installed**. Tags (a client name, a market) group websites; click a tag to filter by it.
- **Switch to this website** opens it in the dashboard; the star in the website switcher makes one your default.
- **Quick edit** shows and changes the basics without leaving the list.
- **Website settings** opens everything: the pixel, visitor tracking, limits, date and time, and the delete section.
### Common questions [#common-questions]
**Can I track more than one website?** Yes. Every website gets its own pixel and its own leads. On a trial or a paid plan you add as many websites as you need; a lifetime deal gives one website per code ([Lifetime deal codes](/docs/account/trials-and-codes#lifetime-deal-codes)).
**Do my websites share credits?** By default, yes: all websites draw on the account's leads. To ring-fence one (for example a client's site), open its **Website settings → Website Limits** and choose **Give it its own limit**: how many leads it may use per month, or for its trial, and when it refills. **Share account credits** puts it back on the shared pool.
**How do I switch between websites?** Click the website name at the top of the sidebar and pick another one, or use **Switch to this website** in the Websites list. Leads, Qualify and settings always show the website you have selected.
**How do I rename a website?** Click its row, change the name in Quick edit and **Save changes**. The name is for you only; it does not change the pixel.
**What happens when I delete a website?** Tracking stops, its leads are no longer shown and its place on your plan is freed. It cannot be restored, so copy or export what you need first ([Export leads](/docs/leads/csv-export)). Only a teammate with the delete-websites permission can do it ([Team members](/docs/account/team)).
**Why is a website unverified?** We have not seen its pixel yet. [Install the tracking pixel](/docs/websites/tracking-pixel#still-unverified) has the checklist.
### Every control on this screen [#every-control-on-this-screen]
Every button, field and switch, with what it does.
---
## API — From your code
Source: /docs/websites/websites/api
Authenticated with `?privateKey=YOUR_KEY` (see [Authentication](/docs/authentication)).
### Use case: Create a website for a new client [#use-case-create-a-website-for-a-new-client]
`POST /admin/websites` with its `name` (and `domain` if you know it) returns the new website's id. Then `GET /v3/websites/{websiteId}/pixel` gives the code to put on the client's site, and `POST /utilities/verify-website` checks it is live ([tracking pixel API](/docs/websites/tracking-pixel/api)). A new website uses one of your plan's website places; when none are left the call is refused with "You cannot add more websites, please upgrade".
### Use case: One plan, several clients [#use-case-one-plan-several-clients]
`PUT /v3/websites/{websiteId}/limits` with `{ "credits": 300, "emailAccounts": 2 }` caps what one website may use of the account's leads and mailboxes each cycle; `"resetCredits": true` refills it to the full allowance now (when a client pays). `PATCH /admin/websites/{id}/tags` labels websites by client or market.
---
## MCP — AI agents
Source: /docs/websites/websites/mcp
Connect the [MCP server](/docs/mcp#quickstart), then just ask.
### Use case [#use-case]
> List my websites.
```json
{}
```
Each website comes back with its `_id` (the `websiteId` every other tool needs), name, url, status (`unverified`, `verified`, `removed` or `failed`), credits and tags.
> Add a website for our new client, northwind.example, and give me its pixel code.
```json
{
"name": "Northwind marketing site"
}
```
Your assistant confirms with you first, because a new website uses one of your plan's website places. It then sets the address with `update_website` (`url: "https://www.northwind.example"`), fetches the code with `get_tracking_pixel` and, once the code is on the site, checks it with `verify_website` ([Install the tracking pixel](/docs/websites/tracking-pixel/mcp)).
> Let the Northwind website use at most 300 leads a month and connect 2 mailboxes.
```json
{
"websiteId": "64b7f0a1c2d3e4f5a6b7c8d9",
"credits": 300,
"emailAccounts": 2
}
```
For accounts that share one plan between several websites (one per client, for example). The credits cannot go above what the account has left; add `"resetCredits": true` to refill the website to its full allowance now.
> Tag the Northwind website "client" and "retail".
```json
{
"websiteId": "64b7f0a1c2d3e4f5a6b7c8d9",
"tags": ["client", "retail"]
}
```
The list you send replaces the website's tags.
> Delete the old staging website.
```json
{
"websiteId": "64b7f0a1c2d3e4f5a6b7c8d9"
}
```
Your assistant names the website and asks you to confirm: tracking stops, its leads are no longer shown and it cannot be restored.