Skip to main content

Capabilities

You drive the MCP server in natural language — describe what you want and the assistant picks the right action. This page shows example prompts and lists what the server can do today.

The exact set of actions evolves as we add features; once connected, your client always shows the current list. The actions below cover both easycart (your store) and easymail (your email marketing) — a single connection reaches both, see Connecting. The easymail actions additionally need the Manage Easymail API keys permission on the store you are acting on.

Example prompts​

easycart​

Try asking your assistant:

"Show me this week's revenue compared to last week."

"Find my product called Masterclass and give me its checkout link."

"List the orders from the last 7 days."

"Create a 20% discount code BLACKFRIDAY for my course."

"Add a $99 one-time price to Masterclass that gives buyers access for one year."

"Cancel jane@example.com's subscription at the end of the period."

"Refund the last payment from john@example.com."

"List my Creator pages."

"Create a Creator page called Print Shop."

"Turn on abandoned-cart recovery with a 10% off coupon."

"Create a Studio branding palette and attach it to Masterclass checkout."

"Offer the workbook as a checkout order bump when someone buys Masterclass."

"Offer the workbook as a thank-you-page cross-sell after someone buys Masterclass."

"Create an affiliate partner named Ada with the ref ada."

easymail​

"How many subscribed contacts do I have?"

"Find contacts who haven't opened an email in the last 90 days."

"Add jane@example.com to my Newsletter list."

"Draft a campaign announcing the summer sale, then send me a test copy."

"Schedule the Summer Sale campaign for Friday at 9am."

"What were the open and click rates for my last campaign?"

"Unsubscribe john@example.com from all email."

What you can do — easycart​

Store​

ActionDescription
get_storeRead the selected store: profile, currencies, payment methods (provider always present, is_available live), popup embed hostnames, abandoned-cart recovery, tax defaults, and partner defaults (partners.cookie_valid_days, partners.commission_percent)
update_storeSparse-update checkout setup — payment-method enablement and order, popup domains, recovery, tax defaults, and partner defaults (partners.cookie_valid_days, partners.commission_percent). A rejected patch writes nothing at all
list_storesList every store your token can manage

update_store writes checkout setup and partner defaults. Profile fields such as name, email, address, and logo are not writable here — sending them returns 422. Omitted keys are unchanged. Recovery coupon percent is an integer 1–100; amount is minor units with no currency — send one or the other, not both. coupon: null clears it. partners is always present and never null. cookie_valid_days is an integer of at least 1; commission_percent is an integer 1–100, where 20 means 20%. Until the store saves its own, they are 7 days and 20%. Sending one key leaves the other in place. null on either key returns 422. Send commission_percent, not commission. Unknown keys return 422, and a patch applies as a whole — when any part of it is rejected, nothing in it is written. Enabling a payment method while get_store reports is_available false is usually rejected, so the assistant asks you to connect the provider in the dashboard first; that flag also covers a store whose availability could not be checked, so a retry is worth it once the provider is connected. The matching HTTP endpoints are documented under Store.

Branding themes​

ActionDescription
find_branding_themesList store-owned palettes, or look one up by UUID or name
create_branding_themeCreate a palette — name is required; colours are # plus 6 hex digits
update_branding_themeSparse-update a palette, identified by UUID or name
delete_branding_themeDelete a palette. Pass dry_run first to confirm the resolved theme

These are four separate actions — there is no combined manage_branding_theme. Find, update, and delete accept a UUID or a name (integer ids are not accepted). A name is resolved from the store-owned list. A name that matches nothing is an error from the assistant; the HTTP API addresses themes by UUID only, and a malformed id is 400. Built-in dashboard palettes are not in this list. Colour tokens are # plus 6 hex digits, or null — not transparent or 3-digit hex. A store may have zero defaults: unsetting or deleting the last default does not promote another theme. Creating a theme does not attach it to a product — pass the UUID as branding_theme_id to update_product_styles. Deleting a theme is irreversible from the API list; products keep their copied colours and their branding_theme_id is cleared. The matching HTTP endpoints are documented under Branding Themes.

Products​

ActionDescription
find_productsLook up a product by ID or search by keyword. Get-one with include=styles includes styles.branding_theme_id
create_productCreate a new product
update_productChange a product's details as an unpublished draft
publish_productPut the current draft on sale, so buyers see it
unpublish_productTake a product off sale, saving any pending draft once you confirm

Variants​

ActionDescription
find_variantsList a product's price variants, or look one up by ID. Each result includes upsells
create_variantAdd a price variant to a product's draft
update_variantChange a variant's details in the product's draft, including replace-all upsells
archive_variantRetire a price variant from the unpublished draft. There is no unarchive
reorder_variantsSet the display order of a product's unpublished-draft variants

