ADM Google Ads MCP Server
Conecta Claude Code, Codex, Cursor o Windsurf a tus cuentas de Google Ads. Lee datos de campañas en lenguaje sencillo y redacta nuevas campañas de Search con ADM AI.
Servidor MCP alojado
npx add-mcp 'https://app.adm.cc/mcp'Se instala en Claude Code, Codex, Cursor y más
Documentación
El skill ADM Google Ads permite que una herramienta de IA lea tus cuentas de Google Ads y cree campañas de Search a partir de un plan escrito. Funciona con Claude Code, Codex, Cursor y Windsurf. El skill es un solo archivo, SKILL.md, que describe el flujo de trabajo; el trabajo en sí se ejecuta a través del servidor MCP de ADM, que conecta la herramienta de IA con las cuentas de Google Ads vinculadas a tu cuenta de ADM.
- Lectura en todos los planes: informes, términos de búsqueda, palabras clave, anuncios y activos están disponibles en todos los planes de ADM, incluido el gratuito.
- Escritura en planes de pago: crear campañas, grupos de anuncios, anuncios, palabras clave, palabras clave negativas y activos requiere un plan de pago (Starter, Professional o Enterprise).
- ADM alojado hoy: el servidor ADM alojado actualmente ofrece las herramientas de lectura y borradores de IA. Las herramientas de escritura aún no están disponibles allí; para crear una campaña en Google Ads, usa el asistente de campañas en ADM.
- Vista previa antes de cada cambio: ADM valida cada cambio y devuelve una vista previa. Nada se escribe en Google Ads hasta que lo apruebes.
- Las campañas nuevas se crean en pausa: cada campaña se crea en pausa y solo se habilita cuando lo solicitas en un mensaje separado.
Direcciones:
- Archivo del skill:
https://adm.cc/docs/google-ads-skill/SKILL.md(nombre de carpetaadm-google-ads) - Servidor MCP:
https://app.adm.cc/mcp(Streamable HTTP), autenticado con una clave API de ADM enviada comoAuthorization: Bearer adm_xxx - Versión del contrato:
2026-10-03
1. Comienza en tres pasos
Paso 1. Crea una clave API. Inicia sesión en ADM y abre https://app.adm.cc/apikeys. Elige el nivel de acceso:
- Solo lectura: solo informes y configuración. Funciona en todos los planes, incluido el gratuito.
- Lectura y escritura: informes más las herramientas de escritura. Las herramientas de escritura requieren un plan de pago activo.
La clave completa se muestra una sola vez. Cópiala antes de cerrar el diálogo.
Paso 2. Pide a la herramienta de IA que instale ADM. Copia el mensaje a continuación, reemplaza adm_xxx con tu clave y envíalo a la herramienta de IA. La herramienta de IA sigue los pasos de la sección 5 para conectar el servidor MCP de ADM, guardar el archivo del skill y probar la conexión. Cuando haya terminado, reinicia la herramienta de IA si te lo pide.
Install the ADM MCP server and the ADM Google Ads skill by following https://adm.cc/docs/google-ads-skill#ai-install. My ADM API key is adm_xxx
La clave permanece en el historial de la conversación. Si ese historial puede ser visto por otros, rota la clave en ADM (sección 10). Para configurar el servidor manualmente, consulta la sección 4.
Paso 3. Da instrucciones en lenguaje natural. Por ejemplo: "¿Cuál de mis campañas gastó más en los últimos 30 días?" o "Crea las campañas de plan.md". La sección 3 tiene más ejemplos.
2. Qué herramientas de ADM llama el skill
| Lo que pides | Herramientas de ADM |
|---|---|
| Elegir o cambiar la cuenta de Google Ads | get_accounts |
| Informes y preguntas sobre rendimiento | get_campaigns, get_ad_groups, get_keywords, get_search_terms, get_ads, get_negative_keywords, find_negative_conflicts, get_paused_summary, get_assets, get_conversion_actions, get_customizers |
| Ver rendimiento por dispositivo (móvil, computadora, tableta) | get_device_performance |
| Reducir o excluir ofertas en móvil, computadora o tableta | set_device_bid_adjustments |
| Ver qué ubicaciones gastaron y convirtieron | get_location_performance, set_location_bid_adjustments |
| Confirmar una vista previa solo con su id | confirm_preview |
| Crear campañas a partir de un plan | create_search_campaign, add_ad_groups, add_keywords, add_ads |
| Palabras clave negativas | add_account_negative_keywords, create_shared_negative_list, attach_shared_negative_list |
| Vínculos de sitio, destacados, fragmentos estructurados, precios, promociones y llamadas | add_sitelinks, add_callouts, add_structured_snippets, add_prices, add_promotions, add_calls |
| Nombre de la empresa | add_business_name |
| Activos de imagen y logotipos de empresa | Endpoint de carga POST https://app.adm.cc/mcp/uploads, luego add_images o add_business_logo |
| Grupos de anuncios redactados por la IA de ADM | draft_ad_groups, get_ad_group_draft |
| Una campaña nueva redactada por la IA de ADM | draft_campaign, get_campaign_draft, luego create_search_campaign |
| Verificar una creación y reanudar tras una interrupción | get_campaign_setup, get_operation |
| Habilitar o pausar una campaña | set_campaign_status |
| Pausar una campaña, o cambiar su nombre, presupuesto diario, ofertas o idiomas | update_campaign |
| Añadir o eliminar ubicaciones segmentadas o excluidas | update_campaign_locations |
| Crear, adjuntar o cambiar una estrategia de ofertas de cartera compartida | get_bidding_strategies, create_bidding_strategy, attach_bidding_strategy, update_bidding_strategy |
| Pausar o desvincular un activo | set_asset_link_status |
| Renombrar, pausar, habilitar o cambiar ofertas de un grupo de anuncios | update_ad_group, set_ad_group_status |
| Editar el texto de un anuncio existente | update_ads |
| Habilitar, pausar o eliminar anuncios o palabras clave | set_ad_status, set_keyword_status |
| Añadir o eliminar palabras clave negativas | add_campaign_negative_keywords, remove_negative_keywords, add_shared_negative_keywords, remove_shared_negative_keywords |
| Etiquetar clics con un parámetro personalizado, plantilla de seguimiento o sufijo de URL final | set_url_options |
La sección 6 describe cada herramienta y sus parámetros.
3. Qué puedes decir después de la configuración
- "¿Cuál de mis campañas gastó más en los últimos 30 días y cuántas conversiones obtuvo cada una?"
- "Enumera los términos de búsqueda de los últimos 14 días que costaron dinero sin conversión."
- "Crea las campañas de plan.md. Primero la vista previa y espera mi aprobación."
- "Redacta grupos de anuncios para la sección de mejora de fotos de plan.md."
- "Crea una campaña de Search nueva desde https://www.example.com/photo-enhancer. Explora las palabras clave, luego muéstrame la vista previa y espera mi aprobación."
- "Añade banner.jpg como activo de imagen a la campaña photo-enhancer@DE."
- "Cambia a la cuenta de anuncios MySecond."
- "Etiqueta cada campaña con el parámetro personalizado myname para poder ver de qué campaña proviene un clic."
Cuenta predeterminada
Cuando hay varias cuentas de Google Ads conectadas, el skill pregunta una vez cuál usar y guarda la elección en .adm/account.json en el directorio del proyecto (solo ID de cliente y nombre de cuenta, nunca la clave API). Las solicitudes posteriores en el mismo proyecto usan esa cuenta, y cada operación indica la cuenta en la que se ejecuta. Cuando solo hay una cuenta conectada, el skill la usa sin preguntar. Para cambiar la cuenta, di "Cambia a la cuenta de anuncios MySecond". Si la cuenta guardada se desconecta más tarde en ADM, el skill se detiene antes de la siguiente operación, informa que la cuenta guardada ya no está conectada y pregunta qué cuenta usar, incluso si solo queda una.
Ejemplo: crear una campaña a partir de un plan
Este ejemplo usa una marca ficticia, PixelUp, y crea una campaña a partir de una entrada del plan llamada photo-enhancer@DE: una herramienta en línea de mejora de fotos anunciada en Alemania en alemán.
La entrada del plan:
- Campaña
photo-enhancer@DE, ubicación Alemania, un grupo de anunciosphoto-enhancer-DE - Página de destino
https://www.example.com/de/photo-enhancer, ruta de visualizaciónfoto/verbessern - 8 palabras clave de concordancia de frase, 6 titulares, 2 descripciones, 4 palabras clave negativas de campaña
- Configuración general: solo Búsqueda de Google, Maximizar clics con límite de CPC, sin concordancia amplia
El plan no indica un presupuesto diario ni el límite de CPC, por lo que la herramienta de IA pregunta ambos antes de crear nada. El ejemplo usa 10.00 por día y un límite de 0.40 en la moneda de la cuenta.
Qué pedir:
Create the photo-enhancer@DE campaign from plan.md.
Daily budget 10.00, CPC cap 0.40. Preview first and wait for my approval.
La herramienta de IA primero llama a create_search_campaign sin confirm. ADM valida la solicitud y devuelve una vista previa con cada error, el ancho de visualización de cada texto, la moneda de la cuenta y una estimación del presupuesto mensual (presupuesto diario × 30.4). La vista previa incluye un preview_id. Después de que apruebes, la herramienta de IA envía los mismos argumentos nuevamente con "confirm": true y ese preview_id.
{
"customer_id": "123-456-7890",
"campaign": {
"name": "photo-enhancer@DE",
"daily_budget": 10.00,
"bidding": { "type": "MAXIMIZE_CLICKS", "max_cpc": 0.40 },
"network_settings": { "google_search": true, "search_partners": false, "display_network": false },
"geo_targets": [ { "country_code": "DE" } ],
"negative_keywords": [ "\"kamera\"", "\"handy\"", "\"bildschirm\"", "\"monitor\"" ],
"ad_groups": [
{
"name": "photo-enhancer-DE",
"language": "de",
"keywords": [
"\"foto verbessern\"", "\"bildqualität verbessern\"", "\"foto schärfen\"", "\"bild vergrößern\"",
"\"foto qualität verbessern online\"", "\"unscharfes foto scharf machen\"",
"\"bild hochskalieren\"", "\"foto auflösung erhöhen\""
],
"ads": [
{
"final_url": "https://www.example.com/de/photo-enhancer",
"path1": "foto",
"path2": "verbessern",
"headlines": [
{ "text": "Fotoqualität verbessern" },
{ "text": "Bilder online vergrößern" },
{ "text": "Unscharfe Fotos schärfen" },
{ "text": "Fotos 2x oder 4x vergrößern" },
{ "text": "Ohne Installation nutzen" },
{ "text": "PixelUp Foto-Verbesserer" }
],
"descriptions": [
{ "text": "Fotoqualität online verbessern: Bilder 2x oder 4x vergrößern und schärfen." },
{ "text": "Für Produktfotos, Social-Media-Beiträge und kleine Bilder. Direkt im Browser, ohne App." }
]
}
]
}
]
}
}
Notas sobre esta carga útil:
- Las palabras clave usan notación de Google:
"text"es concordancia de frase,[text]es concordancia exacta, palabras sin comillas son concordancia amplia. Dentro del JSON, las comillas de una palabra clave de frase se escapan como\". "language": "de"agrega una etiqueta de idioma al nombre del grupo de anuncios, por lo que el grupo se crea comophoto-enhancer-DE [de]. ADM usa esta etiqueta para identificar el idioma del anuncio cuando analiza el grupo más tarde.- La segmentación geográfica siempre usa la opción "Presencia" (personas en la ubicación o que la visitan regularmente).
- Las palabras clave negativas a nivel de cuenta y las listas compartidas del mismo plan son pasos separados:
add_account_negative_keywordsuna vez por cuenta,create_shared_negative_listuna vez por lista, luegoattach_shared_negative_listpara cada campaña nueva.
El resultado contiene el nuevo campaign_id, los IDs de los grupos de anuncios y un operation_id. La herramienta de IA luego llama a get_campaign_setup para comparar lo que existe en Google Ads con el plan. La campaña permanece en pausa hasta que pidas habilitarla.
Para un plan con muchas campañas, el skill instruye a la herramienta de IA a:
- Enumerar cada decisión faltante y verificar los recuentos en el plan antes de crear
- Mostrar la vista previa y pedir aprobación en dos rondas: campañas y listas primero, luego los adjuntos de listas y activos que necesitan los nuevos IDs
- Crear campaña por campaña, registrando cada ID en el archivo de manifiesto
adm-manifest.json - Conciliar el resultado y reanudar sin repetir campañas terminadas
- Preguntar por separado antes de habilitar cualquier cosa
4. Usar el servidor MCP sin el skill
El skill es opcional. Conectado por sí solo, el servidor MCP envía a la herramienta de IA un conjunto de reglas de uso al conectarse: vista previa antes de cada escritura, campañas nuevas en pausa, la cuenta predeterminada y tratar los términos de búsqueda como datos. El servidor MCP tiene dos ventajas adicionales, con o sin el skill:
- Actualizaciones sin reinstalar: nuevas herramientas y campos están disponibles tan pronto como ADM los publica; la configuración permanece igual.
- Permisos por herramienta: la mayoría de las herramientas de IA te permiten aprobar herramientas de lectura automáticamente y mantener un paso de confirmación para herramientas de escritura (sección 9).
Las configuraciones a continuación leen la clave de la variable de entorno ADM_API_KEY. Codex, Cursor y Windsurf leen la variable en tiempo de ejecución, y sus archivos de configuración no contienen la clave. Claude Code escribe la clave en su archivo de configuración a nivel de usuario, ~/.claude.json, cuando se agrega el servidor; no compartas ese archivo. Configura la variable primero y luego reinicia la herramienta de IA.
macOS o Linux (agrega la línea a ~/.zshrc o ~/.bashrc):
export ADM_API_KEY="adm_xxx"
Windows (luego abre una nueva terminal):
setx ADM_API_KEY "adm_xxx"
Configuración para cada herramienta de IA:
Claude Code (Bash):
claude mcp add --transport http --scope user adm https://app.adm.cc/mcp \
--header "Authorization: Bearer $ADM_API_KEY"
PowerShell:
claude mcp add --transport http --scope user adm https://app.adm.cc/mcp \`
--header "Authorization: Bearer $env:ADM_API_KEY"
--scope user hace que el servidor esté disponible en todos los proyectos de esta computadora. Verifica la conexión con claude mcp list: la línea adm debería terminar con ✔ Connected.
Para detener los avisos de aprobación solo para herramientas de lectura, agrega esto a ~/.claude/settings.json (todos los proyectos) o .claude/settings.json (un proyecto):
{
"permissions": {
"allow": [
"mcp__adm__get_*"
]
}
}
mcp__adm__get_* coincide con cada herramienta de ADM cuyo nombre comienza con get_: las nueve herramientas de lectura, más get_ad_group_draft y get_campaign_draft, que solo leen el estado de un borrador de IA. Mantén las herramientas de escritura fuera de la lista de permitidos (sección 9). draft_ad_groups y draft_campaign no cambian Google Ads, pero cada llamada ejecuta varias llamadas de IA, por lo que la regla las deja fuera también. Si registraste el servidor con otro nombre, reemplaza adm en la regla con ese nombre.
Codex:
codex mcp add adm --url https://app.adm.cc/mcp --bearer-token-env-var ADM_API_KEY
Codex lee ADM_API_KEY cuando se inicia.
Cursor (~/.cursor/mcp.json para todos los proyectos, o .cursor/mcp.json en un proyecto):
{
"mcpServers": {
"adm": {
"url": "https://app.adm.cc/mcp",
"headers": { "Authorization": "Bearer ${env:ADM_API_KEY}" }
}
}
}
Windsurf (~/.codeium/windsurf/mcp_config.json):
{
"mcpServers": {
"adm": {
"serverUrl": "https://app.adm.cc/mcp",
"headers": { "Authorization": "Bearer ${env:ADM_API_KEY}" }
}
}
}
Las entradas de Codex, Cursor y Windsurf siguen el formato de configuración MCP documentado de cada herramienta. Reinicia la herramienta de IA después de cambiar su configuración y luego pídele que liste tus cuentas de Google Ads. En Windsurf, abre el archivo desde la configuración de MCP con "View raw config" si no está en la ruta indicada anteriormente. ${env:ADM_API_KEY} se lee del entorno del propio proceso de la herramienta de IA. Cursor y Windsurf están basados en VS Code y, cuando se abren desde el Dock o un lanzador de aplicaciones, también cargan variables establecidas en ~/.zshrc o ~/.bashrc. Después de establecer o cambiar la variable, cierra la herramienta de IA por completo y vuelve a abrirla (en macOS, pulsa Cmd+Q; cerrar la ventana no cierra la aplicación); de lo contrario, el encabezado se envía sin la clave y el servidor devuelve HTTP 401.
Solución de problemas de conexión
| Síntoma | Causa | Solución |
|---|---|---|
| HTTP 401 | La clave falta, está mal escrita o tiene espacios al principio o al final | Comprueba ADM_API_KEY, reinicia la herramienta de IA o elimina el servidor y vuelve a añadirlo con la clave pegada exactamente como se muestra |
| HTTP 401 | La clave fue revocada en la página de claves de API | Crea una nueva clave y actualiza la configuración (sección 10) |
| HTTP 401 en Windows | El encabezado usó una variable de PowerShell entre comillas simples, por lo que la variable no se expandió | Usa comillas dobles o pega la clave directamente en el comando |
| HTTP 401 después de establecer la variable | La herramienta de IA se inició antes de que se estableciera la variable | Cierra la herramienta de IA por completo y vuelve a abrirla (en macOS, pulsa Cmd+Q); inicia una herramienta basada en terminal desde una nueva terminal. Si el error persiste, inicia el editor desde una terminal donde la variable esté establecida, por ejemplo cursor . |
| HTTP 404 | La URL es incorrecta | La URL debe ser exactamente https://app.adm.cc/mcp: https, el subdominio app. y la ruta /mcp |
| Tiempo de espera agotado o conexión rechazada | Un proxy corporativo o un firewall bloquea la solicitud | Establece HTTPS_PROXY antes de iniciar la herramienta de IA o pide a tu administrador de red que permita app.adm.cc |
Una clave que funcionaba antes y ahora devuelve 401 generalmente ha sido revocada. La página de claves de API muestra cuándo se usó cada clave por última vez.
5. Pasos de instalación (para que las lean las herramientas de IA)
Esta sección está escrita para herramientas de IA. Solo necesitas completar el paso 2 de la sección 1; la herramienta de IA luego sigue los pasos a continuación por sí sola.
El usuario te ha dado una clave de API de ADM (comienza con adm_). Instala ADM de la siguiente manera y luego informa de lo que hiciste.
- Añade el servidor MCP a nivel de usuario, para que funcione en todos los proyectos. Nombre del servidor:
adm. URL:https://app.adm.cc/mcp(Streamable HTTP). Encabezado:Authorization: Bearer <key>. Escribe la clave solo en tu configuración MCP a nivel de usuario, nunca en un archivo de proyecto ni en un repositorio git. Si ya existe un servidor llamadoadm, reemplázalo.
| Herramienta de IA | Cómo añadir el servidor |
|---|---|
| Claude Code | Ejecuta claude mcp add --transport http --scope user adm https://app.adm.cc/mcp --header "Authorization: Bearer <key>" |
| Codex | En ~/.codex/config.toml añade [mcp_servers.adm] con url = "https://app.adm.cc/mcp" y http_headers = { "Authorization" = "Bearer <key>" } |
| Cursor | En ~/.cursor/mcp.json añade "adm": { "url": "https://app.adm.cc/mcp", "headers": { "Authorization": "Bearer <key>" } } bajo mcpServers |
| Windsurf | En ~/.codeium/windsurf/mcp_config.json añade "adm": { "serverUrl": "https://app.adm.cc/mcp", "headers": { "Authorization": "Bearer <key>" } } bajo mcpServers |
Mantén cualquier otro servidor que ya esté en el archivo. En Windows, ~ es la carpeta de perfil de usuario.
- Guarda la habilidad. Descarga
https://adm.cc/docs/google-ads-skill/SKILL.mdaadm-google-ads/SKILL.mddentro del directorio de habilidades que leíste para todos los proyectos. El nombre de la carpeta debe seradm-google-ads. Crea los directorios que falten. Si no conoces ese directorio, usa el de nivel de proyecto:
| Herramienta de IA | Ruta del archivo de habilidad |
|---|---|
| Claude Code | ~/.claude/skills/adm-google-ads/SKILL.md |
| Codex | .agents/skills/adm-google-ads/SKILL.md |
| Cursor | .cursor/skills/adm-google-ads/SKILL.md |
| Windsurf | .windsurf/skills/adm-google-ads/SKILL.md |
- Prueba la conexión. Llama a
get_accountsen el servidoradm. Si la herramienta no está disponible hasta que reinicies, dilo. - Informa al usuario: dónde se guardaron la configuración del servidor y el archivo de habilidad, si se necesita un reinicio y las cuentas de Google Ads encontradas. Después de un reinicio, el usuario puede decir "Lista mis cuentas de Google Ads" para comprobarlo.
Actualizar la habilidad
El archivo de habilidad tiene una versión en su metadata. Cuando está desactualizada, get_accounts devuelve skill_update_hint y la herramienta de IA te lo dice una vez. Para actualizar, descarga https://adm.cc/docs/google-ads-skill/SKILL.md, reemplaza el adm-google-ads/SKILL.md local con él (misma ubicación que en el paso 2 anterior) y reinicia la herramienta de IA.
6. Referencia de herramientas
Las herramientas que actúan sobre una cuenta toman customer_id de get_accounts (formato 123-456-7890); get_operation, get_ad_group_draft y get_campaign_draft toman solo su propio ID. El dinero siempre está en la moneda de la cuenta como unidades principales, por ejemplo 5.00, nunca en micros. Las ventanas de informe (days) son 7, 14 o 30 días completos en la zona horaria de la cuenta, excluyendo hoy (predeterminado 7). Las herramientas de lista devuelven hasta limit filas (1 a 200, predeterminado 50) y un next_cursor para la siguiente página.
Herramientas de lectura
| Herramienta | Qué devuelve | Parámetros clave |
|---|---|---|
get_accounts | Cuentas conectadas (customer_id, nombre, moneda, zona horaria), tu plan, el alcance de la clave, si se permiten escrituras, creaciones de campañas restantes este mes y llamadas de escritura restantes hoy. Con skill_version, también indica si el archivo de habilidad necesita una actualización (skill_update_hint). Llámala primero. | skill_version |
get_campaigns | Campañas con configuraciones y rendimiento, ordenadas por costo. Las campañas eliminadas nunca se devuelven. | days, status (ENABLED o PAUSED), limit, cursor |
get_campaign_setup | La configuración de una campaña. include es cualquiera de ad_groups, keywords, ads, assets (predeterminado ad_groups,keywords,ads, sin activos). Con ad_groups, los activos de campaña permanecen en la campaña y los activos de grupo de anuncios permanecen en cada grupo de anuncios. assets solo devuelve ambos, y las filas de grupo de anuncios conservan level y ad_group_id. Los anuncios incluyen ad_strength. El id de palabra clave es el ID de criterio para set_keyword_status. device_bid_adjustments (solo distinto de cero; -100 excluye ese dispositivo) está en la campaña y en cada grupo de anuncios. | campaign_id, include |
get_ads | Anuncios de búsqueda responsivos con titulares, descripciones, fijaciones, performance_label por activo, fuerza del anuncio y rendimiento. text_contains coincide con titulares y descripciones. compact devuelve solo IDs y texto. id es el ID de anuncio para update_ads y set_ad_status. | campaign_id, days, text_contains, compact, limit, cursor |
get_keywords | Palabras clave en notación de Google con estado, puntuación de calidad, CPC máximo y rendimiento. Filtra con status, match_type y text_contains. id es el ID de criterio para set_keyword_status. | campaign_id, days, status, match_type, text_contains, limit, cursor |
get_search_terms | Consultas de búsqueda que activaron tus anuncios, con la palabra clave coincidente y el rendimiento. Como máximo las 10,000 filas principales por costo (truncated es verdadero cuando está limitado). | campaign_id, days, limit, cursor |
get_negative_keywords | Palabras clave negativas por nivel: cuenta, campaña, grupo de anuncios y listas compartidas (con IDs de lista y campañas adjuntas). Cada id de palabra clave es el ID de criterio para remove_negative_keywords. | campaign_id |
get_assets | Activos de enlace de sitio, llamada, fragmento estructurado, precio, imagen, promoción, llamada, nombre de negocio y logotipo de negocio. level es customer, campaign o ad_group (omítelo para los tres). También types, asset_ids, link_status, limit y cursor. asset_id es el ID para set_asset_link_status. | campaign_id, level, types, asset_ids, link_status, limit, cursor |
get_bidding_strategies | Estrategias de oferta (compartidas) de cartera: ID, nombre, tipo, CPA objetivo o ROAS, límite de CPC y las campañas en cada una. | ninguna |
get_device_performance | Rendimiento dividido por dispositivo (MOBILE, DESKTOP, TABLET), incluida la tasa de conversión, el costo por conversión y el ajuste de oferta actual (0 = ninguno, -100 = excluido). Solo campañas de búsqueda. level es campaign (predeterminado) o ad_group. | level, campaign_id, days, limit, cursor |
get_location_performance | Rendimiento dividido por dónde estaba el usuario. granularity es country, region (predeterminado) o city. bid_adjustment_percent se establece cuando esa ubicación está segmentada y la oferta no es 0. location_id se puede pasar a update_campaign_locations o set_location_bid_adjustments. | granularity, campaign_id, days, limit, cursor |
get_ad_groups | Grupos de anuncios con estado, campaña, CPC máximo, oferta, recuento de palabras clave y recuento de anuncios. | campaign_id, status, limit, cursor |
get_paused_summary | Cuántas campañas, grupos de anuncios, palabras clave y anuncios están en pausa, con IDs y nombres (200 por nivel). | ninguna |
find_negative_conflicts | Palabras clave positivas bloqueadas por una negativa a nivel de cuenta, lista compartida, campaña o grupo de anuncios. Opcionalmente, negatives y keywords hipotéticos (hasta 50) se verifican antes de añadirlos. | campaign_id, negatives, keywords, limit, cursor |
get_conversion_actions | Acciones de conversión: nombre, estado, tipo, categoría, principal (cuenta en la columna Conversiones), configuraciones de valor, recuento y atribución. include_metrics añade los últimos 30 días completos en la zona horaria de la cuenta, y la respuesta incluye date_range. | include_metrics |
get_customizers | Atributos de personalizador de anuncios y sus valores a nivel de cuenta, campaña y grupo de anuncios. Usa {CUSTOMIZER.Name:default} en el texto del anuncio; el límite de longitud cuenta el valor predeterminado. | ninguna |
get_operation | El resultado registrado de una llamada de escritura: pendiente, completado, parcial, fallido o desconocido, y los recursos que se crearon. | operation_id |
Herramientas de escritura
Cada herramienta de escritura se previsualiza primero. Llamada sin confirm, valida y devuelve una vista previa sin cambiar nada. Cada vista previa devuelve un preview_id. Después de la aprobación, llama a confirm_preview con ese preview_id, o llama a la misma herramienta nuevamente con argumentos idénticos más "confirm": true y ese preview_id. Una llamada confirmada sin preview_id devuelve invalid_argument. Un preview_id no confirmado de más de 30 minutos devuelve preview_required. Un preview_id que ya fue confirmado devuelve el resultado almacenado y no escribe nuevamente, incluso después de esos 30 minutos. Para hacer el mismo cambio nuevamente, previsualiza de nuevo y confirma con el nuevo preview_id después de la aprobación.
| Herramienta | Qué hace | Parámetros clave |
|---|---|---|
create_search_campaign | Crea una campaña de Search completa en una sola llamada: presupuesto, pujas, redes, ubicaciones, palabras clave negativas, listas compartidas, grupos de anuncios, palabras clave y anuncios de búsqueda responsivos. Siempre se crea en pausa. | campaign (consulta el ejemplo en sección 3) |
add_ad_groups | Añade grupos de anuncios con palabras clave, negativas y anuncios a una campaña de Search existente. Se crean en pausa a menos que status esté habilitado. | campaign_id, ad_groups, status |
add_keywords | Añade palabras clave, palabras clave en pausa y palabras clave negativas a nivel de grupo de anuncios a un grupo de anuncios. Las palabras clave existentes se reportan como exists. | ad_group_id, keywords, paused_keywords, negative_keywords |
add_ads | Añade de 1 a 3 anuncios de búsqueda responsivos a un grupo de anuncios existente (misma forma de anuncio que add_ad_groups, incluyendo path1 y path2). Un grupo admite como máximo 3, incluidos los anuncios en pausa. Un anuncio con los mismos titulares y descripciones que un anuncio existente se reporta como exists. Los anuncios nuevos están habilitados y se muestran después de la revisión de Google cuando el grupo y la campaña están habilitados. | ad_group_id, ads |
update_ads | Edita anuncios de búsqueda responsivos en el lugar. El ID del anuncio se mantiene. Hasta 20 anuncios, todos o ninguno. headlines y descriptions reemplazan la lista completa. headline_replacements y description_replacements ({from, to}) cambian un activo por su texto exacto y mantienen su fijación; un to vacío lo elimina. No combines un reemplazo con la lista completa en el mismo anuncio. | ads: {ad_id, headlines?, headline_replacements?, descriptions?, description_replacements?, final_url?, path1?, path2?} |
add_account_negative_keywords | Añade negativas a la lista a nivel de cuenta, lo que las bloquea en todas las campañas de Search, incluidas las que están en ejecución. | keywords (hasta 500) |
create_shared_negative_list | Crea una lista compartida de palabras clave negativas y opcionalmente la adjunta a campañas en la misma solicitud. | name, keywords (hasta 1,000), campaign_ids |
attach_shared_negative_list | Adjunta una lista compartida existente a campañas. | shared_list_id, campaign_ids |
add_sitelinks | Añade enlaces de sitio: texto de enlace de hasta 25 caracteres, dos descripciones opcionales de hasta 35 cada una (ambas o ninguna), URL final. | level, sitelinks, campaign_ids o ad_group_ids |
add_callouts | Añade destacados, hasta 25 cada uno. | level, callouts, campaign_ids o ad_group_ids |
add_structured_snippets | Añade fragmentos estructurados. header debe ser un encabezado oficial para language cuando se pasa uno (por ejemplo, alemán Marken, danés Typer). Sin language, se acepta cualquier traducción oficial; un idioma desconocido genera una advertencia y Google lo verifica al confirmar. De 3 a 10 valores, hasta 25 cada uno. | level, snippets (header, values, language), campaign_ids o ad_group_ids |
add_prices | Añade activos de precio con 3 a 8 ofertas. language_code debe ser uno de de, en, es, es-419, fr, it, ja, nl, pl, pt-BR, pt-PT, ru, sv. La moneda debe ser una que Google admita para activos de precio (USD, EUR, GBP y otras; no DKK ni NOK). | level, prices, campaign_ids o ad_group_ids |
add_promotions | Añade activos de promoción. promotion_target tiene como máximo 20 caracteres. Pasa exactamente uno de percent_off (30 = 30% de descuento) o money_amount_off con currency, en unidades principales. language_code y final_url son obligatorios. Opcional: occasion, discount_modifier UP_TO, uno de promotion_code o orders_over_amount (también necesita currency), y start_date / end_date (yyyy-MM-dd). | level, promotions, campaign_ids o ad_group_ids |
add_calls | Añade activos de llamada: country_code (2 letras) y phone_number. Opcional call_conversion_reporting_state; con USE_RESOURCE_LEVEL_CALL_CONVERSION_ACTION, un call_conversion_action_id opcional de get_conversion_actions (omitido = acción de conversión de llamada predeterminada de Google). | level, calls, campaign_ids o ad_group_ids |
add_business_name | Añade un activo de nombre de empresa, de hasta 25 caracteres. La publicación depende de las verificaciones de elegibilidad de Google; la vista previa las enumera. | level (customer o campaign), business_name, campaign_ids |
add_business_logo | Añade un logotipo de empresa desde un archivo subido (consulta Cargas de imágenes a continuación): cuadrado 1:1, al menos 128×128. La publicación depende de las verificaciones de elegibilidad de Google; la vista previa las enumera. | level (customer o campaign), logos (upload_id, opcional name), campaign_ids |
add_images | Añade activos de imagen a campañas de Search o grupos de anuncios desde archivos subidos (consulta Cargas de imágenes a continuación). Los resultados son por destino. | level (campaign o ad_group), images (upload_id, opcional name), campaign_ids o ad_group_ids |
set_campaign_status | Pausa o habilita hasta 50 campañas. Pasa campaign_id y status, o campaigns. La vista previa enumera cada presupuesto diario y el estimado diario y mensual añadido para campañas que no están ya habilitadas. Se advierte sobre campañas de CPC manual cuyos grupos de anuncios aún tienen un CPC máximo provisional (0.05 o menos). | campaign_id y status, o campaigns: {campaign_id, status} |
confirm_preview | Ejecuta una vista previa que el usuario aprobó. Pasa solo el preview_id. Los argumentos almacenados se reproducen, por lo que el hash y el registro de idempotencia son los mismos que al confirmar la herramienta original. | preview_id |
set_location_bid_adjustments | Establece un ajuste de puja en una ubicación que la campaña ya segmenta. -90 a 900, 0 lo elimina. No añade ni elimina ubicaciones. Las pujas inteligentes ignoran estos ajustes. | items: {campaign_id, location_id, adjustment_percent} |
set_customizer_values | Crea un atributo de personalizador de anuncios si es necesario (TEXT, NUMBER, PRICE, PERCENT) y establece su valor a nivel de cuenta, campaña o grupo de anuncios. | items: {name, type, value, level, campaign_id, ad_group_id} |
update_campaign | En un solo cambio atómico: renombra una campaña, la pausa y/o establece el presupuesto diario, las pujas o los idiomas. status solo acepta PAUSED. Se rechaza un presupuesto compartido. Pasar bidding mientras la campaña usa un portafolio lo desvincula: la campaña puja por su cuenta, y la vista previa nombra el portafolio que abandona. bidding.max_cpc es solo el límite máximo de Maximizar clics; MANUAL_CPC lo rechaza y las pujas de grupo de anuncios se establecen con update_ad_group. Las campañas de Search no pueden establecer idiomas (Google lo eliminó en septiembre de 2026); la vista previa lo indica y no cambia nada más en esa llamada. La vista previa del presupuesto muestra el monto diario anterior y nuevo y los estimados mensuales. | campaign_id, al menos uno de name, status (PAUSED), daily_budget, bidding, languages |
update_campaign_locations | Añade o elimina ubicaciones segmentadas y ubicaciones excluidas en una campaña, en un solo cambio atómico. Cada ubicación es {location_id} de get_campaign_setup o get_location_performance, o {country_code}. Eliminar una exclusión o añadir una segmentación amplía la entrega y puede aumentar el gasto; la vista previa lo indica cuando la campaña está ENABLED. Eliminar la última ubicación segmentada hace que la campaña segmente todas las ubicaciones excepto las exclusiones restantes. No se admiten segmentaciones por radio. | campaign_id, al menos uno de add_targets, remove_targets, add_exclusions, remove_exclusions |
set_device_bid_adjustments | Establece ajustes de puja por dispositivo en campañas de Search y grupos de anuncios (hasta 50), juntos o no en absoluto. device es MOBILE, DESKTOP o TABLET. -100 excluye ese dispositivo. -90 a 900 baja o sube la puja. 0 lo elimina (un grupo de anuncios entonces hereda la campaña). Un ajuste de grupo de anuncios anula la campaña. Maximizar conversiones, ROAS objetivo y Maximizar valor de conversión ignoran todos los valores excepto -100. En CPA objetivo, el ajuste cambia el CPA objetivo de ese dispositivo. Establecer los tres dispositivos en -100 se rechaza. | items: {level, campaign_id, ad_group_id, device, adjustment_percent} |
set_asset_link_status | Pausa, habilita o desvincula activos (hasta 300). REMOVED desvincula y no se puede deshacer; el activo en sí permanece. Un activo vinculado bajo más de un tipo de campo en ese nivel se cambia en cada enlace. Un enlace de sitio a nivel de cuenta aún puede mostrarse en campañas que ya tienen enlaces de sitio; la vista previa enumera cada campaña que puede afectar. Otros tipos de activos enumeran campañas que no tienen su propio activo de ese tipo. Los resultados son por enlace. | items: {level, asset_id, campaign_id, ad_group_id, status}. level es customer, campaign o ad_group. status es ENABLED, PAUSED o REMOVED |
create_bidding_strategy | Crea una estrategia de pujas de portafolio (TARGET_CPA, TARGET_ROAS, MAXIMIZE_CLICKS, MAXIMIZE_CONVERSIONS, MAXIMIZE_CONVERSION_VALUE). MANUAL_CPC se rechaza. max_cpc es un límite máximo de CPC opcional. Opcional campaign_ids (hasta 50) se adjuntan en el mismo cambio atómico. Las campañas ENABLED inician un período de aprendizaje. | name, bidding, campaign_ids |
attach_bidding_strategy | Adjunta campañas a un portafolio existente (hasta 50). Reemplaza las pujas propias de cada campaña. Una campaña en otro portafolio lo abandona. Los resultados son por campaña. | strategy_id, campaign_ids |
update_bidding_strategy | Renombra un portafolio y/o cambia su CPA objetivo, ROAS objetivo o límite máximo de CPC. El tipo no puede cambiar. El nuevo objetivo se aplica a cada campaña en el portafolio; la vista previa las enumera. | strategy_id, al menos uno de name, bidding |
update_ad_group | Renombra un grupo de anuncios, lo establece en PAUSED o ENABLED, y/o establece max_cpc, en un solo cambio atómico. No elimina el grupo de anuncios. max_cpc se cobra solo cuando la campaña usa MANUAL_CPC; la vista previa lo indica de lo contrario. Un grupo de anuncios habilitado gasta tan pronto como su campaña está habilitada. | ad_group_id, al menos uno de name, status (ENABLED o PAUSED), max_cpc |
set_ad_status | Establece anuncios en ENABLED, PAUSED o REMOVED (hasta 100). REMOVED no se puede deshacer. Un anuncio en pausa aún cuenta para los 3 anuncios de búsqueda responsivos que un grupo de anuncios puede contener. No cambia el estado de la campaña. Los resultados son por anuncio. | ads: {ad_group_id, ad_id, status} |
set_keyword_status | Establece palabras clave positivas en ENABLED, PAUSED o REMOVED (hasta 300). Las palabras clave negativas se rechazan. REMOVED no se puede deshacer. No cambia el estado de la campaña. Los resultados son por palabra clave. | keywords: {ad_group_id, criterion_id, status} |
set_ad_group_status | Establece grupos de anuncios en ENABLED, PAUSED o REMOVED (hasta 50). REMOVED no se puede deshacer. No cambia el estado de la campaña. Un grupo de anuncios habilitado gasta solo cuando su campaña ya está habilitada. | ad_groups: {ad_group_id, status} |
add_campaign_negative_keywords | Añade palabras clave negativas en una campaña, en notación de Google (hasta 500). Se aplican a cada grupo de anuncios, incluidos los grupos de anuncios creados posteriormente. Las negativas existentes son exists. | campaign_id, keywords |
remove_negative_keywords | Elimina palabras clave negativas (hasta 300). Solo se elimina una palabra clave negativa. Se rechaza un criterio de ubicación (update_campaign_locations); se rechaza un criterio de idioma (update_campaign). REMOVED no se puede deshacer. | items: {level, parent_id, criterion_id}. level es account, campaign, ad_group o shared_list. Para account, parent_id puede omitirse |
add_shared_negative_keywords | Agrega palabras clave negativas a una lista compartida existente (hasta 500). No crea una lista. Se rechaza la lista a nivel de cuenta. La vista previa nombra las campañas a las que la lista ya está adjunta. | shared_list_id, keywords |
remove_shared_negative_keywords | Elimina palabras clave de una lista compartida existente por ID de criterio (hasta 300). REMOVED no se puede deshacer. | shared_list_id, criterion_ids |
set_url_options | Establece parámetros personalizados, una plantilla de seguimiento y un sufijo de URL final en campañas, grupos de anuncios o anuncios. Los parámetros personalizados se combinan por clave (un valor vacío elimina esa clave). Una plantilla de seguimiento establecida aquí reemplaza la plantilla a nivel de cuenta para ese objetivo. No cambia ofertas, presupuestos ni estados. | level (campaign, ad_group o ad), targets (hasta 20: id, custom_parameters, tracking_template, final_url_suffix) |
level para las herramientas de activos es customer (todas las campañas), campaign o ad_group; add_images acepta solo campaign y ad_group; add_business_name y add_business_logo aceptan solo customer y campaign. set_url_options acepta campaign, ad_group o ad. Las herramientas de activos aceptan hasta 20 elementos y 20 objetivos por llamada; los activos añadidos a campañas en ejecución comienzan a mostrarse después de que Google los revise. |
Seguimiento de la campaña de la que proviene un clic
Cuando la cuenta de Google Ads ya tiene una plantilla de seguimiento, establece un parámetro personalizado en cada campaña, grupo de anuncios o anuncio en lugar de copiar esa plantilla en cada campaña. Una plantilla como {lpurl}?utm_campaign={_myname}&utm_term={keyword}&utm_ag={_groupname}&utm_ad={_adname} lee {_myname} de la campaña. El nombre del parámetro que almacenas es myname (sin guion bajo); myname, _myname y {_myname} son la misma clave. Establece _groupname a nivel de grupo de anuncios y _adname a nivel de anuncio de la misma manera.
{
"customer_id": "123-456-7890",
"level": "campaign",
"targets": [
{ "id": 111, "custom_parameters": [{ "key": "myname", "value": "s-en-us" }] }
]
}
Los demás parámetros personalizados que ya estén en esa campaña se mantienen. Pasa "value": "" para eliminar una clave. Omite tracking_template y final_url_suffix para dejarlos; pasa "" para borrar uno. Establecer una plantilla de seguimiento aquí reemplaza la plantilla a nivel de cuenta para ese objetivo, y la vista previa lo indica. Primero previsualiza y luego confirma con preview_id. Verifica url_options con get_campaign_setup (los anuncios también la listan en get_ads). Una llamada cambia todos los objetivos o ninguno. Cambiar las opciones de URL en un anuncio puede enviarlo de nuevo a revisión.
Borradores de grupos de anuncios con IA
draft_ad_groups redacta grupos de anuncios para una campaña de Búsqueda existente: ADM analiza la página de destino, agrupa las palabras clave por tema y genera anuncios de búsqueda responsivos para cada grupo. No cambia nada en Google Ads y necesita una clave de lectura y escritura y un plan de pago. El borrador se ejecuta en segundo plano, por lo que la llamada devuelve un draft_id de inmediato.
| Herramienta | Qué hace | Parámetros clave |
|---|---|---|
draft_ad_groups | Inicia un borrador y devuelve draft_id, status y poll_after_seconds. | campaign_id, landing_page_url, keywords (1 a 200), language, paused_keywords, group_name_prefix (hasta 100 caracteres), ads_per_group (1 a 3, predeterminado 1) |
get_ad_group_draft | El estado de un borrador: pending, running, done o failed. Cuando está listo: ad_groups, primary_ad_group y warnings. Cuando falla: error. | draft_id |
Cómo se usa un borrador:
- Llama a
draft_ad_groupsy luego aget_ad_group_draftcadapoll_after_secondshasta questatusseadoneofailed. Un borrador suele terminar en 1 a 3 minutos. - Pasa
ad_groupstextualmente aadd_ad_groupsy previsualízalo. Siadd_ad_groupsno está disponible ocan_writees falso, el borrador es el resultado final: presenta los grupos de anuncios al usuario. Los nombres de los grupos llevan el prefijo y la etiqueta de idioma. primary_ad_groupnombra al grupo con más palabras clave. También recibe las palabras clave pausadas, cualquier palabra clave que el borrador haya dejado sin asignar y las palabras clave de grupos adicionales cuando el borrador contiene más de 20 grupos. Añade anuncios escritos a mano (add_ads) y palabras clave negativas a nivel de grupo de anuncios (add_keywords) solo a este grupo.
Los borradores se conservan durante 24 horas. Cada borrador ejecuta varias llamadas de IA; el límite es de 60 borradores por hora por cuenta de ADM, compartido con draft_campaign. No repitas una llamada para la misma entrada mientras su borrador esté pendiente o en ejecución.
Borradores de IA de una campaña nueva
draft_campaign redacta una nueva campaña de Búsqueda a partir de una página de destino. ADM lee la página, explora palabras clave o usa las que pases, las agrupa por tema y escribe anuncios de búsqueda responsivos para cada grupo. No cambia nada en Google Ads. Cuando el borrador esté listo, pasa campaign textualmente a create_search_campaign (previsualiza primero). Necesita una clave de lectura y escritura y un plan de pago, y comparte el límite horario de borradores con draft_ad_groups. Crear la campaña sigue usando la cuota mensual de campañas, que create_search_campaign vuelve a verificar.
| Herramienta | Qué hace | Parámetros clave |
|---|---|---|
draft_campaign | Inicia un borrador y devuelve draft_id, status, poll_after_seconds y explore_keywords. | landing_page_url. Opcional: keywords (0 a 200; omítelo para explorar), explore_keywords (predeterminado falso cuando se establecen palabras clave; se ignora cuando se omiten), language (predeterminado en), country_code (predeterminado US), daily_budget, bidding (predeterminado MAXIMIZE_CONVERSIONS), campaign_name, business_goal (SALES, LEADS o TRAFFIC, predeterminado SALES; solo guía a la IA), ads_per_group (1 a 3, predeterminado 1) |
get_campaign_draft | El estado de un borrador: pending, running, done o failed. Cuando está listo: campaign, missing_fields, warnings y strategy_notes. Cuando falla: error. | draft_id |
Cómo se usa un borrador de campaña nueva:
- Llama a
draft_campaign. Omitekeywordspara que ADM explore palabras clave desde la página de destino. Pasakeywordspara usar solo esas palabras clave, o también estableceexplore_keywordsen verdadero para conservarlas y que ADM añada más. Luego llama aget_campaign_draftcadapoll_after_secondshasta questatusseadoneofailed. Un borrador suele terminar en 1 a 3 minutos. No inicies otro borrador para la misma entrada mientras uno esté pendiente o en ejecución. - En
failed, informaerrore inicia un nuevo borrador solo si el usuario está de acuerdo. Endone, muestra al usuario el nombre de la campaña, los grupos de anuncios y cualquierwarningsystrategy_notes. - Si
missing_fieldsno está vacío, pregunta al usuario por cada uno antes de crear la campaña.campaign.daily_budgetse deja vacío cuando no pasastedaily_budget; no inventes un presupuesto. Establece el valor encampaigndespués de que el usuario responda. - Pasa
campaigntextualmente acreate_search_campaigny previsualízalo. Sicreate_search_campaignno está disponible ocan_writees falso, el borrador es el resultado final: presenta el plan al usuario, quien puede crear la campaña en la aplicación web de ADM. El borrador ya apunta solo a Google Search, con el país decountry_code(predeterminadoUS) y la oferta que pasaste (predeterminado Maximizar conversiones). Confirma conpreview_iddespués de que el usuario lo apruebe. La nueva campaña permanece en pausa. - Verifica con
get_campaign_setup.
Los borradores se conservan durante 24 horas. Un id de borrador de draft_ad_groups no es visible para get_campaign_draft, y lo contrario también es cierto.
Cargas de imágenes
add_images vincula imágenes que se cargaron primero en ADM. Sube cada archivo como multipart/form-data en el campo file, con la misma clave de API:
curl -F [email protected] -H "Authorization: Bearer adm_xxx" https://app.adm.cc/mcp/uploads
En PowerShell, usa curl.exe con los mismos argumentos.
La carga acepta archivos JPG y PNG de hasta 5120 KB; el formato se detecta por el contenido del archivo, no por el nombre. La vista previa de add_images luego verifica las dimensiones: cuadrado 1:1 de al menos 300×300, o apaisado 1.91:1 de al menos 600×314, con 1% de tolerancia en la relación de aspecto. Las cargas necesitan una clave de lectura y escritura y un plan de pago, y cada carga cuenta como una llamada de escritura.
Respuesta (HTTP 200):
{
"upload_id": "upl_...",
"width": 1200,
"height": 628,
"bytes": 184320,
"sha256": "...",
"content_type": "image/jpeg",
"expires_at": "2026-10-01T09:30:00+00:00"
}
Un upload_id es válido durante 24 horas (expires_at) y solo para la cuenta de ADM que lo cargó. Después de que expire, add_images devuelve not_found: sube el archivo de nuevo y previsualiza de nuevo con el nuevo upload_id.
Los errores devuelven {"error": {...}} con code, message, field_path, fix y request_id:
| Estado HTTP | code | Causa |
|---|---|---|
| 400 | invalid_argument | La solicitud no es multipart/form-data, falta el campo file o el archivo está vacío |
| 401 | unauthorized | La clave de API falta o no es válida |
| 403 | permission_denied | La clave es de solo lectura o el plan no incluye acceso de escritura |
| 404 | ninguno | URL incorrecta (el endpoint es POST https://app.adm.cc/mcp/uploads en el subdominio app.), o las cargas aún no están disponibles en ADM alojado |
| 413 | invalid_argument | El archivo supera los 5120 KB |
| 415 | invalid_argument | El archivo no es una imagen JPG o PNG |
| 429 | quota_exceeded | Límite diario de seguridad alcanzado (UTC) |
Google muestra los activos de imagen solo para cuentas elegibles, por ejemplo cuentas que llevan abiertas al menos 60 días, tienen gasto reciente en Búsqueda y un buen historial de políticas, y no están en un sector sensible. Para otras cuentas, Google puede rechazar el vínculo o las imágenes pueden no mostrarse. Google también deduplica imágenes por contenido: una imagen idéntica ya existente en la cuenta se reutiliza, y una ya vinculada al objetivo se informa como exists.
Límites de validación
| Elemento | Límite |
|---|---|
| Grupos de anuncios por llamada | 20 |
| Anuncios por grupo de anuncios | 3 |
| Palabras clave | 300 por grupo de anuncios, 2,000 por llamada; cada una hasta 80 caracteres y 10 palabras |
| Palabras clave negativas | 1,000 por lista o campaña |
| Ubicaciones | 50 por campaña; cada una es country_code (ISO 3166-1 alpha-2) o location_id; al menos una debe ser un objetivo positivo |
Listas compartidas por llamada a create_search_campaign | 20 |
| Titulares | 3 a 15 por anuncio, ancho de visualización hasta 30 |
| Descripciones | 2 a 4 por anuncio, ancho de visualización hasta 90 |
| Ruta de visualización | path1 y path2, ancho de visualización hasta 15 cada una |
| Nombres | hasta 255 caracteres |
| Imágenes | JPG o PNG hasta 5120 KB; 1:1 de al menos 300×300 o 1.91:1 de al menos 600×314 (1% de tolerancia) |
| Borradores de IA | 0 a 200 palabras clave por borrador (un borrador de campaña nueva puede omitir palabras clave), 1 a 3 anuncios por grupo |
El ancho de visualización cuenta los caracteres CJK como 2. Los emojis se rechazan. Los pines usan valores pinned_field de HEADLINE_1 a HEADLINE_3, DESCRIPTION_1 y DESCRIPTION_2.
La oferta type es uno de MANUAL_CPC, MAXIMIZE_CLICKS, MAXIMIZE_CONVERSIONS, MAXIMIZE_CONVERSION_VALUE, TARGET_CPA y TARGET_ROAS. MANUAL_CPC requiere max_cpc en la campaña o en cada grupo de anuncios; con MAXIMIZE_CLICKS, max_cpc es el límite de CPC. network_settings.google_search debe ser verdadero.
campaign.languages se acepta pero no se aplica: las campañas de Búsqueda se crean sin segmentación por idioma a nivel de campaña. Usa el campo language del grupo de anuncios para registrar el idioma del anuncio.
7. Códigos de error
Los errores devuelven una estructura:
{
"code": "invalid_argument",
"message": "What went wrong",
"field_path": "campaign.ad_groups[0].ads[0].headlines[3].text",
"fix": "How to correct it",
"retryable": false,
"retry_after_seconds": null,
"action_url": null,
"request_id": "..."
}
| Código | Significado | Qué hacer |
|---|---|---|
invalid_argument | Falta un campo, está fuera de rango o es demasiado largo | Corrige cada campo indicado en field_path y previsualiza de nuevo |
account_not_found | El customer_id no está conectado a tu cuenta de ADM | Usa un customer_id de get_accounts, o conecta la cuenta en ADM |
not_found | La campaña, el grupo de anuncios, la lista o la operación no existe | Vuelve a buscar el ID con una herramienta de lectura |
permission_denied | La clave es de solo lectura, o el plan no incluye acceso de escritura | Crea una clave de lectura y escritura, o mejora el plan (action_url) |
quota_exceeded | No quedan creaciones de campañas este mes en tu plan, o se alcanzó un límite diario de seguridad | Mejora el plan (creaciones mensuales) o espera al reinicio indicado en el error |
preview_required | confirm: true o confirm_preview usaron un preview_id que nunca se confirmó y no tiene una previsualización guardada de los últimos 30 minutos | Previsualiza de nuevo, obtén la aprobación y confirma con el nuevo preview_id. Si este preview_id ya se confirmó, llama a confirm_preview de nuevo; eso devuelve el resultado guardado |
conflict | Ya existe un recurso con el mismo nombre pero contenido diferente | Revisa el recurso existente; no lo renombres ni lo recrees |
busy | Hay otra escritura en esta cuenta de Google Ads en ejecución | Espera retry_after_seconds y vuelve a intentarlo |
reauth_required | La autorización de Google para ADM ha caducado | Vuelve a conectar Google Ads en ADM (action_url) |
google_ads_error | Google Ads rechazó el cambio (política o validación) | Lee el motivo de Google en message y ajusta |
result_unknown | La llamada expiró o se interrumpió y se desconoce el resultado | Llama a get_operation o get_campaign_setup primero; si falta el cambio, previsualiza de nuevo y confirma con el nuevo preview_id después de la aprobación |
internal | Error del servidor | Reintenta una vez; contacta con soporte con request_id si se repite |
El HTTP 401 (unauthorized) se devuelve antes de que se ejecute cualquier herramienta cuando la clave falta o no es válida. Consulta la tabla de resolución de problemas en sección 4.
Cada llamada a una herramienta devuelve un resultado en menos de 45 segundos. Las lecturas grandes se pueden acotar con campaign_id.
8. Cuotas
| Cuota | Gratis | Starter | Profesional | Enterprise |
|---|---|---|---|---|
| Herramientas de lectura | Sí | Sí | Sí | Sí |
| Herramientas de escritura | No | Sí | Sí | Sí |
| Creaciones de campañas al mes | 1 (solo web) | 10 | 30 | 100 |
| Llamadas de escritura al día (UTC) | No disponible | 3.000 | 3.000 | 3.000 |
| Borradores de IA por hora | No disponible | 60 | 60 | 60 |
- El recuento mensual de creaciones se comparte con las campañas creadas en el asistente web de ADM y se reinicia en tu fecha de facturación.
get_accountsmuestra el recuento restante y la hora de reinicio. Cuando se agota, el error indica tu plan, su recuento mensual y el recuento del siguiente plan; mejorar el plan elimina el límite de inmediato. - Una llamada de escritura es cualquier llamada con
confirm: true, además de cada carga de imagen. Las previsualizaciones no cuentan. - Los límites diarios (llamadas de escritura, elementos de escritura, elementos de previsualización y consultas a Google Ads) son límites de seguridad contra la automatización descontrolada, establecidos muy por encima del uso normal e iguales en todos los planes de pago. Se reinician a las 00:00 UTC.
- Los borradores de IA (
draft_ad_groupsydraft_campaign) comparten un límite por hora y no cuentan como llamadas de escritura.draft_campaignno usa una creación mensual de campañas por sí solo;create_search_campaignsí. - El acceso de escritura necesita una clave de lectura y escritura y un plan de pago activo.
9. Por qué las herramientas de escritura no deberían aprobarse automáticamente
Varias herramientas de lectura devuelven texto escrito por otras personas: los términos de búsqueda los escribe cualquiera que vea tus anuncios, y el texto del anuncio, el texto de los activos y los nombres pueden provenir de colegas o agencias. Un término de búsqueda puede contener palabras que parezcan una instrucción para la herramienta de IA. ADM etiqueta este contenido como datos y pide a la herramienta de IA que ignore las instrucciones que contenga, pero ningún modelo de IA garantiza que cumpla esa regla siempre.
El mensaje de aprobación de las herramientas de escritura es el paso donde ves exactamente qué cambiará. Mantenlo activo:
- Aprueba automáticamente solo las herramientas de lectura. En Claude Code, permite solo
mcp__adm__get_*; no añadasmcp__adm__*ni herramientas de escritura individuales a la lista de permitidos. - No ejecutes la herramienta de IA con los mensajes de aprobación desactivados mientras el servidor de ADM esté conectado.
- Lee cada previsualización antes de aprobar, especialmente presupuestos,
update_ads(editar el texto del anuncio lo envía de nuevo a revisión) y llamadas que establezcan un estado a ENABLED (set_campaign_status,update_ad_group,set_ad_group_status,set_ad_status,set_keyword_status).update_campaignno puede habilitar una campaña.REMOVEDno se puede deshacer.
10. Rotación de claves
- Crea una nueva clave en la página de claves de API.
- Reemplaza la clave: actualiza
ADM_API_KEY, o la clave en la configuración MCP de la herramienta de IA, y reinicia la herramienta de IA. Claude Code guarda la cabecera cuando se añade el servidor, así que ejecutaclaude mcp remove admy añade el servidor de nuevo (sección 4). - Repite el paso 2 en cada ordenador que use la clave antigua.
- Observa la hora de "Último uso" de la clave antigua. Cuando deje de cambiar, revoca la clave antigua.
Trata una clave como una contraseña. No la confirmes en un repositorio ni la escribas en archivos del proyecto. Una clave pegada en un chat permanece en el historial de la conversación; rótala si ese historial puede ser visto por otros. Si una clave puede haberse filtrado, revócala de inmediato.
11. Cambios que haces en Google Ads
Las herramientas crean y añaden. También pueden pausar una campaña, cambiar su nombre, presupuesto diario, pujas e idiomas (excepto en Search), añadir o eliminar sus ubicaciones, establecer ajustes de oferta por dispositivo (incluida la exclusión de móviles), crear, adjuntar y reorientar una estrategia de puja compartida de cartera, renombrar, pausar, habilitar, reofertar o eliminar un grupo de anuncios, habilitar, pausar o eliminar anuncios y palabras clave positivas, editar los titulares, descripciones, URL final y rutas de un anuncio de búsqueda adaptable existente, añadir o eliminar palabras clave negativas, pausar o desvincular activos, y establecer opciones de URL (parámetros personalizados, plantilla de seguimiento, sufijo de URL final) en una campaña, grupo de anuncios o anuncio. Habilitar una campaña es solo set_campaign_status. REMOVED no se puede deshacer. Haz estos cambios directamente en Google Ads:
- Eliminar un activo no utilizado de la biblioteca de activos (desvincularlo es
set_asset_link_status) - Establecer la segmentación por idioma en una campaña de Search (Google lo eliminó en septiembre de 2026; la campaña se dirige a todos los idiomas)
- Desactivar las recomendaciones de aplicación automática (Recomendaciones, luego Aplicación automática)
- Configurar el seguimiento de conversiones
- Añadir activos de formulario de contacto, mensaje de negocio, aplicación móvil y ubicación
- Establecer la programación de anuncios y los segmentos de audiencia
- Crear tipos de campaña distintos de Search, como Performance Max
- Gestionar la facturación y completar la verificación del anunciante
12. Historial de cambios
2026-10-08
- ADM alojado ahora ofrece las herramientas de lectura y los borradores de IA (
draft_campaign,draft_ad_groups). Las herramientas de escritura aún no están disponibles allí; cuando falten, un borrador se presenta como un plan en lugar de crearse. get_accountsaceptaskill_versiony devuelveskill_latest_version,skill_update_hint,upgrade_hintyupgrade_url(solo campos nuevos, sin cambios importantes; la versión del contrato sigue siendo2026-10-03). Versión del archivo de habilidades2026-10-08: consulta Actualizar la habilidad.
2026-10-05
- Añadido (solo herramientas nuevas, sin cambios importantes):
add_promotions,add_calls,add_business_name,add_business_logo.get_assetstypestambién aceptapromotion,call,business_nameybusiness_logo, yset_asset_link_statuslos pausa, habilita o desvincula.
2026-10-04
- Añadido:
get_ad_groups,get_paused_summary,find_negative_conflicts,get_conversion_actions,get_customizers,confirm_preview,set_location_bid_adjustments,set_customizer_values.get_campaignsahora incluye CPA objetivo, ROAS objetivo y la estrategia de cartera.get_assetsfiltra porlevel,types,asset_idsylink_statusy pagina conlimit/cursor.get_keywordsfiltra porstatus,match_typeytext_contains.get_adsañadetext_contains,compacty unperformance_labelen cada titular y descripción.get_location_performanceincluyebid_adjustment_percentpara una ubicación específica. - Cambio de comportamiento:
get_campaign_setupya no devuelve activos a menos queincludecontengaassets. La inclusión predeterminada esad_groups,keywordsyads. Los anuncios incluyenad_strength. set_campaign_statusacepta hasta 50 campañas y la previsualización totaliza el presupuesto diario de las campañas que aún no están habilitadas. Habilitar una campaña de CPC manual advierte cuando el CPC máximo de un grupo de anuncios sigue siendo un marcador de posición (0,05 o menos).update_adsaceptaheadline_replacementsydescription_replacements.add_pricesrechaza idiomas y monedas no compatibles en la previsualización.add_structured_snippetscompara la cabecera con la traducción oficial del idioma que pasas. Las previsualizaciones de escritura de palabras clave incluyencampaign_nameyad_group_name. Después de la aprobación,confirm_previewejecuta una previsualización solo desde supreview_id.- Añadido (solo herramientas nuevas, sin cambios importantes):
get_device_performance,set_device_bid_adjustments,get_location_performance.get_campaign_setupahora incluyedevice_bid_adjustmentsen la campaña y en cada grupo de anuncios. Excluir una ubicación sigue usandoupdate_campaign_locations. - Añadido (solo herramientas nuevas, sin cambios importantes):
update_campaign_locations,set_asset_link_status,get_bidding_strategies,create_bidding_strategy,attach_bidding_strategy,update_bidding_strategy. update_campaignya no rechaza una estrategia de cartera. Pasarbiddingdesvincula la campaña de la cartera y la previsualización nombra la cartera que abandona.
2026-10-03
- Versión del contrato
2026-10-03. Cambio importante:update_campaignstatusacepta soloPAUSED. Habilitar una campaña es soloset_campaign_status, después de una solicitud explícita.REMOVEDno se puede deshacer. - Añadido:
set_ad_status,set_keyword_status,set_ad_group_status,add_campaign_negative_keywords,remove_negative_keywords,add_shared_negative_keywords,remove_shared_negative_keywords. Los resultados por lotes son por elemento; un fallo no deshace los elementos que tuvieron éxito. - Añadido
update_ads(solo herramienta nueva, sin cambios importantes; la versión del contrato sigue siendo2026-10-03): editar un anuncio de búsqueda adaptable en su lugar. El ID del anuncio y su historial de rendimiento se mantienen. No elimines el anuncio ni añadas un reemplazo. - Ampliado
update_campaigncondaily_budget(rechazado en un presupuesto compartido),bidding(rechazado en una estrategia de cartera) ylanguages(lista vacía significa todos los idiomas; las campañas de Search se rechazan y nada más en esa llamada se cambia). Ampliadoupdate_ad_groupconmax_cpc. Las palabras clave deget_campaign_setupahora incluyenid(el ID del criterio). - Añadido en la versión del contrato
2026-09-30(solo herramientas nuevas, sin cambios importantes):draft_campaignyget_campaign_draft. ADM redacta una nueva campaña de Search desde una página de destino, incluida la exploración de palabras clave, la agrupación y los anuncios de búsqueda adaptables. Pasa elcampaignterminado acreate_search_campaign. El límite de borradores por hora se comparte condraft_ad_groups. - Añadido en la versión del contrato
2026-09-30(solo herramientas nuevas, sin cambios importantes): herramientas de escrituraupdate_campaignyupdate_ad_group. Renombra una campaña o grupo de anuncios y/o pausa o habilítalo en un solo cambio atómico, por ejemplo para indicar por qué se pausó.set_campaign_statussigue funcionando sin cambios. - Añadido en la versión del contrato
2026-09-30(solo herramienta y campos nuevos, sin cambios importantes): herramienta de escrituraset_url_options. Establece parámetros personalizados (fusionados por clave), una plantilla de seguimiento y un sufijo de URL final en campañas, grupos de anuncios o anuncios, para que una plantilla de seguimiento a nivel de cuenta pueda registrar de cuál proviene un clic.get_campaign_setupyget_adsdevuelvenurl_optionscuando se establece cualquiera de los tres.
2026-09-30
- Primera versión del servidor MCP de ADM, versión de contrato
2026-09-30. - 9 herramientas de lectura:
get_accounts,get_campaigns,get_campaign_setup,get_ads,get_keywords,get_search_terms,get_negative_keywords,get_assets,get_operation. - 11 herramientas de escritura:
create_search_campaign,add_ad_groups,add_keywords,add_account_negative_keywords,create_shared_negative_list,attach_shared_negative_list,add_sitelinks,add_callouts,add_structured_snippets,add_prices,set_campaign_status. - Habilidad ADM
adm-google-adspara crear campañas a partir de un plan (sección 3). - Añadido en la misma versión de contrato (solo herramientas y campos nuevos, sin cambios disruptivos): herramientas de escritura
add_adsyadd_images, herramientas de borrador con IAdraft_ad_groupsyget_ad_group_draft, el endpoint de carga de imágenesPOST /mcp/uploads, y activos de imagen enget_assetsyget_campaign_setup. La habilidad añade los flujos de trabajo de borrador con IA e imágenes. - Documentación trasladada a
/docs/google-ads-skill. La habilidad añade informes y preguntas, una cuenta predeterminada guardada por proyecto, y configuración para Codex, Cursor y Windsurf; las instrucciones del servidor añaden la misma regla de cuenta predeterminada. En el primer uso en un proyecto, la habilidad sugiere indicaciones que el usuario puede copiar.