Skip to main content
Glama

Create Ad from Instagram Post (use existing post)

adsap_create_ad_from_ig_post

Turn an existing Instagram post, video, or reel into an ad inside an EXISTING ad set — Meta Ads Manager's "Use existing post". The ad inherits the ad set's budget, targeting, and schedule (no new budget is created). It is ALWAYS created PAUSED and never spends until you activate it (adsap_set_entity_status with action: "activate"). This does NOT create a campaign or ad set — pick an existing ad set with adsap_list_ad_sets first, get the post id from adsap_list_ig_media, and the Instagram account id from adsap_list_meta_assets. dry_run defaults to TRUE: call once to preview the plan, then again with dry_run: false to create. Images, videos, and reels all work.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
ad_nameNoOptional name for the ad. Defaults to "IG post <ig_media_id>".
dry_runNoTRUE (default) = preview the plan (what ad + creative WOULD be created) without creating anything. Set false to actually create the ad. The ad is ALWAYS created PAUSED — it never spends until you activate it.
page_idNoOptional Facebook Page id override. Normally resolved automatically from the Instagram account; only set this if auto-resolution can't find the linked page.
ad_set_idYesThe EXISTING ad set to add the ad to. The ad inherits this ad set's budget, targeting, and schedule — no new budget is set. Get it from adsap_list_ad_sets.
ig_media_idYesThe Instagram post / video / reel to promote. Get it from adsap_list_ig_media (the `id` field).
ad_account_idYesact_<digits>. The ad account that owns the ad set and the Instagram account.
ig_account_idYesThe Instagram account that owns the post. Used to resolve the ad's Facebook Page + Instagram identity. Get it from adsap_list_meta_assets (asset_type: "instagram_accounts").
call_to_action_typeNoOptional call-to-action button enum (e.g. SHOP_NOW, LEARN_MORE, SIGN_UP). Omit to promote the post as-is with no added button.

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observed

TDQS

A4.9/5.0
Behavior5/5

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

With no annotations, the description carries full responsibility and does so thoroughly. It discloses that ads are always created paused, never spend until activated, inherit budget/targeting/schedule, do not create new entities, and that dry_run defaults to true with a clear preview-then-create flow. This is far beyond minimal transparency.

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

Conciseness5/5

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

The description is dense but well-structured: the core operation is front-loaded, followed by inheritance behavior, paused-by-default safety, prerequisites, dry_run sequencing, and supported media types. Every sentence earns its place and nothing is wasted.

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

Completeness5/5

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

For a tool with no output schema and no annotations, the description covers prerequisites, side effects, activation path, dry-run behavior, and exclusions. An agent has enough information to successfully select and call this tool, including how to prepare required parameters and avoid accidentally spending budget.

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

Parameters4/5

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

The schema already covers 100% of parameters, so the baseline is 3. The description adds meaningful workflow context by naming the exact list tools to resolve ad_set_id, ig_media_id, and ig_account_id, and explains the inheritance behavior that affects how parameters should be interpreted. This pushes it above baseline.

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?

The description uses a specific verb ('Turn an existing Instagram post, video, or reel into an ad') and names the exact resource ('inside an EXISTING ad set'), clearly distinguishing it from adsap_create_ad. It also explicitly states what the tool does not do: it does not create a campaign or ad set.

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

Usage Guidelines5/5

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

The description gives an explicit workflow: pick an existing ad set with adsap_list_ad_sets, get the post id from adsap_list_ig_media, and get the Instagram account id from adsap_list_meta_assets. It also clarifies when to use dry_run twice and references adsap_set_entity_status for activation, leaving little to inference.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources