24 minutes
h1

Manually rewriting every PHP customization as an App Builder application is slow, expensive, and error-prone. This article walks through installing the tooling, how the conversion actually works, and just as importantly, what it will not do for you.

If you have a Commerce PaaS installation with years of accumulated PHP customization with plugins, observers, cron jobs, custom modules and you are looking at Adobe Commerce as a Cloud Service (ACCS), the question that stops most migration plans before they start is: what do we do with all this code? Before going further, it is worth being precise about what this tooling is and is not. It is not a magic button that turns your entire PHP codebase into App Builder overnight.

Why this exists: The real migration bottleneck

It is an AI coding agent running inside your existing IDE, given deep, structured knowledge of Commerce and App Builder through MCP (Model Context Protocol) servers. It reads your PHP code, understands the Commerce-specific patterns in it (observers, plugins, cron schedules, event dispatch), and generates the equivalent App Builder application: the action code, the event subscriptions, the app.config.yaml, and the package.json. You still review every line, you still test, and you still make the architectural calls about what should and should not move out of Commerce. Adobe's AI coding tools for Commerce (branded on Adobe's Experience League site as Commerce development MCPs and skills) reached general availability in this period, with partner communications describing them as available now as of April 2026. The tooling is an MCP-powered developer agent that understands both Commerce PHP patterns and App Builder architecture and assists in translating common Commerce extension patterns into App Builder architectures. It is not a deterministic one-to-one converter: architectural redesign is often required, and synchronous PHP behaviors frequently cannot be directly translated, which is exactly the honest limitation the rest of this article works through.

Every Commerce PaaS-to-ACCS migration conversation eventually arrives at the same wall: the client has a custom module that does something specific to their business syncs orders to an ERP (Enterprise Resource Planning), applies a custom pricing rule, sends a notification when a B2B credit limit is exceeded — and it is written as PHP that plugs directly into Commerce's core classes. ACCS has a locked core. That PHP simply cannot run there. It has to become something else: an App Builder action triggered by an I/O Event, a Commerce Webhook, or an Admin UI SDK extension.

Doing this translation by hand for a module with real business logic is genuinely slow work. A developer has to: read the PHP and understand exactly what it does, identify which Commerce extension point it hooks into (an observer? a plugin on a specific class? a cron job?), figure out the nearest App Builder equivalent (an I/O Event subscription? a webhook? a scheduled action?), write the JavaScript/Node.js action that replicates the behavior, and wire up the app.config.yaml and event registration correctly. For a module with a dozen small behaviors, this can take days. Across an entire PaaS codebase with 30 to 50 custom modules, it is easily weeks of work which is exactly the reason so many migration projects stall at the “what do we do with our customizations?” stage before they even begin.

Adobe's AI coding tools are aimed directly at that bottleneck. In a public session on this tooling, Adobe demonstrated a migration assessment scanning a real PHP codebase and producing a complete report mapped plugin analysis, extension points, complexity ratings, and a phased migration plan in a fraction of the time a manual assessment typically takes. That assessment does not do the migration for you, but it tells you exactly what you are dealing with before you commit a team to the work.

What the tooling actually is: MCP servers, skills, and starter kits

Three (in practice, four) components work together, and understanding each one clarifies what is happening when you use the tooling. Adobe's own documentation names them precisely, which resolves most of the naming uncertainty flagged in earlier review of this article:

For storefront-specific work built on the AEM Boilerplate Commerce starter kit, Adobe also documents a fourth component, the dropins MCP Server, which provides structured data about drop-in slots, events, containers, and design tokens. It is outside the scope of a PHP-to-App-Builder conversion project but worth knowing about if the same team also touches storefront customization.

All three (or four, if the storefront kit is selected) are installed together against one of two starter kits: the Commerce Integration Starter Kit (for back-office integrations: ERP, CRM (Customer Relationship Management), OMS - Order Management System) or the Commerce Checkout Starter Kit (for checkout, payment, shipping, and tax extensions). Adobe's setup flow also lists a third option, AEM Boilerplate Commerce, which additionally installs the dropins MCP server for storefront work. The starter kit you choose determines the project scaffold the tooling works within; pick the one that matches the kind of PHP module you are converting first.

TIP
If your PHP customization does not fit either category cleanly for example a custom Admin grid column, or a scheduled catalog maintenance job start with the Integration Starter Kit as your base project. It provides the general App Builder project structure (actions folder, app.config.yaml, event registration pattern) that most conversions build from, even when the final result is an Admin UI SDK extension rather than a back-office integration.

Setting up the tooling: The exact steps

