Skip to main content
Glama

get_campaigns

Retrieve marketing campaigns from Klaviyo using filter queries to manage and analyze email, SMS, and automation initiatives.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
filterNoFilter query for campaigns

Implementation Reference

  • Handler function that fetches campaigns from Klaviyo API. Applies default email channel filter if none provided, returns formatted JSON response or error message.
    async (params) => { try { // Always include the required channel filter if not already provided const apiParams = { filter: params.filter || "equals(messages.channel,'email')" }; const campaigns = await klaviyoClient.get('/campaigns/', apiParams); return { content: [{ type: "text", text: JSON.stringify(campaigns, null, 2) }] }; } catch (error) { return { content: [{ type: "text", text: `Error retrieving campaigns: ${error.message}` }], isError: true }; } },
  • Zod input schema defining optional 'filter' parameter for querying campaigns.
    { filter: z.string().optional().describe("Filter query for campaigns") },
  • Direct registration of the get_campaigns tool on the MCP server within registerCampaignTools, including schema, handler, and description.
    server.tool( "get_campaigns", { filter: z.string().optional().describe("Filter query for campaigns") }, async (params) => { try { // Always include the required channel filter if not already provided const apiParams = { filter: params.filter || "equals(messages.channel,'email')" }; const campaigns = await klaviyoClient.get('/campaigns/', apiParams); return { content: [{ type: "text", text: JSON.stringify(campaigns, null, 2) }] }; } catch (error) { return { content: [{ type: "text", text: `Error retrieving campaigns: ${error.message}` }], isError: true }; } }, { description: "Get campaigns from Klaviyo" } );
  • src/server.js:37-37 (registration)
    Top-level invocation of registerCampaignTools in main server setup, which registers the get_campaigns tool among other campaign tools.
    registerCampaignTools(server);
  • klaviyoClient.get utility function called by the handler. Handles API requests to Klaviyo with query param building (incl. campaigns filter), caching, exponential backoff retries for rate limits, and comprehensive 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 ); }

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/ivan-rivera-projects/Klaviyo-MCP-Server-Enhanced'

If you have feedback or need assistance with the MCP directory API, please join our Discord server