<?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: Codanyks</title>
    <description>The latest articles on Forem by Codanyks (@codanyks).</description>
    <link>https://forem.com/codanyks</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%2F2895249%2Fd8f9320b-8305-48ec-962e-0000be867939.png</url>
      <title>Forem: Codanyks</title>
      <link>https://forem.com/codanyks</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/codanyks"/>
    <language>en</language>
    <item>
      <title>Triggering Agents with Binance Price Events</title>
      <dc:creator>Codanyks</dc:creator>
      <pubDate>Sat, 28 Jun 2025 15:15:00 +0000</pubDate>
      <link>https://forem.com/codanyks/triggering-agents-with-binance-price-events-5a1c</link>
      <guid>https://forem.com/codanyks/triggering-agents-with-binance-price-events-5a1c</guid>
      <description>&lt;h3&gt;
  
  
  Turning real-time price signals into agent-driven automation with the MCP server.
&lt;/h3&gt;

&lt;p&gt;If you followed the MCP server series, you already know how to build a system that lets agents process goals with rich context. But what if that context came from the outside world — live, volatile, and full of opportunity?&lt;/p&gt;

&lt;p&gt;Welcome to your first &lt;em&gt;real-world input&lt;/em&gt;: &lt;a href="https://www.binance.com/activity/referral-entry/CPA?ref=CPA_00N98FDBL5" rel="noopener noreferrer"&gt;Binance&lt;/a&gt; price data.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why This Matters
&lt;/h2&gt;

&lt;p&gt;This isn’t a trading bot. This is about using &lt;strong&gt;market signals as system triggers&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Imagine this: Bitcoin crosses $100K — and your agent kicks in, not to trade, but to &lt;em&gt;do something&lt;/em&gt;. It could:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Alert your Telegram group&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Archive a snapshot to Notion&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Log the event to a custom journal&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Kick off a long-running model run&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Launch your NFT burn script (who knows?)&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In this tutorial, we’ll plug &lt;strong&gt;Binance’s WebSocket API&lt;/strong&gt; into your &lt;strong&gt;MCP server&lt;/strong&gt;, triggering agents based on real-time market thresholds.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;🔗 Need a refresher on WebSockets in Node.js? Check out our &lt;a href="https://codanyks.hashnode.dev/series/real-time-nodejs-websockets" rel="noopener noreferrer"&gt;Real-Time Node.js WebSockets series&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  The Stack
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Binance WebSocket (public market data)&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Node.js/TypeScript listener&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;MCP Server&lt;/strong&gt; (from &lt;a href="https://codanyks.hashnode.dev/series/mcp-server-series-architecture-guide" rel="noopener noreferrer"&gt;series&lt;/a&gt;)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Local Agent Functions&lt;/strong&gt; with autonomous goals&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  1. Listening to Binance Price Events
&lt;/h2&gt;

&lt;p&gt;Let’s build a simple WebSocket listener to subscribe to BTCUSDT ticker updates.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;startWatcher&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;socket&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;WebSocket&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;wss://stream.binance.com:9443/ws/btcusdt@ticker&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
    &lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="nx"&gt;socket&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;addEventListener&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;message&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;any&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;json&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;JSON&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;parse&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;toString&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;
        &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;price&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;parseFloat&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;json&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;c&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

        &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;price&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;100000&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`[Watcher] BTC crossed threshold: $&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;price&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
            &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;triggerAgent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;price&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;});&lt;/span&gt;

    &lt;span class="nx"&gt;socket&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;addEventListener&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;open&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;[Watcher] Connected to Binance WebSocket&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;});&lt;/span&gt;

    &lt;span class="nx"&gt;socket&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;addEventListener&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;error&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;[Watcher] Error connecting to Binance WebSocket&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This code connects to &lt;a href="https://www.binance.com/activity/referral-entry/CPA?ref=CPA_00N98FDBL5" rel="noopener noreferrer"&gt;Binance&lt;/a&gt; and listens for real-time trades. Once BTC crosses your set threshold, it fires the &lt;code&gt;triggerAgent&lt;/code&gt; function.&lt;/p&gt;




&lt;h2&gt;
  
  
  2. Triggering the MCP Server
&lt;/h2&gt;

&lt;p&gt;You already have an MCP route like &lt;code&gt;/goal&lt;/code&gt; to receive instructions. Here’s a simple POST call.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;axios&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;axios&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;triggerAgent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;price&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;axios&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;post&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;http://localhost:3000/goal&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;from&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;binance-watcher&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;goal&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;`btc_crossed_threshold`&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;context&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nx"&gt;price&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;token&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;BTCUSDT&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;condition&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;&amp;gt; 100000&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This sends the signal to your MCP server, which can now dispatch it to a relevant agent.&lt;/p&gt;




&lt;h2&gt;
  
  
  3. Sample Agent Logic
&lt;/h2&gt;

&lt;p&gt;Let’s say your MCP calls this agent:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;btcAgent&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;context&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;price&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;condition&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;context&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;log&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;`BTC &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;condition&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; at $&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;price&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="c1"&gt;// Extend this: send to Telegram, Discord, Email, log to Notion, etc.&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The action here is simple, but the framework allows infinite expansion.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Complete Flow
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Binance WebSocket → MCP Server → Agent Goal → Action
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdwc4exn6jx8ox6lyevau.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdwc4exn6jx8ox6lyevau.png" alt="Binance WebSocket → MCP Server → Agent Goal → Action" width="800" height="489"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This flow mimics real-world systems that adapt to change, not just react manually. You can chain this into larger systems: trigger a build, launch a job, even orchestrate multiple agents.&lt;/p&gt;




&lt;h2&gt;
  
  
  Expand This Further
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Trigger on &lt;strong&gt;multiple tokens&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Use &lt;strong&gt;volatility-based thresholds&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Send context to &lt;strong&gt;multiple agents&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Add &lt;strong&gt;debouncing logic&lt;/strong&gt; to avoid spam&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Trigger external &lt;strong&gt;webhook&lt;/strong&gt; actions&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Source Code
&lt;/h2&gt;

&lt;p&gt;Want to explore the full project? Grab the code on GitHub:&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://github.com/codanyks/mcp-binance" rel="noopener noreferrer"&gt;codanyks/mcp-binance&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;This isn’t about being a trader. It’s about being a &lt;strong&gt;builder who listens to the world&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.binance.com/activity/referral-entry/CPA?ref=CPA_00N98FDBL5" rel="noopener noreferrer"&gt;Binance&lt;/a&gt; becomes your sensor. The MCP server becomes your router. Agents become your fingers on the keyboard.&lt;/p&gt;

&lt;p&gt;Automation doesn’t have to be loud. Sometimes, the best systems whisper back only when it truly matters.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Some links may be affiliate links. We only recommend tools we use or believe in.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>node</category>
      <category>programming</category>
      <category>mcp</category>
    </item>
    <item>
      <title>MCP Server Wrap-Up — Patterns, Libraries &amp; Scaling Context</title>
      <dc:creator>Codanyks</dc:creator>
      <pubDate>Fri, 27 Jun 2025 22:30:00 +0000</pubDate>
      <link>https://forem.com/codanyks/mcp-server-wrap-up-patterns-libraries-scaling-context-1f02</link>
      <guid>https://forem.com/codanyks/mcp-server-wrap-up-patterns-libraries-scaling-context-1f02</guid>
      <description>&lt;h3&gt;
  
  
  &lt;em&gt;A final look at how to scale agent memory, build coordination patterns, and extend MCP into real-world systems.&lt;/em&gt;
&lt;/h3&gt;

&lt;h2&gt;
  
  
  Let’s Recap the Journey
&lt;/h2&gt;

&lt;p&gt;We started with a problem every agent-based developer faces:&lt;br&gt;
&lt;strong&gt;Memory is duct-taped. Context is fragile. Coordination is chaotic.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Then, over 4 days, we built and evolved a system to change that.&lt;/p&gt;


&lt;h3&gt;
  
  
  &lt;strong&gt;Day 1&lt;/strong&gt; — &lt;em&gt;What is MCP Server?&lt;/em&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Identified the “&lt;em&gt;context crisis&lt;/em&gt;” in LLM systems&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Introduced the &lt;strong&gt;Model Context Protocol&lt;/strong&gt; as a solution&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Showed how a centralized MCP server can manage memory, goals, identity, and tool routing&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  &lt;strong&gt;Day 2&lt;/strong&gt; — &lt;em&gt;Built an MCP Server&lt;/em&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Implemented a TypeScript server that delivers structured context&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Introduced a clean request/response protocol&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Designed for frontend → MCP → agent architecture&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  &lt;strong&gt;Day 3&lt;/strong&gt; — &lt;em&gt;Agents Fetch Their Own Context&lt;/em&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Agents became &lt;strong&gt;autonomous context consumers&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Enabled polling loops, cron tasks, and background agents&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Created the foundation for modular, runtime-resilient agent design&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  &lt;strong&gt;Day 4&lt;/strong&gt; — &lt;em&gt;Agents Talk to Each Other via MCP&lt;/em&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Introduced indirect &lt;strong&gt;agent-to-agent communication&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Agents read/write shared memory without direct messaging&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Built coordination patterns like chain-of-thought, delegation, and swarm behavior&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;h2&gt;
  
  
  Putting the Architecture Together
&lt;/h2&gt;

&lt;p&gt;At the end of this series, here’s the big-picture model:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="o"&gt;+-------------+&lt;/span&gt;       &lt;span class="o"&gt;+-------------+&lt;/span&gt;       &lt;span class="o"&gt;+-------------+&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt;  &lt;span class="nx"&gt;Frontend&lt;/span&gt;   &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;---&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;   &lt;span class="nx"&gt;MCP&lt;/span&gt; &lt;span class="nx"&gt;API&lt;/span&gt;   &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;---&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;   &lt;span class="nx"&gt;Agents&lt;/span&gt;    &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;+-------------+&lt;/span&gt;       &lt;span class="o"&gt;+-------------+&lt;/span&gt;       &lt;span class="o"&gt;+-------------+&lt;/span&gt;
                           &lt;span class="o"&gt;|&lt;/span&gt;
                           &lt;span class="nx"&gt;v&lt;/span&gt;
                &lt;span class="o"&gt;+-----------------------+&lt;/span&gt;
                &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="nx"&gt;Memory&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;Goal&lt;/span&gt; &lt;span class="nx"&gt;Stores&lt;/span&gt;  &lt;span class="o"&gt;|&lt;/span&gt;
                &lt;span class="o"&gt;+-----------------------+&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;MCP&lt;/strong&gt; is the context router, memory librarian, identity resolver, and goalkeeper.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Agents&lt;/strong&gt; are stateless functions that think clearly because they ask for the right input.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Frontend/UI&lt;/strong&gt; is optional — orchestration logic can live anywhere.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Patterns We Observed
&lt;/h2&gt;

&lt;p&gt;Here’s what emerged naturally as you followed the protocol mindset:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Pattern&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Stateless Agents&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Agents don’t carry memory — they ask for it&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Context Bundles&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Agents receive rich, structured state: who, what, why, and how&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Autonomous Loops&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Agents can wake up, pull context, act, and repeat&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Agent Delegation&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Agents leave instructions for others inside the shared memory&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Chain of Roles&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Planner → Researcher → Writer → QA → Deployer, all mediated by MCP&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Runtime Modularity&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Swap out agents, tools, or memory engines with no architecture rewrite&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  Libraries &amp;amp; Tools That Pair Well
&lt;/h2&gt;

&lt;p&gt;Want to extend your MCP ecosystem? Here are some options:&lt;/p&gt;

&lt;h3&gt;
  
  
  Memory &amp;amp; State
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://redis.io/" rel="noopener noreferrer"&gt;&lt;strong&gt;Redis&lt;/strong&gt;&lt;/a&gt; — for fast task state or ephemeral context&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.postgresql.org/" rel="noopener noreferrer"&gt;&lt;strong&gt;PostgreSQL&lt;/strong&gt;&lt;/a&gt; — for structured goal + agent metadata&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://fly.io/" rel="noopener noreferrer"&gt;&lt;strong&gt;LiteFS&lt;/strong&gt;&lt;/a&gt; — for distributed SQLite across edge agents&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  LLM Agents
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;OpenAI&lt;/strong&gt;, &lt;strong&gt;Claude&lt;/strong&gt;, &lt;strong&gt;Gemini&lt;/strong&gt; — use your model of choice&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;CrewAI&lt;/strong&gt;, &lt;strong&gt;AutoGen&lt;/strong&gt;, &lt;strong&gt;LangGraph&lt;/strong&gt; — use MCP to feed context into these frameworks&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  API &amp;amp; Infra
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.npmjs.com/package/http-error-kit" rel="noopener noreferrer"&gt;&lt;code&gt;http-error-kit&lt;/code&gt;&lt;/a&gt; + &lt;a href="https://www.npmjs.com/package/@wthek/express-middleware" rel="noopener noreferrer"&gt;&lt;code&gt;@wthek/express-middleware&lt;/code&gt;&lt;/a&gt; — clean error handling for your TypeScript MCP server&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.npmjs.com/package/zod" rel="noopener noreferrer"&gt;&lt;code&gt;zod&lt;/code&gt;&lt;/a&gt; + &lt;a href="https://www.npmjs.com/package/@wthek/zod-express-interceptor" rel="noopener noreferrer"&gt;&lt;code&gt;@wthek/zod-express-interceptor&lt;/code&gt;&lt;/a&gt; — schema-level request validation&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.postman.com/" rel="noopener noreferrer"&gt;&lt;code&gt;Postman&lt;/code&gt;&lt;/a&gt; — for quick testing MCP routes&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Going Beyond the Series
&lt;/h2&gt;

&lt;p&gt;Now that you’ve built your MCP system:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Add &lt;strong&gt;tool routers&lt;/strong&gt;: Let MCP tell agents what tools they can use&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Layer in &lt;strong&gt;feedback loops&lt;/strong&gt;: Save model outputs into memory for the next round&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Enable &lt;strong&gt;multi-tenant memory&lt;/strong&gt;: Separate goal trees by user, product, or agent persona&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Visualize workflows: Turn your context requests into event graphs&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Final Guidance: Design Like a Protocol, Not a Pipeline
&lt;/h2&gt;

&lt;p&gt;Here’s the key takeaway:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Don’t hardcode behavior.&lt;/em&gt;&lt;br&gt;
&lt;em&gt;Don’t duct-tape prompts.&lt;/em&gt;&lt;br&gt;
&lt;em&gt;Don’t make your agent “smart” by making the prompt longer.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Instead:&lt;/p&gt;

&lt;p&gt;✅ Design &lt;strong&gt;interfaces&lt;/strong&gt;&lt;br&gt;
✅ Serve structured &lt;strong&gt;context&lt;/strong&gt;&lt;br&gt;
✅ Let agents be actors — and &lt;strong&gt;MCP be the stage manager&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That’s how you scale weirdness, not chaos.&lt;br&gt;
That’s how you build systems that grow without growing fragile.&lt;/p&gt;




&lt;h2&gt;
  
  
  Thanks for Reading
&lt;/h2&gt;

&lt;p&gt;If you’ve followed the whole series, you now have the mindset and tools to build your own agent architecture from scratch — or retrofit MCP into an existing one.&lt;/p&gt;

&lt;p&gt;We’ll keep building. You should too.&lt;br&gt;
Keep it weird. Keep it modular. Keep it scalable.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Protocols first. Prompts second.&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>mcp</category>
      <category>programming</category>
      <category>node</category>
    </item>
    <item>
      <title>Agent-to-Agent Communication via MCP</title>
      <dc:creator>Codanyks</dc:creator>
      <pubDate>Thu, 26 Jun 2025 15:00:00 +0000</pubDate>
      <link>https://forem.com/codanyks/agent-to-agent-communication-via-mcp-1imj</link>
      <guid>https://forem.com/codanyks/agent-to-agent-communication-via-mcp-1imj</guid>
      <description>&lt;h3&gt;
  
  
  Let your agents coordinate, delegate, and collaborate — all via shared context and clean protocols.
&lt;/h3&gt;

