<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"><title type="text">Blog posts by Johnny Mullaney</title><link href="https://world.optimizely.com/blogs/johnny-mullaney/" /><updated>2025-10-20T12:30:14.0000000Z</updated><id>https://world.optimizely.com/blogs/johnny-mullaney/</id><generator uri="https://world.optimizely.com/blogs/johnny-mullaney/" version="2.0">Optimizely World</generator><entry><title>How Optimizely MCP Learns Your CMS (and Remembers It)</title><link href="http://johnnymullaney.com/?p=3906" /><id>http://johnnymullaney.com/?p=3906</id><published>2025-10-20T12:09:48.0000000Z</published><updated>2025-10-20T12:30:14.0000000Z</updated><author><name>johnny.mullaney@ftt.ai</name></author><category term="Blog post" /><summary type="html">In Part 1, I introduced the “discovery-first” idea—an MCP that can plug into any SaaS CMS and learn how it’s structured on its own. This post gets into the details: how the MCP discovers your schema, builds a usable map of it, and remembers what it learns so that subsequent requests feel instant. Discovery &amp;#8211; &amp;#8230; &lt;a href="https://johnnymullaney.com/2025/10/20/how-optimizely-mcp-learns-your-cms-and-remembers-it/" class="more-link"&gt;Continue reading&lt;span class="screen-reader-text"&gt; "How Optimizely MCP Learns Your CMS (and Remembers&amp;#160;It)"&lt;/span&gt;&lt;/a&gt;</summary></entry><entry><title>Building a Discovery-First MCP for Optimizely CMS – Part 1 of 4</title><link href="http://johnnymullaney.com/?p=3886" /><id>http://johnnymullaney.com/?p=3886</id><published>2025-10-13T11:19:07.0000000Z</published><updated>2025-10-13T11:30:40.0000000Z</updated><author><name>johnny.mullaney@ftt.ai</name></author><category term="Blog post" /><summary type="html">This post kicks off a four-part series on how we’re evolving the Optimizely Model Context Protocol (MCP). The project is still in beta and open source, but it’s already capable of something new: connecting to any Optimizely SaaS CMS, discovering its schema in real time, and generating valid queries without a predefined map. You can &amp;#8230; &lt;a href="https://johnnymullaney.com/2025/10/13/building-a-discovery-first-mcp-for-optimizely-cms-part-1-of-4/" class="more-link"&gt;Continue reading&lt;span class="screen-reader-text"&gt; "Building a Discovery-First MCP for Optimizely CMS &amp;#8211; Part 1 of&amp;#160;4"&lt;/span&gt;&lt;/a&gt;</summary></entry><entry><title>Playing with MCP: An Experimental Server for Optimizely CMS</title><link href="http://johnnymullaney.com/?p=3844" /><id>http://johnnymullaney.com/?p=3844</id><published>2025-09-24T11:48:57.0000000Z</published><updated>2025-09-24T12:30:12.0000000Z</updated><author><name>johnny.mullaney@ftt.ai</name></author><category term="Blog post" /><summary type="html">I’ve been tinkering with something experimental: an MCP server for Optimizely CMS. MCP, or Model Context Protocol, is a way for AI tools to talk to external systems. It’s not a REST API, and it’s not GraphQL either. Think of it more like a common “protocol wrapper” that lets AI assistants discover what a server &amp;#8230; &lt;a href="https://johnnymullaney.com/2025/09/24/playing-with-mcp-an-experimental-server-for-optimizely-cms/" class="more-link"&gt;Continue reading&lt;span class="screen-reader-text"&gt; "Playing with MCP: An Experimental Server for Optimizely&amp;#160;CMS"&lt;/span&gt;&lt;/a&gt;</summary></entry><entry><title>How to Reset or Complete a Stuck Optimizely DXP Integration Deployment using the Optimizely Deployment API</title><link href="http://johnnymullaney.com/?p=3411" /><id>http://johnnymullaney.com/?p=3411</id><published>2025-03-31T10:10:13.0000000Z</published><updated>2025-03-31T10:30:50.0000000Z</updated><author><name>johnny.mullaney@ftt.ai</name></author><category term="Blog post" /><summary type="html">If you&amp;#8217;ve deployed to Optimizely&amp;#8217;s Integration environment without specifying the DirectDeploy parameter in your PowerShell command, your deployment might get stuck in an &amp;#8220;AwaitingVerification&amp;#8221; state. Without a record of the deployment ID, the deployment pipeline can become blocked. Unlike Pre-Production or Production environments, the Optimizely PaaS portal does not offer a UI option to reset &amp;#8230; &lt;a href="https://johnnymullaney.com/2025/03/31/how-to-reset-or-complete-a-stuck-optimizely-dxp-integration-deployment-using-the-optimizely-deployment-api/" class="more-link"&gt;Continue reading&lt;span class="screen-reader-text"&gt; "How to Reset or Complete a Stuck Optimizely DXP Integration Deployment using the Optimizely Deployment&amp;#160;API"&lt;/span&gt;&lt;/a&gt;</summary></entry><entry><title>Optimizely SaaS CMS: Balancing TCO and ROI in Your CMS Hosting Decision</title><link href="http://johnnymullaney.com/?p=2391" /><id>http://johnnymullaney.com/?p=2391</id><published>2024-04-08T16:46:15.0000000Z</published><updated>2024-04-09T04:27:41.0000000Z</updated><author><name>johnny.mullaney@ftt.ai</name></author><category term="Blog post" /><summary type="html">With Optimizely SaaS CMS coming soon, I&amp;#8217;ve been talking with companies about the tricky business of picking the right core system software for their business. These chats really got me thinking, so I decided to jot down some thoughts to tackle the tricky topics of Total Cost of Ownership (TCO) and Return on Investment (ROI) &amp;#8230; &lt;a href="https://johnnymullaney.com/2024/04/08/optimizely-saas-cms-balancing-tco-and-roi-in-your-cms-hosting-decision/" class="more-link"&gt;Continue reading&lt;span class="screen-reader-text"&gt; "Optimizely SaaS CMS: Balancing TCO and ROI in Your CMS Hosting&amp;#160;Decision"&lt;/span&gt;&lt;/a&gt;</summary></entry><entry><title>Opticon 2023:The Launch of “Optimizely One”</title><link href="http://johnnymullaney.com/?p=2179" /><id>http://johnnymullaney.com/?p=2179</id><published>2023-11-23T20:25:49.0000000Z</published><updated>2023-11-23T20:30:37.0000000Z</updated><author><name>johnny.mullaney@ftt.ai</name></author><category term="Blog post" /><summary type="html">After another excellent Opticon event, I tool time to distil my thoughts and write up some key takeaways which can be summarised in two words: Choice and Instructions! Check out my LinkedIn article here: https://www.linkedin.com/pulse/opticon-2023the-launch-optimizely-one-johnny-mullaney-jmdle</summary></entry><entry><title>Overriding Optimizely CMS Approval Sequences</title><link href="http://johnnymullaney.com/?p=2112" /><id>http://johnnymullaney.com/?p=2112</id><published>2023-10-24T11:59:40.0000000Z</published><updated>2023-10-24T12:30:38.0000000Z</updated><author><name>johnny.mullaney@ftt.ai</name></author><category term="Blog post" /><summary type="html">Optimziely CMS Approval Sequences are an important tool for organisations that use CMS to translate, review and quality check content before publishing. A typical Optimziely CMS Approval sequences configuration involves multiple stages of approval, each requiring actions such as click to Approve/Decline and Commenting. The Problem I recently worked with a client who needed to &amp;#8230; &lt;a href="https://johnnymullaney.com/2023/10/24/overriding-optimizely-cms-approval-sequence/" class="more-link"&gt;Continue reading&lt;span class="screen-reader-text"&gt; "Overriding Optimizely CMS Approval&amp;#160;Sequences"&lt;/span&gt;&lt;/a&gt;</summary></entry><entry><title>Hight Value Data: Reshaping Brands and Driving E-Commerce Revolution</title><link href="http://johnnymullaney.com/?p=2063" /><id>http://johnnymullaney.com/?p=2063</id><published>2023-07-19T14:35:58.0000000Z</published><updated>2023-07-19T15:30:42.0000000Z</updated><author><name>johnny.mullaney@ftt.ai</name></author><category term="Blog post" /><summary type="html">I&amp;#8217;ve just published a new article on how high-value data is reshaping brands and driving the e-commerce revolution to the FTT blog. In this piece, I delve into the importance of customer data as the fuel that propels your e-commerce revolution discussing how companies like Netflix and Spotify leverage comprehensive customer views and tailored content &amp;#8230; &lt;a href="https://johnnymullaney.com/2023/07/19/hight-value-data-reshaping-brands-and-driving-e-commerce-revolution/" class="more-link"&gt;Continue reading&lt;span class="screen-reader-text"&gt; "Hight Value Data: Reshaping Brands and Driving E-Commerce&amp;#160;Revolution"&lt;/span&gt;&lt;/a&gt;</summary></entry><entry><title>Optimizely Data Platform (ODP) -&gt; Commerce Cloud: Product Attribute Connector</title><link href="http://johnnymullaney.com/?p=1987" /><id>http://johnnymullaney.com/?p=1987</id><published>2023-03-02T11:23:24.0000000Z</published><updated>2023-03-02T11:30:40.0000000Z</updated><author><name>johnny.mullaney@ftt.ai</name></author><category term="Blog post" /><summary type="html">The most powerful E-Commerce segmentation is possible when your data platform knows everything about your products. Then you can segment, personalise, experiment and sell to customers who are interested in various types of products. This post explains how you can easily extend your product catalog data in ODP with First Three Things ODP Product Attribute &amp;#8230; &lt;a href="https://johnnymullaney.com/2023/03/02/optimizely-data-platform-odp-commerce-cloud-product-attribute-connector/" class="more-link"&gt;Continue reading&lt;span class="screen-reader-text"&gt; "Optimizely Data Platform (ODP) -&amp;#62; Commerce Cloud: Product Attribute&amp;#160;Connector"&lt;/span&gt;&lt;/a&gt;</summary></entry><entry><title>A Marketing Managers Guide to a modern DXP Solution Architecture</title><link href="http://johnnymullaney.com/?p=1949" /><id>http://johnnymullaney.com/?p=1949</id><published>2023-02-09T10:26:56.0000000Z</published><updated>2023-02-09T11:00:46.0000000Z</updated><author><name>johnny.mullaney@ftt.ai</name></author><category term="Blog post" /><summary type="html">As a Solution Architect, I nerd out on new technologies, plugging systems together, good code, solving problems and the general process of designing software. And that is why I have been writing technical blog posts for a few years.  This time I decided to write an article that was aimed at a non-technical audience. I &amp;#8230; &lt;a href="https://johnnymullaney.com/2023/02/09/a-marketing-managers-guide-to-a-modern-dxp-solution-architecture/" class="more-link"&gt;Continue reading&lt;span class="screen-reader-text"&gt; "A Marketing Managers Guide to a modern DXP Solution&amp;#160;Architecture"&lt;/span&gt;&lt;/a&gt;</summary></entry><entry><title>Creating Behavioural based Customer Segments in ODP- Post 2 of 4</title><link href="http://johnnymullaney.com/?p=1891" /><id>http://johnnymullaney.com/?p=1891</id><published>2022-10-26T11:48:26.0000000Z</published><updated>2022-10-26T12:00:54.0000000Z</updated><author><name>johnny.mullaney@ftt.ai</name></author><category term="Blog post" /><summary type="html">In Blog Post 1, I talked about the foundations of delivering a super personalised experience to customers using Optimzely products. In this post we&amp;#8217;ll discuss the first pillar &amp;#8211; Segmentation. Specifically, the technical implementation which sets the foundations for the super powerful Segmentation of your customer base. Use Optimizely&amp;#8217;s Data Platform (ODP) to harmonise data &amp;#8230; &lt;a href="https://johnnymullaney.com/2022/10/26/creating-behavioural-based-customer-segments-in-odp-post-2-of-4/" class="more-link"&gt;Continue reading&lt;span class="screen-reader-text"&gt; "Creating Behavioural based Customer Segments in ODP- Post 2 of&amp;#160;4"&lt;/span&gt;&lt;/a&gt;</summary></entry><entry><title>Pillars of delivering a Tailored Customer Experience on Optimizely DXP- Post 1 of 4</title><link href="http://johnnymullaney.com/?p=1878" /><id>http://johnnymullaney.com/?p=1878</id><published>2022-08-10T09:57:29.0000000Z</published><updated>2022-08-10T10:00:53.0000000Z</updated><author><name>johnny.mullaney@ftt.ai</name></author><category term="Blog post" /><summary type="html">New Era Cap&amp;#160;has been manufacturing baseball caps for American sports teams since the early 1930s. They are a heritage brand with their roots firmly laid in Baseball, one of America&amp;#8217;s most popular sports. Over their considerable history they have expanded to new sporting domains and evolved into a popular culture lifestyle brand with their products &amp;#8230; &lt;a href="https://johnnymullaney.com/2022/08/10/pillars-of-delivering-a-tailored-customer-experience-on-optimizely-dxp-post-1-of-4/" class="more-link"&gt;Continue reading&lt;span class="screen-reader-text"&gt; "Pillars of delivering a Tailored Customer Experience on Optimizely DXP- Post 1 of&amp;#160;4"&lt;/span&gt;&lt;/a&gt;</summary></entry><entry><title>Integrating Optimizely Data Platform (ODP) for GDPR compliance</title><link href="http://johnnymullaney.com/?p=1799" /><id>http://johnnymullaney.com/?p=1799</id><published>2022-06-14T09:32:01.0000000Z</published><updated>2022-06-14T10:00:57.0000000Z</updated><author><name>johnny.mullaney@ftt.ai</name></author><category term="Blog post" /><summary type="html">The most common concern I&amp;#8217;ve seen raised in Europe is how best to integrate ODP with your website in accordance with GDPR compliance data protection regulations. Some ODP Background ODP consists of the following key data entities that will be synced between your website and ODP. Products Product catalog structure and master data Customers The &amp;#8230; &lt;a href="https://johnnymullaney.com/2022/06/14/integrating-optimizely-data-platform-for-gdpr-compliance/" class="more-link"&gt;Continue reading&lt;span class="screen-reader-text"&gt; "Integrating Optimizely Data Platform (ODP) for GDPR&amp;#160;compliance"&lt;/span&gt;&lt;/a&gt;</summary></entry><entry><title>Manually Importing Products from Commerce Cloud to Optimizely Data Platform (ODP)</title><link href="http://johnnymullaney.com/?p=1813" /><id>http://johnnymullaney.com/?p=1813</id><published>2022-04-28T08:00:00.0000000Z</published><updated>2022-04-28T08:30:42.0000000Z</updated><author><name>johnny.mullaney@ftt.ai</name></author><category term="Blog post" /><summary type="html">ODP has a turn key Integration app called the Commerce Cloud Connector which can be responsible for the synchronisation of Contact, Order and Product data between your Optimizely Commerce Cloud instance and ODP. However in Europe the Commerce Cloud Connector is not due to be released until the end of June 2022. In Europe, due &amp;#8230; &lt;a href="https://johnnymullaney.com/2022/04/28/manually-importing-products-from-commerce-cloud-to-optimizely-data-platform-odp/" class="more-link"&gt;Continue reading&lt;span class="screen-reader-text"&gt; "Manually Importing Products from Commerce Cloud to Optimizely Data Platform&amp;#160;(ODP)"&lt;/span&gt;&lt;/a&gt;</summary></entry><entry><title>Experimenting with your Keyword Search Algorithm – 2 of 2</title><link href="http://johnnymullaney.com/?p=1765" /><id>http://johnnymullaney.com/?p=1765</id><published>2022-02-17T09:00:00.0000000Z</published><updated>2022-02-17T10:00:59.0000000Z</updated><author><name>johnny.mullaney@ftt.ai</name></author><category term="Blog post" /><summary type="html">In post 1 in the series we set up a CMS manageable Search Algorithm Settings Page and plugged that into our Search &amp;#38; Navigation query. We&amp;#8217;ll now build on that to create an Experiment that will help us determine the optimal algorithm configuration. Extend the Search Algorithm Settings Page Firstly we will extend our Algorithm &amp;#8230; &lt;a href="https://johnnymullaney.com/2022/02/17/experimenting-with-your-keyword-search-algorithm-2-of-2/" class="more-link"&gt;Continue reading&lt;span class="screen-reader-text"&gt; "Experimenting with your Keyword Search Algorithm &amp;#8211; 2 of&amp;#160;2"&lt;/span&gt;&lt;/a&gt;</summary></entry><entry><title>Experimenting with your Keyword Search Algorihtm</title><link href="http://johnnymullaney.com/?p=1742" /><id>http://johnnymullaney.com/?p=1742</id><published>2022-02-01T09:00:00.0000000Z</published><updated>2022-02-01T10:02:30.0000000Z</updated><author><name>johnny.mullaney@ftt.ai</name></author><category term="Blog post" /><summary type="html">This series will discuss an approach to experimenting with your Keyword Search Algorithm using the Optimizely Search &amp;#38; Navigation, Commerce Cloud and Experimentation products. Search &amp;#38; Navigation At a basic level the following happens on a keyword search: Customer attempts a keyword search on your Commerce Cloud website Commerce Cloud code builds a Search &amp;#38; &amp;#8230; &lt;a href="https://johnnymullaney.com/2022/02/01/experimenting-with-your-keyword-search-algorihtm/" class="more-link"&gt;Continue reading&lt;span class="screen-reader-text"&gt; "Experimenting with your Keyword Search&amp;#160;Algorihtm"&lt;/span&gt;&lt;/a&gt;</summary></entry><entry><title>Foundations of “Good SEO” with Optimizely</title><link href="http://johnnymullaney.com/?p=1703" /><id>http://johnnymullaney.com/?p=1703</id><published>2021-11-22T10:00:00.0000000Z</published><updated>2021-11-22T13:01:27.0000000Z</updated><author><name>johnny.mullaney@ftt.ai</name></author><category term="Blog post" /><summary type="html">Maximising traffic acquisition through good SEO practices is a key strategic goal of any commercial website. Recently I&amp;#8217;ve been working with some brands on SEO optimisation from a technical perspective and have spent some time trying to map out what exactly &amp;#8220;Good SEO&amp;#8221; means. So what is Good SEO? That&amp;#8217;s a tough question! In my &amp;#8230; &lt;a href="https://johnnymullaney.com/2021/11/22/foundations-of-good-seo-with-optimizely/" class="more-link"&gt;Continue reading&lt;span class="screen-reader-text"&gt; "Foundations of &amp;#8220;Good SEO&amp;#8221; with&amp;#160;Optimizely"&lt;/span&gt;&lt;/a&gt;</summary></entry><entry><title>Optimizely Block Output Caching</title><link href="http://johnnymullaney.com/?p=1681" /><id>http://johnnymullaney.com/?p=1681</id><published>2021-10-27T08:55:36.0000000Z</published><updated>2021-10-27T13:01:18.0000000Z</updated><author><name>johnny.mullaney@ftt.ai</name></author><category term="Blog post" /><summary type="html">There are lots of good quality Blog and Forum posts about differing ways to implement Block level Donut style Output caching in Optimizely. The below is the approach I prefer to implement Donut style Output Caching for Blocks. It keeps things simple while making sure that cache is unique for visitor groups and languages. Using &amp;#8230; &lt;a href="https://johnnymullaney.com/2021/10/27/output-cache-an-optimizely-block/" class="more-link"&gt;Continue reading&lt;span class="screen-reader-text"&gt; "Optimizely Block Output&amp;#160;Caching"&lt;/span&gt;&lt;/a&gt;</summary></entry><entry><title>Personalising Headless Content across Channels</title><link href="http://johnnymullaney.com/?p=1650" /><id>http://johnnymullaney.com/?p=1650</id><published>2021-09-29T09:00:50.0000000Z</published><updated>2021-09-29T09:30:44.0000000Z</updated><author><name>johnny.mullaney@ftt.ai</name></author><category term="Blog post" /><summary type="html">Personalising Headless CMS content across channels can be achieved with Optimizely Visitor Groups when a property in the http request can identify the source. For example a mobile app request sent to a Headless CMS could include the following Http Header key value: &amp;#8220;mobile-app-request&amp;#8221;:true Request Header Visitor Group Criterion A visitor group criterion is required &amp;#8230; &lt;a href="https://johnnymullaney.com/2021/09/29/personalising-headless-content-across-channels/" class="more-link"&gt;Continue reading&lt;span class="screen-reader-text"&gt; "Personalising Headless Content across&amp;#160;Channels"&lt;/span&gt;&lt;/a&gt;</summary></entry><entry><title>My Experience with Optimizely Fullstack (via Rollouts) – 4 of 4</title><link href="http://johnnymullaney.com/?p=1582" /><id>http://johnnymullaney.com/?p=1582</id><published>2021-09-16T11:29:49.0000000Z</published><updated>2021-09-16T11:30:44.0000000Z</updated><author><name>johnny.mullaney@ftt.ai</name></author><category term="Blog post" /><summary type="html">In this final post of the series, we will investigate the result of a real world experiment and discuss what the results of the experiment meant to the roadmap of this project. So far we have talked about working with Optimizely Fullstack from a development perspective and integrating with a Commerce application. Then we configured and coded our first &amp;#8230; &lt;a href="https://johnnymullaney.com/2021/09/16/my-experience-with-optimizely-fullstack-via-rollouts-4-of-4/" class="more-link"&gt;Continue reading&lt;span class="screen-reader-text"&gt; "My Experience with Optimizely Fullstack (via Rollouts) &amp;#8211; 4 of&amp;#160;4"&lt;/span&gt;&lt;/a&gt;</summary></entry></feed>