Skip to main content
Glama
mercuryadvising

Adobe Launch / Tags MCP Server

Adobe Launch / Tags MCP Server

Ein MCP-Server, der die Adobe Experience Platform Reactor API kapselt – die API hinter Adobe Launch, heute Adobe Experience Platform Tags genannt.

Er gibt einem Assistenten Lesezugriff auf Ihre Tag-Properties, Regeln, Datenelemente, Erweiterungen, Bibliotheken und Umgebungen sowie die Möglichkeit, Änderungen zu erstellen. Standardmäßig veröffentlicht er nichts. Nichts, was dieser Server tut, erreicht eine Live-Site, es sei denn, Sie aktivieren explizit den Modus dangerous und genehmigen einen Build.

Möchten Sie das jemandem präsentieren? In DEMO.md finden Sie einen 10-minütigen Rundgang.


Warum es das gibt

Die Reactor API ist eine JSON:API-Oberfläche mit etwa 240 Endpunkten und einigen Stolperfallen, die es unpraktisch machen, sie einem Modell roh zu übergeben:

  • Die Delegate-Konfiguration wird in einem settings-Attribut gespeichert, das ein JSON-codierter String ist, kein Objekt. Die Übergabe eines Objekts liefert eine kryptische 422.

  • Ressourcen sind umfangreich – eine Regelkomponente trägt etwa 20 Audit-Felder –, sodass eine Liste von 200 Regeln ein Kontextfenster überflutet.

  • Regeln sind ohne ihre Regelkomponenten bedeutungslos, die an einem separaten Endpunkt liegen.

  • Erstellen und Veröffentlichen sind völlig getrennte Belange, und es ist leicht, sie zu vermischen.

Dieser Wrapper behandelt alle vier: Er codiert und decodiert settings, reduziert Antworten auf das Wesentliche, verbindet Regeln mit ihren Komponenten und stellt das Veröffentlichen hinter eine explizite Opt-in-Entscheidung.


Related MCP server: adobe-custom

Einrichtung

1. OAuth-Server-zu-Server-Anmeldedaten erstellen

Adobe hat den Service-Account-(JWT-)Flow am 1. Januar 2025 eingestellt. Sie benötigen OAuth-Server-zu-Server-Anmeldedaten.

  1. Gehen Sie zur Adobe Developer Console und melden Sie sich an.

  2. Erstellen Sie ein neues Projekt (oder öffnen Sie ein bestehendes).

  3. API hinzufügen → wählen Sie Adobe Experience Platform Launch API (unter Experience Cloud aufgeführt).

  4. Wählen Sie OAuth Server-to-Server als Authentifizierungstyp.

  5. Wählen Sie das/die Produktprofil(e), die Zugriff auf die Properties gewähren, die Sie benötigen. Produktprofile werden in der Adobe Admin Console verwaltet; wenn Sie kein Admin sind, fragen Sie Ihren, welches Profil Ihre Properties abdeckt. Dies ist die mit Abstand häufigste Ursache für leere Ergebnisse oder 403-Fehler – die Anmeldedaten können sich problemlos authentifizieren und trotzdem nichts sehen.

  6. Kopieren Sie von der Seite der Anmeldedaten:

    • Client-ID → REACTOR_CLIENT_ID

    • Client-Secret → REACTOR_CLIENT_SECRET

    • Organisations-ID (endet auf @AdobeOrg) → REACTOR_ORG_ID

    • Scopes (die auf der Seite der Anmeldedaten angezeigte, durch Kommas getrennte Liste) → REACTOR_SCOPES

Der Server tauscht diese gegen ein 24-Stunden-Zugriffstoken unter https://ims-na1.adobelogin.com/ims/token/v3 ein und erneuert es automatisch. Sie müssen nie selbst ein Token verwalten.

2. Installieren

Ein vorgefertigtes, abhängigkeitsfreies Bundle liegt unter build/adobe-launch-reactor-mcp.mjs. Es ist eine einzelne, eigenständige ESM-Datei – kein npm install erforderlich, um den Server auszuführen. Node 20+ ist die einzige Voraussetzung.

