45 min read
Published:

Welcome back, friends! It's been a busy few months working on various side projects, and things have been hectic at work (several blogs on those topics are coming soon). Keeping up with the latest trends has almost become an obsession for me.
Today I'm kicking off a series of blog posts about recent developments. This post focuses on the Model Context Protocol (MCP) and my predictions about its future direction. The current trend seems to be setting these servers up locally, which I believe is a flawed approach. In most cases, these servers simply expose details of an API that is already remotely hosted.
Local MCP servers make sense only when working with local systems, such as a file system. They're also useful if you're customizing an API or addressing a very specific use case. However, MCP server creators often configure them with a direct 1-to-1 mapping to the underlying API, which isn't always optimal. There are typically more performant ways to enhance your MCP server for specific purposes.
However, I believe the most common scenario is to host your MCP server remotely when you already have an API. Similar to an API, you would implement various authentication methods so the MCP server returns user-specific data. This remote approach embraces the SaaS/Cloud model we've grown accustomed to with web applications, offering clear benefits such as easier maintenance and the ability to quickly update the MCP server as needed.
In today's blog post, I'll show how I implemented this remote option for my MCP Server for Sitecore Personalize using Cloudflare Workers. I must admit I was relatively new to Cloudflare Workers when I started this project, which led to some challenges that experienced users would have avoided. I'm also introducing my Sitecore Personalize MCP server and will walk through the currently available tools. While it's simple at the moment, there's more to come—all made possible by my previous work with the Sitecore Personalize SDK. Let's jump in.
This isn't actually an introduction, but rather a re-introduction for those who missed my previous blog post: AI Friday: Building a Hosted MCP Client and Consuming a Remote MCP Server. You can visit https://copilot.dylanyoung.dev to access my copilot application and review my last post to learn how to use it. In this week's blog, I'll be using this copilot tool, which is already connected to the Sitecore Personalize remote MCP Server that I'll be covering today.
In my prior blog post, I discussed how to add a Remote MCP Server. At that time, the only functional remote MCP server in the app was Fetch. Since then, I've added the Personalize MCP Server, which you can now use. For this blog post, we'll add that server and explore some use cases.
To add it, navigate to the MCP configuration page: https://copilot.dylanyoung.dev/settings/mcp. If you haven't already, click on Add MCP Server in the top right and select Preconfigured. You'll see several options, including the new Unofficial Sitecore Personalize MCP Server. If you don't see it immediately, it's also listed under the Marketing category. Click that option to configure it.
I'll assume you've already configured your Sitecore Personalize instance. If not, navigate to the Sitecore Instances section and configure Sitecore Personalize using API Keys or Developer Generated Tokens as I've shown in previous blog posts. You'll also need to configure an LLM—either Anthropic or Open AI will work—by navigating to the API Tokens section. I recommend exporting this configuration for easy restoration in the future.
You should now be all set and able to access the chat window at https://copilot.dylanyoung.dev/copilot.
You might be wondering why I hadn't built an MCP Server for Sitecore Personalize until now. Well, I've finally created one—and it's hosted, allowing anyone to consume it easily using either SSE or Http Streamable. The code for this hosted solution is open source and available here: dylanyoung-dev/sitecore-personalize-mcp-remote. Being hosted makes it function more like a server implementation than a typical MCP server. At its core, this MCP server consists of basic tool definitions, made possible by my previous work on the Sitecore Personalize Tenant SDKs. The repository enables users to pass headers containing their client Id, client Secret, and region—all parameters the SDK needs to initialize. After initialization, I define tools (listed below with brief descriptions) and provide functions that help the LLM understand which functions to call and what parameters they need. These parameters are passed to the SDK, which then returns the necessary data for whichever function or tool you're using. This approach is similar to what I discussed in my article: Revolutionizing Sitecore Personalize: Unleashing the Power of Generative AI Function Calling. Function calling and MCP are quite similar—a function call is like a concrete implementation in your code, while an MCP server acts more as an interface, allowing you to potentially swap in different types of MCP servers for various use cases, without needing to implement each and every one yourself.
Here are the tools currently available in the MCP server (which I can update remotely without requiring any upgrade steps from users):
We'll be talking more about creating an experience today, but there is also the echo tool, which I set up just for testing the MCP server. You can ignore this tool, but you can use the list_personalization_experiences function to return a list of experiences you've created in your Sitecore Personalize tenant. There are many options available, and I plan to add many more. This was just a simple proof of concept, and I actually encountered several challenges getting this remote MCP server to work with headers. Now, let's go ahead and run a test chat.
You can also access the remote MCP server directly by going here: https://sitecore-personalize-mcp-server.dylany.workers.dev/
Now that we've covered the MCP server and how to configure the copilot tool to use the Personalize MCP server, let's walk through a specific step-by-step use case: creating a new experience in your Personalize tenant.
Once you've configured your MCP server and the instance of Personalize, as well as configured at least one token for either Anthropic or Open AI, navigate to the chat interface here: https://copilot.dylanyoung.dev/copilot. If you've configured everything properly, you should see a chat window where you can begin your interaction.
Start by asking which tools are currently available. You'll receive a list similar to what I mentioned above, along with the parameters expected for each tool.
Since we're creating an experience today, try a prompt like: I want to create a new Web Experience that should consist of a popup when a user first visits my website. The system will respond with the parameters it needs.
For the assets, we'll leverage the LLM to create them for us. Follow up with: Lets call our experience "test" and it's for the Web Channel, can you create the assets needed for our popup, display a simple text message, with a way to close the popup, and some sort of button CTA.
Just like that, it will return suggested HTML, CSS, and JavaScript for your experience and ask you to confirm the creation. I'll confirm, but in a real scenario, you might want to provide additional feedback to refine the experience exactly to your needs.
To proceed, simply say yes, lets proceed and after a few moments, you can visit your Sitecore Personalize tenant where you'll find your newly created Experience. Pretty cool!
Well that’s if for this blog post, I do plan to continue this adventure, with more blogs on the copilot tool as well as I have plans to create new remote MCP servers that once you start to combine more than one tool from multiple MCP servers, you can start to create some pretty cool things.