This is precise and mechanical, follow it in order. It assumes you already have Node.js (LTS, v22.x or higher), npm or yarn, and Git installed, and that you are working in Cursor, Claude Code, GitHub Copilot, or another agent-skills-compatible IDE. On Windows, a Bash shell is also required (Git Bash or WSL). The steps below match Adobe's currently published manual setup instructions exactly; Adobe also now offers a newer, automated single-command setup (aio commerce extensibility app-setup) that handles Developer Console project creation and starter kit cloning together, which is worth trying first since it is Adobe's current recommended path, with the manual steps below as the fallback if it runs into issues.

Step 1: Install the Adobe I/O CLI and required plugins

# Install the Adobe I/O CLI globally

npm install -g @adobe/aio-cli

# Install the three required plugins:

# - Commerce CLI plugin (Commerce-specific commands)

# - App Builder dev plugin

# - Runtime plugin

aio plugins:install \

https://github.com/adobe-commerce/aio-cli-plugin-commerce \

@adobe/aio-cli-plugin-app-dev \

@adobe/aio-cli-plugin-runtime

Step 2: Clone the relevant starter kit

# For back-office integrations (ERP, CRM, OMS sync)

git clone git@github.com:adobe/commerce-integration-starter-kit.git

cd commerce-integration-starter-kit

# OR for checkout, payment, shipping, tax extensions

git clone git@github.com:adobe/commerce-checkout-starter-kit.git

cd commerce-checkout-starter-kit

Step 3: Run the interactive AI tools setup

aio commerce extensibility tools-setup

# You will be prompted:

# ? Which starter kit would you like to use?

# > Integration starter kit

#   Checkout starter kit

#

# ? Which coding agent would you like to install skills for?

# > Cursor

#   Claude Code

#   GitHub Copilot

#   Windsurf

#   Gemini CLI

#   OpenAI Codex

#   Cline

#   ... (40+ agents supported)

#

# ? Which package manager would you like to use?

# > npm

#   yarn

After this completes, the setup has installed MCP server integration, agent skills, and Commerce-specific development tools and workflows into your project. For Cursor specifically, you will find the skills under .cursor/skills/. For GitHub Copilot, look for copilot-instructions.md in the .github folder.

Step 4: Authenticate and enable the MCP server

# Log in to the Adobe I/O CLI - required for the RAG documentation service

aio auth login

# Verify you are logged in

aio where

# If something goes wrong, log out and back in

aio auth logout

aio auth login

IMPORTANT
Logging in with aio auth login is not optional if you want the tooling to be genuinely useful. This is confirmed directly in Adobe's own setup documentation: some MCP features work without authentication, but the RAG service the part that gives your AI agent access to current Adobe Commerce documentation will not work without it. Without RAG, the agent falls back to its general training knowledge, which may be outdated or simply wrong about specific Commerce API details. Always authenticate before starting real conversion work.

For Cursor: restart the IDE, open the Command Palette (Cmd+Shift+P or Ctrl+Shift+P), run View: Open MCP Settings, find commerce-extensibility MCP Server in the list, and turn it on. Confirm it shows Status: Connected/Active.

For GitHub Copilot in VS Code: restart VS Code, open the Extensions view, find MCP SERVERS - INSTALLED, and use the gear icon next to commerce-extensibility MCP Server to start it if it is stopped. Adobe's own documented example output shows the log ending with the line “Discovered 10 tools” once the server is running correctly; this is Adobe's own current published example, though as with any actively developed MCP server the exact tool count can change in future releases, so treat the number as illustrative of what a healthy connection looks like rather than a fixed value to match exactly.

Verify the whole setup with a test prompt and ask your agent something that requires genuine Commerce-specific knowledge. This exact prompt is the one Adobe's own documentation uses for this verification step:

“What are the differences between Adobe Commerce PaaS and Adobe Commerce as a Cloud Service when configuring a webhook that activates an App Builder runtime action?”

If the MCP server is working, the agent's answer will reference specific, current Commerce documentation rather than a generic explanation. If the answer feels vague or generic, the agent is not actually using the MCP tools — explicitly ask it to use the available MCP tools, or re-check the server connection status.

The conversion workflow: What actually happens when you convert a PHP module

