Skip the install. Get this working in under 2 minutes.
Start a free trial on cloud.anythingmcp.com, add the Constant Contact in one click, then point your AI client (Claude, ChatGPT, Copilot or Cursor) at the generated MCP endpoint. No Docker, no git clone, zero engineering experience required.
Summary
Work with a Constant Contact account from any AI agent: contacts with their email consent, lists, tags, custom fields and segments, bulk list and tag changes, email campaigns built from your HTML with preview and test send, and the reports of campaigns, links and single contacts. V3 API with OAuth sign-in; scheduling a send and deletes install switched off.
Try asking
Example prompts for Constant Contact
Click any prompt to copy it. Paste into Claude, ChatGPT, Cursor, Gemini, Copilot or OpenClaw to run it against this connector.
Claude is AI and can make mistakes. Please double-check responses.
💡 No install? Use cloud.anythingmcp.com directly. Sign in, click Connectors → Constant Contact, paste your credentials, mint an MCP API key and you're done. No Docker, no
git clone, no local server.
Constant Contact + Gemini
Work with a Constant Contact account from any AI agent: contacts with their email consent, lists, tags, custom fields and segments, bulk list and tag changes, email campaigns built from your HTML with preview and test send, and the reports of campaigns, links and single contacts. V3 API with OAuth sign-in; scheduling a send and deletes install switched off.
Prerequisites
See the full setup instructions baked into the connector (visible in the in-app store when you select the connector). The required environment variables for this connector are:
CONSTANT_CONTACT_CLIENT_ID, CONSTANT_CONTACT_CLIENT_SECRET (filled in by Authorize with Provider: CONSTANT_CONTACT_REFRESH_TOKEN)
Step 1 — Get credentials
Setting up takes about 10 minutes. You register your own application in the Constant Contact developer portal and sign in with the account you want to connect.
- Open the V3 developer portal at https://app.constantcontact.com/pages/dma/portal and sign in with the Constant Contact login of that account. New applications are private: until Constant Contact approves an application, only the user who created it can authorize it.
- Click New Application and give it a name (it appears on the consent screen). Choose Authorization Code Flow and Implicit Flow and a refresh token type: Rotating Refresh Tokens (recommended) or Long Lived Refresh Tokens. Create it.
- Open the application with Edit and add the redirect URI
<your AnythingMCP URL>/api/mcp-oauth/callback, on AnythingMCP Cloudhttps://cloud.anythingmcp.com/api/mcp-oauth/callback, character for character. - Click Generate Client Secret. The secret is shown only once. Save the application.
- Paste the application's API Key (it is the OAuth client ID) into
CONSTANT_CONTACT_CLIENT_IDand the secret intoCONSTANT_CONTACT_CLIENT_SECRET. LeaveCONSTANT_CONTACT_REFRESH_TOKENempty and install. - On the connector page click Authorize with Provider and sign in to Constant Contact. The connector asks for the scopes
account_read contact_data campaign_data offline_access(offline_accessis what returns a refresh token). - Run
constant_contact_get_account_summary: it shows the organization and confirms the sign-in.
An access token lasts 24 hours and is renewed automatically with the refresh token. With rotating refresh tokens every renewal returns a new refresh token and the previous one stops working, so do not use the stored token anywhere else; with long-lived ones the same token keeps working. Either kind expires after 180 days without use: then authorize again. What the AI may do also depends on the privileges of the Constant Contact user who signed in (constant_contact_get_user_privileges).
What it reads: the account summary, the account's sender addresses with their confirm status, and the privileges of the signed-in user. Contacts filtered by email, status, lists, tags, segment or created, updated and opt-out dates, with their email permission, opt-in and opt-out details and, on request, lists, tags, custom fields, phones, addresses and notes; contact counts per consent state. Lists with member counts, tags with contact counts, custom fields and segments with their criteria. Background activities and their progress. Email campaigns with their activities, the subject, sender, audience and HTML of an email, an HTML preview, the schedule and the send history. Reports: results of recent campaigns (sends, opens, clicks, forwards, unsubscribes, bounces, spam reports), stats per campaign and per activity, clicks per link, the contacts behind each number, and the email history and open and click rates of one contact.
What it writes: adds or updates contacts (constant_contact_create_or_update_contact works by email, changes only the fields you send and is the safe default; constant_contact_update_contact replaces the whole contact, so the AI reads it first), creates and renames lists, tags and custom fields, adds and removes contacts on lists and tags in bulk, creates draft email campaigns from your HTML, sets their audience, renames them, sends test emails and cancels a scheduled send. Bulk changes run in the background and return an activity_id that the AI follows with constant_contact_get_activity until the state is completed.
Building an email: constant_contact_create_email_campaign makes a draft from your own HTML (custom code email, format_type 5). The HTML must contain [[trackingImage]] for opens to be tracked, and the sender and reply-to must be confirmed addresses from constant_contact_list_account_emails. Then constant_contact_update_email_campaign_activity sets contact_list_ids or segment_ids; it replaces the activity, so the AI reads it first and sends every field again. Check the result with constant_contact_get_email_preview and constant_contact_send_test_email (up to 5 addresses per test, 50 test recipients a day per account).
Switched off at install: constant_contact_schedule_email_campaign_activity (sends to every contact on the lists and cannot be taken back once sending starts), constant_contact_delete_contact and constant_contact_delete_contact_list. A workspace admin turns them on when the team needs them. With scheduling on, the AI shows you subject, sender, audience and time and schedules only after your yes.
Consent: add contacts only when they agreed to receive email from the business, and never set permission_to_send to explicit for people who did not opt in. Unsubscribed contacts cannot be subscribed again through the API without their own action. A contact can be on at most 50 lists.
Data formats: ids of contacts, lists, tags, custom fields, campaigns and campaign activities are UUIDs; segment ids are integers. A campaign has several activities: reports, previews, tests and schedules take the campaign_activity_id of the primary_email activity, not the campaign_id. Times are ISO 8601 in UTC (2026-10-30T14:05:00.000Z). Campaign current_status is Draft, Scheduled, Executing, Done, Error or Removed; permission_to_send is explicit, implicit, not_set, pending_confirmation, temp_hold or unsubscribed. Report counts are unique contacts unless the report says otherwise, and rates are percentages.
Paging: lists carry _links.next.href while more pages exist. Contacts, lists, tags, custom fields, activities and campaigns use the cursor= value of that link as cursor; reports and segments use the next= value as next. The AI keeps the other filters the same between pages.
Limits: 10,000 requests a day per application (reset at 00:00 UTC) and 4 requests a second; beyond either the API answers 429 (quota_exceeded or throttled).
Common errors: 401 means an expired or revoked token: click Authorize with Provider again, and check that the API key and secret belong to the same application. At sign-in, a redirect error means the redirect URI does not match exactly. 403 is a missing scope or user privilege (constant_contact_get_user_privileges shows which). 404 is an unknown id. 409 is a duplicate email, list, tag or campaign name. 400 explains invalid input in error_key and error_message. A 202 from constant_contact_list_contacts with a segment means the result is still being built: ask again.
The connector does not cover events, SMS campaigns, social posts or partner endpoints, and does not build emails with the drag-and-drop editor.
Step 2 — Install the adapter
curl -fsSL https://raw.githubusercontent.com/HelpCode-ai/anythingmcp/main/docker-compose.quickstart.yml -o docker-compose.yml
printf 'JWT_SECRET=%s\nENCRYPTION_KEY=%s\n' "$(openssl rand -hex 32)" "$(openssl rand -hex 32)" > .env
docker compose up -d
Step 3 — Add the connector in Gemini
Your server URL: in AnythingMCP, open MCP Servers → the server this connector is on, and copy its URL (
https://cloud.anythingmcp.com/mcp/…). Use it wherever this guide showsYOUR_SERVER_ID.
Gemini CLI reads MCP servers from ~/.gemini/settings.json (on Windows %USERPROFILE%\.gemini\settings.json). Add:
{
"mcpServers": {
"anythingmcp": {
"httpUrl": "https://cloud.anythingmcp.com/mcp/YOUR_SERVER_ID",
"headers": { "X-API-Key": "YOUR_MCP_API_KEY" }
}
}
}
- Create an MCP API key in AnythingMCP under MCP Servers → your server → API keys, and paste it in place of
YOUR_MCP_API_KEY. - Save the file and restart
gemini. - Run
/mcpinside Gemini CLI (orgemini mcp listin your shell):anythingmcpshould show as connected. - Start prompting: Gemini CLI can now call the
Constant Contacttools.
Available tools
| Tool | What it does |
|---|---|
constant_contact_get_account_summary | Account details of the connected Constant Contact account: organization name, contact email and phone, website, time zone, country, state… |
constant_contact_list_account_emails | Email addresses of the account with their confirm status (CONFIRMED or UNCONFIRMED) and roles |
constant_contact_get_user_privileges | Privileges of the Constant Contact user who authorized the connector (for example contacts:write, campaign:send, ui:campaign:metrics) |
constant_contact_list_contacts | Search contacts, newest changes not guaranteed first |
constant_contact_get_contact | One contact by id with its email permission, opt-in and opt-out details and, with include, its lists, tags, custom fields, phone numbers… |
constant_contact_get_contact_counts | Total number of contacts in the account and how many are in each email consent state (explicit, implicit, pending confirmation… |
constant_contact_create_contact | Create a new contact |
constant_contact_create_or_update_contact | Add a contact by email address or update the existing one, and add it to one or more lists |
constant_contact_update_contact | Replace a contact's data |
constant_contact_delete_contact | Delete a contact |
constant_contact_list_contact_lists | Contact lists of the account with list_id, name, description, favorite flag and, with include_membership_count, the number of members |
constant_contact_get_contact_list | One contact list by id, optionally with its number of members |
constant_contact_create_contact_list | Create a contact list |
constant_contact_update_contact_list | Rename a list or change its description or favorite flag |
constant_contact_delete_contact_list | Delete a contact list and its memberships (the contacts stay in the account) |
constant_contact_add_contacts_to_lists | Add contacts to one or more lists as a background activity |
constant_contact_remove_contacts_from_lists | Remove contacts from one or more lists as a background activity (the contacts stay in the account) |
constant_contact_list_tags | Tags of the account with tag_id, name, tag_source and, with include_count, the number of tagged contacts |
constant_contact_get_tag | One tag by id, optionally with the number of contacts that carry it |
constant_contact_create_tag | Create a tag |
constant_contact_update_tag | Rename a tag |
constant_contact_add_tags_to_contacts | Put one or more tags on contacts as a background activity |
constant_contact_remove_tags_from_contacts | Take one or more tags off contacts as a background activity (the tags themselves stay) |
constant_contact_list_custom_fields | Custom contact fields of the account with custom_field_id, label, name, type and, for select fields, the choices |
constant_contact_get_custom_field | One custom field by id with its label, name, type, metadata and select choices |
constant_contact_create_custom_field | Create a custom contact field |
constant_contact_list_segments | Segments (saved contact filters) of the account with segment_id, name and dates |
constant_contact_get_segment | One segment with its criteria (segment_criteria as JSON text) |
constant_contact_list_activities | Background activities (bulk list and tag changes, imports, exports, deletes) with their state and percent done, newest first |
constant_contact_get_activity | Status of one background activity: state (initialized, processing, completed, cancelled, failed, timed_out), percent_done, counts and any… |
constant_contact_list_email_campaigns | Email campaigns of the account with campaign_id, name, current_status (Draft, Scheduled, Executing, Done, Error, Removed), type and created… |
constant_contact_get_email_campaign | One email campaign with its status and campaign_activities: each with campaign_activity_id and role (primary_email is the email itself… |
constant_contact_get_email_campaign_activity | One email campaign activity: subject, from and reply-to, preheader, format_type, current_status, the contact_list_ids or segment_ids it… |
constant_contact_create_email_campaign | Create a draft email campaign from your own HTML (custom code email, format_type 5) |
constant_contact_update_email_campaign_activity | Change a draft (or sent, for some fields) primary_email activity: subject, sender, HTML, preheader, footer address and the audience… |
constant_contact_rename_email_campaign | Rename an email campaign (the internal name, not the subject) |
constant_contact_get_email_preview | HTML preview of an email campaign activity, with contact and custom field variables filled from the account owner's data, plus the preview… |
constant_contact_send_test_email | Send a test of an email campaign activity to up to 5 addresses (50 test recipients a day per account) |
constant_contact_get_email_schedule | Scheduled send time of an email campaign activity; an empty array when it is not scheduled |
constant_contact_schedule_email_campaign_activity | Send an email campaign activity to its lists or segment, now (scheduled_date "0") or at a time |
constant_contact_unschedule_email_campaign_activity | Cancel the schedule of an email campaign activity in SCHEDULED status; it goes back to its previous status (usually DRAFT) |
constant_contact_get_email_send_history | Each time an email campaign activity was sent: date, number of contacts, the lists or segments used, and whether the send completed or… |
constant_contact_list_email_campaign_summaries | Results of sent email campaigns, last sent first: per campaign the unique sends, opens, clicks, forwards, unsubscribes (optouts), bounces… |
constant_contact_get_email_campaign_stats | Stats for one or more email campaigns: counts (sends, opens, clicks, forwards, optouts, bounces, abuse, not opened) and percents (open… |
constant_contact_get_email_campaign_activity_stats | Stats for up to 10 email campaign activities: counts per tracked action and the campaign each belongs to |
constant_contact_get_email_links_report | Links in an email campaign activity with the number of unique contacts who clicked each and the link action. url_id from here filters the… |
constant_contact_get_email_tracking_report | Contacts behind an email campaign activity's numbers, most recent first: who it was sent to, who opened (every open or unique opens), who… |
constant_contact_get_contact_activity_details | What one contact did with your emails and landing pages, newest first: sends, opens, clicks, bounces, unsubscribes, forwards and landing… |
constant_contact_get_contact_activity_summary | The emails sent to one contact in a date range (up to the 200 most recent campaigns) with what the contact did with each: opens, clicks… |
constant_contact_get_contact_open_click_rates | Average open and click rate of one contact over a date range of up to 5 years, with the number of emails counted |
Example prompts
- "How did our last three email campaigns do? Compare opens, clicks, unsubscribes and bounces."
- "Add [email protected] to the Newsletter list with first name Anna. She signed up on our website."
- "Who clicked the pricing link in last week's campaign? List their email addresses."
- "Create a draft campaign from this HTML for the VIP customers list and send a test to me before anything else."
- "Tag everyone on the Webinar October list with webinar-2026 and tell me when the bulk change is done."
FAQ
Where does Gemini CLI look for MCP servers? In ~/.gemini/settings.json for your user, or in .gemini/settings.json inside a project. gemini mcp list shows each server and whether it connects.
Next steps
- Connector landing page
- Connect to Claude
- Connect to ChatGPT
- Connect to Cursor
- Connect to Meta Muse
- Connect to Microsoft Copilot
Was this guide helpful?