<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Aakash</title>
    <description>The latest articles on Forem by Aakash (@deathsaber).</description>
    <link>https://forem.com/deathsaber</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F2692176%2Fc01ef77d-2895-45c0-92b2-bf88e0061d86.jpg</url>
      <title>Forem: Aakash</title>
      <link>https://forem.com/deathsaber</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/deathsaber"/>
    <language>en</language>
    <item>
      <title>Why Most Bank Statement Converters Fail</title>
      <dc:creator>Aakash</dc:creator>
      <pubDate>Sun, 29 Mar 2026 12:47:44 +0000</pubDate>
      <link>https://forem.com/deathsaber/why-most-bank-statement-converters-fail-4ha9</link>
      <guid>https://forem.com/deathsaber/why-most-bank-statement-converters-fail-4ha9</guid>
      <description>&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/deathsaber/why-pdf-bank-statement-conversion-is-harder-than-it-looks-2opa" class="crayons-story__hidden-navigation-link"&gt;Why PDF Bank Statement Conversion Is Harder Than It Looks&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/deathsaber" class="crayons-avatar  crayons-avatar--l  "&gt;
            &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F2692176%2Fc01ef77d-2895-45c0-92b2-bf88e0061d86.jpg" alt="deathsaber profile" class="crayons-avatar__image" width="96" height="96"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/deathsaber" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Aakash
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Aakash
                
              
              &lt;div id="story-author-preview-content-3425116" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/deathsaber" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&gt;
                        &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F2692176%2Fc01ef77d-2895-45c0-92b2-bf88e0061d86.jpg" class="crayons-avatar__image" alt="" width="96" height="96"&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Aakash&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/deathsaber/why-pdf-bank-statement-conversion-is-harder-than-it-looks-2opa" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Mar 29&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/deathsaber/why-pdf-bank-statement-conversion-is-harder-than-it-looks-2opa" id="article-link-3425116"&gt;
          Why PDF Bank Statement Conversion Is Harder Than It Looks
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/ai"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;ai&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/fintech"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;fintech&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/saas"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;saas&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/productivity"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;productivity&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
            &lt;a href="https://dev.to/deathsaber/why-pdf-bank-statement-conversion-is-harder-than-it-looks-2opa#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              Comments


              &lt;span class="hidden s:inline"&gt;Add Comment&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            6 min read
          &lt;/small&gt;
            
              &lt;span class="bm-initial"&gt;
                

              &lt;/span&gt;
              &lt;span class="bm-success"&gt;
                

              &lt;/span&gt;
            
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;


</description>
      <category>ai</category>
      <category>fintech</category>
      <category>saas</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Why Just PDF-to-Excel Is Not Enough For Bank Statements</title>
      <dc:creator>Aakash</dc:creator>
      <pubDate>Sun, 29 Mar 2026 12:47:05 +0000</pubDate>
      <link>https://forem.com/deathsaber/why-just-pdf-to-excel-is-not-enough-for-bank-statements-nb8</link>
      <guid>https://forem.com/deathsaber/why-just-pdf-to-excel-is-not-enough-for-bank-statements-nb8</guid>
      <description>&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/deathsaber/why-pdf-bank-statement-conversion-is-harder-than-it-looks-2opa" class="crayons-story__hidden-navigation-link"&gt;Why PDF Bank Statement Conversion Is Harder Than It Looks&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/deathsaber" class="crayons-avatar  crayons-avatar--l  "&gt;
            &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F2692176%2Fc01ef77d-2895-45c0-92b2-bf88e0061d86.jpg" alt="deathsaber profile" class="crayons-avatar__image" width="96" height="96"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/deathsaber" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Aakash
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Aakash
                
              
              &lt;div id="story-author-preview-content-3425116" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/deathsaber" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&gt;
                        &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F2692176%2Fc01ef77d-2895-45c0-92b2-bf88e0061d86.jpg" class="crayons-avatar__image" alt="" width="96" height="96"&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Aakash&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/deathsaber/why-pdf-bank-statement-conversion-is-harder-than-it-looks-2opa" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Mar 29&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/deathsaber/why-pdf-bank-statement-conversion-is-harder-than-it-looks-2opa" id="article-link-3425116"&gt;
          Why PDF Bank Statement Conversion Is Harder Than It Looks
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/ai"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;ai&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/fintech"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;fintech&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/saas"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;saas&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/productivity"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;productivity&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
            &lt;a href="https://dev.to/deathsaber/why-pdf-bank-statement-conversion-is-harder-than-it-looks-2opa#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              Comments


              &lt;span class="hidden s:inline"&gt;Add Comment&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            6 min read
          &lt;/small&gt;
            
              &lt;span class="bm-initial"&gt;
                

              &lt;/span&gt;
              &lt;span class="bm-success"&gt;
                

              &lt;/span&gt;
            
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;


</description>
      <category>ai</category>
      <category>fintech</category>
      <category>saas</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Why PDF Bank Statement Conversion Is Harder Than It Looks</title>
      <dc:creator>Aakash</dc:creator>
      <pubDate>Sun, 29 Mar 2026 12:45:43 +0000</pubDate>
      <link>https://forem.com/deathsaber/why-pdf-bank-statement-conversion-is-harder-than-it-looks-2opa</link>
      <guid>https://forem.com/deathsaber/why-pdf-bank-statement-conversion-is-harder-than-it-looks-2opa</guid>
      <description>&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;A bank statement PDF to Excel converter sounds like a solved problem until you actually start looking at real statements. The easy part is getting some rows out. The hard part is getting output that somebody can trust enough to use without doing half the work manually again.&lt;/p&gt;

&lt;p&gt;That was the big realization for me.&lt;/p&gt;

&lt;p&gt;What looked like a simple OCR or extraction problem turned out to be a much uglier workflow problem involving layout variance, scanned documents, broken tables, inconsistent debit and credit conventions, balance mismatches and a very unforgiving downstream use-case. In accounting and bookkeeping workflows, “almost correct” is often just a slower form of manual work.&lt;/p&gt;

