archive_campaign
ChatGPTArchive a campaign: hides it from the active campaign list while keeping its analytics and the campaign itself intact. Not a deletion. Requires a plan with campaign archives.
assign_campaign_to_site
ChatGPTAssign a campaign to a site so it can display there. A campaign with no site assignment never shows anywhere. Idempotent. Site ids come from list_sites; remove_campaign_from_site reverses it.
connect_campaign_integration
ChatGPTSend this campaign's leads to an account integration's list. Ids come from list_integrations and list_integration_lists. Then map custom form fields with set_campaign_field_mapping. A campaign builder tab opened before this call overwrites it on its next save; reload the builder first.
copy_view
ChatGPTCopy a view from one campaign into another on the same account, like the builder's Import View: its rows, columns and elements with fresh ids, keeping their own styles and the view's background. It is added as the target's last view, saved and re-rendered. A button or form that leads to a view the target lacks is set to close the campaign and listed in retargeted. Restyle it afterwards with edit_campaign.
create_campaign
ChatGPTcreate_campaign_from_template
ChatGPTCreate a campaign from a catalogue template slug (from list_templates / get_template), then apply an optional batch of edit operations. The app copies the template's ready-made design server-side, so this needs no IR compile and is far cheaper than create_campaign for the common "instantiate a known design, then tweak it" case. Pass the template's type from get_template; a different type is refused before anything is created. ops are the same typed operations as edit_campaign, addressed by the ids from the returned outline; omit them to instantiate the template unchanged. The campaign is created paused with the design written and rendered; assign it to a site (siteIds here or assign_campaign_to_site) and resume it to go live.
create_image_upload
ChatGPTMint a one-time URL for uploading a local image file to the account's media library. Use this instead of upload_image's base64 for any file on disk: the bytes never pass through the conversation. Then run: curl -sf -A "optinmonster-mcp" -F "image=@/absolute/path/to/file.png" "<uploadUrl>" — it prints the uploaded image record. The URL is single-use and expires in five minutes; if curl fails, mint a new one rather than retrying it. It is a credential for exactly one upload and will appear in shell history. JPEG, PNG, GIF, SVG or WebP, up to 5 MB; the file must really be the declared mimeType.
create_site
ChatGPTRegister a website on the account so campaigns can be assigned to it (see assign_campaign_to_site). Needs a name and the domain, with or without https://. A new site stays unverified until the OptinMonster embed code is found on it. Its install field has the embed code for this account and how to add it (WordPress, Shopify or any other site): show it to the user, then run verify_site once it is on the site. Fails when the plan has no site slots left.
delete_campaign
ChatGPTPermanently delete a campaign and its screenshots. This cannot be undone. For a reversible removal use trash_campaign; to hide it while keeping analytics use archive_campaign.
delete_site
ChatGPTPermanently delete a site. Campaigns assigned to it stop displaying there. Irreversible: there is no trash for sites, so confirm with the user first.
disconnect_campaign_integration
ChatGPTStop sending this campaign's leads to an integration. Its list choice and field mapping are deleted with it.
duplicate_campaign
ChatGPTCreate a copy of a campaign within this account under a new name. The copy starts paused with the same design, rules, settings, folders, integrations and site assignments, so resuming it shows it on the same sites as the original. Returns the new campaign id.
edit_campaign
ChatGPTEdit a campaign's content, layout or style with typed operations addressed by the ids from get_campaign_outline: setContent, setElementStyle, setButton, setImage, setOptin, addField, updateField, removeField, moveField (custom form fields addressed by name; updateField rename also moves the field's integration mapping), setCallout, setYesNo (Yes/No button labels), setVideo (a video's YouTube or Vimeo url, or its ratio), setHtml, addElement, removeElement, moveElement, addRow, removeRow, setRowWidths, setRowGap, setRowAlign, addView, removeView, setTheme, setBackground (a view, row or column: color, or a two-colour gradient). setContent keeps a template text's styling (its first run's); in a bullet list each line becomes an item. setHtml {elementId, html, reason} replaces a Custom HTML element (same rules as create_campaign's html); on builder-made HTML it removes any scripts or embeds and says so in notes. The stored HTML is re-serialized, so read it back with get_campaign (include: design) rather than assume byte-identical markup. All operations apply together or not at all. position moves a floating bar to the top or bottom. The design is saved and re-rendered; pass render false to batch several edits and re-render once with an empty ops list. Pass expectUpdatedAt from the outline to refuse writing over a change made elsewhere.
explain_campaign_rules
ChatGPTWhen and where a campaign displays: its display rulesets normalized into a tree (rulesets → groups → rules) with ids for editing and a plain-language rendering. Read-only.
get_account
ChatGPTGet the authenticated OptinMonster account: its identity, plan, features and limits. Read-only.
get_campaign
ChatGPTGet one campaign: name, type, status, notes, assigned sites, its views, and its custom CSS (the builder's Desktop, Tablet and Mobile tabs). The full design tree (rendered HTML, styles and element rows per view) is large and only returned when include contains "design"; the raw display rulesets only when it contains "rulesets" (prefer explain_campaign_rules). Read-only.
get_campaign_analytics
ChatGPTImpressions, conversions and conversion rate for one campaign, per variation when it is a split test. Each variation also has revenue: the attributed total, view-through plus click-through, in the account's revenue attribution currency (returned as currency); it is null when revenue attribution is off. Defaults to the last 30 days; pass start and end (YYYY-MM-DD) for a custom range. Read-only.
get_campaign_integrations
ChatGPTWhere a campaign's leads are sent: each connected integration with the list and options configured for this campaign. Read-only.
get_campaign_outline
ChatGPTA compact outline of a campaign: every view, row, column and element with its id, type and text, in about 200 tokens, plus a text rendering. Use the ids with edit_campaign. includeStyles adds current colour, size and spacing values per element. Read-only.
get_campaign_screenshots
ChatGPTGet the campaign's rendered screenshot image URLs, one per view, as last generated by the builder. Use it to show what a campaign looks like. Read-only; it does not re-render.
get_dashboard_analytics
ChatGPTThe account dashboard Conversions view: conversion rate, conversions and impressions across all campaigns, with the same figures for the preceding period and a chart-ready series over the range. Defaults to the past 12 months, as the dashboard does; pass start and end (YYYY-MM-DD) for a custom range and siteId (from list_sites) to filter to one site. For team members without the owner or admin role, omitting siteId shows the first site they may access, not the whole account. Renders as an interactive widget in hosts that support MCP Apps. Read-only.
get_lead_stats
ChatGPTAggregate lead counts: leads collected in a date range (default: today, UTC) versus the prior period of the same length, a per-day breakdown, and the all-time total. Dates are UTC calendar days, as lead timestamps are. No personal data. Read-only.
get_pageview_usage
ChatGPTPageview (impression) usage for the current calendar month against the plan's allowance, with a per-day breakdown. Read-only.
get_recipe
ChatGPTOne recipe in full: its IR (layout, copy placeholders, radius and spacing) and any further layouts' IRs, image slots (rendered size, minimum source size and what the image should show), styles with their colours, fonts and image assets, notes and suggested rules. An image src "style:<name>" is the chosen style's asset; keep it, or replace it with an https URL. Edit the IR's copy, images and structure as the brief needs, then pass it to create_campaign with recipe, style and layout. Read-only.
get_rule_schema
ChatGPTThe display-rule vocabulary: every rule type with its allowed operators, value type and units; every operator with its meaning; the actions a ruleset can take. Read this before set_campaign_rules. Pass platform to add e-commerce rules. The paged items are the core rule types; operators, actions, combination and platformRules are unpaged reference. Read-only.
get_site
ChatGPTGet one site by its id, including its integration and platform settings. Read-only.
get_template
ChatGPTGet one template with its marketing description and headline. Read-only.
list_campaigns
ChatGPTList campaigns with their status and month-to-date performance. Optional text search, status and type filters, and sort. Active and paused campaigns by default; use view to see archived or trashed ones. Read-only.
list_images
ChatGPTThe account's uploaded images (name, URL, size, dimensions), in no particular order, with optional name search. Read-only.
list_integration_fields
ChatGPTThe provider's own contact fields (e.g. Mailchimp merge tags) a form field can be mapped to with set_campaign_field_mapping. Pass the campaign's listId: fields are often per list. Read-only.
list_integration_lists
ChatGPTThe lists (and clients, for agency providers) an account integration can send leads to. Use an id as listId in connect_campaign_integration. Read-only.
list_integrations
ChatGPTList the email marketing and CRM integrations connected to the account (provider, label). Credentials are never returned. Read-only.
list_recipes
ChatGPTCurated campaign designs to start from. Filter by campaign type, mechanic (what the visitor does) and job (why the campaign exists). Each result has its styles as id and mood only, and its layouts as id and title; pick one of each, then call get_recipe for the IR and pass recipe, style and layout to create_campaign. Read-only.
list_sites
ChatGPTList the websites registered on the account. A campaign only displays on sites it is assigned to (see assign_campaign_to_site); create_site registers a new one. Read-only.
list_templates
ChatGPTBrowse the campaign template catalogue with optional search (matches name, id and keywords), campaign type and device filters. Read-only.
list_top_campaigns
ChatGPTThe best-performing campaigns over a date range, ranked by conversions. Use this instead of fetching analytics campaign by campaign. Read-only.
pause_campaign
ChatGPTPause a live campaign so it stops displaying. Its data and settings are kept; resume_campaign turns it back on.
remove_campaign_from_site
ChatGPTTake a campaign off one site; its other sites keep it. Removing its last site means it shows nowhere until assigned again. Idempotent: a site it is not on is left as it is. Site ids come from list_sites or get_campaign.
resume_campaign
ChatGPTResume a paused campaign so it displays again on its assigned sites.
search_unsplash
ChatGPTSearch Unsplash stock photos for use in campaigns. Returns image URLs and attribution. Read-only.
set_campaign_css
ChatGPTReplace a campaign's custom CSS, the builder's Settings > Custom CSS. css applies on every device; tabletCss and mobileCss only on those devices. Each tab given replaces that tab whole ("" clears it); tabs left out are unchanged. Start every selector with "html div#om-{{id}}" ({{id}} is filled in with the campaign id): unscoped selectors, nested rules, "<", @import and script URLs are refused; @font-face is allowed. Generated class names carry a random per-campaign prefix, so CSS written against them breaks when copied to another campaign. Stable hooks: an element's wrapper id ends in "--wrapper--<elementId>" (select it with [id$="--wrapper--<elementId>"]), and the unprefixed classes om-row, om-column, om-element and Element__content. The CSS edit_campaign writes for its own designs is kept. Read the current CSS with get_campaign. Saved and re-rendered.
set_campaign_field_mapping
ChatGPTMap custom form fields (by name, from get_campaign_outline; verbose: true adds formFields with each field's type) to the provider's fields (ids from list_integration_fields), so their values reach the provider. Merges with the existing mapping; null removes one. Email, name and phone are sent automatically and are not mapped. A campaign builder tab opened before this call overwrites it on its next save; reload the builder first.
set_campaign_rules
ChatGPTReplace a campaign's display rules with the given rulesets. This is a full replacement: any ruleset, group or rule not listed is removed, and their ids are returned under removed so a drop is never silent. Reuse ids from explain_campaign_rules to keep nodes; omit ids for new ones. Validate types and operators with get_rule_schema first. KeyValue rule types (cookie, query-arg, js-variable, local-storage, session-storage, has-visited, has-not-visited) take value { key: { operator, value }, value: { operator, value } } and no top-level operator. Returns the stored rules explained.
trash_campaign
ChatGPTMove a campaign to the trash. Reversible: untrash_campaign recovers it. Use delete_campaign only for permanent removal.
untrash_campaign
ChatGPTRecover a campaign from the trash. It comes back paused, not live.
update_campaign
ChatGPTRename a campaign or change its notes. Only the fields given change; the design, rules, status and sites are untouched. An empty notes string clears them. For the design use edit_campaign.
update_campaign_integration
ChatGPTChange the list or client a connected integration sends this campaign's leads to.
update_site
ChatGPTRename a site or change its domain. Only name and domain can be changed here; integration and platform settings cannot. A domain change un-verifies the site and resets its reCAPTCHA, analytics, platform and custom-domain settings to defaults, reported as domainChanged; run verify_site afterwards, and confirm with the user before changing a domain.
upload_image
ChatGPTUpload an image to the account's media library from a public https URL, optionally tagged to a campaign. JPEG, PNG, GIF, SVG or WebP, up to 5 MB. For a file on disk use create_image_upload instead. base64 is accepted only for tiny inline images and is capped at 256 KB; it costs far more context than either alternative.
verify_site
ChatGPTCheck whether the OptinMonster embed code is installed on a site; verified is true when it is found. verified false means not found yet, not "not installed": the check gives the site only 10 seconds to load, so a slow site with the code can still come back false. Say so and offer to check again; while false, install says how to add the code. A site whose code loaded in the last 12 hours reports true without a fresh check, and subdomain is not looked at then. This only checks: the app marks the site verified on its own the next time the code loads there. For a wildcard site (*.example.com), pass subdomain to check one of its subdomains (for example "shop"). Safe to repeat.