Skip to content

Connect Adobe Marketo Engage to ChatGPT: Orchestrate Assets & Flows

Learn how to connect Adobe Marketo Engage to ChatGPT using an auto-generated MCP server. Automate bulk imports, trigger smart campaigns, and orchestrate assets.

Riya Sethi Riya Sethi · · 9 min read
Connect Adobe Marketo Engage to ChatGPT: Orchestrate Assets & Flows

If you need to connect Adobe Marketo Engage to ChatGPT to automate bulk lead imports, trigger smart campaigns, or orchestrate marketing assets, you need a Model Context Protocol (MCP) server. This server acts as the translation layer, dynamically mapping ChatGPT's JSON-RPC tool calls into Adobe Marketo Engage's highly specific REST API payloads.

If your team uses Claude, check out our guide on connecting Adobe Marketo Engage to Claude or explore our broader architectural overview on connecting Adobe Marketo Engage to AI Agents.

Giving a Large Language Model (LLM) read and write access to an enterprise marketing automation platform is an engineering challenge. You must handle complex bulk asynchronous jobs, strict concurrency limits, and custom object routing. Every time Adobe updates an endpoint or your marketing ops team adds a custom object, a hard-coded custom MCP server would require redeployment.

This guide breaks down exactly how to use Truto's managed infrastructure to dynamically generate a secure, authenticated MCP server for Adobe Marketo Engage. We will cover how to connect it natively to ChatGPT and execute complex marketing workflows using natural language.

The Engineering Reality of the Adobe Marketo Engage API

Building a custom MCP server means owning the integration layer in its entirety. While the open MCP standard provides a predictable JSON-RPC 2.0 handshake for models to discover tools, implementing it against Marketo's specific API paradigms is notoriously difficult.

Here are the specific integration challenges that make Marketo distinctly complex for AI agents to navigate:

The Asynchronous Bulk API Pattern

Marketo is designed for high-volume data operations. When an LLM needs to export custom objects or import a large CSV of program members, it cannot simply make a synchronous POST request and expect data back. The Marketo Bulk API requires a multi-step orchestration: you must first create the job (which returns a batchId or exportId), explicitly enqueue the job to push it into Marketo's compute queue, continuously poll the status endpoint until the state reaches 'Completed' or 'Failed', and finally retrieve the file or the failure logs. Expecting an LLM to navigate this state machine independently without a well-defined, strictly schematized toolset leads to immediate hallucinations and stalled workflows.

Paging Tokens and Activity Logs

Retrieving activity data (like lead changes or email opens) in Marketo does not use standard offset or cursor pagination. Instead, you must first call a specific pagingtoken endpoint with a sinceDatetime parameter to get a nextPageToken. This token is then passed to the actual activity endpoints. In Truto's dynamic tool generation, instructions are automatically injected into the tool's JSON Schema to explicitly instruct the LLM to pass cursor values back unchanged, ensuring the LLM does not attempt to modify or decode Marketo's proprietary token format.

Strict Rate Limiting and Concurrency

Marketo enforces strict API quotas, including daily call limits and tight concurrent request limits (often 10 concurrent requests maximum). It is critical to understand that Truto does not retry, throttle, or apply backoff on rate limit errors. When the upstream Marketo API returns an HTTP 429, Truto passes that error directly to the caller. Truto normalizes the upstream rate limit info into standardized headers (ratelimit-limit, ratelimit-remaining, ratelimit-reset) per the IETF spec. The caller (your AI agent framework) is strictly responsible for interpreting these headers and executing retry or backoff logic.

Creating the Adobe Marketo Engage MCP Server

Truto derives MCP tools dynamically from two sources: the integration's configured resources (the available endpoints) and the documentation records (the human-readable descriptions and schemas). A tool only appears in the MCP server if it has a corresponding documentation entry, ensuring only curated, high-quality endpoints are exposed to the LLM.

Each MCP server is scoped to a single integrated account. The server URL contains a cryptographic token that handles both routing and authentication.

You can generate this server via the Truto UI or programmatically via the API.

Method 1: Via the Truto UI

  1. Navigate to the Integrated Accounts page in the Truto dashboard.
  2. Select your connected Adobe Marketo Engage account.
  3. Click the MCP Servers tab.
  4. Click Create MCP Server.
  5. Select your desired configuration. You can filter the tools by methods (e.g., selecting only "read" methods) or by tags (e.g., "leads", "campaigns").
  6. Copy the generated MCP server URL. Treat this URL like a secret - it provides direct access to execute tools against the integrated account.

Method 2: Via the Truto API

For teams building programmatic AI agent deployments, you can create the MCP server dynamically by issuing a POST request to the Truto API.

curl -X POST https://api.truto.one/integrated-account/<INTEGRATED_ACCOUNT_ID>/mcp \
  -H "Authorization: Bearer <YOUR_TRUTO_API_TOKEN>" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Marketo Marketing Agent",
    "config": {
      "methods": ["read", "write", "custom"],
      "tags": ["leads", "campaigns", "activities"]
    }
  }'

