Skip to content

PersuadioAI

by persuadioai.com · remote · no sign-in to list tools · v1.0.1 · published by com.persuadioai

Analyze leads, draft follow-up campaigns, and launch SMS outreach only with explicit human approval.

Deletes · 1Changes · 11

22 tools: 1 can delete or cancel things, 11 change things and 10 only read.

Scanned Oct 21, 2026

No check matched anything in the tool definitions. No finding is not a safety guarantee. How the checks work.

claude mcp add --transport http persuadioai https://api.persuadioai.com/mcp

Tools

Open a tool for its reasons and full description. Descriptions are the publisher's own words, shown as they are.

22 tools

Deletes or cancels 1Claude Code: deny
  • launch_approved_campaignSENDS REAL MESSAGES TO REAL PEOPLE.No findings

    Why it is in this group

    • The description's first verb is "send": a word for sending, and what is sent cannot be taken back.
    • The description says "irreversible".
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote it
    SENDS REAL MESSAGES TO REAL PEOPLE. This is irreversible and costs credits. It requires an approval_token from review_campaign_readiness and explicit operator authorization for this exact launch. In an interactive current turn where the human explicitly asked to send this campaign, pass operator_authorized_this_launch=true instead of asking them to copy/paste the server phrase. Never set that flag for a scheduled or background run, standing instructions, prior approval, enthusiasm, or inferred intent. Never infer approval. Never generate the confirmation yourself. The exact confirmation phrase remains supported for other clients. Never reuse an approval issued for a different campaign or a different size.

    Annotations the server declares

    • title: Launch an approved campaign
    • readOnlyHint: false
    • destructiveHint: true
    • idempotentHint: false
    • openWorldHint: true
