Skip to main content
Glama
mercuryadvising

Adobe Launch / Tags MCP Server

Servidor MCP de Adobe Launch / Tags

Un servidor MCP que envuelve la API de Reactor de Adobe Experience Platform — la API detrás de Adobe Launch, ahora llamado Adobe Experience Platform Tags.

Proporciona a un asistente acceso de lectura a tus propiedades de etiquetas, reglas, elementos de datos, extensiones, bibliotecas y entornos, además de la capacidad de realizar cambios. No publica nada por defecto. Nada de lo que hace este servidor llega a un sitio en vivo a menos que habilites explícitamente el modo dangerous y apruebes una compilación.

¿Se lo presentas a alguien? Consulta DEMO.md para un recorrido de 10 minutos.


Por qué existe esto

La API de Reactor es una superficie JSON:API con ~240 endpoints y algunos bordes afilados que la hacen incómoda de entregar a un modelo en bruto:

  • La configuración de delegados se almacena en un atributo settings que es una cadena codificada en JSON, no un objeto. Pasar un objeto devuelve un 422 críptico.

  • Los recursos son pesados: un componente de regla lleva unos 20 campos de auditoría, por lo que una lista de 200 reglas saturará una ventana de contexto.

  • Las reglas no tienen sentido sin sus componentes de regla, que viven en un endpoint separado.

  • La creación y la publicación son preocupaciones completamente separadas, y es fácil confundirlas.

Este envoltorio maneja las cuatro: codifica y decodifica settings, da forma a las respuestas para que solo importe lo esencial, une las reglas con sus componentes y limita la publicación detrás de una aceptación explícita.


Related MCP server: adobe-custom

Configuración

1. Crear una credencial OAuth Server-to-Server

Adobe retiró el flujo de Service Account (JWT) el 1 de enero de 2025. Necesitas una credencial OAuth Server-to-Server.

  1. Ve a la Adobe Developer Console e inicia sesión.

  2. Crea un nuevo proyecto (o abre uno existente).

  3. Add API → selecciona Adobe Experience Platform Launch API (listada bajo Experience Cloud).

  4. Elige OAuth Server-to-Server como tipo de autenticación.

  5. Selecciona el/los perfil(es) de producto que otorgan acceso a las propiedades que te interesan. Los perfiles de producto se gestionan en Adobe Admin Console; si no eres administrador, pregunta al tuyo qué perfil cubre tus propiedades. Esta es la causa más común de resultados vacíos o 403 — la credencial puede autenticarse correctamente y aun así no ver nada.

  6. Desde la página de la credencial, copia:

    • Client ID → REACTOR_CLIENT_ID

    • Client Secret → REACTOR_CLIENT_SECRET

    • Organization ID (termina en @AdobeOrg) → REACTOR_ORG_ID

    • Scopes (la lista separada por comas que se muestra en la página de la credencial) → REACTOR_SCOPES

El servidor intercambia estos por un token de acceso de 24 horas en https://ims-na1.adobelogin.com/ims/token/v3 y lo renueva automáticamente. Nunca manejas un token tú mismo.

2. Instalación

Un paquete precompilado y sin dependencias se incluye en build/adobe-launch-reactor-mcp.mjs. Es un único archivo ESM autocontenido — no se requiere npm install para ejecutar el servidor. Node 20+ es el único requisito previo.

Para reconstruirlo desde el código fuente, o para ejecutar las pruebas:

npm install
npm run build     # tsc -> dist/
npm run bundle    # single file -> build/adobe-launch-reactor-mcp.mjs
npm test

El servidor lee sus credenciales de variables de entorno proporcionadas por tu cliente MCP. No carga un archivo .env — .env.example es una referencia de qué valores configurar.

3. Configurar tu cliente MCP

Claude Desktop — claude_desktop_config.json:

{
  "mcpServers": {
    "adobe-launch": {
      "command": "node",
      "args": ["/absolute/path/to/launch-mcp/build/adobe-launch-reactor-mcp.mjs"],
      "env": {
        "REACTOR_CLIENT_ID": "your-client-id",
        "REACTOR_CLIENT_SECRET": "your-client-secret",
        "REACTOR_ORG_ID": "XXXXXXXXXXXX@AdobeOrg",
        "REACTOR_SCOPES": "openid,AdobeID,read_organizations,additional_info.projectedProductContext,additional_info.roles,session",
        "REACTOR_WRITE_MODE": "read"
      }
    }
  }
}

Claude Code — claude mcp add:

claude mcp add adobe-launch \
  --env REACTOR_CLIENT_ID=... \
  --env REACTOR_CLIENT_SECRET=... \
  --env REACTOR_ORG_ID=...@AdobeOrg \
  --env REACTOR_WRITE_MODE=safe \
  -- node /absolute/path/to/launch-mcp/build/adobe-launch-reactor-mcp.mjs

