marketo_get_program_members
Retrieve program members (leads) from a Marketo program with pagination and optional field selection to control data output.
Instructions
Get members (leads) of a Marketo program. Supports pagination via nextPageToken and batchSize. Optionally specify which lead fields to return.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| programId | Yes | Program ID | |
| fields | No | Lead field API names to return | |
| batchSize | No | Number of results per page (max 300) | |
| nextPageToken | No | Pagination token from previous response |
Implementation Reference
- src/index.ts:7-7 (registration)Imports registerProgramTools, which registers the marketo_get_program_members tool.
import { registerProgramTools } from "./tools/programs.js"; - src/index.ts:23-23 (registration)Calls registerProgramTools(server) to register all program tools including marketo_get_program_members.
registerProgramTools(server); - src/tools/programs.ts:74-93 (handler)Defines the marketo_get_program_members tool. Accepts programId (required), fields, batchSize, and nextPageToken. Makes a GET request to /rest/v1/leads/programs/{programId}.json.
// ── marketo_get_program_members ──────────────────────────────────────────── server.tool( "marketo_get_program_members", "Get members (leads) of a Marketo program. Supports pagination via nextPageToken and batchSize. Optionally specify which lead fields to return.", { programId: z.number().describe("Program ID"), fields: z.array(z.string()).optional().describe("Lead field API names to return"), batchSize: z.number().optional().describe("Number of results per page (max 300)"), nextPageToken: z.string().optional().describe("Pagination token from previous response"), }, async (args) => { try { const params: Record<string, unknown> = {}; if (args.fields?.length) params.fields = args.fields.join(","); if (args.batchSize) params.batchSize = args.batchSize; if (args.nextPageToken) params.nextPageToken = args.nextPageToken; return ok(await makeRequest(`/rest/v1/leads/programs/${args.programId}.json`, "GET", params)); } catch (e) { return err(e); } } ); - src/tools/programs.ts:78-83 (schema)Zod schema for input validation: programId (number, required), fields (array of strings, optional), batchSize (number, optional), nextPageToken (string, optional).
{ programId: z.number().describe("Program ID"), fields: z.array(z.string()).optional().describe("Lead field API names to return"), batchSize: z.number().optional().describe("Number of results per page (max 300)"), nextPageToken: z.string().optional().describe("Pagination token from previous response"), }, - src/client.ts:21-49 (helper)The makeRequest helper that sends authenticated HTTP requests to the Marketo API. Used by the handler to call GET /rest/v1/leads/programs/{programId}.json.
export async function makeRequest<T = unknown>( endpoint: string, method: Method = "GET", data?: unknown, contentType?: string, ): Promise<T> { const token = await getAccessToken(); const config: AxiosRequestConfig = { url: `${MARKETO_BASE_URL}${endpoint}`, method, headers: { Authorization: `Bearer ${token}`, ...(contentType ? { "Content-Type": contentType } : {}), }, ...(data && method !== "GET" ? { data } : {}), ...(data && method === "GET" ? { params: data } : {}), }; const res = await axios(config); const body = res.data; // Marketo REST API returns errors inside the response body if (body?.errors?.length) { const e = body.errors[0]; throw new MarketoError(`${e.code}: ${e.message}`, res.status); } return body as T; }