Skip to content

Connect Adobe Marketo Engage to Claude: Manage Leads & Smart Lists

Learn how to connect Adobe Marketo Engage to Claude using Truto's managed MCP server. A step-by-step engineering guide to configuring tools, handling bulk jobs, and automating lead ops.

Nachi Raman Nachi Raman · · 9 min read
Connect Adobe Marketo Engage to Claude: Manage Leads & Smart Lists

If your team needs to connect Adobe Marketo Engage to Claude to automate lead scoring, trigger smart campaigns, or orchestrate bulk data exports, you need a Model Context Protocol (MCP) server. This server acts as the translation layer between Claude's natural language tool calls and Marketo's complex REST API architecture. You can either build and maintain this infrastructure yourself, or use a managed integration platform like Truto to dynamically generate a secure, authenticated MCP server URL.

If your team uses ChatGPT, check out our guide on /connect-adobe-marketo-engage-to-chatgpt-orchestrate-assets-flows/. If you are building automated pipelines without a chat interface, explore our broader architectural overview on /connect-adobe-marketo-engage-to-ai-agents-automate-bulk-operations/.

Giving a Large Language Model (LLM) read and write access to a sprawling marketing automation platform like Marketo Engage is a serious engineering challenge. You have to handle fragmented API versions, map highly nested JSON schemas to MCP tool definitions, and deal with Marketo's strict API quotas. Every time Marketo deprecates a legacy endpoint or you add a custom object to your instance, you have to update your server code, redeploy, and test the integration.

This guide breaks down exactly how to use Truto to generate a secure, managed MCP server for Adobe Marketo Engage, connect it natively to Claude Desktop, and execute complex marketing workflows using natural language.

The Engineering Reality of the Adobe Marketo Engage API

A custom MCP server is a self-hosted integration layer. While the open MCP standard provides a predictable way for models to discover tools, the reality of implementing it against Marketo's APIs is painful. You are not just integrating a simple CRM - you are interacting with lead databases, custom activities, asynchronous bulk extract jobs, and complex filtering syntax.

If you decide to build a custom Marketo Engage MCP server, here are the specific integration challenges you will face:

Asynchronous Bulk Export and Import Jobs

Marketo limits synchronous lead queries strictly. For any operation involving more than 300 records, you must use their Bulk Extract APIs. These are asynchronous batch jobs. You cannot simply ask Claude to "export all leads from the past month." The AI needs explicit tool definitions to handle the state machine: create the job with a specific filter, enqueue it, poll the status endpoint until the state reads Completed, and finally download the CSV stream. An LLM has no intuition for this workflow unless you build highly constrained tools that guide it step by step.

Custom Objects and Custom Activities

Marketo instances are rarely standard. Marketing teams heavily rely on custom objects (e.g., custom event attendance) and custom activities (e.g., logged a webinar view). Because these are instance-specific, their schemas do not exist in standard documentation. A custom MCP server requires you to query the Describe endpoints, dynamically map those custom schemas into JSON Schema format, and inject them into your tool definitions at runtime. Truto handles this automatically, deriving tool schemas dynamically from the integration's documented state.

Strict Rate Limits and Concurrency Quotas

Marketo enforces aggressive rate limits - typically 100 calls per 20 seconds and a maximum of 10 concurrent API requests. Exceeding these triggers 606 Max rate limit exceeded or 615 Concurrent access limit reached errors.

Note on Truto's rate limit handling: Truto does not retry, throttle, or apply backoff on rate limit errors. When the upstream Marketo API returns an HTTP 429 (or Marketo's specific 6xx rate limit codes mapped to 429), Truto passes that error directly back to the caller. Truto normalizes the upstream rate limit information into standardized HTTP headers (ratelimit-limit, ratelimit-remaining, ratelimit-reset) following the IETF specification. The caller (the AI agent or MCP client) is entirely responsible for reading these headers and implementing its own retry and backoff logic.

Step 1: Create the Adobe Marketo Engage MCP Server

Truto dynamically generates MCP tools based on the resources available to your authenticated Marketo instance. The server URL contains a cryptographic token that securely maps to your specific integrated account, requiring no complex auth handling on the client side.

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

Method 1: Via the Truto UI

This is the fastest method if you are manually configuring a Claude Desktop environment.

  1. Log into your Truto dashboard and navigate to the Integrated Accounts page.
  2. Select your connected Adobe Marketo Engage account.
  3. Click the MCP Servers tab.
  4. Click Create MCP Server.
  5. Select your desired configuration (e.g., provide a name, set an expiration date, or restrict access to only read methods or specific tags).
  6. Click Create and copy the generated MCP server URL (it will look like https://api.truto.one/mcp/<token>).

Method 2: Via the Truto API

For teams building programmatic AI agent provisioning, you can generate MCP servers on the fly using the Truto REST API. This request validates that the integration has tools available, generates a secure token, and returns a ready-to-use URL.

Request:

curl -X POST https://api.truto.one/integrated-account/{integrated_account_id}/mcp \
  -H "Authorization: Bearer YOUR_TRUTO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Marketo Claude Assistant",
    "config": {
      "methods": ["read", "write"],
      "tags": ["leads", "campaigns"]
    },
    "expires_at": "2026-12-31T23:59:59Z"
  }'

