create_event
Track customer interactions by creating events in Klaviyo with metric data, profile information, and custom properties for marketing automation.
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| metric | Yes | Metric information for the event | |
| profile | Yes | Profile information for the event | |
| properties | No | Additional properties for the event | |
| time | No | ISO timestamp for the event | |
| value | No | Numeric value for the event |
Implementation Reference
- src/tools/events.js:43-68 (handler)Executes the tool logic: formats event data into Klaviyo API payload and sends POST request via klaviyoClient.post.async (params) => { try { // Format payload according to the latest API structure const payload = { data: { type: "event", attributes: { metric: params.metric, profile: params.profile, properties: params.properties || {}, time: params.time || new Date().toISOString(), value: params.value !== undefined ? params.value : 0 } } }; const result = await klaviyoClient.post('/events/', payload); return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] }; } catch (error) { return { content: [{ type: "text", text: `Error creating event: ${error.message}` }], isError: true }; }
- src/tools/events.js:32-42 (schema)Zod schema validating input parameters for metric, profile, properties, time, and value.{ metric: z.object({ name: z.string().describe("Name of the metric") }).describe("Metric information for the event"), profile: z.object({ email: z.string().email().describe("Email of the customer") }).describe("Profile information for the event"), properties: z.record(z.any()).optional().describe("Additional properties for the event"), time: z.string().optional().describe("ISO timestamp for the event"), value: z.number().optional().describe("Numeric value for the event") },
- src/tools/events.js:30-70 (registration)Registers the create_event tool on the MCP server with name, schema, handler function, and description.server.tool( "create_event", { metric: z.object({ name: z.string().describe("Name of the metric") }).describe("Metric information for the event"), profile: z.object({ email: z.string().email().describe("Email of the customer") }).describe("Profile information for the event"), properties: z.record(z.any()).optional().describe("Additional properties for the event"), time: z.string().optional().describe("ISO timestamp for the event"), value: z.number().optional().describe("Numeric value for the event") }, async (params) => { try { // Format payload according to the latest API structure const payload = { data: { type: "event", attributes: { metric: params.metric, profile: params.profile, properties: params.properties || {}, time: params.time || new Date().toISOString(), value: params.value !== undefined ? params.value : 0 } } }; const result = await klaviyoClient.post('/events/', payload); return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] }; } catch (error) { return { content: [{ type: "text", text: `Error creating event: ${error.message}` }], isError: true }; } }, { description: "Create a new event in Klaviyo" }
- src/server.js:35-35 (registration)Invokes registerEventTools to register the create_event tool (among others) on the main MCP server.registerEventTools(server);
- src/klaviyo-client.js:182-189 (helper)Helper function post() used by the handler to make the API POST request with retry logic.export async function post(endpoint, data, fallbackFn) { return executeWithRetry( () => client.post(endpoint, data), 'POST', endpoint, data, fallbackFn );