<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Michael Egberts</title>
    <description>The latest articles on Forem by Michael Egberts (@megberts).</description>
    <link>https://forem.com/megberts</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3842727%2F72c75668-5f03-4d45-8287-c5aaa231ad58.jpg</url>
      <title>Forem: Michael Egberts</title>
      <link>https://forem.com/megberts</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/megberts"/>
    <language>en</language>
    <item>
      <title>Which Gemma 4 Variant Should Power Your MCP Agent?</title>
      <dc:creator>Michael Egberts</dc:creator>
      <pubDate>Sat, 16 May 2026 14:35:48 +0000</pubDate>
      <link>https://forem.com/megberts/which-gemma-4-variant-should-power-your-mcp-agent-4gkn</link>
      <guid>https://forem.com/megberts/which-gemma-4-variant-should-power-your-mcp-agent-4gkn</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;This is a submission for the Gemma 4 Challenge: Write About Gemma 4&lt;/p&gt;
&lt;/blockquote&gt;




&lt;p&gt;I’m writing this from a phone, on vacation. That’s not a flex — it’s the point.&lt;/p&gt;

&lt;p&gt;I run an MCP server in production: &lt;a href="https://websitepublisher.ai" rel="noopener noreferrer"&gt;WebsitePublisher.ai&lt;/a&gt;, 55+ tools, 9 AI platforms connected. This afternoon I opened Google AI Studio on my phone, selected Gemma 4 26B, gave it our tool schemas, and asked it to build a bakery website. It returned six structured tool calls. I executed them. The site went live.&lt;/p&gt;

&lt;p&gt;No laptop. No terminal. No IDE. Just a phone, a model, and a protocol.&lt;/p&gt;

&lt;p&gt;That experience crystallized something I’ve been thinking about: Gemma 4 doesn’t ship one model — it ships four, each sized for a different deployment reality. The question isn’t whether open-weight models can power MCP agents. It’s &lt;strong&gt;which Gemma 4 variant fits which part of your agent stack.&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  What is MCP?
&lt;/h2&gt;

&lt;p&gt;Model Context Protocol is an open standard (JSON-RPC based) that lets AI models call external tools through a universal interface. Instead of each AI platform building proprietary integrations, you build one MCP server and every compatible AI can use it.&lt;/p&gt;

&lt;p&gt;Our MCP server exposes tools like &lt;code&gt;create_page&lt;/code&gt;, &lt;code&gt;upload_asset&lt;/code&gt;, &lt;code&gt;create_record&lt;/code&gt;, &lt;code&gt;configure_form&lt;/code&gt;, and &lt;code&gt;execute_integration&lt;/code&gt;. When a model connects, it can create web pages, manage structured data, handle form submissions, and trigger third-party services — all through standardized tool calls.&lt;/p&gt;

&lt;p&gt;Any model that can produce structured output can be an MCP client. The question is: &lt;em&gt;how well&lt;/em&gt; does it handle the work once connected?&lt;/p&gt;




&lt;h2&gt;
  
  
  The Gemma 4 Lineup
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;E2B&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;E4B&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;26B A4B&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;31B Dense&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Active params&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;~2B&lt;/td&gt;
&lt;td&gt;~4B&lt;/td&gt;
&lt;td&gt;3.8B (26B total, MoE)&lt;/td&gt;
&lt;td&gt;31B&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Context&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;128K&lt;/td&gt;
&lt;td&gt;128K&lt;/td&gt;
&lt;td&gt;256K&lt;/td&gt;
&lt;td&gt;256K&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Audio input&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Min RAM&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;~4 GB&lt;/td&gt;
&lt;td&gt;~8 GB&lt;/td&gt;
&lt;td&gt;~16 GB&lt;/td&gt;
&lt;td&gt;~24 GB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Runs on&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Phone, RPi&lt;/td&gt;
&lt;td&gt;Laptop&lt;/td&gt;
&lt;td&gt;Dev workstation&lt;/td&gt;
&lt;td&gt;GPU server&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;All Apache 2.0. No usage caps, no MAU thresholds.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Test: Gemma 4 26B Builds a Website from a Phone
&lt;/h2&gt;

&lt;p&gt;Here’s exactly what happened.&lt;/p&gt;

