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 carpeta adm-google-ads)
  • Servidor MCP: https://app.adm.cc/mcp (Streamable HTTP), autenticado con una clave API de ADM enviada como Authorization: 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 pidesHerramientas de ADM
Elegir o cambiar la cuenta de Google Adsget_accounts
Informes y preguntas sobre rendimientoget_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 tabletaset_device_bid_adjustments
Ver qué ubicaciones gastaron y convirtieronget_location_performance, set_location_bid_adjustments
Confirmar una vista previa solo con su idconfirm_preview
Crear campañas a partir de un plancreate_search_campaign, add_ad_groups, add_keywords, add_ads
Palabras clave negativasadd_account_negative_keywords, create_shared_negative_list, attach_shared_negative_list
Vínculos de sitio, destacados, fragmentos estructurados, precios, promociones y llamadasadd_sitelinks, add_callouts, add_structured_snippets, add_prices, add_promotions, add_calls
Nombre de la empresaadd_business_name
Activos de imagen y logotipos de empresaEndpoint de carga POST https://app.adm.cc/mcp/uploads, luego add_images o add_business_logo
Grupos de anuncios redactados por la IA de ADMdraft_ad_groups, get_ad_group_draft
Una campaña nueva redactada por la IA de ADMdraft_campaign, get_campaign_draft, luego create_search_campaign
Verificar una creación y reanudar tras una interrupciónget_campaign_setup, get_operation
Habilitar o pausar una campañaset_campaign_status
Pausar una campaña, o cambiar su nombre, presupuesto diario, ofertas o idiomasupdate_campaign
Añadir o eliminar ubicaciones segmentadas o excluidasupdate_campaign_locations
Crear, adjuntar o cambiar una estrategia de ofertas de cartera compartidaget_bidding_strategies, create_bidding_strategy, attach_bidding_strategy, update_bidding_strategy
Pausar o desvincular un activoset_asset_link_status
Renombrar, pausar, habilitar o cambiar ofertas de un grupo de anunciosupdate_ad_group, set_ad_group_status
Editar el texto de un anuncio existenteupdate_ads
Habilitar, pausar o eliminar anuncios o palabras claveset_ad_status, set_keyword_status
Añadir o eliminar palabras clave negativasadd_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 finalset_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 anuncios photo-enhancer-DE
  • Página de destino https://www.example.com/de/photo-enhancer, ruta de visualización foto / 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 como photo-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_keywords una vez por cuenta, create_shared_negative_list una vez por lista, luego attach_shared_negative_list para 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íntomaCausaSolución
HTTP 401La clave falta, está mal escrita o tiene espacios al principio o al finalComprueba 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 401La clave fue revocada en la página de claves de APICrea una nueva clave y actualiza la configuración (sección 10)
HTTP 401 en WindowsEl 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 variableLa herramienta de IA se inició antes de que se estableciera la variableCierra 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 404La URL es incorrectaLa URL debe ser exactamente https://app.adm.cc/mcp: https, el subdominio app. y la ruta /mcp
Tiempo de espera agotado o conexión rechazadaUn proxy corporativo o un firewall bloquea la solicitudEstablece 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.

  1. 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 llamado adm, reemplázalo.
Herramienta de IACómo añadir el servidor
Claude CodeEjecuta claude mcp add --transport http --scope user adm https://app.adm.cc/mcp --header "Authorization: Bearer <key>"
CodexEn ~/.codex/config.toml añade [mcp_servers.adm] con url = "https://app.adm.cc/mcp" y http_headers = { "Authorization" = "Bearer <key>" }
CursorEn ~/.cursor/mcp.json añade "adm": { "url": "https://app.adm.cc/mcp", "headers": { "Authorization": "Bearer <key>" } } bajo mcpServers
WindsurfEn ~/.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.

  1. Guarda la habilidad. Descarga https://adm.cc/docs/google-ads-skill/SKILL.md a adm-google-ads/SKILL.md dentro del directorio de habilidades que leíste para todos los proyectos. El nombre de la carpeta debe ser adm-google-ads. Crea los directorios que falten. Si no conoces ese directorio, usa el de nivel de proyecto:
Herramienta de IARuta 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
  1. Prueba la conexión. Llama a get_accounts en el servidor adm. Si la herramienta no está disponible hasta que reinicies, dilo.
  2. 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

HerramientaQué devuelveParámetros clave
get_accountsCuentas 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_campaignsCampañas con configuraciones y rendimiento, ordenadas por costo. Las campañas eliminadas nunca se devuelven.days, status (ENABLED o PAUSED), limit, cursor
get_campaign_setupLa 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_adsAnuncios 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_keywordsPalabras 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_termsConsultas 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_keywordsPalabras 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_assetsActivos 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_strategiesEstrategias 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_performanceRendimiento 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_performanceRendimiento 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_groupsGrupos 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_summaryCuántas campañas, grupos de anuncios, palabras clave y anuncios están en pausa, con IDs y nombres (200 por nivel).ninguna
find_negative_conflictsPalabras 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_actionsAcciones 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_customizersAtributos 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_operationEl 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.