Changes things 11Claude Code: ask
  • add_leads_to_campaignMove leads this account owns into a campaign this account owns, by explicit id.No findings

    Why it is in this group

    • The name "add_leads_to_campaign" says "add": a word for a change.
    Description, as the server wrote it
    Move leads this account owns into a campaign this account owns, by explicit id. Updates membership only — sends nothing. Opted-out and suppressed leads are REJECTED with per-lead skip reasons even when listed explicitly; leads already in the target are deduplicated; the response includes the campaign's final lead count read back from the database. To pick the audience by filter instead of by id, use select_and_attach_leads (same attach semantics, driven by search_leads filters). If the target campaign was already reviewed, its earlier approval is stale (the launch step recounts recipients and refuses a token approved for a smaller audience), so a fresh review_campaign_readiness is required before launching.

    Annotations the server declares

    • title: Add leads to campaign
    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: false
  • attach_leads_to_campaignAttach leads this account owns to a campaign this account owns, by explicit id.No findings

    Why it is in this group

    • The name "attach_leads_to_campaign" says "attach": a word for a change.
    Description, as the server wrote it
    Attach leads this account owns to a campaign this account owns, by explicit id. Synonym for add_leads_to_campaign — same tool, same behavior, same response shape, just the verb some callers expect. Updates membership only — sends nothing. Opted-out and suppressed leads are REJECTED with per-lead skip reasons even when listed explicitly; leads already in the target are deduplicated; the response includes the campaign's final lead count read back from the database. To pick the audience by filter instead of by id, use select_and_attach_leads (same attach semantics, driven by search_leads filters). If the target campaign was already reviewed, its earlier approval is stale (the launch step recounts recipients and refuses a token approved for a smaller audience), so a fresh review_campaign_readiness is required before launching.

    Annotations the server declares

    • title: Attach leads to campaign
    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: false
  • clone_campaign_draftCopy a previous campaign's configuration (channel, message template, AI instructions, follow-up sequence, sender/automation settings) onto a brand-new campaign, and attach an audie…No findings

    Why it is in this group

    • The description's first verb is "copy": a word for a change.
    Description, as the server wrote it
    Copy a previous campaign's configuration (channel, message template, AI instructions, follow-up sequence, sender/automation settings) onto a brand-new campaign, and attach an audience to it. THE RESULT IS ALWAYS A DRAFT — this tool NEVER launches, NEVER sends, and never touches an approval token; it does not call launch_approved_campaign under any circumstance. import_ids (from preview_lead_import / import_leads_from_file) is the preferred way to supply a bulk audience — give several to combine multiple imported files into one campaign; leads are deduplicated across every import_id and lead_id given. At least one of import_ids/lead_ids should normally be supplied, or the clone has no audience. Use channels=['sms'] when the new draft must be text-only with no AI/voice calls, and from_address_id to pin the verified email identity on an email clone. After this, call review_campaign_readiness; only an explicit human approval may lead to launch_approved_campaign.

    Annotations the server declares

    • title: Clone a campaign as a new draft
    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: false
  • create_campaign_draftCreate a campaign in draft status with its opening SMS.No findings

    Why it is in this group

    • The name "create_campaign_draft" says "create": a word for a change.
    Description, as the server wrote it
    Create a campaign in draft status with its opening SMS. THIS SENDS NOTHING — a draft cannot deliver a message. It exists so a human can read the exact wording and audience before deciding. The message is rejected if it implies a prior relationship or manufactures urgency. After this, call review_campaign_readiness.

    Annotations the server declares

    • title: Create a campaign draft
    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: false
  • create_leadAdd a single lead to a campaign this account owns.No findings

    Why it is in this group

    • The name "create_lead" says "create": a word for a change.
    Description, as the server wrote it
    Add a single lead to a campaign this account owns. Requires campaign_id plus at least a phone or an email; deduplicates against the account's existing leads by contact detail. Writes a record only — sends nothing, to nobody, ever.

    Annotations the server declares

    • title: Create lead
    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: false
  • import_leads_from_fileUpsert leads from an uploaded CSV or XLSX file into this account.No findings

    Why it is in this group

    • The name "import_leads_from_file" says "import": a word for a change.
    Description, as the server wrote it
    Upsert leads from an uploaded CSV or XLSX file into this account. WRITES TO THE DATABASE — SENDS NOTHING on any channel, ever; this only stores contacts. Deduplicates by phone/email (dedupe_by, default both) against both the file itself and every lead already in this account. Re-importing a lead that is opted-out, suppressed, or do-not-contact NEVER clears those flags and NEVER moves the lead — only genuinely new contacts are created. Returns an import_id: pass it to clone_campaign_draft's import_ids to attach this audience to a campaign. idempotency_key is required — retrying the same key returns the same result rather than importing twice; reusing it with different arguments is rejected as idempotency_conflict.

    Annotations the server declares

    • title: Import leads from a CSV/XLSX file
    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • pause_campaignStop a campaign from sending anything further.No findings

    Why it is in this group

    • The description's first verb is "stop": a word for a change.
    Description, as the server wrote it
    Stop a campaign from sending anything further. Queued messages that have not yet gone out are skipped; anything already handed to the carrier cannot be recalled. Safe to call when unsure — pausing is reversible and errs toward not contacting people.

    Annotations the server declares

    • title: Pause a campaign
    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • recommend_followup_campaignPropose how to follow up, based on which leads have never been contacted, were contacted without replying, or already replied.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Propose how to follow up, based on which leads have never been contacted, were contacted without replying, or already replied. Returns segments with counts and a suggested approach for each. Read-only — this is a proposal to discuss with the operator, not a plan that has been put into effect.

    Annotations the server declares

    • title: Recommend a follow-up campaign
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • review_campaign_readinessPre-flight a campaign: how many people would be contacted, on which channels, what it would cost, and which checks pass, warn or fail.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Pre-flight a campaign: how many people would be contacted, on which channels, what it would cost, and which checks pass, warn or fail. SENDS NOTHING. If everything passes, it returns a short-lived approval token and a confirmation phrase — both of which a human operator must authorise before launch_approved_campaign will do anything. Run this before every launch; the token is single-use and campaign-specific.

    Annotations the server declares

    • title: Review campaign readiness
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: false
  • select_and_attach_leadsDeterministically select up to requested_count SMS-eligible leads matching the same filters search_leads accepts (nested under 'filters') and attach them to a DRAFT campaign this a…No findings

    Why it is in this group

    • The name "select_and_attach_leads" says "select": a word for a change.
    • The name "select_and_attach_leads" also says "attach": a word for a change.
    Description, as the server wrote it
    Deterministically select up to requested_count SMS-eligible leads matching the same filters search_leads accepts (nested under 'filters') and attach them to a DRAFT campaign this account owns — the same membership move add_leads_to_campaign performs, driven by a filter instead of an id list. SENDS NOTHING and never launches. Opted-out and suppressed leads are never selected; leads already in the target are skipped. best_eligible orders by score (highest first) then newest, so the same request against the same data selects the same leads; the response lists the exact ids attached, the eligible total, and an honest shortfall when fewer matched than requested. Attaching to a reviewed campaign makes its earlier approval stale (the launch step recounts recipients and refuses a token approved for a smaller audience), so review_campaign_readiness must run again — and then STOP for the human operator.

    Annotations the server declares

    • title: Select eligible leads and attach them to a draft
    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • update_campaign_messageRewrite the opening SMS of a campaign that is still a DRAFT.No findings

    Why it is in this group

    • The name "update_campaign_message" says "update": a word for a change.
    Description, as the server wrote it
    Rewrite the opening SMS of a campaign that is still a DRAFT. THIS SENDS NOTHING — it changes stored wording only, and it never launches or enqueues anything. DRAFT ONLY: a campaign that has already launched is refused, because editing it mid-send would tell one half of an audience something different from the other; clone it into a new draft instead. The replacement is held to the same rules as create_campaign_draft — 320 characters, and rejected if it implies a prior relationship or manufactures urgency. IT INVALIDATES PRIOR APPROVALS: any approval token issued before the edit stops working, because the launch check covers the message body. Run review_campaign_readiness again afterwards and get a fresh human approval before any launch.

    Annotations the server declares

    • title: Edit a draft campaign's opening message
    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: false
