Skip to main content
Glama
mercuryadvising

Adobe Launch / Tags MCP Server

Adobe Launch / Tags MCP Server

一个封装了 Adobe Experience Platform Reactor API 的 MCP 服务器——该 API 是 Adobe Launch(现称 Adobe Experience Platform Tags)背后的 API。

它让助手可以读取你的标签属性、规则、数据元素、扩展、库和环境,并具备编写更改的能力。默认情况下它不会发布任何内容。 除非你显式启用 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 于 2025 年 1 月 1 日停用了 Service Account (JWT) 流程。你需要一个 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

服务器在 https://ims-na1.adobelogin.com/ims/token/v3 将这些凭据换取 24 小时访问令牌,并自动刷新。你无需自己处理令牌。

2. 安装

预构建、无依赖的捆绑包位于 build/adobe-launch-reactor-mcp.mjs。它是一个独立的 ESM 文件——运行服务器无需 npm install。唯一的前提条件是 Node 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

是

—

来自 Developer Console 的客户端 ID;也作为 x-api-key 发送。

REACTOR_CLIENT_SECRET

是

—

客户端密钥。

REACTOR_ORG_ID

是

—

IMS 组织 ID,以 @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

为非 NA1 IMS 区域更改。

REACTOR_MAX_RESPONSE_CHARS

否

60000

单个工具响应在截断前的上限。

REACTOR_TIMEOUT_MS

否

30000

每次请求的超时时间。

写入模式

模式

可以

不可以

read(默认)

列出和获取所有内容、搜索、读取审计事件

任何修改

safe

read 中的所有内容,加上创建/更新规则、规则组件、数据元素、扩展、库、注释;组装库内容

删除、构建、发布

dangerous

所有内容,包括删除、reactor_create_build 和 reactor_transition_library(提交/批准/发布)

—

该模式在两个地方强制执行:写入工具在其层级以下根本不会注册,reactor_request 逃生舱按模式白名单化 HTTP 方法——因此模型无法通过调用原始端点绕过层级。

safe 是大多数工作的正确默认值。Reactor 中的编写是非破坏性的:新建或编辑的规则处于属性的编写状态,在包含它的库被构建和发布之前,不会对线上站点产生任何更改。将发布放在单独的、显式启用的层级中,意味着错误是你在 UI 中修复的事情,而不是事故。


工具

读取(所有模式)

工具

功能

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)

reactor_create_build、reactor_transition_library、reactor_delete_resource。这三个都需要显式的 confirm: true 参数,并带有 MCP destructiveHint 注解,因此行为良好的客户端会在运行前提示确认。


API 说明

过滤。 列表工具接受一个以属性为键的 filter 对象,值的形式为 "操作符 值"。操作符: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(rule components 还有 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 UI 中执行。


开发

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