Conversational Publishing: How Codex and Claude Built My MCP Pipeline in a Day
Ray de GuzmanI've wanted this for years.
A way to write something -- an article, a song release, a video essay -- inside the same tools I think in, and have it appear on my website without ever opening an admin, copying and pasting, and clicking around forms. I must have attempted this dozens of times with earlier LLMs. Every time, the AI would get 10% of the way there and then I'd get stuck on a bug, and would have to abandon the project.
But this time it... just worked. Not, MVP kinda-works. I was able to build every feature I needed. In one day. And the result is the most complex and useful thing I've ever vibe coded.
Vibe coding has changed
Let me be specific about what's different now, because it's not just "the models got smarter" -- though they did.
I used OpenAI's Codex, which is a computer-use coding agent. You give it a task and a codebase, and it writes code, runs it, reads the errors, fixes them, runs it again, and keeps going until the tests pass. The key shift is the self-correcting. You can watch Codex talk to itself -- reasoning through decisions, catching its own mistakes, and revising its approach in real-time.
I set it to auto-review mode, which means it approves its own work unless something fails. This removes the friction of approving every little decision -- file structure, variable names, import order. The stuff that doesn't matter. What you get back is a finished, tested, deployed feature.
With earlier models, bugs were inevitable, and all you could do is feed the error message back into the model and pray that it figures it out. But when I built this time, literally ALL of the bugs were resolved by Codex! I could see it encounter bugs while it was coding, but it would resolve them every time. So I never got blocked.
This is the game changer: The bugs are almost all gone!
The orchestration: three AIs, one workflow
I didn't just throw prompts at Codex and hope. There was a process, and it involved three AI systems working in concert:
Claude (Opus 4.6/4.7) in Notion -- the architect and project manager. I use Claude as my personal AI assistant inside Notion (I developed a self-improving agent within Notion called JARVIS -- more on this in a future article). Claude helped me design the system architecture, define the API surface, plan the phased rollout, and maintain the project documentation. Every piece of context -- the Shopify store schema, the metaobject definitions, the content taxonomy -- lived in Notion pages that Claude could reference.
Codex -- the builder. Each phase was a self-contained prompt that Codex could execute autonomously: scaffold the auth layer, build the MCP server, deploy to Cloudflare Workers, add a new tool. Codex would write the code, write the tests, run them, fix failures, and deploy.
The loop between them -- this was the magic. After each phase, I'd have Codex generate a progress report. I'd bring that report back to Claude in Notion. Claude would update the project documentation, verify what shipped against what was planned, and generate the prompt for the next Codex phase. I'd confirm the phase was complete, and we'd repeat.
It looked like this:
- Claude architects the plan and writes the Phase 1 prompt
- I paste the prompt into Codex
- Codex builds, tests, deploys, and reports back
- I bring the report to Claude
- Claude updates the docs, confirms completion, writes the Phase 2 prompt
- Repeat
Ten phases. One day. Each one building on the last with full documentation at every step.
The insight isn't that AI can code. We knew that. The insight is that multiple AIs can be orchestrated into a development workflow where each one plays to its strengths -- strategic reasoning in one, autonomous execution in another, and a human in the loop for confirmation and direction.
What I actually built
The result is a 16-tool MCP server deployed on Cloudflare Workers that gives any AI client full publishing control over nomaditsu.com. Here's what it can do:
Create and publish content:
- Publish music singles -- creates the metaobject (cover art, lyrics, streaming links) and the linked article in one atomic call, with automatic rollback if anything fails
- Publish YouTube video articles -- same atomic pattern for video content
- Create standalone articles -- essays, guides, journal entries like this one
- Every new article gets a default branded cover image automatically
Manage the archive:
- List and filter articles by type, date, tags, or title search
- Get full article details including HTML body, metafields, SEO, and featured image
- Update any article's content, metadata, tags, SEO fields, or cover image
- Archive metaobjects (soft, reversible) or delete articles (hard, confirm-gated)
Handle images end-to-end:
- Upload images to Shopify's file hosting via a three-step staged upload flow
- Set or replace cover images on any article
- Auto-apply a branded default image when no custom image is specified
- Bulk backfill images across the entire 116-article archive
Enforce conventions:
- Tag taxonomy with type tags, album tags, and general tags -- validated on every create and update
- Bulk tag migration tool that transformed all 116 existing articles to the new convention
- Old-format tags auto-normalize for backward compatibility
The server connects to any MCP-compatible client -- I use it from LM Studio (free), ChatGPT Plus, Codex, and a custom Notion agent. The same tools, the same server, accessible from whatever I'm working in.
The free publishing desk
Here's the part that still surprises me: my primary publishing client costs nothing.
LM Studio runs locally on my laptop. The model I use most for publishing -- GLM 4.7 Flash -- is a lightweight open-source model that runs entirely on-device. No API keys. No credits. No subscription. I wrote a system prompt that teaches it my publishing workflows, tag conventions, HTML formatting rules, and SEO best practices. When I paste article text into LM Studio and say "update the latest article with this," it converts my Markdown to clean HTML, calls the MCP server, and the article is live.
I can update titles, swap cover images, rewrite entire article bodies, manage tags -- all from a free, local AI talking to my Cloudflare Worker. The MCP server doesn't care what's calling it. A $200/month enterprise AI and a free open-source model running on my MacBook hit the same endpoint and get the same results.
The system prompt is the secret. It's a living document I keep in Notion -- every time I discover a new workflow or edge case, I add it. The model doesn't need to be brilliant. It just needs to know which tool to call and how to format the input. The prompt handles the rest.
This means I can publish from anywhere, on any device that runs LM Studio, without spending a single credit. The entire cost of my publishing infrastructure is the Cloudflare Workers free tier and the Shopify plan I was already paying for.
Why this matters to me
I make music. I write. I make videos. I build things. All of that content lives in Notion first -- drafted, edited, refined with AI assistance. The creative process inside Notion has been frictionless for a while now. Notion's AI, Claude, and my custom agents make it effortless to generate, iterate, and polish.
But publishing was always the wall. The creative-to-published gap. The moment I wanted to share something with the world, I had to leave my creative environment, open a completely different tool, and manually transfer everything. Twenty minutes per release if I was focused. Forty if I wasn't. And the friction was enough that sometimes I just... didn't publish.
Now I just say: "Publish this article. Title: I Vibe Coded a 16-Tool MCP Publishing Pipeline in a Day. Tags: article, ai, mcp, engineering, build log. Here's the body."
I paste the text. The AI converts it to HTML, calls createBlogPost, and the article is live on nomaditsu.com with the right tags, a branded default cover image, and SEO fields filled in. That's it. That's the whole publish step.
This article -- the one you're reading right now -- was published exactly that way.
The frictionlessness I feel when creating content can now extend all the way to sharing it. That's the unlock. That's what I've been chasing.
The first one (and the meta punchline)
This article is the first thing my new pipeline published to nomaditsu.com. And then it kept evolving -- I updated the title from Notion, rewrote sections from LM Studio, swapped the cover image from ChatGPT, all through the same MCP tools.
The pipeline isn't just how this article got published. It's how this article got edited after it was published. The whole lifecycle is conversational now.
If there's a takeaway, it's this: vibe coding isn't just about writing code faster. It's about orchestrating AI systems to build things that would have taken weeks -- and having them work on the first try. The models aren't just smarter. They check their own work. They fix their own mistakes. And when you put the right ones in the right roles, the compound effect is something I genuinely didn't expect.
I've had this idea for years. This is the first time it actually worked.