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
settingsque 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.
Ve a la Adobe Developer Console e inicia sesión.
Crea un nuevo proyecto (o abre uno existente).
Add API → selecciona Adobe Experience Platform Launch API (listada bajo Experience Cloud).
Elige OAuth Server-to-Server como tipo de autenticación.
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.
Desde la página de la credencial, copia:
Client ID →
REACTOR_CLIENT_IDClient Secret →
REACTOR_CLIENT_SECRETOrganization ID (termina en
@AdobeOrg) →REACTOR_ORG_IDScopes (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 testEl servidor lee sus credenciales de variables de entorno proporcionadas por tu cliente MCP. No carga un archivo
.env—.env.examplees 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.mjsLuego 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 |
| sí | — | Client ID de Developer Console; también se envía como |
| sí | — | Secreto del cliente. |
| sí | — | ID de organización de IMS, termina en |
| no |
| 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. |
| no |
|
|
| no | — | Fija una propiedad para que las herramientas no necesiten |
| no | — | Fija una empresa, omitiendo una llamada de búsqueda. |
| no |
| Anulación para pruebas. |
| no |
| Cambiar para regiones de IMS que no sean NA1. |
| no |
| Límite de una sola respuesta de herramienta antes de truncarla. |
| no |
| Tiempo de espera por solicitud. |
Modos de escritura
Modo | Puede hacer | No puede hacer |
| Listar y obtener todo, buscar, leer eventos de auditoría | Cualquier mutación |
| Todo lo de | Eliminar, compilar, publicar |
| Todo, incluyendo eliminaciones, | — |
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 |
| Perfil + empresas visibles. Empieza aquí para verificar la autenticación. |
| Propiedades en una empresa. |
| Una propiedad con su configuración de plataforma. |
| Reglas en una propiedad. |
| Una regla más sus componentes — úsala para responder "¿qué hace esta regla?". |
| Eventos, condiciones y acciones de una regla. |
| Elementos de datos, con configuraciones decodificadas. |
| Extensiones instaladas y su configuración. |
| El catálogo de extensiones instalables. |
| Descriptores de delegados que proporciona una extensión — así descubres valores válidos de |
| Bibliotecas y su estado de flujo de trabajo. |
| Una biblioteca más cada regla, elemento de datos y extensión que contiene, y su última compilación. |
| Historial de compilaciones de una biblioteca. |
| Entornos con códigos de inserción. |
| Hosts Akamai / SFTP. |
| Quién cambió qué, del más reciente al más antiguo. |
| Búsqueda estructurada entre tipos de recursos cuando no sabes en qué propiedad vive algo. |
| Notas adjuntas a un recurso. |
| 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 admitennegate)properties:
name,platform,enabled,token,created_at,updated_atextensions:
name,display_name,version,enabled,dirty,published,revision_number,created_at,updated_atlibraries:
name,state,stale,published_at,created_at,updated_atenvironments:
name,stage,archive,token,created_at,updated_atbuilds:
status,token,created_at,updated_athosts:
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 tsxEl 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 passthroughLicencia
MIT.
This server cannot be installed
Maintenance
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.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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