&lt;p&gt;I opened Google AI Studio on my iPhone, selected &lt;strong&gt;Gemma 4 26B A4B IT&lt;/strong&gt;, and pasted a prompt containing five of our MCP tool schemas (&lt;code&gt;create_page&lt;/code&gt;, &lt;code&gt;create_entity&lt;/code&gt;, &lt;code&gt;create_record&lt;/code&gt;, &lt;code&gt;configure_form&lt;/code&gt;, &lt;code&gt;list_pages&lt;/code&gt;) along with this instruction:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;“A user says: Build me a simple landing page for my bakery called ‘Golden Crust’. Include a short intro, three signature breads, and a contact form. Respond with the exact sequence of MCP tool calls.”&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Gemma 4 returned six tool calls in valid JSON:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;create_entity&lt;/strong&gt; — defined a “bread” data model with name and description fields&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;create_record&lt;/strong&gt; x3 — added Sourdough, French Baguette, and Honey Whole Wheat&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;create_page&lt;/strong&gt; — generated a full HTML landing page with inline CSS, product listings, and a contact form&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;configure_form&lt;/strong&gt; — set up the contact form with name, email, and message fields&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Every tool call used the correct parameter structure. The ordering was logical: data model first, then records, then the page that references them, then the form configuration. The HTML included sensible styling, warm bakery colors, and properly structured sections.&lt;/p&gt;

&lt;p&gt;I copied the tool calls into Claude (the AI assistant I use for MCP execution), ran them against our server, and the site went live at &lt;a href="https://gemma-test.websitepublisher.ai" rel="noopener noreferrer"&gt;gemma-test.websitepublisher.ai&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Total time from prompt to live website: under 10 minutes. From a phone. Over 5G.&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  What This Test Actually Proves
&lt;/h2&gt;

&lt;p&gt;Let me be precise about what this demonstrates and what it doesn’t.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;It proves:&lt;/strong&gt; Gemma 4 26B can parse MCP tool schemas, reason about task decomposition, produce correctly structured tool calls, and sequence them in a logical order — all without any fine-tuning on our specific tools. This is zero-shot tool use on a real production API.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;It doesn’t prove:&lt;/strong&gt; That Gemma 4 can handle a live MCP connection autonomously. In this test, I manually copied the tool calls and executed them. The model generated the plan; I was the middleware.&lt;/p&gt;

&lt;p&gt;That distinction matters, and it’s where the variant comparison gets interesting.&lt;/p&gt;




&lt;h2&gt;
  
  
  Mapping Variants to MCP Agent Roles
&lt;/h2&gt;

&lt;p&gt;Based on running MCP across 9 AI platforms and watching models of every size class interact with our tools, here’s how I’d think about placing each Gemma 4 variant:&lt;/p&gt;

&lt;h3&gt;
  
  
  E2B: The Front Door
&lt;/h3&gt;

&lt;p&gt;With ~2B active parameters, E2B fits as the &lt;em&gt;trigger&lt;/em&gt;: the component that understands intent and dispatches a single tool call. A voice command on a phone — “publish my latest blog post” — parsed and routed to the right MCP tool. One intent, one call, one response.&lt;/p&gt;

&lt;p&gt;The native audio input is the differentiator. For voice-triggered MCP agents on battery-constrained devices, this is the size class that makes sense.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Likely sweet spot:&lt;/strong&gt; Single-tool dispatcher. Voice-triggered agent entry point.&lt;br&gt;
&lt;strong&gt;Likely limitation:&lt;/strong&gt; Multi-step chains where context from earlier calls matters.&lt;/p&gt;

&lt;h3&gt;
  
  
  E4B: The Local Workhorse
&lt;/h3&gt;

&lt;p&gt;This is where local MCP agents become genuinely useful. Running on any modern laptop, handling single-step tool calls with good reliability.&lt;/p&gt;

&lt;p&gt;Based on what I’ve seen at this parameter range: straightforward create-and-deploy loops work well. Where models this size show limits is context-dependent sequences — “build a five-page site with consistent navigation” requires maintaining consistency across multiple creation steps.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Likely sweet spot:&lt;/strong&gt; Local development agent. Content creation. Moderate single-step tool calls.&lt;br&gt;
&lt;strong&gt;Likely limitation:&lt;/strong&gt; Multi-page orchestration requiring consistency across 4+ sequential calls.&lt;/p&gt;

&lt;h3&gt;
  
  
  26B A4B: The Efficiency Sweet Spot
&lt;/h3&gt;

&lt;p&gt;This is the variant I tested. And it delivered.&lt;/p&gt;

&lt;p&gt;Six sequential tool calls, all correctly structured, logically ordered, with a coherent HTML output that referenced the data model it had just created. That’s not trivial — it requires the model to hold its own plan in context and execute against it consistently.&lt;/p&gt;

&lt;p&gt;The MoE architecture (activating only 3.8B parameters per token while drawing on 26B total) and the 256K context window make this variant particularly suited for MCP work. Tool schemas are large — our 55+ tools consume significant context before the model even starts reasoning. The 256K window gives comfortable headroom.&lt;/p&gt;

