DEV Community

Severin Komander
Severin Komander

Posted on

I Built an MCP Server for My Flower Shop. Nobody Asked Me To.

A story about over-engineering a 60-year-old Munich florist because we could

Let me set the scene.
It's a Tuesday evening in Munich. My family has been selling flowers from the same shop on Heßstraße 37 since 1965. We've survived recessions, two pandemics, and the brief but terrifying period when "sending flowers via the internet" was considered futuristic.
And here I am, at 11pm, publishing an MCP server to the official Model Context Protocol Registry.
For a flower shop.
In Munich.

Why?
Great question. I asked myself the same thing approximately zero times before starting.
The honest answer: because the infrastructure existed, Claude Code was right there, and I wanted to see if I could make Mistral Le Chat order carnations.
The business answer I tell people at networking events: "We're positioning Blumen Komander as an AI-native florist for the emerging agentic commerce era."
Both are true.

What We Built (In One Evening)
Here's what an evening with Claude Code produced:
A full REST API for the shop:
GET /store/products/search?occasion=geburtstag&maxPrice=50
GET /store/availability?date=2026-05-19&postalCode=80799
POST /store/carts
Complete with Bavarian holiday logic (yes, I implemented the Gaussian Easter formula in JavaScript at midnight), delivery zones for Munich's postal codes, and a 6-step Medusa.js checkout flow.
An MCP Server with two transports:

/sse for Claude Desktop and Gemini CLI
/mcp for Mistral, ChatGPT, and Copilot Studio

Five tools:

search_flowers – finds bouquets by occasion, color, budget, style
check_availability – checks if we can deliver on a given date
create_cart – full checkout flow, returns a payment link
get_checkout_link – retrieves an existing cart
get_shop_info – opening hours, contact, payment methods

An llms.txt on three domains, because apparently that's a thing now.
A listing in the official MCP Registry at registry.modelcontextprotocol.io as io.github.Severin2k/blumen-komander-mcp.
Total time: one evening.
Total cost: my Claude Max subscription.
Total bouquets ordered by AI agents so far: approximately 3 test orders I placed myself.

The Moment It Actually Worked
I connected Mistral Le Chat to the MCP server and typed:
"Ich möchte Blumen zum Geburtstag bestellen, Budget 50€, Lieferung am 19. Mai nach München, Fasangartenstraße 86, PLZ 81549."
Mistral called search_flowers. Then check_availability. Then showed me five real bouquets from our actual inventory with real prices.
Then it said: "Welchen Strauß möchten Sie? Ich kann direkt einen Warenkorb für Sie anlegen."
And I sat there for a moment thinking: a French AI just offered to buy flowers from my Munich flower shop, autonomously, using a protocol created by Anthropic, running on a server I built in an evening.
My grandfather opened this shop in 1965. He took orders by phone.

Is Anyone Going to Use This?
Probably not many people. Let's be honest.
The number of humans who currently think "I should configure an MCP server to order flowers" is somewhere between twelve and my immediate family.
But here's the thing about being early:
In 2024, Anthropic published the Model Context Protocol spec.
In 2025, Stripe built an MCP server. Then Asana. Then GitHub.
In 2026, I built one for a flower shop in Schwabing.
In 2027-2028, AI agents will start buying things autonomously.
When that happens, we're already in the registry. Already tested. Already the first florist in the world with a working MCP integration.
The cost of being early is: a Tuesday evening and some mild sleep deprivation.
The cost of being late is: watching someone else be first.

The Technical Stack (For Those Who Care)

Backend: Medusa.js v2 on Hetzner VPS
Frontend: Next.js App Router
MCP Server: @modelcontextprotocol/sdk, Node.js, Express
Transports: SSE (/sse) + Streamable HTTP (/mcp)
Tested with: Mistral Le Chat ✅, Claude ✅, Claude Desktop ✅
npm package: blumen-komander-mcp
Registry: io.github.Severin2k/blumen-komander-mcp

The MCP server is open source on GitHub:
github.com/Severin2k/blumen-komander-mcp
You can connect right now:
json{
"mcpServers": {
"blumen-komander": {
"url": "https://mcp.blumen-verschicken.online/sse"
}
}
}
Or for Mistral Le Chat:
URL: https://mcp.blumen-verschicken.online/mcp
Authentication: None

What We Also Built Because Why Not
Since we were already there:
A KI-Chat-Konfigurator on the shop website – a Mistral-powered chat assistant embedded directly in the store page. It knows the seasonal flower calendar (Pfingstrosen are in peak season right now, by the way), can suggest bouquets, collect delivery details, and generate a checkout link. All without the customer leaving the page.
Floristic knowledge in the system prompt – including a full seasonal calendar of 47 flower types with availability months. Because if you're going to build an AI florist, it should know that tulips are done by April.
A Wunschstrauß (custom bouquet) flow – if a customer asks for peonies and we don't have them in standard inventory, the AI explains they're in peak season right now, asks for color preferences and budget, and creates a custom order. The florist sees the description and makes it happen.

Lessons Learned

  1. The MCP spec is actually well-designed. SSE for Claude/Gemini, Streamable HTTP for Mistral/ChatGPT. Two endpoints, all clients covered. Took me longer to figure out the Body-already-read bug in Express than to understand the protocol.
  2. LLMs are surprisingly good at structured commerce flows. With the right system prompt and tool definitions, Mistral walked through a 10-step order process, extracted 18 variables from a conversation, and called create_cart with correct arguments. The hard part isn't the AI – it's the state management.
  3. Being first in a niche is easier than it sounds. Nobody told me "florists should have MCP servers". The category didn't exist. I just... made it exist.
  4. Claude Code is genuinely useful for this. I described what I wanted, reviewed the code, gave feedback. The Gaussian Easter formula in TypeScript was not something I wrote myself. I'm a florist.

The MCP Registry Entry
If you're curious what it looks like:
io.github.Severin2k/blumen-komander-mcp
Title: Blumen Komander München
Status: Active
Remote SSE: https://mcp.blumen-verschicken.online/sse
Remote HTTP: https://mcp.blumen-verschicken.online/mcp
npm: blumen-komander-mcp
Deutschlands erster Florist mit MCP Server. 🌸

Try It
Connect the MCP server to your Claude Desktop, Mistral Le Chat, or any MCP-compatible client and ask it to help you order flowers for someone in Munich.
It actually works.
The flowers are actually real.
We actually deliver them, by hand, in Munich, the next day.
Sixty years of doing this. Now with JSON-RPC.

Severin Komander runs Blumen Komander München, a flower shop on Heßstraße 37 in Munich since 1965. The MCP server is live at mcp.blumen-verschicken.online. The flowers are at blumen-verschicken.online. The shop is real. This is not a bit.
npm: blumen-komander-mcp
GitHub: Severin2k/blumen-komander-mcp
MCP Docs: blumen-komander.de/ki-florist

Top comments (0)