&lt;p&gt;That is the problem space I ended up getting into with a friend of mine, and it eventually became the basis for &lt;a href="https://smartbankstatement.com" rel="noopener noreferrer"&gt;Smart Bank Statement&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  The naive version of the problem
&lt;/h2&gt;

&lt;p&gt;On paper, this problem sounds embarrassingly simple.&lt;/p&gt;

&lt;p&gt;Take a PDF bank statement. Extract the rows. Put them into Excel or CSV. Done.&lt;/p&gt;

&lt;p&gt;That is how most people think about it at first, and honestly, that is also how a lot of tools position it. They talk about conversion as if the job ends the moment rows appear in a spreadsheet.&lt;/p&gt;

&lt;p&gt;But that framing hides the real problem.&lt;/p&gt;

&lt;p&gt;Because when somebody says they want to convert a bank statement PDF into Excel, they usually do not mean “give me some table-like output.” They mean “give me data that is clean enough to reconcile, import, audit or work with downstream without me babysitting every row.”&lt;/p&gt;

&lt;p&gt;That is a much higher bar.&lt;/p&gt;

&lt;p&gt;Once you use that bar instead of the softer “did we extract something?” bar, the problem changes shape immediately.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where things start breaking
&lt;/h2&gt;

&lt;p&gt;A lot of document workflows look good right until you leave clean demo inputs and meet real files.&lt;/p&gt;

&lt;p&gt;Bank statements are especially annoying because the documents vary in all the ways that matter. Some are digital PDFs with selectable text. Some are scanned. Some have low quality images. Some use multi-column layouts. Some place debit and credit in separate columns. Some collapse them into one amount column and expect the sign convention to imply direction. Some carry balances row by row. Some do not. Some have strange description wrapping or continuation rows. Some have pages where the statement header, footer or summary table looks suspiciously like transactional content.&lt;/p&gt;

&lt;p&gt;And then there are the really fun ones: documents with multiple accounts in one file, broken table boundaries, passbook-style formats or statements where the extraction is not catastrophically wrong, just subtly wrong enough to waste your afternoon.&lt;/p&gt;

&lt;p&gt;That last category is the one I dislike most.&lt;/p&gt;

&lt;p&gt;If the extraction completely fails, at least the failure is obvious. If it succeeds just enough to look plausible while still shifting a row, dropping a value or distorting a balance trail, the user has to detect it manually. In finance workflows, that is where trust gets destroyed.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why OCR accuracy is the wrong metric
&lt;/h2&gt;

&lt;p&gt;One thing I became more skeptical of very quickly is marketing around raw OCR accuracy.&lt;/p&gt;

&lt;p&gt;The reason is simple: accuracy by itself is too vague to mean much in this context.&lt;/p&gt;

&lt;p&gt;A tool can claim very high extraction accuracy and still fail the actual workflow. It can extract text well and still produce inconsistent structure. It can identify numbers correctly and still associate them with the wrong row. It can read a page and still mis-handle the running balance. It can parse a date and still break when a narrative spills across lines.&lt;/p&gt;

&lt;p&gt;So the real question is not just, “How accurately did you read the document?”&lt;/p&gt;

&lt;p&gt;It is, “Can the output be trusted enough that the user saves time instead of spending that time validating the tool?”&lt;/p&gt;

&lt;p&gt;That is a very different metric.&lt;/p&gt;

&lt;p&gt;In bookkeeping or accounting, 99% correctness is not automatically good if the missing 1% takes disproportionate effort to find. One bad transaction can force somebody to retrace the whole sheet. A balance mismatch means somebody has to stop and investigate. A few line items shifted out of place can make a reconciliation job unreliable.&lt;/p&gt;

&lt;p&gt;So for me, this stopped being an OCR problem pretty fast. It became a trust, validation and downstream-structure problem.&lt;/p&gt;

&lt;h2&gt;
  
  
  The market realization
&lt;/h2&gt;

&lt;p&gt;This part also changed how I thought about the product side of it.&lt;/p&gt;

&lt;p&gt;When I first got into this space, the broader finance angle looked tempting. Dashboards, summaries, analysis, personal finance views, maybe even a bigger “financial intelligence” layer. That all sounds interesting, and it demos well.&lt;/p&gt;

&lt;p&gt;But the pain there felt softer.&lt;/p&gt;

&lt;p&gt;The harder, more immediate pain was earlier in the pipeline: getting messy statements into a usable format in the first place. Before dashboards, before analytics, before any fancy insight layer, there is an ugly preprocessing problem. And if that problem is not solved well, everything after it gets contaminated.&lt;/p&gt;

&lt;p&gt;That was where things started becoming more compelling.&lt;/p&gt;

&lt;p&gt;My friend Rupam had already been exploring the space when I got involved. Once I joined, a lot of our conversations became less about “what broad finance thing can we build?” and more about “where is the sharper workflow pain, and what are people already wasting time on?”&lt;/p&gt;

&lt;p&gt;That question led us toward bank statements and document conversion much more strongly than toward the analyzer-style direction.&lt;/p&gt;

&lt;h2&gt;
  
  
  What building around this taught me
&lt;/h2&gt;

&lt;p&gt;The first lesson was that “PDF to Excel” is one of those phrases that hides an enormous amount of unpleasant detail behind a very normal-sounding sentence.&lt;/p&gt;

&lt;p&gt;The second lesson was that narrowing the product made it stronger.&lt;/p&gt;

&lt;p&gt;There is a strong temptation, especially early on, to make a product broader because broader sounds more ambitious. In reality, broader often means blurrier. The more we looked at the workflow, the more it made sense to stay focused: take bank statement PDFs, extract the data, normalize it properly and make the result actually usable.&lt;/p&gt;

&lt;p&gt;The third lesson was that extraction is only one layer. Validation matters just as much. In some cases, more. If you do not have ways to detect suspicious output, verify balance consistency or surface probable mistakes, you are not really solving the full problem. You are just producing output that still needs human suspicion attached to it.&lt;/p&gt;

&lt;p&gt;And once human suspicion becomes mandatory, part of the product value disappears.&lt;/p&gt;