Here is the practical sequence, based on how the tooling is designed to be used and demonstrated by Adobe. Say you have a PHP observer that fires when an order is placed and sends the order to an external ERP system.

  1. Give the agent the PHP module as context. Open the module in your IDE (the observer class, the events.xml registration, any related helper classes) so the agent can read the actual code, not just a description of what it does.

  2. Describe the goal in plain language. For example: “Create an App Builder extension that sends an event to our ERP system whenever an order is placed on Commerce.” You do not need to write a formal specification; natural language is the interface.

  3. The agent asks clarifying questions before generating anything. This is a deliberate and important part of the design — in Adobe's own demonstration of this tooling, the agent asked: Is this a SaaS (ACCS) or PaaS Commerce backend? Should the event trigger before or after the order is placed? What kind of event do you want to send? Is the integration with the external system single-direction or bidirectional? Is this a UI extension or a headless application? Is state management required between invocations? Answer these precisely — the quality of the generated code depends directly on the quality of these answers.

  4. The agent proposes a plan before writing code. You see the intended approach, which Commerce event it will subscribe to, what the App Builder action structure will look like, whether state management (Adobe I/O State) is needed, before any files are generated. Review this plan critically. This is your checkpoint to catch a wrong architectural assumption before it becomes 200 lines of generated code.

  5. The agent generates the App Builder project files. This typically includes the runtime action (actions/order-sync/index.js or similar), the event registration in app.config.yaml, any required package.json dependencies, and, if requested, a corresponding test file.

  6. You review, test, and deploy. Run aio app deploy to a Development workspace, verify the generated action actually fires on the correct event and produces the correct behavior against a staging Commerce instance, and only then promote to Production.

  7. Security review for generated code goes beyond functional correctness: authentication and credential handling, secret management, PII (Personally Identifiable Information) handling, and compliance requirements deserve the same scrutiny. Generated code that works correctly on a staging instance can still have a security or data-handling issue that functional testing alone will not catch.

TIP
Treat the clarifying questions the agent asks as a checklist you should be able to answer before you even open the IDE. If you cannot confidently answer “should this trigger before or after the order is placed” or “is state management required between invocations” for your own PHP module, you do not yet understand your own code well enough to migrate it safely, with or without AI assistance. Use the agent's questions as a forcing function to properly understand the legacy behavior first.

What converts cleanly, and what does not

This is the single most important section for setting realistic expectations. Based on how out-of-process extensibility works architecturally, some PHP patterns map to App Builder cleanly and predictably. Others do not, and pretending otherwise even with AI assistance produces a migration that looks done but is subtly broken.

PHP pattern
Converts to
Conversion difficulty
Observer on a Commerce event (order_place_after, customer_save_after, etc.)
App Builder action subscribed to the equivalent commerce.* I/O Event, where a corresponding Commerce event exists
Straightforward when a matching I/O Event exists the AI tooling handles this well. Event parity is not guaranteed for every Commerce event type.
Cron job (crontab.xml scheduled method)
App Builder scheduled action (App Builder supports cron-style triggers)
Straightforward, if the job has no dependency on Commerce-internal PHP state
Plugin (around/before/after) on a Commerce service class
Commerce Webhook calling an App Builder action synchronously, where the logic maps to a webhook shape at all
Moderate to hard beyond latency tolerance, many plugins mutate internal service behavior or transactional state in ways that have no webhook-shaped equivalent regardless of latency
Custom REST API endpoint (webapi.xml)
App Builder action exposed via its own HTTP endpoint, called directly by external systems
Moderate authentication and rate limiting need to be redesigned, not just relocated
Custom AdminHtml grid column or mass action
Admin UI SDK extension point
Moderate different UI framework (React) even though the business logic may be simple
Plugin around a core checkout or pricing calculation
Cannot convert directly must be redesigned
Hard anything synchronous in the Commerce request path with no external surface has no App Builder equivalent
Direct SQL queries against Commerce-internal tables
Cannot convert directly must be redesigned around the REST/GraphQL API
Hard App Builder has no direct database access to Commerce on ACCS; on PaaS specifically, some integrations may technically reach an externalized database depending on environment configuration, but the architectural guidance to go through APIs instead still holds
Session-dependent logic (reading the current customer session mid-request)
Cannot convert directly must be redesigned as an event-driven or webhook pattern
Hard App Builder actions are stateless by default

The clearest theme in this table is worth stating explicitly: many Commerce internals have no external event, no webhook equivalent, and no safe async migration path at all, which is a distinct, harder problem than “this will take longer to convert.”

IMPORTANT
The AI coding tools are genuinely good at generating correct App Builder code for the straightforward and moderate rows above. They are not a substitute for the architectural judgement required for the hard row. If your PHP customization runs synchronously inside the Commerce checkout or pricing calculation with no clean external interface, do not ask the AI tooling to “convert” it ask it to help you design a different solution, because a literal conversion does not exist. This is the same constraint that applies to all out-of-process extensibility, with or without AI assistance: anything that must run synchronously inside the Commerce request cycle with no external surface has to be redesigned entirely, or stay in PHP where redesign genuinely is not feasible in the short term.