Um es aus dem Quellcode neu zu erstellen oder die Tests auszuführen:

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

Der Server liest seine Anmeldedaten aus Umgebungsvariablen, die von Ihrem MCP-Client bereitgestellt werden. Er lädt keine .env-Datei – .env.example dient als Referenz dafür, welche Werte zu setzen sind.

3. MCP-Client konfigurieren

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

Fragen Sie dann: „Welche Regeln gibt es in meiner Acme-Web-Property, und welche sind unveröffentlicht?"


Konfiguration

Variable

Erforderlich

Standard

Zweck

REACTOR_CLIENT_ID

ja

—

Client-ID aus der Developer Console; wird auch als x-api-key gesendet.

REACTOR_CLIENT_SECRET

ja

—

Client-Secret.

REACTOR_ORG_ID

ja

—

IMS-Organisations-ID, endet auf @AdobeOrg.

REACTOR_SCOPES

nein

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

Durch Kommas getrennte Scopes. Kopieren Sie die exakte Liste von Ihrer Anmeldedaten-Seite – der Standard ist typisch, aber nicht universell.

REACTOR_WRITE_MODE

nein

read

read, safe oder dangerous. Siehe unten.

REACTOR_DEFAULT_PROPERTY_ID

nein

—

Eine Property festlegen, damit Tools nicht bei jedem Aufruf property_id benötigen.

REACTOR_DEFAULT_COMPANY_ID

nein

—

Ein Unternehmen festlegen und einen Lookup-Aufruf überspringen.

REACTOR_BASE_URL

nein

https://reactor.adobe.io

Überschreibung für Tests.

REACTOR_IMS_TOKEN_URL

nein

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

Für Nicht-NA1-IMS-Regionen ändern.

REACTOR_MAX_RESPONSE_CHARS

nein

60000

Obergrenze für eine einzelne Tool-Antwort vor der Kürzung.

REACTOR_TIMEOUT_MS

nein

30000

Timeout pro Anfrage.

Schreibmodi

Modus

Kann

Kann nicht

read (Standard)

Alles auflisten und abrufen, suchen, Audit-Ereignisse lesen

Jede Mutation

safe

Alles aus read, plus Regeln, Regelkomponenten, Datenelemente, Erweiterungen, Bibliotheken, Notizen erstellen/aktualisieren; Bibliotheksinhalte zusammenstellen

Löschen, Build, Veröffentlichen

dangerous

Alles, einschließlich Löschen, reactor_create_build und reactor_transition_library (einreichen/genehmigen/veröffentlichen)

—

Der Modus wird an zwei Stellen durchgesetzt: Schreib-Tools werden unterhalb ihrer Stufe einfach nicht registriert, und die reactor_request-Hintertür whitelistet HTTP-Methoden nach Modus – ein Modell kann die Stufe also nicht umgehen, indem es den rohen Endpunkt aufruft.

safe ist die richtige Standardeinstellung für die meisten Arbeiten. Das Erstellen in Reactor ist nicht destruktiv: Eine neue oder bearbeitete Regel liegt im Authoring-Zustand der Property und ändert nichts auf einer Live-Site, bis eine Bibliothek, die sie enthält, erstellt und veröffentlicht wird. Wenn das Veröffentlichen in einer separaten, explizit aktivierten Stufe bleibt, ist ein Fehler etwas, das Sie in der UI beheben, kein Vorfall.


Tools

Lesen (alle Modi)

Tool

What it does

reactor_whoami

Profil + sichtbare Unternehmen. Hier beginnen, um die Authentifizierung zu prüfen.

reactor_list_properties

Properties in einem Unternehmen.

reactor_get_property

Ein Property mit seinen Plattform-Einstellungen.

reactor_list_rules

Regeln in einem Property.

reactor_get_rule

Eine Regel plus ihre Komponenten — damit beantworten Sie „Was macht diese Regel?“.

reactor_list_rule_components

Events, Bedingungen und Aktionen einer Regel.

reactor_list_data_elements / reactor_get_data_element

Datenelemente, mit dekodierten Einstellungen.

reactor_list_extensions / reactor_get_extension

Installierte Erweiterungen und ihre Konfiguration.

