The Adobe Marketing Agent MCP connector routes your AI agent's tool calls to Adobe Marketing Agent's own MCP server through Scalekit. Each user signs in to Adobe Marketing Agent once, and Scalekit stores and refreshes their tokens, so your agent never handles credentials. It comes with 12 tools.
- Tools
- 12
- What they doRead · write · destructive
- 3 · 8 · 13 read8 write1 destructive
- Users sign in with
- OAuth
- OAuth app
- Scalekit's or your own
What you can do
- Ask for marketing insights: send plain-language questions to analyze audiences, troubleshoot journeys, and retrieve marketing insights
- Set working context: switch the active organization, Experience Platform sandbox, or Customer Journey Analytics dataview
- Track tasks and plans: check the status of long-running tasks and approve or reject a plan before it runs
Setup
Install the SDK
Terminal window npm install @scalekit-sdk/node dotenvTerminal window pip install scalekit-sdk-python python-dotenvSet your credentials
Add your Scalekit credentials to your
.envfile. Find values in app.scalekit.com > Developers > API Credentials..env SCALEKIT_ENVIRONMENT_URL=<your-environment-url>SCALEKIT_CLIENT_ID=<your-client-id>SCALEKIT_CLIENT_SECRET=<your-client-secret>Create the Adobe Marketing Agent MCP connection
In AgentKit > Connections, create an Adobe Marketing Agent MCP connection. The name you give it is the
connection_nameyour code passes. See Configure connections.Scalekit credentials are available for Adobe Marketing Agent MCP server, so you don't need to register an OAuth app. To show your own app on the consent screen, use your own credentials instead.
Use your own OAuth app
Adobe Marketing Agent MCP uses Dynamic Client Registration (DCR) — no client ID or secret is required. The only step is creating a connection in Scalekit and authorizing your Adobe account.
-
Create a connection in Scalekit
- In the Scalekit dashboard, go to AgentKit → Connections → Create Connection.
- Search for Adobe Marketing Agent MCP and click Create.
- Note the Connection name — use this as
connection_namein your code (e.g.,adobemarketingagentmcp).
-
Authorize your Adobe account
Generate an authorization link and open it in a browser to complete the Adobe OAuth flow.
The user is redirected to Adobe to sign in and grant access. Scalekit stores the token and injects it automatically into every tool call — no further configuration is needed.
-
Authorize a user and make your first call
quickstart.mts import { ScalekitClient } from '@scalekit-sdk/node'import 'dotenv/config'import { createInterface } from 'node:readline/promises'const scalekit = new ScalekitClient(process.env.SCALEKIT_ENVIRONMENT_URL,process.env.SCALEKIT_CLIENT_ID,process.env.SCALEKIT_CLIENT_SECRET,)const actions = scalekit.actionsconst connector = 'adobemarketingagentmcp'const identifier = 'user_123'// Generate an authorization link for the userconst { link } = await actions.getAuthorizationLink({ connectionName: connector, identifier })console.log('Authorize Adobe Marketing Agent MCP:', link)const rl = createInterface({ input: process.stdin, output: process.stdout })await rl.question('Press Enter after authorizing...')rl.close()// Make your first callconst result = await actions.executeTool({connector,identifier,toolName: 'adobemarketingagentmcp_core-list_tasks',toolInput: {},})console.log(result)Terminal window npx tsx quickstart.mtsquickstart.py import osfrom scalekit import ScalekitClientfrom dotenv import load_dotenvload_dotenv()scalekit_client = ScalekitClient(env_url=os.getenv("SCALEKIT_ENVIRONMENT_URL"),client_id=os.getenv("SCALEKIT_CLIENT_ID"),client_secret=os.getenv("SCALEKIT_CLIENT_SECRET"),)actions = scalekit_client.actionsconnection_name = "adobemarketingagentmcp"identifier = "user_123"# Generate an authorization link for the userlink_response = actions.get_authorization_link(connection_name=connection_name,identifier=identifier,)print("Authorize Adobe Marketing Agent MCP:", link_response.link)input("Press Enter after authorizing...")# Make your first callresult = actions.execute_tool(tool_input={},tool_name="adobemarketingagentmcp_core-list_tasks",connection_name=connection_name,identifier=identifier,)print(result)Terminal window python quickstart.pyEach user signs in once. See Authorize a user for the full flow and statuses.
Tools
Pass the exact name toexecute_tooladobemarketingagentmcp_adobe-marketing-agent-mcp-widgetSend a natural-language query to the Adobe Marketing AI assistant to analyze audiences, troubleshoot journeys, and retrieve marketing insights.Read-onlyAdobe Marketing Agent Mcp Widget
Send a natural-language query to the Adobe Marketing AI assistant to analyze audiences, troubleshoot journeys, and retrieve marketing insights.
Inputs
querystringrequired- The natural-language request or feedback message to send to the assistant.
asyncboolean- Compatibility flag; set to true to request async execution.
chat_idstring- Optional identifier to correlate this request with a chat or conversation context.
execution_modestring- Controls how the task runs; use async for long-running polling-based tasks.one of
syncasync long_runningboolean- Compatibility flag; set to true to request async execution for long-running tasks.
adobemarketingagentmcp_core-get_taskRetrieve the status and events for an async task by ID; use the cursor to poll only for new events since the last fetch.Read-onlyCore Get Task
Retrieve the status and events for an async task by ID; use the cursor to poll only for new events since the last fetch.
Inputs
task_idstringrequired- The unique identifier of the async task to retrieve.
cursorinteger- Offset cursor from the previous response; use 0 to fetch all events from the beginning.default
0
adobemarketingagentmcp_core-list_tasksList all async tasks associated with the current conversation context.Read-onlyCore List Tasks
List all async tasks associated with the current conversation context.
Inputs
This tool takes no inputs.
adobemarketingagentmcp_core-context-management-widgetDisplay and manage the current organization, sandbox, and dataview context, allowing the user to switch between them.WriteCore Context Management Widget
Display and manage the current organization, sandbox, and dataview context, allowing the user to switch between them.
Inputs
querystring- The natural-language request or feedback message to send to the assistant.
adobemarketingagentmcp_core-feedback-widgetShow an interactive feedback form with thumbs up/down and rating categories; falls back to text-based feedback if widgets are not supported.WriteCore Feedback Widget
Show an interactive feedback form with thumbs up/down and rating categories; falls back to text-based feedback if widgets are not supported.
Inputs
querystring- The natural-language request or feedback message to send to the assistant.
adobemarketingagentmcp_core-provide_feedbackSubmit user feedback about the AI assistant experience; automatically classifies sentiment and calls the feedback API.WriteCore Provide Feedback
Submit user feedback about the AI assistant experience; automatically classifies sentiment and calls the feedback API.
Inputs
commentstring- Optional free-text comment to accompany the feedback.
flagCategoriesarray- Categories of harmful content being reported; required when flagged is true.
flaggedboolean- Set to true if the feedback reports harmful content; triggers the flag API instead of sentiment feedback.
pickListarray- Selected feedback option labels chosen from the widget's predefined list.
querystring- The natural-language request or feedback message to send to the assistant.
sentimentstring- The user's overall sentiment rating for the interaction.one of
likedislike
adobemarketingagentmcp_core-set_dataviewSet the active Customer Journey Analytics dataview for the current session.WriteCore Set Dataview
Set the active Customer Journey Analytics dataview for the current session.
Inputs
dataviewNamestringrequired- The name of the Customer Journey Analytics dataview to set as the active context.
adobemarketingagentmcp_core-set_sandboxSet the active Adobe Experience Platform sandbox for the current session.WriteCore Set Sandbox
Set the active Adobe Experience Platform sandbox for the current session.
Inputs
sandboxNamestringrequired- The technical name (one word) of the Adobe Experience Platform sandbox to set as the active context.
adobemarketingagentmcp_core-switch_orgSwitch to a different Adobe organization by exchanging the current IMS token.WriteCore Switch Org
Switch to a different Adobe organization by exchanging the current IMS token.
Inputs
org_namestringrequired- The display name or IMS Org ID of the Adobe organization to switch to.
adobemarketingagentmcp_core-switch_sandbox_dataviewUpdate the active sandbox and/or dataview for the session in a single call.WriteCore Switch Sandbox Dataview
Update the active sandbox and/or dataview for the session in a single call.
Inputs
dataviewNamestring- The name of the Customer Journey Analytics dataview to set as the active context.
sandboxNamestring- The technical name (one word) of the Adobe Experience Platform sandbox to set as the active context.
adobemarketingagentmcp_core-user_preferencesRead or clear the user's persisted preferences including sandbox, dataview, org, and region settings.WriteCore User Preferences
Read or clear the user's persisted preferences including sandbox, dataview, org, and region settings.
Inputs
actionstring- Action to perform on preferences; get returns current settings, clear removes all saved preferences.one of
getcleardefaultget
adobemarketingagentmcp_core-plan_completion_decisionSubmit the user's approval or rejection for a pending plan before it is executed.DestructiveCore Plan Completion Decision
Submit the user's approval or rejection for a pending plan before it is executed.
Inputs
decisionstringrequired- The user's approval decision for the pending plan.one of
ApproveReject
No tools match.
Workflows
Send a query to the Adobe Marketing AI assistant
Use adobemarketingagentmcp_adobe-marketing-agent-mcp-widget to ask questions about your campaigns, audiences, journeys, and Analytics data in plain English.
const result = await actions.executeTool({ connector: 'adobemarketingagentmcp', identifier: 'user_123', toolName: 'adobemarketingagentmcp_adobe-marketing-agent-mcp-widget', toolInput: { query: 'What are my top performing audience segments this month?', },});console.log(result);result = actions.execute_tool( connection_name="adobemarketingagentmcp", identifier="user_123", tool_name="adobemarketingagentmcp_adobe-marketing-agent-mcp-widget", tool_input={ "query": "What are my top performing audience segments this month?", },)print(result)Switch sandbox and dataview
Use adobemarketingagentmcp_core-switch_sandbox_dataview to update the active Adobe Experience Platform sandbox and Customer Journey Analytics dataview in a single call.
const result = await actions.executeTool({ connector: 'adobemarketingagentmcp', identifier: 'user_123', toolName: 'adobemarketingagentmcp_core-switch_sandbox_dataview', toolInput: { sandboxName: 'prod', dataviewName: 'My Analytics View', },});console.log(result);result = actions.execute_tool( connection_name="adobemarketingagentmcp", identifier="user_123", tool_name="adobemarketingagentmcp_core-switch_sandbox_dataview", tool_input={ "sandboxName": "prod", "dataviewName": "My Analytics View", },)print(result)Poll an async task
Some Adobe Marketing operations run asynchronously. Submit a query with execution_mode: "async", then poll with adobemarketingagentmcp_core-get_task until the task completes.
// Step 1 — submit async queryconst submitted = await actions.executeTool({ connector: 'adobemarketingagentmcp', identifier: 'user_123', toolName: 'adobemarketingagentmcp_adobe-marketing-agent-mcp-widget', toolInput: { query: 'Generate a full audience overlap report', execution_mode: 'async', },});const taskId = submitted.data?.task_id;
// Step 2 — poll until completelet cursor = 0;while (true) { const status = await actions.executeTool({ connector: 'adobemarketingagentmcp', identifier: 'user_123', toolName: 'adobemarketingagentmcp_core-get_task', toolInput: { task_id: taskId, cursor }, }); cursor = status.data?.cursor ?? cursor; if (status.data?.status === 'completed') { console.log(status.data.result); break; } await new Promise(r => setTimeout(r, 2000));}import time
# Step 1 — submit async querysubmitted = actions.execute_tool( connection_name="adobemarketingagentmcp", identifier="user_123", tool_name="adobemarketingagentmcp_adobe-marketing-agent-mcp-widget", tool_input={ "query": "Generate a full audience overlap report", "execution_mode": "async", },)task_id = submitted.data.get("task_id")
# Step 2 — poll until completecursor = 0while True: status = actions.execute_tool( connection_name="adobemarketingagentmcp", identifier="user_123", tool_name="adobemarketingagentmcp_core-get_task", tool_input={"task_id": task_id, "cursor": cursor}, ) cursor = status.data.get("cursor", cursor) if status.data.get("status") == "completed": print(status.data.get("result")) break time.sleep(2)Read and clear user preferences
User preferences (sandbox, dataview, org, region) persist for 90 days. Use adobemarketingagentmcp_core-user_preferences to read or clear them.
// Read current preferencesconst prefs = await actions.executeTool({ connector: 'adobemarketingagentmcp', identifier: 'user_123', toolName: 'adobemarketingagentmcp_core-user_preferences', toolInput: { action: 'get' },});console.log(prefs.data);
// Clear all preferencesawait actions.executeTool({ connector: 'adobemarketingagentmcp', identifier: 'user_123', toolName: 'adobemarketingagentmcp_core-user_preferences', toolInput: { action: 'clear' },});# Read current preferencesprefs = actions.execute_tool( connection_name="adobemarketingagentmcp", identifier="user_123", tool_name="adobemarketingagentmcp_core-user_preferences", tool_input={"action": "get"},)print(prefs.data)
# Clear all preferencesactions.execute_tool( connection_name="adobemarketingagentmcp", identifier="user_123", tool_name="adobemarketingagentmcp_core-user_preferences", tool_input={"action": "clear"},)