Response:

{
  "id": "mcp_abc123",
  "name": "Marketo Claude Assistant",
  "config": {
    "methods": ["read", "write"],
    "tags": ["leads", "campaigns"]
  },
  "expires_at": "2026-12-31T23:59:59Z",
  "url": "https://api.truto.one/mcp/a1b2c3d4e5f6..."
}

Save this url. It is the only configuration your AI client needs to discover tools and execute API calls.

Step 2: Connect the MCP Server to Claude

Once you have your Truto MCP URL, you need to expose it to Claude. The open MCP standard allows Claude to automatically request the tools/list JSON-RPC endpoint and understand exactly how to format queries for Marketo.

Method A: Via the Claude UI (or ChatGPT)

If you are using a consumer UI that supports remote MCP connectors (like Claude Desktop or ChatGPT Developer Mode):

  1. In your AI client, open the Settings menu.
  2. Navigate to Connectors (in ChatGPT) or Integrations -> Add MCP Server (in Claude).
  3. Select Add custom connector.
  4. Give it a name (e.g., "Adobe Marketo Engage").
  5. Paste the Truto MCP URL into the Server URL field and click Add.

Claude will immediately ping the server, complete the handshake, and expose the Marketo tools in your chat interface.

Method B: Via Manual Config File (claude_desktop_config.json)

If you are configuring Claude Desktop manually or running headless agents, you can wire the server using the standard configuration file. Because Truto serves tools remotely over HTTPS via Server-Sent Events (SSE), you use the official MCP SSE transport adapter.

Open your Claude Desktop config file:

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
  • Windows: %APPDATA%\Claude\claude_desktop_config.json

Add the Marketo server configuration:

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

Restart Claude Desktop. The tools will now be available in your prompt context.

Hero Tools for Adobe Marketo Engage

Truto automatically generates highly descriptive snake_case tools based on the Marketo REST API schema. When Claude calls these tools, Truto routes the JSON-RPC request to the underlying Marketo endpoint, managing the pagination cursors and flat input namespaces automatically.

Here are some of the highest-leverage hero tools available in the Marketo Engage MCP server:

list_all_adobe_marketo_engage_leads

Fetches a list of lead records filtered by a specific field value. Truto automatically injects limit and next_cursor properties into the query schema to handle Marketo's 300-record batch pagination.

"Find all leads in Marketo where the lead status is 'Disqualified'. Fetch the first 50 records."

create_a_adobe_marketo_engage_lead

Syncs (creates or updates) one or more leads in the Marketo instance. The AI can format an array of lead objects, and Marketo will deduplicate them based on the email address or custom dedupe fields.

"Create a new lead in Marketo for Jane Doe (jane.doe@example.com) and set her company name to 'Acme Corp'."

create_a_adobe_marketo_engage_custom_activity

Adds a custom activity to a lead's timeline. This requires provisioning custom activity types in the instance beforehand. The AI uses this tool to log offline events, webinar attendance, or product usage milestones.

"Log a custom activity for lead ID 104592 indicating they attended the 'Q3 Product Roadmap' webinar."

adobe_marketo_engage_campaigns_trigger

Triggers an active Smart Campaign by passing a set of leads through its flow. The campaign must have a 'Campaign is Requested: Web Service API' trigger configured in the Marketo UI.

"Trigger the 'Welcome Nurture' smart campaign (campaign ID 1024) for leads 5521 and 5522."

list_all_adobe_marketo_engage_smart_lists

Retrieves the user-created Smart Lists available in the Marketo instance. This is essential for AI agents looking to assign leads to specific segmented audiences or retrieve list IDs for subsequent operations.

"List all available smart lists in the 'Q4 Trade Shows' folder so we can find the correct list ID to add our new prospects to."

create_a_adobe_marketo_engage_bulk_lead_export

Initiates an asynchronous Bulk Export Activity job. Because Marketo restricts synchronous read sizes, this tool allows the AI to kick off large-scale extraction jobs using a filter parameter.

"Create a bulk lead export job in Marketo for all leads created in the past 7 days. Return the export ID so we can enqueue it."

To view the complete inventory of available tools, including bulk export status tracking, custom object management, and program member syncing, visit the Adobe Marketo Engage integration page.

Workflows in Action

When Claude has access to the Marketo MCP server, it can chain multiple tools together to accomplish complex operational tasks. Here are two real-world examples of how an AI agent executes multi-step Marketo workflows.

Workflow 1: Qualifying and Triggering a Smart Campaign

Marketing Operations teams frequently need to qualify leads based on intent signals and inject them into specific nurture tracks.

"Find the lead record for john.smith@techcorp.com. If he exists, find the smart campaign named 'Enterprise ABM Nurture' and trigger that campaign for his lead ID."