&lt;h2&gt;
  
  
  What we ended up building
&lt;/h2&gt;

&lt;p&gt;That is the line of thinking that eventually became Smart Bank Statement.&lt;/p&gt;

&lt;p&gt;Rupam had the initial seed of the idea. I joined once things were already moving, and together we pushed it through the more difficult stage: looking harder at the market, rejecting the softer and more crowded direction, narrowing the scope and getting an MVP built around a workflow that felt painful enough to matter.&lt;/p&gt;

&lt;p&gt;I do not find that story as glamorous as the polished startup version where the product vision arrives fully formed from day one. But it is closer to how real products actually happen.&lt;/p&gt;

&lt;p&gt;Usually, the better version only reveals itself after you spend time with the uglier parts of the workflow.&lt;/p&gt;

&lt;p&gt;In this case, the uglier part was clear enough: bank statement PDFs are not hard because they are impossible to read. They are hard because people need the output to be trustworthy.&lt;/p&gt;

&lt;p&gt;That difference ended up shaping both the build and the business direction.&lt;/p&gt;

&lt;h2&gt;
  
  
  Parting thoughts
&lt;/h2&gt;

&lt;p&gt;If you are working on document AI, OCR or extraction tooling, I think this is an easy trap to fall into: treating extraction success as the end of the problem.&lt;/p&gt;

&lt;p&gt;A lot of the time, it is just the beginning.&lt;/p&gt;

&lt;p&gt;The real problem starts when the extracted output has to survive contact with actual use. Can somebody reconcile with it? Can they import it? Can they audit it? Can they trust it enough not to manually re-check everything anyway?&lt;/p&gt;

&lt;p&gt;That is the standard I care about much more now.&lt;/p&gt;

&lt;p&gt;And that shift in perspective is probably the most useful thing I got from building in this space.&lt;/p&gt;

&lt;p&gt;The tool that came out of it is Smart Bank Statement, but the bigger lesson for me was this: document extraction stops being an OCR problem very quickly. It becomes a reliability problem.&lt;/p&gt;

&lt;p&gt;And reliability is always where the easy-looking stuff gets hard.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>fintech</category>
      <category>saas</category>
      <category>productivity</category>
    </item>
    <item>
      <title>How I Keep Coding Agents from Creating Monoliths and Repetition</title>
      <dc:creator>Aakash</dc:creator>
      <pubDate>Sat, 21 Mar 2026 19:14:50 +0000</pubDate>
      <link>https://forem.com/deathsaber/how-i-keep-coding-agents-from-creating-monoliths-and-repetition-4gmd</link>
      <guid>https://forem.com/deathsaber/how-i-keep-coding-agents-from-creating-monoliths-and-repetition-4gmd</guid>
      <description>&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/deathsaber/ai-can-write-code-fast-keeping-it-clean-is-the-hard-part-16m3" class="crayons-story__hidden-navigation-link"&gt;AI Can Write Code Fast. Keeping It Clean Is the Hard Part&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/deathsaber" class="crayons-avatar  crayons-avatar--l  "&gt;
            &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F2692176%2Fc01ef77d-2895-45c0-92b2-bf88e0061d86.jpg" alt="deathsaber profile" class="crayons-avatar__image" width="96" height="96"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/deathsaber" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Aakash
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Aakash
                
              
              &lt;div id="story-author-preview-content-3381388" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/deathsaber" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&gt;
                        &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F2692176%2Fc01ef77d-2895-45c0-92b2-bf88e0061d86.jpg" class="crayons-avatar__image" alt="" width="96" height="96"&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Aakash&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/deathsaber/ai-can-write-code-fast-keeping-it-clean-is-the-hard-part-16m3" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Mar 21&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/deathsaber/ai-can-write-code-fast-keeping-it-clean-is-the-hard-part-16m3" id="article-link-3381388"&gt;
          AI Can Write Code Fast. Keeping It Clean Is the Hard Part
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag crayons-tag--filled  " href="/t/discuss"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;discuss&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/ai"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;ai&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/llm"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;llm&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/vibecoding"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;vibecoding&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
            &lt;a href="https://dev.to/deathsaber/ai-can-write-code-fast-keeping-it-clean-is-the-hard-part-16m3#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              Comments


              &lt;span class="hidden s:inline"&gt;Add Comment&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            2 min read
          &lt;/small&gt;
            
              &lt;span class="bm-initial"&gt;
                

              &lt;/span&gt;
              &lt;span class="bm-success"&gt;
                

              &lt;/span&gt;
            
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;


</description>
      <category>ai</category>
      <category>discuss</category>
      <category>llm</category>
      <category>vibecoding</category>
    </item>
    <item>
      <title>Coding Agents Keep Wrecking My Clean Scaffolding — So I Fixed the Rules</title>
      <dc:creator>Aakash</dc:creator>
      <pubDate>Sat, 21 Mar 2026 19:14:27 +0000</pubDate>
      <link>https://forem.com/deathsaber/coding-agents-keep-wrecking-my-clean-scaffolding-so-i-fixed-the-rules-dp5</link>
      <guid>https://forem.com/deathsaber/coding-agents-keep-wrecking-my-clean-scaffolding-so-i-fixed-the-rules-dp5</guid>
      <description>&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/deathsaber/ai-can-write-code-fast-keeping-it-clean-is-the-hard-part-16m3" class="crayons-story__hidden-navigation-link"&gt;AI Can Write Code Fast. Keeping It Clean Is the Hard Part&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/deathsaber" class="crayons-avatar  crayons-avatar--l  "&gt;
            &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F2692176%2Fc01ef77d-2895-45c0-92b2-bf88e0061d86.jpg" alt="deathsaber profile" class="crayons-avatar__image" width="96" height="96"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/deathsaber" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Aakash
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Aakash
                
              
              &lt;div id="story-author-preview-content-3381388" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/deathsaber" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&gt;
                        &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F2692176%2Fc01ef77d-2895-45c0-92b2-bf88e0061d86.jpg" class="crayons-avatar__image" alt="" width="96" height="96"&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Aakash&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/deathsaber/ai-can-write-code-fast-keeping-it-clean-is-the-hard-part-16m3" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Mar 21&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/deathsaber/ai-can-write-code-fast-keeping-it-clean-is-the-hard-part-16m3" id="article-link-3381388"&gt;
          AI Can Write Code Fast. Keeping It Clean Is the Hard Part
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag crayons-tag--filled  " href="/t/discuss"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;discuss&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/ai"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;ai&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/llm"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;llm&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/vibecoding"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;vibecoding&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
            &lt;a href="https://dev.to/deathsaber/ai-can-write-code-fast-keeping-it-clean-is-the-hard-part-16m3#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              Comments


              &lt;span class="hidden s:inline"&gt;Add Comment&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            2 min read
          &lt;/small&gt;
            
              &lt;span class="bm-initial"&gt;
                

              &lt;/span&gt;
              &lt;span class="bm-success"&gt;
                

              &lt;/span&gt;
            
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;


