MCP Meta Ads
Allows preparing, validating, and creating Meta Ads campaigns from a Spanish-language brief, including building campaign specs, validating against the Marketing API, and creating paused campaigns with rollback support.
Supports Click-to-WhatsApp ad creatives by building call-to-action payloads pointing to WhatsApp as the destination.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@MCP Meta Adsprepara una campaña para vender zapatos en Madrid"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
MCP Meta Ads
Servidor MCP para preparar, validar y crear campañas de Meta Ads desde un
brief en castellano. El contrato está congelado en
CAMPAIGN_SPEC.md: ese documento manda, este README solo
cuenta cómo está implementado.
Estado: núcleo completo con la suite de tests de la sección 5 en verde. Nunca se corrió contra la Marketing API real — la sección 6 del spec (log de errores de Meta) sigue vacía justamente por eso.
Las 6 reglas invariantes, y dónde viven en el código
Regla | Dónde se hace cumplir |
1. Todo se crea en |
|
2. |
|
3. El token no vive en el repo | El perfil guarda |
4. Desarrollo va contra sandbox |
|
5. Presupuestos enteros en unidades menores |
|
6. |
|
Related MCP server: meta-ads-manager-mcp
Estructura
meta_ads/
errors.py errores con `code` estable + mensaje accionable
enums.py objetivos, compatibilidades, CTAs, mínimos por moneda
profiles.py perfil de cuentas, resolución de cuenta, token, sandbox
brief.py brief en castellano -> hechos (nada que el brief no diga)
spec.py armado del Campaign Spec + provenance + warnings
validate.py validación local (2 severidades) + validate_only contra Meta
payloads.py spec -> payloads de la Marketing API (un solo lugar)
meta_client.py cliente HTTP (solo stdlib, urllib)
create.py creación de los 4 objetos + rollback
server.py adaptador MCP (mcp 1.x y 2.x)
tests/ 80 tests, sin red, stdlibEl núcleo no tiene dependencias: pip install -r requirements.txt solo hace
falta para exponerlo como servidor MCP.
Uso
cp profiles.example.json profiles.json # completar ids reales (sandbox)
cp .env.example .env # y exportar SECRET_META_TOKEN_OWN
export META_ADS_PROFILES=$PWD/profiles.json
python3 -m meta_ads.server # stdio
./correr_tests.sh # la suite entera, sin redLos tools se registran con nombre ASCII (preparar_campana, validar_campana,
crear_campana) porque MCP no admite ñ en los identificadores; son los
preparar_campaña / validar_campaña / crear_campaña del documento. Hay un
cuarto tool, listar_cuentas, que no toca Meta: sirve para que el agente pueda
preguntar "¿cuál de estas?" cuando la regla 2 lo obliga a preguntar.
El copy no lo inventa el servidor
preparar_campana(brief, account_alias?, creatives?) acepta creatives como
lista de dicts escritos por el agente. Si no vienen, el spec sale con
primary_text / headline en null, provenance pending y un warning;
validar y crear los exigen completos. Es la división honesta: el spec
resuelve estructura, el agente escribe texto. Lo mismo con los assets:
image_hash / video_id entran ya resueltos, el spec no sube nada.
Desviaciones del spec congelado
Dos campos aditivos y opcionales (un spec sin ellos sigue siendo válido):
preset(raíz): nombre del preset aplicado. Sin esto, las reglas 11-13 de la sección 5 no son verificables. Si falta,validate.pydeduce el preset comparandoobjective+optimization_goal+destination_typecontra los presets del perfil.ad_set.destination_type: los presets ya lo definen y la API lo pide.
Y dos valores de provenance que el documento no enumera: pending (copy que
falta escribir) y brief aplicado a account.resolved_by cuando el propio
brief nombra la cuenta.
Lo que todavía no está probado contra Meta
Esto es lo que hay que mirar primero cuando haya token de sandbox:
validate_onlydel ad set. Meta exigecampaign_idpara validar un ad set, y enprepararla campaña todavía no existe. Hoy se valida la campaña contra la API y el resto solo localmente; si el spec traeexisting.campaign_id, también se valida el ad set. Vervalidar_campana.Click-to-WhatsApp.
payloads.creative_payloadarmacall_to_action.value.app_destination = "WHATSAPP"conlink = https://api.whatsapp.com/send. Es la forma más documentada, no está confirmada contra la cuenta.Mínimos por moneda (
enums.MIN_DIARIO_POR_MONEDA_MINOR): solo el USD sale de documentación. El resto son valores conservadores. El mínimo efectivo esmax(mínimo de moneda, limits.daily_budget_min_minor), así que el techo real lo pone el perfil.Nombres de enum en general: la tabla
COMPATIBILIDADes una foto yvalidate_onlyes el árbitro. CadaInvalid parameterque aparezca se corrige enenums.pyy se anota en la sección 6 delCAMPAIGN_SPEC.md.
Mapa de los casos de test de la sección 5
Caso | Test |
1. Brief mínimo, una cuenta |
|
2. Brief que sobreescribe defaults |
|
3. Spec válido → |
|
4. |
|
5. Sin cuenta habiendo dos |
|
6. Presupuesto fuera de límites |
|
7. Cualquier |
|
8. Combinación objective/goal/billing inválida |
|
9. |
|
10. Fallo en el POST del ad → rollback |
|
11. |
|
12. |
|
13. |
|
14. |
|
15. |
|
test_invariantes.py cubre las 6 reglas de la sección 1 y el cliente HTTP;
test_server.py, el contrato de los handlers MCP.
Los casos que "deben fallar" se verifican en las dos puertas: preparar los
rechaza al armar el spec y validar/crear los rechazan también si alguien
edita el spec a mano — con la comprobación extra de que la API no se llamó.
This server cannot be deployed
Maintenance
Related MCP Connectors
Launch Meta ads with your AI agent. Bulk-create Facebook and Instagram ads, import creatives from public Google Drive links, and launch partnership ads with authorized creators. Reuse proven ad settings, create fresh variations, and review saved builds and previews before launch. Requires an Ads Uploader account with MCP access and a connected Meta account.
AI marketing agent for paid social: Meta ads campaigns, ad creative generation, lead delivery.
Meta Ads MCP: bulk-create Facebook & Instagram ads across accounts from Drive folders, guardrailed.
- mcpOAuthio.autoady.www
Run Meta ads from your AI assistant: briefings, drop diagnosis, winners, budgets, receipts.
Related MCP Servers
- -licenseNot gradedqualityNot gradedmaintenanceEnables AI assistants to manage Facebook and Instagram advertising campaigns through the Meta Marketing API. Supports full campaign lifecycle management, performance analytics, audience targeting, and creative optimization.-
- AlicenseNot gradedqualityDmaintenanceEnables users to create, manage, and monitor Meta (Facebook/Instagram) ad campaigns directly from Claude using natural language.48 PyPI14MIT
- AlicenseNot gradedqualityBmaintenanceA Model Context Protocol server that lets AI assistants run your Meta Ads end to end — launch campaigns, upload creatives, update budgets, and dig into performance through natural conversation. Works across Facebook, Instagram, and other Meta surfaces.Business Source 1.1
- AlicenseNot gradedqualityDmaintenanceEnables full read/write management of Facebook ad campaigns, ad sets, ads, and creatives via the Meta Marketing API through natural language, with AI creative generation, performance analytics, and PDF reporting.MIT