&lt;p&gt;But the bakery test was deliberately simple. Our MCP server also exposes 13 e-commerce integrations — product catalogs, shopping carts, checkout flows, payment processing via Stripe or Mollie, invoice generation, inventory tracking, and more. Building a full webshop means orchestrating these proven software building blocks in sequence: the AI picks the right pieces and combines them into a working application. We call this &lt;strong&gt;wave coding&lt;/strong&gt; — not prompting and praying like vibe coding, but riding deliberate waves of AI-assembled, production-tested components. Each wave builds on the last. That’s where a model like the 26B earns its place: enough reasoning depth to orchestrate 6-8 integration calls reliably, enough context to hold the full picture.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Proven sweet spot:&lt;/strong&gt; Multi-step tool orchestration. Production agent server. The “right answer” for most self-hosted MCP deployments.&lt;br&gt;
&lt;strong&gt;Likely limitation:&lt;/strong&gt; Highly creative or ambiguous tasks where raw reasoning power matters more than efficiency.&lt;/p&gt;

&lt;h3&gt;
  
  
  31B Dense: The Precision Architect
&lt;/h3&gt;

&lt;p&gt;Every token touches all 31B parameters — no routing, no sparsity. Slower, heavier, but the strongest reasoner in the family.&lt;/p&gt;

&lt;p&gt;For MCP agent work, this class earns its compute in two scenarios: architecture-level planning where the &lt;em&gt;sequence&lt;/em&gt; of tool calls matters as much as individual calls, and fine-tuning for domain-specific tool patterns. The dense architecture makes fine-tuning more predictable than MoE.&lt;/p&gt;

&lt;p&gt;Where 31B pulls ahead of 26B is &lt;strong&gt;full wave coding sessions&lt;/strong&gt; — building an entire webshop from brief to live, orchestrating 15+ sequential integration calls while maintaining consistency across product data, payment configuration, email templates, and frontend pages. That’s the kind of sustained, multi-layer orchestration where every additional parameter matters.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Likely sweet spot:&lt;/strong&gt; Complex project planning. Full wave coding orchestration. Fine-tuned domain agents.&lt;br&gt;
&lt;strong&gt;Likely limitation:&lt;/strong&gt; Cost and latency. For tasks where 26B delivers equivalent results, you’re burning compute you don’t need.&lt;/p&gt;




&lt;h2&gt;
  
  
  What I Learned About Model Size and Tool Calling
&lt;/h2&gt;

&lt;p&gt;Running MCP across 9 platforms, one pattern stands out: &lt;strong&gt;for simple tool calls, model size barely matters.&lt;/strong&gt; A “create this page” request succeeds with roughly the same reliability across model classes.&lt;/p&gt;

&lt;p&gt;Where model size becomes decisive is &lt;strong&gt;orchestration depth&lt;/strong&gt; — the number of sequential, context-dependent tool calls a model can chain before losing coherence. At two to three calls, almost anything works. Past six calls, only the stronger reasoners maintain consistency.&lt;/p&gt;

&lt;p&gt;Open-weight models give you something closed APIs never will: &lt;strong&gt;the ability to match model weight to task weight.&lt;/strong&gt; Route simple status checks to E4B and complex builds to 31B. Your agent gets smarter &lt;em&gt;and&lt;/em&gt; cheaper at the same time.&lt;/p&gt;

&lt;p&gt;That’s the real unlock of open-weight + MCP: you own both the brain and the hands.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Decision Framework
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Need voice or audio input?&lt;/strong&gt;&lt;br&gt;
Then E2B (phone/IoT) or E4B (laptop)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How many sequential tool calls per task?&lt;/strong&gt;&lt;br&gt;
1-3: &lt;strong&gt;E4B&lt;/strong&gt; — fast, light, capable&lt;br&gt;
4-8: &lt;strong&gt;26B A4B&lt;/strong&gt; — tested and proven&lt;br&gt;
8+: &lt;strong&gt;31B Dense&lt;/strong&gt; — when orchestration quality justifies compute&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fine-tuning for a specific domain?&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;31B Dense&lt;/strong&gt; — dense fine-tunes more predictably than MoE&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Budget-constrained?&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;26B A4B.&lt;/strong&gt; Almost always the answer.&lt;/p&gt;




&lt;h2&gt;
  
  
  What’s Next
&lt;/h2&gt;

&lt;p&gt;While testing, I discovered that &lt;a href="https://mcpplaygroundonline.com" rel="noopener noreferrer"&gt;MCP Playground&lt;/a&gt; — an online tool for testing MCP servers — lists both Gemma 4 26B and 31B as available models. Our server connects and authenticates successfully. Once we resolve a token compatibility issue on our end, this will enable fully automated testing: type a prompt, Gemma 4 calls our MCP tools directly, website appears. No copy-paste middleware needed.&lt;/p&gt;