</description>
      <category>ai</category>
      <category>discuss</category>
      <category>llm</category>
      <category>vibecoding</category>
    </item>
    <item>
      <title>AI Can Write Code Fast. Keeping It Clean Is the Hard Part</title>
      <dc:creator>Aakash</dc:creator>
      <pubDate>Sat, 21 Mar 2026 19:12:32 +0000</pubDate>
      <link>https://forem.com/deathsaber/ai-can-write-code-fast-keeping-it-clean-is-the-hard-part-16m3</link>
      <guid>https://forem.com/deathsaber/ai-can-write-code-fast-keeping-it-clean-is-the-hard-part-16m3</guid>
      <description>&lt;p&gt;I'll keep this one shorter than usual. &lt;/p&gt;

&lt;p&gt;Remember the good old days when we wrote the entire codebase by hand? Being the writer, we knew the pains of maintaining it so we'd keep it as clean and minimal as possible and avoid spaghetti logic and repetition.&lt;/p&gt;

&lt;p&gt;With the advent of Coding Agents, coding has never been easier but also, never been messier. Huge functions, giant files, repeated logic, contradictory assumptions, logic strewn around like spaghetti without a proper structure etc. are just a few of the problems I have noticed. Now, just a review takes so much of cognitive overload from just trying to follow the structure, forget wrapping your head around the huge monoliths.&lt;br&gt;
In so many of my projects I see this pattern repeat - I set up a scaffolding and put in the backbone - all clean and DRY. Then the agent takes over. By the time it is done, the drift from my clean code to the mess makes me want to gorge my eyes out!&lt;/p&gt;

&lt;p&gt;I tried prompting it to JUST KEEP IT CLEAN, DRY AND REUSE INSTEAD OF RE-INVENT but with repeated context compressions, it soon gets lost. Well, I got fed up and thought of writing a set of SKILLS but came across the &lt;strong&gt;clean code skills&lt;/strong&gt; pack which enforce Robert C. Martin's Clean Code principles. The set of skills were good but it missed the major pain I faced - keeping the code appropriate and avoiding monoliths. So I forked it and added the skill in. I have submitted a PR to the upstream but meanwhile, you can use my &lt;a href="https://github.com/aakashH242/clean-dry-code-skills" rel="noopener noreferrer"&gt;fork - CLEAN DRY CODE SKILLS&lt;/a&gt;. It's mainly for python but the principles can be applied to other languages too.&lt;/p&gt;

&lt;p&gt;I hope the community finds it useful. Please add in other skills there you think is missing - I will be maintaining this fork so we can get it merged there. Do drop a star if you like it! &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;PS&lt;/strong&gt; - I'm curious to find what other drifts and annoying patterns you have noticed when an agent works on your codebase.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>discuss</category>
      <category>llm</category>
      <category>vibecoding</category>
    </item>
    <item>
      <title>I Thought I Built an MCP Adapter. I Actually Built an Attack Surface.</title>
      <dc:creator>Aakash</dc:creator>
      <pubDate>Mon, 16 Mar 2026 18:42:16 +0000</pubDate>
      <link>https://forem.com/deathsaber/i-thought-i-built-an-mcp-adapter-i-actually-built-an-attack-surface-3cio</link>
      <guid>https://forem.com/deathsaber/i-thought-i-built-an-mcp-adapter-i-actually-built-an-attack-surface-3cio</guid>
      <description>&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/deathsaber/the-day-my-mcp-adapter-stopped-being-just-plumbing-k60" class="crayons-story__hidden-navigation-link"&gt;The day my MCP adapter stopped being just plumbing&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/deathsaber" class="crayons-avatar  crayons-avatar--l  "&gt;
            &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F2692176%2Fc01ef77d-2895-45c0-92b2-bf88e0061d86.jpg" alt="deathsaber profile" class="crayons-avatar__image" width="96" height="96"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/deathsaber" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Aakash
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Aakash
                
              
              &lt;div id="story-author-preview-content-3359987" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/deathsaber" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&gt;
                        &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F2692176%2Fc01ef77d-2895-45c0-92b2-bf88e0061d86.jpg" class="crayons-avatar__image" alt="" width="96" height="96"&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Aakash&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/deathsaber/the-day-my-mcp-adapter-stopped-being-just-plumbing-k60" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Mar 16&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/deathsaber/the-day-my-mcp-adapter-stopped-being-just-plumbing-k60" id="article-link-3359987"&gt;
          The day my MCP adapter stopped being just plumbing
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag crayons-tag--filled  " href="/t/showdev"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;showdev&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/ai"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;ai&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/mcp"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;mcp&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/security"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;security&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
          &lt;a href="https://dev.to/deathsaber/the-day-my-mcp-adapter-stopped-being-just-plumbing-k60" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;1&lt;span class="hidden s:inline"&gt; reaction&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/deathsaber/the-day-my-mcp-adapter-stopped-being-just-plumbing-k60#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              Comments


              &lt;span class="hidden s:inline"&gt;Add Comment&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            6 min read
          &lt;/small&gt;
            
              &lt;span class="bm-initial"&gt;
                

              &lt;/span&gt;
              &lt;span class="bm-success"&gt;
                

              &lt;/span&gt;
            
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;