Product and variant edits are saved as an unpublished draft. Buyers keep seeing the current version until publish_product runs, and the assistant gives you a preview link after each edit so you can check the result before putting it live.

To change a published price amount, archive the variant and create a new one — update_variant cannot change amount. Same-product upsells are set on update_variant, not on create.

unpublish_product is not a simple status flip. If the product has a pending draft — including one left half-finished in the dashboard — taking it off sale saves that draft as the live product, so edits nobody remembers making can become real, and a store connected to Stripe may have products or prices created there as a result. Because of that, the assistant stops and shows you a preview link first, and only goes ahead once you confirm. A product with no pending draft is taken off sale straight away.

Checkout appearance​

ActionDescription
update_product_stylesChange checkout colours, rounding, shadow, dark mode, and attached branding theme on the unpublished draft. Returns a preview link
update_product_settingsChange checkout logos, thank-you copy, confirmation email, and recovery on the unpublished draft
update_product_mediaReplace the checkout gallery on the unpublished draft
prepare_media_uploadReserve an upload and return the PUT request. Same action for checkout and Creator-page files
complete_media_uploadHost the file after the PUT and return file_url — does not attach it

Styles, settings, and gallery writes land on the unpublished draft and return a preview link. update_product_styles accepts branding_theme_id (a UUID from find_branding_themes, or null to detach and keep current colours). Attach copies non-null theme colours and logos only; null theme values leave the product unchanged. Attach plus a colour, border_radius, or shadow field in the same call is rejected (422). Colour / rounding / shadow writes detach the theme; only darkmode_enabled preserves it. Host a file with prepare_media_upload. The assistant then PUTs the local file to upload_request.url, copying upload_request.headers and sending no Authorization — the server does not receive the bytes. Call complete_media_upload next, then pass the returned file_url into update_product_media (gallery) or update_product_settings (logos). Creator-page header, settings, and widgets use the same two actions, then update_storefront or manage_storefront_blocks. The matching HTTP endpoints are documented under Upload Media and Checkout appearance.

Custom fields​

ActionDescription
manage_product_custom_fieldsList, get, create, update, or delete checkout custom fields on a product's unpublished draft
manage_waitlist_custom_fieldsSame actions for waitlist custom fields — they do not appear at checkout
manage_variant_custom_fieldsSame actions for a variant's checkout custom-field override

Pick the action with action (list, get, create, update, delete). Identity is the field name, not a UUID. After a write, the assistant returns a preview link and stops — it does not publish. An empty variant override means the variant inherits the product checkout fields.

Order bumps​

ActionDescription
manage_order_bumpsList, get, create, update, delete, or reorder add-to-order checkout offers on a product's unpublished draft

Pick the action with action (list, get, create, update, delete, reorder). These write the unpublished overlay — live /order-bumps routes stay HTTP-only. After a write, the assistant returns a preview link and stops — it does not publish. Path parent is the checkout that shows the bump before pay; product_id and variant_id are the offered product and one-time variant. A product may have at most 10 order bumps, counting inactive ones. amount is a nullable override — null inherits the offered variant's price, it is not free. display_type omitted on create stores large_thumbnail; countdown needs validity_minutes of at least 1. Ask for a preview and the assistant runs the action with dry_run first, reporting what it would write without writing it. The matching HTTP endpoints are documented under Order Bumps.

Cross-sells​

ActionDescription
manage_cross_sellsList, get, create, update, delete, or reorder after-purchase offers on a product's unpublished draft

Pick the action with action (list, get, create, update, delete, reorder). These write the unpublished overlay — live /cross-sells routes stay HTTP-only. After a write, the assistant returns a preview link and stops — it does not publish. Path parent is the checkout that shows the offer after purchase; product_id and variant_id are the offered product and variant. Offers nest at most 3 levels. Delete promotes children to the deleted offer's parent. amount on the resource is the variant list price, not an override. validity_minutes omitted on create stores 15; null means no timer. Sending discount replaces the stored discount as a whole, so a partial object drops the parts it leaves out. Ask for a preview and the assistant runs the action with dry_run first, reporting what it would write without writing it; a previewed create does not check the offered product, variant, or parent, and states no price. The matching HTTP endpoints are documented under Cross-sells.

Orders​

ActionDescription
list_ordersBrowse and filter orders
get_orderRead the full details of a single order

Checkout sessions​

ActionDescription
list_checkout_sessionsBrowse checkout sessions a buyer started, including ones that never became an order
get_checkout_sessionRead one checkout session