Only reads 10Claude Code: allow
  • analyze_lead_sourceSummarise the leads in an account or one campaign: how many exist, how many can actually be contacted, how many opted out, and how they break down by status and source.No findings

    Why it is in this group

    • The name "analyze_lead_source" says "analyze": a word for reading.
    Description, as the server wrote it
    Summarise the leads in an account or one campaign: how many exist, how many can actually be contacted, how many opted out, and how they break down by status and source. Read-only — sends nothing and changes nothing. Start here when the operator asks what they have to work with.

    Annotations the server declares

    • title: Analyze lead source
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • check_campaign_readinessRead-only, idempotent campaign readiness status for monitoring and scheduled checks: recipient count, message, channels, cost and every pass/warn/fail check.No findings

    Why it is in this group

    • The description's first verb is "read": a word for reading.
    Description, as the server wrote it
    Read-only, idempotent campaign readiness status for monitoring and scheduled checks: recipient count, message, channels, cost and every pass/warn/fail check. SENDS NOTHING and NEVER mints an approval token or confirmation phrase, so it cannot launch a campaign. Use review_campaign_readiness only when a human is actively deciding whether to launch.

    Annotations the server declares

    • title: Check campaign readiness
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • find_leadSearch this account's leads by phone number, email address, or name.No findings

    Why it is in this group

    • The name "find_lead" says "find": a word for reading.
    Description, as the server wrote it
    Search this account's leads by phone number, email address, or name. Phone matching tolerates formatting differences. Returns masked contact details plus lead ids. Read-only — sends nothing and changes nothing.

    Annotations the server declares

    • title: Find lead
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • get_campaign_statusReport recorded campaign outcomes: leads, sent records, confirmed delivery receipts, replies, opt-outs, booking records, and AI-paused leads (not people awaiting a human).No findings

    Why it is in this group

    • The name "get_campaign_status" says "get": a word for reading.
    Description, as the server wrote it
    Report recorded campaign outcomes: leads, sent records, confirmed delivery receipts, replies, opt-outs, booking records, and AI-paused leads (not people awaiting a human). Omit campaign_id to list campaigns. Account totals are independent of pagination and status filters. Read-only. Null metrics are unavailable; read the caveats before telling the operator a campaign is or is not working.

    Annotations the server declares

    • title: Get campaign status
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • get_interested_leadsList leads whose replies were classified as positive or as asking a question, newest first, with the reply text.No findings

    Why it is in this group

    • The name "get_interested_leads" says "get": a word for reading.
    Description, as the server wrote it
    List leads whose replies were classified as positive or as asking a question, newest first, with the reply text. The classifier is keyword and sentiment based, NOT a language model — the response says so explicitly, and the reply text is included so you can judge for yourself. Read-only.

    Annotations the server declares

    • title: Get leads who replied with interest
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • get_performance_summaryThe account's performance report, identical to the website's Performance page: pipeline (discovered, purchased, enriched, imported, duplicates excluded), readiness (prepared, appro…No findings

    Why it is in this group

    • The name "get_performance_summary" says "get": a word for reading.
    Description, as the server wrote it
    The account's performance report, identical to the website's Performance page: pipeline (discovered, purchased, enriched, imported, duplicates excluded), readiness (prepared, approved, eligible at last launch), delivery (queued, provider-accepted, confirmed delivered, failed, unsettled -- never folded together), engagement (replies, interested, appointments, conversions), cost in credits, and one row per autopilot lane. Read-only; sends nothing and buys nothing. A null value means NOT MEASURED and carries an unavailable_reason -- never report it to the operator as zero.

    Annotations the server declares

    • title: Get performance summary
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • list_from_addressesThe verified email sender identities (from-addresses) this account can send campaigns from.No findings

    Why it is in this group

    • The name "list_from_addresses" says "list": a word for reading.
    Description, as the server wrote it
    The verified email sender identities (from-addresses) this account can send campaigns from. Read-only; sends nothing. Use before an email-channel readiness review to pick the right sender.

    Annotations the server declares

    • title: List email sender identities
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • list_leadsPage through this account's leads, optionally filtered by campaign and status.No findings

    Why it is in this group

    • The name "list_leads" says "list": a word for reading.
    Description, as the server wrote it
    Page through this account's leads, optionally filtered by campaign and status. Read-only — sends nothing and changes nothing. For richer filtering (geography, source, tags, contact history, SMS eligibility), use search_leads — the same data with the audience-building filter vocabulary.

    Annotations the server declares

    • title: List leads
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • preview_lead_importInspect an uploaded CSV or XLSX lead file WITHOUT writing anything to the database — read-only, sends nothing.No findings

    Why it is in this group

    • The name "preview_lead_import" says "preview": a word for reading.
    Description, as the server wrote it
    Inspect an uploaded CSV or XLSX lead file WITHOUT writing anything to the database — read-only, sends nothing. Auto-detects common columns (name, phone, email, address, company/entity name) and reports row counts, in-file and account duplicates, missing contact fields, and how many leads would end up SMS- and email-contactable. Run this before import_leads_from_file so the operator can see what would happen first.

    Annotations the server declares

    • title: Preview a lead file before importing
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • search_leadsSearch this account's leads by campaign/list, source, geography (city/state/county), lead type, tags, contact history (never_contacted / contacted_no_reply / replied) and SMS eligi…No findings

    Why it is in this group

    • The name "search_leads" says "search": a word for reading.
    Description, as the server wrote it
    Search this account's leads by campaign/list, source, geography (city/state/county), lead type, tags, contact history (never_contacted / contacted_no_reply / replied) and SMS eligibility (textable phone, not opted out, not suppressed), with paging and a deterministic sort. Returns lead_id values plus masked contact details and per-lead eligibility flags. Read-only — SENDS NOTHING and changes nothing. This is the filter-rich sibling of list_leads (plain paging) and find_lead (locate one person); use the lead_ids it returns with add_leads_to_campaign, or let select_and_attach_leads run the same filters and attach a bounded subset in one step.

    Annotations the server declares

    • title: Search leads with eligibility filters
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false

This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.

Install

Pinned to version 1.0.1. Values in angle brackets are yours to fill in.

claude mcp add --transport http persuadioai https://api.persuadioai.com/mcp

Run in a terminal.

Claude Code permissions

Allow the reads, ask before a change, deny the deletes. Paste into .claude/settings.json.

.claude/settings.json
{
  "permissions": {
    "allow": [
      "mcp__persuadioai__analyze_lead_source",
      "mcp__persuadioai__check_campaign_readiness",
      "mcp__persuadioai__find_lead",
      "mcp__persuadioai__get_campaign_status",
      "mcp__persuadioai__get_interested_leads",
      "mcp__persuadioai__get_performance_summary",
      "mcp__persuadioai__list_from_addresses",
      "mcp__persuadioai__list_leads",
      "mcp__persuadioai__preview_lead_import",
      "mcp__persuadioai__search_leads"
    ],
    "ask": [
      "mcp__persuadioai__add_leads_to_campaign",
      "mcp__persuadioai__attach_leads_to_campaign",
      "mcp__persuadioai__clone_campaign_draft",
      "mcp__persuadioai__create_campaign_draft",
      "mcp__persuadioai__create_lead",
      "mcp__persuadioai__import_leads_from_file",
      "mcp__persuadioai__pause_campaign",
      "mcp__persuadioai__recommend_followup_campaign",
      "mcp__persuadioai__review_campaign_readiness",
      "mcp__persuadioai__select_and_attach_leads",
      "mcp__persuadioai__update_campaign_message"
    ],
    "deny": [
      "mcp__persuadioai__launch_approved_campaign"
    ]
  }
}

Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. It assumes the server is installed as persuadioai. Review it before you use it.