HerramientaQué haceParámetros clave
create_search_campaignCrea 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_groupsAñ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_keywordsAñ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_adsAñ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_adsEdita 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_keywordsAñ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_listCrea 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_listAdjunta una lista compartida existente a campañas.shared_list_id, campaign_ids
add_sitelinksAñ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_calloutsAñade destacados, hasta 25 cada uno.level, callouts, campaign_ids o ad_group_ids
add_structured_snippetsAñ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_pricesAñ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_promotionsAñ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_callsAñ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_nameAñ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_logoAñ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_imagesAñ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_statusPausa 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_previewEjecuta 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_adjustmentsEstablece 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_valuesCrea 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_campaignEn 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_locationsAñ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_adjustmentsEstablece 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_statusPausa, 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_strategyCrea 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_strategyAdjunta 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_strategyRenombra 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_groupRenombra 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_statusEstablece 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_statusEstablece 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_statusEstablece 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_keywordsAñ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_keywordsElimina 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_keywordsAgrega 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_keywordsElimina 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_optionsEstablece 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.

HerramientaQué haceParámetros clave
draft_ad_groupsInicia 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_draftEl 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:

  1. Llama a draft_ad_groups y luego a get_ad_group_draft cada poll_after_seconds hasta que status sea done o failed. Un borrador suele terminar en 1 a 3 minutos.
  2. Pasa ad_groups textualmente a add_ad_groups y previsualízalo. Si add_ad_groups no está disponible o can_write es 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.
  3. primary_ad_group nombra 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.

HerramientaQué haceParámetros clave
draft_campaignInicia 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_draftEl 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:

  1. Llama a draft_campaign. Omite keywords para que ADM explore palabras clave desde la página de destino. Pasa keywords para usar solo esas palabras clave, o también establece explore_keywords en verdadero para conservarlas y que ADM añada más. Luego llama a get_campaign_draft cada poll_after_seconds hasta que status sea done o failed. 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.
  2. En failed, informa error e inicia un nuevo borrador solo si el usuario está de acuerdo. En done, muestra al usuario el nombre de la campaña, los grupos de anuncios y cualquier warnings y strategy_notes.
  3. Si missing_fields no está vacío, pregunta al usuario por cada uno antes de crear la campaña. campaign.daily_budget se deja vacío cuando no pasaste daily_budget; no inventes un presupuesto. Establece el valor en campaign después de que el usuario responda.
  4. Pasa campaign textualmente a create_search_campaign y previsualízalo. Si create_search_campaign no está disponible o can_write es 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 de country_code (predeterminado US) y la oferta que pasaste (predeterminado Maximizar conversiones). Confirma con preview_id después de que el usuario lo apruebe. La nueva campaña permanece en pausa.
  5. 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 HTTPcodeCausa
400invalid_argumentLa solicitud no es multipart/form-data, falta el campo file o el archivo está vacío
401unauthorizedLa clave de API falta o no es válida
403permission_deniedLa clave es de solo lectura o el plan no incluye acceso de escritura
404ningunoURL 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
413invalid_argumentEl archivo supera los 5120 KB
415invalid_argumentEl archivo no es una imagen JPG o PNG
429quota_exceededLí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

ElementoLímite
Grupos de anuncios por llamada20
Anuncios por grupo de anuncios3
Palabras clave300 por grupo de anuncios, 2,000 por llamada; cada una hasta 80 caracteres y 10 palabras
Palabras clave negativas1,000 por lista o campaña
Ubicaciones50 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_campaign20
Titulares3 a 15 por anuncio, ancho de visualización hasta 30
Descripciones2 a 4 por anuncio, ancho de visualización hasta 90
Ruta de visualizaciónpath1 y path2, ancho de visualización hasta 15 cada una
Nombreshasta 255 caracteres
ImágenesJPG 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 IA0 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ódigoSignificadoQué hacer
invalid_argumentFalta un campo, está fuera de rango o es demasiado largoCorrige cada campo indicado en field_path y previsualiza de nuevo
account_not_foundEl customer_id no está conectado a tu cuenta de ADMUsa un customer_id de get_accounts, o conecta la cuenta en ADM
not_foundLa campaña, el grupo de anuncios, la lista o la operación no existeVuelve a buscar el ID con una herramienta de lectura
permission_deniedLa clave es de solo lectura, o el plan no incluye acceso de escrituraCrea una clave de lectura y escritura, o mejora el plan (action_url)
quota_exceededNo quedan creaciones de campañas este mes en tu plan, o se alcanzó un límite diario de seguridadMejora el plan (creaciones mensuales) o espera al reinicio indicado en el error
preview_requiredconfirm: true o confirm_preview usaron un preview_id que nunca se confirmó y no tiene una previsualización guardada de los últimos 30 minutosPrevisualiza 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
conflictYa existe un recurso con el mismo nombre pero contenido diferenteRevisa el recurso existente; no lo renombres ni lo recrees
busyHay otra escritura en esta cuenta de Google Ads en ejecuciónEspera retry_after_seconds y vuelve a intentarlo
reauth_requiredLa autorización de Google para ADM ha caducadoVuelve a conectar Google Ads en ADM (action_url)
google_ads_errorGoogle Ads rechazó el cambio (política o validación)Lee el motivo de Google en message y ajusta
result_unknownLa llamada expiró o se interrumpió y se desconoce el resultadoLlama 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
internalError del servidorReintenta 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