&lt;p&gt;That’s the trajectory: from “model generates a plan I execute manually” to “model executes the plan autonomously through MCP.” Gemma 4’s native function calling support, combined with MCP’s standardized tool protocol, makes this path viable on fully open-source infrastructure.&lt;/p&gt;

&lt;p&gt;If you want to start experimenting:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Gemma 4 models&lt;/strong&gt; — &lt;a href="https://aistudio.google.com" rel="noopener noreferrer"&gt;Google AI Studio&lt;/a&gt;, &lt;a href="https://ollama.com" rel="noopener noreferrer"&gt;Ollama&lt;/a&gt;, &lt;a href="https://huggingface.co/collections/google/gemma-4-release-684a6475a35684188f54823e" rel="noopener noreferrer"&gt;Hugging Face&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;MCP specification&lt;/strong&gt; — &lt;a href="https://modelcontextprotocol.io" rel="noopener noreferrer"&gt;modelcontextprotocol.io&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;An MCP server to test against&lt;/strong&gt; — &lt;a href="https://websitepublisher.ai" rel="noopener noreferrer"&gt;WebsitePublisher.ai&lt;/a&gt; has a free tier with 55+ tools&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Pick the variant that fits your hardware. Connect it to a real MCP server. The benchmarks start mattering a lot less once you’re watching a model build something real.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Built and tested entirely from a phone. On vacation. Because that’s what open protocols and open models make possible.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>agents</category>
      <category>devchallenge</category>
      <category>llm</category>
      <category>mcp</category>
    </item>
    <item>
      <title>WAVE Coding: Why we built 78 integrations for AI instead of letting AI build them</title>
      <dc:creator>Michael Egberts</dc:creator>
      <pubDate>Thu, 14 May 2026 19:38:45 +0000</pubDate>
      <link>https://forem.com/megberts/wave-coding-why-we-built-78-integrations-for-ai-instead-of-letting-ai-build-them-if2</link>
      <guid>https://forem.com/megberts/wave-coding-why-we-built-78-integrations-for-ai-instead-of-letting-ai-build-them-if2</guid>
      <description>&lt;p&gt;Every week I see another "I built a SaaS in 4 hours with AI" post. And every week, the comments are the same: "Cool, but does the Stripe integration actually work?"&lt;/p&gt;

&lt;p&gt;Usually it doesn't.&lt;/p&gt;

&lt;p&gt;That's vibe coding. You prompt, you hope, and you pray that the AI correctly implements a payment flow it's never actually tested. It hallucinates webhook handlers. It guesses at email configs. It builds checkout flows that break on the first real transaction.&lt;/p&gt;

&lt;p&gt;We took the opposite approach.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The puzzle piece pattern&lt;/strong&gt;&lt;br&gt;
We're building WebsitePublisher.ai — a platform where AI assistants build and publish websites and web applications through conversation. Available on 9 AI platforms (Claude, ChatGPT, Gemini, Cursor, Windsurf, GitHub Copilot, Grok, Mistral, n8n) via MCP protocol.&lt;br&gt;
In the last 16 days, we shipped 78 integrations. Each one is a self-contained puzzle piece — proven software running on our web servers. AI doesn't generate the integration code. AI calls the integration.&lt;br&gt;
Here's what that looks like in practice:&lt;/p&gt;

&lt;p&gt;User: "I need a webshop with Stripe payments and order confirmation emails"&lt;/p&gt;

&lt;p&gt;AI selects:&lt;br&gt;
  → product-catalog (MAPI entity + helpers)&lt;br&gt;
  → shopping-cart (session-based)&lt;br&gt;
  → checkout-flow (orchestration engine)&lt;br&gt;
  → stripe (payment processing)&lt;br&gt;
  → invoice-generator (PDF + accounting)&lt;br&gt;
  → email-templates (Resend rendering)&lt;/p&gt;

&lt;p&gt;Result: 6 tested puzzle pieces combined into a working application.&lt;/p&gt;