These actions only read sessions. The matching HTTP endpoints are documented under Checkout Sessions.

Customers​

ActionDescription
list_customersBrowse and filter customers
get_customerRead the full details of a single customer

Waitlists​

ActionDescription
list_waitlistsBrowse product waitlists
get_waitlistRead one waitlist
list_waitlist_membersBrowse signups on one waitlist
get_waitlist_memberRead one signup

Signup answers are custom_field_answers. These actions only read. The matching HTTP endpoints are documented under Waitlists.

Product access​

ActionDescription
grant_product_accessGive a customer free access to a one-time product
revoke_product_accessRemove a customer's access to a one-time product

Transactions & refunds​

ActionDescription
list_transactionsBrowse and filter transactions
get_transactionRead a transaction's details, including what is refundable
issue_refundRefund a transaction in full or in part

Invoices​

ActionDescription
list_invoicesBrowse and filter invoices
get_invoiceRead the full details of a single invoice
resend_invoiceEmail an issued invoice to the customer again

Promotion codes​

ActionDescription
list_promotion_codesBrowse promotion codes
get_promotion_codeRead the details of a single promotion code
create_promotion_codeCreate a discount code
update_promotion_codeUpdate a code's name, status, or variants
archive_promotion_codePermanently retire a promotion code

Partners​

ActionDescription
list_partnersBrowse published partners
get_partnerRead one partner. Earnings need include=stats and currency
create_partnerCreate a partner. name and ref are required
update_partnerSparse-update a partner's name, ref, email, commission, or cookie length

commission_percent and cookie_valid_days are overrides. null means the partner inherits the store defaults on get_store → partners. 20 means 20%. cookie_valid_days is an integer from 1 to 3650. ref is up to 49 characters. update_partner accepts a UUID or an exact name or ref. conversion_rate_percent is a float (0.24 means 0.24%) and is null when there are no visits. Archived partners and the store referrer are omitted, and there is no archive action. The matching HTTP endpoints are documented under Partners.

Partner transactions​

ActionDescription
list_partner_transactionsBrowse purchase rows for every partner, in one currency

A refund is a second row, with its own id and a negative amount, unless the refund commission is 0. Then no refund row is written. Archived partners' rows are included, with ref null and a partner_id that get_partner cannot open. variant_name is the variant's current name, not a snapshot. The matching HTTP endpoint is documented under Partner Transactions.

Subscriptions​

ActionDescription
list_subscriptionsBrowse and filter subscriptions
get_subscriptionRead the full details of a single subscription
manage_subscriptionCancel, resume, or change the plan of a subscription

Statistics​

ActionDescription
get_statsRead a sales or revenue statistic with period-over-period comparison

Storefronts (Creator pages)​

In the dashboard these pages are labeled Creator page. The actions use the API name storefront — when someone asks for a Creator page, that is this resource, not Pages (landing pages).

ActionDescription
find_storefrontsList or look up Creator pages (storefronts) by name, slug, or domain
get_storefront_analyticsRead traffic and revenue for one Creator page
create_storefrontCreate a new Creator page as a draft
update_storefrontChange a Creator page's draft styles, header, or settings
manage_storefront_blocksList, add, edit, hide, or reorder widgets on a Creator page
publish_storefrontPut a Creator page's draft live
unpublish_storefrontTake a live Creator page down; the draft stays

Creator-page edits write the unpublished draft. The assistant returns a preview link after each edit and does not publish until you confirm. Host a header, settings, or widget file with prepare_media_upload and complete_media_upload — the same actions as checkout — then send file_url on update_storefront or manage_storefront_blocks. The assistant PUTs the local file itself; the server does not upload the bytes.

Landing pages​

ActionDescription
list_pagesList Easypages (landing pages)
get_page_analyticsRead analytics for one landing page

Easypages are a different surface from Creator pages. Landing pages are authored in the dashboard; these actions only list them and read their analytics.

What you can do — easymail​

Contacts​

ActionDescription
find_contactsFind and filter contacts by email, status, list, segment, custom field, or engagement recency
count_contactsCount the contacts matching a filter, without listing them
create_contactAdd a new contact
upsert_contactCreate a contact, or update it if the email already exists
update_contactChange an existing contact's details
delete_contactPermanently delete a contact
unsubscribe_contactWithdraw a contact's consent so they stop receiving email
resubscribe_contactRestore consent so a contact can receive email again
list_contact_eventsRead a contact's activity timeline — opens, clicks, bounces, purchases

Lists​