</description>
      <category>ai</category>
      <category>mcp</category>
      <category>security</category>
      <category>showdev</category>
    </item>
    <item>
      <title>Remote MCP Adapter v0.3.0: When a Gateway Becomes a Security Boundary</title>
      <dc:creator>Aakash</dc:creator>
      <pubDate>Mon, 16 Mar 2026 18:41:04 +0000</pubDate>
      <link>https://forem.com/deathsaber/remote-mcp-adapter-v030-when-a-gateway-becomes-a-security-boundary-2nij</link>
      <guid>https://forem.com/deathsaber/remote-mcp-adapter-v030-when-a-gateway-becomes-a-security-boundary-2nij</guid>
      <description>&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/deathsaber/the-day-my-mcp-adapter-stopped-being-just-plumbing-k60" class="crayons-story__hidden-navigation-link"&gt;The day my MCP adapter stopped being just plumbing&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/deathsaber" class="crayons-avatar  crayons-avatar--l  "&gt;
            &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F2692176%2Fc01ef77d-2895-45c0-92b2-bf88e0061d86.jpg" alt="deathsaber profile" class="crayons-avatar__image" width="96" height="96"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/deathsaber" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Aakash
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Aakash
                
              
              &lt;div id="story-author-preview-content-3359987" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/deathsaber" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&gt;
                        &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F2692176%2Fc01ef77d-2895-45c0-92b2-bf88e0061d86.jpg" class="crayons-avatar__image" alt="" width="96" height="96"&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Aakash&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/deathsaber/the-day-my-mcp-adapter-stopped-being-just-plumbing-k60" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Mar 16&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/deathsaber/the-day-my-mcp-adapter-stopped-being-just-plumbing-k60" id="article-link-3359987"&gt;
          The day my MCP adapter stopped being just plumbing
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag crayons-tag--filled  " href="/t/showdev"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;showdev&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/ai"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;ai&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/mcp"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;mcp&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/security"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;security&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
          &lt;a href="https://dev.to/deathsaber/the-day-my-mcp-adapter-stopped-being-just-plumbing-k60" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;1&lt;span class="hidden s:inline"&gt; reaction&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/deathsaber/the-day-my-mcp-adapter-stopped-being-just-plumbing-k60#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              Comments


              &lt;span class="hidden s:inline"&gt;Add Comment&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            6 min read
          &lt;/small&gt;
            
              &lt;span class="bm-initial"&gt;
                

              &lt;/span&gt;
              &lt;span class="bm-success"&gt;
                

              &lt;/span&gt;
            
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;


</description>
      <category>ai</category>
      <category>mcp</category>
      <category>security</category>
      <category>showdev</category>
    </item>
    <item>
      <title>Remote MCP Is Not Just a Transport Problem Anymore</title>
      <dc:creator>Aakash</dc:creator>
      <pubDate>Mon, 16 Mar 2026 18:40:11 +0000</pubDate>
      <link>https://forem.com/deathsaber/remote-mcp-is-not-just-a-transport-problem-anymore-2fik</link>
      <guid>https://forem.com/deathsaber/remote-mcp-is-not-just-a-transport-problem-anymore-2fik</guid>
      <description>&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/deathsaber/the-day-my-mcp-adapter-stopped-being-just-plumbing-k60" class="crayons-story__hidden-navigation-link"&gt;The day my MCP adapter stopped being just plumbing&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/deathsaber" class="crayons-avatar  crayons-avatar--l  "&gt;
            &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F2692176%2Fc01ef77d-2895-45c0-92b2-bf88e0061d86.jpg" alt="deathsaber profile" class="crayons-avatar__image" width="96" height="96"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/deathsaber" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Aakash
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Aakash
                
              
              &lt;div id="story-author-preview-content-3359987" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/deathsaber" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&gt;
                        &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F2692176%2Fc01ef77d-2895-45c0-92b2-bf88e0061d86.jpg" class="crayons-avatar__image" alt="" width="96" height="96"&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Aakash&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/deathsaber/the-day-my-mcp-adapter-stopped-being-just-plumbing-k60" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Mar 16&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/deathsaber/the-day-my-mcp-adapter-stopped-being-just-plumbing-k60" id="article-link-3359987"&gt;
          The day my MCP adapter stopped being just plumbing
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag crayons-tag--filled  " href="/t/showdev"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;showdev&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/ai"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;ai&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/mcp"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;mcp&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/security"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;security&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
          &lt;a href="https://dev.to/deathsaber/the-day-my-mcp-adapter-stopped-being-just-plumbing-k60" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;1&lt;span class="hidden s:inline"&gt; reaction&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/deathsaber/the-day-my-mcp-adapter-stopped-being-just-plumbing-k60#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              Comments


              &lt;span class="hidden s:inline"&gt;Add Comment&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            6 min read
          &lt;/small&gt;
            
              &lt;span class="bm-initial"&gt;
                

              &lt;/span&gt;
              &lt;span class="bm-success"&gt;
                

              &lt;/span&gt;
            
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;


