<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:googleplay="http://www.google.com/schemas/play-podcasts/1.0"><channel><title><![CDATA[The Buildup]]></title><description><![CDATA[We make tech projects and bring builders together.

Weekly newsletter about technical experiments, project updates, and tech trends.

Join IRL events and daily chat with other makers.]]></description><link>https://www.thebuildup.dev</link><image><url>https://substackcdn.com/image/fetch/$s_!sUex!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d9ba966-2178-478a-b25e-3e58cc78b393_1024x1024.png</url><title>The Buildup</title><link>https://www.thebuildup.dev</link></image><generator>Substack</generator><lastBuildDate>Sat, 04 Apr 2026 12:36:54 GMT</lastBuildDate><atom:link href="https://www.thebuildup.dev/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[Robin]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[thebuildupdev@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[thebuildupdev@substack.com]]></itunes:email><itunes:name><![CDATA[Robin]]></itunes:name></itunes:owner><itunes:author><![CDATA[Robin]]></itunes:author><googleplay:owner><![CDATA[thebuildupdev@substack.com]]></googleplay:owner><googleplay:email><![CDATA[thebuildupdev@substack.com]]></googleplay:email><googleplay:author><![CDATA[Robin]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[5 mistakes we made building an MCP server (so you don't have to)]]></title><description><![CDATA[We connected Notion, Linear, GitHub, Slack, and emails to Claude via MCP. It was supposed to save hours. Instead, it taught us how badly we understood what LLMs actually need.]]></description><link>https://www.thebuildup.dev/p/5-mistakes-we-made-building-an-mcp</link><guid isPermaLink="false">https://www.thebuildup.dev/p/5-mistakes-we-made-building-an-mcp</guid><dc:creator><![CDATA[Augustin]]></dc:creator><pubDate>Thu, 19 Feb 2026 11:04:13 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!dt-E!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffffad644-1f29-4c99-af39-216aae306e6f_1280x720.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!dt-E!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffffad644-1f29-4c99-af39-216aae306e6f_1280x720.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!dt-E!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffffad644-1f29-4c99-af39-216aae306e6f_1280x720.jpeg 424w, https://substackcdn.com/image/fetch/$s_!dt-E!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffffad644-1f29-4c99-af39-216aae306e6f_1280x720.jpeg 848w, https://substackcdn.com/image/fetch/$s_!dt-E!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffffad644-1f29-4c99-af39-216aae306e6f_1280x720.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!dt-E!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffffad644-1f29-4c99-af39-216aae306e6f_1280x720.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!dt-E!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffffad644-1f29-4c99-af39-216aae306e6f_1280x720.jpeg" width="1280" height="720" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/fffad644-1f29-4c99-af39-216aae306e6f_1280x720.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:720,&quot;width&quot;:1280,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:76704,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://www.thebuildup.dev/i/187874629?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffffad644-1f29-4c99-af39-216aae306e6f_1280x720.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!dt-E!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffffad644-1f29-4c99-af39-216aae306e6f_1280x720.jpeg 424w, https://substackcdn.com/image/fetch/$s_!dt-E!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffffad644-1f29-4c99-af39-216aae306e6f_1280x720.jpeg 848w, https://substackcdn.com/image/fetch/$s_!dt-E!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffffad644-1f29-4c99-af39-216aae306e6f_1280x720.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!dt-E!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffffad644-1f29-4c99-af39-216aae306e6f_1280x720.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>I got tired of being the guy who knows where things are.</p><p>Every week, Robin, my co-founder at <a href="https://moqa.studio/">Moqa Studio</a> pings me: "Where's the API spec?". It&#8217;s in Notion. &#8220;Did the client reply about the deadline?&#8221; Check Gmail. &#8220;What&#8217;s the status on that bug?&#8221; Linear. &#8220;Did you mention something about the auth flow?&#8221; Probably Slack, maybe two weeks ago.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.thebuildup.dev/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading The Buildup! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p>I was the human search engine across five tools. And I hated it.</p><p>So I did what any developer would do, I over-engineered a solution. I built a Python MCP server that connects Claude directly to our entire knowledge base: Notion, Linear, GitHub, Slack, and Gmail. One interface. Ask a question, get an answer from wherever the information lives.</p><p>It took a weekend to get it running. It took three more weeks to make it actually work. Because the prototype was terrible, and I didn&#8217;t realize it until we started using it.</p><p>Here&#8217;s every mistake I made.</p><div><hr></div><h2>1: We wrapped every API endpoint as a tool</h2><p>Our first instinct, expose every useful endpoint as its own MCP tool. Small, composable, RESTful. We&#8217;d been building APIs for years, this felt natural.</p><pre><code><code># &#10060; Our first attempt &#8212; 23 tools
@server.tool()
async def notion_search_pages(query: str) -&gt; str:
    """Search Notion pages."""
    ...

@server.tool()
async def notion_get_page(page_id: str) -&gt; str:
    """Get a Notion page by ID."""
    ...

@server.tool()
async def linear_list_issues(team_id: str) -&gt; str:
    """List Linear issues for a team."""
    ...

@server.tool()
async def slack_search_messages(query: str) -&gt; str:
    """Search Slack messages."""
    ...

# ... 19 more tools like this
</code></code></pre><p>We had 23 tools. It was a disaster.</p><p>When a user asked &#8220;What&#8217;s the latest on this project?&#8221;, Claude had to read all 23 tool descriptions (~10,000 tokens just for the catalog), pick which to call, orchestrate multiple round-trips, and keep all intermediate results in memory.</p><p>What actually happened? Claude picked 2-3 tools, ignored the rest, and hallucinated the gaps. Every conversation was inconsistent.</p><h3>The Fix</h3><p>We collapsed 23 tools into 7 outcome-oriented ones.</p><pre><code><code># &#9989; After: one tool replaces five API calls
@server.tool()
async def get_project_status(project_name: str) -&gt; str:
    """Get a complete status overview of a project.
    Use when the user asks about progress, status, or updates.
    Returns: open tickets, recent commits, latest docs, 
    and recent discussions &#8212; all in one call.
    """
    return {
        "linear": await _get_project_tickets(project_name),
        "github": await _get_recent_commits(project_name),
        "notion": await _get_project_docs(project_name),
        "slack": await _get_recent_discussions(project_name),
    }
</code></code></pre><p>The orchestration happens in our code, not in the LLM&#8217;s context window. One call instead of five.</p><p><strong>Rule:</strong> if the agent needs to chain 3+ tools to answer a common question, you need a higher-level tool.</p><div><hr></div><h2>2: Our Tool descriptions were written for engineers</h2><p>We wrote descriptions the way we&#8217;d write code comments:</p><pre><code><code>@server.tool()
async def search_knowledge_base(query: str) -&gt; str:
    """Search the knowledge base."""
    ...
</code></code></pre><p>Claude kept ignoring this tool. A user asked &#8220;Find the API documentation for the payment module&#8221; and Claude answered from memory instead of searching. Confidently wrong.</p><h3>The Fix</h3><pre><code><code>@server.tool()
async def search_knowledge_base(
    query: str,
    sources: list[str] = ["notion", "linear", "github", "slack", "gmail"],
    limit: int = 10
) -&gt; str:
    """Search across the company knowledge base for any information 
    about projects, clients, technical decisions, or internal discussions.
    
    Use this as your FIRST tool when the user asks about any topic. 
    Searches Notion docs, Linear tickets, GitHub repos, 
    Slack conversations, and email threads simultaneously.
    
    Returns a ranked list with: source, title, snippet, date, 
    relevance score, and doc_id for fetching full content.
    
    Examples of when to use this:
    - "What did we decide about the authentication approach?"
    - "Find everything related to the latest project"
    - "Any emails from the client about the deadline?"
    """
    ...
