Live · Streamable HTTP

Run SetSmart from Claude

One Streamable HTTP endpoint. OAuth-secured. Every SetSmart action — triggers, templates, conversations, campaigns, assistants — available to your AI.

Endpoint
https://setsmart.io/api/mcp
Works with every MCP client
Claude
Cursor
ChatGPT
Cline
Continue
Windsurf
Zed

Connect in 30 seconds

Pick your client, paste the config, sign in once. You're live.

~/.cursor/mcp.json
{
  "mcpServers": {
    "setsmart": {
      "url": "https://setsmart.io/api/mcp"
    }
  }
}

Paste into ~/.cursor/mcp.json to add SetSmart in Cursor.

198
Tools
29
Categories
12
OAuth scopes
HTTP
Transport

Built for builders

OAuth 2.1
Sign in once with SetSmart. Tokens are scoped, audited, and revocable anytime.
Streamable HTTP
One hosted endpoint. No local install, no Docker, no fiddling.
Granular scopes
Read, write, channels, billing — pick exactly what each client can do.
MCP standard
Spec-compliant. Drop into any MCP client today and tomorrow.

Try saying…

"Pause my WhatsApp AI for the weekend and resume it on Monday."

"Add the tag 'vip' to my last 20 booked leads."

"Create a DM trigger on Instagram for keyword 'price'."

"Find all contacts tagged vip who haven't booked yet."

Every tool, right in your AI

198 tools, scoped to your account.

conversation
24
  • conversation_listread
    List conversations with rich filters. Returns paginated list sorted by last message.
  • conversation_searchread
    Free-text search across contact name, email, phone, instagram_username AND every message body in the conversation. Uses the same search as the in-app inbox. Pass the search string as `query` (preferred) or `keyword` (alias) — both are accepted.
  • conversation_getread
    Get a single conversation with full detail: contact info, tags, notes, custom_fields, ad_referral, last N messages.
  • conversation_get_messagesread
    Return the full message list for a conversation (paginated).
  • conversation_add_tagwrite
    Add one or more tags to a conversation (deduped).
  • conversation_remove_tagwrite
    Remove one or more tags from a conversation.
  • conversation_set_noteswrite
    Replace the notes for a conversation (freeform text).
  • conversation_set_custom_fieldswrite
    Merge key/value pairs into a conversation's custom_fields JSON. Values are stored as strings.
  • conversation_remove_custom_fieldswrite
    Remove specific keys from a conversation's custom_fields.
  • conversation_set_assistantwrite
    Override which AI assistant handles this conversation (sets conversations.assistant_id).
  • conversation_set_qualificationwrite
    Set qualification status: true (qualified), false (unqualified), or null (clear).
  • conversation_set_bookedwrite
    Mark conversation booked (true/false). When true, sets booked_at to now.
  • conversation_set_ok_callwrite
    Mark conversation as "ok for call" (true/false).
  • conversation_set_answeredwrite
    Mark conversation answered (true/false).
  • conversation_set_contactedwrite
    Mark conversation as contacted (true/false).
  • conversation_set_readwrite
    Mark conversation as read/unread (is_read flag).
  • conversation_set_pinnedwrite
    Pin or unpin a conversation.
  • conversation_renamewrite
    Change the display name for the contact.
  • conversation_deletewrite
    Delete a single conversation. Pass confirm=true to proceed.
  • conversation_bulk_tagwrite
    Add tags to many conversations at once. Provide either explicit conversation_ids or filters (same as conversation.list).
  • conversation_bulk_set_assistantwrite
    Change assistant_id for many conversations. Provide either explicit `conversation_ids` OR `filters` (same shape as conversation.list — channel/tags/qualified/booked/assistant_id).
  • conversation_bulk_deletewrite
    Delete many conversations at once. Pass `conversation_ids` OR `filters` (same shape as conversation.list). Always requires `confirm: true`.
  • conversation_delete_tag_globallywrite
    Remove a tag string from EVERY conversation on the account.
  • conversation_list_all_tagsread
    Return the list of distinct tags used across all conversations on this account, with per-tag counts. Paginated server-side to count tags across very large accounts (>10k contacts).