The response will return the configured database record alongside the self-contained URL needed for your LLM client:

{
  "id": "mcp-12345678",
  "name": "Marketo Marketing Agent",
  "config": { "methods": ["read", "write", "custom"] },
  "expires_at": null,
  "url": "https://api.truto.one/mcp/a1b2c3d4e5f6..."
}

Connecting the MCP Server to ChatGPT

Once you have your Truto MCP URL, connecting it to an LLM client requires zero additional coding. The URL serves as a complete JSON-RPC 2.0 endpoint.

Method A: Via the ChatGPT UI

If you are using ChatGPT directly:

  1. Open ChatGPT and navigate to Settings -> Apps -> Advanced settings.
  2. Enable Developer mode (MCP support is currently behind this flag; requires a Pro, Plus, Business, Enterprise, or Education account).
  3. Under MCP servers / Custom connectors, click to add a new server.
  4. Provide a recognizable name (e.g., "Marketo Engage - Truto").
  5. Paste the Truto MCP URL into the Server URL field and save.

ChatGPT will immediately perform the protocol handshake, request the tools/list, and make the Marketo operations available in your chat context.

Method B: Via Manual Config File (Custom Agents / Claude Desktop)

If you are orchestrating agents via a configuration file (like the Claude Desktop app or a custom LangChain setup), you can connect using the Server-Sent Events (SSE) transport adapter.

Add the following configuration to your claude_desktop_config.json or equivalent MCP transport file:

{
  "mcpServers": {
    "marketo_engage": {
      "command": "npx",
      "args": [
        "-y",
        "@modelcontextprotocol/server-sse",
        "--url",
        "https://api.truto.one/mcp/a1b2c3d4e5f6..."
      ]
    }
  }
}

Adobe Marketo Engage MCP Hero Tools

Truto maps Marketo's REST API into hundreds of available MCP tools. Below are the highest-leverage operations for AI-driven marketing workflows.

1. list_all_adobe_marketo_engage_leads

Queries the Marketo lead database. It supports complex filtering by specifying a filterType (e.g., email, cookies, custom fields) and the exact filterValues to match.

Context Note: Marketo returns a maximum of 300 leads per batch. For wide scans, AI agents must handle pagination via the tools.

"Find the Marketo lead record associated with the email address 'alex.smith@example.com' and tell me their current lead score."

2. create_a_adobe_marketo_engage_bulk_lead_import

Initiates an asynchronous bulk import job for new leads or list members. The LLM must supply a properly formatted multipart file payload (CSV, TSV, or SSV).

Context Note: This tool returns a batchId and status. The LLM must be instructed to check the status using the corresponding get-status tool before assuming the leads are available in the database.

"Take this list of 200 event attendees in CSV format and import them into Marketo as a bulk lead import job."

3. adobe_marketo_engage_campaigns_trigger

Passes a defined set of leads through an active Smart Campaign flow. The campaign must be explicitly configured in Marketo with a 'Campaign is Requested: Web Service API' trigger to be eligible for this operation.

Context Note: You can push a maximum of 100 leads per call. To process larger lists, the agent must loop the execution.

"Trigger the 'Q3 Re-engagement Sequence' smart campaign for lead ID 104599 and lead ID 104600."

4. list_all_adobe_marketo_engage_smart_campaigns

Lists all available smart campaigns in the instance. This is a critical discovery tool, allowing the AI agent to search for campaigns by name, folder, or active status before attempting to trigger them or inspect their flow steps.

"List all active smart campaigns in the 'Nurture' folder that were updated in the last 30 days."

5. adobe_marketo_engage_bulk_custom_object_exports_get_file

Retrieves the raw CSV file content of a completed Marketo Bulk Export Activity job.

Context Note: Custom objects in Marketo are heavily utilized for complex relational data (like vehicle purchases, event attendance, or custom SaaS product usage). Extracting this via bulk export is the most efficient way to pull large datasets into the LLM's context window.

"Download the CSV file for custom object export job ID 8901 and summarize the top three product categories purchased."

6. create_a_adobe_marketo_engage_program

Creates a new Marketo program container. This tool requires specific parameters like name, folder destination, program type, and channel.

"Create a new Marketo program named '2026 Q1 Trade Show' under the 'Events' folder, set the channel to 'Live Event', and return the new program ID."

To view the complete inventory of available tools, required schemas, and parameter definitions, view the Adobe Marketo Engage integration page.

Workflows in Action

Exposing an MCP server to an LLM unlocks multi-step, autonomous workflows. The model combines its reasoning capabilities with the deterministic structure of the Marketo API schemas. Here are two real-world scenarios.

Workflow 1: Finding Leads and Triggering a Smart Campaign

Marketing Operations teams often need to manually route VIP leads into specialized workflows based on sudden intent signals.

"Find the Marketo leads matching the emails 'ceo@acme.com' and 'vp@startup.io'. Once you have their lead IDs, locate the smart campaign named 'VIP Fast Track Routing' and trigger it for both leads."

