aep について
aepは、Adobe Experience Platform、Journey Optimizer、Customer Journey Analyticsを扱うセルフホスト可能なMCPサーバーです。Adobeのデータワークフローを管理するエージェント向けに、サンドボックスを考慮した保護付きの読み書きツールを提供します。
主な機能
- 0114カテゴリにわたる61種類のツール
- 02AEPの読み取りと書き込み
- 03スキーマ、データセット、バッチ処理
- 04オーディエンスの作成と有効化
- 05プライバシーとデータライフサイクル管理
- 06サンドボックスを考慮した書き込み保護
活用シーン
- 01スキーマとデータセットを作成してバッチを取り込む
- 02オーディエンスを作成し、宛先で有効化する
- 03データ消去リクエストを送信して追跡する
- 04Journey OptimizerのキャンペーンとCJAデータを確認する
MCP 対応
stdio経由でMCPクライアントに61種類のツールを公開し、OAuth Server-to-Server認証でAdobe APIに接続します。書き込みは別途有効化が必要で、サンドボックスの種類と設定モードに応じて保護されます。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
npx -y @focusgts/aep-mcp-serverAEP_CLIENT_IDAdobe I/O client ID from an OAuth Server-to-Server credential in the Adobe Developer Console.AEP_CLIENT_SECRETシークレットAdobe I/O client secret paired with AEP_CLIENT_ID.AEP_ORG_IDAdobe IMS organization ID, in the form xxxxxxxxx@AdobeOrg.AEP_SANDBOX_NAMEAEP sandbox to scope every call to. Defaults to 'prod'. Use a development sandbox to enable write operations.AEP_MODEWrite posture: 'read-only' (no mutation anywhere), 'safe' (default — writes only in sandboxes Adobe classifies as development), or 'production' (writes anywhere). Reads are never restricted.LOG_LEVELPino log level. Logs go to stderr; stdout is reserved for the MCP JSON-RPC stream.ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
Adobe の MCP では、エージェントは Experience Platform の情報を読み取れます。こちらでは作業できます。
14 カテゴリーにわたる 61 のツール。読み取りも書き込みも完全対応。セルフホスト可能、Apache-2.0、招待不要。 1 つの OAuth 認証情報で、Experience Platform、Journey Optimizer、Customer Journey Analytics を利用できます。
バッチを取り込み → スキーマを作成 → オーディエンスを有効化 → 消去要求に対応。 すべての変更操作は、Adobe にサンドボックスの種類を問い合わせる、フェイルクローズ方式の書き込みガードで制御されます。
⚡ 3 行で始める
claude mcp add aep \
-e AEP_CLIENT_ID=... -e AEP_CLIENT_SECRET=... \
-e AEP_ORG_ID=...@AdobeOrg -e AEP_SANDBOX_NAME=your-dev-sandbox \
-- npx -y @focusgts/aep-mcp-server
あとはエージェントに依頼するだけです。
「Demographic Details フィールドグループを使ってスキーマを作成し、そのスキーマに基づくデータセットを作成してください。」 「この NDJSON ファイルを取り込み、バッチが到着したら教えてください。」 「今四半期に 2 回購入した顧客のオーディエンスを作成して、有効化してください。」 「このメールアドレスのレコードをすべて削除してください。まずドライランを実行してください。」
書き込みは依頼されるまで無効です。また、safe モードで許可されるのは、Adobe が開発用と分類したサンドボックスのみです。
これを際立たせる処理の流れ
flowchart LR
A["📐 Compose<br/>schema from field groups"] --> B["🗂️ Create<br/>dataset"]
B --> C["📥 Ingest<br/>batch · upload · complete"]
C --> D["🎯 Activate<br/>segment → destination"]
D --> E["🧹 Govern<br/>erasure · expiration · quota"]
E -. "re-audit the tenant" .-> A
Adobe のファーストパーティゲートウェイでは、Experience Platform テナントに何があるかを確認できます。しかし、データセットの作成、バッチの取り込み、オーディエンスの有効化、消去要求の送信はできません。このサーバーなら実行でき、フェイルクローズ方式のガードによって保護されています。
🧠 仕組み
flowchart LR
A["AI agent<br/>(Claude · Cursor · Copilot)"] -- MCP / stdio --> B["aep-mcp-server<br/>61 tools"]
B --> W{{"write guard<br/>fail-closed"}}
W --> C["Schema Registry · Catalog<br/>Ingestion · Lifecycle · Privacy"]
C --> F["Your AEP sandbox<br/>platform.adobe.io"]
B --> J["Journey Optimizer<br/>read-only"]
J --> K["ajo campaigns"]
B --> Q["Customer Journey Analytics<br/>read-only, no sandbox"]
Q --> L["cja.adobe.io"]
エージェントがツールを呼び出し、サーバーが OAuth Server-to-Server を介して Adobe のライブ API と通信します。書き込みガードは各ツールではなく HTTP クライアントに配置されているため、61 個すべてに適用され、どのツールでも適用漏れはありません。ブロックされた呼び出しが Adobe に到達することはありません。
🛡️ デフォルトで安全
3 つのモードがあります。どのモードでも読み取りは制限されません。
AEP_MODE | 書き込みの許可範囲 | 使用する場面 |
|---|---|---|
read-only | どのサンドボックスでも許可されません | 環境に変更を加えずに調査してもらうため、サーバーを誰かに渡す場合 |
safe (default) | Adobe がサンドボックスを development と分類している場合のみ | 本番環境を危険にさらすことなく評価を行う場合、またはエージェントに作業させる場合 |
production | 本番環境を含む、すべての環境 | 独自の変更管理を行っており、サーバーに判断を委ねたくない場合 |
safeの判定方法 — サンドボックス名で判定しない理由。 本番サンドボックスにどのような名前を付けてもよく、prodという名前のサンドボックスが本番環境とは限りません。判定に使われるのは、Sandbox Management API の Adobe のtypeフィールドだけです。判定できない場合は安全側に倒します。 タイプを判定できない場合 — 認証情報でサンドボックスのメタデータを読み取れない、API エラーが発生した、起動が完了していないなど — は、書き込みがブロックされます。認証情報の能力が低いことで、書き込み権限が付与されてはなりません。認識できない
AEP_MODEはsafeにフォールバックするため、入力ミスで本番環境への書き込みが許可されることはありません。名前が文字どおり
prodのサンドボックスは、モードの解決前に無条件で拒否されます。 そのため、AEP_MODE=productionを設定しても許可されません。本当にそのサンドボックスの名前がprodである場合に限り、AEP_I_UNDERSTAND_THIS_WRITES_TO_PROD=trueで上書きできます。推測の扱いは意図的に非対称です。名前を根拠に書き込みを許可するのは安全ではありませんが、名前を根拠に書き込みを拒否するのは安全です。最悪の場合でも、意図して上書きできる拒否にとどまるためです。
AEP_ALLOW_MUTATIONS=trueが設定されていない限り、変更操作は完全に無効です。 これは意図的にAEP_MODEとは別になっています。書き込みモードを選ぶことが、「データの変更を許可する」ことにもなるべきではありません。
起動時には、常に有効なモードが表示されます。
SAFE MODE — sandbox is a development sandbox, so writes are ENABLED.
SAFE MODE — sandbox is PRODUCTION, so writes are BLOCKED. Reads work normally.
SAFE MODE — sandbox type could not be confirmed, so writes are BLOCKED (fail-closed).
READ-ONLY MODE — no write, update, or delete will be performed in any sandbox.
PRODUCTION MODE — writes permitted against ANY sandbox, including production.
ツールごとの確認ゲート
書き込み操作に一律のゲートを設けているわけではありません。一律にゲートを設けると、エージェントが役に立たなくなるためです。ゲートは、取り消し不能で影響範囲の広い操作に設けられており、いずれもネットワーク呼び出しの前に確認されます。
| ツール | ゲート |
|---|---|
aep_create_record_delete | dryRun の既定値は true です。実際に送信するには confirm: "DELETE RECORDS <datasetId> <identityDigest>" が必要です。データセットと、対象となる ID セットの SHA-256 ダイジェストの両方に紐付けられているため、別の削除操作に確認を使い回すことはできません。ALL および複数データセットを対象とする操作は拒否されます。 |
aep_delete_segment | confirm: "DELETE SEGMENT <segmentId>" が必要です。0.9.1 まではセグメントを作成することしかできなかったため、エージェントが作成したものはすべて永続的に残っていました。 |
aep_delete_dataset | confirm: "DELETE DATASET <id>" が必要です。データセットが Profile にデータを供給する場合は、"DELETE PROFILE-ENABLED DATASET <id>" にエスカレーションされます。 |
aep_complete_batch | confirm: "COMPLETE BATCH <batchId>" が必要です。取り込みにおける後戻りできない時点です。 |
aep_revert_batch | confirm: "REVERT BATCH <batchId>" が必要です。 |
aep_create_dataset_expiration | dryRun: true でない限り、confirm: "CREATE DATASET EXPIRATION <datasetId>" が必要です。 |
aep_update_dataset_expiration | confirm: "UPDATE DATASET EXPIRATION <ttlId>" が必要です。 |
aep_cancel_dataset_expiration | confirm: "CANCEL DATASET EXPIRATION <ttlId>" が必要です。 |
aep_delete_profile | confirm: "I understand this is irreversible" が必要です(非推奨。Data Hygiene の使用を推奨します)。 |
確認文には対象が明記されます。 データセット ID を含むフレーズは、レコード削除の場合は ID のハッシュも含むため、ある呼び出しの確認文を別の呼び出しに流用できません。汎用的な
"I understand this is irreversible"では、一度入力するとあらゆる削除が承認されてしまいます。ID 値がプロセスの外に出ることはありません。
aep_create_record_deleteが返すのは件数、名前空間名、ダイジェストのみで、渡されたメールアドレスやデバイス ID は返しません。レコード削除のリクエストには、本質的に実在する人物のリストが含まれます。それらをそのまま返すツールは、触れるすべてのトランスクリプトやログの保存先に情報をコピーすることになります。バッチの作成とファイルのアップロードにゲートを設けていないのは意図的です。これらの書き込みは追加型で、復旧可能だからです。不要なバッチは未完了のままにでき、取り込まれたデータは Data Hygiene ツールで削除できます。
ツールのアノテーション
すべてのツールには、readOnlyHint、destructiveHint、idempotentHint、openWorldHint の MCP アノテーションが付与されます。これらは説明の生成に使われるものと同じメタデータから導出されるため、両者に食い違いは生じません。
| 件数 | |
|---|---|
readOnlyHint: true | 39 |
destructiveHint: true | 8 |
| アノテーションなし | 0 |
これらはクライアント向けのヒントであり、強制機能ではありません。強制するのは上記のガードです。ヒントの利点は、Claude Desktop のようなクライアントが destructiveHint を使い、人間に確認を求めるタイミングを判断できることです。これがないと、aep_delete_profile と aep_list_schemas は同じように見えてしまいます。破壊的な操作の一覧が完全に一致することをテストで検証しているため、9 つ目が追加される場合は、見落としではなく意図的な変更となります。
🛠️ 61 個のツール
すべて aep_ を接頭辞とし、verb_noun 形式の命名です。🔒 は状態を変更し、🔥 は破壊的な操作です。
データモデリングと取り込み
|
スキーマ(4)
データセット(4)
|
取り込み(7)
|
ソース(2)
Query Service(3)
|
|
ID(2)
|
プロファイル(4)
|
セグメント(5)
宛先(3)
|
ガバナンス — プライバシー、ライフサイクル、イベントルーティング
|
プライバシーサービス(6)
|
データハイジーン(9)
|
これらで実現できるワークフロー
データをエンドツーエンドで取り込む —
create_schema→create_dataset→create_batch→upload_batch_file→complete_batch→get_batch_statusオーディエンスを作成してアクティベートする —
create_segment→estimate_segment_size→list_destinations→create_destination_connection→activate_segment消去リクエストに対応する —
get_profile_by_identity→create_record_delete→get_work_order_statusスケジュールに従ってデータを廃棄する —
create_dataset_expiration→list_dataset_expirations→update_dataset_expiration→cancel_dataset_expiration
実際のテナントで実行した内容は、各ツールごとに docs/VALIDATION-MATRIX.md に記録されています。ドキュメント化されモック化されているものの、意図的に一度も実行していないサーフェスと、その理由も含まれます。
Adobe Journey Optimizer(2)
AJO は別の Adobe 製品であり、別途ライセンスが必要です。そのため、ajo_ プレフィックスを付けて、権限エラーがひと目でわかるようにしています。
|
キャンペーン
|
キャンペーンは、テナントで利用できる AJO サーフェスの唯一のものです。ジャーニー、メッセージ、チャネルサーフェス、コンテンツテンプレート、フラグメント、オファー、意思決定はすべて HTML 404 を返します。ゲートウェイにそのようなルートがないため、意図的に実装していません。 |
書き込み操作を含めていないのは意図的です。ルートは存在しますが、実在の人々にメッセージを送信する製品に、検証されていない書き込み経路を導入する価値はありません。
📊 AEC-Bench — エージェントは実際に動作しますか?
この分野のすべての MCP サーバーは、ツールの数で説明されています。それが測るのは対応範囲であって、実力ではありません。404 を返すツールが50個あるより、動作するツールが10個ある方が優れています。
bench/ はエージェント型ベンチマークで、もう一つの指標を測定します。実際のタスクとライブテナントを与えたとき、エージェントはタスクを完了できるのか、それを証明できるのか、という点です。
npm run bench # tier 1, read-only, safe on any tenant
npm run bench:write # tier 2, creates and removes what it creates
| Adobe に対して実行するアサーション | 「セグメントを作成する」タスクは、作成呼び出し自体の成功フラグではなく、GET でセグメントが見つかるかどうかで評価します。書き込み処理が自分自身について報告しても、証拠にはなりません。 |
| クリーンアップも評価対象 | 孤立したデータを残したまま目標を達成しても合格ではありません。テナントを汚すベンチマークを正直に実行できるのは一度きりです。 |
| ティア1は本番環境で安全 | GET のみです。誰も実行する勇気のないベンチマークでは、何も測れません。 |
現在:ティア1は5/5、ティア2は2/2、残留物はゼロです。 ティア3(不可逆)は定義済みですが、意図的に空にしています。対象タスクはキャンセルできず、完了まで30日かかる場合があります。ベンチマークは、それを実行する正当な理由にはなりません。
未構築のタスクでは低いスコアになると予想しています。それが意図した使い方です。
📈 カスタマージャーニー分析(10)
1つのOAuth認証情報で、3つのAdobeサービスを利用できます。 AEP_CLIENT_ID を所有する同じDeveloper ConsoleプロジェクトにCustomer Journey Analytics APIを追加すると、cja_* ツールが使えるようになります。2つ目のシークレットも、別の認証も不要です。
|
検出
|
レポート
|
AEPのサンドボックスとCJAの会社は別物です
| AEP | CJA | |
|---|---|---|
| ホスト | platform.adobe.io | cja.adobe.io |
| スコープの単位 | サンドボックス(AEP_SANDBOX_NAME) | グローバル会社ID — またはIMS組織 |
| ヘッダー | x-sandbox-name | x-proxy-global-company-id (省略可能 — 下記参照) |
| もう一方に対応するか? | いいえ。 CJAの接続やデータビューは、どのAEPサンドボックスとも1対1では対応しません。 |
CJAクライアントは**x-sandbox-nameを送信しません。** CJAにはサンドボックスの概念がなく、これを付与しても、せいぜい意味がなく、トレースを誤解させるだけです。
会社の検出と、機能しない場合がある理由
Adobeがドキュメントで案内している検出エンドポイントは、GET https://analytics.adobe.io/discovery/meです。このホストはAdobe Analyticsに属しており、CJAとは別の製品です。 CJAの権限はあるもののAnalyticsの権限がない認証情報では、ここで403003 Api Key is invalidが返されます。キーに問題があるのではなく、Analyticsの権限がないだけです。CJAには独自の検出機能がありません。
実際には、これによって何かが妨げられることはありません。CJAはx-gw-ims-org-idだけで、あらゆるリソースに応答するため、会社IDは省略可能です。
# Optional. Omit it and CJA scopes by IMS org, which is what works by default.
CJA_GLOBAL_COMPANY_ID=your-global-company-id
cja_list_companiesは、現在どのコンテキストが使われているか、検出に到達できるかを報告します。検出によって複数の会社が返され、オーバーライドも設定されていない場合は、どれかを選ぶことを拒否します。黙って最初の会社を選ぶと、その後のすべてのレポートが誤った会社を参照してしまいます。
プローブとライブテストの実行
node scripts/probe-cja.mjs --env .env # read-only, sanitized output
CJA_LIVE_TESTS=1 npm test -- tests/integration/cja-live.test.ts
ライブテストは**CJA_LIVE_TESTS=1の場合を除いてスキップされる**ため、npm testは外部環境に依存せずに実行できます。テストは読み取り専用で、認証情報やAdobeの応答全体を出力することはありません。
現時点の制限事項について
- 変更ツールはありません。 この機能は意図的に読み取り専用です。
- 上記のとおり、CJAのみの認証情報では検出を利用できません。ツールの不具合ではありません。
cja_get_connectionは検証されていません — 検証用テナントには接続が1つもなく、テストを通すためにIDを捏造することはありません。- ディメンションとメトリックのページングは機能しません。 CJAはこれらをページング可能に見える
contentエンベロープでラップしますが、limitとpageは無視されます。実環境で確認したところ、いずれの場合も全38件のディメンションが返されました。search、limit、offsetはクライアント側で適用され、その旨が出力に示されます。
🥊 Adobe のファーストパーティ Experience Platform ツールとの比較
Adobe は CX Coworker Gateway を通じてファーストパーティツールを提供しています。これは本当に優れた製品です。テナントについて質問するだけであれば、こちらをお使いください。
| Adobe AEP tools (CX Coworker Gateway) | @focusgts/aep-mcp-server | |
|---|---|---|
| 操作 | 読み取り専用(search_*) | 完全な CRUD(読み取り+書き込み) |
| ツール数 | 8 | 61 |
| アクセス | 招待制+組織による有効化 | npm install — API 認証情報があれば、どの組織でも利用可能 |
| バッチ取り込み | 利用不可 | 7 個のツール |
| プロファイル/ID | 対象外 | 6 個のツール |
| Privacy Service | 対象外 | 6 個のツール |
| Data Lifecycle | 対象外 | 9 個のツール |
| トランスポート | Adobe ホスト型ゲートウェイ | stdio(ローカルで、ほかの MCP と組み合わせ可能) |
| データ経路 | クエリは Adobe のゲートウェイを経由 | 完全に独自の VPC 内で実行 |
| ライセンス | プロプライエタリ | Apache 2.0 |
| エラーレスポンス | — | 構造化された AEP_{status} コード |
Journey Optimizer と CJA について: Adobe はどちらにも別個のファーストパーティ MCP サーバーを提供しているため、上の表では意図的に「対象外」と記載していません。そのように記載すると誤りになるためです。このサーバーが追加で提供するのは、3 つすべてに対応する単一の認証情報と、Adobe のゲートウェイでは利用できない AEP 側の書き込み経路です。ここにある AJO と CJA のツールは読み取り専用です。
オーディエンスと宛先も利用できますが、同じゲートウェイ上の別個の Real-Time CDP ツールセットに含まれています。また Adobe は、オーディエンス、宛先、データフローの作成、アクティブ化、更新、削除はいずれもサポートされないと明言しています。読み取り専用という制限は、ゲートウェイ全体に適用されます。
両者は競合するものではなく、補完し合うものです。管理された読み取りには Adobe のゲートウェイを使い、書き込みにはこのサーバーを組み合わせてください。
Adobe の数値は、Experience Platform ツールのページ(最終更新日:2026 年 7 月 17 日)から確認しました。
search_datasets、search_class_relations、search_data_access、search_data_lake、search_dule、search_query_service、search_audit、search_allowed_ip_rangesが含まれています。これはベータ版の機能であり、変更される可能性があるため、現在の数値はドキュメントでご確認ください。長期的に変わらない違いは数ではなく、読み取りと書き込みの分担です。
🔌 ツールに追加する
Claude Code — コマンド 1 つ
claude mcp add aep \
-e AEP_CLIENT_ID=... -e AEP_CLIENT_SECRET=... \
-e AEP_ORG_ID=...@AdobeOrg -e AEP_SANDBOX_NAME=your-dev-sandbox \
-- npx -y @focusgts/aep-mcp-server
Claude Desktop — claude_desktop_config.json
~/Library/Application Support/Claude/claude_desktop_config.json(macOS)または %APPDATA%\Claude\claude_desktop_config.json(Windows):
{
"mcpServers": {
"aep": {
"command": "npx",
"args": ["-y", "@focusgts/aep-mcp-server"],
"env": {
"AEP_CLIENT_ID": "...",
"AEP_CLIENT_SECRET": "...",
"AEP_ORG_ID": "...@AdobeOrg",
"AEP_SANDBOX_NAME": "your-dev-sandbox"
}
}
}
}
Cursor — .cursor/mcp.json
{
"mcpServers": {
"aep": {
"command": "npx",
"args": ["-y", "@focusgts/aep-mcp-server"],
"env": {
"AEP_CLIENT_ID": "...",
"AEP_CLIENT_SECRET": "...",
"AEP_ORG_ID": "...@AdobeOrg",
"AEP_SANDBOX_NAME": "your-dev-sandbox"
}
}
}
}
VS Code (GitHub Copilot) — .vscode/mcp.json
{
"servers": {
"aep": {
"command": "npx",
"args": ["-y", "@focusgts/aep-mcp-server"],
"env": {
"AEP_CLIENT_ID": "...",
"AEP_CLIENT_SECRET": "...",
"AEP_ORG_ID": "...@AdobeOrg",
"AEP_SANDBOX_NAME": "your-dev-sandbox"
}
}
}
}
🔐 認証情報
developer.adobe.com/consoleで取得します。プロジェクトを作成 → Experience Platform APIを追加 → OAuth Server-to-Serverを選択します。
| 変数 | 必須 | 説明 |
|---|---|---|
AEP_CLIENT_ID | はい | Adobe I/O クライアント ID |
AEP_CLIENT_SECRET | はい | Adobe I/O クライアントシークレット |
AEP_ORG_ID | はい | IMS 組織 ID — @AdobeOrgで終わる必要があります |
AEP_SANDBOX_NAME | はい | すべての呼び出しの対象となるサンドボックス。デフォルト値なし — 詳細は以下を参照 |
AEP_ALLOW_MUTATIONS | いいえ | 書き込みを許可する場合はtrueに設定します。デフォルトでは無効です |
AEP_MODE | いいえ | read-only · safe (デフォルト) · production |
AEP_I_UNDERSTAND_THIS_WRITES_TO_PROD | いいえ | サンドボックスの名前が実際にprodの場合のみ |
AEP_LOG_RESPONSE_BODIES | いいえ | Adobe の未加工エラーボディをログに記録します。デフォルトでは無効です — Adobe はリクエストのコンテキストを返すため、そこに ID 値が含まれる場合があります |
LOG_LEVEL | いいえ | Pino のレベル(デフォルトはinfo) |
AEP_REQUEST_TIMEOUT_MS | いいえ | リクエストごとのタイムアウト(デフォルトは30000) |
AEP_MAX_RETRIES | いいえ | 429/5xx の場合の再試行回数(デフォルトは3) |
CJA_GLOBAL_COMPANY_ID | いいえ | CJA のグローバル会社 ID。この認証情報の形式では CJA は IMS 組織に基づいてスコープされるため、省略してください。明示的なx-proxy-global-company-idを強制する場合にのみ設定します |
CJA_BASE_URL | いいえ | CJA ホストを上書きします(デフォルトはhttps://cja.adobe.io) |
CJA_REQUEST_TIMEOUT_MS | いいえ | CJA のリクエストごとのタイムアウト(デフォルトは30000) |
CJA_MAX_RETRIES | いいえ | CJA の429/5xxに対する再試行回数(デフォルトは3) |
CJA_LIVE_TESTS | いいえ | オプトインのライブ CJA 統合テストを有効にするには1に設定します |
AEP_SANDBOX_NAMEにデフォルト値がないのは意図的です。 以前はprodにフォールバックしていたため、設定ファイルで1行が欠けていると、警告なしに読み取りも含むすべてのリクエストが本番環境に送られていました。安全なデフォルト値はありません。誤った推測は、間違った環境で読み取りや書き込みが行われるまで、正しい設定と区別できないためです。明示的にprodを設定することは可能です。これは明確で意図的な選択であり、その場合も書き込みガードによって変更操作は拒否されます。サンドボックスのスコープ設定。 すべてのツールは
x-sandbox-nameを送信し、Query Service はデータベースを<AEP_SANDBOX_NAME>:allとして導出します。
🧾 利用資格
Adobe のすべての組織がすべての AEP 製品のライセンスを持っているわけではありません。ツールがAEP_403を返す場合、通常は認証情報の不備ではなく、利用資格の不足を意味します。
| カテゴリ | 必要な利用資格 |
|---|---|
| スキーマ · データセット · 取り込み | AEP(基本) |
| ID | AEP(基本)+ Identity Service |
| プロファイル · セグメント · 宛先 | Real-Time CDP |
| ソース | AEP(基本)— コネクターの利用可否は SKU によって異なります |
| Query Service | AEP Query Service アドオン |
| Privacy Service | Adobe Privacy Service(別売り) |
| Data Hygiene | AEP(基本)。Adobe はここで Data Distiller が必要とは記載していません — この表の以前のバージョンでは誤って必要と記載していました。401は、順に、組織、サンドボックス、または認証情報プロファイルが間違っていることを意味します |
🏗️ アーキテクチャ
TypeScript のstrictをエンドツーエンドで適用し、@modelcontextprotocol/sdkとzod、stdio トランスポートを使用します。リクエストごとにステートレスです。
flowchart LR
C["MCP client<br/>Claude · Cursor<br/>Copilot · ChatGPT"]
T["aep-mcp-server<br/><b>61 tools</b><br/>14 categories"]
G{{"write guard<br/>fail-closed"}}
A1["Schema Registry<br/>· Catalog"]
A2["Batch Ingestion"]
A3["UPS · Segmentation<br/>· Destinations"]
A4["Data Lifecycle<br/>· Privacy"]
IMS[/"Adobe IMS<br/>OAuth S2S"/]
C -- "stdio · JSON-RPC 2.0" --> T
T -- "every call, no exceptions" --> G
IMS -. "token cache · 401 re-auth" .-> T
G -- "HTTPS · Bearer · x-sandbox-name" --> A1
G --> A2
G --> A3
G --> A4
重複排除されたトークンキャッシュを使用する OAuth Server-to-Server、PII をマスキングする構造化 Pino ロギング、指数バックオフによる再試行、自動的な401再認証、動作するカーソルページネーション、構造化されたAEP_{status}エラーコード、グレースフルシャットダウンのライフサイクルを備えています。すべてのログはstderrに出力されます — stdout は MCP JSON-RPC ストリーム用に予約されています。
🧪 開発
git clone https://github.com/Focus-GTS/aep-mcp-server.git
cd aep-mcp-server && npm install && npm run build && npm test
npm run dev # tsx src/server.ts (hot-reload)
npm test # vitest — 509 tests
npm run typecheck # tsc --noEmit
npm run tools # print the registered tool surface
npm run test:liveは、実際の IMS 組織とサンドボックスに対して読み取り専用のスモークテストを実行し、認証情報、利用資格、サンドボックスのスコープ設定をエンドツーエンドで検証します。破壊的なツールは一切呼び出さず、AEP_SANDBOX_NAMEが本番以外のサンドボックスを指している必要があります。
🧩 Focus GTS Adobe スイートの一部
| eds-mcp-server | Adobe Edge Delivery Services 用の MCP サーバー — サイトの読み取り、監査、修正、公開、元に戻す操作ができます |
| eds-content-ops-skills | EDS コンテンツ運用向けの AI スキル — Adobe の公式スキルリポジトリにマージされた初のサードパーティー貢献です |
| eds-ops | サイトの自動評価と PR ゲート処理を行う CLI と GitHub Action |
| EDS Score | 無料のブラウザベースのサイト健全性分析ツール |
Focus GTS が開発 — Adobe Silver Solution Partner · Apache-2.0
バグ報告と PR を Focus-GTS/aep-mcp-server で歓迎します · [email protected]
Adobe Inc. または Anthropic, PBC とは提携しておらず、いずれからも承認を受けていません。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。