</description>
      <category>ai</category>
      <category>mcp</category>
      <category>security</category>
      <category>showdev</category>
    </item>
    <item>
      <title>I Built an MCP Adapter for Convenience. Then I Had to Harden It</title>
      <dc:creator>Aakash</dc:creator>
      <pubDate>Mon, 16 Mar 2026 18:39:25 +0000</pubDate>
      <link>https://forem.com/deathsaber/i-built-an-mcp-adapter-for-convenience-then-i-had-to-harden-it-2hb</link>
      <guid>https://forem.com/deathsaber/i-built-an-mcp-adapter-for-convenience-then-i-had-to-harden-it-2hb</guid>
      <description>&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/deathsaber/the-day-my-mcp-adapter-stopped-being-just-plumbing-k60" class="crayons-story__hidden-navigation-link"&gt;The day my MCP adapter stopped being just plumbing&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/deathsaber" class="crayons-avatar  crayons-avatar--l  "&gt;
            &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F2692176%2Fc01ef77d-2895-45c0-92b2-bf88e0061d86.jpg" alt="deathsaber profile" class="crayons-avatar__image" width="96" height="96"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/deathsaber" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Aakash
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Aakash
                
              
              &lt;div id="story-author-preview-content-3359987" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/deathsaber" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&gt;
                        &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F2692176%2Fc01ef77d-2895-45c0-92b2-bf88e0061d86.jpg" class="crayons-avatar__image" alt="" width="96" height="96"&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Aakash&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/deathsaber/the-day-my-mcp-adapter-stopped-being-just-plumbing-k60" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Mar 16&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/deathsaber/the-day-my-mcp-adapter-stopped-being-just-plumbing-k60" id="article-link-3359987"&gt;
          The day my MCP adapter stopped being just plumbing
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag crayons-tag--filled  " href="/t/showdev"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;showdev&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/ai"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;ai&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/mcp"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;mcp&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/security"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;security&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
          &lt;a href="https://dev.to/deathsaber/the-day-my-mcp-adapter-stopped-being-just-plumbing-k60" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;1&lt;span class="hidden s:inline"&gt; reaction&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/deathsaber/the-day-my-mcp-adapter-stopped-being-just-plumbing-k60#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              Comments


              &lt;span class="hidden s:inline"&gt;Add Comment&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            6 min read
          &lt;/small&gt;
            
              &lt;span class="bm-initial"&gt;
                

              &lt;/span&gt;
              &lt;span class="bm-success"&gt;
                

              &lt;/span&gt;
            
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;


</description>
    </item>
    <item>
      <title>The day my MCP adapter stopped being just plumbing</title>
      <dc:creator>Aakash</dc:creator>
      <pubDate>Mon, 16 Mar 2026 18:35:56 +0000</pubDate>
      <link>https://forem.com/deathsaber/the-day-my-mcp-adapter-stopped-being-just-plumbing-k60</link>
      <guid>https://forem.com/deathsaber/the-day-my-mcp-adapter-stopped-being-just-plumbing-k60</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;TL;DR:&lt;/strong&gt; &lt;a href="https://github.com/aakashh242/remote-mcp-adapter" rel="noopener noreferrer"&gt;Remote MCP Adapter&lt;/a&gt; started as a usability layer for remote MCP workflows, but recent MCP tool-poisoning research made one thing painfully clear: middleware in the path is also part of the security boundary. In v0.3.0, I added tool-definition pinning, drift detection, metadata sanitization, description minimization, and stricter session binding to reduce what unsafe upstream metadata and session misuse can do.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;After finishing the core work for &lt;a href="https://github.com/aakashh242/remote-mcp-adapter" rel="noopener noreferrer"&gt;Remote MCP Adapter&lt;/a&gt;, I did what most of us do after shipping something that finally works: I stepped back and started looking around.&lt;/p&gt;

&lt;p&gt;I wanted to see how other people were dealing with the same class of problems. Remote MCP is useful, but once the client and server stop sharing a filesystem, things get ugly fast. Uploads become awkward. Generated files become awkward. Anything involving screenshots, PDFs, artifacts, or session-scoped state becomes awkward. That was the original reason I built the adapter in the first place.&lt;/p&gt;

&lt;p&gt;I wrote more about that side of the story in &lt;a href="https://dev.to/deathsaber/why-remote-mcp-servers-break-when-tools-touch-files-2em"&gt;the earlier blog that inspired this work&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Then I ran into a post on DEV: &lt;a href="https://dev.to/luckypipewrench/your-mcp-servers-tool-descriptions-are-an-attack-surface-37pj"&gt;Your MCP server's tool descriptions are an attack surface&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;That post, along with the underlying research it points to, forced an uncomfortable realization.&lt;/p&gt;

&lt;p&gt;The adapter I had built to make remote MCP usable had already placed itself in the middle of a trust boundary.&lt;/p&gt;

&lt;p&gt;And if something sits in the middle of a trust boundary, it does not get to pretend it is just plumbing anymore.&lt;/p&gt;

&lt;h2&gt;
  
  
  The realization
&lt;/h2&gt;

&lt;p&gt;My adapter was already doing serious work. It was sitting between the client and upstream MCP servers. It was forwarding model-visible tool metadata. It was managing uploads, artifacts, and per-session state. It was translating behavior across boundaries that do not exist in local-only setups.&lt;/p&gt;

&lt;p&gt;That is the kind of component people often mentally classify as a thin relay.&lt;/p&gt;

&lt;p&gt;It is not.&lt;/p&gt;

&lt;p&gt;Once a gateway or adapter sees tool catalogs, schema text, descriptions, session identifiers, uploads, auth context, and returned artifacts, it has already become part of the system's security posture whether the maintainer planned for that or not.&lt;/p&gt;

&lt;p&gt;That was the moment the project changed in my head.&lt;/p&gt;

&lt;p&gt;Remote MCP Adapter was no longer just a convenience layer for remote file and artifact handling. It had also become a natural enforcement point.&lt;/p&gt;

&lt;p&gt;Not a silver bullet. Not an AI firewall. Not some magical solution to MCP security.&lt;/p&gt;

&lt;p&gt;But definitely an enforcement point.&lt;/p&gt;

&lt;h2&gt;
  
  
  What changed in v0.3.0
&lt;/h2&gt;

&lt;p&gt;v0.3.0 is the first release where I treated the adapter like that explicitly.&lt;/p&gt;

&lt;p&gt;The goal was not to solve all MCP security problems. That would be dishonest.&lt;/p&gt;

&lt;p&gt;The goal was narrower and much more practical:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;stop blindly relaying model-visible tool metadata&lt;/li&gt;
&lt;li&gt;detect when tool definitions drift mid-session&lt;/li&gt;
&lt;li&gt;reduce how much unsafe or unnecessary description text reaches the model&lt;/li&gt;
&lt;li&gt;tighten the adapter's own session semantics once stateful features and auth are involved&lt;/li&gt;
&lt;li&gt;document what is implemented and what is still out of scope&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That led to five concrete changes.&lt;/p&gt;

&lt;h3&gt;
  
  
  1) Safer defaults for model-visible tool metadata
