{"id":7870,"date":"2026-10-23T10:11:02","date_gmt":"2026-10-23T10:11:02","guid":{"rendered":"https:\/\/onwardpath.com\/intelligence\/?p=7870"},"modified":"2026-10-23T10:11:06","modified_gmt":"2026-10-23T10:11:06","slug":"moving-aem-code-to-the-cloud-with-ai-the-cloud-migration-skill-the-cloud-migration-mcp-and-the-best-practices-analyzer","status":"publish","type":"post","link":"https:\/\/onwardpath.com\/intelligence\/moving-aem-code-to-the-cloud-with-ai-the-cloud-migration-skill-the-cloud-migration-mcp-and-the-best-practices-analyzer\/","title":{"rendered":"Moving AEM Code to the Cloud with AI: The Cloud Migration Skill, the Cloud Migration MCP, and the Best Practices Analyzer"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Moving an AEM project to AEM as a Cloud Service has two halves: the content, and the code. We\u2019ve written about moving content. This post is about the other half: Java code, OSGi configurations, Dispatcher configuration, and legacy UI that were written for AEM 6.x, AMS, or on-premise and need to be reworked for the cloud. Adobe documents an agent-based toolset for that work, built around the Best Practices Analyzer\u2019s findings. Here is how the pieces fit together, what the documentation says about how a session runs, and what it leaves out.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Status: What the Pages Do and Don\u2019t Say<\/strong><\/h3>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td><strong>Item<\/strong><\/td><td><strong>What the documentation says<\/strong><\/td><\/tr><tr><td><strong>Migration Skill and Cloud Migration MCP<\/strong><\/td><td>NO STATUS LABELS STATED. Adobe\u2019s overview page and its Cloud Migration MCP page (both last updated October 9, 2026) show no GA, Beta, or Early Access label. Don\u2019t assume either; confirm maturity with Adobe.<\/td><\/tr><tr><td><strong>What\u2019s new vs. existing<\/strong><\/td><td>The AEM 2026.9.0 release notes list additions to the Cloud Migration skill: a read-only migration runbook and additional patterns. In our reading of the notes, those included Guava-to-Caffeine and Dispatcher configuration conversion, and possibly Legacy UI conversion and template modernization; confirm the exact list in the notes. The skill page itself does not say which patterns are new, so we can\u2019t tell you which ones predate that release.<\/td><\/tr><tr><td><strong>Scope<\/strong><\/td><td>Java code and OSGi configurations from AEM 6.x, AMS, or on-premise; Dispatcher conversion covers AMS or on-premise Apache HTTPD and Dispatcher configurations. Repository structure and content transfer are handled by other tools (Adobe names the Refactoring Tools and the Content Transfer Tool).<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Different from our content-migration post.<\/strong> &#8220;AEM + AI Migration&#8221; covers moving legacy CMS content into AEM. This post covers moving existing AEM code and configuration to the cloud.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>How the Process Flows<\/strong><\/h3>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img decoding=\"async\" width=\"776\" height=\"490\" loading=\"lazy\" src=\"https:\/\/i0.wp.com\/onwardpath.com\/intelligence\/wp-content\/uploads\/2026\/10\/image-1.jpg?fit=776%2C490&amp;ssl=1\" alt=\"\" class=\"wp-image-7872\" style=\"aspect-ratio:1.5841836734693877;width:621px;height:auto\" srcset=\"https:\/\/i0.wp.com\/onwardpath.com\/intelligence\/wp-content\/uploads\/2026\/10\/image-1.jpg?w=776&amp;ssl=1 776w, https:\/\/i0.wp.com\/onwardpath.com\/intelligence\/wp-content\/uploads\/2026\/10\/image-1.jpg?resize=766%2C484&amp;ssl=1 766w, https:\/\/i0.wp.com\/onwardpath.com\/intelligence\/wp-content\/uploads\/2026\/10\/image-1.jpg?resize=300%2C189&amp;ssl=1 300w\" sizes=\"auto, (max-width: 776px) 100vw, 776px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><em>Findings sources, runbook, one-pattern sessions, and batched review, as described in Adobe\u2019s documentation.<\/em><\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>How the Pieces Fit<\/strong><\/h3>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td><strong>Piece<\/strong><\/td><td><strong>Role, per Adobe\u2019s documentation<\/strong><\/td><\/tr><tr><td><strong>Best Practices Analyzer (BPA)<\/strong><\/td><td>Produces the findings that drive the migration skill.<\/td><\/tr><tr><td><strong>Cloud Acceleration Manager (CAM)<\/strong><\/td><td>Hosts BPA reports and tracks overall migration progress.<\/td><\/tr><tr><td><strong>Cloud Migration MCP<\/strong><\/td><td>A hosted MCP server that lets the agent in your IDE fetch BPA findings directly from a CAM project, so you don\u2019t have to export a CSV.<\/td><\/tr><tr><td><strong>Migration Skill<\/strong><\/td><td>Orchestrates the workflow and applies transformations.<\/td><\/tr><tr><td><strong>code-assessment skill<\/strong><\/td><td>Companion skill to which the code transformations are delegated. Ships in the same skill package as the Migration Skill.<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>What It Can Migrate<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">The overview page groups the supported patterns into three areas. We list them as Adobe names them and explain only what the page itself explains; check the skill\u2019s own documentation for what each pattern transforms.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td><strong>Area<\/strong><\/td><td><strong>Patterns named on the page<\/strong><\/td><\/tr><tr><td><strong>Code and configuration<\/strong><\/td><td>scheduler, resourceChangeListener, replication, eventListener, eventHandler, assetApi, guavaCache (swaps Guava cache usage for Caffeine), and htlLint. For OSGi configurations: JSON-format config conversion, runmode scoping, extracting Cloud Manager secrets and environment variables, and detecting unsupported run modes.<\/td><\/tr><tr><td><strong>Legacy UI and templates<\/strong><\/td><td>lui (dialog migration), cdw (custom design widgets), and template modernization (static to editable templates).<\/td><\/tr><tr><td><strong>Dispatcher<\/strong><\/td><td>dispatcherConversion, for AMS or on-premise Apache HTTPD and Dispatcher configurations.<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>How a Session Runs (as Documented)<\/strong><\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li class=\"\"><strong>A read-only runbook comes first.<\/strong> It is generated before any code changes and covers every supported pattern, with affected files, finding counts, and a prompt to start each fix. No code is changed until you start a pattern session.<\/li>\n\n\n\n<li class=\"\"><strong>One pattern per session.<\/strong> If a BPA report contains several patterns, the agent asks you to pick one.<\/li>\n\n\n\n<li class=\"\"><strong>Changes come in batches of five.<\/strong> The agent applies a batch, then pauses for your review before continuing.<\/li>\n\n\n\n<li class=\"\"><strong>Code changes are delegated<\/strong> to the companion code-assessment skill.<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Inputs and Prerequisites<\/strong><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li class=\"\"><strong>A project:<\/strong> a Maven or Gradle AEM project open in your IDE.<\/li>\n\n\n\n<li class=\"\"><strong>Findings source (recommended, not required for manual flows):<\/strong> either a BPA CSV export from your AEM instance, or a CAM project with an uploaded BPA report plus the Cloud Migration MCP configured.<\/li>\n\n\n\n<li class=\"\"><strong>The MCP:<\/strong> endpoint https:\/\/mcp.adobeaemcloud.com\/adobe\/mcp\/cloud-migration. You sign in with an Adobe ID that has access to the CAM project and, per the page, &#8220;appropriate permissions&#8221; in CAM (the page does not say which). The agent does not fetch findings until you explicitly select a project.<\/li>\n\n\n\n<li class=\"\"><strong>An AI-enabled IDE<\/strong> that supports agent skills and remote MCP servers. The pages name no specific IDE.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>The two MCP tools<\/strong><\/h3>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td><strong>MCP tool<\/strong><\/td><td><strong>What it returns<\/strong><\/td><\/tr><tr><td><strong>fetch-cam-bpa-findings-by-pattern<\/strong><\/td><td>Findings for one pattern from the latest BPA report. The page lists these patterns: scheduler, assetApi, eventListener, resourceChangeListener, eventHandler, guavaCache, lui, cdw, or all.<\/td><\/tr><tr><td><strong>fetch-cam-bpa-findings-by-importance<\/strong><\/td><td>All findings at one severity (CRITICAL, MAJOR, ADVISORY, or INFO) from the latest report, sorted by descending count.<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>A detail worth checking:<\/strong> the MCP\u2019s pattern list is shorter than the skill\u2019s. For example, replication, htlLint, and dispatcherConversion appear in the skill\u2019s list but not in the MCP tool\u2019s. The pages don\u2019t explain how findings for the remaining patterns are sourced, so confirm with Adobe or test it on a project before assuming every pattern can be driven from CAM.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>What the Documentation Doesn\u2019t Say<\/strong><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li class=\"\">No accuracy guarantees or known gaps for the transformations.<\/li>\n\n\n\n<li class=\"\">No guidance on validation, testing, or rollback beyond the review pause after each batch.<\/li>\n\n\n\n<li class=\"\">No description of data handling for the MCP: retention, storage, or transmission.<\/li>\n\n\n\n<li class=\"\">No status labels and no named supported IDEs.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>How This Might Fit Your Project (Our Reading)<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>This is our interpretation, not Adobe guidance, and we have not used these tools on a customer project. None of it is a documented outcome.<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li class=\"\"><strong>The runbook may be useful on its own.<\/strong> Because it is read-only and generated before any change, it works as an assessment of what needs attention, even if you decide to do some of the work by hand.<\/li>\n\n\n\n<li class=\"\"><strong>Work on a branch and treat each batch of five like a pull request.<\/strong> The pause for review is where your judgment goes: business logic, edge cases, and anything the tool can\u2019t know about your project.<\/li>\n\n\n\n<li class=\"\"><strong>Keep your normal safety nets.<\/strong> Build, run your tests, and use your pipeline\u2019s code quality checks on the result. The documentation doesn\u2019t offer rollback or validation guidance, so rely on version control and your usual process.<\/li>\n\n\n\n<li class=\"\"><strong>Ask Adobe about data handling<\/strong> if you have constraints on what leaves your environment, since the pages don\u2019t say.<\/li>\n\n\n\n<li class=\"\"><strong>Start with one low-risk pattern<\/strong> on a non-critical project to see how the batches and review pauses feel before scaling up.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>What We Haven\u2019t Verified<\/strong><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li class=\"\">We read Adobe\u2019s pages on October 22, 2026 (last updated October 9, 2026) and have not run these tools on a project.<\/li>\n\n\n\n<li class=\"\">The pages state no maturity label, and the skill page does not indicate which patterns are new. Our reading of the release notes is approximate; check the notes themselves.<\/li>\n\n\n\n<li class=\"\">We did not test the quality of any transformation or measure any time savings. Evaluate on your own codebase.<\/li>\n\n\n\n<li class=\"\">We did not review the separate skill-usage page or the Best Practices Analyzer and CAM setup guides in detail.<\/li>\n\n\n\n<li class=\"\">Patterns, tool names, and prerequisites may change; re-check Adobe\u2019s pages before relying on specifics.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Before-You-Start Checklist<\/strong><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li class=\"\">Confirm with Adobe the current maturity of the Migration Skill and the Cloud Migration MCP<\/li>\n\n\n\n<li class=\"\">Confirm your source is AEM 6.x, AMS, or on-premise Java code and OSGi configuration (Maven or Gradle project)<\/li>\n\n\n\n<li class=\"\">Generate BPA reports and decide whether you\u2019ll use a CSV export or a CAM project with the MCP<\/li>\n\n\n\n<li class=\"\">If using the MCP, confirm your Adobe ID has access and the right CAM permissions<\/li>\n\n\n\n<li class=\"\">Check which patterns you need against both the skill\u2019s list and the MCP\u2019s shorter list<\/li>\n\n\n\n<li class=\"\">Ask Adobe about data handling if you have constraints on what leaves your environment<\/li>\n\n\n\n<li class=\"\">Work on a branch, one pattern at a time<\/li>\n\n\n\n<li class=\"\">Review every batch of five changes before continuing<\/li>\n\n\n\n<li class=\"\">Run your build, tests, and code quality checks on the result before merging<\/li>\n\n\n\n<li class=\"\">Plan separately for repository structure and content transfer, which these tools don\u2019t cover<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Final Thoughts<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Code migration is the part of a cloud move that rarely gets headlines: a long list of small, mechanical changes that each need a developer\u2019s attention. Tooling that reads the analyzer\u2019s findings, writes a plan, and applies changes in reviewable batches is a sensible way to shape that work. How well it performs on a real codebase is something Adobe\u2019s pages don\u2019t claim, and neither do we. Try it on a branch, keep your review process, and judge the results yourself.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Moving to AEM as a Cloud Service means reworking Java code, OSGi configurations, Dispatcher setup, and legacy UI, not just content. Adobe documents an agent-based toolset for this: the Best Practices Analyzer\u2019s findings, a hosted Cloud Migration MCP that pulls them from Cloud Acceleration Manager, and a Migration Skill that writes a read-only runbook first, then works one pattern per session in batches of five with a review pause after each. This post covers how the pieces fit, what patterns are named, and what Adobe\u2019s pages leave out: maturity labels, accuracy guarantees, rollback guidance, and MCP data handling.<\/p>\n","protected":false},"author":7,"featured_media":7877,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"nf_dc_page":"","site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"advanced_seo_description":"","jetpack_seo_html_title":"","jetpack_seo_noindex":false,"jetpack_seo_schema_type":"","_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_hide_featured_image":false,"_jetpack_featured_image_duplicate_dismissed":0,"_jetpack_memberships_contains_paid_content":false,"nfd_image_url":"","nfd_onboarding_generated":"","footnotes":""},"categories":[138,227,235,128,37],"tags":[137],"class_list":["post-7870","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-adobe-experience-manager","category-aem","category-aem-ai","category-talent-solutions","category-technology-blog","tag-adobe-experience-manager"],"jetpack_sharing_enabled":true,"jetpack_featured_media_url":"https:\/\/i0.wp.com\/onwardpath.com\/intelligence\/wp-content\/uploads\/2026\/10\/guitar-island-5120x2880-25355-scaled.jpg?fit=2560%2C1440&ssl=1","_links":{"self":[{"href":"https:\/\/onwardpath.com\/intelligence\/wp-json\/wp\/v2\/posts\/7870","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/onwardpath.com\/intelligence\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/onwardpath.com\/intelligence\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/onwardpath.com\/intelligence\/wp-json\/wp\/v2\/users\/7"}],"replies":[{"embeddable":true,"href":"https:\/\/onwardpath.com\/intelligence\/wp-json\/wp\/v2\/comments?post=7870"}],"version-history":[{"count":1,"href":"https:\/\/onwardpath.com\/intelligence\/wp-json\/wp\/v2\/posts\/7870\/revisions"}],"predecessor-version":[{"id":7878,"href":"https:\/\/onwardpath.com\/intelligence\/wp-json\/wp\/v2\/posts\/7870\/revisions\/7878"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/onwardpath.com\/intelligence\/wp-json\/wp\/v2\/media\/7877"}],"wp:attachment":[{"href":"https:\/\/onwardpath.com\/intelligence\/wp-json\/wp\/v2\/media?parent=7870"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/onwardpath.com\/intelligence\/wp-json\/wp\/v2\/categories?post=7870"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/onwardpath.com\/intelligence\/wp-json\/wp\/v2\/tags?post=7870"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}