Connection check
verified live · 28h ago
mannyfernandezvc-mcp
Analyze leads, draft follow-up campaigns, and launch SMS outreach only with explicit human approval.
Tools
20
GitHub stars
—
Installs / wk
—
Licence
—
Transport
streamable-http
Last checked
28h ago
Tools & capabilities
20 toolsRead from the running server on 28h ago.
add_leads_to_campaign
lead_ids*campaign_id*idempotency_key
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 s… 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.
analyze_lead_source
read-only
campaign_id
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 —… 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.
attach_leads_to_campaign
lead_ids*campaign_id*idempotency_key
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 som… 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.
clone_campaign_draft
name*lead_idsimport_idsdescriptionidempotency_key*channel_override
+1
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 audie… 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. After this, call review_campaign_readiness; only an explicit human approval may lead to launch_approved_campaign.
create_campaign_draft
name*message*lead_idsdescriptionidempotency_keyoutreach_vertical
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 d… 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.
create_lead
nameemailnotesphonelast_namefirst_name
+2
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. Writ… 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.
find_lead
read-only
query*campaign_id
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 — send… 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.
get_campaign_status
read-only
limitoffsetstatuscampaign_id
Report what a campaign has actually done: leads, messages delivered, replies, opt-outs, meetings scheduled, and threads waiting on a human. Omit campaign_id to list every campaign… Report what a campaign has actually done: leads, messages delivered, replies, opt-outs, meetings scheduled, and threads waiting on a human. Omit campaign_id to list every campaign in the account. Read-only. The response includes caveats about which numbers may lag — read them before telling the operator a campaign is or is not working.
get_interested_leads
read-only
dayslimitoffsetcampaign_id
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… 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.
import_leads_from_file
file*modetagssourcededupe_bycolumn_mapping
+1
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/emai… 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.
launch_approved_campaign
can modify data
channellead_idscampaign_id*confirmation*approval_token*from_address_id
SENDS REAL MESSAGES TO REAL PEOPLE. This is irreversible and costs credits. It requires an approval_token from review_campaign_readiness AND the confirmation phrase that review ret… SENDS REAL MESSAGES TO REAL PEOPLE. This is irreversible and costs credits. It requires an approval_token from review_campaign_readiness AND the confirmation phrase that review returned, which the HUMAN OPERATOR must give you explicitly. Never generate the confirmation yourself, never infer approval from a previous message, and never reuse an approval issued for a different campaign or a different size. If the operator has not clearly said yes to this exact launch, do not call this tool — ask them.
list_from_addresses
read-only
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… 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.
list_leads
read-only
limitoffsetstatuscampaign_id
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… 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.
pause_campaign
reasoncampaign_id*
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… 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.
preview_lead_import
read-only
file*dedupe_bycolumn_mapping
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/ent… 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.
recommend_followup_campaign
read-only
goalcampaign_id
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… 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.
review_campaign_readiness
read-only
channellead_idscampaign_id*from_address_id
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 retur… 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.
search_leads
read-only
citysorttagslimitstatecounty
+11
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 eligi… 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.
select_and_attach_leads
filterscampaign_id*idempotency_key*requested_count*selection_strategy
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 a… 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.
update_campaign_message
message*campaign_id*idempotency_key