&lt;/h3&gt;

&lt;p&gt;The adapter now takes a stricter default stance for tool metadata.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;core.tool_metadata_sanitization.mode&lt;/code&gt; now defaults to &lt;code&gt;sanitize&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;core.tool_definition_pinning.mode&lt;/code&gt; now defaults to &lt;code&gt;warn&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That default matters.&lt;/p&gt;

&lt;p&gt;Before this, users had to think like security engineers up front and opt into the right behavior. Now the adapter starts from a safer position and becomes stricter from there if the environment demands it.&lt;/p&gt;

&lt;p&gt;I prefer that tradeoff. A lot of security features die in the field simply because they exist only as options nobody enables.&lt;/p&gt;

&lt;h3&gt;
  
  
  2) Tool-definition pinning and drift detection
&lt;/h3&gt;

&lt;p&gt;This one addresses what some people are calling the "rug pull" problem.&lt;/p&gt;

&lt;p&gt;If a server presents one tool catalog at the start of a session and then later changes tool titles, descriptions, or schemas, that is not a harmless cosmetic update anymore. That is model-visible behavior changing under an already-established trust relationship.&lt;/p&gt;

&lt;p&gt;So the adapter can now baseline the first visible tool catalog for a session and compare later catalogs against it.&lt;/p&gt;

&lt;p&gt;When a drift is detected, policy decides what happens next:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;warn&lt;/li&gt;
&lt;li&gt;block&lt;/li&gt;
&lt;li&gt;invalidate the session entirely&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is not meant to be clever. It is meant to be boring and reliable.&lt;/p&gt;

&lt;p&gt;If the thing the model sees has changed, that change should not pass through silently.&lt;/p&gt;

&lt;h3&gt;
  
  
  3) Metadata sanitization before forwarding tool schemas
&lt;/h3&gt;

&lt;p&gt;Tool poisoning is not only about the top-level tool description.&lt;/p&gt;

&lt;p&gt;That is one of the most important takeaways from the recent research. Once tool metadata enters the model context, any model-visible text can become an instruction surface: titles, descriptions, schema text, annotation titles, nested descriptions, and other fields that look harmless when treated like normal software metadata.&lt;/p&gt;

&lt;p&gt;So v0.3.0 adds model-visible metadata sanitization for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;tool titles&lt;/li&gt;
&lt;li&gt;tool descriptions&lt;/li&gt;
&lt;li&gt;annotation titles&lt;/li&gt;
&lt;li&gt;schema text&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In stricter mode, the adapter can block tools with dirty metadata instead of forwarding them at all.&lt;/p&gt;

&lt;p&gt;This is the right place to be conservative. If the middleware is already on the path, it should at least stop acting like every upstream schema is innocent by default.&lt;/p&gt;

&lt;h3&gt;
  
  
  4) Tool description minimization and stripping
&lt;/h3&gt;

&lt;p&gt;There is now a unified &lt;code&gt;tool_description_policy&lt;/code&gt; that applies to both top-level tool descriptions and nested schema descriptions.&lt;/p&gt;

&lt;p&gt;It supports three modes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;preserve&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;truncate&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;strip&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This one is especially useful for paranoid or tightly controlled environments.&lt;/p&gt;

&lt;p&gt;Sometimes the right answer is not "try to detect every clever poisoning trick in free-form description text."&lt;/p&gt;

&lt;p&gt;Sometimes the right answer is: why is this much prose reaching the model at all?&lt;/p&gt;

&lt;p&gt;That is what this policy is for.&lt;/p&gt;

&lt;p&gt;If an environment does not need rich description text, it should be allowed to minimize or remove it completely.&lt;/p&gt;

&lt;h3&gt;
  
  
  5) Stricter session binding when adapter auth is enabled
&lt;/h3&gt;

&lt;p&gt;This one is less flashy, but it matters.&lt;/p&gt;

&lt;p&gt;Once the adapter stores uploads, artifacts, cancellation state, or other per-session data, session integrity stops being just an MCP transport concern. It becomes part of the product's own security model.&lt;/p&gt;

&lt;p&gt;So when adapter auth is enabled, sessions are now bound to the authenticated context that established them.&lt;/p&gt;

&lt;p&gt;That means a reused &lt;code&gt;Mcp-Session-Id&lt;/code&gt; cannot simply be picked up under a different authenticated context.&lt;/p&gt;

&lt;p&gt;If the adapter is going to own state, then it also has to own the consequences of that state being misused.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why I did not want to oversell this
&lt;/h2&gt;

&lt;p&gt;It would be very easy to market all of this as:&lt;/p&gt;

&lt;p&gt;"Remote MCP Adapter now protects you from MCP poisoning."&lt;/p&gt;

&lt;p&gt;That would be lazy and false.&lt;/p&gt;

&lt;p&gt;What v0.3.0 does is much more specific.&lt;/p&gt;

&lt;p&gt;It gives the adapter enough awareness and policy surface to stop being a blind forwarder of model-visible tool metadata and state.&lt;/p&gt;

&lt;p&gt;That helps.&lt;/p&gt;

&lt;p&gt;It does not magically solve:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;first-seen poisoning that looks semantically legitimate&lt;/li&gt;
&lt;li&gt;every novel encoding trick&lt;/li&gt;
&lt;li&gt;every schema-level manipulation pattern&lt;/li&gt;
&lt;li&gt;every exfiltration path through allowed downstream tools&lt;/li&gt;
&lt;li&gt;every bad trust decision made elsewhere in the stack&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Those limits matter, and pretending otherwise would make the release less trustworthy, not more.&lt;/p&gt;

&lt;h2&gt;
  
  
  Evidence and implementation trail
&lt;/h2&gt;

&lt;p&gt;I did not want this release to be just a changelog dressed up as a security post, so I wrote and linked the supporting material as well.&lt;/p&gt;

