Skip to main content
Glama
bcharleson

Instantly MCP Server

create_lead

Add new leads to email campaigns by providing essential contact information and custom fields for targeted outreach.

Instructions

Create a new lead

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
companyNameNoCompany name
custom_fieldsNoCustom fields as key-value pairs
emailYesLead email address
firstNameNoFirst name
lastNameNoLast name
personalizationNoPersonalization field
websiteNoCompany website

Implementation Reference

  • Core handler function that executes the create_lead tool logic: builds lead data from args and makes POST request to Instantly.ai /leads endpoint.
    async function handleCreateLead(args: any, apiKey: string) {
      console.error('[Instantly MCP] 👤 Executing create_lead...');
    
      // Build lead data with all supported parameters from Instantly.ai API v2
      const leadData: any = {};
    
      // Core lead information
      if (args.campaign) leadData.campaign = args.campaign;
      if (args.email) leadData.email = args.email;
      if (args.first_name) leadData.first_name = args.first_name;
      if (args.last_name) leadData.last_name = args.last_name;
      if (args.company_name) leadData.company_name = args.company_name;
      if (args.phone) leadData.phone = args.phone;
      if (args.website) leadData.website = args.website;
      if (args.personalization) leadData.personalization = args.personalization;
    
      // Advanced parameters
      if (args.lt_interest_status !== undefined) leadData.lt_interest_status = args.lt_interest_status;
      if (args.pl_value_lead) leadData.pl_value_lead = args.pl_value_lead;
      if (args.list_id) leadData.list_id = args.list_id;
      if (args.assigned_to) leadData.assigned_to = args.assigned_to;
    
      // Skip conditions
      if (args.skip_if_in_workspace !== undefined) leadData.skip_if_in_workspace = args.skip_if_in_workspace;
      if (args.skip_if_in_campaign !== undefined) leadData.skip_if_in_campaign = args.skip_if_in_campaign;
      if (args.skip_if_in_list !== undefined) leadData.skip_if_in_list = args.skip_if_in_list;
    
      // Verification and blocklist
      if (args.blocklist_id) leadData.blocklist_id = args.blocklist_id;
      if (args.verify_leads_for_lead_finder !== undefined) leadData.verify_leads_for_lead_finder = args.verify_leads_for_lead_finder;
      if (args.verify_leads_on_import !== undefined) leadData.verify_leads_on_import = args.verify_leads_on_import;
    
      // Custom variables
      if (args.custom_variables) leadData.custom_variables = args.custom_variables;
    
      console.error(`[Instantly MCP] 📤 Creating lead with data: ${JSON.stringify(leadData, null, 2)}`);
    
      const createResult = await makeInstantlyRequest('/leads', { method: 'POST', body: leadData }, apiKey);
    
      return {
        content: [
          {
            type: 'text',
            text: JSON.stringify({
              success: true,
              lead: createResult,
              message: 'Lead created successfully'
            }, null, 2)
          }
        ]
      };
    }
  • MCP tool registration/definition including name, description, annotations, and inputSchema for create_lead.
    {
      name: 'create_lead',
      title: 'Create Lead',
      description: 'Create lead with custom variables. Use skip_if_in_campaign to prevent duplicates.',
      annotations: { destructiveHint: false },
      inputSchema: {
        type: 'object',
        properties: {
          campaign: { type: 'string', description: 'Campaign UUID' },
          email: { type: 'string', description: 'Required' },
          first_name: { type: 'string' },
          last_name: { type: 'string' },
          company_name: { type: 'string' },
          phone: { type: 'string' },
          website: { type: 'string' },
          personalization: { type: 'string' },
          lt_interest_status: { type: 'number', description: '-3 to 4' },
          pl_value_lead: { type: 'string' },
          list_id: { type: 'string' },
          assigned_to: { type: 'string' },
          skip_if_in_workspace: { type: 'boolean' },
          skip_if_in_campaign: { type: 'boolean', description: 'Recommended' },
          skip_if_in_list: { type: 'boolean' },
          blocklist_id: { type: 'string' },
          verify_leads_on_import: { type: 'boolean' },
          custom_variables: { type: 'object', description: 'Match campaign field names' }
        }
      }
    },
  • Zod schema for validating create_lead input parameters, matching the tool's inputSchema.
    export const CreateLeadSchema = z.object({
      // Core lead information
      campaign: z.string().optional(),
      email: z.string().email().optional(),
      first_name: z.string().optional(),
      last_name: z.string().optional(),
      company_name: z.string().optional(),
      phone: z.string().optional(),
      website: z.string().url().optional(),
      personalization: z.string().optional(),
    
      // Advanced parameters
      lt_interest_status: z.number().int().min(-3).max(4).optional(),
      pl_value_lead: z.string().optional(),
      list_id: z.string().optional(),
      assigned_to: z.string().optional(),
    
      // Skip conditions
      skip_if_in_workspace: z.boolean().optional(),
      skip_if_in_campaign: z.boolean().optional(),
      skip_if_in_list: z.boolean().optional(),
    
      // Verification and blocklist
      blocklist_id: z.string().optional(),
      verify_leads_for_lead_finder: z.boolean().optional(),
      verify_leads_on_import: z.boolean().optional(),
    
      // Custom variables
      custom_variables: z.record(z.string(), z.any()).optional()
    });
  • Validation wrapper function that applies CreateLeadSchema to input args for create_lead tool.
    export function validateCreateLeadData(args: unknown): z.infer<typeof CreateLeadSchema> {
      return validateWithSchema(CreateLeadSchema, args, 'create_lead');
    }
  • Dispatch case in handleLeadTool switch statement that routes create_lead calls to the handler function.
    case 'create_lead':
      return handleCreateLead(args, apiKey);

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/bcharleson/Instantly-MCP'

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