PersuadioAI
Qué hace este MCP
Manages leads and outreach campaigns, supports audience selection and message drafting, analyzes responses, and launches SMS campaigns only after explicit approval.
Herramientas
Esquema de entrada
{'type': 'object', 'required': ['campaign_id', 'lead_ids'], 'properties': {'lead_ids': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Lead ids to move (from find_lead, list_leads or search_leads).'}, 'campaign_id': {'type': 'string', 'description': 'The destination campaign.'}, 'idempotency_key': {'type': 'string', 'maxLength': 200, 'description': 'Optional but recommended. Retrying the same key returns the same result instead of re-running the move; reusing it with different arguments is rejected as idempotency_conflict.'}}, 'additionalProperties': False}
Esquema de entrada
{'type': 'object', 'properties': {'campaign_id': {'type': 'string', 'description': 'Limit to one campaign. Omit to cover every campaign this account owns.'}}, 'additionalProperties': False}
Esquema de entrada
{'type': 'object', 'required': ['campaign_id', 'lead_ids'], 'properties': {'lead_ids': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Lead ids to move (from find_lead, list_leads or search_leads).'}, 'campaign_id': {'type': 'string', 'description': 'The destination campaign.'}, 'idempotency_key': {'type': 'string', 'maxLength': 200, 'description': 'Optional but recommended. Retrying the same key returns the same result instead of re-running the move; reusing it with different arguments is rejected as idempotency_conflict.'}}, 'additionalProperties': False}
Esquema de entrada
{'type': 'object', 'required': ['campaign_id'], 'properties': {'lead_ids': {'type': 'array', 'items': {'type': 'string'}, 'description': "Check a subset of the campaign's leads. Omit for all of them."}, 'campaign_id': {'type': 'string', 'description': 'The campaign to check.'}}, 'additionalProperties': False}
Esquema de entrada
{'type': 'object', 'required': ['source_campaign_id', 'name', 'idempotency_key'], 'properties': {'name': {'type': 'string', 'maxLength': 120, 'description': 'Name for the new draft campaign.'}, 'channels': {'type': 'array', 'items': {'enum': ['email', 'sms', 'voice'], 'type': 'string'}, 'minItems': 1, 'description': "Optional explicit channel narrowing on the new draft. Example: ['sms'] makes an SMS campaign text-only and prevents AI/voice calling. This can only narrow the campaign type, never widen it.", 'uniqueItems': True}, 'lead_ids': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Existing lead ids to include (from find_lead/list_leads). May be combined with import_ids; deduplicated together.'}, 'import_ids': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Preferred for bulk audiences: import_id values from preview_lead_import/import_leads_from_file. Combine several to merge multiple imported files.'}, 'description': {'type': 'string', 'maxLength': 2000, 'description': "Optional new description. Omit to keep the source campaign's description."}, 'from_address_id': {'type': 'string', 'description': 'Optional verified sender to pin on an email/both clone. Must belong to this account and remain on a live sending domain. Readiness re-checks final eligibility before launch.'}, 'idempotency_key': {'type': 'string', 'maxLength': 200, 'description': 'Required. Repeat a retried call safely — the same key returns the same cloned campaign instead of creating a duplicate.'}, 'channel_override': {'enum': ['email', 'sms', 'both'], 'type': 'string', 'description': "Override the cloned campaign's channel. Omit to keep the source campaign's channel."}, 'source_campaign_id': {'type': 'string', 'description': 'The campaign to copy settings from. Must be owned by this account.'}}, 'additionalProperties': False}
Esquema de entrada
{'type': 'object', 'required': ['name', 'message'], 'properties': {'name': {'type': 'string', 'maxLength': 120, 'description': 'A name the operator will recognise in their dashboard.'}, 'message': {'type': 'string', 'maxLength': 320, 'description': 'The opening SMS, 320 characters or fewer. Say who is writing and why. Do not imply a prior conversation or a deadline. An opt-out line is appended automatically on first contact.'}, 'lead_ids': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Existing leads to move into this campaign. Ids outside this account are ignored.'}, 'description': {'type': 'string', 'maxLength': 2000, 'description': 'Context for the operator: who this targets and why.'}, 'idempotency_key': {'type': 'string', 'maxLength': 120, 'description': 'Repeat a retried call safely — the same key returns the same campaign.'}, 'outreach_vertical': {'enum': ['home_purchase', 'b2b'], 'type': 'string', 'maxLength': 40, 'description': "Who the recipients ARE. 'home_purchase' — homeowners who might sell. 'b2b' — businesses and operators in the industry, never contacted about a house they live in. This chooses the copy rules AND which registered number the campaign may text from, so set it here rather than later: a b2b campaign left unset is treated as homeowner outreach. Omit it only when the campaign genuinely is homeowner outreach or you do not know."}}, 'additionalProperties': False}
Esquema de entrada
{'type': 'object', 'required': ['campaign_id'], 'properties': {'name': {'type': 'string', 'description': 'Full name, if first/last are not given separately.'}, 'email': {'type': 'string'}, 'notes': {'type': 'string'}, 'phone': {'type': 'string', 'description': 'Any common format; at least one of phone/email is required.'}, 'last_name': {'type': 'string'}, 'first_name': {'type': 'string'}, 'campaign_id': {'type': 'string', 'description': 'The campaign this lead belongs to (required — every lead lives in a campaign).'}, 'company_name': {'type': 'string'}}, 'additionalProperties': False}
Esquema de entrada
{'type': 'object', 'required': ['query'], 'properties': {'query': {'type': 'string', 'description': 'A phone number, an email address, or part of a name.'}, 'campaign_id': {'type': 'string', 'description': 'Optional: narrow the search to one campaign.'}}, 'additionalProperties': False}
Esquema de entrada
{'type': 'object', 'properties': {'limit': {'type': 'integer', 'maximum': 100, 'minimum': 1}, 'offset': {'type': 'integer', 'minimum': 0}, 'status': {'type': 'string', 'description': "Filter the list by status, e.g. 'active', 'draft', 'paused'."}, 'campaign_id': {'type': 'string', 'description': 'One campaign. Omit to list all of them.'}}, 'additionalProperties': False}
Esquema de entrada
{'type': 'object', 'properties': {'days': {'type': 'integer', 'maximum': 365, 'minimum': 1, 'description': 'How far back to look, in days (1-365). Default 30.'}, 'limit': {'type': 'integer', 'maximum': 100, 'minimum': 1}, 'offset': {'type': 'integer', 'minimum': 0}, 'campaign_id': {'type': 'string', 'description': 'Limit to one campaign.'}}, 'additionalProperties': False}
Esquema de entrada
{'type': 'object', 'required': ['file', 'idempotency_key'], 'properties': {'file': {'type': 'object', 'required': ['filename', 'content_base64'], 'properties': {'filename': {'type': 'string', 'maxLength': 255, 'description': "Original filename, e.g. 'alameda_investors.xlsx'. Determines .csv vs .xlsx parsing."}, 'content_base64': {'type': 'string', 'description': 'The raw file bytes, base64-encoded.'}}, 'description': "The uploaded lead file, inline. filename + content_base64 (raw file bytes, base64-encoded) — this server's transport is stateless JSON-RPC with no separate attachment channel, so the file rides in the tool call itself. .csv and .xlsx only; 15MB decoded max.", 'additionalProperties': False}, 'mode': {'enum': ['upsert'], 'type': 'string', 'description': "Import mode. Only 'upsert' (create new, update existing) is currently supported."}, 'tags': {'type': 'array', 'items': {'type': 'string'}, 'maxItems': 25, 'description': 'Optional labels applied to every imported/updated lead.'}, 'source': {'type': 'string', 'maxLength': 100, 'description': "Where this list came from, e.g. 'PropStream export'. Stored as provenance and never overwritten on re-import."}, 'dedupe_by': {'type': 'array', 'items': {'enum': ['phone', 'email'], 'type': 'string'}, 'description': 'Which normalized fields count as a duplicate match. Default: ["phone", "email"] (either matching is a duplicate).'}, 'column_mapping': {'type': 'object', 'description': "Optional override of auto-detected columns: {target_field: 'exact column name in the file'}. Target fields: first_name, last_name, full_name, phone, mobile_phone, email, address, property_address, city, state, zip, company_name. Anything not given here falls back to auto-detection.", 'additionalProperties': {'type': 'string'}}, 'idempotency_key': {'type': 'string', 'maxLength': 200, 'description': 'Required. Repeat a retried call safely — the same key returns the same import result instead of importing twice.'}}, 'additionalProperties': False}
Esquema de entrada
{'type': 'object', 'required': ['campaign_id', 'approval_token'], 'properties': {'channel': {'enum': ['sms', 'email'], 'type': 'string', 'description': "Must match the channel the readiness review approved. Default 'sms'; 'email' launches email-only."}, 'lead_ids': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Must match the subset that was reviewed and approved.'}, 'campaign_id': {'type': 'string', 'description': 'The campaign to launch.'}, 'from_number': {'type': 'string', 'description': 'SMS channel only: the same outbound number the readiness review was run with. Omit for automatic sender routing.'}, 'confirmation': {'type': 'string', 'description': 'The exact confirmation phrase from the readiness review. Optional only when operator_authorized_this_launch=true.'}, 'approval_token': {'type': 'string', 'description': 'The token from review_campaign_readiness. Single-use and short-lived.'}, 'from_address_id': {'type': 'string', 'description': 'Email channel only: the same from_address_id the readiness review was run with (the approval binds to it).'}, 'all_textable_numbers': {'type': 'boolean', 'description': 'SMS only. Must match the readiness review. When true, queue one separate text to every approved textable phone on each selected lead.'}, 'operator_authorized_this_launch': {'type': 'boolean', 'description': 'Set true only when the authenticated human operator explicitly asked to launch this exact campaign in the current interactive turn. Never set for scheduled/background execution, standing preferences, prior approvals, or inferred intent.'}}, 'additionalProperties': False}
Esquema de entrada
{'type': 'object', 'properties': {}, 'additionalProperties': False}
Esquema de entrada
{'type': 'object', 'properties': {'limit': {'type': 'integer', 'maximum': 100, 'minimum': 1}, 'offset': {'type': 'integer', 'minimum': 0}, 'status': {'type': 'string', 'description': "Optional lead status filter, e.g. 'active'."}, 'campaign_id': {'type': 'string', 'description': 'Optional: one campaign only.'}}, 'additionalProperties': False}
Esquema de entrada
{'type': 'object', 'required': ['campaign_id'], 'properties': {'reason': {'type': 'string', 'maxLength': 500, 'description': "Why it is being paused, for the operator's records."}, 'campaign_id': {'type': 'string', 'description': 'The campaign to pause.'}}, 'additionalProperties': False}
Esquema de entrada
{'type': 'object', 'required': ['file'], 'properties': {'file': {'type': 'object', 'required': ['filename', 'content_base64'], 'properties': {'filename': {'type': 'string', 'maxLength': 255, 'description': "Original filename, e.g. 'alameda_investors.xlsx'. Determines .csv vs .xlsx parsing."}, 'content_base64': {'type': 'string', 'description': 'The raw file bytes, base64-encoded.'}}, 'description': "The uploaded lead file, inline. filename + content_base64 (raw file bytes, base64-encoded) — this server's transport is stateless JSON-RPC with no separate attachment channel, so the file rides in the tool call itself. .csv and .xlsx only; 15MB decoded max.", 'additionalProperties': False}, 'dedupe_by': {'type': 'array', 'items': {'enum': ['phone', 'email'], 'type': 'string'}, 'description': 'Which normalized fields count as a duplicate match. Default: ["phone", "email"] (either matching is a duplicate).'}, 'column_mapping': {'type': 'object', 'description': "Optional override of auto-detected columns: {target_field: 'exact column name in the file'}. Target fields: first_name, last_name, full_name, phone, mobile_phone, email, address, property_address, city, state, zip, company_name. Anything not given here falls back to auto-detection.", 'additionalProperties': {'type': 'string'}}}, 'additionalProperties': False}
Esquema de entrada
{'type': 'object', 'properties': {'goal': {'type': 'string', 'maxLength': 500, 'description': 'What the operator is trying to achieve, in their words.'}, 'campaign_id': {'type': 'string', 'description': 'Limit to one campaign. Omit to cover the whole account.'}}, 'additionalProperties': False}
Esquema de entrada
{'type': 'object', 'required': ['campaign_id'], 'properties': {'channel': {'enum': ['sms', 'email'], 'type': 'string', 'description': "How the campaign goes out. Default 'sms' (text + voice where applicable). 'email' reviews an email-only launch."}, 'lead_ids': {'type': 'array', 'items': {'type': 'string'}, 'description': "Review a subset of the campaign's leads. Omit for all of them."}, 'campaign_id': {'type': 'string', 'description': 'The campaign to review.'}, 'from_number': {'type': 'string', 'description': 'SMS channel only: an approved outbound number for this account. Omit for automatic sender routing.'}, 'from_address_id': {'type': 'string', 'description': 'Email channel only: the sender identity to send from (see list_from_addresses). Omit to use the account default.'}, 'all_textable_numbers': {'type': 'boolean', 'description': "SMS only. When true, approve one separate text to every eligible textable phone on each selected lead. Used by DealFinder's attended Send-to-all action."}}, 'additionalProperties': False}
Esquema de entrada
{'type': 'object', 'properties': {'city': {'type': 'string', 'description': 'Exact city, case-insensitive.'}, 'sort': {'enum': ['newest', 'oldest', 'score'], 'type': 'string', 'description': "Deterministic orders (ties broken by id). Default 'newest'."}, 'tags': {'type': 'array', 'items': {'type': 'string'}, 'maxItems': 25, 'description': 'Leads carrying ANY of these tags.'}, 'limit': {'type': 'integer', 'maximum': 200, 'minimum': 1, 'description': 'Page size, max 200. Default 25.'}, 'state': {'type': 'string', 'description': "Exact state, case-insensitive, e.g. 'CA'."}, 'county': {'type': 'string', 'description': 'Exact county, case-insensitive.'}, 'offset': {'type': 'integer', 'minimum': 0}, 'source': {'type': 'string', 'description': "Exact source label, case-insensitive, e.g. 'PropStream export'."}, 'status': {'type': 'string', 'description': "Lead status, e.g. 'new'."}, 'has_phone': {'type': 'boolean', 'description': 'Filter on having any phone at all.'}, 'lead_type': {'type': 'string', 'description': "Matches the lead's lead_type/investor_type field."}, 'opted_out': {'type': 'boolean', 'description': 'Lead flag OR suppression-list match (phone-format tolerant).'}, 'suppressed': {'type': 'boolean', 'description': 'do-not-contact / unsubscribed.'}, 'campaign_id': {'type': 'string', 'description': 'Only leads currently in this campaign/list (must be owned by this account).'}, 'sms_eligible': {'type': 'boolean', 'description': 'Textable phone (cell, not landline-only), not opted out, not suppressed. Send-time compliance still re-checks.'}, 'investor_type': {'type': 'string', 'description': 'Exact alias for lead_type — same field, same matching. Pass one or the other, not different values for both.'}, 'contact_status': {'enum': ['never_contacted', 'contacted_no_reply', 'replied'], 'type': 'string', 'description': 'never_contacted = no opening SMS ever claimed for the lead and no reply on record.'}}, 'additionalProperties': False}
Esquema de entrada
{'type': 'object', 'required': ['campaign_id', 'requested_count', 'idempotency_key'], 'properties': {'filters': {'type': 'object', 'properties': {'city': {'type': 'string', 'description': 'Exact city, case-insensitive.'}, 'tags': {'type': 'array', 'items': {'type': 'string'}, 'maxItems': 25, 'description': 'Leads carrying ANY of these tags.'}, 'state': {'type': 'string', 'description': "Exact state, case-insensitive, e.g. 'CA'."}, 'county': {'type': 'string', 'description': 'Exact county, case-insensitive.'}, 'source': {'type': 'string', 'description': "Exact source label, case-insensitive, e.g. 'PropStream export'."}, 'status': {'type': 'string', 'description': "Lead status, e.g. 'new'."}, 'has_phone': {'type': 'boolean', 'description': 'Filter on having any phone at all.'}, 'lead_type': {'type': 'string', 'description': "Matches the lead's lead_type/investor_type field."}, 'opted_out': {'type': 'boolean', 'description': 'Lead flag OR suppression-list match (phone-format tolerant).'}, 'suppressed': {'type': 'boolean', 'description': 'do-not-contact / unsubscribed.'}, 'campaign_id': {'type': 'string', 'description': 'Only leads currently in this campaign/list (must be owned by this account).'}, 'sms_eligible': {'type': 'boolean', 'description': 'Textable phone (cell, not landline-only), not opted out, not suppressed. Send-time compliance still re-checks.'}, 'investor_type': {'type': 'string', 'description': 'Exact alias for lead_type — same field, same matching. Pass one or the other, not different values for both.'}, 'contact_status': {'enum': ['never_contacted', 'contacted_no_reply', 'replied'], 'type': 'string', 'description': 'never_contacted = no opening SMS ever claimed for the lead and no reply on record.'}}, 'description': 'Same vocabulary as search_leads. filters.campaign_id = the source campaign/list to select FROM.', 'additionalProperties': False}, 'campaign_id': {'type': 'string', 'description': "The DRAFT campaign to attach to. Must be owned by this account and have status 'draft'."}, 'idempotency_key': {'type': 'string', 'maxLength': 200, 'description': 'Required. Retrying the same key returns the same selection instead of attaching twice; reusing it with different arguments is rejected.'}, 'requested_count': {'type': 'integer', 'maximum': 500, 'minimum': 1, 'description': 'Exactly this many leads when enough are eligible; fewer (with an honest shortfall report) when not.'}, 'selection_strategy': {'enum': ['best_eligible'], 'type': 'string', 'description': "Only 'best_eligible' (score desc, then newest; SMS-eligible only) is currently supported."}}, 'additionalProperties': False}
Esquema de entrada
{'type': 'object', 'required': ['campaign_id', 'message'], 'properties': {'message': {'type': 'string', 'maxLength': 320, 'description': 'The replacement opening SMS, 320 characters or fewer. Say who is writing and why. Do not imply a prior conversation or a deadline. An opt-out line is appended automatically on first contact, so do not write one into the message.'}, 'campaign_id': {'type': 'string', 'maxLength': 64, 'description': 'The DRAFT campaign whose opening message should change. Must be owned by this account.'}, 'idempotency_key': {'type': 'string', 'maxLength': 120, 'description': 'Recommended. Repeat a retried call safely — the same key with the same message replays the first result; the same key with a different message is refused.'}}, 'additionalProperties': False}
Cambios recientes en herramientas
Servidores MCP similares
neuron
Operates AI chatbots and messaging workflows across WhatsApp and social channels, including contacts, campaigns, conversations, p…
Emailchaser
Manages cold-email campaigns, leads, sender mailboxes, sequences, outreach automation, deliverability, prospect sourcing, webhook…
send16-mcp
Provides email marketing and transactional messaging tools for contacts, audiences, campaigns, templates, automations, analytics,…
agent-cold-email
Manages cold-email infrastructure, lead lists, campaigns, mailbox provisioning, sending, replies, suppression, and deliverability…
bird
Reads Bird workspace email, SMS, and WhatsApp messages and manages contacts and audiences through additive CRM operations.
Smartwebchat
Creates and manages website chatbots, tests responses, diagnoses deployment issues, captures leads, and updates lead statuses.
loops
Manages Loops contacts and custom properties, mailing lists, event-triggered automations, and transactional email delivery.
Bottled
Manages branded domain email, aliases, contacts, drafts, one-to-one messages, campaigns, delivery controls, domain verification, …