Execution Steps:

  1. The agent calls list_all_adobe_marketo_engage_leads passing filterType: "email" and filterValues: "ceo@acme.com, vp@startup.io".
  2. The Marketo API returns the matching lead records, including their internal id values.
  3. The agent calls list_all_adobe_marketo_engage_smart_campaigns and searches the response to find the exact campaign ID for "VIP Fast Track Routing".
  4. The agent calls adobe_marketo_engage_campaigns_trigger passing the campaign ID and an array of the retrieved lead IDs.
sequenceDiagram
  participant User as User Prompt
  participant ChatGPT as ChatGPT (MCP Client)
  participant MCP as Truto MCP Server
  participant MarketoAPI as "Marketo API"

  User->>ChatGPT: "Find VIP leads and trigger the Fast Track campaign."
  ChatGPT->>MCP: list_all_adobe_marketo_engage_leads (emails)
  MCP->>MarketoAPI: GET /rest/v1/leads.json
  MarketoAPI-->>MCP: Returns Lead IDs (104, 105)
  MCP-->>ChatGPT: Parsed schema with IDs
  ChatGPT->>MCP: list_all_adobe_marketo_engage_smart_campaigns
  MCP->>MarketoAPI: GET /rest/v1/smartCampaigns.json
  MarketoAPI-->>MCP: Returns Campaign list
  MCP-->>ChatGPT: Campaign ID (4021)
  ChatGPT->>MCP: adobe_marketo_engage_campaigns_trigger (4021, [104, 105])
  MCP->>MarketoAPI: POST /rest/v1/campaigns/4021/trigger.json
  MarketoAPI-->>MCP: Success
  MCP-->>ChatGPT: Execution confirmed
  ChatGPT-->>User: "Campaign triggered for both leads successfully."

Workflow 2: Exporting Bulk Activity Data for Analysis

An analyst needs to understand lead behavior over a specific timeframe but cannot pull thousands of activity logs synchronously without hitting strict rate limits.

"Create a bulk activity export for the past 7 days tracking 'Click Link' activities. Enqueue the job, wait for it to complete, and then download the file to tell me which link was clicked most often."

Execution Steps:

  1. The agent calls create_a_adobe_marketo_engage_bulk_activity_export defining the filter criteria and fields needed. Marketo returns an exportId.
  2. The agent calls adobe_marketo_engage_bulk_activity_exports_enqueue passing the exportId to start processing.
  3. The agent loops a call to adobe_marketo_engage_bulk_activity_exports_get_status until the status returns Completed.
  4. The agent calls adobe_marketo_engage_bulk_activity_exports_get_file to retrieve the raw CSV stream, parses it in context, and provides the final analysis to the user.

Security and Access Control

Providing an LLM with access to an enterprise Marketo instance requires robust guardrails. Truto's MCP architecture enforces security at the token and configuration level:

  • Method Filtering: By defining config.methods (e.g., ["read"]), you can restrict the MCP server to only allow non-destructive GET and LIST operations. The server simply will not generate tools for create, update, or delete methods.
  • Tag Filtering: Using config.tags, you can scope the server to specific functional areas. For example, passing ["leads"] ensures that ChatGPT can only access lead-related endpoints, completely hiding assets, campaigns, or system administration tools.
  • Extra Authentication Layer: By enabling require_api_token_auth: true, possession of the MCP URL is no longer enough to execute tools. The caller must also provide a valid Truto API token via a Bearer header, adding a strict secondary layer of authentication.
  • Automatic Expiration: You can set a strict time-to-live using the expires_at field. Truto handles the cleanup via durable object alarms, automatically revoking access and removing the server when the timer expires - ideal for granting temporary access to contractors or short-lived AI workflows.

By leveraging managed MCP infrastructure, engineering teams can safely orchestrate complex Adobe Marketo Engage workflows with AI agents, abstracting away bulk API state machines, dynamic schemas, and authentication headaches.

FAQ

Does Truto automatically retry failed Adobe Marketo Engage API calls?
No. When Marketo returns an HTTP 429 rate limit error, Truto passes that error directly to the caller. Truto normalizes the upstream rate limit data into standard IETF headers (ratelimit-limit, ratelimit-remaining, ratelimit-reset), and your AI agent or application is responsible for implementing retry and backoff logic.
Can I restrict ChatGPT to only read Marketo Engage data?
Yes. When creating your MCP server in Truto, you can pass a configuration object with a methods filter set to ["read"]. This ensures the generated MCP endpoint only exposes GET and LIST operations, preventing ChatGPT from modifying your Marketo data.
How does ChatGPT handle Marketo's bulk import and export jobs?
Marketo's bulk APIs are asynchronous. Through MCP tools, ChatGPT must execute a multi-step workflow: create the bulk job, enqueue it, poll the status endpoint, and finally download the file or review the failures once the job is completed.
Can I use the Truto MCP server for local development with the Claude Desktop app?
Yes. The Truto MCP server URL is fully compliant with the Model Context Protocol. You can connect it to any MCP client, including the Claude Desktop application, Cursor, or your own custom LangChain/LangGraph orchestration scripts.

More from our Blog