&lt;p&gt;Zero hallucinated Stripe webhooks. Zero guessed SMTP configs. The heavy lifting happens in proven software on the server.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why this matters&lt;/strong&gt;&lt;br&gt;
The fundamental problem with vibe coding is that AI is asked to do two things at once:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Understand what you want&lt;/strong&gt; (AI is great at this)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Implement reliable infrastructure&lt;/strong&gt; (AI is terrible at this)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;WAVE coding separates the two. AI handles #1 — understanding your intent and selecting the right puzzle pieces. The proven software handles #2 — the actual Stripe calls, the email delivery, the database queries.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What's in the 78 puzzle pieces&lt;/strong&gt;&lt;br&gt;
Some highlights from what shipped in 16 days:&lt;br&gt;
&lt;strong&gt;E-commerce stack&lt;/strong&gt;:&lt;br&gt;
Product catalog, shopping cart, checkout flow, order management, inventory tracking, shipping (MyParcel), invoice generation, discount codes&lt;br&gt;
&lt;strong&gt;Communication&lt;/strong&gt;:&lt;br&gt;
SMTP email, email templates, contact forms, multi-layer spam protection&lt;br&gt;
&lt;strong&gt;Data layer&lt;/strong&gt;:&lt;br&gt;
Server-side rendering for SEO, batch update/delete endpoints, data grids with validation&lt;br&gt;
&lt;strong&gt;AI layer&lt;/strong&gt;:&lt;br&gt;
Coach (guided website creation), concept generation, streaming chat&lt;br&gt;
&lt;strong&gt;Platform hardening&lt;/strong&gt;:&lt;br&gt;
DNSSEC, request tracing, error envelope standardization, security hardening&lt;/p&gt;

&lt;p&gt;Each piece follows the same pattern: a handler receives the endpoint, input, and project ID. Dependencies are explicit. No magic.&lt;/p&gt;

&lt;p&gt;The results&lt;br&gt;
In the same 16 days:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;7 new customers onboarded&lt;/li&gt;
&lt;li&gt;World Cup prediction game deployed for PSV Supporters (30,000 members)&lt;/li&gt;
&lt;li&gt;Visual editor upgrade shipped&lt;/li&gt;
&lt;li&gt;Coach AI guidance system improved&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;We're calling it WAVE coding&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Not because it's a clever acronym. Because each application you build is a wave — one deliberate push that combines existing puzzle pieces into something new. Each wave builds on what came before.&lt;br&gt;
Vibe coding is random energy hoping to land somewhere useful.&lt;br&gt;
WAVE coding is deliberate momentum. 🌊&lt;/p&gt;

&lt;p&gt;Curious what you think. Are you building infrastructure for AI to use, or letting AI build infrastructure from scratch?&lt;br&gt;
websitepublisher.ai&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>ai</category>
      <category>buildinpublic</category>
      <category>mcp</category>
    </item>
    <item>
      <title>We're now in Mistral's connector directory — here's what that means for AI-powered web publishing</title>
      <dc:creator>Michael Egberts</dc:creator>
      <pubDate>Tue, 05 May 2026 11:54:06 +0000</pubDate>
      <link>https://forem.com/megberts/were-now-in-mistrals-connector-directory-heres-what-that-means-for-ai-powered-web-publishing-206</link>
      <guid>https://forem.com/megberts/were-now-in-mistrals-connector-directory-heres-what-that-means-for-ai-powered-web-publishing-206</guid>
      <description>&lt;p&gt;&lt;strong&gt;Hook&lt;/strong&gt;: WebsitePublisher.ai is a pre-configured Directory Connector in Mistral's curated MCP connector directory. That's a mouthful, so let me break it down: Le Chat users can now find us in their connector settings, click Add, complete OAuth, and immediately start building websites through conversation.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key points to cover&lt;/strong&gt;:&lt;br&gt;
What a Directory Connector is vs Custom Connector&lt;br&gt;
OAuth 2.1 + DCR auto-discovery&lt;br&gt;
55+ MCP tools available&lt;br&gt;
How it compares to our ChatGPT integration (Custom GPT = zero setup)&lt;br&gt;
The 10-platform story&lt;br&gt;
Link to setup guide: websitepublisher.ai/docs/mcp#mistral-setup&lt;/p&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>buildinpublic</category>
      <category>mcp</category>
    </item>
    <item>
      <title>Building an AI-native web platform: 69 features in 11 days (solo dev log)</title>
      <dc:creator>Michael Egberts</dc:creator>
      <pubDate>Tue, 28 Apr 2026 10:35:51 +0000</pubDate>
      <link>https://forem.com/megberts/building-an-ai-native-web-platform-69-features-in-11-days-solo-dev-log-l55</link>
      <guid>https://forem.com/megberts/building-an-ai-native-web-platform-69-features-in-11-days-solo-dev-log-l55</guid>
      <description>&lt;p&gt;I'm building WebsitePublisher.ai — a platform where AI assistants build and publish complete websites through MCP (Model Context Protocol) tools. Here's what the last 11 days looked like.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Visual Editor Problem&lt;/strong&gt;&lt;br&gt;
Users could build entire websites through conversation, but changing a single typo required asking the AI to patch the page. Terrible UX for small edits.&lt;br&gt;
&lt;strong&gt;Solution: WPE v2&lt;/strong&gt; — a visual editor that loads the published page in an iframe, detects editable elements, and lets users click-to-edit text, drag-and-drop images, right-click for context menus, and save back through the same PAPI that AI assistants use.&lt;/p&gt;