&lt;p&gt;The implementation and evidence trail for this work lives here:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;GitHub repo:&lt;/strong&gt; &lt;a href="https://github.com/aakashh242/remote-mcp-adapter" rel="noopener noreferrer"&gt;Remote MCP Adapter&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Security snapshot:&lt;/strong&gt; &lt;a href="https://github.com/aakashH242/remote-mcp-adapter/blob/main/SECURITY.md" rel="noopener noreferrer"&gt;https://github.com/aakashH242/remote-mcp-adapter/blob/main/SECURITY.md&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dedicated security docs:&lt;/strong&gt; &lt;a href="https://aakashh242.github.io/remote-mcp-adapter/security/" rel="noopener noreferrer"&gt;https://aakashh242.github.io/remote-mcp-adapter/security/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Issue 22 — Tool definition pinning and drift detection:&lt;/strong&gt; &lt;a href="https://github.com/aakashH242/remote-mcp-adapter/issues/22" rel="noopener noreferrer"&gt;issue #22&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Issue 23 — Normalize and sanitize tool schemas before forwarding:&lt;/strong&gt; &lt;a href="https://github.com/aakashH242/remote-mcp-adapter/issues/23" rel="noopener noreferrer"&gt;issue #23&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Issue 24 — Tool description minimization / stripping:&lt;/strong&gt; &lt;a href="https://github.com/aakashH242/remote-mcp-adapter/issues/24" rel="noopener noreferrer"&gt;issue #24&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Issue 25 — Harden adapter-managed session semantics:&lt;/strong&gt; &lt;a href="https://github.com/aakashH242/remote-mcp-adapter/issues/25" rel="noopener noreferrer"&gt;issue #25&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Evidence blog:&lt;/strong&gt; &lt;a href="https://aakashh242.github.io/blog/2026/03/16/dev-blog-securing-remote-mcp-adapter-1-evidences.html" rel="noopener noreferrer"&gt;https://aakashh242.github.io/blog/2026/03/16/dev-blog-securing-remote-mcp-adapter-1-evidences.html&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Credit where it is due
&lt;/h2&gt;

&lt;p&gt;This release did not come out of nowhere.&lt;/p&gt;

&lt;p&gt;The immediate push came from reading &lt;a href="https://dev.to/luckypipewrench/your-mcp-servers-tool-descriptions-are-an-attack-surface-37pj"&gt;Your MCP server's tool descriptions are an attack surface&lt;/a&gt;, along with the research and guidance around MCP tool poisoning and schema manipulation.&lt;/p&gt;

&lt;p&gt;That post is worth reading, and so is the work behind it.&lt;/p&gt;

&lt;p&gt;If you are exploring the security side of MCP seriously, do check out &lt;a href="https://github.com/luckyPipewrench/pipelock" rel="noopener noreferrer"&gt;Pipelock&lt;/a&gt; as well. It takes a more security-focused posture as a dedicated control point, and it is useful to see how others are approaching the same family of problems.&lt;/p&gt;




&lt;p&gt;If you are running remote MCP setups in a team or organization and have seen poisoning, schema weirdness, or mid-session tool drift in the wild, I would genuinely like to hear about it. Real attack samples and ugly edge cases are far more useful than clean toy examples when deciding what to harden next.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>mcp</category>
      <category>security</category>
      <category>showdev</category>
    </item>
    <item>
      <title>I Added Code-Mode to My MCP Gateway to Beat Context Bloat</title>
      <dc:creator>Aakash</dc:creator>
      <pubDate>Tue, 10 Mar 2026 21:28:10 +0000</pubDate>
      <link>https://forem.com/deathsaber/i-added-code-mode-to-my-mcp-gateway-to-beat-context-bloat-3o19</link>
      <guid>https://forem.com/deathsaber/i-added-code-mode-to-my-mcp-gateway-to-beat-context-bloat-3o19</guid>
      <description>&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/deathsaber/too-many-mcp-tools-make-agents-worse-heres-how-i-fixed-it-44n2" class="crayons-story__hidden-navigation-link"&gt;Too Many MCP Tools Make Agents Worse - Here’s How I Fixed It&lt;/a&gt;
    &lt;div class="crayons-article__cover crayons-article__cover__image__feed"&gt;
      &lt;iframe src="https://www.youtube.com/embed/KQcIU9iJwgk" title="Too Many MCP Tools Make Agents Worse - Here’s How I Fixed It"&gt;&lt;/iframe&gt;
    &lt;/div&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/deathsaber" class="crayons-avatar  crayons-avatar--l  "&gt;
            &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F2692176%2Fc01ef77d-2895-45c0-92b2-bf88e0061d86.jpg" alt="deathsaber profile" class="crayons-avatar__image" width="96" height="96"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/deathsaber" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Aakash
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Aakash
                
              
              &lt;div id="story-author-preview-content-3336377" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/deathsaber" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&gt;
                        &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F2692176%2Fc01ef77d-2895-45c0-92b2-bf88e0061d86.jpg" class="crayons-avatar__image" alt="" width="96" height="96"&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Aakash&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/deathsaber/too-many-mcp-tools-make-agents-worse-heres-how-i-fixed-it-44n2" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Mar 10&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/deathsaber/too-many-mcp-tools-make-agents-worse-heres-how-i-fixed-it-44n2" id="article-link-3336377"&gt;
          Too Many MCP Tools Make Agents Worse - Here’s How I Fixed It
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/ai"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;ai&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/mcp"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;mcp&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/agents"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;agents&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/llm"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;llm&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
          &lt;a href="https://dev.to/deathsaber/too-many-mcp-tools-make-agents-worse-heres-how-i-fixed-it-44n2" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;1&lt;span class="hidden s:inline"&gt; reaction&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/deathsaber/too-many-mcp-tools-make-agents-worse-heres-how-i-fixed-it-44n2#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              Comments


              &lt;span class="hidden s:inline"&gt;Add Comment&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            4 min read
          &lt;/small&gt;
            
              &lt;span class="bm-initial"&gt;
                

              &lt;/span&gt;
              &lt;span class="bm-success"&gt;
                

              &lt;/span&gt;
            
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;


</description>
      <category>ai</category>
      <category>mcp</category>
      <category>agents</category>
      <category>llm</category>
    </item>
  </channel>
</rss>
