# 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 ```bash npm install -g @mcpengine/constant-contact-server ``` Or use directly with npx: ```bash npx @mcpengine/constant-contact-server ``` ## 🔧 Configuration ### Environment Variables Create a `.env` file in your project root: ```env CONSTANT_CONTACT_API_KEY=your_api_key_here CONSTANT_CONTACT_ACCESS_TOKEN=your_access_token_here ``` ### Getting API Credentials 1. Go to [Constant Contact Developer Portal](https://app.constantcontact.com/pages/dma/portal/) 2. Create a new application 3. Note your API Key 4. Complete OAuth2 flow to get Access Token 5. Store both in your `.env` file ## 🛠️ Available Tools ### Campaign Tools (campaigns-tools.ts) #### `constant-contact-create-campaign` Create a new email campaign. **Parameters:** - `name` (required): Campaign name - `from_name` (required): Sender name - `from_email` (required): Sender email address - `reply_to_email` (required): Reply-to email address - `subject` (required): Email subject line - `html_content` (required): HTML email content - `preheader_text` (optional): Preview text **Example:** ```json { "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": "...", "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 ID - `name` (optional): New campaign name - `from_name` (optional): New sender name - `from_email` (optional): New sender email - `reply_to_email` (optional): New reply-to email - `subject` (optional): New subject line - `html_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 ID - `scheduled_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 ID - `email_addresses` (required): Array of recipient emails - `personal_message` (optional): Custom message for test email #### `constant-contact-clone-campaign` Clone an existing campaign. **Parameters:** - `campaign_id` (required): Source campaign ID - `new_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 address - `first_name` (optional): First name - `last_name` (optional): Last name - `job_title` (optional): Job title - `company_name` (optional): Company name - `phone_number` (optional): Phone number - `list_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 name - `last_name` (optional): Filter by last name - `email` (optional): Filter by email - `list_id` (optional): Filter by list membership - `limit` (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 ID - `email_address` (optional): New email - `first_name` (optional): New first name - `last_name` (optional): New last name - `job_title` (optional): New job title - `company_name` (optional): New company name - `phone_number` (optional): New phone number - `list_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 data - `list_ids` (required): Array of list IDs to add contacts to - `file_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 name - `description` (optional): List description - `favorite` (optional): Mark as favorite (boolean) #### `constant-contact-list-lists` Get all contact lists. **Parameters:** - `limit` (optional): Maximum results - `include_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 ID - `name` (optional): New list name - `description` (optional): New description - `favorite` (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 ID - `contact_ids` (required): Array of contact IDs #### `constant-contact-remove-contacts-from-list` Remove contacts from a list. **Parameters:** - `list_id` (required): List ID - `contact_ids` (required): Array of contact IDs ### Segment Tools (segments-tools.ts) #### `constant-contact-create-segment` Create a dynamic audience segment. **Parameters:** - `name` (required): Segment name - `filter_criteria` (required): JSON filter criteria object - `description` (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 ID - `name` (optional): New segment name - `filter_criteria` (optional): Updated filter criteria - `description` (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 name - `description` (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 ID - `name` (optional): New tag name - `description` (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 ID - `contact_ids` (required): Array of contact IDs #### `constant-contact-untag-contacts` Remove tags from contacts. **Parameters:** - `tag_id` (required): Tag ID - `contact_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 type - `limit` (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 name - `html_content` (required): HTML content - `description` (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 ID - `name` (optional): New page name - `html_content` (optional): Updated HTML - `status` (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 ID - `bounce_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 content - `platforms` (required): Array of platforms (FACEBOOK, TWITTER, LINKEDIN) - `scheduled_date` (required): ISO 8601 timestamp - `image_url` (optional): Image URL #### `constant-contact-list-social-posts` List scheduled and published social posts. **Parameters:** - `status` (optional): Filter by status - `limit` (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` ```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 - [Constant Contact API Documentation](https://developer.constantcontact.com/) - [MCP Protocol Specification](https://modelcontextprotocol.io/) - [MCP Engine Repository](https://github.com/BusyBee3333/mcpengine) ## 🆘 Support For issues and questions: - GitHub Issues: [mcpengine repository](https://github.com/BusyBee3333/mcpengine/issues) - API Issues: [Constant Contact Support](https://developer.constantcontact.com/support) --- **Built with ❤️ by MCP Engine**