smartlead-mcp-by-leadmagic
Version:
💜 The Premier Model Context Protocol Server for SmartLead's Cold Email Automation Platform - Complete API coverage with 116+ tools for campaign management, lead tracking, smart delivery, and analytics. Beautiful purple-gradient installer, zero-config set
276 lines • 14.6 kB
JavaScript
/**
* SmartLead MCP Server - Lead Tools
*
* MCP tools for lead management operations.
*
* @author LeadMagic Team
* @version 1.5.0
*/
import { AddLeadsToCampaignRequestSchema, AddLeadToGlobalBlocklistRequestSchema, DeleteLeadByCampaignRequestSchema, FetchAllLeadsFromAccountRequestSchema, FetchLeadByEmailRequestSchema, FetchLeadCategoriesRequestSchema, FetchLeadMessageHistoryRequestSchema, FetchLeadsFromGlobalBlocklistRequestSchema, ForwardReplyRequestSchema, ListLeadsByCampaignRequestSchema, PauseLeadByCampaignRequestSchema, ReplyToLeadFromMasterInboxRequestSchema, ResumeLeadByCampaignRequestSchema, UnsubscribeLeadFromAllCampaignsRequestSchema, UnsubscribeLeadFromCampaignRequestSchema, UpdateLeadByIdRequestSchema, UpdateLeadCategoryRequestSchema, } from '../types.js';
/**
* Register all lead management tools
*/
export function registerLeadTools(server, client, formatSuccessResponse, handleError) {
// List Leads by Campaign Tool
server.registerTool('smartlead_list_leads_by_campaign', {
title: 'List Leads by Campaign',
description: 'Retrieve all leads associated with a specific campaign, with optional filtering and pagination.',
inputSchema: ListLeadsByCampaignRequestSchema.shape,
}, async (params) => {
try {
const validatedParams = ListLeadsByCampaignRequestSchema.parse(params);
const { campaign_id, ...queryParams } = validatedParams;
const result = await client.listLeadsByCampaign(campaign_id, queryParams);
return formatSuccessResponse('Leads retrieved successfully', result, `Found ${result.data?.leads?.length || 0} leads in campaign ID: ${campaign_id}`);
}
catch (error) {
return handleError(error);
}
});
// Fetch Lead Categories Tool
server.registerTool('smartlead_fetch_lead_categories', {
title: 'Fetch Lead Categories',
description: 'Retrieve all available lead categories for classification and filtering purposes.',
inputSchema: FetchLeadCategoriesRequestSchema.shape,
}, async (params) => {
try {
const validatedParams = FetchLeadCategoriesRequestSchema.parse(params);
const result = await client.fetchLeadCategories();
return formatSuccessResponse('Lead categories retrieved successfully', result, `Found ${result.data?.categories?.length || 0} lead categories`);
}
catch (error) {
return handleError(error);
}
});
// Fetch Lead by Email Tool
server.registerTool('smartlead_fetch_lead_by_email', {
title: 'Fetch Lead by Email',
description: 'Find and retrieve lead information using their email address.',
inputSchema: FetchLeadByEmailRequestSchema.shape,
}, async (params) => {
try {
const validatedParams = FetchLeadByEmailRequestSchema.parse(params);
const result = await client.fetchLeadByEmail(validatedParams.email);
return formatSuccessResponse('Lead retrieved successfully by email', result, `Found lead: ${validatedParams.email}`);
}
catch (error) {
return handleError(error);
}
});
// Add Leads to Campaign Tool
server.registerTool('smartlead_add_leads_to_campaign', {
title: 'Add Leads to Campaign',
description: 'Add one or more leads to a specific campaign with validation and duplicate checking.',
inputSchema: AddLeadsToCampaignRequestSchema.shape,
}, async (params) => {
try {
const validatedParams = AddLeadsToCampaignRequestSchema.parse(params);
const { campaign_id, leads } = validatedParams;
const result = await client.addLeadsToCampaign(campaign_id, leads);
return formatSuccessResponse('Leads added to campaign successfully', result, `Added ${leads.length} leads to campaign ID: ${campaign_id}`);
}
catch (error) {
return handleError(error);
}
});
// Resume Lead by Campaign Tool
server.registerTool('smartlead_resume_lead_by_campaign', {
title: 'Resume Lead in Campaign',
description: 'Resume email sending to a paused lead within a specific campaign.',
inputSchema: ResumeLeadByCampaignRequestSchema.shape,
}, async (params) => {
try {
const validatedParams = ResumeLeadByCampaignRequestSchema.parse(params);
const result = await client.resumeLeadByCampaign(validatedParams.campaign_id, validatedParams.lead_id);
return formatSuccessResponse('Lead resumed successfully', result, `Lead ID ${validatedParams.lead_id} resumed in campaign ID: ${validatedParams.campaign_id}`);
}
catch (error) {
return handleError(error);
}
});
// Pause Lead by Campaign Tool
server.registerTool('smartlead_pause_lead_by_campaign', {
title: 'Pause Lead in Campaign',
description: 'Pause email sending to a lead within a specific campaign without removing them.',
inputSchema: PauseLeadByCampaignRequestSchema.shape,
}, async (params) => {
try {
const validatedParams = PauseLeadByCampaignRequestSchema.parse(params);
const result = await client.pauseLeadByCampaign(validatedParams.campaign_id, validatedParams.lead_id);
return formatSuccessResponse('Lead paused successfully', result, `Lead ID ${validatedParams.lead_id} paused in campaign ID: ${validatedParams.campaign_id}`);
}
catch (error) {
return handleError(error);
}
});
// Delete Lead by Campaign Tool
server.registerTool('smartlead_delete_lead_by_campaign', {
title: 'Delete Lead from Campaign',
description: 'Remove a lead from a specific campaign permanently.',
inputSchema: DeleteLeadByCampaignRequestSchema.shape,
}, async (params) => {
try {
const validatedParams = DeleteLeadByCampaignRequestSchema.parse(params);
const result = await client.deleteLeadByCampaign(validatedParams.campaign_id, validatedParams.lead_id);
return formatSuccessResponse('Lead deleted from campaign successfully', result, `Lead ID ${validatedParams.lead_id} removed from campaign ID: ${validatedParams.campaign_id}`);
}
catch (error) {
return handleError(error);
}
});
// Unsubscribe Lead from Campaign Tool
server.registerTool('smartlead_unsubscribe_lead_from_campaign', {
title: 'Unsubscribe Lead from Campaign',
description: 'Unsubscribe a lead from a specific campaign, stopping all future emails.',
inputSchema: UnsubscribeLeadFromCampaignRequestSchema.shape,
}, async (params) => {
try {
const validatedParams = UnsubscribeLeadFromCampaignRequestSchema.parse(params);
const result = await client.unsubscribeLeadFromCampaign(validatedParams.campaign_id, validatedParams.lead_id);
return formatSuccessResponse('Lead unsubscribed from campaign successfully', result, `Lead ID ${validatedParams.lead_id} unsubscribed from campaign ID: ${validatedParams.campaign_id}`);
}
catch (error) {
return handleError(error);
}
});
// Unsubscribe Lead from All Campaigns Tool
server.registerTool('smartlead_unsubscribe_lead_from_all_campaigns', {
title: 'Unsubscribe Lead from All Campaigns',
description: 'Unsubscribe a lead from all campaigns across the entire account.',
inputSchema: UnsubscribeLeadFromAllCampaignsRequestSchema.shape,
}, async (params) => {
try {
const validatedParams = UnsubscribeLeadFromAllCampaignsRequestSchema.parse(params);
const result = await client.unsubscribeLeadFromAllCampaigns(validatedParams.lead_id);
return formatSuccessResponse('Lead unsubscribed from all campaigns successfully', result, `Lead ID ${validatedParams.lead_id} unsubscribed from all campaigns`);
}
catch (error) {
return handleError(error);
}
});
// Add Lead to Global Blocklist Tool
server.registerTool('smartlead_add_lead_to_global_blocklist', {
title: 'Add Lead to Global Blocklist',
description: 'Add a lead or domain to the global blocklist to prevent future contact.',
inputSchema: AddLeadToGlobalBlocklistRequestSchema.shape,
}, async (params) => {
try {
const validatedParams = AddLeadToGlobalBlocklistRequestSchema.parse(params);
const result = await client.addLeadToGlobalBlocklist(validatedParams.email);
return formatSuccessResponse('Lead added to global blocklist successfully', result, `Email ${validatedParams.email} added to global blocklist`);
}
catch (error) {
return handleError(error);
}
});
// Fetch All Leads from Account Tool
server.registerTool('smartlead_fetch_all_leads_from_account', {
title: 'Fetch All Leads from Account',
description: 'Retrieve all leads from the entire account with optional filtering and pagination.',
inputSchema: FetchAllLeadsFromAccountRequestSchema.shape,
}, async (params) => {
try {
const validatedParams = FetchAllLeadsFromAccountRequestSchema.parse(params);
const result = await client.fetchAllLeadsFromAccount(validatedParams);
return formatSuccessResponse('All leads retrieved successfully', result, `Found ${result.data?.leads?.length || 0} leads in account`);
}
catch (error) {
return handleError(error);
}
});
// Fetch Leads from Global Blocklist Tool
server.registerTool('smartlead_fetch_leads_from_global_blocklist', {
title: 'Fetch Leads from Global Blocklist',
description: 'Retrieve all leads and domains currently on the global blocklist.',
inputSchema: FetchLeadsFromGlobalBlocklistRequestSchema.shape,
}, async (params) => {
try {
const validatedParams = FetchLeadsFromGlobalBlocklistRequestSchema.parse(params);
const result = await client.fetchLeadsFromGlobalBlocklist(validatedParams);
return formatSuccessResponse('Global blocklist retrieved successfully', result, `Found ${result.data?.blocked_leads?.length || 0} entries in global blocklist`);
}
catch (error) {
return handleError(error);
}
});
// Update Lead by ID Tool
server.registerTool('smartlead_update_lead_by_id', {
title: 'Update Lead by ID',
description: 'Update lead information using the lead ID, including contact details and custom fields.',
inputSchema: UpdateLeadByIdRequestSchema.shape,
}, async (params) => {
try {
const validatedParams = UpdateLeadByIdRequestSchema.parse(params);
const result = await client.updateLeadById(validatedParams.lead_id, validatedParams);
return formatSuccessResponse('Lead updated successfully', result);
}
catch (error) {
return handleError(error);
}
});
// Update Lead Category Tool
server.registerTool('smartlead_update_lead_category', {
title: 'Update Lead Category',
description: 'Update the category classification of a lead within a specific campaign.',
inputSchema: UpdateLeadCategoryRequestSchema.shape,
}, async (params) => {
try {
const validatedParams = UpdateLeadCategoryRequestSchema.parse(params);
const result = await client.updateLeadCategory(validatedParams.campaign_id, validatedParams.lead_id, validatedParams.category);
return formatSuccessResponse('Lead category updated successfully', result, `Lead ID ${validatedParams.lead_id} category changed to: ${validatedParams.category}`);
}
catch (error) {
return handleError(error);
}
});
// Fetch Lead Message History Tool
server.registerTool('smartlead_fetch_lead_message_history', {
title: 'Fetch Lead Message History',
description: 'Retrieve the complete message history for a lead within a specific campaign.',
inputSchema: FetchLeadMessageHistoryRequestSchema.shape,
}, async (params) => {
try {
const validatedParams = FetchLeadMessageHistoryRequestSchema.parse(params);
const result = await client.fetchLeadMessageHistory(validatedParams.campaign_id, validatedParams.lead_id);
return formatSuccessResponse('Lead message history retrieved successfully', result, `Retrieved message history for lead ID ${validatedParams.lead_id} in campaign ID: ${validatedParams.campaign_id}`);
}
catch (error) {
return handleError(error);
}
});
// Reply to Lead from Master Inbox Tool
server.registerTool('smartlead_reply_to_lead_from_master_inbox', {
title: 'Reply to Lead from Master Inbox',
description: 'Send a reply to a lead from the master inbox with tracking and personalization.',
inputSchema: ReplyToLeadFromMasterInboxRequestSchema.shape,
}, async (params) => {
try {
const validatedParams = ReplyToLeadFromMasterInboxRequestSchema.parse(params);
const result = await client.replyToLeadFromMasterInbox(validatedParams.campaign_id, validatedParams.lead_id, {
subject: validatedParams.subject || '',
message: validatedParams.message,
});
return formatSuccessResponse('Successfully replied to lead', result);
}
catch (error) {
return handleError(error);
}
});
// Forward Reply Tool
server.registerTool('smartlead_forward_reply', {
title: 'Forward Reply',
description: 'Forward a lead reply to another email address or team member.',
inputSchema: ForwardReplyRequestSchema.shape,
}, async (params) => {
try {
const validatedParams = ForwardReplyRequestSchema.parse(params);
const { campaign_id, lead_id, ...forwardData } = validatedParams;
const result = await client.forwardReply(campaign_id, lead_id, forwardData);
return formatSuccessResponse('Reply forwarded successfully', result, `Reply from lead ID ${lead_id} forwarded successfully`);
}
catch (error) {
return handleError(error);
}
});
}
//# sourceMappingURL=leads.js.map