Skip to main content
Glama
Mike25app

scaleforge-mcp-meta-ads

list_ads

List ads from a Meta Ads account, ad set, or campaign. Pass account, ad set, or campaign ID to get ad ID, name, creative, and status.

Instructions

List ads. Pass either ad_account_id (all ads in account), adset_id (ads in one ad set), or campaign_id (ads in a campaign). Returns id, name, adset_id, creative, status.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
ad_account_idNo
adset_idNo
campaign_idNo
limitNo
afterNo
effective_statusNo
fieldsNo

Implementation Reference

  • The handler function for list_ads. It determines the parent entity (ad_account_id, adset_id, or campaign_id) and calls metaGet to fetch ads from the Meta Graph API.
    handler: async (args) => {
      const parent = args.adset_id
        ? String(args.adset_id)
        : args.campaign_id
        ? String(args.campaign_id)
        : args.ad_account_id
        ? toAdAccountPath(String(args.ad_account_id))
        : null;
      if (!parent) {
        throw new Error(
          "Must provide one of: ad_account_id, adset_id, or campaign_id.",
        );
      }
      return metaGet(`/${parent}/ads`, {
        fields: args.fields ?? DEFAULT_AD_FIELDS,
        limit: args.limit ?? 100,
        after: args.after,
        effective_status: args.effective_status,
      });
    },
  • Input schema for list_ads defining optional parameters: ad_account_id, adset_id, campaign_id, limit, after, effective_status, and fields.
    inputSchema: {
      ad_account_id: z.string().optional(),
      adset_id: z.string().optional(),
      campaign_id: z.string().optional(),
      limit: z.number().int().positive().max(500).optional(),
      after: z.string().optional(),
      effective_status: z.array(z.string()).optional(),
      fields: z.string().optional(),
    },
  • src/tools/ads.ts:14-16 (registration)
    The ToolDef array 'adTools' containing the list_ads tool definition with name, description, inputSchema, and handler.
    export const adTools: ToolDef[] = [
      {
        name: "list_ads",
  • src/index.ts:47-51 (registration)
    All tools (including adTools) are spread into the allTools array and registered via server.registerTool in a loop.
    const allTools: ToolDef[] = [
      ...accountTools,
      ...campaignTools,
      ...adsetTools,
      ...adTools,
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must carry the burden. It lists return fields (id, name, adset_id, creative, status) but omits behavioral details such as pagination (limit, after parameters exist), rate limits, or that this is a read operation. The description adds some value but leaves significant gaps.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, front-loaded with the purpose and key parameters. It is efficient but could add a note on output structure without hurting conciseness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 7 parameters, no output schema, and no annotations, the description is incomplete. It covers only filtering by IDs and return fields but ignores pagination, status filtering, and field selection. A more complete description would mention these capabilities.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It explains the three ID parameters (ad_account_id, adset_id, campaign_id) but does not mention limit, after, effective_status, or fields, leaving 4 of 7 parameters undescribed. The explanation for the IDs is good but insufficient overall.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states 'List ads' and specifies the three filter options (ad_account_id, adset_id, campaign_id), distinguishing it from sibling tools like list_adsets or list_campaigns. The verb-resource combination is explicit and the scope is well-defined.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description tells the agent to pass one of three IDs but does not provide guidance on when to use this tool over siblings like search_ads_library or get_ad. There is no explicit when-not or alternative suggestion.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Install Server

Other Tools

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/Mike25app/scaleforge-mcp-meta-ads'

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