create_profile
Create customer profiles in Klaviyo by entering email, phone number, external ID, first name, last name, and additional properties via the MCP server for targeted marketing automation.
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| No | Email address of the profile | ||
| external_id | No | External ID for the profile | |
| first_name | No | First name of the profile | |
| last_name | No | Last name of the profile | |
| phone_number | No | Phone number of the profile | |
| properties | No | Additional properties for the profile |
Implementation Reference
- src/tools/profiles.js:62-95 (handler)The handler function constructs profile attributes from input parameters, builds the Klaviyo API payload, calls klaviyoClient.post to create the profile, and returns the result or error.async (params) => { try { const attributes = {}; // Add all provided fields to attributes for (const [key, value] of Object.entries(params)) { if (value !== undefined && key !== 'properties') { attributes[key] = value; } } // Add properties if provided if (params.properties) { attributes.properties = params.properties; } const payload = { data: { type: "profile", attributes } }; const result = await klaviyoClient.post('/profiles/', payload); return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] }; } catch (error) { return { content: [{ type: "text", text: `Error creating profile: ${error.message}` }], isError: true }; } },
- src/tools/profiles.js:54-61 (schema)Zod schema defining optional input parameters for creating a profile: email, phone_number, external_id, first_name, last_name, and properties.{ email: z.string().email().optional().describe("Email address of the profile"), phone_number: z.string().optional().describe("Phone number of the profile"), external_id: z.string().optional().describe("External ID for the profile"), first_name: z.string().optional().describe("First name of the profile"), last_name: z.string().optional().describe("Last name of the profile"), properties: z.record(z.any()).optional().describe("Additional properties for the profile") },
- src/tools/profiles.js:52-97 (registration)The server.tool call registers the 'create_profile' tool with schema, inline handler, and description.server.tool( "create_profile", { email: z.string().email().optional().describe("Email address of the profile"), phone_number: z.string().optional().describe("Phone number of the profile"), external_id: z.string().optional().describe("External ID for the profile"), first_name: z.string().optional().describe("First name of the profile"), last_name: z.string().optional().describe("Last name of the profile"), properties: z.record(z.any()).optional().describe("Additional properties for the profile") }, async (params) => { try { const attributes = {}; // Add all provided fields to attributes for (const [key, value] of Object.entries(params)) { if (value !== undefined && key !== 'properties') { attributes[key] = value; } } // Add properties if provided if (params.properties) { attributes.properties = params.properties; } const payload = { data: { type: "profile", attributes } }; const result = await klaviyoClient.post('/profiles/', payload); return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] }; } catch (error) { return { content: [{ type: "text", text: `Error creating profile: ${error.message}` }], isError: true }; } }, { description: "Create a new profile in Klaviyo" } );