&lt;p&gt;Key decisions: httpOnly cookies instead of URL tokens, change count badge in dashboard, overlay detection for CSS-covered images.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Integration Cookbook&lt;/strong&gt;&lt;br&gt;
Our integration engine (IAPI) supports http (external proxy) and internal (PHP handler) drivers. After shipping LinkedIn posting and SMTP email in the same week, I wrote an Internal Integration Cookbook:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Create manifest JSON with endpoint definitions&lt;/li&gt;
&lt;li&gt;Implement handler extending InternalIntegrationHandler&lt;/li&gt;
&lt;li&gt;Define body_transform and response_transform hooks&lt;/li&gt;
&lt;li&gt;Register in engine&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Result: the API Proxy integration took 2 hours from start to production.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;MCP Session Stability&lt;/strong&gt;&lt;br&gt;
OAuth 2.1 + PKCE authentication. Claude's connector occasionally lost session state → 401 errors mid-conversation. Fixed with a 6-layer approach: token refresh, graceful 401 handling, session persistence, stale token detection, project selector refresh, frontend error boundaries.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Custom Domains with DNS Pre-validation&lt;/strong&gt;&lt;br&gt;
SSL certificate requests would fail when DNS hadn't propagated. Now we validate CNAME resolution before calling certbot. Clear error messages instead of cryptic failures.&lt;br&gt;
&lt;strong&gt;Numbers&lt;/strong&gt;&lt;br&gt;
Tasks completed (11 days): 69&lt;br&gt;
Total MCP tools: 55&lt;br&gt;
AI platforms supported: 9&lt;br&gt;
API layers: 10&lt;br&gt;
Directory listings: 15+&lt;/p&gt;

&lt;p&gt;→ websitepublisher.ai&lt;/p&gt;

</description>
      <category>ai</category>
      <category>mcp</category>
      <category>webdev</category>
      <category>buildinpublic</category>
    </item>
    <item>
      <title>Week 16 Dev Log: From First Customer to 56 MCP Tools — Building an AI-Native Website Publisher</title>
      <dc:creator>Michael Egberts</dc:creator>
      <pubDate>Mon, 13 Apr 2026 14:05:54 +0000</pubDate>
      <link>https://forem.com/megberts/week-16-dev-log-from-first-customer-to-56-mcp-tools-building-an-ai-native-website-publisher-511k</link>
      <guid>https://forem.com/megberts/week-16-dev-log-from-first-customer-to-56-mcp-tools-building-an-ai-native-website-publisher-511k</guid>
      <description>&lt;p&gt;I'm building WebsitePublisher.ai — a platform where AI assistants build and publish websites through MCP (Model Context Protocol) tools. This week: first paying customer, team collaboration, and some interesting architecture decisions.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Stack&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Quick context: Laravel/PHP backend, dual-server DigitalOcean cluster, Redis Sentinel, MySQL, S3 for assets. The AI layer is a multi-API stack:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;PAPI&lt;/strong&gt; — pages and assets&lt;br&gt;
&lt;strong&gt;MAPI&lt;/strong&gt; — entities and structured data&lt;br&gt;
&lt;strong&gt;VAPI&lt;/strong&gt; — vault/secrets management&lt;br&gt;
&lt;strong&gt;IAPI&lt;/strong&gt; — third-party integrations (Stripe, Resend, Twilio, etc.)&lt;br&gt;
&lt;strong&gt;SAPI&lt;/strong&gt; — sessions, forms, visitor auth&lt;br&gt;
&lt;strong&gt;TAPI&lt;/strong&gt; — task tracking across AI sessions&lt;br&gt;
&lt;strong&gt;AAPI&lt;/strong&gt; — scheduled automations&lt;/p&gt;

&lt;p&gt;All exposed as MCP tools. Currently 56 tools, accessible from Claude, ChatGPT, Cursor, Windsurf, GitHub Copilot, Gemini, Grok, Mistral, and n8n.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What shipped this week&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Team Collaboration&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Our first paying customer — an agency — asked for multi-user support on day one. We shipped it within 48 hours:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Owner invites team members via email&lt;/li&gt;
&lt;li&gt;Team members get full access to all projects&lt;/li&gt;
&lt;li&gt;Magic link authentication (no passwords)&lt;/li&gt;
&lt;li&gt;Max 5 members per Agency account&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Architecture decision: no per-project granularity in v1. Simpler model, ship fast, iterate based on real usage.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Dashboard Vault — Secrets Without AI Exposure&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A security feature I'm particularly proud of: the Vault tab lets users manage API keys (Stripe, Resend, etc.) through the browser UI. The key insight: &lt;strong&gt;if you share an API key in an AI chat, it ends up in transcripts, logs, and context windows.&lt;/strong&gt; The Vault bypasses AI entirely — write-once, never displayed, rotate or delete only.&lt;/p&gt;