&lt;h2&gt;
  
  
  Recap So Far
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://codanyks.hashnode.dev/mcp-server-introduction-context-routing" rel="noopener noreferrer"&gt;&lt;strong&gt;Day 1:&lt;/strong&gt; Introduced the Model Context Protocol (MCP) and the context crisis it solves&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://codanyks.hashnode.dev/build-mcp-server" rel="noopener noreferrer"&gt;&lt;strong&gt;Day 2:&lt;/strong&gt; Built a working MCP server to serve context to agents via frontend orchestration&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://codanyks.hashnode.dev/connect-agents-to-mcp" rel="noopener noreferrer"&gt;&lt;strong&gt;Day 3:&lt;/strong&gt; Enabled agents to pull their own context autonomously from MCP&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Now that our agents are &lt;strong&gt;self-aware&lt;/strong&gt; and &lt;strong&gt;autonomous&lt;/strong&gt;, we’re unlocking the next phase:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Letting agents communicate &lt;strong&gt;with each other&lt;/strong&gt;, using MCP as the shared protocol.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This expands the system horizontally — instead of a single agent acting on context, we now have a &lt;strong&gt;mesh of agents&lt;/strong&gt; coordinating through shared state and memory.&lt;/p&gt;




&lt;h2&gt;
  
  
  From Autonomy to Coordination
&lt;/h2&gt;

&lt;p&gt;Imagine a world where agents don’t just operate independently — they can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Hand off tasks&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Collaborate asynchronously&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Trigger sub-agents&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Chain operations using shared memory&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This turns your MCP-powered ecosystem into an &lt;strong&gt;orchestrated swarm&lt;/strong&gt; — not centrally controlled, but &lt;strong&gt;cooperatively intelligent&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  How Agent-to-Agent Communication Works
&lt;/h2&gt;

&lt;p&gt;Instead of agents directly messaging each other, they communicate &lt;strong&gt;indirectly&lt;/strong&gt; through &lt;strong&gt;shared context&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Agent A → MCP: Save updated memory and next steps
Agent B → MCP: Pull memory + instructions
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;MCP becomes the &lt;strong&gt;coordination layer&lt;/strong&gt; — not just a memory server, but a protocol hub for agent workflows.&lt;/p&gt;

&lt;h3&gt;
  
  
  Use Case:
&lt;/h3&gt;

&lt;p&gt;Let’s say &lt;code&gt;PlannerAgent&lt;/code&gt; creates a set of subtasks. It writes them into a task memory object via MCP.&lt;/p&gt;

&lt;p&gt;Later, &lt;code&gt;BuilderAgent&lt;/code&gt; fetches its context, reads those subtasks, and starts execution.&lt;/p&gt;

&lt;p&gt;No direct message was sent. But the baton was passed.&lt;/p&gt;




&lt;h2&gt;
  
  
  Patterns That Emerge
&lt;/h2&gt;

&lt;p&gt;Once agents communicate via MCP, you unlock powerful design patterns:&lt;/p&gt;

&lt;h3&gt;
  
  
  Chain of Thought (Distributed)
&lt;/h3&gt;

&lt;p&gt;Each agent takes a step in a longer reasoning chain. Think:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;Planner&lt;/code&gt; → defines tasks&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;Researcher&lt;/code&gt; → gathers context&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;Writer&lt;/code&gt; → drafts copy&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;Reviewer&lt;/code&gt; → gives feedback&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All agents pull and mutate shared memory objects via MCP.&lt;/p&gt;

&lt;h3&gt;
  
  
  Loop + Delegate
&lt;/h3&gt;

&lt;p&gt;Agents can offload part of their job by spawning task bundles for others to consume.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;mcp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;saveMemory&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;task_id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;beta_launch&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;next_steps&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Check signup flow&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Optimize landing page&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
  &lt;span class="na"&gt;assigned_to&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;LaunchAgent&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Later:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;context&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;mcp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;fetchContext&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;LaunchAgent&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This keeps agents &lt;strong&gt;loosely coupled&lt;/strong&gt; but highly coordinated.&lt;/p&gt;




&lt;h2&gt;
  
  
  Minimal Implementation
&lt;/h2&gt;

&lt;p&gt;No new endpoints required. You already built the protocol in Day 2. It’s just &lt;strong&gt;how you use it&lt;/strong&gt; that changes.&lt;/p&gt;

&lt;p&gt;Let’s look at a chaining example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// PlannerAgent writes goals&lt;/span&gt;
&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;saveContext&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;agent_id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;planner&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;task_id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;launch_101&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;memory&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;subtasks&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;write email&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;build waitlist&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;QA form&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="na"&gt;next_steps&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Assign to BuilderAgent&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="c1"&gt;// BuilderAgent later reads the same task&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;context&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;fetchContext&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;agent_id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;builder&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;task_id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;launch_101&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The agents never talk — but the baton is passed via shared context.&lt;/p&gt;




&lt;h2&gt;
  
  
  What This Enables
&lt;/h2&gt;

&lt;p&gt;With MCP as the protocol layer, you now have the foundation for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Chained agents&lt;/strong&gt; (multi-step workflows)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Agent swarms&lt;/strong&gt; (distributed tasks)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Agent-led scheduling&lt;/strong&gt; (polling + delegation)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Cross-agent memory&lt;/strong&gt; (common task state)&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And all of this happens &lt;strong&gt;without hardcoded logic&lt;/strong&gt;. No if-else glue. No manual wiring.&lt;/p&gt;

&lt;p&gt;Just clean roles and shared context.&lt;/p&gt;




&lt;h2&gt;
  
  
  Architecture Overview
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;+-------------+        +-------------+        +-------------+
| Agent A     | -----&amp;gt; |     MCP     | &amp;lt;----- |   Agent B   |
+-------------+        +-------------+        +-------------+
                            |
                            v
                 +----------------------+
                 | Memory + Goal Store |
                 +----------------------+
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Every arrow here is a &lt;strong&gt;protocol call&lt;/strong&gt;, not a socket or stream. This makes debugging easier, scaling more flexible, and agents fully modular.&lt;/p&gt;




&lt;h2&gt;
  
  
  Best Practices
&lt;/h2&gt;

&lt;p&gt;To keep things smooth:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Use unique &lt;code&gt;task_id&lt;/code&gt;s per shared effort&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Define clear &lt;code&gt;persona&lt;/code&gt; and &lt;code&gt;role&lt;/code&gt; in each context bundle&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Avoid over-mutating memory in one agent’s cycle&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Think of memory as a shared doc — not a private log&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Summary
&lt;/h2&gt;

&lt;p&gt;We now have agents that:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Can fetch their own context (Day 3)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Can hand off tasks to other agents (via MCP)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Are decoupled, but interoperable&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This lays the groundwork for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Complex pipelines&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Swarm behaviors&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Recursive task agents&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;MCP becomes the &lt;strong&gt;coordination language&lt;/strong&gt; — and agents become the workers who speak it fluently.&lt;/p&gt;




&lt;h2&gt;
  
  
  Coming Up: Series Wrap-Up
&lt;/h2&gt;

&lt;p&gt;In &lt;strong&gt;Day 5&lt;/strong&gt;, we’ll wrap up this entire journey:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Recap MCP’s purpose and implementation&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Reflect on architecture patterns&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Share suggested libraries + strategies&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Provide next steps for scaling&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Let’s put the full stack together.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Protocols first. Prompts second.&lt;/strong&gt;&lt;br&gt;
Stay tuned for Day 4.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>mcp</category>
      <category>programming</category>
      <category>node</category>
    </item>
    <item>
      <title>Connect Your Agents to the MCP Server</title>
      <dc:creator>Codanyks</dc:creator>
      <pubDate>Wed, 25 Jun 2025 13:10:00 +0000</pubDate>
      <link>https://forem.com/codanyks/connect-your-agents-to-the-mcp-server-28m</link>
      <guid>https://forem.com/codanyks/connect-your-agents-to-the-mcp-server-28m</guid>
      <description>&lt;h3&gt;
  
  
  Let agents query, think, and act with real-time context. No frontend required.
&lt;/h3&gt;

&lt;h2&gt;
  
  
  Recap So Far
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Day 1:&lt;/strong&gt; &lt;a href="https://codanyks.hashnode.dev/mcp-server-introduction-context-routing" rel="noopener noreferrer"&gt;Introduced the Model Context Protocol (MCP) and why it matters&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Day 2:&lt;/strong&gt; &lt;a href="https://codanyks.hashnode.dev/build-mcp-server" rel="noopener noreferrer"&gt;Built the MCP Server that handles context for inference orchestration&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Until now, the &lt;strong&gt;frontend drove everything&lt;/strong&gt; — it requested context from MCP and passed it to the agents.&lt;/p&gt;

&lt;p&gt;But what if your agents could manage themselves? What if they could fetch memory, update state, adapt roles, and operate without orchestration glue?&lt;/p&gt;

&lt;p&gt;That’s what today is about.&lt;/p&gt;




&lt;h2&gt;
  
  
  From Orchestrated to Autonomous
&lt;/h2&gt;

&lt;p&gt;In many LLM-based workflows, the frontend or coordinator acts as the brain. That works — but only to a point.&lt;/p&gt;

&lt;p&gt;As your systems grow more complex:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Agents need autonomy&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;They may trigger sub-agents&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;They should be able to operate independently of a user interface&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This means agents must &lt;strong&gt;talk to MCP directly&lt;/strong&gt;.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Today, we expand our architecture so agents can request context bundles themselves.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This design unlocks agent autonomy, where the model can reason over its own past, current task state, memory, and tools — all without frontend involvement.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why Agents Should Pull Their Own Context
&lt;/h2&gt;

&lt;p&gt;When agents rely on frontends for context, you introduce brittle dependencies:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Agents can’t be reused easily across environments&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Debugging context issues requires full-stack tracing&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Real-time reactions are delayed by orchestration lag&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;By allowing agents to pull their &lt;strong&gt;own state&lt;/strong&gt;, you:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Enable background or CRON-like execution&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Allow persistent context recall&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Build modular agent services that evolve with their purpose&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;Think of agents as microservices. Context is their configuration file.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Architecture: Agent-Initiated Context Flow
&lt;/h2&gt;

&lt;p&gt;New flow:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;Frontend&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;Orchestrated&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="nx"&gt;User&lt;/span&gt; &lt;span class="err"&gt;→&lt;/span&gt; &lt;span class="nx"&gt;Frontend&lt;/span&gt; &lt;span class="err"&gt;→&lt;/span&gt; &lt;span class="nx"&gt;MCP&lt;/span&gt; &lt;span class="err"&gt;→&lt;/span&gt; &lt;span class="nx"&gt;Agent&lt;/span&gt;

&lt;span class="nx"&gt;Agent&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;Orchestrated&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="nx"&gt;Agent&lt;/span&gt; &lt;span class="err"&gt;→&lt;/span&gt; &lt;span class="nx"&gt;MCP&lt;/span&gt; &lt;span class="err"&gt;→&lt;/span&gt; &lt;span class="nx"&gt;Inference&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;       &lt;span class="o"&gt;+-------------+&lt;/span&gt;
       &lt;span class="o"&gt;|&lt;/span&gt;  &lt;span class="nx"&gt;Agent&lt;/span&gt; &lt;span class="nx"&gt;GPT&lt;/span&gt;  &lt;span class="o"&gt;|&lt;/span&gt;
       &lt;span class="o"&gt;+-------------+&lt;/span&gt;
              &lt;span class="o"&gt;|&lt;/span&gt;
              &lt;span class="nx"&gt;v&lt;/span&gt;
       &lt;span class="o"&gt;+-------------+&lt;/span&gt;        &lt;span class="o"&gt;+------------------+&lt;/span&gt;
       &lt;span class="o"&gt;|&lt;/span&gt;  &lt;span class="nx"&gt;MCP&lt;/span&gt; &lt;span class="nx"&gt;Server&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="o"&gt;-----&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="nx"&gt;Memory&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;Goals&lt;/span&gt;   &lt;span class="o"&gt;|&lt;/span&gt;
       &lt;span class="o"&gt;+-------------+&lt;/span&gt;        &lt;span class="o"&gt;+------------------+&lt;/span&gt;
              &lt;span class="o"&gt;|&lt;/span&gt;
              &lt;span class="nx"&gt;v&lt;/span&gt;
       &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;Context&lt;/span&gt; &lt;span class="nx"&gt;Bundle&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Breakdown:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Agent GPT&lt;/strong&gt; makes a structured HTTP request to MCP&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;MCP&lt;/strong&gt; fetches all relevant details for the agent — persona, memory, system prompt, etc.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Agent&lt;/strong&gt; receives the context bundle, reasons, and acts&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This removes any dependency on the frontend. Agents are now runtime-aware actors — capable of pulling their state and recontextualizing themselves.&lt;/p&gt;

&lt;p&gt;This pattern forms the basis for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Agent polling loops&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Asynchronous task workers&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Scheduled jobs&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Chainable agents&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Use Case: Autonomous Task Loop
&lt;/h2&gt;

&lt;p&gt;Imagine you have a &lt;code&gt;ResearchAgent&lt;/code&gt; (let's call it &lt;code&gt;TrendWatcherGPT&lt;/code&gt;) that loops every hour.&lt;br&gt;&lt;br&gt;
It needs to:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Wake up&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Request context from MCP&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Use tools/memory to take next step&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Save progress (to MCP or external store)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Sleep again&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This is useful for agents like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Feed Watchers (&lt;em&gt;e.g., price monitoring&lt;/em&gt;)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Project Agents (&lt;em&gt;managing async updates&lt;/em&gt;)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Background Taskers (&lt;em&gt;handling queues or workflows&lt;/em&gt;)&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Autonomy is possible because agents &lt;strong&gt;aren’t blind anymore&lt;/strong&gt;. They know:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Who they are (&lt;code&gt;persona&lt;/code&gt;)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;What to do (&lt;code&gt;next_steps&lt;/code&gt;)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;What they’ve done before (&lt;code&gt;memory&lt;/code&gt;)&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;h2&gt;
  
  
  Project Setup
&lt;/h2&gt;

&lt;p&gt;We reuse most of the structure from Day 2:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;mcp&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;server&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;
&lt;span class="err"&gt;├──&lt;/span&gt; &lt;span class="nx"&gt;src&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;
&lt;span class="err"&gt;│&lt;/span&gt;   &lt;span class="err"&gt;├──&lt;/span&gt; &lt;span class="nx"&gt;index&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ts&lt;/span&gt;
&lt;span class="err"&gt;│&lt;/span&gt;   &lt;span class="err"&gt;├──&lt;/span&gt; &lt;span class="nx"&gt;routes&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;context&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ts&lt;/span&gt;
&lt;span class="err"&gt;│&lt;/span&gt;   &lt;span class="err"&gt;├──&lt;/span&gt; &lt;span class="nx"&gt;lib&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;memoryStore&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ts&lt;/span&gt;
&lt;span class="err"&gt;│&lt;/span&gt;   &lt;span class="err"&gt;└──&lt;/span&gt; &lt;span class="nx"&gt;types&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ts&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The only change is how &lt;strong&gt;agents use this system&lt;/strong&gt; — not how it’s served. That’s the beauty of protocol thinking: clients evolve independently.&lt;/p&gt;




&lt;h2&gt;
  
  
  Protocol Recap
&lt;/h2&gt;

&lt;p&gt;The agent sends this request:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;agent_id&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;research-007&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;task_id&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;mission-04&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;request_type&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;context_bundle&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It expects:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;persona&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;ResearchGPT&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;system_prompt&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;You are a research agent...&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;memory&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;sources&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;report1.pdf&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;report2.pdf&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;last_update&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;2025-06-20&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;tools&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;web_search&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;summarizer&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;next_steps&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Analyze trends&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Draft summary&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This output helps agents rehydrate their own identity + past state. No need for manual context assembly.&lt;/p&gt;




&lt;h2&gt;
  
  
  Endpoint Overview (&lt;code&gt;routes/context.ts&lt;/code&gt;)
&lt;/h2&gt;

&lt;p&gt;No changes needed here — our endpoint already accepts structured agent requests. It was designed with both frontend and agent clients in mind.&lt;/p&gt;

&lt;p&gt;But now, we simulate &lt;strong&gt;the agent&lt;/strong&gt; calling it as a standalone process.&lt;/p&gt;




&lt;h2&gt;
  
  
  Agent Code Sample (Autonomous Caller)
&lt;/h2&gt;

&lt;p&gt;Let’s say you have a TypeScript/Node-based agent:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;fetchContext&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;http://localhost:3000/context&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;method&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;POST&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Content-Type&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;application/json&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="na"&gt;body&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;JSON&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;stringify&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
      &lt;span class="na"&gt;agent_id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;research-007&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;task_id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;mission-04&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;request_type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;context_bundle&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
    &lt;span class="p"&gt;})&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;

  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ok&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;throw&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Failed to fetch context&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;actOnContext&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;context&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;fetchContext&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;prompt&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;context&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;system_prompt&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;\n\nMemory:\n&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;JSON&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;stringify&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;context&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;memory&lt;/span&gt;&lt;span class="p"&gt;)}&lt;/span&gt;&lt;span class="s2"&gt;\n\nNext Steps:\n&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;context&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;next_steps&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="c1"&gt;// Call OpenAI/Claude here with the prompt&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The prompt here is reconstructed using:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;system_prompt&lt;/code&gt; → core personality&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;memory&lt;/code&gt; → previous task-related details&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;next_steps&lt;/code&gt; → chainable future intentions&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You can optionally extend this with tool use, decision logs, and state saves.&lt;/p&gt;