The Migration Assessment tool: Understanding your codebase before converting anything

Before converting any individual module, run the Migration Assessment tool against your full PaaS or on-premises codebase. This is a real, currently documented Adobe product, not a placeholder name, confirmed on Adobe's Experience League documentation and described in Adobe's own product messaging as performing a static and semantic analysis of your code base, cataloging customizations, data structures, integrations, and third-party modules — exactly the framing this article uses. Processed reports are accessible through Adobe's Experience Cloud shared-assessments interface, and no access to your production environment is required beyond initially sharing your project codebase. The report itself is organized into three tabs: Summary, Module Reports, and Report Reliability; with a weighted Complexity Score that maps to a Migration Complexity rating using fixed thresholds. It produces a report that:

The output is exportable, which matters practically: it becomes the artifact you use to build a migration plan, estimate effort per module, and communicate technical risk to stakeholders who are not going to read PHP source code but do need to understand why the migration will take the time it takes. It also generates a description of each custom module that can be used as direct input for the AI coding tools covered earlier in this article, connecting the assessment phase directly to the conversion phase.

TIP
Run the Migration Assessment tool as the very first step of any ACCS migration project, before any conversion work, before any team is staffed, before any timeline commitment is made to a client or to leadership. The assessment report is the difference between an evidence-based migration plan and a guess. Adobe's own published figures put AI-assisted App Builder conversion at 60 to 70 percent faster than manual work, and a full assessment that once took weeks of manual discovery now runs in a fraction of that time; that speed is not just a productivity win, it is the input that makes every subsequent planning decision defensible.

Working with the agent effectively: What good prompting looks like

The quality of what the AI tooling produces is directly proportional to the quality of the context and instruction you give it. A few practical habits that make a measurable difference:

Observability (logging, monitoring), retry and idempotency handling, scaling behavior under load, and deployment governance (separate workspaces, review gates) all need the same deliberate attention for AI-generated actions that they would for hand-written ones, the AI tooling accelerates getting to working code, not the operational hardening that follows it.

A realistic view of the time savings

Based on Adobe's own demonstrations, published figures, and the nature of the tooling, the honest way to describe the time savings is this: the tooling compresses the mechanical parts of conversion — boilerplate generation, correct app.config.yaml syntax, correct event subscription patterns — from hours to minutes, and Adobe cites 60 to 70 percent faster App Builder conversion as its own headline figure for this. It does not compress the parts of the work that require human judgement: deciding whether a plugin's logic can tolerate asynchronous execution, deciding what happens if the external system is unavailable, deciding how to handle a partial failure. Those decisions still take the time they take.

For a codebase with many small, well-isolated, event-driven customizations (order sync to a CRM, a notification on stock threshold, a custom email trigger), the tooling can genuinely take conversion from days to hours per module. For a codebase with deeply intertwined PHP that reaches into Commerce's pricing engine or checkout flow, the tooling accelerates the mechanical scaffolding but the architectural redesign work is unchanged, and pretending otherwise in a project timeline is how migrations go over budget.

Key takeaways

Additional resources

Actionable next steps

  1. Install the Adobe I/O CLI and the three required plugins today, even before you have a specific module to convert: npm install -g @adobe/aio-cli. Getting the environment set up is a short task that removes friction when you are ready to start real conversion work.

  2. Pick one small, well-isolated PHP observer as your first test conversion, something like an order-placed notification or a simple cron job, not your most complex custom module. Use it to learn the workflow, the clarifying questions the agent asks, and how to evaluate the generated code before attempting anything business-critical.

  3. Before your next ACCS migration proposal or estimate, run the Migration Assessment tool against the client's PaaS codebase. Use the exportable report — module list, complexity ratings, phased plan — as the basis for your effort estimate and your stakeholder communication, rather than a gut-feel estimate.

  4. Build your own internal reference list, categorizing your organization's most common PHP customization patterns (observer types, plugin types, cron patterns you have written repeatedly across projects) against the conversion difficulty table in this article. This becomes a reusable estimation tool for every future migration your team scopes.

  5. If you use Cursor or GitHub Copilot already, run the setup command against a low-risk test project this week: aio commerce extensibility tools-setup, or the newer aio commerce extensibility app-setup. Ask the test prompt suggested in Adobe's documentation and confirm the MCP server responds with current, specific Commerce knowledge before relying on it for real project work.