Omnisend MCP Server

Connect your Omnisend account to AI tools such as Claude, ChatGPT, or Cursor using the Model Context Protocol (MCP).

What is MCP?

MCP is an open protocol that lets AI models securely connect to external data sources and tools. Connect Omnisend's MCP server to an AI tool such as Claude or ChatGPT to get help with your Omnisend data — from performance analysis to creating campaigns and segments.

Example prompts:

  • "Give me the performance of my email campaigns for last month. Show revenue, orders, conversion rate, click rate, open rate, and unsubscribes."
  • "Schedule an email newsletter for my email subscribers segment to go out tomorrow morning."
  • "Make a segment of contacts with zero orders, named 'Never purchased'."

Before you connect

You need:

  • The Owner, Admin, Manager, or Partner role in Omnisend.
  • An MCP-compatible AI tool such as Claude, ChatGPT, or Cursor.

Connect a single Omnisend account (recommended)

Claude

The listed Omnisend connector is the simplest way to use Omnisend in Claude. Connect once and it works across all three Claude products: Claude, Claude Cowork, and Claude Code.

  1. Open the Omnisend MCP connector in the Claude connector directory, or in Claude go to Customize > Connectors > Add > Browse connectors and search for Omnisend MCP.
  2. Click Connect.
  3. Review the Claude access request and click Approve.
  4. Log in to Omnisend, set the access level you want to grant, and click Authorize access.
  5. Start a chat and ask a question about your Omnisend data to verify the connection.

ChatGPT

The listed Omnisend plugin is the simplest way to use Omnisend in ChatGPT.

  1. Open the Omnisend plugin, or in ChatGPT go to Plugins and search for Omnisend.
  2. Click Install plugin.
  3. Log in to Omnisend, set the access level you want to grant, and click Authorize access.
  4. Start a chat and ask a question about your Omnisend data to verify the connection.

Connect multiple Omnisend brands

MCP does not officially support multiple accounts on one connection. If you manage several brands — as an agency, or a merchant running multiple stores — the workaround is to add a separate connector for each brand.

⚠️

Name connectors after the brand. "Omnisend – Example Co" is much easier to pick correctly under time pressure than four connectors all called "Omnisend".

⚠️

Use one Omnisend connector per chat. Do not enable two Omnisend connectors in the same conversation. The AI has no reliable way to tell which brand a question refers to, and can read from — or worse, write to — the wrong brand. Enable only the connector for the brand you're working on, and start a new chat when you switch brands.

⚠️

Grant read-only access to each brand connector. If the AI ever acts on the wrong connector, read-only access means the worst case is a wrong answer rather than a wrong change to a client's account. Use the read-only preset on the consent screen for each brand you connect.

Claude — custom connector per brand

Repeat these steps for each Omnisend brand you want to add:

  1. In Claude, go to Customize > Connectors.
  2. Click Add > Add custom connector.
  3. Fill in the connector modal:
    • Name: Omnisend – <brand name>, for example Omnisend – Example Co. Always include the brand name so you can tell connectors apart.
    • MCP Server URL: https://mcp.omnisend.com/mcp — add a brand query parameter to keep URLs distinct, for example https://mcp.omnisend.com/mcp?brand=example-co.
  4. Click Add.
  5. Next to the new connector, click Connect.
  6. Review the Claude access request and click Approve.
  7. Log in to the Omnisend account for that brand, set the access level you want to grant, and click Authorize access.

In every new chat, click + > Connectors and make sure only the connector for the brand you're working on is enabled.

ChatGPT — custom MCP server per brand

First, enable Developer mode:

  1. In ChatGPT, go to Settings > Security and login.
  2. Enable Developer mode.

Then repeat these steps for each Omnisend brand you want to add:

  1. Go to Plugins and click +.
  2. Fill in the modal:
    • Name: Omnisend – <brand name>, for example Omnisend – Example Co.
    • MCP Server URL: https://mcp.omnisend.com/mcp — add a brand query parameter to keep URLs distinct, for example https://mcp.omnisend.com/mcp?brand=example-co.
  3. Select I understand and want to continue, then click Create.
  4. Review the ChatGPT access request and click Approve.
  5. Log in to the Omnisend account for that brand, set the access level you want to grant, and click Authorize access.