&lt;h2&gt;
  
  
  Bootstrapping Agents at Runtime
&lt;/h2&gt;

&lt;p&gt;This simple loop starts a recurring agent:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nf"&gt;setInterval&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nf"&gt;actOnContext&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="mi"&gt;60&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;60&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;1000&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Every hour&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Or trigger agents on-demand via HTTP:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;post&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;/run-agent&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;actOnContext&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
  &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;send&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Agent run complete&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In production systems, this could be part of:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;CRON jobs&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Workflow engines&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Agent spawner services&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Event-driven systems&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This structure makes your agent pluggable and composable.&lt;/p&gt;




&lt;h2&gt;
  
  
  How Is This Different from Frontend Mode?
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feature&lt;/th&gt;
&lt;th&gt;Frontend-Orchestrated&lt;/th&gt;
&lt;th&gt;Agent-Orchestrated&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Driven by UI/app&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Autonomous execution&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Uses memory/goals&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Pulls own context&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Best for...&lt;/td&gt;
&lt;td&gt;Tools, dashboards&lt;/td&gt;
&lt;td&gt;Agents, daemons&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The real win? Your agents no longer rely on external context assembly. They become persistent processes that evolve over time.&lt;/p&gt;




&lt;h2&gt;
  
  
  What We Achieved
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Gave agents the ability to request context bundles directly&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Simulated an autonomous loop that fetches memory + instructions&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Paved the way for more reactive, modular agent design&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Agents now act like autonomous services — not passive responders.&lt;/p&gt;

&lt;p&gt;In short, we’ve made our agents aware of:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Themselves&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Their past&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Their role&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Their tasks&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That’s the root of scalable, composable AI systems.&lt;/p&gt;




&lt;h3&gt;
  
  
  Up Next: Agent-to-Agent Communication
&lt;/h3&gt;

&lt;p&gt;In &lt;strong&gt;Day 4&lt;/strong&gt;, we’ll go one layer deeper: agents talking to each other using shared context via MCP.&lt;/p&gt;

&lt;p&gt;We’ll explore:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;How agents can hand off tasks&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;How MCP acts as an inter-agent protocol layer&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;What patterns work best for chaining behavior and distributed autonomy&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;strong&gt;Protocols first. Prompts second.&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Stay tuned for Day 4.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>mcp</category>
      <category>programming</category>
      <category>node</category>
    </item>
    <item>
      <title>Build a Real MCP Server in TypeScript</title>
      <dc:creator>Codanyks</dc:creator>
      <pubDate>Tue, 24 Jun 2025 14:30:00 +0000</pubDate>
      <link>https://forem.com/codanyks/build-a-real-mcp-server-in-typescript-32l</link>
      <guid>https://forem.com/codanyks/build-a-real-mcp-server-in-typescript-32l</guid>
      <description>&lt;h3&gt;
  
  
  Bring the Model Context Protocol to life with a clean, scalable TypeScript implementation using Express, Zod, and http-error-kit.
&lt;/h3&gt;

&lt;h2&gt;
  
  
  Recap from Day 1
&lt;/h2&gt;

&lt;p&gt;In our previous article, we explored &lt;strong&gt;why MCP matters&lt;/strong&gt;: it's a protocol layer that acts as the context brain for multi-agent systems. Instead of cramming memory and goals into prompts, we delegate context management to an &lt;strong&gt;MCP Server&lt;/strong&gt; that can provide structured responses to any agent.&lt;/p&gt;

&lt;p&gt;Today, we build that brain.&lt;/p&gt;

&lt;p&gt;This article is not a checklist — it's a detailed walkthrough. You'll not only see code, but understand &lt;strong&gt;why&lt;/strong&gt; each part exists and &lt;strong&gt;how&lt;/strong&gt; it helps agents operate more intelligently.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;💡 This sets the stage for future articles, where agents will begin to fetch, mutate, and even share context without frontend dependency.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  What We’re Building
&lt;/h2&gt;

&lt;p&gt;In this article, we’re building the first working version of the architectural flow introduced in Day 1 — where the &lt;strong&gt;frontend queries the MCP Server&lt;/strong&gt;, receives structured context, and passes it to the &lt;strong&gt;agent or LLM&lt;/strong&gt; for execution. This establishes the foundation of context routing and separation of concerns that will evolve further in later articles. We'll create a minimal but real &lt;strong&gt;MCP Server&lt;/strong&gt; with the following features:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Accepts structured requests from agents&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Responds with memory, persona, tools, and goals&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Uses &lt;a href="https://www.npmjs.com/package/http-error-kit" rel="noopener noreferrer"&gt;&lt;code&gt;http-error-kit&lt;/code&gt;&lt;/a&gt; for clean error handling&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;In-memory store for now (extendable later)&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We'll use &lt;strong&gt;TypeScript + Express&lt;/strong&gt; for clarity and familiarity.&lt;/p&gt;




&lt;h2&gt;
  
  
  How Agents Interact with the MCP
&lt;/h2&gt;

&lt;p&gt;Let’s begin with the big picture.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What does an agent need to function?&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;A role/persona&lt;/strong&gt; (&lt;em&gt;Who am I?&lt;/em&gt;)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Memory&lt;/strong&gt; (&lt;em&gt;What have I done?&lt;/em&gt;)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Goals&lt;/strong&gt; (&lt;em&gt;What should I achieve?&lt;/em&gt;)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Tools&lt;/strong&gt; (&lt;em&gt;What can I use?&lt;/em&gt;)&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The MCP server gives the agent all this in a single response. The agent sends a request like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;agent_id&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;planner-001&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;task_id&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;goal-execution-42&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;request_type&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;context_bundle&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This says: &lt;em&gt;"Hey MCP, I'm PlannerGPT, working on Task 42. Give me what I need."&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The MCP returns:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;persona&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;PlannerGPT&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;system_prompt&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;You are a planning agent...&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;memory&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{...},&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;tools&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;scheduler&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;next_steps&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Break down UI work&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The agent now has everything to act independently.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;🧠 This context-driven setup enables agents to become self-operating — requesting their own data without hardcoding prompt logic or relying on frontends.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Tech Stack
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://nodejs.org/en" rel="noopener noreferrer"&gt;Node.js 22.15+&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.typescriptlang.org/" rel="noopener noreferrer"&gt;TypeScript&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://expressjs.com/" rel="noopener noreferrer"&gt;Express&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.npmjs.com/package/http-error-kit" rel="noopener noreferrer"&gt;http-error-kit&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Project Structure
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;mcp&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;server&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;
&lt;span class="err"&gt;├──&lt;/span&gt; &lt;span class="nx"&gt;src&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;
&lt;span class="err"&gt;│&lt;/span&gt;   &lt;span class="err"&gt;├──&lt;/span&gt; &lt;span class="nx"&gt;index&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ts&lt;/span&gt;              &lt;span class="err"&gt;#&lt;/span&gt; &lt;span class="nx"&gt;Entry&lt;/span&gt; &lt;span class="nx"&gt;point&lt;/span&gt;
&lt;span class="err"&gt;│&lt;/span&gt;   &lt;span class="err"&gt;├──&lt;/span&gt; &lt;span class="nx"&gt;routes&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;context&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ts&lt;/span&gt;     &lt;span class="err"&gt;#&lt;/span&gt; &lt;span class="nx"&gt;Core&lt;/span&gt; &lt;span class="nx"&gt;endpoint&lt;/span&gt;
&lt;span class="err"&gt;│&lt;/span&gt;   &lt;span class="err"&gt;├──&lt;/span&gt; &lt;span class="nx"&gt;lib&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;contextBuilder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ts&lt;/span&gt; &lt;span class="err"&gt;#&lt;/span&gt; &lt;span class="nx"&gt;Context&lt;/span&gt; &lt;span class="nf"&gt;logic &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;optional&lt;/span&gt; &lt;span class="nx"&gt;layer&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="err"&gt;│&lt;/span&gt;   &lt;span class="err"&gt;├──&lt;/span&gt; &lt;span class="nx"&gt;lib&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;memoryStore&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ts&lt;/span&gt;    &lt;span class="err"&gt;#&lt;/span&gt; &lt;span class="nx"&gt;Simulated&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;memory&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt;
&lt;span class="err"&gt;│&lt;/span&gt;   &lt;span class="err"&gt;└──&lt;/span&gt; &lt;span class="nx"&gt;types&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ts&lt;/span&gt;              &lt;span class="err"&gt;#&lt;/span&gt; &lt;span class="nx"&gt;Shared&lt;/span&gt; &lt;span class="nx"&gt;types&lt;/span&gt;
&lt;span class="err"&gt;├──&lt;/span&gt; &lt;span class="kr"&gt;package&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;json&lt;/span&gt;
&lt;span class="err"&gt;├──&lt;/span&gt; &lt;span class="nx"&gt;tsconfig&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;json&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is intentionally minimal. You can later split logs, DB integrations, auth layers, and OpenAPI docs as the system grows.&lt;/p&gt;




&lt;h3&gt;
  
  
  Step 1: Schema Definitions (&lt;code&gt;types.ts&lt;/code&gt;)
&lt;/h3&gt;

&lt;p&gt;Define the &lt;strong&gt;contract&lt;/strong&gt; between agent and MCP:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;AgentContextRequest&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;agent_id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;task_id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;request_type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;context_bundle&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="nx"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;AgentContextResponse&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;persona&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;system_prompt&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;memory&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Record&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;string&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;any&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;tools&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;string&lt;/span&gt;&lt;span class="p"&gt;[];&lt;/span&gt;
  &lt;span class="nl"&gt;next_steps&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;string&lt;/span&gt;&lt;span class="p"&gt;[];&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This sets a &lt;strong&gt;standard format&lt;/strong&gt; for every context exchange. MCP stays consistent no matter how many agents/tools you support.&lt;/p&gt;

&lt;p&gt;Why this matters:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;agent_id&lt;/code&gt; is used to fetch memory/persona&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;task_id&lt;/code&gt; can be used for tracking session history or task-level memory later&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;request_type&lt;/code&gt; supports extensibility: &lt;em&gt;in the future, you can add&lt;/em&gt; &lt;code&gt;"tool_request"&lt;/code&gt;&lt;em&gt;,&lt;/em&gt; &lt;code&gt;"log_feedback"&lt;/code&gt;&lt;em&gt;, etc.&lt;/em&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  Step 2: Mock Memory Layer (&lt;code&gt;lib/memoryStore.ts&lt;/code&gt;)
&lt;/h3&gt;

&lt;p&gt;For now, we simulate memory:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;agentMemory&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;planner-001&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;memory&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;past_steps&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Initial UI layout&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Tooling setup&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
      &lt;span class="na"&gt;user_feedback&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Focus on mobile responsiveness&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="na"&gt;persona&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;PlannerGPT&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;system_prompt&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;You are a planner...&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;tools&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;notepad&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;scheduler&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="na"&gt;next_steps&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Break down frontend work&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;getAgentContext&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;agent_id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;string&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;agentMemory&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;agent_id&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This allows us to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Store structured state per agent&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Simulate retrieval of memory, persona, tools&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Quickly prototype without DB overhead&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Think of this as a &lt;strong&gt;mock database&lt;/strong&gt;. In real setups, you'd connect to Redis, Postgres, Supabase, etc.&lt;/p&gt;




&lt;h3&gt;
  
  
  Step 3: The Context Endpoint (&lt;code&gt;routes/context.ts&lt;/code&gt;)
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;express&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;express&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;getAgentContext&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;../lib/memoryStore&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;BadRequestError&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;NotFoundError&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;http-error-kit&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;router&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;express&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Router&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="nx"&gt;router&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;post&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;next&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;agent_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;request_type&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;body&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;request_type&lt;/span&gt; &lt;span class="o"&gt;!==&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;context_bundle&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="k"&gt;throw&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;BadRequestError&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Unsupported request type&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;context&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;getAgentContext&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;agent_id&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;context&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="k"&gt;throw&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;NotFoundError&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;No context found for this agent&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;context&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;catch &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nf"&gt;next&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="nx"&gt;router&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This route powers the &lt;strong&gt;frontend → MCP&lt;/strong&gt; call chain.&lt;/p&gt;

