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 llamada 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.


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 para entregarla a un modelo en bruto:

  • La configuración de los 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 opción explícita.


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 IDREACTOR_CLIENT_ID

    • Client SecretREACTOR_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 distribuye 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 Desktopclaude_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 Codeclaude 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

Valor por defecto

Propósito

REACTOR_CLIENT_ID

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

REACTOR_CLIENT_SECRET

Secreto del cliente.

REACTOR_ORG_ID

ID de organización de 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 la página de tu credencial — el valor por defecto 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 de IMS que no sean NA1.

REACTOR_MAX_RESPONSE_CHARS

no

60000

Límite de una sola respuesta de herramienta antes de truncarla.

REACTOR_TIMEOUT_MS

no

30000

Tiempo de espera por solicitud.

Modos de escritura

Modo

Puede hacer

No puede hacer

read (por defecto)

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

Cualquier mutación

safe

Todo lo de 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 sortear el nivel llamando al endpoint en bruto.

safe es el valor por defecto adecuado para la mayoría del trabajo. La creación en Reactor no es destructiva: una regla nueva o editada permanece 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 habilitado explícitamente significa que un error es algo que arreglas en la interfaz, no un incidente.


Herramientas

Lectura (todos los modos)

Herramienta

Qué hace

reactor_whoami

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

reactor_list_properties

Propiedades en una empresa.

reactor_get_property

Una propiedad con su configuración de plataforma.

reactor_list_rules

Reglas en una propiedad.

reactor_get_rule

Una regla más sus componentes — úsala 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 configuraciones decodificadas.

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 delegados que proporciona una extensión — así 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 cada regla, elemento de datos y extensión 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 Akamai / SFTP.

reactor_list_audit_events

Quién cambió qué, del más reciente al 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 en bruto para los ~200 endpoints sin una herramienta dedicada. Limitado por método según el modo de escritura.

Creación (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.

Destructivas (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 que se comporte correctamente pedirá confirmación antes de ejecutarlas.


Notas sobre la API

Filtrado. Las herramientas de listado aceptan un objeto filter cuyas claves son atributos, con 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 sobre 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 admitido, en lugar de 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 rule components también admiten 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. Usa fetch_all: true para recorrer todas las páginas (con un límite de 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 ha descartado.

Límites de tasa. 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 tal cual.

Modelo de publicación. Los cambios de autoría son inertes. Para hacer efectivo un cambio: crea o edita los recursos → añádelos a una biblioteca → compila la biblioteca → transiciónala al estado published. Los dos últimos pasos requieren el modo dangerous; en caso 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

El conjunto 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 JSON:API de filtrado/ordenación/paginación, el recorrido de varias páginas, el modelado y el truncamiento de las respuestas, el ida y vuelta de codificación/descodificación de settings, la construcción de relaciones, el bloqueo del modo de escritura (incluyendo que el paso directo sin procesar no puede usarse para eludirlo) 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.

-
license - not tested
Not graded
quality - not tested
C
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

  • Direct access to your Sanity projects (content, datasets, releases, schemas) and agent rules

  • An agent-friendly API for product changelogs. A unified registry via CLI, API, or MCP.

  • Build and manage Cloudgate workflow-APIs: controllers, actions, workflow graphs, and databases.

View all MCP Connectors

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/mercuryadvising/adobe-launch-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server