get_catalogs
Retrieve catalog data from Klaviyo with pagination support to manage product collections and inventory information for marketing automation workflows.
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| page_size | No | Number of catalogs per page (1-100) | |
| page_cursor | No | Cursor for pagination |
Implementation Reference
- src/tools/catalogs.js:12-24 (handler)The handler function that implements the core logic of the 'get_catalogs' tool. It fetches catalogs from the Klaviyo API using the klaviyoClient, formats the response as JSON string in MCP text content, and returns an error message if the request fails.async (params) => { try { const catalogs = await klaviyoClient.get('/catalogs/', params); return { content: [{ type: "text", text: JSON.stringify(catalogs, null, 2) }] }; } catch (error) { return { content: [{ type: "text", text: `Error retrieving catalogs: ${error.message}` }], isError: true }; } },
- src/tools/catalogs.js:8-11 (schema)Zod input schema defining optional pagination parameters (page_size, page_cursor) for the get_catalogs tool.{ page_size: z.number().min(1).max(100).optional().describe("Number of catalogs per page (1-100)"), page_cursor: z.string().optional().describe("Cursor for pagination") },
- src/tools/catalogs.js:6-26 (registration)MCP server.tool call registering the 'get_catalogs' tool with name, schema, handler, and description 'Get catalogs from Klaviyo'.server.tool( "get_catalogs", { page_size: z.number().min(1).max(100).optional().describe("Number of catalogs per page (1-100)"), page_cursor: z.string().optional().describe("Cursor for pagination") }, async (params) => { try { const catalogs = await klaviyoClient.get('/catalogs/', params); return { content: [{ type: "text", text: JSON.stringify(catalogs, null, 2) }] }; } catch (error) { return { content: [{ type: "text", text: `Error retrieving catalogs: ${error.message}` }], isError: true }; } }, { description: "Get catalogs from Klaviyo" } );
- src/server.js:41-41 (registration)Invocation of registerCatalogTools(server) which performs the tool registrations including get_catalogs.registerCatalogTools(server);
- src/klaviyo-client.js:135-180 (helper)klaviyoClient.get function called from the handler; implements API GET requests to Klaviyo with pagination support, caching, rate limit retries, backoff, and detailed error handling.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 ); }