cakemail-mcp-server
Version:
Enterprise MCP server for Cakemail API integration with Claude AI - includes comprehensive template management, list management, sub-account management, BEEeditor visual email design, and advanced analytics
432 lines • 15 kB
JavaScript
/**
* Cakemail Event Taxonomy
*
* Comprehensive classification of email marketing and transactional events
* for better AI understanding and filtering capabilities.
*/
/**
* Complete event taxonomy for Cakemail platform
*/
export const CAKEMAIL_EVENT_TAXONOMY = {
categories: [
{
name: "ENGAGEMENT",
description: "User interaction with email content - indicates campaign effectiveness",
events: ["click", "clickthru", "open", "view", "forward", "share"],
priority: "high",
actionRequired: false
},
{
name: "DELIVERY_PIPELINE",
description: "Email delivery lifecycle events - system processing stages",
events: ["generating", "in_queue", "schedule", "sent", "received", "skipped"],
priority: "medium",
actionRequired: false
},
{
name: "BOUNCES",
description: "Delivery failures requiring list maintenance and sender reputation management",
events: ["bounce", "bounce_hb", "bounce_sb", "bounce_df", "bounce_fm", "bounce_mb", "bounce_tr", "bounce_cr", "bounce_ac", "bounce_ar"],
priority: "high",
actionRequired: true
},
{
name: "LIST_MANAGEMENT",
description: "Subscription and preference changes affecting list composition",
events: ["subscribe", "unsubscribe", "global_unsubscribe", "unsub_reason"],
priority: "high",
actionRequired: true
},
{
name: "DELIVERABILITY_ISSUES",
description: "Spam and reputation issues requiring immediate attention",
events: ["spam", "auto_responder"],
priority: "high",
actionRequired: true
},
{
name: "ADMINISTRATIVE",
description: "System and data management events",
events: ["update", "other"],
priority: "low",
actionRequired: false
}
],
eventTypes: [
// Engagement Events
{
code: "click",
name: "Link Click",
category: "ENGAGEMENT",
description: "Recipient clicked a link in the email (includes clickthru)",
severity: "info"
},
{
code: "clickthru",
name: "Click Through",
category: "ENGAGEMENT",
description: "Same as click - legacy naming (consolidate to 'click')",
severity: "info"
},
{
code: "open",
name: "Email Open",
category: "ENGAGEMENT",
description: "Recipient opened the email",
severity: "info"
},
{
code: "view",
name: "Email View",
category: "ENGAGEMENT",
description: "Email was viewed (may differ from open tracking)",
severity: "info"
},
{
code: "forward",
name: "Email Forward",
category: "ENGAGEMENT",
description: "Email was forwarded to others",
severity: "info"
},
{
code: "share",
name: "Email Share",
category: "ENGAGEMENT",
description: "Email was shared via social or other channels",
severity: "info"
},
// Delivery Pipeline Events
{
code: "generating",
name: "Content Generation",
category: "DELIVERY_PIPELINE",
description: "Email content is being generated",
severity: "info"
},
{
code: "in_queue",
name: "Queued for Delivery",
category: "DELIVERY_PIPELINE",
description: "Email is waiting in delivery queue",
severity: "info"
},
{
code: "schedule",
name: "Scheduled",
category: "DELIVERY_PIPELINE",
description: "Email scheduled for future delivery",
severity: "info"
},
{
code: "sent",
name: "Successfully Sent",
category: "DELIVERY_PIPELINE",
description: "Email successfully sent to recipient server",
severity: "info"
},
{
code: "received",
name: "Delivery Confirmed",
category: "DELIVERY_PIPELINE",
description: "Delivery confirmation received",
severity: "info"
},
{
code: "skipped",
name: "Delivery Skipped",
category: "DELIVERY_PIPELINE",
description: "Email skipped due to suppression list or other filters",
severity: "warning"
},
// Bounce Events
{
code: "bounce",
name: "General Bounce",
category: "BOUNCES",
description: "Email bounced - general category",
severity: "warning",
permanent: false,
retryable: true
},
{
code: "bounce_hb",
name: "Hard Bounce",
category: "BOUNCES",
description: "Permanent delivery failure - invalid address or domain",
severity: "critical",
permanent: true,
retryable: false
},
{
code: "bounce_sb",
name: "Soft Bounce",
category: "BOUNCES",
description: "Temporary delivery failure - may succeed later",
severity: "warning",
permanent: false,
retryable: true
},
{
code: "bounce_df",
name: "DNS Failure",
category: "BOUNCES",
description: "DNS resolution problem - temporary issue",
severity: "warning",
permanent: false,
retryable: true
},
{
code: "bounce_fm",
name: "Mailbox Full",
category: "BOUNCES",
description: "Recipient's mailbox is full - temporary issue",
severity: "warning",
permanent: false,
retryable: true
},
{
code: "bounce_mb",
name: "Email Blocked",
category: "BOUNCES",
description: "Server blocking emails from sender - reputation issue",
severity: "critical",
permanent: false,
retryable: false
},
{
code: "bounce_tr",
name: "Transient Bounce",
category: "BOUNCES",
description: "Temporary failure - system still trying delivery",
severity: "info",
permanent: false,
retryable: true
},
{
code: "bounce_cr",
name: "Challenge/Response",
category: "BOUNCES",
description: "Anti-spam system requires sender verification",
severity: "warning",
permanent: false,
retryable: false
},
{
code: "bounce_ac",
name: "Address Change",
category: "BOUNCES",
description: "Recipient moved - automated address change notification",
severity: "info",
permanent: true,
retryable: false
},
{
code: "bounce_ar",
name: "Auto Reply",
category: "BOUNCES",
description: "Out-of-office or automated response - not a true bounce",
severity: "info",
permanent: false,
retryable: true
},
// List Management Events
{
code: "subscribe",
name: "Subscription",
category: "LIST_MANAGEMENT",
description: "User opted into mailing list",
severity: "info"
},
{
code: "unsubscribe",
name: "Unsubscribe",
category: "LIST_MANAGEMENT",
description: "User opted out of specific mailing list",
severity: "warning"
},
{
code: "global_unsubscribe",
name: "Global Unsubscribe",
category: "LIST_MANAGEMENT",
description: "User opted out of all communications",
severity: "critical"
},
{
code: "unsub_reason",
name: "Unsubscribe Reason",
category: "LIST_MANAGEMENT",
description: "Reason code for unsubscribe action",
severity: "info"
},
// Deliverability Issues
{
code: "spam",
name: "Spam Complaint",
category: "DELIVERABILITY_ISSUES",
description: "Recipient marked email as spam - damages sender reputation",
severity: "critical",
permanent: true,
retryable: false
},
{
code: "auto_responder",
name: "Auto Responder",
category: "DELIVERABILITY_ISSUES",
description: "Automated system response received",
severity: "info"
},
// Administrative
{
code: "update",
name: "Record Update",
category: "ADMINISTRATIVE",
description: "Contact or campaign data updated",
severity: "info"
},
{
code: "other",
name: "Other Event",
category: "ADMINISTRATIVE",
description: "Miscellaneous events not covered by other categories",
severity: "info"
}
],
filterHelpers: [
{
name: "engagement_events",
description: "Get all user engagement activities (clicks, opens, views)",
filterQuery: "type==click;type==open;type==view;type==forward;type==share",
useCase: "Analyze campaign engagement and user interaction patterns"
},
{
name: "delivery_issues",
description: "Get all delivery problems requiring attention (hard bounces, blocks, spam)",
filterQuery: "type==bounce_hb;type==bounce_mb;type==spam",
useCase: "Identify list cleanup needs and reputation issues"
},
{
name: "temporary_failures",
description: "Get retryable delivery failures (soft bounces, DNS issues, full mailboxes)",
filterQuery: "type==bounce_sb;type==bounce_df;type==bounce_fm;type==bounce_tr",
useCase: "Monitor temporary issues that may resolve automatically"
},
{
name: "list_changes",
description: "Get subscription and unsubscribe activities",
filterQuery: "type==subscribe;type==unsubscribe;type==global_unsubscribe",
useCase: "Track list growth and churn patterns"
},
{
name: "reputation_threats",
description: "Get events that damage sender reputation",
filterQuery: "type==spam;type==bounce_hb;type==bounce_mb",
useCase: "Monitor and respond to reputation-damaging events"
},
{
name: "delivery_pipeline",
description: "Get email processing and delivery status events",
filterQuery: "type==generating;type==in_queue;type==sent;type==received",
useCase: "Track email delivery pipeline and processing status"
},
{
name: "clicks_only",
description: "Get only click-through events",
filterQuery: "type==click",
useCase: "Analyze click performance and popular content"
},
{
name: "opens_only",
description: "Get only email open events",
filterQuery: "type==open",
useCase: "Analyze open rates and engagement timing"
},
{
name: "all_bounces",
description: "Get all bounce types for comprehensive bounce analysis",
filterQuery: "type==bounce;type==bounce_hb;type==bounce_sb;type==bounce_df;type==bounce_fm;type==bounce_mb;type==bounce_tr;type==bounce_cr;type==bounce_ac;type==bounce_ar",
useCase: "Complete bounce analysis and categorization"
},
{
name: "critical_events",
description: "Get events requiring immediate attention",
filterQuery: "type==spam;type==bounce_hb;type==bounce_mb;type==global_unsubscribe",
useCase: "Priority monitoring for urgent issues"
}
]
};
/**
* Helper functions for working with event taxonomy
*/
export class EventTaxonomyHelper {
/**
* Get event category for a given event type
*/
static getEventCategory(eventType) {
const event = CAKEMAIL_EVENT_TAXONOMY.eventTypes.find(e => e.code === eventType);
if (!event)
return undefined;
return CAKEMAIL_EVENT_TAXONOMY.categories.find(c => c.name === event.category);
}
/**
* Get event details by code
*/
static getEventDetails(eventType) {
return CAKEMAIL_EVENT_TAXONOMY.eventTypes.find(e => e.code === eventType);
}
/**
* Get filter helper by name
*/
static getFilterHelper(name) {
return CAKEMAIL_EVENT_TAXONOMY.filterHelpers.find(f => f.name === name);
}
/**
* Get all events in a category
*/
static getEventsInCategory(categoryName) {
const category = CAKEMAIL_EVENT_TAXONOMY.categories.find(c => c.name === categoryName);
return category ? category.events : [];
}
/**
* Generate smart filter suggestions based on common use cases
*/
static getSmartFilterSuggestions() {
return CAKEMAIL_EVENT_TAXONOMY.filterHelpers.map(helper => ({
name: helper.name,
description: helper.description,
filter: helper.filterQuery
}));
}
/**
* Validate if an event type exists in our taxonomy
*/
static isValidEventType(eventType) {
return CAKEMAIL_EVENT_TAXONOMY.eventTypes.some(e => e.code === eventType);
}
/**
* Get events that require immediate action
*/
static getCriticalEvents() {
return CAKEMAIL_EVENT_TAXONOMY.eventTypes
.filter(e => e.severity === 'critical')
.map(e => e.code);
}
/**
* Get events that are retryable
*/
static getRetryableEvents() {
return CAKEMAIL_EVENT_TAXONOMY.eventTypes
.filter(e => e.retryable === true)
.map(e => e.code);
}
/**
* Get permanent failure events (for list cleanup)
*/
static getPermanentFailureEvents() {
return CAKEMAIL_EVENT_TAXONOMY.eventTypes
.filter(e => e.permanent === true && e.severity === 'critical')
.map(e => e.code);
}
}
export default CAKEMAIL_EVENT_TAXONOMY;
//# sourceMappingURL=event-taxonomy.js.map