list_adsets
Retrieve ad sets from your ad account with optional filters by campaign ID or status. Use pagination to control results.
Instructions
List ad sets in the ad account. Optionally filter by campaign or status.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| campaign_id | No | Filter by campaign ID | |
| status | No | Filter by status: ACTIVE, PAUSED, DELETED, ARCHIVED | |
| fields | No | Comma-separated fields to return | |
| limit | No | Number of results (default 25) | |
| after | No | Pagination cursor for next page |
Implementation Reference
- src/tools/adsets.ts:17-30 (handler)The async handler function for the list_adsets tool. It builds query params (campaign_id, status, fields, limit, after), calls client.get() on the /adsets endpoint, and returns the data as JSON text content.
async ({ campaign_id, status, fields, limit, after }) => { try { const params: Record<string, unknown> = {}; if (fields) params.fields = fields; if (limit) params.limit = limit; if (after) params.after = after; if (campaign_id) params.campaign_id = campaign_id; if (status) params.effective_status = `["${status}"]`; const { data, rateLimit } = await client.get(`${client.accountPath}/adsets`, params); return { content: [{ type: "text" as const, text: JSON.stringify({ ...data as object, _rateLimit: rateLimit }, null, 2) }] }; } catch (error) { return { content: [{ type: "text" as const, text: `Failed: ${error instanceof Error ? error.message : String(error)}` }], isError: true }; } } - src/tools/adsets.ts:10-16 (schema)Zod schema definitions for list_adsets input parameters: campaign_id (optional string), status (optional string), fields (optional string), limit (optional number, default 25), after (optional string for pagination).
{ campaign_id: z.string().optional().describe("Filter by campaign ID"), status: z.string().optional().describe("Filter by status: ACTIVE, PAUSED, DELETED, ARCHIVED"), fields: z.string().optional().describe("Comma-separated fields to return"), limit: z.number().optional().default(25).describe("Number of results (default 25)"), after: z.string().optional().describe("Pagination cursor for next page"), }, - src/index.ts:51-51 (registration)Registration call: registerAdsetTools(server, client) which registers the list_adsets tool on the MCP server.
registerAdsetTools(server, client); - src/tools/adsets.ts:5-31 (registration)The registerAdsetTools function that calls server.tool() with name 'list_adsets', description, schema, and handler.
export function registerAdsetTools(server: McpServer, client: AdsClient): void { // ─── list_adsets ─────────────────────────────────────────── server.tool( "list_adsets", "List ad sets in the ad account. Optionally filter by campaign or status.", { campaign_id: z.string().optional().describe("Filter by campaign ID"), status: z.string().optional().describe("Filter by status: ACTIVE, PAUSED, DELETED, ARCHIVED"), fields: z.string().optional().describe("Comma-separated fields to return"), limit: z.number().optional().default(25).describe("Number of results (default 25)"), after: z.string().optional().describe("Pagination cursor for next page"), }, async ({ campaign_id, status, fields, limit, after }) => { try { const params: Record<string, unknown> = {}; if (fields) params.fields = fields; if (limit) params.limit = limit; if (after) params.after = after; if (campaign_id) params.campaign_id = campaign_id; if (status) params.effective_status = `["${status}"]`; const { data, rateLimit } = await client.get(`${client.accountPath}/adsets`, params); return { content: [{ type: "text" as const, text: JSON.stringify({ ...data as object, _rateLimit: rateLimit }, null, 2) }] }; } catch (error) { return { content: [{ type: "text" as const, text: `Failed: ${error instanceof Error ? error.message : String(error)}` }], isError: true }; } } ); - src/services/ads-client.ts:180-185 (helper)The AdsClient.get() method used by the handler to make the GET request to the Meta Ads API.
async get( path: string, params?: Record<string, unknown> ): Promise<ClientResponse> { return this.request("GET", path, params); }