Luego pregunta: "¿Qué reglas hay en mi propiedad Acme Web, y cuáles no están publicadas?"


Configuración

Variable

Requerida

Predeterminado

Propósito

REACTOR_CLIENT_ID

sí

—

Client ID de Developer Console; también se envía como x-api-key.

REACTOR_CLIENT_SECRET

sí

—

Secreto del cliente.

REACTOR_ORG_ID

sí

—

ID de organización IMS, termina en @AdobeOrg.

REACTOR_SCOPES

no

openid,AdobeID,read_organizations,additional_info.projectedProductContext,additional_info.roles,session

Scopes separados por comas. Copia la lista exacta de tu página de credenciales — el predeterminado es típico pero no universal.

REACTOR_WRITE_MODE

no

read

read, safe o dangerous. Ver más abajo.

REACTOR_DEFAULT_PROPERTY_ID

no

—

Fija una propiedad para que las herramientas no necesiten property_id en cada llamada.

REACTOR_DEFAULT_COMPANY_ID

no

—

Fija una empresa, omitiendo una llamada de búsqueda.

REACTOR_BASE_URL

no

https://reactor.adobe.io

Anulación para pruebas.

REACTOR_IMS_TOKEN_URL

no

https://ims-na1.adobelogin.com/ims/token/v3

Cambiar para regiones IMS que no sean NA1.

REACTOR_MAX_RESPONSE_CHARS

no

60000

Límite en una sola respuesta de herramienta antes de truncar.

REACTOR_TIMEOUT_MS

no

30000

Tiempo de espera por solicitud.

Modos de escritura

Modo

Puede hacer

No puede hacer

read (predeterminado)

Listar y obtener todo, buscar, leer eventos de auditoría

Cualquier mutación

safe

Todo en read, más crear/actualizar reglas, componentes de regla, elementos de datos, extensiones, bibliotecas, notas; ensamblar contenidos de biblioteca

Eliminar, compilar, publicar

dangerous

Todo, incluyendo eliminaciones, reactor_create_build y reactor_transition_library (enviar/aprobar/publicar)

—

El modo se aplica en dos lugares: las herramientas de escritura simplemente no se registran por debajo de su nivel, y la vía de escape reactor_request permite métodos HTTP según el modo — por lo que un modelo no puede eludir el nivel llamando al endpoint en bruto.

safe es el predeterminado correcto para la mayoría del trabajo. La creación en Reactor no es destructiva: una regla nueva o editada se encuentra en el estado de creación de la propiedad y no cambia nada en un sitio en vivo hasta que se compile y publique una biblioteca que la contenga. Mantener la publicación en un nivel separado y explícitamente habilitado significa que un error es algo que arreglas en la interfaz, no un incidente.


Herramientas

Lectura (todos los modos)

Tool

Qué hace

reactor_whoami

Perfil + empresas visibles. Empieza aquí para verificar la autenticación.

reactor_list_properties

Propiedades de una empresa.

reactor_get_property

Una propiedad con su configuración de plataforma.

reactor_list_rules

Reglas de una propiedad.

reactor_get_rule

Una regla más sus componentes — usa esto para responder "¿qué hace esta regla?".

reactor_list_rule_components

Eventos, condiciones y acciones de una regla.

reactor_list_data_elements / reactor_get_data_element

Elementos de datos, con la configuración decodificada.

reactor_list_extensions / reactor_get_extension

Extensiones instaladas y su configuración.

reactor_list_extension_packages

El catálogo de extensiones instalables.

reactor_get_extension_package

Descriptores de delegado que proporciona una extensión — así es como descubres valores válidos de delegate_descriptor_id.

reactor_list_libraries

Bibliotecas y su estado de flujo de trabajo.

reactor_get_library

Una biblioteca más todas las reglas, elementos de datos y extensiones que contiene, y su última compilación.

reactor_list_builds

Historial de compilaciones de una biblioteca.

reactor_list_environments

Entornos con códigos de inserción.

reactor_list_hosts

Hosts de Akamai / SFTP.

reactor_list_audit_events

Quién cambió qué, de más reciente a más antiguo.

reactor_search

Búsqueda estructurada entre tipos de recursos cuando no sabes en qué propiedad vive algo.

reactor_list_notes

Notas adjuntas a un recurso.

reactor_request

Paso directo sin procesar para los ~200 endpoints sin una herramienta dedicada. Controlado por método según el modo de escritura.

Autoría (safe y dangerous)