&lt;p&gt;By supporting one endpoint (&lt;code&gt;/context&lt;/code&gt;), we simplify the contract. In future versions, you could:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Add &lt;code&gt;/feedback&lt;/code&gt; for reflection&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Add &lt;code&gt;/tool-result&lt;/code&gt; to store tool outputs&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Add &lt;code&gt;/task-complete&lt;/code&gt; to log transitions&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  Step 4: Server Bootstrap (&lt;code&gt;index.ts&lt;/code&gt;)
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;express&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;express&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;contextRouter&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;./routes/context&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;app&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;express&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;port&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;3000&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;use&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;express&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;
&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;use&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/context&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;contextRouter&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// Central error handler&lt;/span&gt;
&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;use&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;any&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;any&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;any&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;next&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;any&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;status&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;statusCode&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="mi"&gt;500&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;message&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;message&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;listen&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;port&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`MCP Server running on port &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;port&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Why this matters:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Plug-and-play entry point.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;You can now POST to &lt;code&gt;/context&lt;/code&gt; to simulate agent requests.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  How the Agent Consumes It
&lt;/h2&gt;

&lt;p&gt;Let’s say you're calling MCP from a GPT agent via fetch:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;http://localhost:3000/context&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;method&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;POST&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Content-Type&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;application/json&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="na"&gt;body&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;JSON&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;stringify&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="na"&gt;agent_id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;planner-001&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;task_id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;goal-001&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;request_type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;context_bundle&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
  &lt;span class="p"&gt;})&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;context&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="c1"&gt;// use context.persona, context.memory, etc.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Your agent now dynamically adjusts prompts, roles, and behaviors &lt;strong&gt;based on this response.&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;🤖 In Day 3, we’ll give agents even more power — letting them fetch, mutate, and adapt context in real-time. This is the first step toward autonomy.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h3&gt;
  
  
  ✅ What We Achieved Today
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;You created an &lt;strong&gt;MCP server&lt;/strong&gt; from scratch&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;You understand &lt;strong&gt;why&lt;/strong&gt; request/response schemas matter&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;You know how agents plug into this&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;You can extend it with DBs, queues, and auth later&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is foundational infrastructure for LLM-native apps.&lt;/p&gt;




&lt;h3&gt;
  
  
  ⏭️ Next Up: Connecting with Agents
&lt;/h3&gt;

&lt;p&gt;In Day 3, we’ll:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Write agent code that fetches context from MCP&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Customize prompts and behaviors per role&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Explore memory mutation and task coordination&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Let’s go from &lt;em&gt;"protocol exists"&lt;/em&gt; to &lt;em&gt;"agents are actually using it".&lt;/em&gt;&lt;/p&gt;




&lt;p&gt;Stay weird, stay modular.&lt;br&gt;&lt;br&gt;
Stay tuned for Day 3.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>mcp</category>
      <category>programming</category>
      <category>node</category>
    </item>
    <item>
      <title>Stop Duct-Taping Context Into Prompts: Meet the MCP Server</title>
      <dc:creator>Codanyks</dc:creator>
      <pubDate>Mon, 23 Jun 2025 20:35:00 +0000</pubDate>
      <link>https://forem.com/codanyks/stop-duct-taping-context-into-prompts-meet-the-mcp-server-hi5</link>
      <guid>https://forem.com/codanyks/stop-duct-taping-context-into-prompts-meet-the-mcp-server-hi5</guid>
      <description>&lt;h3&gt;
  
  
  Learn how the Model Context Protocol (MCP) can power smarter, scalable, and stateless AI agent systems.
&lt;/h3&gt;

&lt;p&gt;If you’ve ever built anything slightly more complex than a simple chat interface with an LLM, you’ve probably run into the same wall most of us hit:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Agents forget things.&lt;/li&gt;
&lt;li&gt;Context doesn’t persist.&lt;/li&gt;
&lt;li&gt;Coordination feels clunky.&lt;/li&gt;
&lt;li&gt;Everything breaks when scale enters.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Welcome to the &lt;strong&gt;context crisis.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The era of building LLM-powered tools and agents is here — but our infrastructure isn’t ready. Most devs are duct-taping memory, state, and agent logic into isolated silos, and calling it a day. But you know that won’t scale.&lt;/p&gt;

&lt;p&gt;What if you could separate the logic of &lt;em&gt;what a system should do&lt;/em&gt; from &lt;em&gt;what it knows&lt;/em&gt; and &lt;em&gt;how it remembers?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;That’s where the &lt;strong&gt;Model Context Protocol (MCP)&lt;/strong&gt; comes in — and no, this isn’t just a fancy wrapper. It’s an architectural pattern that might just save your stack.&lt;/p&gt;

&lt;p&gt;Let’s go deep.&lt;/p&gt;




&lt;h2&gt;
  
  
  What Is MCP, Really?
&lt;/h2&gt;

&lt;p&gt;At its core, an &lt;strong&gt;MCP server&lt;/strong&gt; is a centralized system responsible for managing and serving structured &lt;strong&gt;context&lt;/strong&gt; to agents, tools, and orchestrators in a multi-agent or AI-enhanced application.&lt;/p&gt;

&lt;p&gt;Think of it as the &lt;strong&gt;memory-and-goalkeeper&lt;/strong&gt; for your AI systems.&lt;/p&gt;

&lt;p&gt;MCP doesn't run inference. It doesn’t respond like ChatGPT. Instead, it responds like a &lt;em&gt;protocol-bound librarian&lt;/em&gt;:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“You are the planner. You’ve been working on Task #42. Here’s your role, memory, and available tools. Good luck.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;It’s like a &lt;strong&gt;router for meaning&lt;/strong&gt; — sitting in the middle, handing out purpose, memory, identity, and task state.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fevqs7j9rz700op7rzn9y.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fevqs7j9rz700op7rzn9y.png" alt="Anime-style interface HUD view from the perspective of an agent interacting with the MCP server. The agent sees a data stream uploading context: goals, history, tools. Holographic overlays reflect emotional tone detection, role enforcement, and memory bubbles. The agent nods thoughtfully, illuminated by the glow of the UI. Scene includes futuristic details like neural sync ports and floating prompt cubes." width="665" height="375"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Why Context Needs Its Own Server
&lt;/h2&gt;

&lt;p&gt;Let’s walk through a few realities of agent-based development:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Agents need to know who they are, what their role is, and what’s been done so far.&lt;/li&gt;
&lt;li&gt;You might be dealing with tool-using agents, each with different objectives.&lt;/li&gt;
&lt;li&gt;Memory isn't just logs; it’s a structured and evolving state.&lt;/li&gt;
&lt;li&gt;You want clean interfaces, separation of concerns, and scalable logic.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But here's what usually happens:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;agentPrompt&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;`
  You are AgentPlanner. Your task is to break down user goals into steps.
  Prior goal: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;goal&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;
  Past memory: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;memory&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;
