This is a submission for the Storyblok Challenge
Introduction
I've always hated boring dashboards.
Clicking around. Waiting for things to load.
Forgetting where that one damn setting was.
It's slow. It's clunky. And it kills flow.
So I built something better.
A MCP server that lets AI talk to your Storyblok CMS directly - with no dashboards, no clicks, no code. Just plain language.
Tell the AI what to do - "Translate this story," "Upload these assets," "Rollback that release" - and it just does it.
This is not a toy. It's not a wrapper. It's a fully working MCP server made for people who want to ship faster and think less.
Let me walk you through how I built it, what it can do, and why it matters.
Table of Contents
- 🧠 Introduction
- 🚀 What I Built
- 🎥 Demo
- 🛠 Tech Stack
- 🧩 How I Used Storyblok
- 🤖 AI Integration
- 📓 Learnings and Takeaways
- 🏁 Final Thoughts
What I Built
Storyblok MCP Server serves as a bridge between Storyblok and Claude AI-based tools, such as Cursor.
It lets you manage your CMS through plain language - no dashboards, no manual clicks, no code changes.
It currently has 42 tools (4 of them being AI tools) covering stories, assets, releases, tags, components, and more.
Just tell the AI what you want:
"Please generate the metadata for this story: 123456789"
"Please translate this story to Spanish: 123456789"
"Please get all of my assets and generate alt texts for each one of them"
"Please create a tag named Test and add it to story: 123456789"
"Please auto-tag this story: 123456789"
...and it does it, instantly.
This isn't just a wrapper over Storyblok's API - it's a fully featured, extensible MCP server that lets any compatible AI tool reason about your content structure, fetch and edit stories, manage assets, roll back versions, and more.
My goal was to make managing a headless CMS feel less like dev work and more like magic.
Demo
Images
Code Repository:
Storyblok MCP Server
Connect AI tools to Storyblok instantly - use natural language to manage your CMS like magic.
Demo
Table of Contents
Why This Project?
Built for the Storyblok Headless CMS Challenge on DEV.to.
The goal: push AI and Storyblok's power together, make something fresh and useful.
What is Storyblok?
Storyblok is a powerful headless CMS. API-first. Easy for devs and content creators to work together.
It's modular, super flexible, and fits with any frontend or workflow you want.
What's an MCP Server?
MCP = a protocol that connects AI, tools, and data.
The MCP server acts as a middleman, showing AI what it can do and what data it has.
This enables AI clients, such…
Connected to Cursor

Watch the video: README
Tech Stack
-
Node.js + TypeScript - Core server and tool handling
-
pnpm - Fast, reliable package management
-
MCP TypeScript SDK - To implement the MCP protocol
-
Storyblok API - To control your CMS programmatically
-
Gemini 2.0 Flash via Vercel's AI SDK – To generate text for the 4 AI tools.
How I Used Storyblok
Storyblok is a great CMS platform that was the backbone of this entire experience.
Its powerful APIs, modular content approach, and management tokens gave me the flexibility to treat stories, assets, tags, releases, and components as first-class, programmable elements.
I exposed nearly every critical Storyblok capability as a callable AI tool, so the AI could:
- Create and update stories
- Manage tags, components, and releases
- Upload assets and move them across folders
- Query and restore past versions
- Interact with slugs, folder structures, and datasources
Storyblok's API-first nature made this possible and a joy to build.
AI Integration
This project is built for both the Build Any Digital Experience With Storyblok and Awesome AI categories.
It uses the Model Context Protocol (MCP) to make Storyblok content accessible to local AI tools.
Once plugged into tools like Cursor, the AI can:
- Understand what content exists in your space
- Call functions like
update_story
, fetch_assets
, create_release
, etc.
- Take natural commands like "Publish all stories in the 'June Campaign' folder" and convert them to precise API calls
- Maintain context, handle rollbacks, and even search using fuzzy slugs or tags
Learnings and Takeaways
This wasn't easy. It was messy. It was slow.
I had never built an MCP server before.
Didn't even know what "MCP" stood for until I googled it five times.
Tried setting it up in Cursor for 2-3 hours straight. Failed every time. Lol.
And let me be honest, wiring that thing to Storyblok's API took me way longer than I want to admit.
Thankfully, this article by @anmolbaranwal saved me.
Without it, I'd have lost another 2 hours just understanding the basics:
Then came the security part. Giving AI access to a CMS isn't a joke. Tokens, scopes, permissions - one mistake, and it's all open.
So instead of asking you to give me the keys... I made it so you give them directly to Cursor.
Cursor handles setup. Cursor stores the keys.
So if anything leaks, it's on them. Not you. Not me.
Might sound like an insane idea, but it's safer. Cleaner. Smarter.
Also, I built this with developers like me in mind.
No black boxes. Just code you can download, extend if you want, and plug into whatever stack you've got.
If you've ever used a messy integration like the other MCPs, you'll feel the difference here.
What I'm proud of:
- A fully working AI-powered Storyblok CMS server, end-to-end.
- A project that actually saves time.
- Something that could be used by devs, marketers, creators, literally anyone using Storyblok as their CMS.
- A great learning experience.
I built this because I believe the future of tooling is invisible, and AI should do more than answer questions.
It should build, edit, and manage EVERYTHING effectively.
This server helps make that future real.
Final Thoughts
Managing content shouldn't be painful. It shouldn't take 10 clicks to do 1 thing.
It should feel like magic. Fast. Clean. Invisible.
That's what this project tries to do.
If you're a dev working with Storyblok - or just someone tired of clicking around a CMS - this server is for you.
You can download it. Plug it into Cursor. Make it your own.
And if you want to see exactly how it works, every piece is explained in the README of the repo.
This is just the start.
I'm gonna keep improving it.
But for now, it works - and it works well.
Thanks for reading.
And if you build something cool on top of it, I'd love to see it.
Made with ❤️ by @arjuncodess for the DEV.to Storyblok Challenge.
Awesome bro, vouching for you to win the challenge. Thanks for the mention btw! 💜