Cold Leads

Manage contacts and outreach with MCP and the SDK

  1. Connect an MCP client to https://coldleads.app/api/mcp using ChatGPT OAuth or a secret API key from Settings → API keys (Business plan). The Node SDK uses the same hosted tools via `new ColdLeads({ apiKey }).crm`.
  2. Use list_contacts and import_contacts to work with records in your workspace. For CSV/XLSX, let the assistant parse the uploaded file and pass structured rows (up to 100 per call). Imports deduplicate, skip global do-not-contact addresses, and never send mail. Use `consent: inquiry` for website leads; use `b2b_outreach` only when you have a lawful basis.
  3. Use update_contact to edit fields or record an opt-out; opt-out cannot be reversed through MCP. Use get_conversation to read messages already synced from your connected mailbox. send_contact_message sends one message only when the user approved the recipient and final content and the tool receives `confirm_send: true`.
  4. Use list_templates and save_template to prepare content; list_campaigns and create_campaign_draft create drafts with recipient estimates. Review the template and audience in Cold Leads, then have the user explicitly approve launch_campaign with `confirm_launch: true`. Acceptable-use and content checks, account limits, DNC and unsubscribe safeguards apply.
  5. Use get_workspace_info for non-secret account and mailbox status. setup_website_lead_capture creates a public-only `lk_…` key and a form snippet for /api/hooks/lead. Keep this key in the website form only; submissions are stored as inquiry leads and are not automatically eligible for cold outreach.
  6. SDK examples: `await coldleads.crm.importContacts({ contacts: [{ email: 'person@example.com', consent: 'inquiry' }] })`; `await coldleads.crm.setupWebsiteLeadCapture({ site: 'https://example.com' })`; `await coldleads.crm.createCampaignDraft({ name: 'Welcome', templateId, consent: 'inquiry' })`. See the SDK guide on GitHub for all methods.