get_flows
Retrieve marketing automation flows from Klaviyo with pagination and filtering options to manage customer engagement workflows.
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": "get_flows"
}
}Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| filter | No | Filter query for flows | |
| page_size | No | Number of flows per page (1-100) | |
| page_cursor | No | Cursor for pagination |
Implementation Reference
- src/tools/flows.js:13-25 (handler)Handler function for the 'get_flows' MCP tool. Fetches flows using Klaviyo client and returns JSON stringified response or error.
async (params) => { try { const flows = await klaviyoClient.get('/flows/', params); return { content: [{ type: "text", text: JSON.stringify(flows, null, 2) }] }; } catch (error) { return { content: [{ type: "text", text: `Error retrieving flows: ${error.message}` }], isError: true }; } }, - src/tools/flows.js:8-12 (schema)Zod input schema defining optional parameters: filter, page_size, page_cursor for the get_flows tool.
{ filter: z.string().optional().describe("Filter query for flows"), page_size: z.number().min(1).max(100).optional().describe("Number of flows per page (1-100)"), page_cursor: z.string().optional().describe("Cursor for pagination") }, - src/tools/flows.js:6-27 (registration)Direct registration of the 'get_flows' tool using server.tool(), including schema, handler, and description.
server.tool( "get_flows", { filter: z.string().optional().describe("Filter query for flows"), page_size: z.number().min(1).max(100).optional().describe("Number of flows per page (1-100)"), page_cursor: z.string().optional().describe("Cursor for pagination") }, async (params) => { try { const flows = await klaviyoClient.get('/flows/', params); return { content: [{ type: "text", text: JSON.stringify(flows, null, 2) }] }; } catch (error) { return { content: [{ type: "text", text: `Error retrieving flows: ${error.message}` }], isError: true }; } }, { description: "Get flows from Klaviyo" } ); - src/server.js:38-39 (registration)Top-level registration call to registerFlowTools(server), which in turn registers the get_flows tool.
registerReportingTools(server); registerFlowTools(server); - src/klaviyo-client.js:135-180 (helper)Core 'get' helper function in Klaviyo client that handles GET requests to /flows/ with params, URL building, caching, retries, 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 ); }