reactor_list_extension_packages

Der Katalog installierbarer Erweiterungen.

reactor_get_extension_package

Delegate-Deskriptoren, die eine Erweiterung bereitstellt — so finden Sie gültige delegate_descriptor_id-Werte.

reactor_list_libraries

Libraries und ihr Workflow-Status.

reactor_get_library

Eine Library plus alle Regeln, Datenelemente und Erweiterungen, die sie enthält, sowie ihr letzter Build.

reactor_list_builds

Build-Verlauf für eine Library.

reactor_list_environments

Environments mit Embed-Codes.

reactor_list_hosts

Akamai-/SFTP-Hosts.

reactor_list_audit_events

Wer hat was geändert, neueste zuerst.

reactor_search

Strukturierte Suche über Ressourcentypen hinweg, wenn Sie nicht wissen, in welchem Property etwas liegt.

reactor_list_notes

Notizen, die an einer Ressource hängen.

reactor_request

Roher Passthrough für die ~200 Endpunkte ohne dediziertes Tool. Methodisch durch den Schreibmodus gesteuert.

Authoring (safe und 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.

Destruktiv (nur dangerous)

reactor_create_build, reactor_transition_library, reactor_delete_resource. Alle drei erfordern ein explizites confirm: true-Argument und tragen die MCP-destructiveHint-Annotation, sodass ein konformer Client vor der Ausführung eine Rückfrage stellt.


Hinweise zur API

Filterung. Listen-Tools akzeptieren ein filter-Objekt, dessen Schlüssel Attribute sind, mit Werten der Form "OPERATOR value". Operatoren: EQ, NOT, LT, GT, BETWEEN, CONTAINS.

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

Adobe ignoriert Filter auf nicht filterbaren Attributen stillschweigend und gibt die vollständige Menge zurück. Ein Filter, der scheinbar nichts bewirkt, ist also meist ein Tippfehler oder ein nicht unterstütztes Attribut und kein wirklich leeres Ergebnis.

Filterbare Attribute nach Ressource:

  • rules, rule_components, data_elements: name, enabled, dirty, published, published_at, revision_number, origin_id, created_at, updated_at (Regelkomponenten zusätzlich 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

Paginierung. Standardmäßig 25 Datensätze pro Seite, maximal 100. Übergeben Sie fetch_all: true, um jede Seite zu durchlaufen (begrenzt auf 20 Seiten). Antworten, die größer als REACTOR_MAX_RESPONSE_CHARS sind, werden an einer Datensatzgrenze abgeschnitten, sodass das JSON parsebar bleibt und angibt, wie viel verworfen wurde.

Ratenlimits. Das weiche Limit von Reactor liegt bei etwa 120 Anfragen pro Minute und Integration. Der Client wiederholt 429 und 5xx mit exponentiellem Backoff und respektiert Retry-After.

Einstellungen. Reactor speichert die Delegate-Konfiguration als JSON-kodierten String. Die Schreib-Tools akzeptieren ein einfaches Objekt und kodieren es; die Lese-Tools dekodieren es zurück. Wenn Sie einen String übergeben, wird er unverändert durchgereicht.

Veröffentlichungsmodell. Authoring-Änderungen sind wirkungslos. Um eine Änderung live zu schalten: Ressourcen erstellen oder bearbeiten → zu einer Library hinzufügen → die Library bauen → in den Status published überführen. Die letzten beiden Schritte erfordern den dangerous-Modus; andernfalls führen Sie sie in der Launch-UI aus.


Entwicklung

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

Die Testsuite deckt ab: Aufbau des Auth-Headers und Token-Caching, die Form des client_credentials-Grants, JSON:API-Filter-/Sortier-/Seiten-Kodierung, mehrseitiges Durchlaufen, Antwortformatierung und -kürzung, settings-Encode/Decode-Roundtrip, Konstruktion von Beziehungen, Schreibmodus-Gating (einschließlich der Tatsache, dass der rohe Passthrough nicht zur Umgehung genutzt werden kann) sowie die Qualität von Fehlermeldungen für 404/422/429/500.

Struktur

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

Lizenz

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