Skip to main content
Glama
email-tools.ts7.7 kB
/** * MCP Email Tools for GoHighLevel Integration * Exposes email campaign and template management capabilities to the MCP server */ import { Tool } from '@modelcontextprotocol/sdk/types.js'; import { GHLApiClient } from '../clients/ghl-api-client.js'; import { MCPGetEmailCampaignsParams, MCPCreateEmailTemplateParams, MCPGetEmailTemplatesParams, MCPUpdateEmailTemplateParams, MCPDeleteEmailTemplateParams, GHLEmailCampaign, GHLEmailTemplate } from '../types/ghl-types.js'; /** * Email Tools Class * Implements MCP tools for email campaigns and templates */ export class EmailTools { constructor(private ghlClient: GHLApiClient) {} /** * Get all email tool definitions for MCP server */ getToolDefinitions(): Tool[] { return [ { name: 'get_email_campaigns', description: 'Get a list of email campaigns from GoHighLevel.', inputSchema: { type: 'object', properties: { status: { type: 'string', description: 'Filter campaigns by status.', enum: ['active', 'pause', 'complete', 'cancelled', 'retry', 'draft', 'resend-scheduled'], default: 'active' }, limit: { type: 'number', description: 'Maximum number of campaigns to return.', default: 10 }, offset: { type: 'number', description: 'Number of campaigns to skip for pagination.', default: 0 } } } }, { name: 'create_email_template', description: 'Create a new email template in GoHighLevel.', inputSchema: { type: 'object', properties: { title: { type: 'string', description: 'Title of the new template.' }, html: { type: 'string', description: 'HTML content of the template.' }, isPlainText: { type: 'boolean', description: 'Whether the template is plain text.', default: false } }, required: ['title', 'html'] } }, { name: 'get_email_templates', description: 'Get a list of email templates from GoHighLevel.', inputSchema: { type: 'object', properties: { limit: { type: 'number', description: 'Maximum number of templates to return.', default: 10 }, offset: { type: 'number', description: 'Number of templates to skip for pagination.', default: 0 } } } }, { name: 'update_email_template', description: 'Update an existing email template in GoHighLevel.', inputSchema: { type: 'object', properties: { templateId: { type: 'string', description: 'The ID of the template to update.' }, html: { type: 'string', description: 'The updated HTML content of the template.' }, previewText: { type: 'string', description: 'The updated preview text for the template.' } }, required: ['templateId', 'html'] } }, { name: 'delete_email_template', description: 'Delete an email template from GoHighLevel.', inputSchema: { type: 'object', properties: { templateId: { type: 'string', description: 'The ID of the template to delete.' } }, required: ['templateId'] } } ]; } /** * Execute email tool based on tool name and arguments */ async executeTool(name: string, args: any): Promise<any> { switch (name) { case 'get_email_campaigns': return this.getEmailCampaigns(args as MCPGetEmailCampaignsParams); case 'create_email_template': return this.createEmailTemplate(args as MCPCreateEmailTemplateParams); case 'get_email_templates': return this.getEmailTemplates(args as MCPGetEmailTemplatesParams); case 'update_email_template': return this.updateEmailTemplate(args as MCPUpdateEmailTemplateParams); case 'delete_email_template': return this.deleteEmailTemplate(args as MCPDeleteEmailTemplateParams); default: throw new Error(`Unknown email tool: ${name}`); } } private async getEmailCampaigns(params: MCPGetEmailCampaignsParams): Promise<{ success: boolean; campaigns: GHLEmailCampaign[]; total: number; message: string }> { try { const response = await this.ghlClient.getEmailCampaigns(params); if (!response.success || !response.data) { throw new Error(response.error?.message || 'Failed to get email campaigns.'); } return { success: true, campaigns: response.data.schedules, total: response.data.total, message: `Successfully retrieved ${response.data.schedules.length} email campaigns.` }; } catch (error) { throw new Error(`Failed to get email campaigns: ${error}`); } } private async createEmailTemplate(params: MCPCreateEmailTemplateParams): Promise<{ success: boolean; template: any; message: string }> { try { const response = await this.ghlClient.createEmailTemplate(params); if (!response.success || !response.data) { throw new Error(response.error?.message || 'Failed to create email template.'); } return { success: true, template: response.data, message: `Successfully created email template.` }; } catch (error) { throw new Error(`Failed to create email template: ${error}`); } } private async getEmailTemplates(params: MCPGetEmailTemplatesParams): Promise<{ success: boolean; templates: GHLEmailTemplate[]; message: string }> { try { const response = await this.ghlClient.getEmailTemplates(params); if (!response.success || !response.data) { throw new Error(response.error?.message || 'Failed to get email templates.'); } return { success: true, templates: response.data, message: `Successfully retrieved ${response.data.length} email templates.` }; } catch (error) { throw new Error(`Failed to get email templates: ${error}`); } } private async updateEmailTemplate(params: MCPUpdateEmailTemplateParams): Promise<{ success: boolean; message: string }> { try { const response = await this.ghlClient.updateEmailTemplate(params); if (!response.success) { throw new Error(response.error?.message || 'Failed to update email template.'); } return { success: true, message: 'Successfully updated email template.' }; } catch (error) { throw new Error(`Failed to update email template: ${error}`); } } private async deleteEmailTemplate(params: MCPDeleteEmailTemplateParams): Promise<{ success: boolean; message: string }> { try { const response = await this.ghlClient.deleteEmailTemplate(params); if (!response.success) { throw new Error(response.error?.message || 'Failed to delete email template.'); } return { success: true, message: 'Successfully deleted email template.' }; } catch (error) { throw new Error(`Failed to delete email template: ${error}`); } } }

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/cpretzinger/GoHighLevel-MCP'

If you have feedback or need assistance with the MCP directory API, please join our Discord server