assistant
23
  • assistant_listread
    List all AI assistants for the user, with defaults per channel highlighted.
  • assistant_getread
    Get an assistant by id with full instructions, model, and integration flags.
  • assistant_createwrite
    Create a new AI assistant with a name, system prompt, and model.
  • assistant_updatewrite
    Update assistant fields (name, instructions, model, integration flags).
  • assistant_deletewrite
    Delete an assistant. Pass confirm=true.
  • assistant_duplicatewrite
    Duplicate an assistant (copies name + instructions + integration flags; new unique id).
  • assistant_set_defaultwrite
    Set an assistant as the default for a channel (whatsapp, instagram, messenger).
  • assistant_get_defaultsread
    Return which assistant is default for each channel.
  • assistant_ai_edit_promptwrite
    THE ONLY way to edit an assistant's system prompt. Takes a natural-language edit request ("change the tone to tutoiement", "add a qualification criterion about budget", "add an audio message at step 2", "pause the AI at step 5", "fix this typo: replace X with Y", etc.) and applies precise, minimal search/replace operations to the existing prompt — it never blindly overwrites. Knows the SetSmart prompt structure (IDENTITY, CONTEXT, SCRIPT, QUALIFICATION, STRICT RULES), the Calendly / GoHighLevel / iClosed booking function conventions, the audio library (audio_id slugs), and the json_step/tag system. Automatically enables referenced audios for this assistant. ALSO handles follow-up / relance requests transparently: if the user asks to "relancer après 4h", "envoyer un message de rappel", "activer la relance 22h", etc., this tool will configure the user's follow-up settings (client_config) directly instead of polluting the prompt — no need to call followup.set_short / followup.set_long separately. If the user pastes a complete new prompt and asks to replace everything, just describe that in `edit_request` (e.g. "Replace the entire prompt with the following exact text: ...") and the editor will produce a single full-prompt replace operation. `assistant_id` is OPTIONAL: when the user only has one assistant, it is auto-selected; when there are multiple, you must pass the target id (use assistant.list or assistant.get_defaults first).
  • assistant_configure_calendlywrite
    Configure Calendly booking on an assistant.
  • assistant_configure_ghlwrite
    Configure GoHighLevel calendar booking on an assistant.
  • assistant_configure_iclosedwrite
    Configure iClosed booking on an assistant.
  • assistant_configure_calcomwrite
    Configure Cal.com booking on an assistant.
  • assistant_analyze_personaread
    Trigger persona analysis using the last 150 answered conversations (uses OpenAI). Returns structured audience profile and token cost.
  • assistant_scrape_sourceswrite
    Step 2 of the assistant wizard: scrape websites (and optionally an Instagram handle or YouTube URL) with Firecrawl to extract business details. Returns a combined scraped_data object to feed into assistant_generate_business_details. Skip this if the user has no online presence.
  • assistant_transcribe_youtubewrite
    Transcribe a YouTube video (via Apify) to use as assistant knowledge context. Returns the transcript. Merge the output into the scraped_data.youtubeTranscripts array before passing to assistant_generate_business_details.
  • assistant_fetch_instagram_profileread
    Fetch the connected user's Instagram profile (bio, website, followers) via Meta Graph. Use in the sources step of assistant creation when the user wants to pull their IG bio.
  • assistant_generate_business_detailswrite
    Step 3 of the wizard: from scraped_data + niche, generate a structured business pack (businessName, businessDescription, mainOffer, targetAudience, knowledge). Uses Claude. Pass the scraped_data returned by assistant_scrape_sources (optionally enriched with youtubeTranscripts).
  • assistant_generate_scriptwrite
    Step 5 of the wizard: generate a complete conversation script (array of steps with goal/message/trigger/impact) from the full business + platform + qualification context. Uses streaming Claude. Returns the final script[] ready for review or edit_script_ai. All fields are optional but the richer the context, the better the script.
  • assistant_edit_script_aiwrite
    Refine a script generated by assistant_generate_script using natural-language instructions ("add a pricing step before the CTA", "make step 2 shorter", "change qualification criteria"). Uses streaming Claude. Returns the updated script + a summary of what changed.
  • assistant_create_from_formwrite
    Step 7 (final) of the wizard: create a new AI assistant from the full form data. This mints an OpenAI-style asst_xxx id in the database, builds the full system prompt, creates a vector store if files are attached, and appends the new assistant to client_config.assistant_list. You can pass either `platforms` (array, e.g. ["instagram"] or ["whatsapp","instagram"]) or the singular `platform` — whichever is easier. Also accepts `role` as an alias of `setterRole`, and `name` as an alias of `businessName`. Returns the new assistant_id. Files (RAG) are not yet supported via MCP — users should add them through /app/assistants/<id> if needed.
  • assistant_list_filesread
    List files attached to an assistant's vector store (knowledge base).
  • assistant_remove_filewrite
    Remove a file from an assistant's vector store (unlinks from the assistant; the underlying OpenAI File stays). Delegates to /api/remove-file-from-assistant.
