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'."
Which version should I use?
We recommend Omnisend MCP v1. We plan to merge the best of v2 into the main server athttps://mcp.omnisend.com/mcp, so v1 connections pick up the improvements without any reconfiguring.
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.
- 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.
- Click Connect.
- Review the Claude access request and click Approve.
- Log in to Omnisend, set the access level you want to grant, and click Authorize access.
- Start a chat and ask a question about your Omnisend data to verify the connection.
ChatGPT
First, enable Developer mode:
- In ChatGPT, go to Settings > Security and login.
- Enable Developer mode.
Then add the server:
- Go to Plugins and click +.
- Fill in the modal:
- Name:
Omnisend - MCP Server URL:
https://mcp.omnisend.com/v2/mcp
- Name:
- Select I understand and want to continue, then click Create.
- Review the ChatGPT access request and click Approve.
- Log in to Omnisend, set the access level you want to grant, and click Authorize access.
- 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:
- In Claude, go to Customize > Connectors.
- Click Add > Add custom connector.
- Fill in the connector modal:
- Name:
Omnisend – <brand name>, for exampleOmnisend – Example Co. Always include the brand name so you can tell connectors apart. - MCP Server URL:
https://mcp.omnisend.com/v2/mcp— add a brand query parameter to keep URLs distinct, for examplehttps://mcp.omnisend.com/v2/mcp?brand=example-co.
- Name:
- Click Add.
- Next to the new connector, click Connect.
- Review the Claude access request and click Approve.
- 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:
- In ChatGPT, go to Settings > Security and login.
- Enable Developer mode.
Then repeat these steps for each Omnisend brand you want to add:
- Go to Plugins and click +.
- Fill in the modal:
- Name:
Omnisend – <brand name>, for exampleOmnisend – Example Co. - MCP Server URL:
https://mcp.omnisend.com/v2/mcp— add a brand query parameter to keep URLs distinct, for examplehttps://mcp.omnisend.com/v2/mcp?brand=example-co.
- Name:
- Select I understand and want to continue, then click Create.
- Review the ChatGPT access request and click Approve.
- 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:
| Setting | Value |
|---|---|
| Server URL | https://mcp.omnisend.com/v2/mcp |
| Authentication method | OAuth (with dynamic client registration) |
| Transport | Streamable 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 seven tools:
| Tool | Purpose |
|---|---|
omnisend_search | Lists all available Omnisend API operations with short descriptions, each labelled with the action tool that runs it. The AI calls this first to discover what it can do. |
omnisend_tool_schema | Returns the JSON Schema (input parameters, required fields, enums) and curated usage notes for an operation, so the AI knows exactly what to pass. |
omnisend_reference | Returns embedded Omnisend documentation on topics such as segments, events, analytics, campaigns, contacts, email content, email templates, and automation content. |
omnisend_query | Runs read operations. Never changes anything in your account. |
omnisend_create | Runs operations that create new records. |
omnisend_update | Runs operations that modify existing records. |
omnisend_delete | Runs operations that delete records. |
The typical workflow: the AI calls omnisend_search to discover operations, uses omnisend_tool_schema and omnisend_reference to understand a specific one, then calls the matching action tool to run it. This keeps the context window footprint small and fixed, no matter how many endpoints Omnisend adds.
How this differs from v1
v1 exposes four tools and routes every API call — read or write — through a single execute tool. v2 splits that one tool into four, one per action, so the operation's effect is visible in the tool name the AI calls.
The action is based on what an operation does, not on its HTTP method. Read-only endpoints that use POST — analytics reports, template rendering, event metadata queries — are omnisend_query, because they return data without changing anything. This means the 47 omnisend_query operations are exactly the read-only set.
Available API operations
Through the tools above, the MCP server exposes the following Omnisend API operations. The Tool column shows which action tool runs each one.
| Category | Operation | Description | Tool | Method | Path |
|---|---|---|---|---|---|
| Analytics | post_analytics_reports | Generate campaign analytics report grouped by send date | omnisend_query | POST | /api/analytics/reports |
| Analytics | post_analytics_statistics | Generate campaign analytics report grouped by event date | omnisend_query | POST | /api/analytics/statistics |
| Automations | get_automations | List automation workflows | omnisend_query | GET | /api/automations |
| Automations | get_automations_id | Get automation workflow | omnisend_query | GET | /api/automations/{id} |
| Automations | post_automations | Create automation workflow | omnisend_create | POST | /api/automations |
| Automations | patch_automations_id | Patch automation workflow | omnisend_update | PATCH | /api/automations/{id} |
| Automations | delete_automations_id | Delete automation workflow | omnisend_delete | DELETE | /api/automations/{id} |
| Automations | post_automations_id_copy | Copy automation workflow | omnisend_create | POST | /api/automations/{id}/copy |
| Automations | post_automations_id_enable | Enable automation workflow | omnisend_create | POST | /api/automations/{id}/enable |
| Automations | post_automations_id_disable | Disable automation workflow | omnisend_create | POST | /api/automations/{id}/disable |
| Automations | put_automations_id_blocks | Replace automation workflow blocks | omnisend_update | PUT | /api/automations/{id}/blocks |
| Automations | post_automations_id_blocks_block_id_test_email | Send test email | omnisend_create | POST | /api/automations/{id}/blocks/{blockID}/test-email |
| Automations | get_automations_id_utm | Get aggregated UTM tags for all blocks | omnisend_query | GET | /api/automations/{id}/utm |
| Automations | get_automations_id_blocks_block_id_utm | Get UTM tags for an automation block | omnisend_query | GET | /api/automations/{id}/blocks/{blockID}/utm |
| Automations | put_automations_id_blocks_block_id_utm | Update UTM tags for an automation block | omnisend_update | PUT | /api/automations/{id}/blocks/{blockID}/utm |
| Batches | get_batches | Get batches | omnisend_query | GET | /api/batches |
| Batches | get_batch_id | Get batch information | omnisend_query | GET | /api/batches/{batchID} |
| Batches | get_batches_batch_id_items | Get batch items | omnisend_query | GET | /api/batches/{batchID}/items |
| Batches | post_batches | Create batch | omnisend_create | POST | /api/batches |
| Brands | get_brands_current | Get information about brand | omnisend_query | GET | /api/brands/current |
| Brands | get_brand_assets_current | Get brand assets | omnisend_query | GET | /api/brand-assets/current |
| Brands | post_brands_current | Connect brand | omnisend_update | POST | /api/brands/current |
| Campaigns | get_campaigns | List campaigns | omnisend_query | GET | /api/campaigns |
| Campaigns | get_campaigns_id | Get campaign | omnisend_query | GET | /api/campaigns/{id} |
| Campaigns | get_campaigns_id_utm | Get campaign UTM settings | omnisend_query | GET | /api/campaigns/{id}/utm |
| Campaigns | post_campaigns | Create campaign | omnisend_create | POST | /api/campaigns |
| Campaigns | patch_campaigns_id | Update campaign | omnisend_update | PATCH | /api/campaigns/{id} |
| Campaigns | delete_campaigns_id | Delete campaign | omnisend_delete | DELETE | /api/campaigns/{id} |
| Campaigns | post_campaigns_id_send | Send campaign | omnisend_update | POST | /api/campaigns/{id}/send |
| Campaigns | post_campaigns_id_cancel | Cancel campaign | omnisend_update | POST | /api/campaigns/{id}/cancel |
| Campaigns | post_campaigns_id_copy | Copy campaign | omnisend_create | POST | /api/campaigns/{id}/copy |
| Campaigns | post_campaigns_id_test_email | Send campaign test email | omnisend_create | POST | /api/campaigns/{id}/test-email |
| Campaigns | put_campaigns_id_utm | Update campaign UTM settings | omnisend_update | PUT | /api/campaigns/{id}/utm |
| Campaigns | post_campaigns_id_ab_test_resume | Resume A/B test | omnisend_create | POST | /api/campaigns/{id}/ab-test/resume |
| Campaigns | post_campaigns_id_ab_test_stop | Stop A/B test | omnisend_create | POST | /api/campaigns/{id}/ab-test/stop |
| Campaigns | post_campaigns_id_ab_test_winner | Select A/B test winner | omnisend_create | POST | /api/campaigns/{id}/ab-test/winner |
| Contacts | get_contacts | List contacts | omnisend_query | GET | /api/contacts |
| Contacts | get_contacts_id | Get contact | omnisend_query | GET | /api/contacts/{id} |
| Contacts | post_contacts | Create or update existing contact | omnisend_create | POST | /api/contacts |
| Contacts | patch_contacts | Update contact by email | omnisend_update | PATCH | /api/contacts |
| Contacts | patch_contacts_id | Update contact by ID | omnisend_update | PATCH | /api/contacts/{id} |
| Contacts | post_contacts_tags | Batch add tags | omnisend_update | POST | /api/contacts/tags |
| Contacts | delete_contacts_tags | Batch remove tags | omnisend_delete | DELETE | /api/contacts/tags |
| Email Content | get_email_content_id | Get email content | omnisend_query | GET | /api/email-content/{id} |
| Email Content | post_email_content_id_render | Render email content | omnisend_query | POST | /api/email-content/{id}/render |
| Email Content | put_email_content_id | Update email content | omnisend_update | PUT | /api/email-content/{id} |
| Email Templates | get_email_templates | Get email templates | omnisend_query | GET | /api/email-templates |
| Email Templates | get_email_templates_id | Get email template | omnisend_query | GET | /api/email-templates/{id} |
| Email Templates | post_email_templates_id_render | Render email template | omnisend_query | POST | /api/email-templates/{id}/render |
| Email Templates | post_email_templates | Create email template | omnisend_create | POST | /api/email-templates |
| Email Templates | post_email_templates_import | Import email template from HTML | omnisend_create | POST | /api/email-templates/import |
| Email Templates | put_email_templates_id | Update email template | omnisend_update | PUT | /api/email-templates/{id} |
| Email Templates | delete_email_templates_id | Delete email template | omnisend_delete | DELETE | /api/email-templates/{id} |
| Email Universal Layouts | get_email_universal_layouts | Get universal layouts | omnisend_query | GET | /api/email-universal-layouts |
| Email Universal Layouts | get_email_universal_layouts_id | Get universal layout | omnisend_query | GET | /api/email-universal-layouts/{id} |
| Email Universal Layouts | post_email_universal_layouts | Create universal layout | omnisend_create | POST | /api/email-universal-layouts |
| Email Universal Layouts | put_email_universal_layouts_id | Update universal layout | omnisend_update | PUT | /api/email-universal-layouts/{id} |
| Email Universal Layouts | delete_email_universal_layouts_id | Delete universal layout | omnisend_delete | DELETE | /api/email-universal-layouts/{id} |
| Event Metadata | post_event_metadata_query | Query events metadata | omnisend_query | POST | /api/event-metadata/query |
| Event Metadata | post_event_metadata | Create custom event metadata | omnisend_create | POST | /api/event-metadata |
| Event Metadata | put_event_metadata | Update custom event metadata | omnisend_update | PUT | /api/event-metadata |
| Forms | get_forms | List forms | omnisend_query | GET | /api/forms |
| Forms | get_form_id | Get form | omnisend_query | GET | /api/forms/{formID} |
| Forms | get_forms_form_id_contacts | Get form submitted contacts | omnisend_query | GET | /api/forms/{formID}/contacts |
| Forms | get_forms_form_id_report | Get form report | omnisend_query | GET | /api/forms/{formID}/report |
| Forms | get_forms_form_id_report_periodic | Get form periodic report | omnisend_query | GET | /api/forms/{formID}/report/periodic |
| Forms | get_forms_form_id_ab_setup_reports | List A/B setup reports for a form | omnisend_query | GET | /api/forms/{formID}/ab-setup/reports |
| Forms | post_forms_form_id_render | Render a form | omnisend_query | POST | /api/forms/{formID}/render |
| Forms | post_forms | Create form | omnisend_create | POST | /api/forms |
| Forms | patch_form_id | Update form | omnisend_update | PATCH | /api/forms/{formID} |
| Forms | delete_form_id | Delete form | omnisend_delete | DELETE | /api/forms/{formID} |
| Forms | post_forms_form_id_enable | Enable form | omnisend_update | POST | /api/forms/{formID}/enable |
| Forms | post_forms_form_id_disable | Disable form | omnisend_update | POST | /api/forms/{formID}/disable |
| Form A/B Setups | get_form_ab_setups | List form A/B setups | omnisend_query | GET | /api/form-ab-setups |
| Form A/B Setups | get_ab_setup_id | Get a form A/B setup | omnisend_query | GET | /api/form-ab-setups/{abSetupID} |
| Form A/B Setups | post_form_ab_setups | Create a form A/B setup | omnisend_create | POST | /api/form-ab-setups |
| Form A/B Setups | post_form_ab_setups_ab_setup_id_start | Start a form A/B setup | omnisend_update | POST | /api/form-ab-setups/{abSetupID}/start |
| Form A/B Setups | post_form_ab_setups_ab_setup_id_winner | Select a form A/B setup winner | omnisend_update | POST | /api/form-ab-setups/{abSetupID}/winner |
| Form A/B Setups | delete_ab_setup_id | Delete a form A/B setup | omnisend_delete | DELETE | /api/form-ab-setups/{abSetupID} |
| Form Templates | get_form_templates | List form templates | omnisend_query | GET | /api/form-templates |
| Form Templates | get_template_id | Get template | omnisend_query | GET | /api/form-templates/{templateID} |
| Form Templates | post_form_templates_template_id_render | Render a form template | omnisend_query | POST | /api/form-templates/{templateID}/render |
| Images | get_images | List images | omnisend_query | GET | /api/images |
| Images | get_images_id | Get image | omnisend_query | GET | /api/images/{id} |
| Images | post_images | Upload image by URL | omnisend_create | POST | /api/images |
| Images | post_images_upload | Upload image file | omnisend_create | POST | /api/images/upload |
| Images | delete_images_id | Delete image | omnisend_delete | DELETE | /api/images/{id} |
| Product Categories | get_product_categories | List product categories | omnisend_query | GET | /api/product-categories |
| Product Categories | get_category_id | Get product category | omnisend_query | GET | /api/product-categories/{categoryID} |
| Product Categories | post_product_categories | Create product category | omnisend_create | POST | /api/product-categories |
| Product Categories | patch_category_id | Update product category | omnisend_update | PATCH | /api/product-categories/{categoryID} |
| Product Categories | delete_category_id | Delete product category | omnisend_delete | DELETE | /api/product-categories/{categoryID} |
| Products | get_products | List products | omnisend_query | GET | /api/products |
| Products | get_product_id | Get product | omnisend_query | GET | /api/products/{productID} |
| Products | post_products | Create product | omnisend_create | POST | /api/products |
| Products | put_product_id | Replace product | omnisend_update | PUT | /api/products/{productID} |
| Products | delete_product_id | Delete product | omnisend_delete | DELETE | /api/products/{productID} |
| Segments | get_segments | List segments | omnisend_query | GET | /api/segments |
| Segments | get_segment_id | Get segment | omnisend_query | GET | /api/segments/{segmentID} |
| Segments | get_segments_segment_id_statistics | Get segment statistics | omnisend_query | GET | /api/segments/{segmentID}/statistics |
| Segments | post_segments | Create segment | omnisend_create | POST | /api/segments |
| Segments | put_segment_id | Update segment | omnisend_update | PUT | /api/segments/{segmentID} |
| Segments | delete_segment_id | Delete segment | omnisend_delete | DELETE | /api/segments/{segmentID} |
| Reference | get_reference_topics | List reference documentation topics | omnisend_query | GET | /_reference/topics |
| Reference | get_reference_documentation | Get reference documentation by topic | omnisend_query | GET | /_reference/documentation |
Troubleshooting
- Cannot connect — Confirm the URL is exactly
https://mcp.omnisend.com/v2/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 seven tools:
omnisend_search,omnisend_tool_schema,omnisend_reference,omnisend_query,omnisend_create,omnisend_update, andomnisend_delete. - 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.