`&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You start cramming context into prompts. You start caching state into local files. You start coupling memory logic to inference code. Suddenly, everything is fragile.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;MCP breaks that pattern.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;It says: &lt;em&gt;Let the agents focus on thinking. Let the MCP server handle knowing.&lt;/em&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  What Does an MCP Server Actually Do?
&lt;/h2&gt;

&lt;p&gt;Let’s break it down.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;✅ Identity Resolution&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Every agent has an identity: a name, a role, maybe a persona or tone. The MCP server tells agents &lt;em&gt;who they are&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;✅ Memory Abstraction&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;MCP offers structured memory: past inputs, decisions, events, user feedback. It can be task-scoped or global.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;✅ Goal Distribution&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Agents may be working toward shared or solo goals. MCP tracks and distributes these dynamically.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;✅ Contextual Routing&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Need tools? Previous state? Team member roles? MCP routes the right payloads to the right agents.&lt;/p&gt;




&lt;h2&gt;
  
  
  Anatomy of an MCP Request
&lt;/h2&gt;

&lt;p&gt;Here’s a sample POST request from an agent to the MCP server:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;POST&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;context&lt;/span&gt;

&lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;agent_id&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;planner-001&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;task_id&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;goal-execution-42&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;request_type&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;context_bundle&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And here’s what the MCP might return:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;persona&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;PlannerGPT&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;system_prompt&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;You are an expert task planner...&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;memory&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;past_steps&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[...],&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;user_feedback&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Focus on frontend components.&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;tools&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;search&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;task-scheduler&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;next_steps&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Draft UI plan&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Assign tasks to DesignerGPT&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is not inference — this is &lt;strong&gt;intelligent scaffolding.&lt;/strong&gt; It allows agents to stay stateless and sharp.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fv0ikg48crn6440vg4bh6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fv0ikg48crn6440vg4bh6.png" alt="A group of four agents walk purposefully toward a tall, rectangular tower labeled " width="665" height="375"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Real-World Analogies
&lt;/h2&gt;

&lt;p&gt;Let’s say you’re building an indie RPG with multiple characters, quests, and evolving storylines.&lt;/p&gt;

&lt;p&gt;In game dev, you wouldn’t make every NPC hardcode the player’s current state, completed quests, or world state, right?&lt;/p&gt;

&lt;p&gt;You’d centralize that. You’d have a state manager.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;That’s what MCP is — but for agents.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;It's the "quest manager" of your AI story. Agents query it to get the world state, their role, their memory.&lt;/p&gt;

&lt;p&gt;Now take that metaphor and apply it to an LLM-based assistant that uses Codex, a browser plugin, and a memory engine.&lt;/p&gt;

&lt;p&gt;Boom. You need an MCP server.&lt;/p&gt;




&lt;h2&gt;
  
  
  Architectural Pattern
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="o"&gt;+----------------+&lt;/span&gt;      &lt;span class="o"&gt;+--------------+&lt;/span&gt;      &lt;span class="o"&gt;+------------------+&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt;  &lt;span class="nx"&gt;Frontend&lt;/span&gt; &lt;span class="nx"&gt;App&lt;/span&gt;  &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="o"&gt;---&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;  &lt;span class="nx"&gt;MCP&lt;/span&gt; &lt;span class="nx"&gt;Server&lt;/span&gt;  &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="o"&gt;---&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;  &lt;span class="nx"&gt;Agent&lt;/span&gt; &lt;span class="nx"&gt;Inference&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;+----------------+&lt;/span&gt;      &lt;span class="o"&gt;+--------------+&lt;/span&gt;      &lt;span class="o"&gt;+------------------+&lt;/span&gt;
                             &lt;span class="o"&gt;|&lt;/span&gt;
                             &lt;span class="nx"&gt;v&lt;/span&gt;
                       &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;Memory&lt;/span&gt; &lt;span class="nx"&gt;Store&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
                             &lt;span class="o"&gt;|&lt;/span&gt;
                             &lt;span class="nx"&gt;v&lt;/span&gt;
                      &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;Goal&lt;/span&gt; &lt;span class="nx"&gt;Repository&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The MCP server sits in between, handling structured API requests and serving agents clean, focused context.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqbprsundg83yol9xunry.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqbprsundg83yol9xunry.png" alt="The MCP Server acts as a central coordinator between the frontend, memory store, goal repository, and the agent. When a request is made from the frontend, the MCP Server retrieves relevant context and goals by connecting to the memory store and goal repository. It then passes this structured data to the agent for processing. The agent generates a response based on the provided information and sends it back to the MCP Server, which then returns the final output to the frontend." width="800" height="391"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It connects memory, goals, identity, and available tools to the active session.&lt;/p&gt;

&lt;p&gt;In later articles, this pattern expands to support &lt;strong&gt;agent-initiated context fetching&lt;/strong&gt;, &lt;strong&gt;agent-to-agent coordination&lt;/strong&gt;, and &lt;strong&gt;shared blackboard communication models&lt;/strong&gt; — all mediated through the MCP.&lt;/p&gt;




&lt;h2&gt;
  
  
  Without MCP: What Goes Wrong
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Agents lack history or carry too much of it.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;You can’t easily rotate or upgrade memory providers.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;You’re locked into brittle prompt-chaining.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Debugging context bugs becomes a nightmare.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;You get burned out managing the glue instead of building the product.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Why Now?
&lt;/h2&gt;

&lt;p&gt;The agent ecosystem is exploding. Frameworks like AutoGen, CrewAI, LangGraph, and open-agent stacks are maturing.&lt;/p&gt;

&lt;p&gt;But they all suffer from the same issue: &lt;strong&gt;context is poorly managed.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;As AI architectures evolve, context routing is poised to become a new standard — and MCP servers offer a practical way to start building around it.&lt;/p&gt;




&lt;h2&gt;
  
  
  What You’ll Learn in This Series
&lt;/h2&gt;

&lt;p&gt;This is just Day 1.&lt;/p&gt;

&lt;p&gt;Here’s what’s coming next:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Day 2: “Build Your Own MCP Server (In TypeScript)”&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Create a functioning MCP Server&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Define context schemas&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Build routes for &lt;code&gt;/context&lt;/code&gt; and error handling&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Modularize memory and goal repositories&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Day 3: “Let Agents Pull Their Own Context”&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Build agent-side context fetchers&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Add autonomy to inference layers&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Eliminate reliance on UI requests&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Day 4: “Enable Agent-to-Agent Communication”&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Agents that write and read context from each other&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Shared blackboard model&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Delegation and feedback loops&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Day 5: “The Wrap-Up: Tools, Patterns, Libraries”&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Design tradeoffs&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Tooling suggestions&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Future directions for multi-agent systems&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Build for Scale, Even When Small
&lt;/h2&gt;

&lt;p&gt;Even if you're just experimenting, building with protocol-thinking can save you from rewrites down the line.&lt;/p&gt;

&lt;p&gt;MCP doesn’t just improve developer experience — it opens the door for truly &lt;strong&gt;modular, scalable, agent-based applications.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Stop hardcoding memory into your agents.&lt;br&gt;&lt;br&gt;
Start thinking in systems.&lt;br&gt;&lt;br&gt;
Build weird, but build right.&lt;/p&gt;




&lt;p&gt;Stay tuned for Day 2.&lt;/p&gt;

&lt;p&gt;And remember → &lt;strong&gt;LLMs are the actors. MCP is the director.&lt;/strong&gt;🎬&lt;/p&gt;

</description>
      <category>ai</category>
      <category>mcp</category>
      <category>programming</category>
      <category>node</category>
    </item>
    <item>
      <title>The Art of Saying No: Creating Boundaries and Systems as a Creative Freelancer</title>
      <dc:creator>Codanyks</dc:creator>
      <pubDate>Fri, 20 Jun 2025 13:20:00 +0000</pubDate>
      <link>https://forem.com/codanyks/the-art-of-saying-no-creating-boundaries-and-systems-as-a-creative-freelancer-4ga4</link>
      <guid>https://forem.com/codanyks/the-art-of-saying-no-creating-boundaries-and-systems-as-a-creative-freelancer-4ga4</guid>
      <description>&lt;h3&gt;
  
  
  &lt;em&gt;The final chapter in The Indie Stack shows how to protect your time, energy, and focus—without killing your creativity.&lt;/em&gt;
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;"You don’t burn out from hard work. You burn out from doing things that don’t matter to you."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Let’s talk about boundaries—not as walls, but as architecture. Not fences that keep people out, but frameworks that let your best work live in peace.&lt;/p&gt;

&lt;p&gt;As a solo founder or creative freelancer, you’re the talent &lt;em&gt;and&lt;/em&gt; the bottleneck. If everything flows through you, your energy is the most critical resource in the business. And if your day is shaped by other people’s priorities, you’ve already lost.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Systems Are the New Boundaries
&lt;/h2&gt;

&lt;p&gt;Boundaries aren’t just "saying no".&lt;/p&gt;

&lt;p&gt;They’re systems. Invisible automations, policies, workflows, and defaults that protect your time without you having to constantly guard it.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;A calendar rule is a boundary.&lt;/strong&gt; No meetings before 11am.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;A form is a boundary.&lt;/strong&gt; Not everyone gets access.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;A scope doc is a boundary.&lt;/strong&gt; It’s clarity before commitment.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;A follow-up sequence is a boundary.&lt;/strong&gt; It prevents you from chasing.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fng2b516jm9qyc5iqa7jz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fng2b516jm9qyc5iqa7jz.png" alt="A creative character surrounded by floating templates and checklists, like glowing spell scrolls protecting their workspace—peaceful, organized, and confident." width="577" height="433"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;These are not defensive. They are &lt;em&gt;design choices&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Each one creates a little more space around your genius. A little more oxygen around your creativity. They keep your day from being hijacked.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Say No Before They Even Ask
&lt;/h2&gt;

&lt;p&gt;Let’s go deeper. Most solo founders say yes too often—not because they want to, but because saying no in the moment is hard.&lt;/p&gt;

&lt;p&gt;So the trick is to say no &lt;em&gt;before they even ask.&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Pre-qualify leads with a form&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Filter messages through a "&lt;strong&gt;working with me&lt;/strong&gt;" page&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Post minimum project rates publicly&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Use autoresponders to reset expectations&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is where &lt;a href="https://tally.cello.so/0oaCRaYMw1a" rel="noopener noreferrer"&gt;Tally so&lt;/a&gt; can quietly shine.&lt;/p&gt;

&lt;p&gt;You can spin up a form that’s not just about collecting info—it’s a filter, a gate, and a mirror.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;🧰 Suggested tool: Try using &lt;a href="https://tally.cello.so/0oaCRaYMw1a" rel="noopener noreferrer"&gt;Tally so&lt;/a&gt; or &lt;a href="https://typeform.cello.so/btjZcggRuc3" rel="noopener noreferrer"&gt;Typeform&lt;/a&gt; to build a playful intake form with disqualifiers.&lt;/p&gt;

&lt;p&gt;Just a nudge—pick your own tools that match your style.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  3. What Triggers Your Chaos?
&lt;/h2&gt;

&lt;p&gt;Every freelancer has their chaos triggers.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;em&gt;The 11pm Slack message that leads to three hours of free consulting&lt;/em&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;em&gt;The open-ended project that never ends&lt;/em&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;em&gt;The "&lt;/em&gt;&lt;strong&gt;&lt;em&gt;quick call&lt;/em&gt;&lt;/strong&gt;&lt;em&gt;" that turns into therapy&lt;/em&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;em&gt;The vague scope that invites endless revisions&lt;/em&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Your job is not to hustle harder. It’s to design a system that makes chaos less likely.&lt;/p&gt;

&lt;p&gt;Map your chaos. Then build tiny protective rituals around each one.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Trigger:&lt;/strong&gt; Last-minute changes → &lt;strong&gt;System:&lt;/strong&gt; Lock deliverables 72 hours before delivery&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Trigger:&lt;/strong&gt; Free calls → &lt;strong&gt;System:&lt;/strong&gt; Booking form with pre-approval&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Trigger:&lt;/strong&gt; Ghosted payments → &lt;strong&gt;System:&lt;/strong&gt; Auto-invoice + pay-to-book model&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  4. Templates Are Emotional Boundaries
&lt;/h2&gt;

&lt;p&gt;People think templates are lazy.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Wrong.&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Templates are how you preserve emotional energy.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;The polite no-response email&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The scope doc with non-negotiables&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The intake form that walks clients through how you work&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You write them when you're calm, and they speak for you when you're not.&lt;/p&gt;

&lt;p&gt;Templates remove the emotional tax of repeating yourself. They prevent reactive responses. They make your boundaries scalable.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdb67neq58cfknmp26vie.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdb67neq58cfknmp26vie.png" alt="An anime-style creative character surrounded by floating templates and checklists, like glowing spell scrolls protecting their workspace—peaceful, organized, and confident." width="577" height="433"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Boundaries Buy You Creative Flow
&lt;/h2&gt;

&lt;p&gt;Most creatives think boundaries kill spontaneity. Actually, they buy you time &lt;em&gt;for&lt;/em&gt; spontaneity.&lt;/p&gt;

&lt;p&gt;You can’t do your best work if your brain is still carrying the weight of:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Chasing unpaid invoices&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Prepping for ten different project calls&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Managing other people’s disorganization&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A protected schedule gives you blocks of flow time. A clear scope gives you permission to say “&lt;strong&gt;not my job&lt;/strong&gt;”.&lt;/p&gt;

&lt;p&gt;You’re not just a creator. You’re a system designer.&lt;/p&gt;

&lt;h2&gt;
  
  
  6. Scarcity Can Be a Boundary
&lt;/h2&gt;

&lt;p&gt;Here’s an advanced move: use &lt;em&gt;scarcity&lt;/em&gt; as a boundary.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Only take on 2 projects per quarter&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Offer booking windows that close after 7 days&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Create "&lt;strong&gt;&lt;em&gt;studio seasons&lt;/em&gt;&lt;/strong&gt;"—limited windows of availability&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This gives clients urgency while giving you spaciousness.&lt;/p&gt;

&lt;p&gt;You don’t need to always be open. You just need to be clear about when and how you are.&lt;/p&gt;

&lt;h2&gt;
  
  
  7. Audit Your Energy Leaks
&lt;/h2&gt;

&lt;p&gt;Want to know where your systems should go? Look at where your energy goes.&lt;/p&gt;

&lt;p&gt;Track your last 30 days. What drained you?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Did you answer the same question 14 times?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Did you onboard a client without clarity?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Did a vague scope become a full-time job?&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each of these is a boundary begging to exist. Turn every energy leak into a system.&lt;/p&gt;

&lt;h2&gt;
  
  
  8. Create a Pre-Work Firewall
&lt;/h2&gt;

&lt;p&gt;Before any client gets your time, effort, or ideas:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;They fill a form&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;They receive a clear process overview&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;They review a scope template&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;They pay a deposit&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This firewall isn’t about arrogance. It’s about alignment. You’re filtering for the kind of people who value your process.&lt;/p&gt;

&lt;h2&gt;
  
  
  9. Delegate the Gatekeeping
&lt;/h2&gt;

&lt;p&gt;Eventually, systems can do the boundary work for you.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://encharge.io?deal=codanyks" rel="noopener noreferrer"&gt;Encharge&lt;/a&gt; can move leads to Notion&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://tally.cello.so/0oaCRaYMw1a" rel="noopener noreferrer"&gt;Tally so&lt;/a&gt; or &lt;a href="https://typeform.cello.so/btjZcggRuc3" rel="noopener noreferrer"&gt;Typeform&lt;/a&gt; can pre-vet clients with disqualifiers&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Email rules can auto-label low-priority senders&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These aren’t just time savers. They are &lt;em&gt;energy filters&lt;/em&gt;. They remove the noise before it even reaches you.&lt;/p&gt;

&lt;h2&gt;
  
  
  10. Freedom Within the Business
&lt;/h2&gt;

&lt;p&gt;You’re not building systems to escape the business. You’re building systems so the business doesn’t consume &lt;em&gt;you&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;There’s a difference.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwe09przdfeb8dbnmlby9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwe09przdfeb8dbnmlby9.png" alt="A serene anime-style freelancer sitting at a desk surrounded by light holographic systems and rules floating peacefully around—symbolizing harmony, freedom, and boundaries inside their own creative business." width="577" height="433"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The goal isn’t to say “no” forever. It’s to say “yes” more fully—because everything else has been filtered.&lt;/p&gt;

&lt;p&gt;And that’s how you protect creative energy.&lt;/p&gt;




&lt;h2&gt;
  
  
  The End of a Series — The Start of Your Next Chapter
&lt;/h2&gt;

&lt;p&gt;You’ve just read the last piece in the &lt;strong&gt;Indie Stack&lt;/strong&gt; series. But this isn’t a goodbye. This is your start line.&lt;/p&gt;

&lt;p&gt;You now have the playbooks.&lt;/p&gt;

&lt;p&gt;The systems.&lt;br&gt;
The templates.&lt;br&gt;
The boundary builders.&lt;br&gt;
The delegation frameworks.&lt;br&gt;
The mindset shifts.&lt;/p&gt;

&lt;p&gt;You don’t need to “&lt;strong&gt;do it all&lt;/strong&gt;” anymore — you just need to design &lt;em&gt;how&lt;/em&gt; it gets done.&lt;/p&gt;

&lt;p&gt;If this series helped you breathe easier, ship faster, or sleep better — let us know. We’re listening.&lt;/p&gt;

&lt;p&gt;And if there’s more you want — deeper guides, async systems, or just a little inspiration to keep going — hit reply or send a DM. We’re already sketching what comes next.&lt;/p&gt;

&lt;p&gt;Let’s make solo building less lonely — and a whole lot smarter.&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Related Series Section&lt;/strong&gt;
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://codanyks.hashnode.dev/series/founder-fuel-weekend-systems" rel="noopener noreferrer"&gt;&lt;strong&gt;Founder Fuel: Weekend Systems for Solo Builders&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://codanyks.hashnode.dev/series/real-time-nodejs-websockets" rel="noopener noreferrer"&gt;&lt;strong&gt;Real-Time with Node.js: WebSockets&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://codanyks.hashnode.dev/series/code-the-core-ddd-nodejs-nestjs" rel="noopener noreferrer"&gt;&lt;strong&gt;Code the Core: DDD with Node.js&lt;/strong&gt; &lt;strong&gt;&amp;amp;&lt;/strong&gt; &lt;strong&gt;NestJS&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Let’s Connect
&lt;/h2&gt;

&lt;p&gt;Was this helpful? Share this article with your indie hacker or bootstrapped founder friends.&lt;/p&gt;

&lt;p&gt;Follow @&lt;a href="https://dev.to@codanyks"&gt;@codanyks&lt;/a&gt; on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;X: &lt;a href="https://x.com/codanyks" rel="noopener noreferrer"&gt;&lt;strong&gt;codanyks&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Instagram: &lt;a href="https://www.instagram.com/codanyks/" rel="noopener noreferrer"&gt;&lt;strong&gt;codanyks&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Threads: &lt;a href="https://www.threads.com/@codanyks" rel="noopener noreferrer"&gt;&lt;strong&gt;codanyks&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We build in public — come join the movement.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Some links may be affiliate links. We only recommend tools we use or believe in.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>tooling</category>
      <category>codanyks</category>
      <category>learning</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Build a Stack, Not a Startup: Creating Resilient One-Person Businesses</title>
      <dc:creator>Codanyks</dc:creator>
      <pubDate>Sat, 14 Jun 2025 15:10:00 +0000</pubDate>
      <link>https://forem.com/codanyks/build-a-stack-not-a-startup-creating-resilient-one-person-businesses-54e2</link>
      <guid>https://forem.com/codanyks/build-a-stack-not-a-startup-creating-resilient-one-person-businesses-54e2</guid>
      <description>&lt;h3&gt;
  
  
  &lt;em&gt;A solo founder’s guide to designing systems that scale without chaos—and outlast your energy.&lt;/em&gt;
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;“Startups chase growth. Stacks chase stability”.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That’s the shift.&lt;/p&gt;

&lt;p&gt;When you’re a solo founder, the traditional playbook stops making sense. You’re not managing teams. You’re not pitching VCs.&lt;br&gt;
You’re building something to live inside of—&lt;em&gt;not something you want to escape from&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;This article is about designing that thing:&lt;br&gt;
A resilient stack that makes space for life, without sacrificing ambition.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why “Stack” Thinking Wins for Solopreneurs
&lt;/h2&gt;

&lt;p&gt;Startups are designed for velocity.&lt;br&gt;
Stacks are designed for longevity.&lt;/p&gt;

&lt;p&gt;If a startup is a rocketship fueled by scale, a solo business stack is a &lt;strong&gt;self-sustaining ecosystem&lt;/strong&gt;—quietly running under its own weight. The goal isn’t to do more. It’s to build less often, and benefit longer.&lt;/p&gt;

&lt;p&gt;The big mindset shift?&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;You stop optimizing for explosive growth.&lt;br&gt;
You start optimizing for predictable flow.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  What Is a Stack (When You’re a Solo Founder)?
&lt;/h2&gt;

&lt;p&gt;Your stack isn’t just your tools.&lt;br&gt;
It’s the &lt;strong&gt;architecture of how your business thinks, runs, and responds.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Imagine it as layers:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Top Layer: Outcomes&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Products, services, courses, assets.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;p&gt;&lt;strong&gt;Middle Layer: Processes&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;How things get created, delivered, refined.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;p&gt;&lt;strong&gt;Base Layer: You&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Your capacity, energy, priorities.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;If any layer collapses, the rest wobble.&lt;/p&gt;

&lt;p&gt;Building a resilient stack means starting &lt;em&gt;from the base&lt;/em&gt; and designing upwards.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkwbd1g5qlok87edi49a9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkwbd1g5qlok87edi49a9.png" alt="A layered “stack” metaphor for a solo founder’s business. Imagine three glowing, semi-transparent horizontal layers stacked on top of each other like a vertical hologram." width="445" height="560"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Start with Your Operating Loop
&lt;/h2&gt;

&lt;p&gt;Don’t build systems around what you &lt;em&gt;wish&lt;/em&gt; you were doing.&lt;br&gt;
Build them around how you &lt;strong&gt;actually&lt;/strong&gt; operate.&lt;/p&gt;

&lt;p&gt;Start by identifying your real cycle:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;When do you ideate?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;When do you write?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;When do you rest?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;When do you spiral into imposter syndrome?&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Every system you build should respect this rhythm.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;“Your stack shouldn’t fight your nature.&lt;br&gt;
It should frame it.”&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Build Processes That Don’t Require You
&lt;/h2&gt;

&lt;p&gt;Let’s kill the idea that &lt;em&gt;everything&lt;/em&gt; needs your touch.&lt;/p&gt;

&lt;p&gt;Start defining processes in terms of:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Triggers&lt;/strong&gt; (&lt;em&gt;what starts this?&lt;/em&gt;)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Inputs&lt;/strong&gt; (&lt;em&gt;what needs to be gathered?&lt;/em&gt;)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Decisions&lt;/strong&gt; (&lt;em&gt;what can be automated?&lt;/em&gt;)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Outputs&lt;/strong&gt; (&lt;em&gt;what does this result in?&lt;/em&gt;)&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These systems could live in Notion, in Airtable, in your head—even scribbled on a whiteboard. Doesn’t matter.&lt;/p&gt;

&lt;p&gt;Just start writing things down. Codify how you think. Then make it repeatable.&lt;/p&gt;




&lt;h2&gt;
  
  
  Your Tools Should Be Replaceable
&lt;/h2&gt;

&lt;p&gt;Tools are just sockets.&lt;br&gt;
Your process is the wiring.&lt;/p&gt;

&lt;p&gt;Don’t obsess over which app to use. Focus on the workflow. &lt;em&gt;Then&lt;/em&gt; pick something that can quietly run in the background.&lt;/p&gt;

&lt;p&gt;To begin with, here’s a quiet suggestion:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;You could use &lt;a href="https://tally.cello.so/0oaCRaYMw1a" rel="noopener noreferrer"&gt;&lt;strong&gt;Tally so&lt;/strong&gt;&lt;/a&gt; &lt;strong&gt;/&lt;/strong&gt; &lt;a href="https://typeform.cello.so/btjZcggRuc3" rel="noopener noreferrer"&gt;&lt;strong&gt;Typeform&lt;/strong&gt;&lt;/a&gt; to collect responses, feedback, or automate tiny inputs that feed bigger flows.&lt;br&gt;&lt;br&gt;
But it’s just that—a suggestion. Use whatever matches your motion.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The point is: &lt;strong&gt;tools should disappear into your process.&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Design for Defaults, Not Decisions
&lt;/h2&gt;

&lt;p&gt;Every extra decision taxes your energy.&lt;/p&gt;

&lt;p&gt;The most resilient stacks reduce decisions by:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Predefining formats (&lt;em&gt;templates&lt;/em&gt;)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Creating default modes (&lt;em&gt;e.g., always async&lt;/em&gt;)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Using time-blocked rituals (&lt;em&gt;e.g., weekly reviews&lt;/em&gt;)&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You’re not building rigidity. You’re creating &lt;strong&gt;trust in your own flow&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;If you disappear for two weeks, your stack should carry on without burning to the ground.&lt;/p&gt;




&lt;h2&gt;
  
  
  Track Energy, Not Just Revenue
&lt;/h2&gt;

&lt;p&gt;Founders often burn out with profitable businesses—because they weren’t built to support &lt;em&gt;them.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Ask:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Which process is draining?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;What part of the work do I avoid?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Can I delay, delete, or delegate it?&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Resilient stacks &lt;strong&gt;track your energy the same way they track cash&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Because if you fall apart, the whole thing stops. Protecting &lt;em&gt;you&lt;/em&gt; is protecting the business.&lt;/p&gt;




&lt;h2&gt;
  
  
  Build Systems That Outlive You
&lt;/h2&gt;

&lt;p&gt;You don’t need to hire to scale.&lt;br&gt;&lt;br&gt;
You need to &lt;em&gt;record&lt;/em&gt;, &lt;em&gt;automate&lt;/em&gt;, and &lt;em&gt;simplify&lt;/em&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Turn onboarding into async docs.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Turn feedback into recurring forms.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Turn updates into pre-scheduled loops.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Turn chaos into predictable operating motion.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This doesn’t mean you’re building a big business.&lt;br&gt;&lt;br&gt;
It means you’re building a &lt;strong&gt;quiet engine&lt;/strong&gt; that runs without constant repair.&lt;/p&gt;




&lt;h2&gt;
  
  
  Mindsets That Make the Stack Strong
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Asynchronous is sacred&lt;/strong&gt;&lt;br&gt;
Your best work happens off-calendar.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Default to clarity, not speed&lt;/strong&gt;&lt;br&gt;
You can’t scale miscommunication.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Every problem solved twice&lt;/strong&gt;&lt;br&gt;
Once now, and once in a way it never happens again.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Build process &amp;gt; fix problems&lt;/strong&gt;&lt;br&gt;
Systems solve what effort can’t.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  You’re Not the Business. You’re the Architect.
&lt;/h2&gt;

&lt;p&gt;The endgame isn’t freedom &lt;em&gt;from&lt;/em&gt; the business.&lt;br&gt;
It’s freedom &lt;em&gt;within&lt;/em&gt; the business.&lt;/p&gt;

&lt;p&gt;Your stack should serve your work style, your energy, and your ambition.&lt;/p&gt;

&lt;p&gt;It doesn’t have to be a rocket.&lt;br&gt;
But it can be a &lt;strong&gt;beautiful machine that hums even when you’re asleep.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;So don’t start with what you can sell.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Start with what you can &lt;em&gt;sustain.&lt;/em&gt;&lt;br&gt;
Then build a stack that respects that.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7dujsdzrx1s0n8oabtrs.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7dujsdzrx1s0n8oabtrs.png" alt="A solo founder standing atop a blueprint-like platform" width="445" height="560"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Related Series&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;This is Part 4 in our &lt;a href="https://codanyks.hashnode.dev/series/the-indie-stack" rel="noopener noreferrer"&gt;The Indie Stack&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://codanyks.hashnode.dev/indie-stack-solo-agency-process" rel="noopener noreferrer"&gt;The Indie Stack: Building Client Systems That Scale Without People&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://codanyks.hashnode.dev/service-like-saas" rel="noopener noreferrer"&gt;Service Like SaaS: Turning Projects into Predictable Income&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://codanyks.hashnode.dev/build-once-sell-forever" rel="noopener noreferrer"&gt;Build Once, Sell Forever: Designing Digital Products That Scale Without You&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Previous Series You Might Love&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://codanyks.hashnode.dev/series/founder-fuel-weekend-systems" rel="noopener noreferrer"&gt;&lt;strong&gt;Founder Fuel: Weekend Systems for So&lt;/strong&gt;&lt;/a&gt;&lt;a href="https://codanyks.hashnode.dev/how-fiverr-empowers-solo-founders-to-delegate-and-scale-businesses" rel="noopener noreferrer"&gt;&lt;strong&gt;lo Builders&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://codanyks.hashnode.dev/how-fiverr-empowers-solo-founders-to-delegate-and-scale-businesses" rel="noopener noreferrer"&gt;&lt;strong&gt;Real-Time with Node.js: Web&lt;/strong&gt;&lt;/a&gt;&lt;a href="https://codanyks.hashnode.dev/scaling-without-hiring-fiverr-founders-guide-2025" rel="noopener noreferrer"&gt;&lt;strong&gt;Sock&lt;/strong&gt;&lt;/a&gt;&lt;a href="https://codanyks.hashnode.dev/how-fiverr-empowers-solo-founders-to-delegate-and-scale-businesses" rel="noopener noreferrer"&gt;&lt;strong&gt;ets&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://codanyks.hashnode.dev/how-fiverr-empowers-solo-founders-to-delegate-and-scale-businesses" rel="noopener noreferrer"&gt;&lt;strong&gt;Code the Core: DDD with Node.js&lt;/strong&gt; &lt;strong&gt;&amp;amp;&lt;/strong&gt; &lt;strong&gt;NestJS&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Let’s Connect
&lt;/h2&gt;

&lt;p&gt;Was this helpful? Share this article with your indie hacker or bootstrapped founder friends.&lt;/p&gt;

&lt;p&gt;Follow @&lt;a href="https://dev.to@codanyks"&gt;@codanyks&lt;/a&gt; on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;X: &lt;a href="https://x.com/codanyks" rel="noopener noreferrer"&gt;&lt;strong&gt;codanyks&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Instagram: &lt;a href="https://www.instagram.com/codanyks/" rel="noopener noreferrer"&gt;&lt;strong&gt;codanyks&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Threads: &lt;a href="https://www.threads.com/@codanyks" rel="noopener noreferrer"&gt;&lt;strong&gt;codanyks&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We build in public — come join the movement.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Some links may be affiliate links. We only recommend tools we use or believe in.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>codanyks</category>
      <category>learning</category>
      <category>tutorial</category>
      <category>tooling</category>
    </item>
    <item>
      <title>Build Once, Sell Forever: Designing Digital Products That Scale Without You</title>
      <dc:creator>Codanyks</dc:creator>
      <pubDate>Tue, 10 Jun 2025 16:30:00 +0000</pubDate>
      <link>https://forem.com/codanyks/build-once-sell-forever-designing-digital-products-that-scale-without-you-10fo</link>
      <guid>https://forem.com/codanyks/build-once-sell-forever-designing-digital-products-that-scale-without-you-10fo</guid>
      <description>&lt;h4&gt;
  
  
  &lt;em&gt;The solo creator’s blueprint for designing digital products that grow, sell, and evolve — all without you in the loop.&lt;/em&gt;
&lt;/h4&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;"The best work doesn’t multiply your time — it erases the need for it".&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  The Indie Dilemma
&lt;/h2&gt;

&lt;p&gt;You’re a solo founder. You love the rush of building, launching, creating.&lt;br&gt;
But you wake up realizing: every dollar still has a time cost.&lt;/p&gt;

&lt;p&gt;Each project, each client, each service — it’s a loop.&lt;br&gt;
No matter how efficient you become, the ceiling’s always there: &lt;strong&gt;&lt;em&gt;your time&lt;/em&gt;&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;So what if the next thing you built… didn’t need you anymore?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbe8g5v01zx562zkchx21.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbe8g5v01zx562zkchx21.png" alt="A glowing storefront signs, one of which quietly reads " width="445" height="560"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  The Myth of Passive Income (and the Truth Behind It)
&lt;/h2&gt;

&lt;p&gt;"Make money while you sleep" is seductive. But let’s be honest — most digital product dreams fail not because the idea was wrong, but because &lt;strong&gt;the system wasn’t designed to scale.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Scaling doesn’t mean viral launches or unicorn valuations.&lt;br&gt;&lt;br&gt;
It means creating something that:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Solves a recurring problem&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Works without you watching it&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Can be discovered, bought, and delivered with zero meetings&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is what digital products do &lt;em&gt;when built like systems&lt;/em&gt;, not artifacts.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwxpih4epm9f3mqr82du2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwxpih4epm9f3mqr82du2.png" alt="A lone indie builder working late, surrounded by idea boards, coffee, and code on screen. Bright focus on intentional systems, not chaos." width="665" height="375"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 1: Think in Systems, Not Stuff
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Most creators start like this:
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“I’ll make an ebook on productivity.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Cool. But here’s what they often &lt;em&gt;don’t&lt;/em&gt; think through:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;How will people find it tomorrow?&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;What happens after someone buys it?&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;How will I improve it without burning out?&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Thinking in &lt;em&gt;systems&lt;/em&gt; flips the question.&lt;br&gt;&lt;br&gt;
Instead of: &lt;em&gt;“What can I sell?”&lt;/em&gt;&lt;br&gt;&lt;br&gt;
You ask: &lt;em&gt;“What system can I build once that keeps helping, selling, and learning?”&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;It’s a mindset shift — from &lt;strong&gt;crafting deliverables&lt;/strong&gt; to &lt;strong&gt;designing processes&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F97eyxg4dvdkaoyjqez5i.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F97eyxg4dvdkaoyjqez5i.png" alt="A illustration of a looped workflow glowing with energy: discover → engage → deliver → feedback → upgrade. Stylized arrows, digital UI elements overlaid." width="665" height="375"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 2: Identify the Evergreen Loop
&lt;/h2&gt;

&lt;p&gt;Every good digital product lives inside a &lt;strong&gt;loop&lt;/strong&gt;.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Discovery&lt;/strong&gt; – SEO, threads, YouTube, LinkedIn&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Lead Magnet&lt;/strong&gt; – free value, trust building&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Offer&lt;/strong&gt; – one clear, sharp solution&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Delivery&lt;/strong&gt; – instant, clean, satisfying&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Feedback Loop&lt;/strong&gt; – always listening, always improving&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;You’re not just selling a file — you’re building an automated &lt;em&gt;experience&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7yo0k9a6byxiryqhot4h.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7yo0k9a6byxiryqhot4h.png" alt="User journey map: from laptop search to download to smiling user giving feedback via form. Futuristic UI overlays and glowing trails connecting each stage." width="577" height="433"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 3: Solve the Right Kind of Problem
&lt;/h2&gt;

&lt;p&gt;Forget trendy. Forget “what’s hot in AI this week.”&lt;/p&gt;

&lt;p&gt;You want &lt;strong&gt;painkillers&lt;/strong&gt;, not vitamins.&lt;br&gt;&lt;br&gt;
Look for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Repetitive pain points&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;High time cost to solve&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Boring solutions that need better UX&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Overlaps with your lived experience&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhx5fd9fjey274u2sv3i5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhx5fd9fjey274u2sv3i5.png" alt="Close-up anime-style portrait of a solo founder reflecting in front of a window at night, various problems and question marks glowing on a holographic board nearby." width="577" height="433"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 4: Deliver Like a Product Studio, Even If You’re Solo
&lt;/h2&gt;

&lt;p&gt;Every touchpoint is a chance to make it memorable.&lt;br&gt;&lt;br&gt;
Even a $9 template should feel like magic.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Friendly onboarding&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Clean design&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;2-min walkthrough video&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Speak human, not corporate&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;People &lt;em&gt;share&lt;/em&gt; joy — not just utility.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq050hr4ozw32beddik95.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq050hr4ozw32beddik95.png" alt="Scene of a delighted user opening a beautifully packaged digital product on their laptop, confetti sparkles and small touches like thank-you notes animate subtly." width="577" height="433"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 5: Build Feedback Into the DNA
&lt;/h2&gt;

&lt;p&gt;Scaling isn’t about launching 10 products.&lt;br&gt;&lt;br&gt;
It’s about &lt;strong&gt;evolving one product 10 times&lt;/strong&gt; with clarity.&lt;/p&gt;

&lt;p&gt;Simple loops work:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;“What’s missing?” buttons&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Feature requests&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;A changelog that actually changes&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These aren’t marketing hacks — they’re quiet longevity tools.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fs9pj77gmp23ttjih8hfh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fs9pj77gmp23ttjih8hfh.png" alt="A glowing feedback panel embedded inside a product UI, where users write thoughtful notes. Soft interface with friendly icons, cozy environment." width="577" height="433"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Subtle Automation (That Doesn’t Feel Robotic)
&lt;/h2&gt;

&lt;p&gt;Automate what eats time but adds no soul.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Product access → Gumroad, LemonSqueezy&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Email onboarding → &lt;a href="https://buttondown.com/refer/codanyks" rel="noopener noreferrer"&gt;Buttondown&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Feedback collection → light, clean forms&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  A Tool Suggestion to Get You Started
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;To begin with, let me offer a suggestion: try&lt;/em&gt; &lt;a href="https://tally.so" rel="noopener noreferrer"&gt;&lt;em&gt;Tally.so&lt;/em&gt;&lt;/a&gt; or &lt;a href="https://typeform.cello.so/btjZcggRuc3" rel="noopener noreferrer"&gt;Typeform&lt;/a&gt; &lt;em&gt;to collect interest, feedback, or waitlist signups. It's quick, clean, and friendly — no setup headaches.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;You don’t have to use it. Pick what fits your flow.&lt;br&gt;&lt;br&gt;
Just don’t wait to build the loop.&lt;/p&gt;

&lt;p&gt;Once you see your first automated response come in — you’ll feel it:&lt;br&gt;&lt;br&gt;
&lt;em&gt;“I’m finally scaling without showing up.”&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwvenogx7su5xt3iqzm40.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwvenogx7su5xt3iqzm40.png" alt="minimal UI showing a sleek form filling up with responses in real time while the creator naps on a couch — soft sunlight coming in." width="490" height="362"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Related Series&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;This is Part 3 in our &lt;a href="https://codanyks.hashnode.dev/series/the-indie-stack" rel="noopener noreferrer"&gt;The Indie Stack&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://codanyks.hashnode.dev/indie-stack-solo-agency-process" rel="noopener noreferrer"&gt;The Indie Stack: Building Client Systems That Scale Without People&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://codanyks.hashnode.dev/service-like-saas" rel="noopener noreferrer"&gt;Service Like SaaS: Turning Projects into Predictable Income&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Previous Series You Might Love&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://codanyks.hashnode.dev/series/founder-fuel-weekend-systems" rel="noopener noreferrer"&gt;&lt;strong&gt;Founder Fuel: Weekend Systems for So&lt;/strong&gt;&lt;/a&gt;&lt;a href="https://codanyks.hashnode.dev/how-fiverr-empowers-solo-founders-to-delegate-and-scale-businesses" rel="noopener noreferrer"&gt;&lt;strong&gt;lo Builders&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://codanyks.hashnode.dev/how-fiverr-empowers-solo-founders-to-delegate-and-scale-businesses" rel="noopener noreferrer"&gt;&lt;strong&gt;Real-Time with Node.js: Web&lt;/strong&gt;&lt;/a&gt;&lt;a href="https://codanyks.hashnode.dev/scaling-without-hiring-fiverr-founders-guide-2025" rel="noopener noreferrer"&gt;&lt;strong&gt;Sock&lt;/strong&gt;&lt;/a&gt;&lt;a href="https://codanyks.hashnode.dev/how-fiverr-empowers-solo-founders-to-delegate-and-scale-businesses" rel="noopener noreferrer"&gt;&lt;strong&gt;ets&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://codanyks.hashnode.dev/how-fiverr-empowers-solo-founders-to-delegate-and-scale-businesses" rel="noopener noreferrer"&gt;&lt;strong&gt;Code the Core: DDD with Node.js&lt;/strong&gt; &lt;strong&gt;&amp;amp;&lt;/strong&gt; &lt;strong&gt;NestJS&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🤝 Let’s Connect
&lt;/h2&gt;

&lt;p&gt;Was this helpful? Share this article with your indie hacker or bootstrapped founder friends.&lt;/p&gt;

&lt;p&gt;Follow @&lt;a href="https://dev.to@codanyks"&gt;@codanyks&lt;/a&gt; on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;X: &lt;a href="https://x.com/codanyks" rel="noopener noreferrer"&gt;&lt;strong&gt;codanyks&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Instagram: &lt;a href="https://www.instagram.com/codanyks/" rel="noopener noreferrer"&gt;&lt;strong&gt;codanyks&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Threads: &lt;a href="https://www.threads.com/@codanyks" rel="noopener noreferrer"&gt;&lt;strong&gt;codanyks&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We build in public — come join the movement.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Some links may be affiliate links. We only recommend tools we use or believe in.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>codanyks</category>
      <category>learning</category>
      <category>tutorial</category>
      <category>tooling</category>
    </item>
    <item>
      <title>Service Like SaaS: Turning Projects into Predictable Income</title>
      <dc:creator>Codanyks</dc:creator>
      <pubDate>Tue, 03 Jun 2025 13:05:00 +0000</pubDate>
      <link>https://forem.com/codanyks/service-like-saas-turning-projects-into-predictable-income-11bn</link>
      <guid>https://forem.com/codanyks/service-like-saas-turning-projects-into-predictable-income-11bn</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;How solo founders can escape the custom-client grind by packaging services into scalable, repeatable flows&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Escaping the Custom-Client Grind
&lt;/h2&gt;

&lt;p&gt;For many creatives and technical minds, the journey begins with freedom.&lt;/p&gt;

&lt;p&gt;You ditch the 9–5.&lt;br&gt;
Land a few freelance clients.&lt;br&gt;
Build websites, design brands, write newsletters.&lt;br&gt;
Each project feels like a win — until it doesn't.&lt;/p&gt;

&lt;p&gt;Soon, every new client brings a new briefing process. New tools. New expectations. New ways of working. The very freedom you chased starts to vanish under a pile of calendar invites and Google Docs titled "&lt;strong&gt;v2_final_FINAL&lt;/strong&gt;".&lt;/p&gt;

&lt;p&gt;It's a trap: &lt;strong&gt;the custom-client loop.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;And to escape it, you don't need to scale up. You need to &lt;strong&gt;scale down — into clarity.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This is how solo founders flip their project-based chaos into a &lt;strong&gt;repeatable, productized service&lt;/strong&gt; — a system that runs smooth like SaaS, even if there's no code in sight.&lt;/p&gt;




&lt;h2&gt;
  
  
  🧱 Step 1: Define the Outcome, Not the Offering
&lt;/h2&gt;

&lt;p&gt;Ask ten freelancers what they offer, and you’ll get ten versions of:&lt;br&gt;
"&lt;em&gt;I help people with X&lt;/em&gt;".&lt;/p&gt;

&lt;p&gt;But clients don't buy help. They buy &lt;strong&gt;certainty&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;That's why service design doesn't start with a feature list or toolchain.&lt;br&gt;
It starts with a &lt;strong&gt;transformation&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Imagine someone landing on your website. Instead of reading fluff, they immediately understand:&lt;br&gt;
"If I pay you, &lt;em&gt;this&lt;/em&gt; will happen — and here's what I’ll walk away with."&lt;/p&gt;

&lt;p&gt;It’s the difference between:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  "&lt;em&gt;I'll design your brand&lt;/em&gt;"&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;vs&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  "&lt;em&gt;In 5 days, you'll walk away with a color palette, logo pack, and typography system — ready to plug into your site or pitch deck&lt;/em&gt;".&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It sounds obvious, but most freelancers avoid this specificity. They want room to "collaborate", to "customize", to "co-create".&lt;/p&gt;

&lt;p&gt;But ambiguity is what kills scale.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;🧠 Think on this: &lt;em&gt;What's a result you could deliver with 90% of the process identical every time — no matter who books you?&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That's your product. You just haven't packaged it yet.&lt;/p&gt;




&lt;h2&gt;
  
  
  🛤 Step 2: Niche by Format, Not Audience
&lt;/h2&gt;

&lt;p&gt;One common myth: to productize, you must niche &lt;em&gt;vertically&lt;/em&gt; — "I do SEO for dentists", or "Branding for crypto founders".&lt;/p&gt;

&lt;p&gt;But there's another path. And arguably, it's better for solo builders:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Niche by format.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Define a unique delivery method that you control — a sprint, a teardown, a playbook, a kit — and let your audience shape itself around it.&lt;/p&gt;

&lt;p&gt;You don't need to know &lt;em&gt;who&lt;/em&gt; you serve yet.&lt;br&gt;
You need to know &lt;em&gt;how&lt;/em&gt; you serve.&lt;/p&gt;

&lt;p&gt;Imagine:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;A UX designer who offers 48-hour audit sprints&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;A developer who delivers full-stack MVPs in one week&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;A video editor offering async YouTube launches with zero calls&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;They've built lanes. Those lanes attract traffic over time.&lt;br&gt;
The constraint becomes the magnet.&lt;/p&gt;




&lt;h3&gt;
  
  
  ⚠️ The Trap of Tool-First Thinking
&lt;/h3&gt;

&lt;p&gt;This is where many creators go wrong.&lt;/p&gt;

&lt;p&gt;They fall in love with tools — Notion templates, Figma kits, &lt;a href="https://tally.cello.so/0oaCRaYMw1a" rel="noopener noreferrer"&gt;Tally so&lt;/a&gt;, &lt;a href="https://typeform.cello.so/btjZcggRuc3" rel="noopener noreferrer"&gt;Typeform&lt;/a&gt;, Zapier flows — and mistake the tool for the service.&lt;/p&gt;

&lt;p&gt;But tools aren't the product. Tools are the &lt;em&gt;medium&lt;/em&gt; through which a transformation happens.&lt;/p&gt;

&lt;p&gt;Until you've defined the change you create, the tool you pick is irrelevant.&lt;br&gt;
Process first. Platform second.&lt;/p&gt;




&lt;h2&gt;
  
  
  🧩 Step 3: Build a Delivery Engine
&lt;/h2&gt;

&lt;p&gt;Now that you know the outcome — and you've framed it in a narrow, repeatable format — it's time to build the engine.&lt;/p&gt;

&lt;p&gt;Think of this as your internal operating system.&lt;/p&gt;

&lt;p&gt;Clients don't need to see all the gears. But the smoother it runs, the more scalable it becomes.&lt;/p&gt;

&lt;p&gt;Here's what a delivery engine might look like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;A short intake form with 5–7 questions&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;A structured kickoff message that auto-sends when the form's submitted&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;A 2- to 5-day async creation phase&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;A clean handoff process with documentation or assets&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;A feedback window (optional)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;A follow-up email 30 days later&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You're creating a track your service can glide down — not a maze to re-navigate every time.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;📌 Bonus: When your system is this clean, you can delegate parts later — without losing the soul of your service.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7ssxal2f06l6ern8fvdc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7ssxal2f06l6ern8fvdc.png" alt="Anime-style solo founder at a glowing control panel, operating a futuristic production line with holographic interfaces." width="665" height="375"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  🧘 Step 4: Invite Recurrence (Without Being Pushy)
&lt;/h2&gt;

&lt;p&gt;Most solo builders focus on landing &lt;em&gt;new&lt;/em&gt; clients.&lt;/p&gt;

&lt;p&gt;But long-term sustainability lives in &lt;strong&gt;follow-ups&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;You don't need to build a full-blown subscription model.&lt;br&gt;
You just need to create &lt;strong&gt;natural continuation points&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;If you're a designer, offer seasonal refreshes.&lt;br&gt;
If you're a dev, offer a "&lt;em&gt;check-in build&lt;/em&gt;" every 3 months.&lt;br&gt;
If you're a strategist, offer quarterly pivots.&lt;/p&gt;

&lt;p&gt;The key is rhythm. Not reinvention.&lt;/p&gt;

&lt;p&gt;Your first offer is the open door. Your second — and third — create the hallway.&lt;/p&gt;




&lt;blockquote&gt;
&lt;p&gt;🧠 Ask Yourself: &lt;em&gt;What would a 12-month relationship with your service look like — without it ever feeling like a retainer?&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  🔁 The Onboarding Moment
&lt;/h2&gt;

&lt;p&gt;The first thing a client sees after they pay says everything about your service.&lt;/p&gt;

&lt;p&gt;Confusion kills trust.&lt;br&gt;
Clarity builds momentum.&lt;/p&gt;

&lt;p&gt;So keep it simple.&lt;/p&gt;

&lt;p&gt;Send them a form.&lt;br&gt;
Tell them what’s next.&lt;br&gt;
Set expectations clearly.&lt;/p&gt;

&lt;p&gt;Don't overdo the onboarding. Just make it &lt;em&gt;smooth.&lt;/em&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  🧪 A Quick Tool You Can Try
&lt;/h3&gt;

&lt;p&gt;To simplify this stage, I use &lt;a href="https://tally.cello.so/0oaCRaYMw1a" rel="noopener noreferrer"&gt;Tally so&lt;/a&gt; — a clean, form-first tool that helps me onboard clients without fuss.&lt;/p&gt;

&lt;p&gt;But honestly?&lt;br&gt;&lt;br&gt;
You can use whatever you like — Google Forms, &lt;a href="https://typeform.cello.so/btjZcggRuc3" rel="noopener noreferrer"&gt;Typeform&lt;/a&gt;, even a shared doc.&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Tools don't matter unless the process is solid.&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;This isn't about the form. It's about building flow.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu9hgrk22vybpav1psspp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu9hgrk22vybpav1psspp.png" alt="A client entering a glowing doorway labeled " width="665" height="375"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  🧪 Bonus: Launch Before You Automate
&lt;/h2&gt;

&lt;p&gt;You don't need a full system to start.&lt;/p&gt;

&lt;p&gt;In fact, the fastest way to kill your momentum is over-engineering before you’ve sold anything.&lt;/p&gt;

&lt;p&gt;Instead:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Build a landing page with your offer&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Add a payment button&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Deliver manually the first few times&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Watch where you slow down&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Only then, add automation&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This way, your process &lt;em&gt;evolves&lt;/em&gt; instead of being imagined from thin air.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;You're not scaling chaos. You're polishing reality.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  ⚠️ Mistake to Avoid: "Polish Before Publish"
&lt;/h2&gt;

&lt;p&gt;Many builders delay for weeks trying to find the perfect tool stack, pricing, visuals, CRM — all before they’ve tested if &lt;em&gt;anyone&lt;/em&gt; wants the thing.&lt;/p&gt;

&lt;p&gt;Real validation happens in motion. Not in Notion.&lt;/p&gt;




&lt;h2&gt;
  
  
  💵 Pricing Like a Product
&lt;/h2&gt;

&lt;p&gt;When you turn a service into a system, you stop selling your time.&lt;/p&gt;

&lt;p&gt;You sell the certainty of an outcome, delivered on rails.&lt;/p&gt;

&lt;p&gt;That means:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;No hourly rates&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;No endless discovery calls&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;No "&lt;em&gt;price upon request&lt;/em&gt;" forms that lead nowhere&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You don't need 10 tiers. You need 1–2 crystal-clear options that remove friction.&lt;/p&gt;

&lt;p&gt;And most importantly — &lt;strong&gt;confidence.&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Confidence in what you deliver.&lt;br&gt;
Confidence in saying: &lt;em&gt;this is the price, because this is the result.&lt;/em&gt;&lt;/p&gt;




&lt;blockquote&gt;
&lt;p&gt;🧠 Reflect: Could a total stranger understand your offer — and feel safe paying you — without ever emailing you?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;If yes, you've productized.&lt;br&gt;
If not, you're still freelancing with extra steps.&lt;/p&gt;




&lt;h2&gt;
  
  
  🧘 Final Reflection
&lt;/h2&gt;

&lt;p&gt;You don't need a startup to build leverage.&lt;br&gt;
You don't need code to scale.&lt;br&gt;
You don't need a team to feel stable.&lt;/p&gt;

&lt;p&gt;You need:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;A system that creates value&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;A process that delivers results&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;A path that frees you from chaos&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This isn't about becoming a founder with investors and a burn rate.&lt;br&gt;
It's about being an artist who builds machines that serve others — and sustain yourself.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;And yes, you can still have fun doing it.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Related Series&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;This is Part 2 in our &lt;a href="https://codanyks.hashnode.dev/series/the-indie-stack" rel="noopener noreferrer"&gt;The Indie Stack&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; &lt;a href="https://codanyks.hashnode.dev/indie-stack-solo-agency-process" rel="noopener noreferrer"&gt;The Indie Stack: Building Client Systems That Scale Without People&lt;/a&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Previous Series You Might Love&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://codanyks.hashnode.dev/series/founder-fuel-weekend-systems" rel="noopener noreferrer"&gt;&lt;strong&gt;Founder Fuel: Weekend Systems for So&lt;/strong&gt;&lt;/a&gt;&lt;a href="https://codanyks.hashnode.dev/how-fiverr-empowers-solo-founders-to-delegate-and-scale-businesses" rel="noopener noreferrer"&gt;&lt;strong&gt;lo Builders&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://codanyks.hashnode.dev/how-fiverr-empowers-solo-founders-to-delegate-and-scale-businesses" rel="noopener noreferrer"&gt;&lt;strong&gt;Real-Time with Node.js: Web&lt;/strong&gt;&lt;/a&gt;&lt;a href="https://codanyks.hashnode.dev/scaling-without-hiring-fiverr-founders-guide-2025" rel="noopener noreferrer"&gt;&lt;strong&gt;Sock&lt;/strong&gt;&lt;/a&gt;&lt;a href="https://codanyks.hashnode.dev/how-fiverr-empowers-solo-founders-to-delegate-and-scale-businesses" rel="noopener noreferrer"&gt;&lt;strong&gt;ets&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://codanyks.hashnode.dev/how-fiverr-empowers-solo-founders-to-delegate-and-scale-businesses" rel="noopener noreferrer"&gt;&lt;strong&gt;Code the Core: DDD with Node.js&lt;/strong&gt; &lt;strong&gt;&amp;amp;&lt;/strong&gt; &lt;strong&gt;NestJS&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🤝 Let’s Connect
&lt;/h2&gt;

&lt;p&gt;Was this helpful? Share this article with your indie hacker or bootstrapped founder friends.&lt;/p&gt;

&lt;p&gt;Follow &lt;a href="https://dev.to/codanyks"&gt;@codanyks&lt;/a&gt; on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;X: &lt;a href="https://x.com/codanyks" rel="noopener noreferrer"&gt;&lt;strong&gt;codanyks&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Instagram: &lt;a href="https://www.instagram.com/codanyks/" rel="noopener noreferrer"&gt;&lt;strong&gt;codanyks&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Threads: &lt;a href="https://www.threads.com/@codanyks" rel="noopener noreferrer"&gt;&lt;strong&gt;codanyks&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We build in public — come join the movement.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Some links may be affiliate links. We only recommend tools we use or believe in.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>codanyks</category>
      <category>learning</category>
      <category>tutorial</category>
      <category>tooling</category>
    </item>
    <item>
      <title>The Indie Stack: Building Client Systems That Scale Without People</title>
      <dc:creator>Codanyks</dc:creator>
      <pubDate>Thu, 15 May 2025 15:30:00 +0000</pubDate>
      <link>https://forem.com/codanyks/the-indie-stack-building-client-systems-that-scale-without-people-cf5</link>
      <guid>https://forem.com/codanyks/the-indie-stack-building-client-systems-that-scale-without-people-cf5</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;"The most powerful tools are the ones that disappear into your flow".&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Most solo founders don't burn out from work.&lt;br&gt;
They burn out from &lt;strong&gt;operational chaos&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Endless back-and-forths. Missed follow-ups. Payment delays. Confused clients.&lt;br&gt;
Not because they aren’t talented — but because &lt;strong&gt;their business runs on memory&lt;/strong&gt; instead of systems.&lt;/p&gt;

&lt;p&gt;This article is not about tools.&lt;br&gt;
It’s about &lt;strong&gt;processes&lt;/strong&gt; you can shape to make your solo business feel like it runs itself.&lt;/p&gt;

&lt;p&gt;Tools are just clay. What matters is &lt;strong&gt;the mold&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  🧠 Part 1: Stop Thinking in Features. Think in Flows.
&lt;/h2&gt;

&lt;p&gt;Every solo creator needs to flip their mental model:&lt;br&gt;
Instead of asking "&lt;em&gt;What tool do I use for X?&lt;/em&gt;" ask "&lt;em&gt;What needs to happen every time a client comes in?&lt;/em&gt;"&lt;/p&gt;

&lt;h3&gt;
  
  
  Define the workflow, not the software:
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Trigger&lt;/th&gt;
&lt;th&gt;Outcome&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;A lead fills out your inquiry&lt;/td&gt;
&lt;td&gt;You know whether they’re a fit&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;A client says yes&lt;/td&gt;
&lt;td&gt;They get an onboarding package automatically&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;A payment is confirmed&lt;/td&gt;
&lt;td&gt;You're notified and the project is queued&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;A project is delivered&lt;/td&gt;
&lt;td&gt;A feedback loop is triggered&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;When these outcomes happen &lt;strong&gt;without your attention&lt;/strong&gt;, you've started to scale.&lt;/p&gt;

&lt;p&gt;(And you didn’t hire a single person.)&lt;/p&gt;




&lt;h2&gt;
  
  
  ⚙️ Part 2: The Four Systems of a Solo Agency
&lt;/h2&gt;

&lt;p&gt;You don't need 25 apps.&lt;br&gt;
You need &lt;strong&gt;four airtight systems&lt;/strong&gt; that run on repeat:&lt;/p&gt;




&lt;h3&gt;
  
  
  A. The Qualification System
&lt;/h3&gt;

&lt;p&gt;Before you start "working" — are you working with the &lt;em&gt;right&lt;/em&gt; people?&lt;/p&gt;

&lt;p&gt;A qualification system filters leads &lt;strong&gt;before they reach your inbox&lt;/strong&gt;. It doesn’t have to be complicated. You need:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A short form that collects intent, budget, and timing&lt;/li&gt;
&lt;li&gt;Logic to flag unqualified leads&lt;/li&gt;
&lt;li&gt;Auto-routing to the next step if they pass&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ft9crg81jdrtnjdh44bac.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ft9crg81jdrtnjdh44bac.png" alt="A flowchart showing a lead filling out a form → filters applied (budget, urgency, scope) → result: “qualified” or “not a fit”." width="800" height="595"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;A simple form with smart logic can filter 70% of time-wasters before they ever email you.&lt;/em&gt;&lt;br&gt;
&lt;em&gt;(Tools like &lt;a href="https://tally.cello.so/0oaCRaYMw1a" rel="noopener noreferrer"&gt;Tally.so&lt;/a&gt; or &lt;a href="https://typeform.cello.so/btjZcggRuc3" rel="noopener noreferrer"&gt;Typeform&lt;/a&gt; can quietly power this step.)&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h3&gt;
  
  
  B. The Onboarding Conveyor
&lt;/h3&gt;

&lt;p&gt;A common solo founder mistake:&lt;br&gt;
Manual onboarding every time.&lt;/p&gt;

&lt;p&gt;An onboarding conveyor does this once and reuses it forever:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Trigger: Lead gets accepted&lt;/li&gt;
&lt;li&gt;Outcome:

&lt;ul&gt;
&lt;li&gt;Welcome message&lt;/li&gt;
&lt;li&gt;Asset collection&lt;/li&gt;
&lt;li&gt;Payment link&lt;/li&gt;
&lt;li&gt;Project calendar invite&lt;/li&gt;
&lt;li&gt;FAQ / timeline overview&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwmgox1z4cchgo5d8g3om.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwmgox1z4cchgo5d8g3om.png" alt="Visual showing a conveyor belt of steps: client accepted → auto-email → payment form → project brief intake → scheduling link → kickoff document." width="800" height="372"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You don't need a VA. You need the first 7 steps to happen without you.&lt;/p&gt;




&lt;h3&gt;
  
  
  C. The Delivery Tracker
&lt;/h3&gt;

&lt;p&gt;This is your system of truth.&lt;br&gt;
It holds active clients, milestones, and what’s due this week — all in one view.&lt;/p&gt;

&lt;p&gt;Key principles:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;It should update itself when possible&lt;/li&gt;
&lt;li&gt;It should link to client-specific assets&lt;/li&gt;
&lt;li&gt;It should signal when something needs attention&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You could use a spreadsheet. Or a fancy workspace. Doesn’t matter.&lt;br&gt;
What matters is that your brain isn’t trying to juggle 9 clients at 2 AM.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5z0ebuz6gi726ttcxdpm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5z0ebuz6gi726ttcxdpm.png" alt="Top-down view of a solo creator’s project dashboard, showing cards labeled with client names, project stages, and deadlines." width="707" height="353"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  D. The Feedback + Retention Loop
&lt;/h3&gt;

&lt;p&gt;Most solo founders drop the ball after delivery.&lt;/p&gt;

&lt;p&gt;Here's what a good end-of-project system does:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Sends a thank-you note&lt;/li&gt;
&lt;li&gt;Asks for feedback/testimonial&lt;/li&gt;
&lt;li&gt;Offers the next step (retainer, support, product)&lt;/li&gt;
&lt;li&gt;Adds to a warm-leads list for future reach-outs&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ff3q7x71orikoapnex94s.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ff3q7x71orikoapnex94s.png" alt="A subtle loop diagram showing delivery → feedback → testimonial → upsell opportunity → audience list." width="800" height="484"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This is where &lt;strong&gt;solo agencies beat traditional ones&lt;/strong&gt; — they actually stay human.&lt;/p&gt;




&lt;h2&gt;
  
  
  🧩 Part 3: Systems Are Templates, Not Tools
&lt;/h2&gt;

&lt;p&gt;Each of the four systems above can be built using many tools.&lt;br&gt;
The point isn’t what you use. It’s how well your system works without you.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Want a smart intake flow? Great. Use whatever makes the form vanish.&lt;/em&gt;&lt;br&gt;
&lt;em&gt;(That’s why some creators pick &lt;a href="https://tally.cello.so/0oaCRaYMw1a" rel="noopener noreferrer"&gt;Tally.so&lt;/a&gt; — it doesn’t get in the way.)&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;You could swap it out for another tool — the outcome should stay the same.&lt;/p&gt;

&lt;p&gt;Let your systems be &lt;strong&gt;tool-agnostic but outcome-obsessed&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  🧵 Part 4: Stitching the Stack Together
&lt;/h2&gt;

&lt;p&gt;Here's what a real solo creator's stack might look like &lt;em&gt;when driven by systems&lt;/em&gt;:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmos3l25kt8z7a69f3dgy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmos3l25kt8z7a69f3dgy.png" alt="A side-scrolling, animated-style illustration of a pipeline: lead intake → onboarding → project queue → delivery → feedback." width="800" height="619"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You could fill in each step with tools you like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Intake: ???&lt;/li&gt;
&lt;li&gt;Onboarding: ???&lt;/li&gt;
&lt;li&gt;Project Queue: ???&lt;/li&gt;
&lt;li&gt;Delivery: ???&lt;/li&gt;
&lt;li&gt;Feedback loop: ???&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The question isn't "What should I use?"&lt;br&gt;
It's: "&lt;strong&gt;What should happen every time, without me?&lt;/strong&gt;"&lt;/p&gt;




&lt;h2&gt;
  
  
  When Tools Disappear, Flow Happens
&lt;/h2&gt;

&lt;p&gt;You can build an agency as a team of one.&lt;br&gt;
But only if your &lt;strong&gt;systems think like a team&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Don't scale tools. Don't scale tasks.&lt;br&gt;
&lt;strong&gt;Scale processes that let you breathe.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;To begin with, let me suggest your first tool — &lt;a href="https://tally.cello.so/0oaCRaYMw1a" rel="noopener noreferrer"&gt;Tally.so&lt;/a&gt; — to kickstart your system.&lt;br&gt;
It's just a suggestion. You're free to pick whatever fits your vibe.&lt;/p&gt;

&lt;p&gt;Now that you understand the architecture, you can fill in the stack &lt;strong&gt;your own way&lt;/strong&gt;, and &lt;strong&gt;build a flow&lt;/strong&gt; that feels like an extension of &lt;em&gt;you&lt;/em&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  Related Series Section
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://codanyks.hashnode.dev/series/founder-fuel-weekend-systems" rel="noopener noreferrer"&gt;Founder Fuel: Weekend Systems for Solo Builders&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://codanyks.hashnode.dev/series/real-time-nodejs-websockets" rel="noopener noreferrer"&gt;Real-Time with Node.js: WebSockets&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://codanyks.hashnode.dev/series/code-the-core-ddd-nodejs-nestjs" rel="noopener noreferrer"&gt;Code the Core: DDD with Node.js &amp;amp; NestJS&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Let’s Connect
&lt;/h2&gt;

&lt;p&gt;Was this helpful? Share this article with your indie hacker or bootstrapped founder friends.&lt;/p&gt;

&lt;p&gt;Follow &lt;a class="mentioned-user" href="https://dev.to/codanyks"&gt;@codanyks&lt;/a&gt; on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;X: &lt;a href="https://x.com/codanyks" rel="noopener noreferrer"&gt;codanyks&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Instagram: &lt;a href="https://www.instagram.com/codanyks/" rel="noopener noreferrer"&gt;codanyks&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Threads: &lt;a href="https://www.threads.com/@codanyks" rel="noopener noreferrer"&gt;codanyks&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We build in public — come join the movement.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Some links may be affiliate links. We only recommend tools we use or believe in.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>codanyks</category>
      <category>automation</category>
      <category>tooling</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>The Delegation Playbook for Solo Founders: Build Faster and Smarter in 2025</title>
      <dc:creator>Codanyks</dc:creator>
      <pubDate>Sun, 11 May 2025 13:52:56 +0000</pubDate>
      <link>https://forem.com/codanyks/the-delegation-playbook-for-solo-founders-build-faster-and-smarter-in-2025-1bm3</link>
      <guid>https://forem.com/codanyks/the-delegation-playbook-for-solo-founders-build-faster-and-smarter-in-2025-1bm3</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;A founder's guide to automating, outsourcing, and accelerating growth without burning out or bloating your team.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;What if the only thing standing between you and momentum wasn’t funding, a team, or time — but how well you delegate?&lt;/p&gt;

&lt;p&gt;Most founders think delegation starts after success. In reality, it's how you get there.&lt;/p&gt;

&lt;p&gt;You don't need a team. You need a system.&lt;/p&gt;

&lt;p&gt;Let's build yours.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why Most Solo Founders Stall After Launch
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcg5t0k82arkd83b0y4di.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcg5t0k82arkd83b0y4di.png" alt="A minimalistic illustration showing a single founder sitting at the center of a circular workspace surrounded by floating tools — a bug icon, a webpage mockup, a content scroll, an email envelope, and a code snippet — all orbiting around them like satellites. The founder appears slightly overwhelmed, juggling the items mid-air with visible tension. " width="577" height="433"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You've built your MVP. Maybe even gotten your first 100 users. But growth? Feels like a slog.&lt;/p&gt;

&lt;p&gt;Why?&lt;/p&gt;

&lt;p&gt;Because everything — landing page updates, content creation, onboarding emails, bug fixes — routes back to you.&lt;/p&gt;

&lt;p&gt;It's not burnout. It's bottleneck.&lt;/p&gt;

&lt;p&gt;And the way out isn't hiring a team. It's installing a repeatable delegation pipeline.&lt;/p&gt;

&lt;p&gt;You don't need 5 employees. You need 5 repeatable moves.&lt;/p&gt;

&lt;p&gt;Let's break them down.&lt;/p&gt;




&lt;h2&gt;
  
  
  1. Build Your Bench Before You Need It
&lt;/h2&gt;

&lt;p&gt;Great founders don't wait for chaos to hire help.&lt;/p&gt;

&lt;p&gt;Create a private swipe file of &lt;a href="https://go.fiverr.com/visit/?bta=1121364&amp;amp;nci=17044" rel="noopener noreferrer"&gt;Fiverr&lt;/a&gt; freelancers you trust — designers, editors, copywriters, devs. Tag them by use case: Launch, Growth, Polish.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;"Don't find help when you're drowning. Build your boat before the storm."&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1ei5rj2okka9mssayg1y.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1ei5rj2okka9mssayg1y.png" alt="A founder standing in the foreground holding a clipboard while several diverse silhouettes of freelancers (designer, developer, marketer, writer) wait on a bench in the background like athletes ready to play." width="707" height="353"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Do a dry run. Hire a designer for a test task. Evaluate their process. Save the great ones.&lt;/p&gt;

&lt;p&gt;Now when you hit a bottleneck, your help is one message away.&lt;/p&gt;




&lt;h2&gt;
  
  
  2. Productize Your Tasks
&lt;/h2&gt;

&lt;p&gt;Stop treating every new job like a one-off. Start turning recurring work into templates:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Design handoffs? Use a Notion SOP with screenshots + moodboards.&lt;/li&gt;
&lt;li&gt;Blog post briefs? Turn your last brief into a reusable prompt.&lt;/li&gt;
&lt;li&gt;Bug reports? Use a Loom + GitHub combo that scales.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The key to scalable delegation is predictable inputs = predictable outputs.&lt;/p&gt;

&lt;p&gt;Once you've productized the task, anyone can do it with 80% of your brainpower — while you use yours on growth.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F72tyelnun9djba1an5ou.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F72tyelnun9djba1an5ou.png" alt="A simple, top-down view of a founder’s desk where complex, messy items (papers, cables, sticky notes) are being transformed into clean, labeled icons inside small modular boxes — like converting chaos into Lego bricks. A robotic arm places each box on a conveyor belt." width="707" height="353"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  3. Operate in Sprints, Not Chaos
&lt;/h2&gt;

&lt;p&gt;Instead of juggling 10 freelancers every week, plan biweekly or monthly sprints.&lt;/p&gt;

&lt;p&gt;Think like a mini studio:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Sprint 1&lt;/strong&gt;: Revamp landing page + launch demo video.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sprint 2&lt;/strong&gt;: 3 blog posts + 1 social promo asset.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sprint 3&lt;/strong&gt;: Fix UX bugs + user feedback improvements.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Time-boxed delegation prevents decision fatigue and burnout. You're not hiring random help. You're running a system.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5hwsm15bedtvyd1mew1b.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5hwsm15bedtvyd1mew1b.png" alt="A small, confident figure (the founder) is running in structured intervals, clearly marked lanes, each lane representing a project phase (design, build, ship). Around the track, messy unstructured paths fade into the background." width="707" height="353"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  4. Track Output, Not Time
&lt;/h2&gt;

&lt;p&gt;Don't worry if your editor is in Poland or your dev is in Thailand.&lt;/p&gt;

&lt;p&gt;Set clear deliverables and review points:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Use Trello, Notion, or even Google Sheets to manage projects.&lt;/li&gt;
&lt;li&gt;Link Loom explainer videos for async clarity.&lt;/li&gt;
&lt;li&gt;Use Canva/Figma for commenting instead of long feedback emails.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You're not building a team culture. You're building a productivity engine.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsiora3ecgvys0dtffll6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsiora3ecgvys0dtffll6.png" alt="The screen shows charts with " width="707" height="353"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  5. Create a Delegation Flywheel
&lt;/h2&gt;

&lt;p&gt;Delegation compounds.&lt;/p&gt;

&lt;p&gt;The first brief takes 2 hours. The next one? 15 minutes. Eventually, your content writer knows your voice. Your designer anticipates your palette.&lt;/p&gt;

&lt;p&gt;What started as "outsourcing" becomes momentum.&lt;/p&gt;

&lt;p&gt;Here's a sample solo founder flywheel:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Design Library&lt;/strong&gt; → Used in 3 product launches.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Copy Templates&lt;/strong&gt; → Speed up marketing by 50%.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Freelancer Roster&lt;/strong&gt; → Ready for future builds.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And the cost? Still less than hiring 1 full-time junior employee.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmckfww3gtvmhfne06k8y.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmckfww3gtvmhfne06k8y.png" alt="A glowing flywheel mechanism made of interconnected task cards (like design, marketing, copywriting) spinning smoothly around a calm, center-positioned founder. Each segment of the flywheel has a small icon and color-coded arrow showing motion and efficiency." width="707" height="353"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Scenario: Scaling a Micro-SaaS With 3 Hires
&lt;/h2&gt;

&lt;p&gt;Sam, a solo founder in Jakarta, launched a Chrome extension that gained 10k users.&lt;/p&gt;

&lt;p&gt;He wanted to go paid — but didn’t have the polish.&lt;/p&gt;

&lt;p&gt;In 10 days, he:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Hired a UX expert to optimize his onboarding.&lt;/li&gt;
&lt;li&gt;Got a designer to create 4 polished screenshots.&lt;/li&gt;
&lt;li&gt;Commissioned a YouTube-style launch video.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Result? $2,400 MRR in the first 30 days of his paid plan.&lt;/p&gt;

&lt;p&gt;Not from working harder. But from getting out of his own way.&lt;/p&gt;




&lt;h2&gt;
  
  
  Closing Shift: Build Systems, Not Stress
&lt;/h2&gt;

&lt;p&gt;You’ve read about delegation.&lt;/p&gt;

&lt;p&gt;You’ve seen how founders are scaling without adding headcount.&lt;/p&gt;

&lt;p&gt;So now what?&lt;/p&gt;

&lt;p&gt;Build your system:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Assemble your &lt;a href="https://go.fiverr.com/visit/?bta=1121364&amp;amp;nci=17044" rel="noopener noreferrer"&gt;Fiverr&lt;/a&gt; roster.&lt;/li&gt;
&lt;li&gt;Create SOPs and briefs that scale.&lt;/li&gt;
&lt;li&gt;Run async, outcome-based projects.&lt;/li&gt;
&lt;li&gt;Turn delegation into your second brain.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Remember — the solo founder who wins in 2025 isn’t the one who does it all.&lt;/p&gt;

&lt;p&gt;It’s the one who designs how it all gets done.&lt;/p&gt;

&lt;p&gt;You don’t need to be Iron Man. Just build your Jarvis.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqptrjqifz5xy4zds1mu9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqptrjqifz5xy4zds1mu9.png" alt="The founder stands calmly in the center, reaching toward a glowing holographic interface (symbolizing a custom-built system). Behind and around them, semi-transparent Jarvis-like UI panels float — showcasing automation, SOPs, and project flows." width="707" height="353"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Related Series
&lt;/h2&gt;

&lt;p&gt;This is Part 3 in our Founder Fuel: Weekend Systems for Solo Builders series:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://codanyks.hashnode.dev/how-fiverr-empowers-solo-founders-to-delegate-and-scale-businesses" rel="noopener noreferrer"&gt;You Don’t Need to Do Everything: How Developers Can Delegate Without Hiring Full-Time&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://codanyks.hashnode.dev/scaling-without-hiring-fiverr-founders-guide-2025" rel="noopener noreferrer"&gt;Leveling Up Solo: How Founders Are Scaling Without Full-Time Hires in 2025&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;The Delegation Playbook for Solo Founders: Build Faster and Smarter in 2025&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Previous Series You Might Love
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://codanyks.hashnode.dev/series/real-time-nodejs-websockets" rel="noopener noreferrer"&gt;Real-Time with Node.js: WebSockets&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://codanyks.hashnode.dev/series/code-the-core-ddd-nodejs-nestjs" rel="noopener noreferrer"&gt;Code the Core: DDD with Node.js &amp;amp; NestJS&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Let's Connect
&lt;/h2&gt;

&lt;p&gt;Was this helpful? Share this article with your indie hacker or bootstrapped founder friends.&lt;/p&gt;

&lt;p&gt;Follow &lt;a class="mentioned-user" href="https://dev.to/codanyks"&gt;@codanyks&lt;/a&gt; on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;X: &lt;a href="https://x.com/codanyks" rel="noopener noreferrer"&gt;codanyks&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Instagram: &lt;a href="https://www.instagram.com/codanyks/" rel="noopener noreferrer"&gt;codanyks&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Threads: &lt;a href="https://www.threads.com/@codanyks" rel="noopener noreferrer"&gt;codanyks&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We build in public — come join the movement.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Some links may be affiliate links. We only recommend tools we use or believe in.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>codanyks</category>
      <category>tutorial</category>
      <category>tooling</category>
      <category>productivity</category>
    </item>
  </channel>
</rss>
