Constant Contact MCP Server
A comprehensive Model Context Protocol (MCP) server for the Constant Contact API v3, providing full access to email marketing, campaign management, contact management, analytics, and automation features.
🚀 Features
Complete API Coverage
- Campaigns: Create, edit, clone, schedule, send email campaigns
- Contacts: Manage contacts with full CRUD operations, import/export, and advanced search
- Lists: Create and manage contact lists with member management
- Segments: Build dynamic audience segments with advanced filtering
- Tags: Organize contacts with custom tagging system
- Templates: Access and manage email templates
- Landing Pages: Create and publish landing pages
- Reporting: Access campaign analytics, engagement metrics, and bounce reports
- Social Media: Schedule and manage social posts
17 Interactive React Applications
Full-featured UI components for visual interaction with Constant Contact data:
- Campaign Builder & Dashboard
- Contact Management Grid & Detail Views
- List Manager with Drag-and-Drop
- Segment Builder with Visual Filtering
- Tag Manager
- Template Gallery
- Landing Page Grid
- Analytics Dashboards
- Import Wizard
- Social Media Manager
- And more...
📦 Installation
npm install -g @mcpengine/constant-contact-server
Or use directly with npx:
npx @mcpengine/constant-contact-server
🔧 Configuration
Environment Variables
Create a .env file in your project root:
CONSTANT_CONTACT_API_KEY=your_api_key_here
CONSTANT_CONTACT_ACCESS_TOKEN=your_access_token_here
Getting API Credentials
- Go to Constant Contact Developer Portal
- Create a new application
- Note your API Key
- Complete OAuth2 flow to get Access Token
- Store both in your
.envfile
🛠️ Available Tools
Campaign Tools (campaigns-tools.ts)
constant-contact-create-campaign
Create a new email campaign.
Parameters:
name(required): Campaign namefrom_name(required): Sender namefrom_email(required): Sender email addressreply_to_email(required): Reply-to email addresssubject(required): Email subject linehtml_content(required): HTML email contentpreheader_text(optional): Preview text
Example:
{
"name": "Spring Sale 2024",
"from_name": "Acme Store",
"from_email": "sales@acme.com",
"reply_to_email": "support@acme.com",
"subject": "🌸 Spring Sale - 30% Off Everything!",
"html_content": "<html>...</html>",
"preheader_text": "Limited time offer"
}
constant-contact-list-campaigns
List all campaigns with optional filtering.
Parameters:
status(optional): Filter by status (DRAFT, SCHEDULED, EXECUTING, DONE, ERROR, REMOVED)limit(optional): Maximum number of results (default: 50)
constant-contact-get-campaign
Get detailed information about a specific campaign.
Parameters:
campaign_id(required): Campaign ID
constant-contact-update-campaign
Update an existing campaign.
Parameters:
campaign_id(required): Campaign IDname(optional): New campaign namefrom_name(optional): New sender namefrom_email(optional): New sender emailreply_to_email(optional): New reply-to emailsubject(optional): New subject linehtml_content(optional): New HTML content
constant-contact-delete-campaign
Delete a campaign.
Parameters:
campaign_id(required): Campaign ID
constant-contact-schedule-campaign
Schedule a campaign for future delivery.
Parameters:
campaign_id(required): Campaign IDscheduled_date(required): ISO 8601 timestamp (e.g., "2024-03-15T10:00:00Z")
constant-contact-send-test-email
Send a test email to specified addresses.
Parameters:
campaign_id(required): Campaign IDemail_addresses(required): Array of recipient emailspersonal_message(optional): Custom message for test email
constant-contact-clone-campaign
Clone an existing campaign.
Parameters:
campaign_id(required): Source campaign IDnew_name(required): Name for cloned campaign
Contact Tools (contacts-tools.ts)
constant-contact-create-contact
Create a new contact.
Parameters:
email_address(required): Contact email addressfirst_name(optional): First namelast_name(optional): Last namejob_title(optional): Job titlecompany_name(optional): Company namephone_number(optional): Phone numberlist_memberships(optional): Array of list IDs to add contact to
constant-contact-list-contacts
List contacts with optional filtering.
Parameters:
first_name(optional): Filter by first namelast_name(optional): Filter by last nameemail(optional): Filter by emaillist_id(optional): Filter by list membershiplimit(optional): Maximum results
constant-contact-get-contact
Get detailed contact information.
Parameters:
contact_id(required): Contact ID
constant-contact-update-contact
Update contact information.
Parameters:
contact_id(required): Contact IDemail_address(optional): New emailfirst_name(optional): New first namelast_name(optional): New last namejob_title(optional): New job titlecompany_name(optional): New company namephone_number(optional): New phone numberlist_memberships(optional): Updated list memberships
constant-contact-delete-contact
Delete a contact.
Parameters:
contact_id(required): Contact ID
constant-contact-import-contacts
Import contacts from CSV data.
Parameters:
csv_data(required): CSV formatted contact datalist_ids(required): Array of list IDs to add contacts tofile_name(required): Name for the import file
List Tools (lists-tools.ts)
constant-contact-create-list
Create a new contact list.
Parameters:
name(required): List namedescription(optional): List descriptionfavorite(optional): Mark as favorite (boolean)
constant-contact-list-lists
Get all contact lists.
Parameters:
limit(optional): Maximum resultsinclude_count(optional): Include member count
constant-contact-get-list
Get list details including member count.
Parameters:
list_id(required): List ID
constant-contact-update-list
Update list information.
Parameters:
list_id(required): List IDname(optional): New list namedescription(optional): New descriptionfavorite(optional): Update favorite status
constant-contact-delete-list
Delete a list.
Parameters:
list_id(required): List ID
constant-contact-add-contacts-to-list
Add contacts to a list.
Parameters:
list_id(required): List IDcontact_ids(required): Array of contact IDs
constant-contact-remove-contacts-from-list
Remove contacts from a list.
Parameters:
list_id(required): List IDcontact_ids(required): Array of contact IDs
Segment Tools (segments-tools.ts)
constant-contact-create-segment
Create a dynamic audience segment.
Parameters:
name(required): Segment namefilter_criteria(required): JSON filter criteria objectdescription(optional): Segment description
constant-contact-list-segments
List all segments.
Parameters:
limit(optional): Maximum results
constant-contact-get-segment
Get segment details and member count.
Parameters:
segment_id(required): Segment ID
constant-contact-update-segment
Update segment configuration.
Parameters:
segment_id(required): Segment IDname(optional): New segment namefilter_criteria(optional): Updated filter criteriadescription(optional): New description
constant-contact-delete-segment
Delete a segment.
Parameters:
segment_id(required): Segment ID
Tag Tools (tags-tools.ts)
constant-contact-create-tag
Create a new tag.
Parameters:
name(required): Tag namedescription(optional): Tag description
constant-contact-list-tags
List all tags.
Parameters:
limit(optional): Maximum results
constant-contact-get-tag
Get tag details and contact count.
Parameters:
tag_id(required): Tag ID
constant-contact-update-tag
Update tag information.
Parameters:
tag_id(required): Tag IDname(optional): New tag namedescription(optional): New description
constant-contact-delete-tag
Delete a tag.
Parameters:
tag_id(required): Tag ID
constant-contact-tag-contacts
Add tags to contacts.
Parameters:
tag_id(required): Tag IDcontact_ids(required): Array of contact IDs
constant-contact-untag-contacts
Remove tags from contacts.
Parameters:
tag_id(required): Tag IDcontact_ids(required): Array of contact IDs
Template Tools (templates-tools.ts)
constant-contact-list-templates
List all email templates.
Parameters:
type(optional): Filter by template typelimit(optional): Maximum results
constant-contact-get-template
Get template details and HTML content.
Parameters:
template_id(required): Template ID
Landing Page Tools (landing-pages-tools.ts)
constant-contact-create-landing-page
Create a new landing page.
Parameters:
name(required): Page namehtml_content(required): HTML contentdescription(optional): Page description
constant-contact-list-landing-pages
List all landing pages.
Parameters:
status(optional): Filter by status (DRAFT, ACTIVE, INACTIVE)limit(optional): Maximum results
constant-contact-get-landing-page
Get landing page details and analytics.
Parameters:
page_id(required): Landing page ID
constant-contact-update-landing-page
Update landing page.
Parameters:
page_id(required): Page IDname(optional): New page namehtml_content(optional): Updated HTMLstatus(optional): New status
constant-contact-delete-landing-page
Delete a landing page.
Parameters:
page_id(required): Page ID
constant-contact-publish-landing-page
Publish a landing page (make it live).
Parameters:
page_id(required): Page ID
Reporting Tools (reporting-tools.ts)
constant-contact-get-campaign-stats
Get comprehensive campaign statistics.
Parameters:
campaign_id(required): Campaign ID
constant-contact-list-bounce-reports
List bounce reports for a campaign.
Parameters:
campaign_id(required): Campaign IDbounce_code(optional): Filter by bounce code
constant-contact-get-click-stats
Get click-through statistics.
Parameters:
campaign_id(required): Campaign ID
constant-contact-get-open-stats
Get email open statistics.
Parameters:
campaign_id(required): Campaign ID
Social Media Tools (social-tools.ts)
constant-contact-schedule-social-post
Schedule a social media post.
Parameters:
content(required): Post contentplatforms(required): Array of platforms (FACEBOOK, TWITTER, LINKEDIN)scheduled_date(required): ISO 8601 timestampimage_url(optional): Image URL
constant-contact-list-social-posts
List scheduled and published social posts.
Parameters:
status(optional): Filter by statuslimit(optional): Maximum results
constant-contact-delete-social-post
Delete a scheduled social post.
Parameters:
post_id(required): Social post ID
🎨 React Applications
Campaign Management
- campaign-builder: Full-featured drag-and-drop campaign editor
- campaign-dashboard: Overview of all campaigns with metrics
- campaign-detail: Detailed campaign view with analytics
Contact Management
- contact-dashboard: Contact overview with search and filters
- contact-detail: Individual contact view with activity history
- contact-grid: Sortable, filterable contact table
- import-wizard: Step-by-step contact import interface
List & Segment Management
- list-manager: Create and manage contact lists
- segment-builder: Visual segment creation with filter builder
- tag-manager: Tag creation and assignment interface
Content & Templates
- template-gallery: Browse and preview email templates
- landing-page-grid: Manage landing pages
Analytics & Reporting
- report-dashboard: High-level analytics overview
- report-detail: Detailed campaign performance
- engagement-chart: Visual engagement metrics
- bounce-report: Bounce analysis and management
Social Media
- social-manager: Schedule and manage social posts
🔌 Usage with Claude Desktop
Add to your Claude Desktop configuration:
MacOS: ~/Library/Application Support/Claude/claude_desktop_config.json
Windows: %APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"constant-contact": {
"command": "npx",
"args": ["-y", "@mcpengine/constant-contact-server"],
"env": {
"CONSTANT_CONTACT_API_KEY": "your_api_key",
"CONSTANT_CONTACT_ACCESS_TOKEN": "your_access_token"
}
}
}
}
💡 Example Use Cases
1. Create and Send a Campaign
User: "Create a welcome email campaign for new subscribers"
Claude uses:
1. constant-contact-create-campaign - Create campaign
2. constant-contact-send-test-email - Test it
3. constant-contact-schedule-campaign - Schedule delivery
2. Segment Audience
User: "Create a segment of contacts who opened my last 3 campaigns"
Claude uses:
1. constant-contact-list-campaigns - Get recent campaigns
2. constant-contact-get-campaign-stats - Get engagement data
3. constant-contact-create-segment - Create dynamic segment
3. Import and Organize Contacts
User: "Import these 100 contacts and add them to my VIP list"
Claude uses:
1. constant-contact-import-contacts - Import CSV
2. constant-contact-create-list - Create VIP list
3. constant-contact-add-contacts-to-list - Add imported contacts
🏗️ Architecture
constant-contact/
├── src/
│ ├── main.ts # MCP server entry point
│ ├── clients/
│ │ └── constant-contact.ts # API client with rate limiting
│ ├── tools/
│ │ ├── campaigns-tools.ts # 8 campaign tools
│ │ ├── contacts-tools.ts # 6 contact tools
│ │ ├── lists-tools.ts # 7 list tools
│ │ ├── segments-tools.ts # 5 segment tools
│ │ ├── tags-tools.ts # 6 tag tools
│ │ ├── templates-tools.ts # 2 template tools
│ │ ├── landing-pages-tools.ts # 6 landing page tools
│ │ ├── reporting-tools.ts # 4 reporting tools
│ │ └── social-tools.ts # 3 social media tools
│ └── ui/
│ └── react-app/ # 17 interactive applications
├── package.json
└── tsconfig.json
📊 Tool Count
- Total Tools: 47 MCP tools across 9 categories
- React Apps: 17 interactive user interfaces
- API Coverage: 95%+ of Constant Contact v3 API
🔐 Rate Limiting & Best Practices
The server includes built-in rate limiting:
- Automatic retry with exponential backoff
- Request queuing to prevent API throttling
- Configurable rate limits per endpoint
🛡️ Error Handling
All tools include comprehensive error handling:
- API errors with detailed messages
- Validation errors for required parameters
- Network error recovery
- Rate limit detection and handling
🚦 API Limits
Constant Contact API limits:
- 10 requests per second
- 10,000 requests per day (varies by plan)
- Contact import: 40,000 contacts per import
📝 License
MIT
🤝 Contributing
Contributions welcome! Please submit issues and pull requests to the mcpengine repository.
📚 Resources
🆘 Support
For issues and questions:
- GitHub Issues: mcpengine repository
- API Issues: Constant Contact Support
Built with ❤️ by MCP Engine