In every new chat, click + and select the connector you want to use, or type its name — for example @Omnisend – Example Co.

Other tools — one server entry per brand

The same approach applies: add one server entry per brand, give each a distinct name and URL, authorize each against its own Omnisend account, and keep only one enabled at a time. See Other AI tools for connection details.


Other AI tools

Omnisend MCP works with any MCP client that supports remote servers, such as Cursor, OpenAI Codex, and VS Code.

The setup follows the same pattern everywhere: add Omnisend as a remote MCP server, then complete the OAuth flow when prompted — log in to your Omnisend account, set the access level you want to grant, and click Authorize access. Where you add the server differs by tool, so follow your tool's own MCP documentation for the exact steps.

Use these details wherever your tool asks for them:

SettingValue
Server URLhttps://mcp.omnisend.com/mcp
Authentication methodOAuth (with dynamic client registration)
TransportStreamable HTTP

Your tool must support OAuth dynamic client registration.


How the Omnisend MCP server works

Omnisend's API is large, covering campaigns, contacts, segments, forms, templates, products, analytics, and more. Exposing every operation as a separate MCP tool would overwhelm the AI tool's context window and degrade performance.

Instead, Omnisend uses a compact tool design: a small number of generic tools that give the AI access to the entire API. Your MCP client sees four tools:

ToolPurpose
searchLists all available Omnisend API operations with short descriptions. The AI calls this first to discover what it can do.
tool_schemaReturns the full JSON Schema (input parameters, required fields, enums) for an operation, so the AI knows exactly what to pass.
tool_documentationReturns curated documentation and usage notes for an operation, including payload examples and behavioral hints beyond the raw schema.
executeRuns an Omnisend API call by operation name. The AI passes the operation name and a matching payload, and the server makes the authenticated request.

The typical workflow: the AI calls search to discover operations, uses tool_schema and tool_documentation to understand a specific one, then calls execute to run it. This keeps the context window footprint small and fixed, no matter how many endpoints Omnisend adds.


Available API operations

Through the four tools above, the MCP server exposes the following Omnisend API operations:

