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, jetzt Adobe Experience Platform Tags genannt.

Er gibt einem Assistenten Lesezugriff auf Ihre Tag-Eigenschaften, 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 dangerous-Modus und genehmigen einen Build.


Warum es das gibt

Die Reactor-API ist eine JSON:API-Oberfläche mit ~240 Endpunkten und einigen scharfen Kanten, die es umständlich 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 führt zu einer kryptischen 422.

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

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

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

Dieser Wrapper behandelt alle vier: Er codiert und decodiert settings, reduziert Antworten auf das Wesentliche, verbindet Regeln mit ihren Komponenten und macht das Veröffentlichen von einer expliziten Opt-in abhängig.


Einrichtung

1. Erstellen Sie eine OAuth Server-to-Server-Anmeldeinformation

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

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

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

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

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

  5. Wählen Sie das/die Produktprofil(e) aus, die Zugriff auf die Eigenschaften gewähren, die Sie betreffen. Produktprofile werden in der Adobe Admin Console verwaltet; wenn Sie kein Administrator sind, fragen Sie Ihren, welches Profil Ihre Eigenschaften abdeckt. Dies ist die häufigste Ursache für leere Ergebnisse oder 403er – die Anmeldeinformation kann sich problemlos authentifizieren und trotzdem nichts sehen.

  6. Kopieren Sie von der Seite der Anmeldeinformation:

    • Client-IDREACTOR_CLIENT_ID

    • Client-GeheimnisREACTOR_CLIENT_SECRET

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

    • Bereiche (die auf der Anmeldeseite angezeigte kommagetrennte Liste) → REACTOR_SCOPES

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

2. Installation

Ein vorgefertigtes, abhängigkeitsfreies Bundle wird unter build/adobe-launch-reactor-mcp.mjs mitgeliefert. 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 ist eine Referenz dafür, welche Werte zu setzen sind.

3. Konfigurieren Sie Ihren MCP-Client

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

Fragen Sie dann: „Welche Regeln sind in meiner Acme-Web-Eigenschaft 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-Geheimnis.

REACTOR_ORG_ID

ja

IMS-Organisations-ID, endet auf @AdobeOrg.

REACTOR_SCOPES

nein

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

Kommagetrennte Bereiche. Kopieren Sie die genaue Liste von Ihrer Anmeldeseite – der Standard ist typisch, aber nicht universell.

REACTOR_WRITE_MODE

nein

read

read, safe oder dangerous. Siehe unten.

REACTOR_DEFAULT_PROPERTY_ID

nein

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

REACTOR_DEFAULT_COMPANY_ID

nein

Ein Unternehmen festlegen, um einen Lookup-Aufruf zu ü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

Zeitüberschreitung pro Anfrage.

Schreibmodi

Modus

Kann

Kann nicht

read (Standard)

Alles auflisten und abrufen, suchen, Audit-Ereignisse lesen

Keine Mutationen

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: Schreibwerkzeuge werden unterhalb ihrer Stufe einfach nicht registriert, und die reactor_request-Notluke 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 befindet sich im Authoring-Zustand der Eigenschaft und ändert nichts an einer Live-Site, bis eine Bibliothek, die sie enthält, erstellt und veröffentlicht wird. Das Veröffentlichen in einer separaten, explizit aktivierten Stufe zu halten bedeutet, dass ein Fehler etwas ist, das Sie in der UI beheben, kein Vorfall.


Werkzeuge

Lesen (alle Modi)

Werkzeug

Was es tut

reactor_whoami

Profil + sichtbare Unternehmen. Beginnen Sie hier, um die Authentifizierung zu überprüfen.

reactor_list_properties

Eigenschaften in einem Unternehmen.

reactor_get_property

Eine Eigenschaft mit ihren Plattformeinstellungen.

reactor_list_rules

Regeln in einer Eigenschaft.

reactor_get_rule

Eine Regel plus ihre Komponenten – verwenden Sie dies, um zu beantworten: „Was tut diese Regel?"

reactor_list_rule_components

Ereignisse, Bedingungen und Aktionen einer Regel.

reactor_list_data_elements / reactor_get_data_element

Datenelemente, mit decodierten 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 entdecken Sie gültige delegate_descriptor_id-Werte.

reactor_list_libraries

Bibliotheken und ihr Workflow-Status.

reactor_get_library

Eine Bibliothek plus jede Regel, jedes Datenelement und jede Erweiterung, die sie enthält, sowie ihren letzten Build.

reactor_list_builds

Build-Verlauf für eine Bibliothek.

reactor_list_environments

Umgebungen 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 welcher Eigenschaft etwas lebt.

reactor_list_notes

An einer Ressource angehängte Notizen.

reactor_request

Roher Passthrough für die ~200 Endpunkte ohne dediziertes Werkzeug. Methodisch durch den Schreibmodus eingeschränkt.

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 wohlverhaltener Client vor der Ausführung eine Rückfrage stellt.


Hinweise zur API

Filtern. Listen-Tools akzeptieren ein filter-Objekt, das nach Attributen verschlüsselt ist, 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 auch 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.

Ratenbegrenzungen. Reactors Soft-Limit liegt bei etwa 120 Anfragen pro Minute und Integration. Der Client wiederholt 429- und 5xx-Antworten mit exponentiellem Backoff und beachtet dabei Retry-After.

Einstellungen. Reactor speichert die Delegate-Konfiguration als JSON-codierten String. Die Schreib-Tools akzeptieren ein einfaches Objekt und codieren es; die Lese-Tools decodieren es wieder. Wenn Sie einen String übergeben, wird er unverändert durchgereicht.

Veröffentlichungsmodell. Änderungen im Authoring sind wirkungslos. Um eine Änderung live zu schalten: Ressourcen erstellen oder bearbeiten → zu einer Bibliothek hinzufügen → die Bibliothek 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-Codierung, mehrseitiges Durchlaufen, Antwortformatierung und -abschneidung, settings-Encode-/Decode-Roundtripping, Konstruktion von Beziehungen, Absicherung des Schreibmodus (einschließlich der Tatsache, dass der rohe Passthrough nicht zur Umgehung genutzt werden kann) sowie die Fehlermeldungsqualität 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.

-
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