Skip to main content
Glama
mercuryadvising

Adobe Launch / Tags MCP Server

Adobe Launch / Tags MCP Server

MCP-сервер, оборачивающий Adobe Experience Platform Reactor API — API, лежащий в основе Adobe Launch, ныне называемого Adobe Experience Platform Tags.

Он предоставляет ассистенту доступ на чтение к вашим свойствам тегов, правилам, элементам данных, расширениям, библиотекам и средам, а также возможность вносить изменения. По умолчанию он ничего не публикует. Ничто из того, что делает этот сервер, не попадает на живой сайт, если вы явно не включите режим dangerous и не одобрите сборку.

Показываете это кому-то? См. DEMO.md — 10-минутное руководство.


Зачем это существует

Reactor API — это JSON:API-поверхность с ~240 конечными точками и несколькими острыми углами, из-за которых его неудобно передавать модели в сыром виде:

  • Конфигурация делегата хранится в атрибуте settings, который является JSON-строкой, а не объектом. Передача объекта приводит к загадочной ошибке 422.

  • Ресурсы «жирные» — компонент правила несёт около 20 полей аудита, поэтому список из 200 правил переполнит контекстное окно.

  • Правила бессмысленны без своих компонентов, которые находятся на отдельной конечной точке.

  • Авторство и публикация — совершенно разные задачи, и их легко перепутать.

Этот враппер решает все четыре проблемы: он кодирует и декодирует settings, ужимает ответы до сути, соединяет правила с их компонентами и ограничивает публикацию явным согласием.


Related MCP server: adobe-custom

Настройка

1. Создайте учётные данные OAuth Server-to-Server

Adobe прекратил поддержку потока Service Account (JWT) 1 января 2025 года. Вам нужны учётные данные OAuth Server-to-Server.

  1. Перейдите в Adobe Developer Console и войдите.

  2. Создайте новый проект (или откройте существующий).

  3. Add API → выберите Adobe Experience Platform Launch API (указан в разделе Experience Cloud).

  4. Выберите OAuth Server-to-Server в качестве типа аутентификации.

  5. Выберите профиль(и) продукта, которые предоставляют доступ к нужным свойствам. Профили продуктов управляются в Adobe Admin Console; если вы не администратор, спросите своего администратора, какой профиль покрывает ваши свойства. Это самая частая причина пустых результатов или ошибок 403 — учётные данные могут успешно проходить аутентификацию, но при этом ничего не видеть.

  6. Со страницы учётных данных скопируйте:

    • Client ID → REACTOR_CLIENT_ID

    • Client Secret → REACTOR_CLIENT_SECRET

    • Organization ID (заканчивается на @AdobeOrg) → REACTOR_ORG_ID

    • Scopes (список, разделённый запятыми, показанный на странице учётных данных) → REACTOR_SCOPES

Сервер обменивает их на 24-часовой токен доступа по адресу https://ims-na1.adobelogin.com/ims/token/v3 и автоматически обновляет его. Вам никогда не придётся работать с токеном самостоятельно.

2. Установка

Готовый автономный бандл без зависимостей находится в build/adobe-launch-reactor-mcp.mjs. Это один самодостаточный ESM-файл — для запуска сервера не требуется npm install. Единственное требование — Node.js 20+.

Чтобы пересобрать его из исходников или запустить тесты:

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

Сервер читает свои учётные данные из переменных окружения, предоставляемых вашим MCP-клиентом. Он не загружает файл .env — .env.example служит справочником по тому, какие значения задавать.

3. Настройте ваш 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

Затем спросите: «Какие правила есть в моём свойстве Acme Web, и какие из них не опубликованы?»


Конфигурация

Переменная

Обязательная

По умолчанию

Назначение

REACTOR_CLIENT_ID

да

—

Client ID из Developer Console; также отправляется как x-api-key.

REACTOR_CLIENT_SECRET

да

—

Секрет клиента.

REACTOR_ORG_ID

да

—

IMS-идентификатор организации, заканчивается на @AdobeOrg.

REACTOR_SCOPES

нет

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

Разделённые запятыми области. Скопируйте точный список со страницы учётных данных — значение по умолчанию типично, но не универсально.

REACTOR_WRITE_MODE

нет

read

read, safe или dangerous. См. ниже.

REACTOR_DEFAULT_PROPERTY_ID

нет

—

Закрепить свойство, чтобы инструментам не требовался property_id при каждом вызове.

REACTOR_DEFAULT_COMPANY_ID

нет

—

Закрепить компанию, пропуская вызов поиска.

REACTOR_BASE_URL

нет

https://reactor.adobe.io

Переопределение для тестирования.

REACTOR_IMS_TOKEN_URL

нет

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

Изменить для регионов IMS, отличных от NA1.

REACTOR_MAX_RESPONSE_CHARS

нет

60000

Ограничение на один ответ инструмента до усечения.

REACTOR_TIMEOUT_MS

нет

30000

Тайм-аут на запрос.

Режимы записи

Режим

Что может

Что не может

read (по умолчанию)

Список и получение всего, поиск, чтение событий аудита