Execution Steps:

  1. Claude calls list_all_adobe_marketo_engage_leads with filterType=email and filterValues=john.smith@techcorp.com.
  2. Marketo returns the lead record containing id: 99482.
  3. Claude calls list_all_adobe_marketo_engage_smart_campaigns and filters the response to locate the ID for "Enterprise ABM Nurture" (e.g., id: 412).
  4. Claude calls adobe_marketo_engage_campaigns_trigger passing campaign_id: 412 and a body containing the lead ID 99482.
sequenceDiagram
  participant User as User
  participant Claude as Claude Desktop
  participant MCP as Truto MCP Server
  participant Marketo as Marketo API

  User->>Claude: Find john.smith@techcorp.com & trigger ABM campaign
  Claude->>MCP: list_all_adobe_marketo_engage_leads(email, john.smith...)
  MCP->>Marketo: GET /rest/v1/leads.json?filterType=email...
  Marketo-->>MCP: { "result": [ { "id": 99482 } ] }
  MCP-->>Claude: Lead ID 99482
  Claude->>MCP: list_all_adobe_marketo_engage_smart_campaigns()
  MCP->>Marketo: GET /rest/asset/v1/smartCampaigns.json
  Marketo-->>MCP: { "result": [ { "id": 412, "name": "Enterprise ABM Nurture" } ] }
  MCP-->>Claude: Campaign ID 412
  Claude->>MCP: adobe_marketo_engage_campaigns_trigger(412, [99482])
  MCP->>Marketo: POST /rest/v1/campaigns/412/trigger.json
  Marketo-->>MCP: { "success": true }
  MCP-->>Claude: Trigger successful
  Claude-->>User: "I have successfully triggered the ABM campaign for John Smith."

Workflow 2: Managing the Asynchronous Bulk Export Pipeline

When a user requests a massive data dump, the LLM must navigate Marketo's asynchronous bulk extract endpoints.

"I need to export all leads modified this week. Start the bulk export job, enqueue it, and tell me the export ID so I can check on the status later."

Execution Steps:

  1. Claude calls create_a_adobe_marketo_engage_bulk_lead_export with the required fields and filter parameters defining the date range.
  2. The MCP server returns the new job details, noting the status is Created and providing the exportId.
  3. Claude calls adobe_marketo_engage_bulk_lead_exports_enqueue using the returned exportId.
  4. Marketo updates the status to Queued.
  5. Claude informs the user that the job is queued and provides the ID for future reference. (Later, the user can prompt Claude to call adobe_marketo_engage_bulk_lead_exports_get_status and adobe_marketo_engage_bulk_lead_exports_get_file).

Security and Access Control

Granting an LLM direct access to your marketing database requires strict governance. Truto's MCP architecture provides four distinct layers of security and filtering configurable when you generate the server token:

  • Method Filtering (methods): You can explicitly restrict the MCP server to read-only operations. By setting methods: ["read"], Truto will omit any create, update, or delete tools from the generated server, ensuring the LLM cannot accidentally modify Marketo records.
  • Tag Filtering (tags): If you only want the AI to manage "leads" but not "campaigns" or "bulk_exports", you can provide an array of tags. Truto filters the documentation records and only exposes tools associated with those requested domains.
  • Secondary Authentication (require_api_token_auth): By default, possessing the MCP URL is enough to connect. Enabling this flag forces the client to also pass a valid Truto API token in the Authorization header, preventing unauthorized execution even if the URL leaks.
  • Time-to-Live (expires_at): You can set an absolute ISO datetime for the server's expiration. Once expired, Truto automatically cleans up the database record and invalidates the Cloudflare KV entries, permanently shutting down access.

Give Your AI Agents Secure Marketo Access

Building a custom MCP server for Adobe Marketo Engage forces your team to take ownership of complex API schemas, pagination logic, and asynchronous job pipelines. Truto abstracts this away, dynamically generating documented, safe, and curated tools directly from your integrated accounts.

By leveraging Truto's managed MCP servers, you can instantly give Claude read and write capabilities across your marketing stack without managing a single server deployment.

FAQ

How does Truto handle Adobe Marketo Engage rate limits?
Truto does not retry or apply backoff automatically. It passes Marketo's 429 errors to the caller and normalizes rate limit data into standard `ratelimit-*` HTTP headers. The calling AI agent must handle its own retry logic.
Can I restrict the Marketo MCP server to read-only operations?
Yes. When creating the MCP server in Truto, you can set the `methods` configuration array to `["read"]`. This ensures the AI can only query data and cannot modify or delete records.
How do AI agents interact with Marketo's Bulk Export API?
Because bulk jobs are asynchronous, the AI agent uses multiple Truto MCP tools sequentially: it creates the job, enqueues it, polls the status endpoint, and finally requests the file download once completed.
Can I connect the Truto MCP server to Claude Desktop using a configuration file?
Yes. You can edit the `claude_desktop_config.json` file and use the `npx @modelcontextprotocol/server-sse` command, passing the generated Truto MCP URL as an argument.

More from our Blog