Marketo MCP
An MCP server for Marketo
Ask AI about Marketo MCP
Powered by Claude Β· Grounded in docs
I know everything about Marketo MCP. Ask me about installation, configuration, usage, or troubleshooting.
0/500
Reviews
Documentation
Marketo MCP Server
A Model Context Protocol server for Adobe Marketo Engage. Give Claude Desktop, Cursor, and other MCP-compatible clients direct, authenticated access to the Marketo REST API β read and write forms, smart lists, channels, leads, activities, and lists with natural language.
Why
Marketing ops, growth, and RevOps teams spend hours clicking through the Marketo UI to clone a form, approve assets, look up a lead, or audit a smart list. The Marketo MCP Server wires those same REST API operations into an LLM agent, so you can say:
- "Clone form 1234 into the Q2 Webinars folder and approve it."
- "Show me recent activities for lead alex@example.com."
- "Create a new email channel called 'Lifecycle Nurture'."
β¦and the model executes the actual Marketo API calls on your behalf.
Table of Contents
- Features
- Quick start
- Prerequisites
- Configuration
- Available tools
- Usage with Claude Desktop
- Usage with Cursor / other MCP clients
- Troubleshooting
- Development
- Contributing
Features
- Form management β list, inspect, clone, and approve forms via the Marketo Asset API
- Smart list operations β list and inspect smart lists
- Channel CRUD β create, read, update, and delete channels
- Lead database β get leads by ID or email, create or update leads in bulk, delete leads
- Activity & change logs β fetch activities and field changes for any lead
- List membership β add or remove leads from static lists
- Program management β list, inspect, clone programs and retrieve program members
- Email operations β list, inspect, and send sample emails for QA
- Automatic auth β OAuth 2.0 client-credentials flow with token caching & refresh
- Stdio transport β works out of the box with Claude Desktop, Cursor, and any MCP client that speaks stdio
Quick start
Option A β Smithery (recommended)
npx -y @smithery/cli install @alexleventer/marketo-mcp --client claude
Follow the prompts to paste in your Marketo base URL, client ID, and client secret.
Option B β npx (no install)
Add the following to your MCP client's config (e.g. claude_desktop_config.json):
{
"mcpServers": {
"marketo": {
"command": "npx",
"args": ["-y", "marketo-mcp"],
"env": {
"MARKETO_BASE_URL": "https://123-ABC-456.mktorest.com/rest",
"MARKETO_CLIENT_ID": "your-client-id",
"MARKETO_CLIENT_SECRET": "your-client-secret"
}
}
}
}
Option C β from source
git clone https://github.com/alexleventer/marketo-mcp.git
cd marketo-mcp
npm install
npm run build
Copy the config block printed by the build into your MCP client.
Prerequisites
- Node.js 18 or higher
- Marketo API credentials (client ID & client secret from a LaunchPoint service)
- A Marketo instance with REST API access enabled
- An MCP-compatible client β Claude Desktop, Cursor, Cline, or any other
Obtaining Marketo API credentials
- Log into Marketo admin
- Admin β Integration β LaunchPoint
- New β New Service, set service type to Custom and pick a display name (e.g.
MCP Server) - Assign an API-only user with the permissions you need (Read-Only Assets, Read-Write Lead, etc.)
- Save the Client ID and Client Secret
- Your base URL is under Admin β Integration β Web Services β REST API Endpoint (strip
/rest/v1/*β keep justhttps://<munchkin>.mktorest.com/rest)
Configuration
All configuration is via environment variables:
| Variable | Required | Description |
|---|---|---|
MARKETO_BASE_URL | yes | Your REST endpoint, e.g. https://123-ABC-456.mktorest.com/rest |
MARKETO_CLIENT_ID | yes | LaunchPoint service client ID |
MARKETO_CLIENT_SECRET | yes | LaunchPoint service client secret |
Copy .env.example to .env for local development.
Available tools
| Tool | Description |
|---|---|
marketo_get_forms | List forms (filter by `status: draft |
marketo_get_form_by_id | Get a single form by ID |
marketo_clone_form | Clone a form into a destination folder |
marketo_approve_form | Approve a draft form |
marketo_get_smart_lists | List smart lists |
marketo_get_smart_list_by_id | Get a smart list by ID |
marketo_get_channels | List channels |
marketo_get_channel_by_id | Get a channel by ID |
marketo_create_channel | Create a new channel |
marketo_update_channel | Update an existing channel |
marketo_delete_channel | Delete a channel |
marketo_get_lead_by_id | Get a lead by numeric ID |
marketo_get_lead_by_email | Look up a lead by email address (filter API) |
marketo_create_or_update_lead | Bulk create or update leads (max 300 per call) |
marketo_delete_lead | Delete a lead |
marketo_get_lead_activities | Fetch activities for a lead (paginated) |
marketo_get_lead_changes | Fetch field-change history for a lead |
marketo_get_lead_lists | Get lists that a lead belongs to |
marketo_add_lead_to_list | Add leads to a static list |
marketo_remove_lead_from_list | Remove leads from a static list |
marketo_get_programs | List programs (filter by type, folder, tag, or date range) |
marketo_get_program_by_id | Get a program by ID |
marketo_clone_program | Clone a program and all its local assets into a folder |
marketo_get_program_members | Get leads that are members of a program |
marketo_get_emails | List emails (filter by status) |
marketo_get_email_by_id | Get an email by ID |
marketo_send_sample_email | Send a sample/preview email for QA |
Each tool accepts typed arguments validated with zod and returns the raw Marketo JSON response. See the Adobe Marketo REST API reference for field-level details.
Usage with Claude Desktop
- Install Claude Desktop
- Open the config at
~/Library/Application Support/Claude/claude_desktop_config.json(macOS) or%APPDATA%\Claude\claude_desktop_config.json(Windows) - Paste the
mcpServersblock from Quick start - Restart Claude Desktop
Usage with Cursor / other MCP clients
Any MCP client that supports stdio servers will work. Point it at the built binary:
{
"mcpServers": {
"marketo": {
"command": "npx",
"args": ["-y", "marketo-mcp"],
"env": { "MARKETO_BASE_URL": "...", "MARKETO_CLIENT_ID": "...", "MARKETO_CLIENT_SECRET": "..." }
}
}
}
Rate limits
Marketo enforces several API rate limits. Keep these in mind when running batch operations:
| Limit | Value |
|---|---|
| Short-term | 100 calls per 20 seconds per instance |
| Daily | 50,000 calls per day |
| Concurrent | 10 simultaneous connections |
| Bulk import | 10 MB per file, 10 concurrent jobs |
| Bulk export | 500 MB per day, 2 concurrent jobs |
If you hit 606 Max rate limit reached, wait 20 seconds before retrying. The Marketo REST API returns a Retry-After header in some cases.
Troubleshooting
| Symptom | Likely cause |
|---|---|
Failed to authenticate with Marketo | Wrong client ID/secret, or REST API not enabled for the LaunchPoint user |
403 Access Denied | The API-only user lacks the role for that endpoint (e.g. Asset API vs Lead Database API) |
606 Max rate limit reached | Marketo caps at 100 calls / 20s / instance β batch calls and add delays |
610 Requested resource not found | The folder/form/lead ID doesn't exist or is in a different workspace |
| Auth works, but requests hang | Double-check MARKETO_BASE_URL has no trailing slash and ends with /rest |
You can inspect tool calls locally with the MCP inspector:
npm run inspector
Development
src/
βββ index.ts # MCP server + all tool registrations
βββ auth.ts # OAuth token manager (caches until expiry)
βββ constants.ts # Env var bindings
npm run dev # Run with ts-node + .env
npm run typecheck # Type-check without emit
npm run lint # ESLint
npm run format # Prettier
npm run build # Compile to build/
Contributing
Issues and pull requests welcome at github.com/alexleventer/marketo-mcp.
- Fork the repo
- Create a feature branch
npm run lint && npm run typecheck- Open a PR
License
ISC β see LICENSE.
Keywords: marketo mcp server, marketo model context protocol, marketo claude, marketo ai, adobe marketo mcp, marketo api claude desktop, marketo automation llm, marketo engage mcp
