create_profile
Create customer profiles in Klaviyo by adding contact details like email, phone number, and personal information for marketing automation.
Tool call template
This tool declares no required parameters. Add optional parameters from the input schema as needed.
{
"id": 1,
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"arguments": {},
"name": "create_profile"
}
}Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| No | Email address of the profile | ||
| phone_number | No | Phone number 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 | |
| properties | No | Additional properties for the profile |
Implementation Reference
- src/tools/profiles.js:62-94 (handler)The asynchronous handler function that constructs the profile attributes from input parameters and sends a POST request to the Klaviyo /profiles/ endpoint to create a new 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 }; } - src/tools/profiles.js:54-60 (schema)Zod schema defining the optional input parameters for the create_profile tool: 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 that registers the create_profile tool, specifying its name, input schema, handler function, 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" } );