&lt;p&gt;Backend uses AES-256-GCM encryption keyed per project, so even if someone gains database access, secrets from other projects are unreadable.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Language Refactor — From 4 Hardcoded Lists to Zero&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Our AI Coach (a conversational website builder) needed proper i18n. The old code had 4 separate hardcoded language→string mappings scattered across the codebase. We refactored to a single CapiLanguage value object with a Redis → DB → Haiku → fallback chain:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Check Redis cache&lt;/li&gt;
&lt;li&gt;Check papi_language_meta table (27 seeded languages)&lt;/li&gt;
&lt;li&gt;Ask Claude Haiku for language detection (costs ~$0.001)&lt;/li&gt;
&lt;li&gt;Fall back to English&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Result: any of the 250+ ISO 639-1 codes work automatically. Adding a new language = 1 database row.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;get_asset MCP Tool — Closing the Read Gap&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;We had tools to list, upload, patch, and delete assets — but no tool to read them. AI agents were doing blind find/replace via patch_asset without knowing the current file state. get_asset closes that gap: text content returned directly, binary assets as base64.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Activation Challenge&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;67 signups, one paying customer. The gap is real. Our research this week showed that the friction is in the "how do I start?" moment — users sign up, see a dashboard, but don't know which AI platform to connect or how to begin.&lt;/p&gt;

&lt;p&gt;Our answer: an embedded AI coach right inside the dashboard. Uses Sonnet (not Opus — cost control), generates one concept, writes directly to the user's first project. From "I just signed up" to "I have a website" in under 2 minutes.&lt;/p&gt;

&lt;p&gt;What's next&lt;/p&gt;

&lt;p&gt;Friday release agent (AAPI-powered automated changelog + test plans)&lt;br&gt;
patch_asset optimistic concurrency (base version hash to prevent conflicts)&lt;br&gt;
CAPI language refactor retest (waiting on external tester confirmation)&lt;/p&gt;

&lt;p&gt;If you're building with MCP or interested in AI-native development tools, I'd love to connect. The MCP ecosystem is moving fast.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;GitHub&lt;/strong&gt;: megberts/websitepublisher-mcp&lt;br&gt;
&lt;strong&gt;MCP Server&lt;/strong&gt;: mcp.websitepublisher.ai&lt;/p&gt;

</description>
      <category>mcp</category>
      <category>ai</category>
      <category>webdev</category>
      <category>buildinpublic</category>
    </item>
    <item>
      <title>How we built an MCP server that lets AI assistants publish complete websites</title>
      <dc:creator>Michael Egberts</dc:creator>
      <pubDate>Wed, 25 Mar 2026 07:53:24 +0000</pubDate>
      <link>https://forem.com/megberts/how-we-built-an-mcp-server-that-lets-ai-assistants-publish-complete-websites-3mjh</link>
      <guid>https://forem.com/megberts/how-we-built-an-mcp-server-that-lets-ai-assistants-publish-complete-websites-3mjh</guid>
      <description>&lt;p&gt;Building a website with an AI assistant usually ends the same way: you get a wall of HTML in a code block, you paste it somewhere, and then you're on your own for hosting, deployment, and every update after that.&lt;br&gt;