ActionDescription
find_contact_listsBrowse contact lists, optionally with subscriber and mailability stats
create_contact_listCreate a contact list
update_contact_listRename a contact list or change its description
delete_contact_listDelete a contact list
manage_contact_list_membershipAdd or remove contacts from a contact list

Segments​

ActionDescription
find_contact_segmentsBrowse contact segments — saved, filter-based audiences. An exact UUID read includes the stored filters
create_contact_segmentCreate a contact segment from a name and a filter tree
list_contact_segment_membersList the contacts who currently match a segment and can receive mail

Filter fields, operators, and the limits on a tree (50 conditions, 50 groups, 3 levels of groups) are on Segments.

A 503 from list_contact_segment_members means the segment's members could not be counted or loaded in time. Retry after about a minute.

Custom fields​

ActionDescription
find_contact_custom_fieldsBrowse contact custom field definitions
create_contact_custom_fieldDefine a new contact custom field
rename_contact_custom_fieldRename a contact custom field
delete_contact_custom_fieldDelete an unused contact custom field and its values from every contact
set_contact_custom_fieldSet a custom field value on a single contact
clear_contact_custom_fieldClear a custom field value on a single contact

A custom field that an active automation, a segment, or an unsent campaign still uses cannot be deleted; edit those first. See Delete Custom Field.

Campaigns​

ActionDescription
find_campaignsBrowse campaigns
get_campaignRead a campaign's details, optionally with open/click stats and revenue
create_campaignCreate a draft campaign
update_campaignEdit a draft campaign
delete_campaignDelete a campaign
send_campaignSend a campaign now
schedule_campaignSchedule a campaign to send at a future time
unschedule_campaignRevert a scheduled campaign back to draft
cancel_campaignStop a campaign that is currently being sent
send_test_emailSend a test copy of a campaign to specific addresses

Campaign reporting​

ActionDescription
list_campaign_recipientsSee the per-recipient send log for a campaign
list_campaign_link_clicksSee which tracked links were clicked, and how often

Automations​

ActionDescription
find_email_automationsBrowse email automations
get_email_automationRead one automation, including its steps when they can be represented
create_email_automationCreate a draft automation: a chain of delays and emails, optionally ending in an audience branch
update_email_automationChange a draft or paused automation
duplicate_email_automationCopy an automation into a new draft
activate_email_automationStart enrollment
pause_email_automationStop new enrollment on an active automation
delete_email_automationPermanently delete an automation

Triggers, conditions, steps, audience branches, and the limits on a chain (50 steps, 10 arms, 50 steps per arm, and the longest delay) are on Automations.

Ask for a preview and the assistant runs update_email_automation, activate_email_automation, or delete_email_automation with dry_run first. An update preview lists the stored step UUIDs the update would remove and reports when the automation cannot be edited. It also predicts a step UUID that is not on the automation or is repeated (422), and a kept email body that needs overwrite (409 CONTENT_OVERWRITE_REQUIRED). With overwrite, it lists the steps whose styled body would be replaced, and it flags a delay step whose UUID is sent on a step of another type. It does not check the trigger, names, segments, sender identities, or Markdown. An activation preview flags an automation that is already active; other activation requirements are checked by the real call. A delete preview shows the automation's name and status.

Sending setup​

ActionDescription
list_sender_identitiesList the verified "from" addresses you can send as
list_timezonesList timezones. A row's UUID is a contact timezone, the workspace timezone, or an automation timezone when the mode is fixed
get_mailing_settingsRead the footer name and address, the workspace timezone, and whether a hosted list signup requires confirmation
update_mailing_settingsChange the footer, the workspace timezone, or double opt-in. Omitted fields stay as stored

Mailing settings are on Mailing Settings.

Actions that change data​

warning

Some actions write data, move real money, or contact your customers. The assistant acts as you, with your permissions, so review what it proposes before you confirm.

In easycart: issuing refunds (which move real money), granting or revoking product access, resending invoices, cancelling subscriptions, archiving promotion codes, archiving a price variant, and publishing a Creator page (storefront). A full refund also revokes the customer's access to the product and emails them; archiving a promotion code or a variant cannot be undone. Taking a product off sale also saves any pending draft as the live product, which the assistant asks you to confirm first — see Products. Publishing a Creator page overwrites the live visitor page with the current draft. Deleting a branding theme cannot be undone from the API list — the assistant can preview it first with dry_run.

In easymail: sending or scheduling a campaign, sending a test email, and activating an automation deliver real mail; unsubscribing or resubscribing changes a contact's consent; and deleting a contact, list, campaign, custom field, or automation is permanent. Deleting a custom field removes its value from every contact.