get_forms
Retrieve forms from the Klaviyo API using filters, page size, and pagination cursor to manage marketing automation workflows efficiently.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| filter | No | Filter query for forms | |
| page_cursor | No | Cursor for pagination | |
| page_size | No | Number of forms per page (1-100) |
Input Schema (JSON Schema)
{
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"filter": {
"description": "Filter query for forms",
"type": "string"
},
"page_cursor": {
"description": "Cursor for pagination",
"type": "string"
},
"page_size": {
"description": "Number of forms per page (1-100)",
"maximum": 100,
"minimum": 1,
"type": "number"
}
},
"type": "object"
}
Implementation Reference
- src/tools/forms.js:13-25 (handler)The main handler function for the 'get_forms' tool. It calls klaviyoClient.get('/forms/', params) and returns the JSON stringified response or error message.async (params) => { try { const forms = await klaviyoClient.get('/forms/', params); return { content: [{ type: "text", text: JSON.stringify(forms, null, 2) }] }; } catch (error) { return { content: [{ type: "text", text: `Error retrieving forms: ${error.message}` }], isError: true }; } },
- src/tools/forms.js:8-12 (schema)Zod schema defining the input parameters for the 'get_forms' tool: filter, page_size, page_cursor.{ filter: z.string().optional().describe("Filter query for forms"), page_size: z.number().min(1).max(100).optional().describe("Number of forms per page (1-100)"), page_cursor: z.string().optional().describe("Cursor for pagination") },
- src/tools/forms.js:6-27 (registration)Registers the 'get_forms' tool on the MCP server using server.tool with name, schema, handler, and description.server.tool( "get_forms", { filter: z.string().optional().describe("Filter query for forms"), page_size: z.number().min(1).max(100).optional().describe("Number of forms per page (1-100)"), page_cursor: z.string().optional().describe("Cursor for pagination") }, async (params) => { try { const forms = await klaviyoClient.get('/forms/', params); return { content: [{ type: "text", text: JSON.stringify(forms, null, 2) }] }; } catch (error) { return { content: [{ type: "text", text: `Error retrieving forms: ${error.message}` }], isError: true }; } }, { description: "Get forms from Klaviyo" } );
- src/server.js:46-46 (registration)Invokes registerFormTools(server) to register all form-related tools including 'get_forms'.registerFormTools(server);
- src/klaviyo-client.js:135-180 (helper)The generic 'get' function in klaviyoClient that performs authenticated API GET requests to Klaviyo with retry logic, caching, and error handling. Called by the tool handler.export async function get(endpoint, params = {}, fallbackFn) { // Build the URL with query parameters according to Klaviyo API specs let url = endpoint; const queryParams = []; // Special handling for campaign endpoint - add required filter if missing if (endpoint === '/campaigns/' && !params.filter) { logger.debug('Adding default email filter for campaigns endpoint'); params.filter = "equals(messages.channel,'email')"; } // Handle filter parameter if provided if (params.filter) { queryParams.push(`filter=${encodeURIComponent(params.filter)}`); } // Handle include parameter if provided if (params.include) { queryParams.push(`include=${encodeURIComponent(params.include)}`); } // Handle page_size parameter if provided if (params.page_size) { queryParams.push(`page[size]=${params.page_size}`); } // Handle pagination cursor if provided if (params.page_cursor) { queryParams.push(`page[cursor]=${params.page_cursor}`); } // Add query parameters to URL if (queryParams.length > 0) { url = `${endpoint}?${queryParams.join('&')}`; } logger.debug(`Prepared GET request to: ${url}`); return executeWithRetry( () => client.get(url), 'GET', endpoint, params, fallbackFn ); }