</code></code></pre><p>Three things: <strong>when to use it</strong> (&#8221;FIRST tool when...&#8221;), <strong>domain-specific terms</strong> (projects, clients, Notion, Linear), <strong>what comes back</strong> (exact return shape).</p><p>Tool selection accuracy went from ~60% to ~95%.</p><blockquote><p>Treat tool descriptions like product copy. You&#8217;re selling the tool to an LLM.</p></blockquote><div><hr></div><h2>3: Raw API responses murdered the context window</h2><p>Our tools returned whatever the API gave us. A Notion page? Full JSON with blocks, properties, metadata, permissions, audit history. A single page was returning 8,000+ tokens.</p><pre><code><code># &#10060; Returning raw API response
@server.tool()
async def get_document(source: str, doc_id: str) -&gt; str:
    if source == "notion":
        page = await notion.pages.retrieve(doc_id)
        blocks = await notion.blocks.children.list(doc_id)
        return json.dumps({"page": page, "blocks": blocks})  # 8,000+ tokens &#128128;
</code></code></pre><p>Three pages = 24,000 tokens of raw JSON. Claude would read the first document and hallucinate the rest. Research confirms this: when the context window saturates, the model doesn&#8217;t gracefully degrade, it <strong>selectively forgets</strong> earlier tokens.</p><h3>The Fix</h3><p>Extract only what Claude needs:</p><pre><code><code># &#9989; Curated, token-efficient responses
@server.tool()
async def get_document(source: str, doc_id: str) -&gt; str:
    if source == "notion":
        page = await notion.pages.retrieve(doc_id)
        blocks = await notion.blocks.children.list(doc_id)
        return json.dumps({
            "title": _extract_title(page),
            "last_edited": page["last_edited_time"],
            "content": _blocks_to_text(blocks),  # Plain text, no JSON nesting
            "tags": _extract_tags(page),
        })  # ~800 tokens &#9989;
</code></code></pre><p>Same for Linear &#8212; full API response was ~3,000 tokens. After curation: ~300 tokens. 90% reduction. Claude could now handle 10+ documents in a single conversation.</p><blockquote><p>Never return raw API payloads. Curate the output like you&#8217;re designing a dashboard.</p></blockquote><div><hr></div><h2>4: The agent made random tool calls without workflow instructions</h2><p>Even with good tools and descriptions, Claude&#8217;s behavior was a coin flip. Sometimes it searched first, then fetched details. Other times it skipped search entirely and guessed a doc_id. No predictable pattern.</p><p>We assumed Claude would figure out the right workflow. It didn&#8217;t. LLMs don&#8217;t have a mental model of your system.</p><h3>The Fix</h3><p>Explicit workflow instructions, embedded directly in descriptions:</p><pre><code><code>@server.tool()
async def get_document(source: str, doc_id: str) -&gt; str:
    """Fetch the full content of a specific document, ticket, or thread.
    
    Use AFTER search_knowledge_base when you need complete content 
    of a specific result. The doc_id comes from search results.
    
    Do NOT call this tool without first searching &#8212; you need a valid doc_id.
    """
</code></code></pre><p>That last line, <code>"Do NOT call this tool without first searching"</code>, reduced hallucinated doc_id calls by ~80%.</p><p>We also added a system-level workflow:</p><pre><code><code>SYSTEM_INSTRUCTIONS = """
WORKFLOW for answering questions about the company:
1. ALWAYS start with search_knowledge_base
2. Use get_document to fetch full content of top 2-3 results
3. For project overviews, use get_project_status instead
4. NEVER guess or use training data for company-specific questions
"""
</code></code></pre><div><hr></div><h2>5: We almost shipped without auth on a multi-Client server</h2><p>This one still makes me uncomfortable.</p><p>Our first deployment ran on a shared server. One MCP instance, connected to all our tools, accessible by anyone on the team. Anyone asking about a project could theoretically pull up confidential client emails or private Slack channels from any workspace.</p><p>We didn&#8217;t think about it because during development, everything was local. <code>stdio</code> transport, our own laptops, our own credentials. Worked perfectly.</p><h3>The Fix</h3><p>Three changes:</p><ol><li><p><strong>Per-user credentials.</strong> Each user connects with their own OAuth tokens. No shared service accounts.</p></li><li><p><strong>Scoped access.</strong> Tools only return data from workspaces the user already has access to.</p></li><li><p><strong>Read-only by default.</strong> No write operations. No creating tickets, no sending emails. If we add writes later, every one requires explicit user confirmation.</p></li></ol><blockquote><p>The moment you move from local to remote deployment, you need auth, scoping, and audit logging. Day one.</p></blockquote><div><hr></div><h2>The Checklist</h2><p>If I were starting over:</p><ul><li><p>Map the 5-7 most common questions your team asks across tools, design tools around those</p></li><li><p>Start with 5 tools max. Add more only when you see a clear gap</p></li><li><p>Write descriptions first (400+ chars, domain-specific), implement handlers second</p></li><li><p>Return curated responses, never raw API payloads</p></li><li><p>Embed workflow instructions in descriptions</p></li><li><p>Per-user auth from day one, read-only by default</p></li><li><p>Test by asking real questions, not by checking if API calls succeed</p></li></ul><p>Our 7 tools now cover ~90% of the questions the team was asking. The remaining 10% can wait.</p><div><hr></div><h2>Final Thought</h2><p>Building an MCP server isn&#8217;t an infrastructure project. It&#8217;s a product design project for a non-human user.</p><p>The protocol works fine. Your server probably doesn&#8217;t. Ours didn&#8217;t either, until we stopped thinking like API engineers and started thinking like designers building for a user that reads every word you write, but doesn&#8217;t understand any of it the way you do.<br><br>We've since deployed variations of this setup for client projects at <a href="https://moqa.studio/">Moqa Studio</a>, same patterns, different tool stacks. The checklist holds up every time.<br></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.thebuildup.dev/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading The Buildup! If this kind of behind the scenes breakdown is useful, let us know in the comments.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[The workflow that changed how I build features]]></title><description><![CDATA[A practical guide to Claude Code]]></description><link>https://www.thebuildup.dev/p/the-workflow-that-changed-how-i-build</link><guid isPermaLink="false">https://www.thebuildup.dev/p/the-workflow-that-changed-how-i-build</guid><dc:creator><![CDATA[Robin]]></dc:creator><pubDate>Thu, 18 Dec 2025 15:21:48 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/0f4cf17b-b9c4-4ee0-a8ae-30e55e90e231_1920x1080.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!pR8Y!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa46297e8-d402-415b-ab10-7c62f6560feb_1920x1080.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!pR8Y!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa46297e8-d402-415b-ab10-7c62f6560feb_1920x1080.jpeg 424w, https://substackcdn.com/image/fetch/$s_!pR8Y!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa46297e8-d402-415b-ab10-7c62f6560feb_1920x1080.jpeg 848w, https://substackcdn.com/image/fetch/$s_!pR8Y!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa46297e8-d402-415b-ab10-7c62f6560feb_1920x1080.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!pR8Y!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa46297e8-d402-415b-ab10-7c62f6560feb_1920x1080.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!pR8Y!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa46297e8-d402-415b-ab10-7c62f6560feb_1920x1080.jpeg" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a46297e8-d402-415b-ab10-7c62f6560feb_1920x1080.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1645186,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://www.thebuildup.dev/i/181970529?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa46297e8-d402-415b-ab10-7c62f6560feb_1920x1080.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!pR8Y!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa46297e8-d402-415b-ab10-7c62f6560feb_1920x1080.jpeg 424w, https://substackcdn.com/image/fetch/$s_!pR8Y!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa46297e8-d402-415b-ab10-7c62f6560feb_1920x1080.jpeg 848w, https://substackcdn.com/image/fetch/$s_!pR8Y!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa46297e8-d402-415b-ab10-7c62f6560feb_1920x1080.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!pR8Y!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa46297e8-d402-415b-ab10-7c62f6560feb_1920x1080.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Whether you&#8217;re new to Claude Code or feel like you&#8217;ve been using it wrong, you&#8217;re in the right place.</p><p>Most developers approach it the same way:<br><strong>&#8594;</strong> &#8220;Build feature X&#8221; <br><strong>&#8594;</strong> Get messy output <br><strong>&#8594;</strong> Conclude the tool isn&#8217;t ready. <br>I was one of them until I fundamentally changed my approach.</p><p>Here&#8217;s the thing about being a developer: you&#8217;re constantly learning. New frameworks, new patterns, new tools. Most bring incremental improvements. But every once in a while, something fundamentally reshapes how you work.</p><p>Claude Code was that for me.</p><p>In this guide, I&#8217;ll walk you through the workflow that transformed my development process: setting up persistent context, mastering Plan Mode, and configuring specialized subagents.</p><p>This isn&#8217;t an exhaustive exploration of everything Claude Code can do. It&#8217;s a practical guide focused on what actually works well for me day to day.</p><p>Let&#8217;s dive in. &#129343;</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.thebuildup.dev/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading The Buildup! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p><h2>What is Claude Code, really?</h2><p>Here&#8217;s the crucial mindset shift: <strong>visualize</strong> <strong>Claude Code as a developer tool</strong>, not a magic box that does everything for you.</p><p>It can be incredibly effective when used well. It can also mess up codebases when used poorly. The difference lies entirely in your approach.</p><p></p><h2>Core principles for success</h2><p>Three elements make the difference between frustration and flow:</p><ol><li><p><strong>The claude.md file</strong> for persistent project context</p></li><li><p><strong>Plan Mode</strong> for thinking before building</p></li><li><p><strong>Specialized subagents</strong> for delegating to the right expert</p></li></ol><p>Get these right, and Claude Code becomes a genuinely powerful part of your toolkit. Let&#8217;s break them down.</p><h3>1. A good claude.md file</h3><p>First thing: set up a <code>claude.md</code> file in your project root. Think of this as a persistent guide that Claude references on almost every prompt.</p><p>What belongs in there?</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!89hT!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6c5a2be9-61cb-4031-88da-dbf6395aec22_1250x566.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!89hT!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6c5a2be9-61cb-4031-88da-dbf6395aec22_1250x566.png 424w, https://substackcdn.com/image/fetch/$s_!89hT!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6c5a2be9-61cb-4031-88da-dbf6395aec22_1250x566.png 848w, https://substackcdn.com/image/fetch/$s_!89hT!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6c5a2be9-61cb-4031-88da-dbf6395aec22_1250x566.png 1272w, https://substackcdn.com/image/fetch/$s_!89hT!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6c5a2be9-61cb-4031-88da-dbf6395aec22_1250x566.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!89hT!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6c5a2be9-61cb-4031-88da-dbf6395aec22_1250x566.png" width="1250" height="566" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6c5a2be9-61cb-4031-88da-dbf6395aec22_1250x566.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:566,&quot;width&quot;:1250,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:305846,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://www.thebuildup.dev/i/181970529?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6c5a2be9-61cb-4031-88da-dbf6395aec22_1250x566.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!89hT!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6c5a2be9-61cb-4031-88da-dbf6395aec22_1250x566.png 424w, https://substackcdn.com/image/fetch/$s_!89hT!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6c5a2be9-61cb-4031-88da-dbf6395aec22_1250x566.png 848w, https://substackcdn.com/image/fetch/$s_!89hT!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6c5a2be9-61cb-4031-88da-dbf6395aec22_1250x566.png 1272w, https://substackcdn.com/image/fetch/$s_!89hT!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6c5a2be9-61cb-4031-88da-dbf6395aec22_1250x566.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>The more context here, the less you repeat yourself. Update it as your project evolves.</p><h3>2. Plan Mode: think before you build</h3><p>With your claude.md in place, you&#8217;re ready for the next piece of the puzzle: how you actually build features.</p><p>This is the cornerstone of using Claude Code properly.</p><p>It&#8217;s tempting to ask Claude to &#8220;implement feature X&#8221; directly. Don&#8217;t.</p><p>For complex features, this rarely works well. The code might function, but it lacks coherence with your existing architecture.</p><p><strong>Why?</strong> When you jump straight to implementation, Claude makes assumptions about your architecture, naming conventions, and patterns. These assumptions compound. You end up with code that technically works but feels foreign to your codebase.</p><p><strong>The fix: Plan Mode.</strong></p><p>Toggle it by pressing <code>Shift + Tab</code> twice. Describe the feature you want in detail. Claude will analyze your codebase and draft a structured plan.</p><p>Here&#8217;s the key: read that plan carefully. Iterate on it. Ask Claude to break it down into ordered implementation tasks. This step is where you save hours of refactoring later.</p><h3>3. Specialized subagents</h3><p>Once you have a solid plan, here&#8217;s where things get really powerful: specialized subagents.</p><p>These handle different parts of your codebase. Each subagent operates in its own context window, keeping your main conversation clean and focused.</p><p>Think of them as specialized team members. You wouldn&#8217;t ask your backend developer to handle your design system. Same logic here.</p><p><strong>Common configurations:</strong></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!yMHD!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fafe96f59-da64-4dc0-adfe-b77ac2f3847b_1244x482.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!yMHD!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fafe96f59-da64-4dc0-adfe-b77ac2f3847b_1244x482.png 424w, https://substackcdn.com/image/fetch/$s_!yMHD!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fafe96f59-da64-4dc0-adfe-b77ac2f3847b_1244x482.png 848w, https://substackcdn.com/image/fetch/$s_!yMHD!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fafe96f59-da64-4dc0-adfe-b77ac2f3847b_1244x482.png 1272w, https://substackcdn.com/image/fetch/$s_!yMHD!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fafe96f59-da64-4dc0-adfe-b77ac2f3847b_1244x482.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!yMHD!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fafe96f59-da64-4dc0-adfe-b77ac2f3847b_1244x482.png" width="1244" height="482" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/afe96f59-da64-4dc0-adfe-b77ac2f3847b_1244x482.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:482,&quot;width&quot;:1244,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:257662,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://www.thebuildup.dev/i/181970529?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fafe96f59-da64-4dc0-adfe-b77ac2f3847b_1244x482.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!yMHD!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fafe96f59-da64-4dc0-adfe-b77ac2f3847b_1244x482.png 424w, https://substackcdn.com/image/fetch/$s_!yMHD!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fafe96f59-da64-4dc0-adfe-b77ac2f3847b_1244x482.png 848w, https://substackcdn.com/image/fetch/$s_!yMHD!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fafe96f59-da64-4dc0-adfe-b77ac2f3847b_1244x482.png 1272w, https://substackcdn.com/image/fetch/$s_!yMHD!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fafe96f59-da64-4dc0-adfe-b77ac2f3847b_1244x482.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><p><strong>How to set up subagents</strong> Setting up subagents is straightforward. Run <code>/agents</code> in Claude Code to open the management interface. From there you can create new agents at project level (stored in <code>.claude/agents/</code>) or user level (stored in <code>~/.claude/agents/</code>).</p><p>Each subagent is a Markdown file with YAML frontmatter:</p><pre><code><code>---
name: frontend dev
description: Frontend specialist. Use for React components, styling, and state management.
tools: Read, Edit, Bash, Grep, Glob
model: sonnet
---

You are a frontend expert specializing in React and TypeScript.

When invoked:
1. Review the component requirements
2. Check existing patterns in the codebase
3. Implement following established conventions
4. Ensure proper typing and error handling

Focus on clean, maintainable component architecture.
</code></code></pre><p><strong>Pro tip</strong>: Let Claude generate the initial subagent for you, then customize it. Run <code>/agents</code>, select &#8220;Create New Agent,&#8221; and describe what you need. Claude will draft the configuration. You refine from there.</p><p>The <code>description</code> field matters. Make it specific and action oriented. Include phrases like &#8220;Use proactively&#8221; if you want Claude to invoke it automatically when relevant.</p><p></p><h2>The full development workflow</h2><p>Now that you understand the three core elements, let&#8217;s see how they work together. This is the workflow I follow for every feature I build:</p><pre><code><code>&#9484;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9488;
&#9474;                     CLAUDE CODE WORKFLOW                        &#9474;
&#9492;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9496;
                              &#9474;
                              &#9660;
&#9484;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9488;
&#9474;  1. SETUP                                                       &#9474;
&#9474;     claude.md + subagents + MCP (Linear/Jira)                   &#9474;
&#9492;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9496;
                              &#9474;
                              &#9660;
&#9484;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9488;
&#9474;  2. PLAN MODE (Shift+Tab x2)                                    &#9474;
&#9474;     Describe feature &#8594; Claude analyzes codebase &#8594; Draft plan    &#9474;
&#9492;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9496;
                              &#9474;
                              &#9660;
                    &#9484;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9488;
                    &#9474;  Plan looks     &#9474;
                    &#9474;  good?          &#9474;&#9668;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9488;
                    &#9492;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9496;               &#9474;
                      &#9474;           &#9474;                   &#9474;
                     Yes          No                  &#9474;
                      &#9474;           &#9474;                   &#9474;
                      &#9474;           &#9660;                   &#9474;
                      &#9474;   &#9484;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9488;           &#9474;
                      &#9474;   &#9474; Iterate &amp;     &#9474;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9496;
                      &#9474;   &#9474; refine plan   &#9474;
                      &#9474;   &#9492;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9496;
                      &#9660;
&#9484;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9488;
&#9474;  3. IMPLEMENTATION                                              &#9474;
&#9474;     Dispatch to specialized subagents                           &#9474;
&#9474;     (frontend / backend / testing / docs)                       &#9474;
&#9492;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9496;
                              &#9474;
                              &#9660;
&#9484;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9488;
&#9474;  4. REVIEW                                                      &#9474;
&#9474;     Ask Claude to check for unnecessary complexity              &#9474;
&#9492;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9496;
                              &#9474;
                              &#9660;
&#9484;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9488;
&#9474;  5. PR                                                          &#9474;
&#9474;     Claude opens PR with clear description                      &#9474;
&#9492;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9496;
</code></code></pre><p>That&#8217;s the bird&#8217;s eye view. Let&#8217;s zoom in on how to actually implement this, starting from scratch.</p><p></p><h2>Setting up a new project: the checklist</h2><p>Starting from scratch? Here&#8217;s how to get everything wired up from day one.</p><p>Complete these steps:</p><ol><li><p>Set up your <code>claude.md</code> with project context and coding standards</p></li><li><p>Configure specialized agents for your stack (frontend, backend, GitHub, documentation, architecture)</p></li><li><p>Connect your ticketing platform via MCP (Linear, Jira, or markdown todos)</p></li></ol><p>The MCP integration is worth the setup. With Linear, Claude can read ticket descriptions, update statuses, and create subtasks. Planning and execution in one loop. It will then open the PR and link it to your Linear issue. Pretty convenient. (I&#8217;ll get into more details about that in a coming post)</p><p></p><h2>The feature development pattern</h2><p>With your project configured, here&#8217;s the step by step pattern I follow for every new feature:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Bm51!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff5dcde51-d0a9-4b13-9860-458e14c2dc3b_1338x688.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Bm51!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff5dcde51-d0a9-4b13-9860-458e14c2dc3b_1338x688.png 424w, https://substackcdn.com/image/fetch/$s_!Bm51!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff5dcde51-d0a9-4b13-9860-458e14c2dc3b_1338x688.png 848w, https://substackcdn.com/image/fetch/$s_!Bm51!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff5dcde51-d0a9-4b13-9860-458e14c2dc3b_1338x688.png 1272w, https://substackcdn.com/image/fetch/$s_!Bm51!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff5dcde51-d0a9-4b13-9860-458e14c2dc3b_1338x688.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Bm51!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff5dcde51-d0a9-4b13-9860-458e14c2dc3b_1338x688.png" width="1338" height="688" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f5dcde51-d0a9-4b13-9860-458e14c2dc3b_1338x688.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:688,&quot;width&quot;:1338,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:391084,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://www.thebuildup.dev/i/181970529?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff5dcde51-d0a9-4b13-9860-458e14c2dc3b_1338x688.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Bm51!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff5dcde51-d0a9-4b13-9860-458e14c2dc3b_1338x688.png 424w, https://substackcdn.com/image/fetch/$s_!Bm51!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff5dcde51-d0a9-4b13-9860-458e14c2dc3b_1338x688.png 848w, https://substackcdn.com/image/fetch/$s_!Bm51!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff5dcde51-d0a9-4b13-9860-458e14c2dc3b_1338x688.png 1272w, https://substackcdn.com/image/fetch/$s_!Bm51!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff5dcde51-d0a9-4b13-9860-458e14c2dc3b_1338x688.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><p>Taking the time to plan and brainstorm the perfect plan for your feature is what makes the code output good. Don&#8217;t skip this part !</p><p></p><h2>Common mistakes to avoid</h2><p>Before you run off to implement all of this, let me save you some pain. These are the traps I fell into early on:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!RW0K!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F829fa7e0-2806-4ad8-a181-3570922f2073_1340x752.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!RW0K!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F829fa7e0-2806-4ad8-a181-3570922f2073_1340x752.png 424w, https://substackcdn.com/image/fetch/$s_!RW0K!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F829fa7e0-2806-4ad8-a181-3570922f2073_1340x752.png 848w, https://substackcdn.com/image/fetch/$s_!RW0K!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F829fa7e0-2806-4ad8-a181-3570922f2073_1340x752.png 1272w, https://substackcdn.com/image/fetch/$s_!RW0K!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F829fa7e0-2806-4ad8-a181-3570922f2073_1340x752.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!RW0K!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F829fa7e0-2806-4ad8-a181-3570922f2073_1340x752.png" width="1340" height="752" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/829fa7e0-2806-4ad8-a181-3570922f2073_1340x752.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:752,&quot;width&quot;:1340,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:396101,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://www.thebuildup.dev/i/181970529?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F829fa7e0-2806-4ad8-a181-3570922f2073_1340x752.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!RW0K!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F829fa7e0-2806-4ad8-a181-3570922f2073_1340x752.png 424w, https://substackcdn.com/image/fetch/$s_!RW0K!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F829fa7e0-2806-4ad8-a181-3570922f2073_1340x752.png 848w, https://substackcdn.com/image/fetch/$s_!RW0K!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F829fa7e0-2806-4ad8-a181-3570922f2073_1340x752.png 1272w, https://substackcdn.com/image/fetch/$s_!RW0K!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F829fa7e0-2806-4ad8-a181-3570922f2073_1340x752.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><h2>Personal perspective</h2><p>Having used Claude Code extensively over the past months, I&#8217;ve watched my own productivity transform. So did my workflow. I write less code now, and spend more time reviewing PRs and talking to an AI in my console.</p><p>The impact is real. I ship faster and spend less time debugging.</p><p>Claude Code became truly useful when I stopped asking it to &#8220;build feature X&#8221; and started treating it like a junior developer on my team. One that needs clear context, a solid plan, and specific responsibilities. That framing changed everything.</p><p>At this point, it would be difficult for me to go back to my regular coding experience. I would feel much less effective without this tool in my toolkit.</p><p>Overall, I&#8217;m a big fan of Claude Code and I really enjoy this new approach to coding. It allows me to focus more on features and architecture, while only diving into the code when the topic is genuinely interesting.</p><p></p><h2>Coming up next</h2><p>This guide covers the fundamentals, but there&#8217;s more to explore. In upcoming posts we will get into</p><ul><li><p><strong>Linear workflow integration</strong> for automated project development</p></li><li><p><strong>Deep dive</strong> into the most useful MCP tools and subagents</p></li><li><p><strong>Claude code for marketing</strong></p></li></ul><p>See you in the next one,</p><p><strong>Robin</strong></p><div><hr></div><p><em>What&#8217;s your experience with AI assisted coding? Drop your thoughts below.</em> &#128071;</p><h4>Useful resources</h4><p><a href="https://code.claude.com/docs/en/overview">The Claude Code documentation is awesome</a> <br><a href="https://github.com/wshobson/agents">Wshobson set of claude code agents &amp; plugins</a></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.thebuildup.dev/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading The Buildup! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Build your own MCP servers using N8N (Nocode)]]></title><description><![CDATA[If you&#8217;ve been following the AI automation space, you&#8217;ve probably heard about the Model Context Protocol (MCP).]]></description><link>https://www.thebuildup.dev/p/build-your-own-mcp-servers-using</link><guid isPermaLink="false">https://www.thebuildup.dev/p/build-your-own-mcp-servers-using</guid><dc:creator><![CDATA[Augustin]]></dc:creator><pubDate>Tue, 14 Oct 2025 15:03:18 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/e0b5398a-c259-4851-abcd-f6000e01cd5f_1600x900.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Every new service means new code. Every API update breaks something. And you&#8217;re stuck maintaining integration spaghetti instead of building actual features.</p><p>Model Context Protocol (MCP) was supposed to fix this, it&#8217;s like USB-C for AI. But here&#8217;s what nobody&#8217;s saying, you don&#8217;t need to write a single line of Python to use it. n8n turns MCP development from a multi-day coding marathon into a drag-and-drop afternoon.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.thebuildup.dev/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading The Buildup! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!KHII!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0599c00a-8046-4f19-9e71-cb31dfaa89a3_1036x576.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!KHII!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0599c00a-8046-4f19-9e71-cb31dfaa89a3_1036x576.png 424w, https://substackcdn.com/image/fetch/$s_!KHII!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0599c00a-8046-4f19-9e71-cb31dfaa89a3_1036x576.png 848w, https://substackcdn.com/image/fetch/$s_!KHII!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0599c00a-8046-4f19-9e71-cb31dfaa89a3_1036x576.png 1272w, https://substackcdn.com/image/fetch/$s_!KHII!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0599c00a-8046-4f19-9e71-cb31dfaa89a3_1036x576.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!KHII!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0599c00a-8046-4f19-9e71-cb31dfaa89a3_1036x576.png" width="1036" height="576" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0599c00a-8046-4f19-9e71-cb31dfaa89a3_1036x576.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:576,&quot;width&quot;:1036,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:112847,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://www.thebuildup.dev/i/175193776?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0599c00a-8046-4f19-9e71-cb31dfaa89a3_1036x576.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!KHII!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0599c00a-8046-4f19-9e71-cb31dfaa89a3_1036x576.png 424w, https://substackcdn.com/image/fetch/$s_!KHII!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0599c00a-8046-4f19-9e71-cb31dfaa89a3_1036x576.png 848w, https://substackcdn.com/image/fetch/$s_!KHII!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0599c00a-8046-4f19-9e71-cb31dfaa89a3_1036x576.png 1272w, https://substackcdn.com/image/fetch/$s_!KHII!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0599c00a-8046-4f19-9e71-cb31dfaa89a3_1036x576.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h2>Why n8n works so well for MCP development</h2><p>I&#8217;ll be honest, if you&#8217;re hand-coding MCP servers, you&#8217;re either unaware of better options or you enjoy pain.</p><h3>Visual tool management</h3><p>MCP server development requires defining tools, handling authentication, and managing server lifecycle, all through code. n8n flips this on its head by providing a visual interface where each workflow step becomes a potential MCP tool. You&#8217;re essentially building with building blocks instead of writing boilerplate.</p><h3>Bidirectional MCP integration</h3><p>What makes n8n unique in the MCP ecosystem is its bidirectional approach. You can turn n8n workflows into MCP servers that AI agents can call, and simultaneously use n8n as an MCP client to consume external tools. This dual capability means you can create sophisticated automation pipelines that bridge multiple MCP services without custom integration code.</p><h3>Enterprise-ready infrastructure</h3><p>n8n handles the operational concerns that often trip up custom MCP implementations: authentication, error handling, logging, and scalability. When you deploy an n8n MCP server, you&#8217;re getting production-ready infrastructure that can handle real workloads, not just proof-of-concept demos.</p><h2>Building a developer assistant in 20 minutes</h2><p>Let me show you something practical. We&#8217;re building a developer assistant that combines GitHub with custom code analysis tools. Two MCP servers. Zero Python files.</p><h2>Architecture overview</h2><p>Our developer assistant uses 2 MCP servers:</p><p><strong>GitHub MCP server</strong> (external service integration)</p><ul><li><p>get/comment on issues</p></li><li><p>list repository issues</p></li><li><p>read file contents</p></li><li><p>full GitHub API access</p></li></ul><p><strong>Custom dev tools MCP server</strong> (internal tools)</p><ul><li><p>code quality analyzer</p></li><li><p>documentation generator</p></li><li><p>StackOverflow search</p></li><li><p>PR change summarizer</p></li></ul><p>The AI agent discovers and orchestrates these tools automatically. No manual coordination required.</p><h2>Prerequisites setup</h2><p>You&#8217;ll need:</p><ul><li><p>n8n instance (self-hosted or n8n Cloud)</p></li><li><p>community packages enabled: <code>N8N_COMMUNITY_PACKAGES_ALLOW_TOOL_USAGE=true</code></p></li><li><p>MCP community nodes installed: <code>n8n-nodes-mcp</code></p></li><li><p>GitHub personal access token</p></li><li><p>OpenAI API key</p></li></ul><p></p><div><hr></div><h2>Implementing the GitHub MCP server</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!wVzk!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf8e86f7-5c91-4deb-b414-d2dfdc1fe994_1160x692.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!wVzk!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf8e86f7-5c91-4deb-b414-d2dfdc1fe994_1160x692.png 424w, https://substackcdn.com/image/fetch/$s_!wVzk!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf8e86f7-5c91-4deb-b414-d2dfdc1fe994_1160x692.png 848w, https://substackcdn.com/image/fetch/$s_!wVzk!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf8e86f7-5c91-4deb-b414-d2dfdc1fe994_1160x692.png 1272w, https://substackcdn.com/image/fetch/$s_!wVzk!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf8e86f7-5c91-4deb-b414-d2dfdc1fe994_1160x692.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!wVzk!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf8e86f7-5c91-4deb-b414-d2dfdc1fe994_1160x692.png" width="1160" height="692" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/cf8e86f7-5c91-4deb-b414-d2dfdc1fe994_1160x692.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:692,&quot;width&quot;:1160,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:138607,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://www.thebuildup.dev/i/175193776?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf8e86f7-5c91-4deb-b414-d2dfdc1fe994_1160x692.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!wVzk!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf8e86f7-5c91-4deb-b414-d2dfdc1fe994_1160x692.png 424w, https://substackcdn.com/image/fetch/$s_!wVzk!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf8e86f7-5c91-4deb-b414-d2dfdc1fe994_1160x692.png 848w, https://substackcdn.com/image/fetch/$s_!wVzk!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf8e86f7-5c91-4deb-b414-d2dfdc1fe994_1160x692.png 1272w, https://substackcdn.com/image/fetch/$s_!wVzk!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf8e86f7-5c91-4deb-b414-d2dfdc1fe994_1160x692.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h3>Step 1: create the MCP server trigger</h3><p>Start by creating a new workflow and adding the MCP server trigger node. This transforms your workflow into an MCP server endpoint.</p><pre><code><code>Node: MCP Server Trigger
Path: github-tools</code></code></pre><p>The trigger generates a unique URL like <code>/mcp/github-tools/sse</code> that MCP clients can connect to.</p><h3>Step 2: add GitHub tool nodes</h3><p>Connect GitHub nodes to your MCP trigger. Each becomes a discoverable tool:</p><p><strong>Get issue node:</strong></p><pre><code><code>Resource: Issue
Operation: Get
Parameters: $fromAI(&#8217;issue_number&#8217;, &#8216;GitHub issue number&#8217;, &#8216;number&#8217;)</code></code></pre><p><strong>Comment on issue node:</strong></p><pre><code><code>Resource: Issue  
Operation: Create Comment
Issue Number: $fromAI(&#8217;issue_number&#8217;, ...)
Body: $fromAI(&#8217;comment_body&#8217;, &#8216;Comment text&#8217;, &#8216;string&#8217;)</code></code></pre><p><strong>List issues node:</strong></p><pre><code><code>Resource: Repository
Operation: Get Issues
Limit: 10</code></code></pre><p><strong>Get file node:</strong></p><pre><code><code>Resource: File
Operation: Get
File Path: $fromAI(&#8217;file_path&#8217;, &#8216;File path in repository&#8217;, &#8216;string&#8217;)</code></code></pre><h3>Step 3: configure authentication</h3><p>Add your GitHub personal access token to each GitHub node. The MCP server will handle this securely when tools are invoked.</p><p></p><h2>Building the custom dev tools MCP server</h2><p>This is where MCP&#8217;s value really shines: creating specialized internal tools.</p><ol><li><p><code>MCP Server Trigger (path: dev-tools)</code></p></li><li><p><code>Execute Workflow Trigger (receives function calls)</code></p></li><li><p><code>Switch Node (routes to appropriate tool)</code></p></li><li><p><code>Tool Workflow Nodes (expose tools to MCP) </code></p></li></ol><h3><strong>Tool 1: Code quality analyzer</strong></h3><p>What developers on Reddit actually want: something that catches console.logs, old <code>var</code> declarations, and nested if-hell before code review.</p><p><strong>How it works in n8n:</strong></p><ul><li><p>Add a Code node</p></li><li><p>Check for common issues (debug statements, old syntax, missing comments)</p></li><li><p>Return a JSON score and suggestions</p></li></ul><blockquote><p>Skip the fancy static analysis. The 80/20 rule applies, catching obvious issues catches 80% of problems. Your custom tool can focus on your team&#8217;s specific code smells.</p></blockquote><h3><strong>Tool 2: StackOverflow search</strong></h3><p>Use an HTTP request node hitting StackOverflow&#8217;s API. Format the results. Done.</p><blockquote><p>Always use <code>{dynamicTyping: true, skipEmptyLines: true}</code> when parsing external API responses. Trust me on this one.</p></blockquote><h3><strong>Tool 3: PR summariser</strong></h3><p>Takes GitHub PR data and returns a human readable summary. Perfect for daily standups.</p><blockquote><p>Keep summaries short. A good summary is 1-2 sentences max. The AI can always fetch more details if needed.</p></blockquote><h2>Connecting your AI agent</h2><p>Now comes the fun part: letting your AI agent discover and use these tools automatically.</p><ol><li><p><strong>Add MCP Client nodes</strong> pointing to your server endpoints</p></li><li><p><strong>Configure your AI agent</strong> (OpenAI GPT-4, Claude, whatever)</p></li><li><p><strong>Add a Chat Trigger</strong> for the web interface</p></li></ol><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!reCa!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F367c7694-c318-479e-b73c-6baaf0a34e4a_1288x1020.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!reCa!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F367c7694-c318-479e-b73c-6baaf0a34e4a_1288x1020.png 424w, https://substackcdn.com/image/fetch/$s_!reCa!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F367c7694-c318-479e-b73c-6baaf0a34e4a_1288x1020.png 848w, https://substackcdn.com/image/fetch/$s_!reCa!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F367c7694-c318-479e-b73c-6baaf0a34e4a_1288x1020.png 1272w, https://substackcdn.com/image/fetch/$s_!reCa!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F367c7694-c318-479e-b73c-6baaf0a34e4a_1288x1020.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!reCa!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F367c7694-c318-479e-b73c-6baaf0a34e4a_1288x1020.png" width="1288" height="1020" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/367c7694-c318-479e-b73c-6baaf0a34e4a_1288x1020.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1020,&quot;width&quot;:1288,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:172796,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://www.thebuildup.dev/i/175193776?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F367c7694-c318-479e-b73c-6baaf0a34e4a_1288x1020.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!reCa!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F367c7694-c318-479e-b73c-6baaf0a34e4a_1288x1020.png 424w, https://substackcdn.com/image/fetch/$s_!reCa!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F367c7694-c318-479e-b73c-6baaf0a34e4a_1288x1020.png 848w, https://substackcdn.com/image/fetch/$s_!reCa!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F367c7694-c318-479e-b73c-6baaf0a34e4a_1288x1020.png 1272w, https://substackcdn.com/image/fetch/$s_!reCa!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F367c7694-c318-479e-b73c-6baaf0a34e4a_1288x1020.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>System prompt that actually works:</p><pre><code><code>You are a developer assistant. You help with code reviews, 
documentation, and development workflows. You have access 
to GitHub and custom dev tools. Use them proactively.</code></code></pre><blockquote><p>Don&#8217;t over-engineer your system prompts. Be clear, be direct, be brief.</p></blockquote><div><hr></div><h2>2 real examples</h2><ol><li><p><em>Analyze this code quality</em></p></li></ol><pre><code><code>function test() {
  var x = 1;
  console.log(x);
  if (x) {
    if (x &gt; 0) {
      if (x &lt; 10) {
        return x;
      }
    }
  }
}</code></code></pre><p><strong>Agent response:</strong></p><p><em>"Score: 70/100. Issues: debug statements, old var declarations, deep nesting. Suggestions: Remove console.log, use const/let, reduce nesting depth."</em></p><p>The AI automatically chose the right tool, executed it, and formatted the response.</p><ol start="2"><li><p><em>&#8220;Search StackOverflow for async/await best practices, then generate documentation for my async function&#8221;</em></p></li></ol><p><strong>Agent response:</strong></p><p><em>&#8220;Found 5 relevant posts. Based on those, here&#8217;s your documentation...&#8221;</em></p><p>This required ZERO configuration beyond defining the tools. The AI agent figured out it needed two tools and orchestrated them automatically.</p><p></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.thebuildup.dev/p/build-your-own-mcp-servers-using?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.thebuildup.dev/p/build-your-own-mcp-servers-using?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p><p></p><div><hr></div><h1>My tips</h1><p>After digging through Reddit threads, n8n forums, and GitHub issues, here&#8217;s what experienced users actually do:</p><h3>Start small, then scale</h3><p>Maybe automate something simple, like notifying your team when a new client signs up. As you get comfortable, you can build more complex workflows.</p><p>Why this matters: Complex workflows are just simple workflows connected together. Master the basics first.</p><h3>Use Sub-workflows for complex agents</h3><p>From n8n forums: for complex AI agents with many tools, use the Call Workflow node. Each tool becomes a separate workflow.</p><p>Benefits:</p><ul><li><p>Easier to debug (test tools individually)</p></li><li><p>Better organization (not one giant workflow)</p></li><li><p>No performance penalty on n8n Cloud</p></li></ul><p>Simple agents with 2-3 tools? Just use built-in nodes. Don&#8217;t over-engineer.</p><h3>Naming conventions save lives</h3><p>The biggest complaint on Reddit is messy workflows that nobody can understand 3 months later.</p><p>What works:</p><ul><li><p>Name every node descriptively</p></li><li><p>Use consistent patterns (<code>Get-[Thing]</code>, <code>Check-[Condition]</code>, <code>Send-[Action]</code>)</p></li><li><p>Add notes for complex logic</p></li><li><p>Document weird workarounds immediately</p></li></ul><h3>Error handling</h3><p>Production workflows WILL fail. APIs timeout. Services go down. Users send garbage data.</p><p>Essential practices:</p><ul><li><p>Add Error Trigger nodes to catch failures</p></li><li><p>Set up retry logic (3 attempts with exponential backoff)</p></li><li><p>Send alerts to Slack/email when things break</p></li><li><p>Log everything&#8212;you&#8217;ll need it for debugging</p></li></ul><blockquote><p>n8n&#8217;s error handling saved us hundreds of hours monthly. We get alerted immediately when something breaks, with full context.</p></blockquote><h3>Security</h3><p><strong>Do these things:</strong></p><ul><li><p>Store API keys in n8n&#8217;s credential manager (NEVER in code)</p></li><li><p>Use bearer token authentication for production MCP endpoints</p></li><li><p>Run behind a reverse proxy (nginx/Caddy)</p></li><li><p>Enable rate limiting</p></li><li><p>Set up environment variables properly</p></li></ul><blockquote><p>Most security breaches happen because someone hardcoded credentials &#8220;just for testing.&#8221; Don&#8217;t be that person.</p><p></p></blockquote><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.thebuildup.dev/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.thebuildup.dev/subscribe?"><span>Subscribe now</span></a></p><p></p><h2>Common issues</h2><h3>MCP client can&#8217;t connect</h3><p>Check these:</p><ol><li><p>Is the workflow activated?</p></li><li><p>Does the MCP path match your client config exactly?</p></li><li><p>Are SSE connections allowed through your firewall?</p></li><li><p>Is your SSL certificate valid?</p></li></ol><p>When in doubt, check the execution logs. They&#8217;re there for a reason.</p><h3>Tools aren&#8217;t appearing in my AI agent</h3><p>Fix these:</p><ol><li><p>Clear, descriptive tool descriptions (the AI uses these!)</p></li><li><p>Proper <code>$fromAI()</code> parameter definitions</p></li><li><p>Restart your AI agent after adding tools</p></li><li><p>Check that tool nodes are actually connected to the MCP trigger</p></li></ol><blockquote><p>90% of missing tools issues are unclear descriptions. The AI needs to understand when to use each tool.</p></blockquote><h3>Everything is slow</h3><p>Optimize<strong>:</strong></p><ul><li><p>Use caching for frequently accessed data</p></li><li><p>Set reasonable HTTP timeouts (don&#8217;t wait forever)</p></li><li><p>Monitor your n8n instance resources</p></li><li><p>Consider using async operations</p></li></ul><p>If a tool takes &gt;5 seconds, users will complain. If it takes &gt;10 seconds, they&#8217;ll assume it&#8217;s broken.</p><p></p><div><hr></div><p></p><h2>Conclusion</h2><p>You can keep hand-coding MCP servers if you want. Some problems need custom code. But for 80% of use cases? Visual development is faster, more maintainable, and easier to hand off. We now use a similar workflow at <a href="https://moqa.studio/">Moqa Studio</a>.<br></p><p>Like and drop a comment below if you want the complete workflow JSON to get started. Way easier than building from scratch.<br>Also, if you found this useful, share it with a developer who&#8217;s still writing custom integrations by hand.</p><div class="pullquote"><p><br>Now stop reading and go build something.<br></p></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.thebuildup.dev/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading The Buildup! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[The developer job is changing]]></title><description><![CDATA[AI is changing the way devs code faster than expected]]></description><link>https://www.thebuildup.dev/p/the-developer-job-has-already-changed</link><guid isPermaLink="false">https://www.thebuildup.dev/p/the-developer-job-has-already-changed</guid><dc:creator><![CDATA[Robin]]></dc:creator><pubDate>Fri, 26 Sep 2025 11:30:25 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/c7a4d2f1-53cd-4237-a65c-7f84991f5c81_1920x1080.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!pWBO!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7db71194-5fbb-4083-b190-60af748600e4_793x411.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!pWBO!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7db71194-5fbb-4083-b190-60af748600e4_793x411.png 424w, https://substackcdn.com/image/fetch/$s_!pWBO!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7db71194-5fbb-4083-b190-60af748600e4_793x411.png 848w, https://substackcdn.com/image/fetch/$s_!pWBO!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7db71194-5fbb-4083-b190-60af748600e4_793x411.png 1272w, https://substackcdn.com/image/fetch/$s_!pWBO!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7db71194-5fbb-4083-b190-60af748600e4_793x411.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!pWBO!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7db71194-5fbb-4083-b190-60af748600e4_793x411.png" width="793" height="411" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7db71194-5fbb-4083-b190-60af748600e4_793x411.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:411,&quot;width&quot;:793,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:11674,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://thebuildupdev.substack.com/i/174574149?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7db71194-5fbb-4083-b190-60af748600e4_793x411.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!pWBO!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7db71194-5fbb-4083-b190-60af748600e4_793x411.png 424w, https://substackcdn.com/image/fetch/$s_!pWBO!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7db71194-5fbb-4083-b190-60af748600e4_793x411.png 848w, https://substackcdn.com/image/fetch/$s_!pWBO!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7db71194-5fbb-4083-b190-60af748600e4_793x411.png 1272w, https://substackcdn.com/image/fetch/$s_!pWBO!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7db71194-5fbb-4083-b190-60af748600e4_793x411.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Picture this: You describe a feature. <br><br>AI agents explore your codebase, implement the solution, write tests, create PRs, and handle Git workflows. <br><br>You focus on architecture and strategy. <br>This isn&#8217;t future tech, this is Claude Code right now. <br><br>The dev role is evolving from <strong>code writer</strong> to <strong>code conductor</strong>. </p><p>And honestly? It&#8217;s the biggest shift since we moved from assembly to high-level languages.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.thebuildup.dev/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading The Buildup! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p><h1>Why this evolution matters</h1><p>Traditional developer workflow is dead:</p><ul><li><p>&#10060; <strong>Old</strong>: Write code &#8594; Debug &#8594; Test &#8594; Commit &#8594; PR</p></li><li><p>&#9989; <strong>New</strong>: Plan features &#8594; Review AI implementations &#8594; Guide architecture</p></li></ul><p>&#10240;Future belongs to devs who can orchestrate AI agents, not just write syntax.</p><p></p><h1>The game changing features &#127919;</h1><h3>1. Multi-agent dream teams &#129302;</h3><p>Specialized subagents that collaborate like senior developers:</p><ul><li><p><strong>Code Reviewer Agent</strong>: Security patterns, performance optimization</p></li><li><p><strong>Debugger Agent</strong>: Root cause analysis, systematic problem-solving</p></li><li><p><strong>Data Science Agent</strong>: ML implementations, analytics architecture</p></li><li><p><strong>DevOps Agent</strong>: Deployment, infrastructure, CI/CD</p></li></ul><p>&#10240;</p><p><strong>Real workflow:</strong></p><pre><code><code>&#8220;Implement user analytics with privacy compliance&#8221;

&#8594; Data Science Agent designs architecture
&#8594; Code Reviewer validates privacy patterns
&#8594; Main Agent implements solution
&#8594; DevOps Agent handles monitoring
&#8594; All collaborate on testing
</code></code></pre><p>This is intelligent collaboration, not just parallel processing.</p><p></p><h3>2. Autonomous git mastery &#128202;</h3><p>Git becomes conversational and smart:</p><ul><li><p><strong>Contextual commits</strong> based on business impact</p></li><li><p><strong>Intelligent branch management</strong> with proper naming</p></li><li><p><strong>Smart conflict resolution</strong> understanding code context</p></li><li><p><strong>PR creation</strong> with impact analysis and testing notes</p></li></ul><p>Example:</p><pre><code><code>&#8220;Refactor payment processing edge cases&#8221;

 &#8594; Creates branch: fix/payment-edge-cases-handling
 &#8594; Implements comprehensive solution
 &#8594; Generates: &#8220;feat(payments): Add retry logic and timeout handling
    - Implements exponential backoff for failed transactions
    - Adds comprehensive error logging
    - Includes unit tests for timeout scenarios&#8221;
 &#8594; Creates PR with security analysis
</code></code></pre><p></p><h3>3. Universal tool integration (MCP) &#128279;</h3><p>Claude Code becomes your development orchestrator:</p><ul><li><p><strong>JIRA</strong>: &#8220;Implement JIRA 1234&#8221; &#8594; Complete implementation + ticket updates</p></li><li><p><strong>Database</strong>: Direct queries with context awareness</p></li><li><p><strong>Monitoring</strong>: Analyze Sentry errors &#8594; Implement fixes</p></li><li><p><strong>Design</strong>: Figma &#8594; Pixel perfect implementations</p></li></ul><p>Each integration multiplies capabilities exponentially.</p><p></p><h3>4. Human like codebase exploration &#128373;&#65039;</h3><p>Explores codebases like a senior dev, not through embeddings:</p><ul><li><p>Uses glob, grep, find organically</p></li><li><p>Traces execution flow across services</p></li><li><p>Maps dependencies and business logic</p></li><li><p>Understands architectural patterns</p></li></ul><p>Instead of explaining your codebase, Claude investigates and adapts.</p><p></p><h3>5. Production ready safety hooks &#127907;</h3><p>Intelligent guardrails for enterprise use:</p><ul><li><p><strong>Pre-modification</strong>: Security scans, permission checks</p></li><li><p><strong>Post-change</strong>: Auto-format, tests, documentation updates</p></li><li><p><strong>Custom workflows</strong>: Slack notifications, deployment triggers</p></li></ul><pre><code><code># Critical file protection
if [[ &#8220;$file&#8221; == *&#8221;production-config&#8221;* ]]; then
    exit 1  # &#10060; Protected
fi
# Auto-validation pipeline
prettier &#8594; tests &#8594; staging &#8594; team notification
</code></code></pre><p></p><h1>What this really means</h1><p><strong>The New Developer Skillset:</strong></p><ul><li><p><strong>Architectural thinking</strong> over syntax memorization</p></li><li><p><strong>AI orchestration</strong> across multiple specialized agents</p></li><li><p><strong>Strategic code review</strong> for business logic validation</p></li><li><p><strong>Problem decomposition</strong> into AI-actionable tasks</p></li></ul><p>&#10240;<strong>Industry Reality Check:</strong></p><ul><li><p>Development velocity increases 10x, not 2x</p></li><li><p>Code quality becomes consistent across teams</p></li><li><p>Complex software barriers drop dramatically</p></li><li><p>Senior devs become solution architects + AI conductors</p></li></ul><p></p><h1>Jump in the boat now</h1><p>Claude Code isn&#8217;t another tool, it&#8217;s the foundation of post-traditional development. The devs who win won&#8217;t write the most code. They&#8217;ll orchestrate AI agents to build better software faster. </p><p>The developer job isn&#8217;t disappearing. It&#8217;s evolving into something more strategic, creative, and infinitely more powerful.</p><p></p><p></p><div><hr></div><p><strong>Ready to conduct the orchestra?</strong> Check out Claude Code at </p><p>https://docs.claude.com</p><p></p><p><em>Want me to deep dive into any specific feature? Multi-agent workflows? Git automation? MCP integrations? Hit me up. I&#8217;m obsessed with how this tech is reshaping development.</em></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.thebuildup.dev/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading The Buildup! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[🔥 Claude Code from anywhere with your mobile phone]]></title><description><![CDATA[Or how to spin up a good dev setup on mobile phone]]></description><link>https://www.thebuildup.dev/p/claude-code-from-anywhere-with-your</link><guid isPermaLink="false">https://www.thebuildup.dev/p/claude-code-from-anywhere-with-your</guid><dc:creator><![CDATA[Robin]]></dc:creator><pubDate>Mon, 25 Aug 2025 18:36:07 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/d52ea746-d663-44d2-b006-853630c302d7_1920x1080.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!kuAW!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F426c3562-bf3b-446d-80f4-8a188cbee20b_643x1023.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!kuAW!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F426c3562-bf3b-446d-80f4-8a188cbee20b_643x1023.jpeg 424w, https://substackcdn.com/image/fetch/$s_!kuAW!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F426c3562-bf3b-446d-80f4-8a188cbee20b_643x1023.jpeg 848w, https://substackcdn.com/image/fetch/$s_!kuAW!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F426c3562-bf3b-446d-80f4-8a188cbee20b_643x1023.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!kuAW!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F426c3562-bf3b-446d-80f4-8a188cbee20b_643x1023.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!kuAW!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F426c3562-bf3b-446d-80f4-8a188cbee20b_643x1023.jpeg" width="313" height="497.97667185069986" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/426c3562-bf3b-446d-80f4-8a188cbee20b_643x1023.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1023,&quot;width&quot;:643,&quot;resizeWidth&quot;:313,&quot;bytes&quot;:90294,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://thebuildupdev.substack.com/i/171910839?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F426c3562-bf3b-446d-80f4-8a188cbee20b_643x1023.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!kuAW!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F426c3562-bf3b-446d-80f4-8a188cbee20b_643x1023.jpeg 424w, https://substackcdn.com/image/fetch/$s_!kuAW!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F426c3562-bf3b-446d-80f4-8a188cbee20b_643x1023.jpeg 848w, https://substackcdn.com/image/fetch/$s_!kuAW!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F426c3562-bf3b-446d-80f4-8a188cbee20b_643x1023.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!kuAW!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F426c3562-bf3b-446d-80f4-8a188cbee20b_643x1023.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><p></p><p>My problem on this one was super simple: I wanted to be able to work on some projects or quick things quickly while on the go.</p><p>I use Claude code a lot, and really wanted to be able to use it while on the go, from my phone.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.thebuildup.dev/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading The Buildup! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p>This is what this setup is all about, and more.</p><h1>Context</h1><p>In this article, we will explore a workflow that setup in order to be able to:</p><ul><li><p>Ask Claude Code to edit stuff on my projects &amp; validate changes by opening PRs</p></li><li><p>Have a Telegram bot notify me when a PR is opened</p></li><li><p>Review &amp; merge that PR on github mobile</p></li></ul><p>Here is a quick demo video of the full flow</p><div class="native-video-embed" data-component-name="VideoPlaceholder" data-attrs="{&quot;mediaUploadId&quot;:&quot;9dbe0108-a146-4e67-856f-3158fc8558cc&quot;,&quot;duration&quot;:null}"></div><p></p><p><strong>What We're Building</strong></p><ul><li><p>Claude Code project manipulation from mobile devices</p></li><li><p>Automated PR creation for each AI-generated change</p></li><li><p>Telegram notification system for instant PR awareness</p></li><li><p>Mobile-optimized code review and merge workflows</p></li></ul><h1>Let&#8217;s set this up</h1><h3>Step 1 : Spin up a VPS</h3><p>Create a small VPS (Virtual Private Server) with the provider of your choice.</p><p>I used Hetzner because their prices were extremely good (4.99$ /month), but you can use whatever VPS provider you like the most (DigitalOcean, &#8230;)</p><p>I also went for ubuntu as my operating system on my vps.</p><h3>Step 2 : Setup your VPS</h3><p>ssh into your VPS and install some must have</p><pre><code>ssh root@your-vps-ip

# Essential updates

apt update &amp;&amp; apt upgrade -y

apt install git curl nodejs npm tmux nginx -y

# Verify Node 18+

node -v</code></pre><h3>Step 3 : Git auth</h3><p>Generate SSH key on VPS:</p><pre><code>ssh-keygen -t ed25519 -C "your_email@example.com"

eval "$(ssh-agent -s)"

ssh-add ~/.ssh/id_ed25519

# Copy this to GitHub SSH keys

cat ~/.ssh/id_ed25519.pub</code></pre><p>From there you can clone the repo of your choice to start to work on it</p><pre><code>git clone git@github.com:username/repo.git

cd repo</code></pre><h3>Step 4 : Install Claude Code</h3><pre><code># Global install (no sudo)

npm install -g @anthropic-ai/claude-code

# Authenticate

claude login

# Follow OAuth flow

# Test installation

claude doctor</code></pre><p>From here, you can already ssh from your phone and have Claude Code work on your projects, which is awesome.</p><h3>(Optional) Step 5 : Create Claude Code subagents</h3><p>I like working with Claude Code subagents</p><p>I highly recommend creating a small PR creator subagent to create and write PRs on your project.</p><p>Here is an example:</p><pre><code># PR Expert Agent

You are a PR expert. Your job is to:

- Create detailed pull requests with clear descriptions

- Follow conventional commit standards

- Include testing instructions

- Add relevant labels and reviewers

When creating PRs:

1. Write descriptive titles

2. Include "What changed" and "Why"

3. Add testing steps

4. Tag breaking changes</code></pre><h3>Step 6 : n8n + Telegram bot</h3><p>I created a short n8n flow in order to have a Telegram bot notify me whenever I have a new PR on one of my projects.</p><p>Here is what it looks like</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!6QAY!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff143ae7d-f06e-4e5a-97f4-72491eb5d273_1672x874.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!6QAY!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff143ae7d-f06e-4e5a-97f4-72491eb5d273_1672x874.png 424w, https://substackcdn.com/image/fetch/$s_!6QAY!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff143ae7d-f06e-4e5a-97f4-72491eb5d273_1672x874.png 848w, https://substackcdn.com/image/fetch/$s_!6QAY!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff143ae7d-f06e-4e5a-97f4-72491eb5d273_1672x874.png 1272w, https://substackcdn.com/image/fetch/$s_!6QAY!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff143ae7d-f06e-4e5a-97f4-72491eb5d273_1672x874.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!6QAY!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff143ae7d-f06e-4e5a-97f4-72491eb5d273_1672x874.png" width="1456" height="761" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f143ae7d-f06e-4e5a-97f4-72491eb5d273_1672x874.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:761,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:144562,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://thebuildupdev.substack.com/i/171910839?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff143ae7d-f06e-4e5a-97f4-72491eb5d273_1672x874.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!6QAY!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff143ae7d-f06e-4e5a-97f4-72491eb5d273_1672x874.png 424w, https://substackcdn.com/image/fetch/$s_!6QAY!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff143ae7d-f06e-4e5a-97f4-72491eb5d273_1672x874.png 848w, https://substackcdn.com/image/fetch/$s_!6QAY!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff143ae7d-f06e-4e5a-97f4-72491eb5d273_1672x874.png 1272w, https://substackcdn.com/image/fetch/$s_!6QAY!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff143ae7d-f06e-4e5a-97f4-72491eb5d273_1672x874.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><p>There is:</p><ul><li><p>A github trigger node on PR creation (you have to setup one for each of your projects)</p></li><li><p>A switch that is going to look at the action (PR opened / closed)</p></li><li><p>Two Telegram message nodes that will send a message depending the context</p><ul><li><p>PR opened with the link and some details</p></li><li><p>PR merged</p></li></ul><p></p></li></ul><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!irMh!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5df0f3d-2a17-4b2a-b269-b88e65602ee6_770x366.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!irMh!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5df0f3d-2a17-4b2a-b269-b88e65602ee6_770x366.png 424w, https://substackcdn.com/image/fetch/$s_!irMh!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5df0f3d-2a17-4b2a-b269-b88e65602ee6_770x366.png 848w, https://substackcdn.com/image/fetch/$s_!irMh!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5df0f3d-2a17-4b2a-b269-b88e65602ee6_770x366.png 1272w, https://substackcdn.com/image/fetch/$s_!irMh!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5df0f3d-2a17-4b2a-b269-b88e65602ee6_770x366.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!irMh!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5df0f3d-2a17-4b2a-b269-b88e65602ee6_770x366.png" width="770" height="366" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b5df0f3d-2a17-4b2a-b269-b88e65602ee6_770x366.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:366,&quot;width&quot;:770,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:79157,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://thebuildupdev.substack.com/i/171910839?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5df0f3d-2a17-4b2a-b269-b88e65602ee6_770x366.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!irMh!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5df0f3d-2a17-4b2a-b269-b88e65602ee6_770x366.png 424w, https://substackcdn.com/image/fetch/$s_!irMh!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5df0f3d-2a17-4b2a-b269-b88e65602ee6_770x366.png 848w, https://substackcdn.com/image/fetch/$s_!irMh!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5df0f3d-2a17-4b2a-b269-b88e65602ee6_770x366.png 1272w, https://substackcdn.com/image/fetch/$s_!irMh!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5df0f3d-2a17-4b2a-b269-b88e65602ee6_770x366.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>In order to set the Telegram nodes, you will need to create a Telegram bot using father-bot (super simple)</p><h3>Step 7 : Enjoy your flow</h3><p>From there, cliking on the PR link will open Github mobile on your phone.</p><p>You can review the code and merge the PR accordingly !</p><h1>Conclusion</h1><p>I&#8217;m a big fan of this flow and use it daily at the moment.</p><p>Will probably keep upgrading it in the coming weeks !</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.thebuildup.dev/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading The Buildup! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[MCP: A quick overview]]></title><description><![CDATA[Model Context Protocol general introduction]]></description><link>https://www.thebuildup.dev/p/mcp-a-quick-overview</link><guid isPermaLink="false">https://www.thebuildup.dev/p/mcp-a-quick-overview</guid><dc:creator><![CDATA[Robin]]></dc:creator><pubDate>Fri, 11 Apr 2025 11:07:22 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!R-aC!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad29ff96-bdda-40a7-894e-137aee688ce9_1920x1080.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!R-aC!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad29ff96-bdda-40a7-894e-137aee688ce9_1920x1080.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!R-aC!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad29ff96-bdda-40a7-894e-137aee688ce9_1920x1080.png 424w, https://substackcdn.com/image/fetch/$s_!R-aC!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad29ff96-bdda-40a7-894e-137aee688ce9_1920x1080.png 848w, https://substackcdn.com/image/fetch/$s_!R-aC!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad29ff96-bdda-40a7-894e-137aee688ce9_1920x1080.png 1272w, https://substackcdn.com/image/fetch/$s_!R-aC!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad29ff96-bdda-40a7-894e-137aee688ce9_1920x1080.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!R-aC!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad29ff96-bdda-40a7-894e-137aee688ce9_1920x1080.png" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ad29ff96-bdda-40a7-894e-137aee688ce9_1920x1080.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:333079,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://thebuildupdev.substack.com/i/161088501?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad29ff96-bdda-40a7-894e-137aee688ce9_1920x1080.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!R-aC!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad29ff96-bdda-40a7-894e-137aee688ce9_1920x1080.png 424w, https://substackcdn.com/image/fetch/$s_!R-aC!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad29ff96-bdda-40a7-894e-137aee688ce9_1920x1080.png 848w, https://substackcdn.com/image/fetch/$s_!R-aC!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad29ff96-bdda-40a7-894e-137aee688ce9_1920x1080.png 1272w, https://substackcdn.com/image/fetch/$s_!R-aC!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad29ff96-bdda-40a7-894e-137aee688ce9_1920x1080.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>With MCP rapidly gaining traction in the AI community, I wanted to understand what makes this new protocol suddenly so important.</p><p>Let's explore why Model Context Protocol is becoming the standard way for AI to connect to external tools and data.</p><p></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.thebuildup.dev/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading The Buildup! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p><h2><strong>MCP explained: What exactly is it?</strong></h2><p>When you build AI applications, you typically need to connect to:</p><p>&#128313; Databases for retrieving information &#128313; APIs for external services &#128313; File systems for document access &#128313; Other tools your users need</p><p>Before MCP, each of these connections required:</p><ul><li><p>Custom integration code</p></li><li><p>Different authentication methods</p></li><li><p>Separate maintenance for each service</p></li><li><p>Significant development overhead</p></li></ul><p>Model Context Protocol creates a standardized way for AI to interact with ALL of these systems through one consistent interface.</p><p>Think of it like the USB standard for AI - one protocol to connect everything.</p><h2><strong>Why MCP matters: The integration problem it solves</strong></h2><p>Most people don't realize how much time AI developers spend on integrations rather than actual AI capabilities.</p><h3><strong>The current reality without MCP:</strong></h3><ol><li><p>An AI agent that needs to check your calendar, then email a colleague, then update a database requires THREE separate custom integrations</p></li><li><p>Each integration has its own:</p><ul><li><p>Authentication system</p></li><li><p>Data formatting requirements</p></li><li><p>Error handling approach</p></li><li><p>Maintenance burden</p></li></ul></li><li><p>Adding a new tool means writing entirely new code</p></li></ol><p>This is why most AI applications stay limited to a handful of services - integration complexity creates a barrier.</p><p>MCP breaks through this barrier with one standard protocol for everything.</p><h2><strong>Technical breakdown: How MCP actually works</strong></h2><p>MCP uses a client-server architecture with JSON-RPC messages:</p><ul><li><p><strong>MCP Clients</strong>: AI models or applications that want to use external tools</p></li><li><p><strong>MCP Servers</strong>: Services that provide capabilities to the AI</p></li></ul><p>The protocol exposes three key components:</p><ol><li><p><strong>Tools</strong>: Functions the AI can call (like "sendEmail" or "searchDatabase")</p></li><li><p><strong>Resources</strong>: Data the AI can access (like files or database records)</p></li><li><p><strong>Prompts</strong>: Templates the AI can use for specific tasks</p></li></ol><p>The magic happens through dynamic discovery - AI models can automatically detect what capabilities are available without being explicitly programmed for each one.</p><h2><strong>MCP advantages: Why developers are adopting it</strong></h2><p>The benefits of MCP extend beyond just standardization:</p><p>&#9989; <strong>Universal compatibility</strong>: Works with any AI model (Claude, GPT, open-source LLMs)</p><p>&#9989; <strong>Bidirectional communication</strong>: Both retrieving data AND taking actions</p><p>&#9989; <strong>Reduced development time</strong>: Connect new services in minutes, not days</p><p>&#9989; <strong>Future-proof</strong>: Add new tools without changing your core application</p><p>&#9989; <strong>Context sharing</strong>: Maintain conversation state across different tools</p><p>As one developer put it: "MCP took our integration time from weeks to hours."</p><h2><strong>Current limitations: What to be aware of</strong></h2><p>MCP isn't perfect yet. Current challenges include:</p><p>&#9888;&#65039; <strong>Deployment complexity</strong>: Primarily local servers for now, though cloud options are coming</p><p>&#9888;&#65039; <strong>Security considerations</strong>: Authentication and permissions systems are still maturing</p><p>&#9888;&#65039; <strong>Performance overhead</strong>: Multiple connections can introduce latency</p><p>&#9888;&#65039; <strong>Tool quality variance</strong>: Effectiveness depends on how well tool interfaces are described</p><p>For simple projects with minimal integration needs, MCP might be overkill. But for complex AI applications connecting to multiple systems, the benefits far outweigh these limitations.</p><h2><strong>Available MCP servers: What you can use today</strong></h2><p>The ecosystem is growing rapidly. As of March 2025, <a href="https://github.com/punkpeye/awesome-mcp-servers">over 1,000 MCP servers are available</a> for services including:</p><ul><li><p>Slack and Discord</p></li><li><p>Google Workspace (Gmail, Drive, Calendar)</p></li><li><p>Database connectors (PostgreSQL, MongoDB)</p></li><li><p>Notion, Figma, and other productivity tools</p></li><li><p>CRM systems like Salesforce</p></li><li><p>Search engines and knowledge bases</p></li><li><p>Custom enterprise tools</p></li></ul><p>This collection of pre-built servers means you can often find what you need without building from scratch.</p><h2><strong>The roadmap: What's coming next for MCP</strong></h2><p>According to the <a href="https://modelcontextprotocol.io/development/roadmap">official MCP roadmap</a>, several key improvements are in development:</p><ol><li><p><strong>Remote servers with OAuth</strong>: Simplifying cloud deployments</p></li><li><p><strong>Registry system</strong>: Central discovery for available MCP servers</p></li><li><p><strong>Stateless connections</strong>: Improved scalability</p></li><li><p><strong>Performance optimizations</strong>: Reducing latency overhead</p></li><li><p><strong>Enhanced security</strong>: Better authentication and permissions</p></li></ol><p>These improvements address most of the current limitations, positioning MCP to become even more widely adopted.</p><h2><strong>Real-world example: MCP in action</strong></h2><p>To illustrate MCP's power, consider this financial advisor AI application:</p><p><strong>Without MCP</strong>: The developer would need to write custom integrations for banking APIs, investment platforms, spreadsheet access, and email services - each with different authentication, data formats, and maintenance requirements.</p><p><strong>With MCP</strong>: The developer connects pre-built MCP servers for each service, and the AI can:</p><ul><li><p>Check account balances</p></li><li><p>Analyze investment performance</p></li><li><p>Update budget spreadsheets</p></li><li><p>Send summary reports via email</p></li></ul><p>All through a single, consistent interface - dramatically reducing development time and complexity.</p><h2><strong>Comparison with alternatives: Where MCP fits</strong></h2><p>How does MCP compare to other approaches?</p><p><strong>Custom API integrations</strong>:</p><ul><li><p>Much more development work</p></li><li><p>Less flexibility and scalability</p></li><li><p>Higher maintenance burden</p></li></ul><p><strong>OpenAI plugins</strong>:</p><ul><li><p>Limited to OpenAI's ecosystem</p></li><li><p>Less standardized</p></li><li><p>Primarily one-way information retrieval</p></li></ul><p><strong>LangChain tools</strong>:</p><ul><li><p>Developer-focused rather than AI-focused</p></li><li><p>Requires more code for each integration</p></li><li><p>Less dynamic discovery</p></li></ul><p>MCP provides a more standardized, flexible, and AI-native approach to tool integration.</p><h2><strong>Conclusion: The future of AI connectivity</strong></h2><p>MCP solves a real pain point for AI developers - the integration mess. While it's still early days, MCP has the potential to become the standard way AI systems connect to external tools and data.</p><p>Just as USB standardized physical device connections and HTTP standardized web communications, MCP is standardizing how AI interfaces with the digital world.</p><p>As the protocol matures and adoption continues to accelerate, we'll likely see MCP become the foundation for more sophisticated AI applications that seamlessly interact with our digital tools and information.</p><p>The question isn't whether to use MCP, but when and how to integrate it into your AI development strategy.</p><h2><strong>What now?</strong></h2><ul><li><p>Explore the <a href="https://github.com/punkpeye/awesome-mcp-servers">collection of available MCP servers</a></p></li><li><p>Check the <a href="https://modelcontextprotocol.io/development/roadmap">official MCP roadmap</a> for upcoming features</p></li><li><p>Consider which of your AI projects would benefit from standardized tool access</p></li><li><p>Join the growing MCP community to share experiences and best practices</p></li></ul><p></p><div class="captioned-button-wrap" data-attrs="{&quot;url&quot;:&quot;https://www.thebuildup.dev/p/mcp-a-quick-overview?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="CaptionedButtonToDOM"><div class="preamble"><p class="cta-caption">Thanks for reading The Buildup! This post is public so feel free to share it.</p></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.thebuildup.dev/p/mcp-a-quick-overview?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.thebuildup.dev/p/mcp-a-quick-overview?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p></div><p></p>]]></content:encoded></item><item><title><![CDATA[How Secure is Telegram? A Deep Dive into the Messaging App's Privacy]]></title><description><![CDATA[Let's unpack the tech behind those "private" chats.]]></description><link>https://www.thebuildup.dev/p/how-secure-is-telegram-a-deep-dive</link><guid isPermaLink="false">https://www.thebuildup.dev/p/how-secure-is-telegram-a-deep-dive</guid><dc:creator><![CDATA[Robin]]></dc:creator><pubDate>Fri, 11 Apr 2025 11:01:48 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!aT8D!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c4c3632-f357-47d7-a1cb-d3a7e0246813_1200x675.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!aT8D!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c4c3632-f357-47d7-a1cb-d3a7e0246813_1200x675.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!aT8D!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c4c3632-f357-47d7-a1cb-d3a7e0246813_1200x675.jpeg 424w, https://substackcdn.com/image/fetch/$s_!aT8D!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c4c3632-f357-47d7-a1cb-d3a7e0246813_1200x675.jpeg 848w, https://substackcdn.com/image/fetch/$s_!aT8D!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c4c3632-f357-47d7-a1cb-d3a7e0246813_1200x675.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!aT8D!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c4c3632-f357-47d7-a1cb-d3a7e0246813_1200x675.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!aT8D!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c4c3632-f357-47d7-a1cb-d3a7e0246813_1200x675.jpeg" width="1200" height="675" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2c4c3632-f357-47d7-a1cb-d3a7e0246813_1200x675.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:675,&quot;width&quot;:1200,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:181492,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://thebuildupdev.substack.com/i/161088285?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c4c3632-f357-47d7-a1cb-d3a7e0246813_1200x675.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!aT8D!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c4c3632-f357-47d7-a1cb-d3a7e0246813_1200x675.jpeg 424w, https://substackcdn.com/image/fetch/$s_!aT8D!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c4c3632-f357-47d7-a1cb-d3a7e0246813_1200x675.jpeg 848w, https://substackcdn.com/image/fetch/$s_!aT8D!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c4c3632-f357-47d7-a1cb-d3a7e0246813_1200x675.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!aT8D!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c4c3632-f357-47d7-a1cb-d3a7e0246813_1200x675.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>With Telegram's CEO arrested in France, I got curious: How secure is Telegram, really?</p><p>Let's unpack the tech behind those "private" chats.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.thebuildup.dev/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading The Buildup! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><h2><strong>Telegram's chat types: What you need to know</strong></h2><p>When you start a new chat on Telegram:</p><p>&#128992; By default, you get:</p><ul><li><p>Regular private messages</p></li><li><p>Group chats</p></li><li><p>Channels</p></li></ul><p>These are NOT end-to-end encrypted</p><p>&#128994; You have to manually choose:</p><ul><li><p>"Secret Chats" for one-on-one convos</p></li></ul><p>This is the ONLY option with end-to-end encryption</p><p>Most users never switch to Secret Chats. Let's see why this matters.</p><h2><strong>Telegram's two encryption methods :</strong></h2><h3><strong>1&#65039;&#8419; Default encryption (what most people use):</strong></h3><ul><li><p>Uses MTProto, Telegram's custom protocol</p></li><li><p>Messages are encrypted... but Telegram has the keys</p></li><li><p>Telegram can read your messages if they want to</p></li></ul><h3><strong>2&#65039;&#8419; Secret Chats encryption:</strong></h3><ul><li><p>Uses improved MTProto 2.0</p></li><li><p>True end-to-end encryption</p></li><li><p>Only you and the recipient have the keys</p></li><li><p>Telegram can't read these messages</p></li></ul><p>The takeaway? Unless you're actively using Secret Chats, your Telegram messages aren't really private. So what's wrong with server encryption, it still is encryption right?</p><h2><strong>The problem with Telegram's default encryption:</strong></h2><ul><li><p>Messages are encrypted between you and Telegram's servers</p></li><li><p>BUT Telegram holds the encryption keys</p></li><li><p>This means:</p><ul><li><p>Telegram can decrypt and read your messages anytime</p></li><li><p>Your privacy relies on trusting Telegram won't abuse this access</p></li></ul></li></ul><p>Compare this to true end-to-end encryption:</p><ul><li><p>Even the service provider can't read your messages</p></li><li><p>Your chats are private, period.</p></li></ul><p>Bottom line: With Telegram's default, you're trusting them with your privacy. With true E2E, you don't have to trust anyone.</p><h2><strong>Why Telegram's encryption approach matters:</strong></h2><ol><li><p>Government requests:</p><ul><li><p>Telegram could be forced to hand over your messages</p></li><li><p>With true E2E, this wouldn't be possible</p></li></ul></li><li><p>Data breaches:</p><ul><li><p>If hackers breach Telegram's servers, your chats could be exposed</p></li><li><p>E2E encryption would protect you even if servers were compromised</p></li></ul></li><li><p>Trust issues:</p><ul><li><p>You're betting Telegram won't misuse your data</p></li><li><p>But why take that risk when other apps offer real privacy?</p></li></ul></li></ol><p>The big question: Do you trust Telegram with your private conversations? Let's have a look at other messaging apps.</p><h2><strong>Comparison with other messaging apps:</strong></h2><p><strong>Signal:</strong></p><ul><li><p>Open-source protocol developed by cryptography expert Moxie Marlinspike</p></li><li><p>Used by WhatsApp, Facebook Messenger (secret convos), and Google (encrypted RCS)</p></li><li><p>E2E encryption by default for all chats</p></li><li><p>Minimizes metadata collection</p></li><li><p>Non-profit organization, focused on privacy</p></li></ul><p><strong>WhatsApp:</strong></p><ul><li><p>Uses Signal Protocol for E2E encryption</p></li><li><p>E2E encryption by default since 2016</p></li><li><p>Owned by Meta, raising some trust concerns</p></li></ul><p><strong>iMessage:</strong></p><ul><li><p>Apple's proprietary E2E encryption</p></li><li><p>E2E encrypted by default since 2011</p></li><li><p>Limited to Apple devices</p></li></ul><p>Key point: These apps use E2E by default, unlike Telegram. But remember: even with E2E, apps may still collect metadata (who you talk to, when, etc.). This is also a privacy concern.</p><h2><strong>Conclusion: Telegram's security reality</strong></h2><p>Telegram's security isn't as straightforward as it seems:</p><ul><li><p>Default chats aren't truly private</p></li><li><p>Only "Secret Chats" offer real E2E encryption</p></li><li><p>Other major apps (Signal, WhatsApp, iMessage) use E2E by default</p></li></ul><p>The arrest of Telegram's CEO highlights the complex balance between privacy and accountability.</p><h2><strong>About the CEO's arrest</strong></h2><p>Pavel Durov faces charges in France for:</p><ul><li><p>Failure to moderate illegal content</p></li><li><p>Alleged hosting of:</p><ul><li><p>Drug trafficking</p></li><li><p>Child sexual abuse material</p></li><li><p>Fraud on the platform</p></li></ul></li></ul><p>This case highlights the complex balance between user privacy and platform accountability. It also raises questions: How much access should governments have to our communications? Can strong encryption coexist with effective moderation?</p><h2><strong>What now?</strong></h2><ul><li><p>Check your Telegram settings. Are you using Secret Chats when needed?</p></li><li><p>Consider alternatives like Signal for sensitive conversations</p></li><li><p>Stay informed about the privacy policies of your messaging apps</p></li></ul><p>What do you think? Is Telegram secure enough for you? Share this article to spread awareness! &#128257; Drop a comment with your thoughts &#128173;</p><h2><strong>Interesting sources:</strong></h2><ul><li><p>Detailed technical breakdown of Telegram's encryption by a cryptography expert</p><ul><li><p><a href="https://blog.cryptographyengineering.com/2024/08/25/telegram-is-not-really-an-encrypted-messaging-app/">Is Telegram really an encrypted messaging app?</a></p></li></ul></li><li><p>In-depth look at Durov's arrest and Telegram's content moderation challenges</p><ul><li><p><a href="https://www.theverge.com/2024/8/27/24229935/telegram-pavel-durov-france-arrest-moderation-crime">Telegram's CEO has taken a hands-off approach for years &#8212; now his luck might have run out</a></p></li></ul></li><li><p>Explores the legal implications of holding tech CEOs accountable for platform content</p><ul><li><p><a href="https://www.nytimes.com/2024/08/28/technology/durov-telegram-liability-platforms.html">Can Tech Executives Be Held Responsible for What Happens on Their Platforms?</a></p></li></ul></li></ul><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.thebuildup.dev/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading The Buildup! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item></channel></rss>