Meta Ads Engine
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||
Capabilities
Features and capabilities supported by this server
| 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
- 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