CategoryOperationDescriptionMethodPathRead only
Analyticspost_analytics_reportsGenerate campaign analytics report grouped by send datePOST/api/analytics/reports
Analyticspost_analytics_statisticsGenerate campaign analytics report grouped by event datePOST/api/analytics/statistics
Automationsget_automationsList automation workflowsGET/api/automations
Automationsget_automations_idGet automation workflowGET/api/automations/{id}
Automationspost_automationsCreate automation workflowPOST/api/automations
Automationspatch_automations_idPatch automation workflowPATCH/api/automations/{id}
Automationsdelete_automations_idDelete automation workflowDELETE/api/automations/{id}
Automationspost_automations_id_copyCopy automation workflowPOST/api/automations/{id}/copy
Automationspost_automations_id_enableEnable automation workflowPOST/api/automations/{id}/enable
Automationspost_automations_id_disableDisable automation workflowPOST/api/automations/{id}/disable
Automationsput_automations_id_blocksReplace automation workflow blocksPUT/api/automations/{id}/blocks
Automationspost_automations_id_blocks_block_id_test_emailSend test emailPOST/api/automations/{id}/blocks/{blockID}/test-email
Automationsget_automations_id_utmGet aggregated UTM tags for all blocksGET/api/automations/{id}/utm
Automationsget_automations_id_blocks_block_id_utmGet UTM tags for an automation blockGET/api/automations/{id}/blocks/{blockID}/utm
Automationsput_automations_id_blocks_block_id_utmUpdate UTM tags for an automation blockPUT/api/automations/{id}/blocks/{blockID}/utm
Batchesget_batchesGet batchesGET/api/batches
Batchesget_batch_idGet batch informationGET/api/batches/{batchID}
Batchesget_batches_batch_id_itemsGet batch itemsGET/api/batches/{batchID}/items
Batchespost_batchesCreate batchPOST/api/batches
Brandsget_brands_currentGet information about brandGET/api/brands/current
Brandsget_brand_assets_currentGet brand assetsGET/api/brand-assets/current
Brandspost_brands_currentConnect brandPOST/api/brands/current
Campaignsget_campaignsList campaignsGET/api/campaigns
Campaignsget_campaigns_idGet campaignGET/api/campaigns/{id}
Campaignsget_campaigns_id_utmGet campaign UTM settingsGET/api/campaigns/{id}/utm
Campaignspost_campaignsCreate campaignPOST/api/campaigns
Campaignspatch_campaigns_idUpdate campaignPATCH/api/campaigns/{id}
Campaignsdelete_campaigns_idDelete campaignDELETE/api/campaigns/{id}
Campaignspost_campaigns_id_sendSend campaignPOST/api/campaigns/{id}/send
Campaignspost_campaigns_id_cancelCancel campaignPOST/api/campaigns/{id}/cancel
Campaignspost_campaigns_id_copyCopy campaignPOST/api/campaigns/{id}/copy
Campaignspost_campaigns_id_test_emailSend campaign test emailPOST/api/campaigns/{id}/test-email
Campaignsput_campaigns_id_utmUpdate campaign UTM settingsPUT/api/campaigns/{id}/utm
Campaignspost_campaigns_id_ab_test_resumeResume A/B testPOST/api/campaigns/{id}/ab-test/resume
Campaignspost_campaigns_id_ab_test_stopStop A/B testPOST/api/campaigns/{id}/ab-test/stop
Campaignspost_campaigns_id_ab_test_winnerSelect A/B test winnerPOST/api/campaigns/{id}/ab-test/winner
Contactsget_contactsList contactsGET/api/contacts
Contactsget_contacts_idGet contactGET/api/contacts/{id}
Contactspost_contactsCreate or update existing contactPOST/api/contacts
Contactspatch_contactsUpdate contact by emailPATCH/api/contacts
Contactspatch_contacts_idUpdate contact by IDPATCH/api/contacts/{id}
Contactspost_contacts_tagsBatch add tagsPOST/api/contacts/tags
Contactsdelete_contacts_tagsBatch remove tagsDELETE/api/contacts/tags
Email Contentget_email_content_idGet email contentGET/api/email-content/{id}
Email Contentpost_email_content_id_renderRender email contentPOST/api/email-content/{id}/render
Email Contentput_email_content_idUpdate email contentPUT/api/email-content/{id}
Email Templatesget_email_templatesGet email templatesGET/api/email-templates
Email Templatesget_email_templates_idGet email templateGET/api/email-templates/{id}
Email Templatespost_email_templates_id_renderRender email templatePOST/api/email-templates/{id}/render
Email Templatespost_email_templatesCreate email templatePOST/api/email-templates
Email Templatespost_email_templates_importImport email template from HTMLPOST/api/email-templates/import
Email Templatesput_email_templates_idUpdate email templatePUT/api/email-templates/{id}
Email Templatesdelete_email_templates_idDelete email templateDELETE/api/email-templates/{id}
Email Universal Layoutsget_email_universal_layoutsGet universal layoutsGET/api/email-universal-layouts
Email Universal Layoutsget_email_universal_layouts_idGet universal layoutGET/api/email-universal-layouts/{id}
Email Universal Layoutspost_email_universal_layoutsCreate universal layoutPOST/api/email-universal-layouts
Email Universal Layoutsput_email_universal_layouts_idUpdate universal layoutPUT/api/email-universal-layouts/{id}
Email Universal Layoutsdelete_email_universal_layouts_idDelete universal layoutDELETE/api/email-universal-layouts/{id}
Event Metadatapost_event_metadata_queryQuery events metadataPOST/api/event-metadata/query
Event Metadatapost_event_metadataCreate custom event metadataPOST/api/event-metadata
Event Metadataput_event_metadataUpdate custom event metadataPUT/api/event-metadata
Formsget_formsList formsGET/api/forms
Formsget_form_idGet formGET/api/forms/{formID}
Formsget_forms_form_id_contactsGet form submitted contactsGET/api/forms/{formID}/contacts
Formsget_forms_form_id_reportGet form reportGET/api/forms/{formID}/report
Formsget_forms_form_id_report_periodicGet form periodic reportGET/api/forms/{formID}/report/periodic
Formsget_forms_form_id_ab_setup_reportsList A/B setup reports for a formGET/api/forms/{formID}/ab-setup/reports
Formspost_forms_form_id_renderRender a formPOST/api/forms/{formID}/render
Formspost_formsCreate formPOST/api/forms
Formspatch_form_idUpdate formPATCH/api/forms/{formID}
Formsdelete_form_idDelete formDELETE/api/forms/{formID}
Formspost_forms_form_id_enableEnable formPOST/api/forms/{formID}/enable
Formspost_forms_form_id_disableDisable formPOST/api/forms/{formID}/disable
Form A/B Setupsget_form_ab_setupsList form A/B setupsGET/api/form-ab-setups
Form A/B Setupsget_ab_setup_idGet a form A/B setupGET/api/form-ab-setups/{abSetupID}
Form A/B Setupspost_form_ab_setupsCreate a form A/B setupPOST/api/form-ab-setups
Form A/B Setupspost_form_ab_setups_ab_setup_id_startStart a form A/B setupPOST/api/form-ab-setups/{abSetupID}/start
Form A/B Setupspost_form_ab_setups_ab_setup_id_winnerSelect a form A/B setup winnerPOST/api/form-ab-setups/{abSetupID}/winner
Form A/B Setupsdelete_ab_setup_idDelete a form A/B setupDELETE/api/form-ab-setups/{abSetupID}
Form Templatesget_form_templatesList form templatesGET/api/form-templates
Form Templatesget_template_idGet templateGET/api/form-templates/{templateID}
Form Templatespost_form_templates_template_id_renderRender a form templatePOST/api/form-templates/{templateID}/render
Imagesget_imagesList imagesGET/api/images
Imagesget_images_idGet imageGET/api/images/{id}
Imagespost_imagesUpload image by URLPOST/api/images
Imagespost_images_uploadUpload image filePOST/api/images/upload
Imagesdelete_images_idDelete imageDELETE/api/images/{id}
Product Categoriesget_product_categoriesList product categoriesGET/api/product-categories
Product Categoriesget_category_idGet product categoryGET/api/product-categories/{categoryID}
Product Categoriespost_product_categoriesCreate product categoryPOST/api/product-categories
Product Categoriespatch_category_idUpdate product categoryPATCH/api/product-categories/{categoryID}
Product Categoriesdelete_category_idDelete product categoryDELETE/api/product-categories/{categoryID}
Productsget_productsList productsGET/api/products
Productsget_product_idGet productGET/api/products/{productID}
Productspost_productsCreate productPOST/api/products
Productsput_product_idReplace productPUT/api/products/{productID}
Productsdelete_product_idDelete productDELETE/api/products/{productID}
Segmentsget_segmentsList segmentsGET/api/segments
Segmentsget_segment_idGet segmentGET/api/segments/{segmentID}
Segmentsget_segments_segment_id_statisticsGet segment statisticsGET/api/segments/{segmentID}/statistics
Segmentspost_segmentsCreate segmentPOST/api/segments
Segmentsput_segment_idUpdate segmentPUT/api/segments/{segmentID}
Segmentsdelete_segment_idDelete segmentDELETE/api/segments/{segmentID}
Referenceget_reference_topicsList reference documentation topicsGET/_reference/topics
Referenceget_reference_documentationGet reference documentation by topicGET/_reference/documentation

Troubleshooting

  • Cannot connect — Confirm the URL is exactly https://mcp.omnisend.com/mcp, with no trailing slash unless your tool's documentation says otherwise. Check your network and firewall rules.
  • Authentication fails — Make sure your Omnisend account has the Owner, Admin, Manager, or Partner role and that the OAuth flow completes. In Cursor and VS Code, log out of the MCP server and re-authenticate before trying anything else.
  • Tools missing — Restart your AI tool and check that the correct server entry is enabled for the chat or workspace. You should see four tools: search, tool_schema, tool_documentation, and execute.
  • The AI answers about the wrong brand — You most likely have more than one Omnisend connector enabled in the same chat. Disable all but the one you need and start a new chat. See Connect multiple Omnisend brands.
  • "Permission denied" on a write action — You authorized read-only access. Reconnect the connector and grant write access if you need the AI to make changes.
  • Inaccurate or inconsistent answers — Start a new chat to reset the context, and be specific in your query: name the campaign, the date range, the channel.
  • Operation errors — If an API call returns an error, the AI will usually explain the issue. Common causes are insufficient permissions, invalid parameters, or rate limiting.

For product issues, contact Omnisend support.