We wanted to fix that. So we built WebsitePublisher.ai — a platform where AI assistants don't just describe websites, they actually build and publish them.&lt;br&gt;
Here's how it works under the hood.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The core idea: AI as a first-class developer&lt;/strong&gt;&lt;br&gt;
The premise is simple. Instead of AI being a code generator that hands off to a human, we wanted AI to be the developer — with access to a real API it can call directly.&lt;br&gt;
That API needed to cover the full stack of what a website actually needs:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Pages and assets (HTML, CSS, images)&lt;/li&gt;
&lt;li&gt;Structured data (entities, records)&lt;/li&gt;
&lt;li&gt;Forms and visitor sessions&lt;/li&gt;
&lt;li&gt;Integrations (email, SMS, payments)&lt;/li&gt;
&lt;li&gt;Scheduled tasks&lt;/li&gt;
&lt;li&gt;Vault (credentials management)
So we built it. Eight API layers, all exposed through a Model Context Protocol (MCP) server.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;What MCP gives us&lt;/strong&gt;&lt;br&gt;
MCP is an open protocol that lets AI assistants call tools — similar to function calling, but standardized across clients. Claude, ChatGPT, Cursor, Windsurf, GitHub Copilot, and others all support it.&lt;br&gt;
Our MCP server exposes ~55 tools. An AI can call &lt;em&gt;create_page&lt;/em&gt; with HTML content and it's live. It can call &lt;em&gt;configure_form&lt;/em&gt; and a contact form appears. It can call &lt;em&gt;create_scheduled_task&lt;/em&gt; and a nightly content refresh starts running.&lt;br&gt;
The AI doesn't need to know about hosting, DNS, or deployment. It just calls the tools.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The API layers&lt;/strong&gt;&lt;br&gt;
We ended up with eight layers, each with a clear responsibility:&lt;br&gt;
&lt;em&gt;PAPI (Pages &amp;amp; Assets)&lt;/em&gt; — Create, update, and version HTML pages and static assets. Includes diff-patch for surgical updates, URL fetching, and a content quality warning system.&lt;br&gt;
&lt;em&gt;MAPI (Entities &amp;amp; Data)&lt;/em&gt; — A schema-less data layer. The AI defines entities (think: database tables) and creates records. Powers everything from contact lists to leaderboards to inventory.&lt;br&gt;
&lt;em&gt;SAPI (Sessions &amp;amp; Forms)&lt;/em&gt; — Anonymous visitor sessions, form submissions, visitor authentication, and analytics. No cookies to configure — it just works.&lt;br&gt;
&lt;em&gt;VAPI (Vault)&lt;/em&gt; — Encrypted credential storage. The AI stores API keys that are then used by integrations — never exposed back to the client.&lt;br&gt;
&lt;em&gt;IAPI (Integrations)&lt;/em&gt; — A proxy engine that routes calls through stored credentials to external services. Resend, Mailgun, Stripe, Mollie, Twilio — the AI picks the integration, the vault provides the credentials.&lt;br&gt;
&lt;em&gt;AAPI (Agent API)&lt;/em&gt; — Scheduled tasks. The AI creates cron jobs that run PHP handlers on a schedule. Daily content refresh, nightly cleanup, automated data sync.&lt;br&gt;
&lt;em&gt;CAPI (Coach API)&lt;/em&gt; — A conversational intake system. Ask four questions, generate a complete website. The AI handles the conversation; the platform handles the generation.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A real example&lt;/strong&gt;&lt;br&gt;
Here's what a Claude session looks like when building a site from scratch:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;User: Build me a landing page for my consulting business. Focus on lead generation.

Claude: [calls get_skill to load WebsitePublisher context]
[calls create_page with full HTML/CSS]
[calls configure_form with name, email, message fields]
[calls setup_integration with Resend credentials]
[calls execute_integration to test email delivery]

Done — your page is live at yourproject.websitepublisher.ai.
The contact form sends leads to your inbox via Resend.
Want me to add a thank-you page or set up SMS notifications too?
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;No copy-paste. No deployment step. The AI did it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The interesting engineering problems&lt;/strong&gt;&lt;br&gt;
A few things that weren't obvious until we built them:&lt;br&gt;
&lt;em&gt;Multi-session coordination&lt;/em&gt;. When multiple AI sessions work on the same project in parallel, they can overwrite each other's progress. We built TAPI — an append-only task tracking system — specifically to solve this. Each session logs progress via INSERTs only. MAX(completion_pct) from history records prevents any session from accidentally rolling back another's progress.&lt;br&gt;
&lt;em&gt;Tool count limits&lt;/em&gt;. Our MCP server returns 55 tools in tools/list. Some clients have limits on how many they load. Our workaround: the get_skill tool loads a SKILL.md document that gives the AI a map of the full API — so even with five tools loaded, it can use the REST API directly for everything else.&lt;br&gt;
&lt;em&gt;Content quality detection&lt;/em&gt;. AIs occasionally send a file path instead of HTML content to create_page. We added a WarningCollector that catches this pattern and returns a structured warning before anything gets saved.&lt;br&gt;
&lt;em&gt;Authentication across API layers&lt;/em&gt;. Each layer needed a different auth model. Project tokens (wpa_) for AI access. Dashboard sessions (wps_) for humans. Admin tokens (wsa_) for visitor-facing login flows. Getting these to coexist cleanly took a few iterations.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What's next&lt;/strong&gt;&lt;br&gt;
We're currently in the Mistral sprint — working on SSE streaming for the conversational intake (so responses feel instant instead of batched), parallel concept generation, and getting listed in Mistral's connector directory.&lt;br&gt;
If you're building with MCP, or thinking about what "AI-native" infrastructure actually means in practice — we'd love to hear what you think.&lt;/p&gt;

&lt;p&gt;The MCP server is at mcp.websitepublisher.ai&lt;br&gt;
Full docs at websitepublisher.ai/docs&lt;/p&gt;

</description>
      <category>mcp</category>
      <category>ai</category>
      <category>webdev</category>
      <category>cloud</category>
    </item>
  </channel>
</rss>