ai
15
  • ai_get_all_statusread
    Return the global AI automation status for every channel (Instagram, WhatsApp, Messenger) plus the per-channel blacklist and blocked country codes.
  • ai_set_channelwrite
    Enable or disable AI automation on a whole channel. E.g. "pause my WhatsApp AI for the weekend".
  • ai_pause_channelwrite
    Convenience: turn OFF AI automation for a channel.
  • ai_resume_channelwrite
    Convenience: turn ON AI automation for a channel.
  • ai_pause_conversationwrite
    Turn AI OFF for a single conversation. Messages keep arriving, but the AI will not respond. Identify the conversation by id, phone, email, or Instagram id/username.
  • ai_resume_conversationwrite
    Turn AI back ON for a single conversation (clears the "off" step).
  • ai_list_paused_conversationsread
    List conversations where AI is currently off (step = "off"). Optionally filter by channel. Matches the /api/ai-off public endpoint shape.
  • ai_end_conversation_followupswrite
    Set a conversation to the "end" follow-up step, stopping follow-up messages but keeping AI on.
  • ai_relaunch_conversation_followupswrite
    Set a conversation back to the "launch" step to re-enable follow-ups.
  • ai_get_blacklistread
    Get the list of blacklisted Instagram usernames (AI will ignore messages/comments from them).
  • ai_update_blacklistwrite
    Replace the entire Instagram blacklist with the given array of usernames.
  • ai_add_to_blacklistwrite
    Append one or more Instagram usernames to the blacklist (idempotent, deduped). This is how you "block" an IG user from AI responses.
  • ai_remove_from_blacklistwrite
    Remove one or more Instagram usernames from the blacklist.
  • ai_get_blocked_countriesread
    Get the list of blocked phone country dial codes (numbers in those countries won't receive messages).
  • ai_update_blocked_countrieswrite
    Replace the list of blocked phone dial codes (e.g. ["1", "44"] for US and UK).
contact
13
  • contact_findread
    Find contacts by any combination of identifiers. Always returns an array of matches (never fails on duplicates). Supports phone (matches against BOTH `recipient_number` for WhatsApp and `phone` for Instagram/Messenger leads whose phone was extracted from a DM), phone_partial, email, name (fuzzy), contact_id, instagram_id, instagram_username, tag, has_tags, custom_field, channel, and lifecycle flags. Use `has_phone: true` to filter contacts where a real phone number was captured (useful to surface IG/Messenger leads ready for outbound call/SMS).
  • contact_getread
    Get a single contact by id with all fields.
  • contact_createwrite
    Create a new contact/conversation. Channel and phone (or instagram_id) required. Tags/custom_fields optional.
  • contact_update_custom_fieldswrite
    Merge key/value pairs into a contact's custom_fields (values stored as strings). Look up by contact_id, phone, or email.
  • contact_update_phonewrite
    Set or fix a contact's phone number. Writes to the right column based on channel: for WhatsApp the phone IS the messaging address (recipient_number) so we update both columns; for Instagram / Messenger the phone is stored separately in `conversations.phone` (recipient_number stays the IGSID/PSID, never touch it — overwriting it would break Meta DM delivery for that contact).
  • contact_update_namewrite
    Update a contact's display name.
  • contact_add_tagswrite
    Add tags to a contact (by contact_id).
  • contact_remove_tagswrite
    Remove tags from a contact.
  • contact_mark_purchasedwrite
    Mark a lead as purchased (sets leads.purchased=true). Mirrors /api/leads/mark-purchased.post.js — requires the lead_id directly. If you only have a contact, pass `phone` (matched against leads.number) or `email` (matched against leads.email) and we look up the lead row.
  • contact_deletewrite
    Delete a contact and its conversation. Pass confirm=true.
  • contact_importwrite
    Import a single contact (alias of contact.create). Useful for opt-in flows.
  • contact_import_from_attachmentwrite
    Import contacts from a CSV/XLSX file the user uploaded in this chat (attachment_id is in the [Attachment: ...] block in their message). The `mapping` argument is OPTIONAL — when omitted (or partially provided), columns are auto-detected from common header names (phone, telephone, mobile, whatsapp, name, full_name, email, instagram, …). Best practice: call once with `dry_run: true` (no mapping needed), show the user the inferred mapping, then call again with `dry_run: false` and any overrides. Dedupes by recipient_number. Phone numbers are normalized automatically (strips spaces, dashes, parentheses). If a row has no phone and no instagram_id, it is skipped.
  • contact_import_bulkwrite
    Import many contacts at once (for small lists pasted as text). Dedupes by existing recipient_number per user. For file uploads prefer contact_import_from_attachment.
whatsapp
8
  • whatsapp_get_statusread
    Return WhatsApp connection status: connection state, phone, WABA ID, history sync state.
  • whatsapp_get_connect_instructionsread
    Return the in-app URL to connect a WhatsApp Business account via Meta Cloud API.
  • whatsapp_get_profileread
    Fetch the current WhatsApp Business profile (about, description, address, email, websites, photo).
  • whatsapp_update_profilewrite
    Update WhatsApp Business profile fields: about, description, address, email, websites (array), vertical.
  • whatsapp_get_phone_inforead
    Fetch phone number info (display number, verified name, quality rating) from Meta.
  • whatsapp_disconnectwrite
    Disconnect the WhatsApp account. Irreversible; pass confirm=true.
  • whatsapp_set_coexistence_auto_disable_aiwrite
    When coexistence mode is on, this controls whether AI auto-pauses when you reply from your phone directly.
  • whatsapp_set_history_import_aiwrite
    Control whether the AI should respond to historical imported conversations ("on" vs "off").
instagram
7
  • instagram_get_statusread
    Get Instagram connection status: connected, username, followers (if cached), and feature toggles.
  • instagram_get_connect_urlread
    Return the URL the user should open in a browser to connect their Instagram account via Meta OAuth. The user must follow the URL themselves to grant permissions.
  • instagram_disconnectwrite
    Disconnect the Instagram account (clears instagram_id and removes the user_instagram_accounts row). Irreversible; pass confirm=true.
  • instagram_set_story_replieswrite
    Enable or disable Instagram story reply handling.
  • instagram_set_auto_disable_on_humanwrite
    When ON, AI pauses automatically for a conversation the moment a human (you) sends a manual reply.
  • instagram_set_follow_up_unansweredwrite
    Enable or disable follow-ups for Instagram conversations the lead hasn't answered.
  • instagram_check_webhook_statusread
    Check whether the Instagram webhook subscription is active for this account.
account
6
  • account_getread
    Get the authenticated user's SetSmart account info: email, client name, language, API key status, and primary connections.
  • account_update_languagewrite
    Change the preferred language for SetSmart emails and the in-app UI. Only "en", "fr", and "es" are supported (the only languages the platform UI is translated into). For any other language, return ok:false with a hint instead of throwing — the agent can then explain to the user.
  • account_regenerate_api_keywrite
    Regenerate the SetSmart public API key (used for Zapier/Make/external REST). This invalidates the old key. Set confirm=true to proceed.
  • account_get_webhook_urlread
    Get the current outgoing webhook URL (SetSmart will POST events like booked/qualified/message here).
  • account_set_webhook_urlwrite
    Set (or clear) the outgoing webhook URL for receiving SetSmart events. Pass an empty string to clear.
  • account_get_full_configread
    Return the full client_config for the user (sensitive keys redacted). Useful when the LLM needs the exact current state before making changes.
dm trigger
6
  • dm_trigger_listread
    List all DM triggers grouped by channel (Instagram + Messenger). Each channel has its keyword list and strict_mode.
  • dm_trigger_set_keywordswrite
    Replace the full keyword list for a channel (instagram or messenger). Pass an empty array to clear.
  • dm_trigger_add_keywordswrite
    Append keywords to a channel's DM trigger list (deduped).
  • dm_trigger_remove_keywordswrite
    Remove keywords from a channel's DM trigger list.
  • dm_trigger_set_strict_modewrite
    Enable or disable strict mode for DM triggers on a channel. Strict mode only replies when a DM exactly matches a keyword.
  • dm_trigger_testread
    Simulate a DM against the current trigger list. Returns whether it would match (and which keywords).
template
6
  • template_listread
    List all WhatsApp message templates for the connected WABA. Returns name, language, status, category, components.
  • template_getread
    Get a single template by name (across all languages). Returns each language version.
  • template_createwrite
    Create a WhatsApp template (submitted for Meta review). Provide name, language, category, and body text. IMPORTANT — variables: if your body / header_text / a URL button contains {{N}} placeholders ({{1}}, {{2}}, …), Meta REQUIRES a sample value for each one or the template is auto-rejected. Pass `body_examples` (one sample per body var, in order), `header_text_examples` (one per header var), and for URL buttons containing {{N}}, set the button's `url_example` to the fully-substituted URL. Body var numbers must be strictly sequential starting at {{1}}. Buttons/header optional.
  • template_deletewrite
    Delete a WhatsApp template by name.
  • template_generate_with_aiwrite
    Generate WhatsApp template copy with AI using the user's recent assistants as context. Returns suggested body text (not submitted).
  • template_topread
    Return the top-used templates over the last N days with send counts and category breakdown. Sourced from message_ids (actually-sent messages), matching server/api/top-templates.js.
campaign
6
  • campaign_preview_audienceread
    Preview the audience size for a set of filters (tags include/exclude, status, channel, date range). Returns a count and up to 5 sample contacts. Date filters: pass `created_after`/`created_before` (ISO date or datetime) to filter on conversations.created_at, or `since`/`until` to filter on conversations.updated_at (last activity). Note: `tags_exclude` is applied client-side, so when present the precise count requires fetching all matches; for huge audiences the returned `count` is the inclusive (pre-exclude) total.
  • campaign_createwrite
    Create a WhatsApp template broadcast. Inserts pending rows into message_queue for each matching conversation; the send-queued-messages cron then ships them via the Meta WhatsApp Cloud API. AUDIENCE: pass `conversation_ids` for an explicit list, OR audience filters (tags, qualified/booked/answered, date range — `since`/`until` on updated_at, `created_after`/`created_before` on created_at). VARIABLES: pass `body_variables` as an array of tokens, one per {{N}} in the template body. Supported tokens: {{name}}, {{firstName}}, {{email}}, {{recipient}}, {{instagram_username}}. Any non-token entry is used as a literal value for every contact. If `body_variables` is omitted and the template has a single {{1}}, the cron auto-fills it with the contact name. For fully custom per-contact values, use `variables_per_contact: { "<conv_id>": ["val1","val2"] }`. HEADER / BUTTONS: pass `header_params` and `button_params` for templates with media headers or dynamic URL buttons. SCHEDULING (the `schedule` object — fully supported, do not say it is not): • Start later: `schedule.start_at` = ISO datetime ("2026-04-19T09:00:00Z"). Defaults to "send immediately". • Spread sends over time: `schedule.batch_size` (default 50) + `schedule.batch_delay_minutes` (default 5) — e.g. {batch_size: 100, batch_delay_minutes: 10} ships 100 messages every 10 min. • Daily cap: `schedule.daily_limit` (e.g. 1000) — overflow contacts are scheduled for the next day at 09:00 UTC. • Timezone: `schedule.timezone` (default "UTC"), used for label/storage purposes. Combine these for a real campaign-style rollout: {start_at: "2026-04-19T09:00:00Z", batch_size: 100, batch_delay_minutes: 15, daily_limit: 1000} = "send 100 every 15 min starting tomorrow 9am, max 1000/day". For "send tomorrow morning" alone: {start_at: "<tomorrow>T09:00:00Z"} (use the date from the system prompt + 1 day). RETURNS a `batch_id` for `campaign_cancel` / `campaign_get_stats` / `campaign_list_batches`.
  • campaign_check_template_statusread
    Check whether a WhatsApp template is APPROVED and ready to send (vs PENDING / REJECTED / DISABLED). Use this BEFORE calling campaign_create when you suspect a template is still in Meta review, and AGAIN once the user pings you back to confirm it has been approved before re-launching the campaign.
  • campaign_cancelwrite
    Cancel all pending sends in a campaign batch (uses the `batch_id` returned by campaign_create or stored by the in-app /Campaign UI). Already-sent messages are not affected.
  • campaign_get_statsread
    Return send/pending/failed stats for a single campaign batch (uses the `batch_id` returned by campaign_create or stored by the in-app /Campaign UI).
  • campaign_list_batchesread
    List campaign batches sent by the user, with per-batch counts (pending / sent / failed) and the template + dates. Covers both MCP-launched campaigns AND broadcasts sent from the in-app /Campaign page (same `batch_id` column). Use this to find a `batch_id` you forgot, or to monitor recent broadcasts.
message
6
  • message_send_textwrite
    Send a plain text message. Channel can be whatsapp / instagram / messenger. Recipient is a phone (WA) or platform ID (IG/Messenger). The message body goes in `text` — `message` and `body` are accepted as aliases.
  • message_send_imagewrite
    Send an image. For WhatsApp, pass a public URL (or uploaded media_id). For IG/Messenger, pass a URL.
  • message_send_audiowrite
    Send an audio message (WhatsApp). Pass audio_url (public) or media_id (already uploaded).
  • message_send_videowrite
    Send a video message via WhatsApp Cloud API. Provide video_url (public) or media_id.
  • message_send_templatewrite
    Send a WhatsApp template message with variables. Template must be approved.
  • message_send_reactionwrite
    React to a WhatsApp message with an emoji (only supports WhatsApp).
voice
6
  • voice_get_settingsread
    Return ElevenLabs settings: whether an API key is set and the stored voice_id.
  • voice_set_elevenlabs_keywrite
    Save the ElevenLabs API key on the account.
  • voice_delete_elevenlabs_keywrite
    Remove the ElevenLabs API key and clear the stored voice_id.
  • voice_set_voice_idwrite
    Set the ElevenLabs voice ID that will be used for TTS and follow-up audio.
  • voice_list_audio_libraryread
    List saved follow-up audios (slugs + names) available for assistants and follow-ups.
  • voice_toggle_assistant_audiowrite
    Link or unlink an audio to an assistant (assistant_audios join). `audio_id` is the UUID returned by voice_list_audio_library (the `id` field), NOT the slug.
calendly
6
  • calendly_get_statusread
    Return Calendly connection status and any stored account info.
  • calendly_get_connect_urlread
    Return the URL the user should open to connect Calendly (OAuth).
  • calendly_list_event_typesread
    List Calendly event types for the connected user.
  • calendly_set_preferred_eventwrite
    Set which Calendly event type the AI should book by default.
  • calendly_check_planread
    Check whether the Calendly account supports webhooks (Pro plan).
  • calendly_disconnectwrite
    Disconnect Calendly. Pass confirm=true.
analytics
6
  • analytics_dashboardread
    Return high-level dashboard stats: messages today, conversations this week, month booked/qualified, recent activity.
  • analytics_statsread
    Return aggregate conversation/message stats over a date range with optional tag filter.
  • analytics_channel_breakdownread
    Per-channel breakdown of conversations + messages for the last N days.
  • analytics_daily_statsread
    Return the latest daily-stats snapshot (from global_data).
  • analytics_get_personaread
    Return the latest persona analysis for the user.
  • analytics_message_costsread
    Return token + cost totals for the last 30 days (from message_ids).
billing
6
  • billing_get_subscriptionwrite
    Return the current subscription state across providers (Stripe, Mamo, Lemon Squeezy).
  • billing_get_latest_invoicewrite
    Return the most recent invoice details.
  • billing_list_cardswrite
    List saved payment cards across Stripe and Mamo Pay.
  • billing_get_invoiceswrite
    Return recent invoices across providers (last N).
  • billing_validate_discount_codewrite
    Check whether a discount code is valid for the current user.
  • billing_cancel_subscriptionwrite
    Cancel the active subscription (routes through Stripe/Mamo/LemonSqueezy). Pass confirm=true.
comment reply
5
  • comment_reply_get_auto_replyread
    Return the Instagram comment auto-reply config (replies to ALL comments on ALL posts unless a per-post/global trigger takes over).
  • comment_reply_set_auto_replywrite
    Set the Instagram comment auto-reply: a list of public comment variants and/or a private DM that will be sent on every comment.
  • comment_reply_list_global_triggersread
    List Instagram global keyword triggers (apply across ALL posts when a keyword is matched in a comment). Returns each trigger as { keywords, comment_responses, private_message } — the same shape accepted by set_global_triggers / add_global_trigger.
  • comment_reply_set_global_triggerswrite
    Replace the full list of Instagram global comment triggers. Each trigger has keywords, optional comment_responses (public replies), and an optional private_message (DM). WARNING: this REPLACES the entire list — call list_global_triggers first and include any existing triggers you want to keep.
  • comment_reply_add_global_triggerwrite
    Append a single global comment trigger to the list (does not touch existing ones). `keywords` is REQUIRED — never call this tool with empty input. Provide at least one of `comment_responses` (public reply variants) or `private_message` (DM) — an empty trigger would never reply to anything.
followup
5
  • followup_get_configread
    Return the current follow-up configuration (short/long toggles, custom messages, prompts, audio IDs).
  • followup_set_shortwrite
    Configure the short follow-up (~4h). All fields are optional — only the ones you pass get changed. Use `enabled` to toggle on/off, `type` + matching `text` / `audio_id` / `prompt` to change the content. To ONLY update the prompt without touching the toggle, pass just `{ type: "ai", prompt: "..." }`.
  • followup_set_longwrite
    Configure the long follow-up (~22h). All fields are optional — only the ones you pass get changed. Use `enabled` to toggle on/off, `type` + matching `text` / `audio_id` / `prompt` to change the content. To ONLY update the prompt without touching the toggle, pass just `{ type: "ai", prompt: "..." }`.
  • followup_set_optin_delayswrite
    Configure opt-in delays (seconds, converted to ms) and the daily opt-in limit. Caps mirror the in-app form (Settings.vue): min/max delay are bounded to 240 seconds; opt-in delay can go up to 3600 seconds. Pass `daily_optin_limit: 0` to explicitly remove the cap (stored as null).
  • followup_set_split_multi_partwrite
    Toggle whether AI replies are split into multiple WhatsApp messages when long.
schedule
5
  • schedule_get_night_hoursread
    Get night-hours config: whether AI is restricted during certain hours, timezone, start, end, and whether responses should just be delayed rather than blocked.
  • schedule_set_night_hourswrite
    Configure night hours. Pass restrict_night_hours=true to restrict AI during the window. start/end are 0-23 (hour of day in the given timezone).
  • schedule_get_off_daysread
    Get scheduled off-days config (enabled flag, days array 0=Sun..6=Sat, timezone).
  • schedule_set_off_dayswrite
    Set scheduled off-days. Constraint from the app: no two consecutive days may be selected. Days are 0=Sunday through 6=Saturday.
  • schedule_get_current_statusread
    Return whether the account is currently inside a night-hours window or a scheduled off day.
ghl
5
  • ghl_get_statusread
    Return GoHighLevel (Lead Connector) connection status.
  • ghl_get_connect_urlread
    Return the URL to start the GHL OAuth flow.
  • ghl_list_calendarsread
    List available calendars on the connected GHL location.
  • ghl_set_preferred_calendarwrite
    Set which GHL calendar the AI should use for bookings.
  • ghl_disconnectwrite
    Disconnect GoHighLevel. Pass confirm=true.
iclosed
5
  • iclosed_get_statusread
    Return iClosed connection status and the currently selected event link prefix.
  • iclosed_validate_keywrite
    Validate an iClosed API key against /v1/events and store it on the user account on success. Returns the list of activated events.
  • iclosed_list_eventsread
    List activated iClosed events available for the connected account. Each event has an id, name and link_prefix (the latter is what you pass to iclosed.set_preferred_event).
  • iclosed_set_preferred_eventwrite
    Set which iClosed event link prefix should be used as the default for bookings. Pass the link_prefix returned by iclosed.list_events (e.g. "lescopywriters/appel-d-couverte-copy-mastery-5").
  • iclosed_disconnectwrite
    Disconnect iClosed (deletes the stored API key and selected event). Pass confirm=true.
calcom
5
  • calcom_get_statusread
    Return Cal.com connection status, the connected account email/username, and the currently selected default event type id.
  • calcom_validate_keywrite
    Validate a Cal.com API key against /v2/me and store it on the user account on success. Returns the connected account profile and the list of available event types.
  • calcom_list_event_typesread
    List available event types for the connected Cal.com account. Each event type has an id, slug, title, duration and link. Pass the id to calcom.set_preferred_event_type.
  • calcom_set_preferred_event_typewrite
    Set which Cal.com event type id should be used as the default for bookings. Pass the id returned by calcom.list_event_types.
  • calcom_disconnectwrite
    Disconnect Cal.com (deletes the stored API key and selected event type, and disables Cal.com on every assistant of this account). Pass confirm=true.
shopify
5
  • shopify_get_statusread
    Return Shopify connection status and store info.
  • shopify_get_install_urlread
    Return the Shopify install URL for a given shop domain.
  • shopify_update_storewrite
    Update store settings (abandoned cart enable/disable, templates, etc).
  • shopify_get_statsread
    Return Shopify order and abandoned-cart recovery stats for the connected store.
  • shopify_disconnectwrite
    Disconnect Shopify. Pass confirm=true.
instagram post
4
  • instagram_post_listread
    List recent Instagram posts (media) for the connected account. Requires instagram to be connected. Returns post IDs + captions + permalinks.
  • instagram_post_get_triggersread
    Get per-post comment triggers (or all posts when post_id is omitted). Returns each trigger in the same flat shape `set_triggers` accepts: `{ keywords, comment_responses, private_message }` — round-tripping is symmetric.
  • instagram_post_set_triggerswrite
    Replace the trigger for a specific post. Both `post_id` and `trigger` are REQUIRED — never call this tool with empty input. Trigger shape: { keywords:[...], comment_responses?:[...], private_message?:"..." }. At least ONE of `comment_responses` or `private_message` must be non-empty (an empty trigger would never reply to anything).
  • instagram_post_delete_triggerswrite
    Remove all triggers attached to a specific post.
settings
3
  • settings_getread
    Return the current client_config settings (sensitive keys redacted).
  • settings_updatewrite
    Update one or more client_config fields. Two equivalent calling shapes are accepted (use whichever is natural): 1. Flat: `{ short_follow_up: true, daily_optin_limit: 100 }` 2. Wrapped: `{ patch: { short_follow_up: true, daily_optin_limit: 100 } }` Use dedicated tools for complex structures (DM triggers, schedules).
  • settings_list_allowed_fieldsread
    List the settings fields that can be updated via settings.update.
messenger
3
  • messenger_get_statusread
    Return Facebook Messenger connection status.
  • messenger_get_connect_urlread
    Return the URL the user should open to connect their Facebook Page to Messenger.
  • messenger_disconnectwrite
    Disconnect Facebook Messenger (clears facebook_page_id and the user_messenger_accounts row). Pass confirm=true.
scheduled
3
  • scheduled_listread
    List scheduled / sent / failed messages queued in message_queue. Filter by status (default `pending`), template_name (e.g. to find all rows of a recent campaign), and time window (since/until on scheduled_time).
  • scheduled_cancelwrite
    Cancel a single scheduled message by ID. Only deletes rows with status="pending" — already-sent messages cannot be unsent.
  • scheduled_delete_all_pendingwrite
    Delete ALL pending scheduled messages for the user, optionally scoped to a template_name. Pass confirm=true.
onboarding
3
  • onboarding_scrape_websitewrite
    Scrape a URL with Firecrawl and extract structured business details. Delegates to /api/scrape-website. For the full assistant-creation flow (multi-source scraping + business pack generation) prefer `assistant_scrape_sources`.
  • onboarding_generate_business_detailswrite
    Ask Claude to infer business details (name, description, offers, audience) from previously-scraped content. Delegates to /api/generate-business-details.
  • onboarding_generate_instagram_bioswrite
    Generate 5 Instagram bio suggestions from a business description. Delegates to /api/generate-bio.
knowledge
2
  • knowledge_scrape_websitewrite
    DEPRECATED — prefer `assistant_scrape_sources`, which supports websites + Instagram handle + YouTube and returns the same `scraped_data` shape consumed by `assistant_generate_business_details`. Kept here as a thin alias that delegates to /api/scrape-website.
  • knowledge_transcribe_youtubewrite
    DEPRECATED — prefer `assistant_transcribe_youtube`. Thin alias that delegates to /api/transcribe-youtube.
private reply
1
  • private_reply_previewread
    Simulate: given a comment text on a specific post, return what private DM (and public comment reply) would be sent, based on per-post triggers, global triggers, and auto-reply.

Ready to plug in?

Sign in to get your authenticated MCP endpoint. Free during beta.