Meta Ads Engine
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| 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
| Name | Description |
|---|---|
| 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:
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
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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