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.
Перейдите в Adobe Developer Console и войдите.
Создайте новый проект (или откройте существующий).
Add API → выберите Adobe Experience Platform Launch API (указан в разделе Experience Cloud).
Выберите OAuth Server-to-Server в качестве типа аутентификации.
Выберите профиль(и) продукта, которые предоставляют доступ к нужным свойствам. Профили продуктов управляются в Adobe Admin Console; если вы не администратор, спросите своего администратора, какой профиль покрывает ваши свойства. Это самая частая причина пустых результатов или ошибок 403 — учётные данные могут успешно проходить аутентификацию, но при этом ничего не видеть.
Со страницы учётных данных скопируйте:
Client ID →
REACTOR_CLIENT_IDClient Secret →
REACTOR_CLIENT_SECRETOrganization ID (заканчивается на
@AdobeOrg) →REACTOR_ORG_IDScopes (список, разделённый запятыми, показанный на странице учётных данных) →
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, и какие из них не опубликованы?»
Конфигурация
Переменная | Обязательная | По умолчанию | Назначение |
| да | — | Client ID из Developer Console; также отправляется как |
| да | — | Секрет клиента. |
| да | — | IMS-идентификатор организации, заканчивается на |
| нет |
| Разделённые запятыми области. Скопируйте точный список со страницы учётных данных — значение по умолчанию типично, но не универсально. |
| нет |
|
|
| нет | — | Закрепить свойство, чтобы инструментам не требовался |
| нет | — | Закрепить компанию, пропуская вызов поиска. |
| нет |
| Переопределение для тестирования. |
| нет |
| Изменить для регионов IMS, отличных от NA1. |
| нет |
| Ограничение на один ответ инструмента до усечения. |
| нет |
| Тайм-аут на запрос. |
Режимы записи
Режим | Что может | Что не может |
| Список и получение всего, поиск, чтение событий аудита | Любые изменения |
| Всё из | Удаление, сборка, публикация |
| Всё, включая удаления, | — |
Режим применяется в двух местах: инструменты записи просто не регистрируются ниже своего уровня, а запасной выход reactor_request разрешает HTTP-методы по режиму — так что модель не может обойти уровень, обращаясь к сырой конечной точке.
safe — правильный выбор по умолчанию для большинства задач. Авторство в Reactor не разрушительно: новое или отредактированное правило находится в состоянии авторства свойства и ничего не меняет на живом сайте, пока библиотека, содержащая его, не будет собрана и опубликована. Вынесение публикации в отдельный, явно включаемый уровень означает, что ошибку вы исправите в интерфейсе, а не столкнётесь с инцидентом.
Инструменты
Чтение (все режимы)
Tool | What it does |
| Профиль + видимые компании. Начните здесь, чтобы проверить аутентификацию. |
| Свойства в компании. |
| Одно свойство с его настройками платформы. |
| Правила в свойстве. |
| Правило плюс его компоненты — используйте это, чтобы ответить на вопрос «что делает это правило?». |
| События, условия и действия правила. |
| Элементы данных с декодированными настройками. |
| Установленные расширения и их конфигурация. |
| Каталог устанавливаемых расширений. |
| Дескрипторы делегатов, которые предоставляет расширение — так вы находите допустимые значения |
| Библиотеки и их состояние рабочего процесса. |
| Библиотека плюс все правила, элементы данных и расширения, которые она содержит, и её последняя сборка. |
| История сборок для библиотеки. |
| Среды с кодами встраивания. |
| Хосты Akamai / SFTP. |
| Кто что изменил, сначала новые. |
| Структурированный поиск по типам ресурсов, когда вы не знаете, в каком свойстве что-то находится. |
| Заметки, прикреплённые к ресурсу. |
| Прямой проход для ~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_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
Пагинация. 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.
This server cannot be deployed
Maintenance
Related MCP Connectors
Read and write Drupal JSON:API nodes, taxonomy terms, users and files.
Manage repositories, users, releases, and automate GitHub workflows
Discover audiences, build segments, match and deliver data. Some actions may incur billable usage.
Search, read, and automate TextMine documents, records, workflows, integrations, and agent tasks.
Related MCP Servers
- AlicenseNot gradedqualityAmaintenanceThe 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 npmApache 2.0
- FlicenseNot gradedqualityDmaintenanceEnables Adobe Experience Platform and AEM content operations through a shared tool registry, exposing health checks, fragment search, sandbox management, dataset queries, and content fragment fetching via MCP and web interfaces.-
- AlicenseNot gradedqualityCmaintenanceEnables full Google Tag Manager management via the GTM API v2, including tags, triggers, variables, and version publishing, with workspace-based change tracking.MIT
- AlicenseAqualityCmaintenanceEnables 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.12Apache 2.0