Любые изменения

safe

Всё из read, плюс создание/обновление правил, компонентов правил, элементов данных, расширений, библиотек, заметок; сборка содержимого библиотек

Удаление, сборка, публикация

dangerous

Всё, включая удаления, reactor_create_build и reactor_transition_library (отправка/одобрение/публикация)

—

Режим применяется в двух местах: инструменты записи просто не регистрируются ниже своего уровня, а запасной выход reactor_request разрешает HTTP-методы по режиму — так что модель не может обойти уровень, обращаясь к сырой конечной точке.

safe — правильный выбор по умолчанию для большинства задач. Авторство в Reactor не разрушительно: новое или отредактированное правило находится в состоянии авторства свойства и ничего не меняет на живом сайте, пока библиотека, содержащая его, не будет собрана и опубликована. Вынесение публикации в отдельный, явно включаемый уровень означает, что ошибку вы исправите в интерфейсе, а не столкнётесь с инцидентом.


Инструменты

Чтение (все режимы)

Tool

What it does

reactor_whoami

Профиль + видимые компании. Начните здесь, чтобы проверить аутентификацию.

reactor_list_properties

Свойства в компании.

reactor_get_property

Одно свойство с его настройками платформы.

reactor_list_rules

Правила в свойстве.

reactor_get_rule

Правило плюс его компоненты — используйте это, чтобы ответить на вопрос «что делает это правило?».

reactor_list_rule_components

События, условия и действия правила.

reactor_list_data_elements / reactor_get_data_element

Элементы данных с декодированными настройками.

reactor_list_extensions / reactor_get_extension

Установленные расширения и их конфигурация.

reactor_list_extension_packages

Каталог устанавливаемых расширений.

reactor_get_extension_package

Дескрипторы делегатов, которые предоставляет расширение — так вы находите допустимые значения delegate_descriptor_id.

reactor_list_libraries

Библиотеки и их состояние рабочего процесса.

reactor_get_library

Библиотека плюс все правила, элементы данных и расширения, которые она содержит, и её последняя сборка.

reactor_list_builds

История сборок для библиотеки.

reactor_list_environments

Среды с кодами встраивания.

reactor_list_hosts

Хосты Akamai / SFTP.

reactor_list_audit_events

Кто что изменил, сначала новые.

reactor_search

Структурированный поиск по типам ресурсов, когда вы не знаете, в каком свойстве что-то находится.

reactor_list_notes

Заметки, прикреплённые к ресурсу.

reactor_request

Прямой проход для ~200 конечных точек без выделенного инструмента. Методы ограничены режимом записи.

Авторинг (safe и 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.

Деструктивные (dangerous only)

reactor_create_build, reactor_transition_library, reactor_delete_resource. Все три требуют явного аргумента confirm: true и несут аннотацию MCP destructiveHint, поэтому корректный клиент запросит подтверждение перед их запуском.


Примечания об API

Фильтрация. Инструменты списков принимают объект filter с ключами по атрибутам и значениями вида "OPERATOR value". Операторы: EQ, NOT, LT, GT, BETWEEN, CONTAINS.

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

Adobe молча игнорирует фильтры по нефильтруемым атрибутам и возвращает полный набор, поэтому фильтр, который, кажется, ничего не делает, обычно является опечаткой или неподдерживаемым атрибутом, а не действительно пустым результатом.

Фильтруемые атрибуты по ресурсам:

  • rules, rule_components, data_elements: name, enabled, dirty, published, published_at, revision_number, origin_id, created_at, updated_at (компоненты правил также 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

Пагинация. 25 записей на страницу по умолчанию, максимум 100. Передайте fetch_all: true, чтобы пройти по всем страницам (не более 20 страниц). Ответы больше REACTOR_MAX_RESPONSE_CHARS обрезаются на границе записи, поэтому JSON остаётся разбираемым и сообщает, сколько было отброшено.

Лимиты запросов. Мягкий лимит Reactor составляет примерно 120 запросов в минуту на интеграцию. Клиент повторяет запросы 429 и 5xx с экспоненциальной задержкой, учитывая Retry-After.

Настройки. Reactor хранит конфигурацию делегата как JSON-закодированную строку. Инструменты записи принимают обычный объект и кодируют его; инструменты чтения декодируют его обратно. Если вы передаёте строку, она проходит без изменений.

Модель публикации. Изменения при авторинге инертны. Чтобы изменения вступили в силу: создайте или отредактируйте ресурсы → добавьте их в библиотеку → соберите библиотеку → переведите её в состояние published. Последние два шага требуют режима dangerous; в противном случае сделайте их в интерфейсе Launch.


Разработка

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

Тестовый набор покрывает построение заголовка аутентификации и кэширование токенов, форму гранта client_credentials, кодирование фильтров/сортировки/страниц JSON:API, проход по нескольким страницам, формирование и усечение ответов, кодирование/декодирование settings в обе стороны, построение связей, ограничение режима записи (включая то, что прямой проход нельзя использовать для его обхода) и качество сообщений об ошибках для 404/422/429/500.

Структура

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

Лицензия

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