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.
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.
- Log into your Truto dashboard and navigate to the Integrated Accounts page.
- Select your connected Adobe Marketo Engage account.
- Click the MCP Servers tab.
- Click Create MCP Server.
- Select your desired configuration (e.g., provide a name, set an expiration date, or restrict access to only
readmethods or specific tags). - 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):
- In your AI client, open the Settings menu.
- Navigate to Connectors (in ChatGPT) or Integrations -> Add MCP Server (in Claude).
- Select Add custom connector.
- Give it a name (e.g., "Adobe Marketo Engage").
- 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:
- Claude calls
list_all_adobe_marketo_engage_leadswithfilterType=emailandfilterValues=john.smith@techcorp.com. - Marketo returns the lead record containing
id: 99482. - Claude calls
list_all_adobe_marketo_engage_smart_campaignsand filters the response to locate the ID for "Enterprise ABM Nurture" (e.g.,id: 412). - Claude calls
adobe_marketo_engage_campaigns_triggerpassingcampaign_id: 412and a body containing the lead ID99482.
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:
- Claude calls
create_a_adobe_marketo_engage_bulk_lead_exportwith the requiredfieldsandfilterparameters defining the date range. - The MCP server returns the new job details, noting the status is
Createdand providing theexportId. - Claude calls
adobe_marketo_engage_bulk_lead_exports_enqueueusing the returnedexportId. - Marketo updates the status to
Queued. - 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_statusandadobe_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 settingmethods: ["read"], Truto will omit anycreate,update, ordeletetools 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 theAuthorizationheader, 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.