Marketo’s MCP vs REST API
Under the Hood: Comparing the Official MCP Toolset to the REST API
I’ve lived and breathed the Marketo REST API for years. In fact, I was so deep in the weeds that I actually built my own custom Marketo MCP before the official one existed. Back then, I was limited strictly to standard REST endpoints, since that was the only systematic way to work within in Marketo. So, when I finally got my hands on the official beta, I was dying to know: how does this new AI toolset actually stack up against the "old reliable" REST API?
Whether you’re looking to supercharge an AI assistant for your team or just trying to figure out which integration path won’t break your workflow, understanding these gaps is huge. Let's dive into where they overlap, where the REST API still reigns supreme, and those cool spots where the MCP pulls off tricks the REST API can’t do at all.
Just a heads-up: all of this is "as of now." Since the MCP is currently in beta, things can, and most likely will, change. Knowing the amazing Adobe Engineering team, I expect this toolset to keep improving and expanding rapidly.
The Core Difference
The REST API is comprehensive but developer-facing it returns raw JSON, requires careful request construction, and leaves all interpretation to you. The MCP is a curated, AI-optimized layer on top of that same Marketo instance. It trades breadth for usability: named, self-describing tools that an AI can reason about in natural language. As of this writing, the MCP offers 130 tools across programs, campaigns, lists, forms, leads, emails, snippets, and more.
The practical implication is that the MCP covers most of what a marketing operations user needs day-to-day, while the REST API remains the authoritative interface for data engineering, CRM integration, and full platform control.
Capability Comparison Table
| Capability Area | Functionality | REST API | MCP |
| Programs | Browse / search programs | ✅ | ✅ |
| Get by name or ID | ✅ | ✅ | |
| Create / clone / update / delete | ✅ | ✅ | |
| Approve / unapprove | ✅ | ✅ | |
| Tags management | ✅ | ✅ | |
| Browse with full details (tags + costs inline) | ✅ | ✅ | |
| Browse events / nurture / scheduled by type | ✅ | ✅ | |
| Get program smart list | ✅ | ✅ | |
| Get creation options (channels, tag types) | ❌ | ✅ | |
| Folders | Browse / get by name or ID | ✅ | ✅ |
| Get folder contents | ✅ | ✅ | |
| Create / update / delete | ✅ | ✅ | |
| Smart Campaigns | Browse / get by name or ID | ✅ | ✅ |
| Create / update / activate | ✅ | ✅ | |
| Schedule / trigger | ✅ | ✅ | |
| Get flow steps and rules | ✅ | ✅ | |
| Add flow steps / update choices | ✅ | ✅ | |
| Get scheduled runs | ✅ | ✅ | |
| Get "used by" dependencies | ✅ | ✅ | |
| Flow step / rule metadata discovery | ❌ | ✅ | |
| Faceted analysis with visualization | ❌ | ✅ | |
| Auto-suggest for configuration | ❌ | ✅ | |
| Smart Lists | Browse / get by name, ID, campaign, program | ✅ | ✅ |
| Create / clone / delete | ✅ | ✅ | |
| Add / update / reorder / delete rules | ✅ | ✅ | |
| Update filter logic (all / any / custom) | ✅ | ✅ | |
| Get "used by" dependencies | ✅ | ✅ | |
| Full rule catalog discovery | ❌ | ✅ | |
| Auto-suggest for rule configuration | ❌ | ✅ | |
| Static Lists | Browse / get by name or ID | ✅ | ✅ |
| Create / update / delete | ✅ | ✅ | |
| Get members / add members / remove members | ✅ | ✅ | |
| Forms | Browse / get by name or ID | ✅ | ✅ |
| Create / clone / update / delete | ✅ | ✅ | |
| Approve / discard draft | ✅ | ✅ | |
| Add / update / delete fields | ✅ | ✅ | |
| Fieldsets, visibility rules, rich text, autofill | ✅ | ✅ | |
| Field positions / thank you page | ✅ | ✅ | |
| Get "used by" dependencies | ✅ | ✅ | |
| Update submit button | ✅ | ❌ | |
| Update thank you page content | ✅ | ❌ | |
| Get available program member fields | ✅ | ✅ | |
| Emails | Browse / get by name or ID | ✅ | ✅ |
| Create / approve | ✅ | ✅ | |
| Get / update content | ✅ | ✅ | |
| Clone / delete / unapprove / discard draft | ✅ | ❌ | |
| Add / delete / duplicate / rename / rearrange modules | ✅ | ❌ | |
| Get / update dynamic content | ✅ | ❌ | |
| Get / update full content | ✅ | ❌ | |
| Get / update variables | ✅ | ❌ | |
| Send sample email | ✅ | ❌ | |
| Get CC fields | ✅ | ❌ | |
| Update email metadata | ✅ | ❌ | |
| Email Templates | Full CRUD + approval workflow | ✅ | ❌ |
| Snippets | Browse / get by ID | ✅ | ✅ |
| Get content / dynamic content | ✅ | ✅ | |
| Create / clone / update / delete | ✅ | ✅ | |
| Approve / unapprove / discard draft | ✅ | ✅ | |
| Update dynamic content | ✅ | ✅ | |
| Faceted analysis with visualization | ❌ | ✅ | |
| Landing Pages | Full CRUD + approval workflow | ✅ | ❌ |
| Landing page content sections | ✅ | ❌ | |
| Landing page templates | ✅ | ❌ | |
| Redirect rules and domains | ✅ | ❌ | |
| Files | Create / get / update file assets | ✅ | ❌ |
| Channels & Tags | Browse channels / get by name | ✅ | ✅ |
| Browse tag types / get by name | ✅ | ✅ | |
| Get programs by tag | ✅ | ✅ | |
| Tokens | Get / create / delete My Tokens | ✅ | ✅ |
| Get / create calendar tokens | ✅ | ✅ | |
| Leads | Get leads by email or ID | ✅ | ✅ |
| Describe lead fields | ✅ | ✅ | |
| Get lead activities | ✅ | ✅ | |
| Get paging token | ✅ | ✅ | |
| Sync leads (create / update) | ✅ | ❌ | |
| Delete leads | ✅ | ❌ | |
| Merge leads | ✅ | ❌ | |
| Get leads by program ID (with status filter) | ✅ | ❌ | |
| Change lead program status | ✅ | ❌ | |
| Get lead partitions / update partition | ✅ | ❌ | |
| Associate lead | ✅ | ❌ | |
| Push lead / submit form | ✅ | ❌ | |
| Get lead changes | ✅ | ❌ | |
| Get deleted leads | ✅ | ❌ | |
| Lead field schema management | ✅ | ❌ | |
| Get lists / programs / campaigns by lead ID | ✅ | ❌ | |
| Bulk Export | Bulk export leads (create / enqueue / status) | ✅ | ✅ |
| Bulk export program members | ✅ | ❌ | |
| Bulk export activities | ✅ | ❌ | |
| Bulk export custom objects | ✅ | ❌ | |
| Bulk Import | Check import status | ✅ | ✅ |
| Import leads | ✅ | ❌ | |
| Import program members | ✅ | ❌ | |
| Import custom objects | ✅ | ❌ | |
| Custom Objects | Get / sync / delete records | ✅ | ❌ |
| Create / manage type schemas and fields | ✅ | ❌ | |
| Companies | Get / sync / delete / describe | ✅ | ❌ |
| Field schema management | ✅ | ❌ | |
| Opportunities | Get / sync / delete opportunities and roles | ✅ | ❌ |
| Named Accounts | Full CRUD for named accounts and lists | ✅ | ❌ |
| Custom Activities | Create / manage custom activity types | ✅ | ❌ |
| Submit custom activity records | ✅ | ❌ | |
| User Management | Browse / invite / update / delete users and roles | ✅ | ❌ |
What the MCP Adds Beyond the REST API
A few MCP tools don't have REST API equivalents at all they're purpose-built for AI-assisted workflows:
Faceted analysis facet_smart_campaigns and facet_snippets aggregate and visualise your Marketo data as pie charts and tables. The REST API returns raw records and leaves analysis entirely to you.
Rule and flow step discovery tools like get_smart_list_rules, get_smart_campaign_flow_steps, and get_smart_campaign_flow_step_types expose a full metadata catalog of what filters, triggers, and flow steps are available in your instance. Without this, an AI has no way to build campaigns correctly from scratch.
Auto-suggest get_smart_campaign_auto_suggest and get_smart_list_auto_suggest provide context-aware configuration hints. These are MCP-specific abstractions with no REST equivalent.
Program creation options get_program_creation_options returns all valid channels and tag types in a single call, designed specifically to help an AI plan a program creation correctly before executing.
The Practical Takeaway
For marketing operations users who want to query, report on, and manage campaigns, smart lists, programs, forms, and snippets through an AI assistant, the MCP covers the vast majority of day-to-day work.
The most significant gap is lead data writeback syncing, deleting, merging leads, or changing program statuses are all REST-only. For anyone expecting AI-driven data management, that's the wall you'll hit first.
Program member reporting is the other notable pain point. Answering "how many people attended this webinar?" requires either GET /rest/v1/leads/programs/{programId}.json with a status filter, or the Bulk Export Program Members endpoint neither of which exists in the MCP today.
Entire domains custom objects, companies, opportunities, named accounts, landing pages, and user management are REST-only and will likely remain so, as these tend to be developer and integration concerns rather than marketing operations workflows.
The MCP is best understood as a curated, AI-optimized interface to the parts of Marketo that benefit most from natural language interaction. For full programmatic control, the REST API remains the authoritative interface and for the foreseeable future, both will have a role to play.
Don't See What You Need? You Can Extend the MCP
If you've spotted a gap in the table above that matters to your team, it's worth knowing that you're not necessarily stuck. The MCP tool set described in this article is the out-of-the-box offering but most AI agent platforms that support MCP also allow you to register additional custom tools alongside it.
In practice, this means you can build your own tools that call the Marketo REST API directly for the endpoints the MCP doesn't cover, and make them available to your AI agent in exactly the same way as the native MCP tools. The AI treats them as first-class capabilities it can discover them, reason about when to use them, and chain them together with the existing MCP tools in a single workflow.
To return to the example from this article: getting a webinar attendance count requires GET /rest/v1/leads/programs/{programId}.json with a progression status filter a REST-only endpoint. You could build a single custom tool called something like get_program_members_by_status, wrap that REST call inside it, register it with your agent, and from that point forward your AI assistant can answer "how many people attended this webinar?" just as naturally as any other question. The same approach applies to syncing leads, querying custom objects, pulling program member exports, or any other REST capability that isn't currently in the MCP.
The key insight is that the MCP and the REST API aren't an either/or choice. The MCP gives you a strong, well-structured foundation for marketing operations workflows, and the REST API gives you the raw material to fill in whatever your specific use case demands. Together, they cover the full surface area of Marketo and a well-configured AI agent can work across both seamlessly.
---
This article reflects the beta Marketo MCP tool set as of May 2026 and the Marketo REST API as documented by Adobe Experience League. Both are subject to change.
