Skip to main content
Glama
Matthew-Lee-Nello

Meta Ads Engine

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault

No arguments

Capabilities

Features and capabilities supported by this server

CapabilityDetails
tools
{
  "listChanged": true
}
logging
{}
prompts
{
  "listChanged": false
}
resources
{
  "subscribe": false,
  "listChanged": false
}
extensions
{
  "io.modelcontextprotocol/ui": {}
}
experimental
{}

Tools

Functions exposed to the LLM to take actions

NameDescription
get_ad_accountsA

List the ad accounts the token can access (id, name, currency, status).

get_account_pagesA

List the Facebook Pages promotable on this ad account.

Returns page id + name. Use the page id for object_story_spec / asset_feed_spec when building creatives. Falls back to META_AD_ACCOUNT_ID if account_id is omitted.

get_adsetsB

List ad sets on the account, optionally filtered to one campaign.

create_adsetA

Create an ABO ad set. daily_budget_cents is in cents ($50/day = 5000).

advantage_audience is forced OFF (0) inside the targeting spec so the audience is the one you defined. For video views use optimization_goal THRUPLAY + billing_event IMPRESSIONS. For lead gen use LEAD_GENERATION.

targeting is the Meta targeting spec dict, e.g.: {"geo_locations": {"countries": ["AU"]}, "age_min": 28, "age_max": 55, "flexible_spec": [{"interests": [{"id": "...", "name": "..."}]}]} Pass an empty flexible_spec / omit interests for a broad ad set.

update_adsetA

Update an ad set (status, daily budget in cents, name).

get_campaignsC

List campaigns on the account (id, name, objective, status, budgets).

create_campaignA

Create a campaign. Defaults to PAUSED - never set live without an explicit yes.

We use ABO (ad-set-level budgets), so no campaign budget is set here and is_adset_budget_sharing_enabled is forced false. objective must be one of the OUTCOME_* values. special_ad_categories (e.g. ["HOUSING","EMPLOYMENT","CREDIT"]) only when the account requires it, else pass none / [].

update_campaignA

Update a campaign. Pass status ACTIVE to launch (get an explicit yes first), PAUSED to pause, DELETED to remove.

create_ad_creativeA

Create an ad creative from an ad-account-scoped video.

Two modes:

  • Multi-variant (pass messages[], headlines[], descriptions[]): builds an asset_feed_spec creative. Meta shows "Primary text (1 of 5)" in Ads Manager. This is what you attach to ads via update_ad (step 4 of the flow).

  • Single-variant (pass message + headline): builds an object_story_spec creative. Use this once as the placeholder to create ads against (step 2 of the flow).

video_id must be the ad-account-scoped id returned by upload_video (NOT a page-uploaded video id). image_url is a thumbnail - fetch it fresh right before this call (CDN urls expire); get_video_thumbnail gets one.

get_ad_creativesC

List ad creatives on the account (id, name, status).

create_adA

Create an ad. For the DCO-bypass flow, pass the PLACEHOLDER creative_id here, then call update_ad to swap in the real multi-variant creative. Defaults PAUSED.

update_adA

Update an ad. Swapping creative_id to a multi-variant creative here bypasses the DCO check (error 1885998) that blocks direct creation - this is step 4 of the flow.

get_adsC

List ads on the account, optionally filtered to one ad set.

get_insightsA

Read performance. level is one of account/campaign/adset/ad. date_preset e.g. today, yesterday, last_7d, last_14d, last_30d, maximum. Returns spend, reach, clicks, ctr, cpc, cpm and the actions breakdown.

search_interestsA

Search targetable interests by name. Returns id + name + audience_size for each, which you load into a flexible_spec interest stack on the interest ad set.

upload_videoA

Upload a local video file to the ad account. Returns {"id": ""} - the ad-account-scoped video id you pass to create_ad_creative.

file_path is an absolute path to a local .mp4 (or similar). For large files Meta also supports a chunked/resumable flow; this does a straight multipart upload, which is fine for typical ad videos.

get_video_thumbnailA

Fetch fresh thumbnail urls for a video. Meta CDN thumbnail urls expire fast, so call this immediately before create_ad_creative and use the returned uri as image_url. Returns the thumbnails list; the one with is_preferred=true is the pick.

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

No resources

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/Matthew-Lee-Nello/meta-ads-engine'

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