CuotaGratisStarterProfesionalEnterprise
Herramientas de lecturaSíSíSíSí
Herramientas de escrituraNoSíSíSí
Creaciones de campañas al mes1 (solo web)1030100
Llamadas de escritura al día (UTC)No disponible3.0003.0003.000
Borradores de IA por horaNo disponible606060
  • 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_accounts muestra 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_groups y draft_campaign) comparten un límite por hora y no cuentan como llamadas de escritura. draft_campaign no usa una creación mensual de campañas por sí solo; create_search_campaign sí.
  • 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ñadas mcp__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_campaign no puede habilitar una campaña. REMOVED no se puede deshacer.

10. Rotación de claves

  1. Crea una nueva clave en la página de claves de API.
  2. 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 ejecuta claude mcp remove adm y añade el servidor de nuevo (sección 4).
  3. Repite el paso 2 en cada ordenador que use la clave antigua.
  4. 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_accounts acepta skill_version y devuelve skill_latest_version, skill_update_hint, upgrade_hint y upgrade_url (solo campos nuevos, sin cambios importantes; la versión del contrato sigue siendo 2026-10-03). Versión del archivo de habilidades 2026-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_assets types también acepta promotion, call, business_name y business_logo, y set_asset_link_status los 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_campaigns ahora incluye CPA objetivo, ROAS objetivo y la estrategia de cartera. get_assets filtra por level, types, asset_ids y link_status y pagina con limit / cursor. get_keywords filtra por status, match_type y text_contains. get_ads añade text_contains, compact y un performance_label en cada titular y descripción. get_location_performance incluye bid_adjustment_percent para una ubicación específica.
  • Cambio de comportamiento: get_campaign_setup ya no devuelve activos a menos que include contenga assets. La inclusión predeterminada es ad_groups, keywords y ads. Los anuncios incluyen ad_strength.
  • set_campaign_status acepta 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_ads acepta headline_replacements y description_replacements. add_prices rechaza idiomas y monedas no compatibles en la previsualización. add_structured_snippets compara la cabecera con la traducción oficial del idioma que pasas. Las previsualizaciones de escritura de palabras clave incluyen campaign_name y ad_group_name. Después de la aprobación, confirm_preview ejecuta una previsualización solo desde su preview_id.
  • Añadido (solo herramientas nuevas, sin cambios importantes): get_device_performance, set_device_bid_adjustments, get_location_performance. get_campaign_setup ahora incluye device_bid_adjustments en la campaña y en cada grupo de anuncios. Excluir una ubicación sigue usando update_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_campaign ya no rechaza una estrategia de cartera. Pasar bidding desvincula 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_campaign status acepta solo PAUSED. Habilitar una campaña es solo set_campaign_status, después de una solicitud explícita. REMOVED no 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 siendo 2026-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_campaign con daily_budget (rechazado en un presupuesto compartido), bidding (rechazado en una estrategia de cartera) y languages (lista vacía significa todos los idiomas; las campañas de Search se rechazan y nada más en esa llamada se cambia). Ampliado update_ad_group con max_cpc. Las palabras clave de get_campaign_setup ahora incluyen id (el ID del criterio).
  • Añadido en la versión del contrato 2026-09-30 (solo herramientas nuevas, sin cambios importantes): draft_campaign y get_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 el campaign terminado a create_search_campaign. El límite de borradores por hora se comparte con draft_ad_groups.
  • Añadido en la versión del contrato 2026-09-30 (solo herramientas nuevas, sin cambios importantes): herramientas de escritura update_campaign y update_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_status sigue funcionando sin cambios.
  • Añadido en la versión del contrato 2026-09-30 (solo herramienta y campos nuevos, sin cambios importantes): herramienta de escritura set_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_setup y get_ads devuelven url_options cuando 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-ads para 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_ads y add_images, herramientas de borrador con IA draft_ad_groups y get_ad_group_draft, el endpoint de carga de imágenes POST /mcp/uploads, y activos de imagen en get_assets y get_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.