reactor_create_rule, reactor_update_rule, reactor_create_rule_component, reactor_update_rule_component, reactor_create_data_element, reactor_update_data_element, reactor_install_extension, reactor_update_extension, reactor_create_library, reactor_update_library, reactor_library_add_resources, reactor_library_remove_resources, reactor_create_note.

Destructivo (solo dangerous)

reactor_create_build, reactor_transition_library, reactor_delete_resource. Las tres requieren un argumento explícito confirm: true y llevan la anotación MCP destructiveHint, por lo que un cliente bien comportado pedirá confirmación antes de ejecutarlas.


Notas sobre la API

Filtrado. Las herramientas de listado aceptan un objeto filter con claves por atributo y valores de la forma "OPERATOR value". Operadores: EQ, NOT, LT, GT, BETWEEN, CONTAINS.

{ "filter": { "name": "CONTAINS checkout", "enabled": "EQ true" } }

Adobe ignora silenciosamente los filtros en atributos no filtrables y devuelve el conjunto completo, por lo que un filtro que parece no hacer nada suele ser un error tipográfico o un atributo no compatible, más que un resultado realmente vacío.

Atributos filtrables por recurso:

  • rules, rule_components, data_elements: name, enabled, dirty, published, published_at, revision_number, origin_id, created_at, updated_at (los componentes de regla también negate)

  • properties: name, platform, enabled, token, created_at, updated_at

  • extensions: name, display_name, version, enabled, dirty, published, revision_number, created_at, updated_at

  • libraries: name, state, stale, published_at, created_at, updated_at

  • environments: name, stage, archive, token, created_at, updated_at

  • builds: status, token, created_at, updated_at

  • hosts: name, type_of, created_at, updated_at

Paginación. 25 registros por página por defecto, 100 como máximo. Pasa fetch_all: true para recorrer todas las páginas (máximo 20 páginas). Las respuestas mayores que REACTOR_MAX_RESPONSE_CHARS se truncan en un límite de registro, de modo que el JSON sigue siendo analizable e indica cuánto se descartó.

Límites de frecuencia. El límite flexible de Reactor es de aproximadamente 120 solicitudes por minuto por integración. El cliente reintenta los errores 429 y 5xx con retroceso exponencial, respetando Retry-After.

Configuración. Reactor almacena la configuración de delegado como una cadena codificada en JSON. Las herramientas de escritura aceptan un objeto plano y lo codifican; las herramientas de lectura lo decodifican de nuevo. Si pasas una cadena, se transmite sin cambios.

Modelo de publicación. Los cambios de autoría son inertes. Para que un cambio entre en vigor: crea o edita recursos → añádelos a una biblioteca → compila la biblioteca → transiciónala a published. Los dos últimos pasos requieren el modo dangerous; de lo contrario, hazlos en la interfaz de Launch.


Desarrollo

npm run typecheck   # tsc --noEmit
npm test            # 35 tests against an in-memory mock of IMS + Reactor
npm run build       # compile to dist/
npm run dev         # run from source via tsx

La suite de pruebas cubre la construcción de la cabecera de autenticación y el almacenamiento en caché de tokens, la forma de la concesión client_credentials, la codificación de filtro/orden/página de JSON:API, el recorrido de varias páginas, el modelado y truncamiento de respuestas, el ida y vuelta de codificación/decodificación de settings, la construcción de relaciones, el control del modo de escritura (incluido que el paso directo sin procesar no puede usarse para evadirlo) y la calidad de los mensajes de error para 404/422/429/500.

Estructura

src/
  config.ts        env parsing, write-mode tiers
  auth.ts          IMS OAuth S2S token manager with caching + refresh collapsing
  client.ts        JSON:API client: headers, query encoding, retry, pagination, error formatting
  format.ts        response shaping and size-capped serialization
  server.ts        MCP server assembly
  index.ts         stdio entrypoint
  tools/
    common.ts      shared argument schemas and helpers
    read.ts        read-only tools
    write.ts       authoring tools + dangerous tier
    raw.ts         method-gated passthrough

Licencia

MIT.

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    A
    maintenance
    The first full-featured MCP server for Adobe Experience Platform: 29 tools across schemas, datasets, profiles, segments, query service, and GDPR/CCPA privacy operations. Extends Adobe's read-only beta with production-grade write operations.
    72 npm
    Apache 2.0
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables full Google Tag Manager management via the GTM API v2, including tags, triggers, variables, and version publishing, with workspace-based change tracking.
    MIT
  • A
    license
    A
    quality
    C
    maintenance
    Enables policy-aware access to the Productive.io API v2 for managing projects, tasks, time tracking, resource planning, financials, CRM, and reports, with safe defaults and staged writes for sensitive operations.
    12
    Apache 2.0