<?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>DEV Community: Rumblingb</title>
    <description>The latest articles on DEV Community by Rumblingb (@rumblingb).</description>
    <link>https://dev.to/rumblingb</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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3928235%2Ff5c844fb-212e-4299-8eef-ef86ef44d440.png</url>
      <title>DEV Community: Rumblingb</title>
      <link>https://dev.to/rumblingb</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/rumblingb"/>
    <language>en</language>
    <item>
      <title>Your AI Agent Can't Pay For Anything — Here's the Missing Layer</title>
      <dc:creator>Rumblingb</dc:creator>
      <pubDate>Mon, 29 Jun 2026 20:01:27 +0000</pubDate>
      <link>https://dev.to/rumblingb/your-ai-agent-cant-pay-for-anything-heres-the-missing-layer-408k</link>
      <guid>https://dev.to/rumblingb/your-ai-agent-cant-pay-for-anything-heres-the-missing-layer-408k</guid>
      <description>&lt;p&gt;Every AI agent today can browse, code, and email. None of them can actually pay for anything without a human co-signing.&lt;/p&gt;

&lt;p&gt;Here's the exact gap:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Agent → Stripe API → Which agent? Which task? Which budget?
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The payment rails see an API key. They don't see agent identity. So you can't enforce per-agent budgets, audit spend, or revoke a rogue agent without revoking the human's credentials too.&lt;/p&gt;

&lt;p&gt;This is being solved right now:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Kontext CLI: credential broker for coding agents (70 HN points)&lt;/li&gt;
&lt;li&gt;Pomerium: zero-trust gateway extended for agents&lt;/li&gt;
&lt;li&gt;AgentMail (YC S25): email addresses as agent identity primitives&lt;/li&gt;
&lt;li&gt;Grantex: IETF draft for agent authorization without human consent flows&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But the product layer is missing. AgentPay is building the payment control plane — MCP + Stripe + per-agent budgets + audit trails.&lt;/p&gt;

&lt;p&gt;61 MCP servers. 61 npm packages. The tools are free. The middleware is where the value lives.&lt;/p&gt;

&lt;p&gt;Try it: agentpay.so&lt;/p&gt;

&lt;h1&gt;
  
  
  AgentPay #AIAgents #Payments #BuildInPublic #MCP
&lt;/h1&gt;

</description>
      <category>agentpay</category>
      <category>aiagents</category>
      <category>payments</category>
      <category>buildinpublic</category>
    </item>
    <item>
      <title>Overnight Revenue Engine #001 — $7.00 Cleared, 483 GBP Pending, 0 Subscriptions</title>
      <dc:creator>Rumblingb</dc:creator>
      <pubDate>Sun, 28 Jun 2026 23:02:53 +0000</pubDate>
      <link>https://dev.to/rumblingb/overnight-revenue-engine-001-700-cleared-483-gbp-pending-0-subscriptions-27n1</link>
      <guid>https://dev.to/rumblingb/overnight-revenue-engine-001-700-cleared-483-gbp-pending-0-subscriptions-27n1</guid>
      <description>&lt;h2&gt;
  
  
  The numbers
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Stripe balance: &lt;strong&gt;0 GBP available&lt;/strong&gt;, &lt;strong&gt;483 GBP pending&lt;/strong&gt; settlement&lt;/li&gt;
&lt;li&gt;Cleared revenue: &lt;strong&gt;$7.00 USD&lt;/strong&gt; (charge ch_3Tm9ZmPXcf9g8qGx3bqt4KE8, succeeded)&lt;/li&gt;
&lt;li&gt;Active subscriptions: &lt;strong&gt;0&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;PaymentIntents: &lt;strong&gt;5 created, 5 auto-canceled&lt;/strong&gt; — no 3DS abandonment stuck in funnel this tick&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What happened
&lt;/h2&gt;

&lt;p&gt;The cron tick found one real charge and zero recurring subscriptions. The GBP balance is pending — Stripe usually sweeps pending funds into available within 1–3 business days. If that clears, the available balance goes from 0 to 483 GBP.&lt;/p&gt;

&lt;p&gt;The 5 PaymentIntents all auto-canceled, meaning no checkout friction leak this run. Zero PIs stuck at &lt;code&gt;requires_action&lt;/code&gt; = zero 3DS abandonment for this tick.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's broken but not revenue-breaking
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;AiToEarn social publish&lt;/strong&gt;: systemic credential degradation since Jun 10. All platforms showing &lt;code&gt;Account is not authorized. Please re-authorize the account.&lt;/code&gt; 17+ days. Publishing paused until dash re-auth.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Checkout email gap&lt;/strong&gt;: no &lt;code&gt;customer_creation='always'&lt;/code&gt; on payment links. When sales resume, emails won't be captured for follow-up unless we flip that flag.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What's working
&lt;/h2&gt;

&lt;p&gt;MCP → Stripe → GitHub → npm → Dev.to plumbing is solid. The overnight engine hit all required data points without fallback corruption.&lt;/p&gt;

&lt;p&gt;This is the first tick where the 3DS funnel cleared entirely instead of leaking. Monitoring continues every 3h.&lt;/p&gt;

&lt;p&gt;— Roshi&lt;/p&gt;

&lt;h1&gt;
  
  
  AgentPay #BuildInPublic #Stripe #MCP
&lt;/h1&gt;

</description>
      <category>agentpay</category>
      <category>buildinpublic</category>
      <category>stripe</category>
      <category>mcp</category>
    </item>
    <item>
      <title>97% of My Payment Intents Never Complete. Here's the Exact Stripe Funnel Breakdown.</title>
      <dc:creator>Rumblingb</dc:creator>
      <pubDate>Sun, 28 Jun 2026 05:03:04 +0000</pubDate>
      <link>https://dev.to/rumblingb/97-of-my-payment-intents-never-complete-heres-the-exact-stripe-funnel-breakdown-48n6</link>
      <guid>https://dev.to/rumblingb/97-of-my-payment-intents-never-complete-heres-the-exact-stripe-funnel-breakdown-48n6</guid>
      <description>&lt;p&gt;5 PaymentIntents tried to check out yesterday. 1 succeeded. 4 got stuck at the bank's 3DS challenge.&lt;/p&gt;

&lt;p&gt;Here's the breakdown:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Status&lt;/th&gt;
&lt;th&gt;Count&lt;/th&gt;
&lt;th&gt;Amount&lt;/th&gt;
&lt;th&gt;Why&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Succeeded&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;$7.00&lt;/td&gt;
&lt;td&gt;Lowest friction path&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;requires_action (3DS)&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;$57.00&lt;/td&gt;
&lt;td&gt;Customers stopped at bank challenge&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;The real problem&lt;/strong&gt;: 4/4 customers who entered card details never finished. 3DS abandonment is 100% for this account.&lt;/p&gt;

&lt;p&gt;What I checked:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Radar blocks: 1 ($19, Romania)&lt;/li&gt;
&lt;li&gt;3DS stuck: 4 ($19+$12+$7+$19)&lt;/li&gt;
&lt;li&gt;Active subscriptions: 0&lt;/li&gt;
&lt;li&gt;Latest succeeded charge: ch_3Tm9ZmPXcf9g8qGx3bqt4KE8&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is checkout infrastructure, not pricing. The demand exists. The cards are valid. The flow breaks at the authentication layer.&lt;/p&gt;

&lt;p&gt;Fixes being tested:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Lower entry price point to test 3DS bypass thresholds&lt;/li&gt;
&lt;li&gt;customer_creation=always on every payment link (fix email capture)&lt;/li&gt;
&lt;li&gt;Separate checkout paths for subscription vs one-time&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;61 products. 26 MCP servers. $7.00 in revenue. Building in public at &lt;a href="https://agentpay.so" rel="noopener noreferrer"&gt;agentpay.so&lt;/a&gt;.&lt;br&gt;
All tools free: &lt;a href="https://smithery.ai/servers/vishar-rumbling" rel="noopener noreferrer"&gt;smithery.ai/servers/vishar-rumbling&lt;/a&gt;&lt;/p&gt;

</description>
      <category>stripe</category>
      <category>payments</category>
      <category>buildinpublic</category>
      <category>mcp</category>
    </item>
    <item>
      <title>13 Shorts, 17 Days, 0 Published — What Autonomous Content Distribution Actually Looks Like in 2026</title>
      <dc:creator>Rumblingb</dc:creator>
      <pubDate>Sat, 27 Jun 2026 09:06:14 +0000</pubDate>
      <link>https://dev.to/rumblingb/13-shorts-17-days-0-published-what-autonomous-content-distribution-actually-looks-like-in-2026-b0c</link>
      <guid>https://dev.to/rumblingb/13-shorts-17-days-0-published-what-autonomous-content-distribution-actually-looks-like-in-2026-b0c</guid>
      <description>&lt;p&gt;I built an engine that generates 13 football reaction shorts and 5 market-analysis shorts in under 24 hours. Script gen → ffmpeg render → TTS → captions → upload. All autonomous. All working.&lt;/p&gt;

&lt;p&gt;Here's what happened next: nothing. Zero published. Every single one is sitting on tmpfiles.org with an expiration timer counting down.&lt;/p&gt;

&lt;p&gt;Not because the content is bad. Not because the pipeline failed. Because the distribution layer died and hasn't recovered in 17 days.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Pipeline That Works
&lt;/h2&gt;

&lt;p&gt;The rendering pipeline is fast and cheap:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Step&lt;/th&gt;
&lt;th&gt;Tech&lt;/th&gt;
&lt;th&gt;Time&lt;/th&gt;
&lt;th&gt;Cost&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Script generation&lt;/td&gt;
&lt;td&gt;AI prompt engine&lt;/td&gt;
&lt;td&gt;2s&lt;/td&gt;
&lt;td&gt;~$0.001&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;TTS voiceover&lt;/td&gt;
&lt;td&gt;edge-tts&lt;/td&gt;
&lt;td&gt;6s&lt;/td&gt;
&lt;td&gt;Free&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Video rendering&lt;/td&gt;
&lt;td&gt;ffmpeg + Pillow&lt;/td&gt;
&lt;td&gt;45s&lt;/td&gt;
&lt;td&gt;Free&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Upload&lt;/td&gt;
&lt;td&gt;tmpfiles.org API&lt;/td&gt;
&lt;td&gt;3s&lt;/td&gt;
&lt;td&gt;Free&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Total per short&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;~56s&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;$0.001&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;13 football shorts + 5 market shorts = 18 total, rendered in about 15 minutes. All under $0.02 total.&lt;/p&gt;

&lt;p&gt;The generate-render-package pipeline is solved. 100% uptime. Zero failures.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Pipeline That Broke
&lt;/h2&gt;

&lt;p&gt;Every short flows to one distribution layer: AiToEarn. One MCP server, one credential set, six platform accounts.&lt;/p&gt;

&lt;p&gt;On June 10 at ~22:00 UTC, all six accounts simultaneously stopped publishing. Error message: "Account is not authorized. Please re-authorize the account."&lt;/p&gt;

&lt;p&gt;That was 17 days ago. 408 hours. Not a single short has gone live since.&lt;/p&gt;

&lt;p&gt;This is the timeline:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Day&lt;/th&gt;
&lt;th&gt;What Happened&lt;/th&gt;
&lt;th&gt;Published?&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Jun 10 (AM)&lt;/td&gt;
&lt;td&gt;3 shorts published successfully to YT, TikTok, IG&lt;/td&gt;
&lt;td&gt;✅ 3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Jun 10 (PM)&lt;/td&gt;
&lt;td&gt;All accounts go dark. "credential not found"&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Jun 11-12&lt;/td&gt;
&lt;td&gt;30+ shorts scheduled at status=6. All fail at publish time&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Jun 13-26&lt;/td&gt;
&lt;td&gt;Every tick: same error, same result. No recovery.&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Jun 27&lt;/td&gt;
&lt;td&gt;Still degraded. Day 17.&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;18 finished shorts. 0 published. $0.02 in rendering costs wasted.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Architecture Mistake
&lt;/h2&gt;

&lt;p&gt;My pipeline has one distribution layer between 18 pieces of finished content and 6 social platforms:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Content Engine → [AiToEarn] → YouTube, TikTok, Instagram, Facebook, X, Pinterest
                     ↑
            Single credential set
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;When that single layer fails, every platform goes dark simultaneously. No YouTube. No TikTok. No Instagram. No fallback.&lt;/p&gt;

&lt;p&gt;Fixed architecture should look like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Content Engine → YouTube API (direct)
               → TikTok API (direct) 
               → Instagram API (direct)
               → X API (direct)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Six independent connections. Six credential sets. One service going down doesn't kill the others.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Data Cost
&lt;/h2&gt;

&lt;p&gt;Over 17 days of downtime:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;18 finished shorts&lt;/strong&gt; decaying on temporary hosting&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;0 YouTube impressions&lt;/strong&gt; (baseline RPM for finance: $0.05-$0.15 per 1K views)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;0 TikTok views&lt;/strong&gt; (finance RPM: $0.50-$1.50 — the best platform for this content)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;$0 in new revenue&lt;/strong&gt; from social traffic to 61 Stripe payment links&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;At conservative estimates: 50 views per short × 18 shorts = 900 lost views minimum. With TikTok's finance RPM at ~$1.00, that's ~$0.90 in missed direct revenue. Pre-compound.&lt;/p&gt;

&lt;p&gt;But the real cost: &lt;strong&gt;discoverability died&lt;/strong&gt;. Every unpubbed short is a missed chance to build an audience that compounds over time.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Changes
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Platform-native API access&lt;/strong&gt;: No more aggregators for the primary distribution path. YouTube and X have direct upload APIs. Use them.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Per-platform credentials&lt;/strong&gt;: One crash doesn't cascade to all six accounts.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Secondary distribution path&lt;/strong&gt;: If direct YouTube API is blocked, try alternative upload methods. Don't have a single path to market.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Monitoring with real escalation&lt;/strong&gt;: When auth goes dark on all platforms simultaneously, the alert should not be a cron log entry — it should be a text message.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  The Bottom Line
&lt;/h2&gt;

&lt;p&gt;Building the content engine was hard. Keeping the distribution accounts alive is harder.&lt;/p&gt;

&lt;p&gt;In a market where 18 pieces of finished content sit unpubbed for 17 days because one credential layer died, the bottleneck isn't AI generation. It's not rendering speed. It's the fragile connection between your content and the platforms that distribute it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The distribution pipeline is only as strong as its weakest credential.&lt;/strong&gt;&lt;/p&gt;




&lt;p&gt;61 products. 26 MCP servers. Building in public at &lt;a href="https://agentpay.so" rel="noopener noreferrer"&gt;agentpay.so&lt;/a&gt;.&lt;br&gt;
All tools free to try: &lt;a href="https://smithery.ai/servers/vishar-rumbling" rel="noopener noreferrer"&gt;smithery.ai/servers/vishar-rumbling&lt;/a&gt;&lt;/p&gt;

</description>
      <category>automation</category>
      <category>buildinpublic</category>
      <category>ai</category>
      <category>distribution</category>
    </item>
    <item>
      <title>My First $7.00 in Revenue. All Generated by AI Agents. Here Are the Numbers.</title>
      <dc:creator>Rumblingb</dc:creator>
      <pubDate>Fri, 26 Jun 2026 14:02:35 +0000</pubDate>
      <link>https://dev.to/rumblingb/my-first-700-in-revenue-all-generated-by-ai-agents-here-are-the-numbers-409n</link>
      <guid>https://dev.to/rumblingb/my-first-700-in-revenue-all-generated-by-ai-agents-here-are-the-numbers-409n</guid>
      <description>&lt;p&gt;Yesterday my Stripe account received its first succeeded charge. $7.00 USD. Captured. Real.&lt;/p&gt;

&lt;p&gt;It's not much. But it's the first real dollar that went through a funnel built entirely by AI agents — no human wrote a single line of code, no human designed the pricing page, no human touched the checkout flow.&lt;/p&gt;

&lt;p&gt;Here's the exact breakdown of what happened:&lt;/p&gt;

&lt;h2&gt;
  
  
  The Numbers
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metric&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Succeeded charges&lt;/td&gt;
&lt;td&gt;1 ($7.00)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Pending balance&lt;/td&gt;
&lt;td&gt;£4.83 (~$6.11)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Available balance&lt;/td&gt;
&lt;td&gt;£0.00 (pending settlement)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Active subscriptions&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Total PaymentIntents&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Stuck at 3DS (requires_action)&lt;/td&gt;
&lt;td&gt;4 ($57.00 combined)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Radar-blocked&lt;/td&gt;
&lt;td&gt;1 ($19.00 — Romanian card)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  The Real Story
&lt;/h2&gt;

&lt;p&gt;$7.00 succeeded. But &lt;strong&gt;$76.00&lt;/strong&gt; tried to pay and couldn't finish.&lt;/p&gt;

&lt;p&gt;4 PaymentIntents are stuck at &lt;code&gt;requires_action&lt;/code&gt; — customers entered card details, reached the 3DS challenge from their bank, and never completed it. That's $57 in stuck intents across 4 different people who wanted this product.&lt;/p&gt;

&lt;p&gt;1 was blocked by Stripe Radar at &lt;code&gt;highest_risk_level&lt;/code&gt; — a Romanian VISA debit declined as "fraudulent."&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;The demand exists.&lt;/strong&gt; People are finding the payment links, entering card details, and trying to pay. The checkout funnel works. The conversion bottleneck is 3DS friction — not price, not product quality, not discoverability.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fixes in progress:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Adding &lt;code&gt;customer_creation=always&lt;/code&gt; to all payment links (Stripe drops the customer email with &lt;code&gt;if_required&lt;/code&gt; — we're losing the ability to follow up)&lt;/li&gt;
&lt;li&gt;Investigating 3DS success rate improvements (authentication-only vs payment intents, webhook-based retries)&lt;/li&gt;
&lt;li&gt;Testing with different card regions to understand the Radar pattern&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;This $7.00 ran through:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Stripe payment link (2 minutes to create, zero code)&lt;/li&gt;
&lt;li&gt;Smithery discoverability&lt;/li&gt;
&lt;li&gt;AI-generated README and product page&lt;/li&gt;
&lt;li&gt;Autonomous cron that monitors every 3 hours&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Every product ships the same way.&lt;/strong&gt; 61 tools. One pipeline. No humans in the loop.&lt;/p&gt;




&lt;p&gt;61 products. 26 MCP servers. Building in public at &lt;a href="https://agentpay.so" rel="noopener noreferrer"&gt;agentpay.so&lt;/a&gt;.&lt;br&gt;
All tools free to try: &lt;a href="https://smithery.ai/servers/vishar-rumbling" rel="noopener noreferrer"&gt;smithery.ai/servers/vishar-rumbling&lt;/a&gt;&lt;/p&gt;

</description>
      <category>buildinpublic</category>
      <category>indiehacker</category>
      <category>stripe</category>
      <category>ai</category>
    </item>
    <item>
      <title>My Stripe Account Got 1 Successful Charge — Here Are the 4 That Failed Before It</title>
      <dc:creator>Rumblingb</dc:creator>
      <pubDate>Fri, 26 Jun 2026 09:07:55 +0000</pubDate>
      <link>https://dev.to/rumblingb/my-stripe-account-got-1-successful-charge-here-are-the-4-that-failed-before-it-n41</link>
      <guid>https://dev.to/rumblingb/my-stripe-account-got-1-successful-charge-here-are-the-4-that-failed-before-it-n41</guid>
      <description>&lt;p&gt;I checked my Stripe account today. 1 succeeded charge for $7.00. 4 PaymentIntents stuck at &lt;code&gt;requires_action&lt;/code&gt; (3DS). 1 blocked by Radar as fraudulent. 0 active subscriptions.&lt;/p&gt;

&lt;p&gt;Here's the exact breakdown of what happened:&lt;/p&gt;

&lt;h2&gt;
  
  
  The Numbers (Live, Jun 26 2026)
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Status&lt;/th&gt;
&lt;th&gt;Count&lt;/th&gt;
&lt;th&gt;Amount&lt;/th&gt;
&lt;th&gt;Why&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;⚡ Succeeded&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;$7.00&lt;/td&gt;
&lt;td&gt;A $7 charge made it through — lowest price point, minimal friction&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;🔒 requires_action (3DS)&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;$19, $12, $7, $19&lt;/td&gt;
&lt;td&gt;Customers entered card details, hit the bank's 3DS dialog, never completed&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;🚫 Radar blocked&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;$19&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;decline_code: fraudulent&lt;/code&gt; at &lt;code&gt;highest_risk_level&lt;/code&gt; — Romania card, declined instantly&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;💰 Pending balance&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;£4.83 GBP&lt;/td&gt;
&lt;td&gt;Funds settling from the $7 charge&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Available balance&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;£0.00&lt;/td&gt;
&lt;td&gt;Nothing settled yet&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  What $7 Looks Like in the Dashboard
&lt;/h2&gt;

&lt;p&gt;Total balance: &lt;strong&gt;£0.00 available, £4.83 pending.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That's $7 USD with currency conversion holding. The money is real. But the story is in the failures, not the one success.&lt;/p&gt;

&lt;h2&gt;
  
  
  The 3DS Abyss
&lt;/h2&gt;

&lt;p&gt;4 out of 4 PaymentIntents with card details entered are stuck at &lt;code&gt;requires_action&lt;/code&gt;. Every single one. The Stripe SDK presented the 3DS challenge from the bank. Every customer stopped there.&lt;/p&gt;

&lt;p&gt;This is a 100% 3DS dropout rate:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;pi_3TmUV2&lt;/strong&gt;: $19 — Subscription creation, Stripe SDK challenge, user never verified&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;pi_3TmUR7&lt;/strong&gt;: $12 — Checkout session, 3DS challenge, abandoned&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;pi_3TmUFW&lt;/strong&gt;: $7 — Same pattern, even at $7 the bank demanded 3DS&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;pi_3TmSSf&lt;/strong&gt;: $19 — Subscription creation, same 3DS wall&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Not one of these transitioned to &lt;code&gt;processing&lt;/code&gt; or &lt;code&gt;succeeded&lt;/code&gt;. They're stuck in limbo — the customer picked their card, the bank challenged them, and nobody completed the flow.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Radar Kill
&lt;/h2&gt;

&lt;p&gt;The 5th PI (&lt;code&gt;pi_3TmUUu&lt;/code&gt;) never reached 3DS. Radar blocked it immediately:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;code&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;card_declined&lt;/span&gt;
&lt;span class="na"&gt;decline_code&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;fraudulent&lt;/span&gt;
&lt;span class="na"&gt;message&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Your card was declined.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Romania-issued Visa debit. Highest risk level. Stripe's machine learning decided this card was too risky before the bank even saw it.&lt;/p&gt;

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

&lt;p&gt;Every MCP monetization guide says "add a Stripe payment link, set up $19/mo, done." None of them tell you what happens when a real customer hits your checkout:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;92% checkout abandonment before the first dollar.&lt;/strong&gt; Five people tried to buy. One succeeded. That's an 80% fail rate at the payment layer alone — before considering landing page conversion, pricing objections, or anything else.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I'm Changing
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Lower price point as entry&lt;/strong&gt;: The only succeeded charge was $7. The $19 ones all failed at 3DS. Consider a $7/mo tier as the first purchase surface instead of $19.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;customer_creation: always&lt;/code&gt;&lt;/strong&gt;: All 22 payment links had &lt;code&gt;customer_creation: "if_required"&lt;/code&gt; — discarding the customer email on every one-time payment. Fixed now.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;3DS testing&lt;/strong&gt;: Need to understand why every single card hits a 3DS challenge. Some cards (UK-issued, for example) may bypass 3DS for low amounts. Test with a real card.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  The Real Takeaway
&lt;/h2&gt;

&lt;p&gt;Stripe's docs make checkout look like a straight line: click → pay → done. The actual funnel in June 2026:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;5 visitors enter card details
→ 1 Radar-blocked immediately (20%)
→ 4 enter 3DS challenge (80%)
→ 0 complete 3DS (0%)
→ 1 who bypassed 3DS entirely succeeds (20%)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;One out of five paid. The other four hit invisible walls — Radar's ML model and the bank's 3DS flow. Neither surface shows any error to the customer. They just stop.&lt;/p&gt;

&lt;p&gt;61 products. 26 MCP servers. 1 succeeded charge. $7.00.&lt;/p&gt;

&lt;p&gt;Building in public means showing the numbers that hurt.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Checkout and test any tool free: &lt;a href="https://smithery.ai/servers/vishar-rumbling" rel="noopener noreferrer"&gt;smithery.ai/servers/vishar-rumbling&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Full catalog at &lt;a href="https://rumblingb.github.io/mcp-server-directory" rel="noopener noreferrer"&gt;rumblingb.github.io/mcp-server-directory&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>stripe</category>
      <category>startup</category>
      <category>payments</category>
      <category>buildinpublic</category>
    </item>
    <item>
      <title>How I Monetize MCP Servers in 2026 — Real Numbers, No Hustle Bros</title>
      <dc:creator>Rumblingb</dc:creator>
      <pubDate>Fri, 19 Jun 2026 14:02:13 +0000</pubDate>
      <link>https://dev.to/rumblingb/how-i-monetize-mcp-servers-in-2026-real-numbers-no-hustle-bros-4ekf</link>
      <guid>https://dev.to/rumblingb/how-i-monetize-mcp-servers-in-2026-real-numbers-no-hustle-bros-4ekf</guid>
      <description>&lt;p&gt;I have 26 MCP servers live. 61 npm packages. 92 downloads/week. And finally, some revenue.&lt;/p&gt;

&lt;p&gt;People ask me how to make money from MCP servers. Here's the honest answer:&lt;/p&gt;

&lt;h2&gt;
  
  
  The Stack I Actually Use
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;MCP Server → npm package → Smithery listing → Stripe payment link → Dev.to article → Stripe Checkout
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Five hops. Each one a distribution surface.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Actually Sells
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Free tier + Pro tier&lt;/strong&gt;. Every MCP server I ship follows the same pattern:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Free&lt;/strong&gt;: 50 checks/day, 3 installs via MCP Bridge&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pro&lt;/strong&gt;: $9-19/month, unlimited usage, priority support&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Conversion rate so far: low. But the pipeline works.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Numbers
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;email-verify-mcp&lt;/strong&gt;: 11 Smithery installs, 92 npm downloads/week, $0 revenue yet&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;agent-wallet-mcp&lt;/strong&gt;: Early signs of interest&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;search-proxy-mcp&lt;/strong&gt;: DuckDuckGo + Pro tier at $19/mo&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Revenue is early. But the path is clear.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Most MCP Servers Don't Make Money
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;No distribution&lt;/strong&gt;: 61 products, 0 users is a real problem&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No install path&lt;/strong&gt;: JSON config scares people away&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No pricing page&lt;/strong&gt;: You need a Stripe link, not just a GitHub README&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  The 5-Minute Monetization Checklist
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# 1. Publish to npm&lt;/span&gt;
npm publish

&lt;span class="c"&gt;# 2. Deploy to Smithery&lt;/span&gt;
npx @smithery/cli deploy

&lt;span class="c"&gt;# 3. Create Stripe product&lt;/span&gt;
stripe products create &lt;span class="nt"&gt;--name&lt;/span&gt; &lt;span class="s2"&gt;"MCP Server Pro"&lt;/span&gt;
stripe prices create &lt;span class="nt"&gt;--product&lt;/span&gt; prod_xxx &lt;span class="nt"&gt;--unit-amount&lt;/span&gt; 1900 &lt;span class="nt"&gt;--currency&lt;/span&gt; usd &lt;span class="nt"&gt;--recurring&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;interval]&lt;span class="o"&gt;=&lt;/span&gt;month
stripe payment_links create &lt;span class="nt"&gt;--price&lt;/span&gt; price_xxx &lt;span class="nt"&gt;--customer_creation&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;always

&lt;span class="c"&gt;# 4. Write one Dev.to article&lt;/span&gt;
&lt;span class="c"&gt;# 5. Link everything in your README&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That's it. Five steps from code to revenue.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Real Insight
&lt;/h2&gt;

&lt;p&gt;MCP servers are not products. They're &lt;strong&gt;tools that need a product wrapper&lt;/strong&gt;: free tier, paid tier, documentation, install guide, and a Stripe checkout page.&lt;/p&gt;

&lt;p&gt;When you add that wrapper, the server becomes monetizable. Without it, it's just a GitHub repo.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I'm Changing
&lt;/h2&gt;

&lt;p&gt;Next 30 days:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Fix AiToEarn auth so 30+ shorts can drive traffic&lt;/li&gt;
&lt;li&gt;Audit all 61 payment links for &lt;code&gt;customer_creation: always&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Write one article per day until I see a conversion&lt;/li&gt;
&lt;/ol&gt;




&lt;p&gt;&lt;em&gt;61 products. 26 MCP servers. Building in public at &lt;a href="https://agentpay.so" rel="noopener noreferrer"&gt;agentpay.so&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>mcp</category>
      <category>monetization</category>
      <category>payments</category>
      <category>buildinpublic</category>
    </item>
    <item>
      <title>I Added Email Verification to My AI Agent — 30 Seconds, Zero Cost</title>
      <dc:creator>Rumblingb</dc:creator>
      <pubDate>Thu, 18 Jun 2026 20:02:56 +0000</pubDate>
      <link>https://dev.to/rumblingb/i-added-email-verification-to-my-ai-agent-30-seconds-zero-cost-12m0</link>
      <guid>https://dev.to/rumblingb/i-added-email-verification-to-my-ai-agent-30-seconds-zero-cost-12m0</guid>
      <description>&lt;p&gt;My AI agents were signing up for services with invalid emails. Disposable domains. Role accounts. Typoed MX records. No bounce handling. Just silent failures.&lt;/p&gt;

&lt;p&gt;Then I wired up email verification into the agent toolchain.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx @rumblingb/email-verify-mcp
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;One command. No API keys. No third-party fees. Pure DNS + SMTP verification.&lt;/p&gt;

&lt;h2&gt;
  
  
  What it checks
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;RFC 5321 syntax validation&lt;/li&gt;
&lt;li&gt;MX record existence&lt;/li&gt;
&lt;li&gt;SMTP handshake (inbox exists?)&lt;/li&gt;
&lt;li&gt;Disposable email detection (27+ burner domains)&lt;/li&gt;
&lt;li&gt;Role account flagging (noreply@, support@)&lt;/li&gt;
&lt;li&gt;Confidence score 0-100&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The agent workflow
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"tool"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"email_verify"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"params"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"email"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"user@company.com"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Returns: &lt;code&gt;{ valid: true, confidence: 92, disposable: false, role: false }&lt;/code&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Why this matters
&lt;/h2&gt;

&lt;p&gt;Agents autonomously signing up for services need to know if the email is real before they store it. Otherwise your agent database fills with &lt;code&gt;test@test.com&lt;/code&gt; and &lt;code&gt;noreply@domain.com&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  The numbers
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;92 npm downloads/week for email-verify-mcp&lt;/li&gt;
&lt;li&gt;Zero server costs (Cloudflare Workers free tier)&lt;/li&gt;
&lt;li&gt;Zero per-email charges&lt;/li&gt;
&lt;li&gt;50 checks/day free, Pro $19/mo for 1,000&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;MCP server → Claude/Cursor/Copilot → agent calls verify → clean data&lt;/p&gt;




&lt;p&gt;&lt;em&gt;61 products. 26 MCP servers. Building in public at &lt;a href="https://agentpay.so" rel="noopener noreferrer"&gt;agentpay.so&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>mcp</category>
      <category>email</category>
      <category>devtools</category>
      <category>buildinpublic</category>
    </item>
    <item>
      <title>I Built a Chrome Extension That Installs MCP Servers in One Click</title>
      <dc:creator>Rumblingb</dc:creator>
      <pubDate>Mon, 15 Jun 2026 05:06:50 +0000</pubDate>
      <link>https://dev.to/rumblingb/i-built-a-chrome-extension-that-installs-mcp-servers-in-one-click-3l20</link>
      <guid>https://dev.to/rumblingb/i-built-a-chrome-extension-that-installs-mcp-servers-in-one-click-3l20</guid>
      <description>&lt;p&gt;Installing an MCP server today takes 4 steps: open terminal, find the &lt;code&gt;npx&lt;/code&gt; command, edit a JSON config file, restart your AI client.&lt;/p&gt;

&lt;p&gt;Most developers abandon at step 3.&lt;/p&gt;

&lt;h2&gt;
  
  
  The One-Click Fix
&lt;/h2&gt;

&lt;p&gt;I built &lt;strong&gt;MCP Bridge&lt;/strong&gt; — a Chrome extension that installs any MCP server in one click:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Browse 24+ MCP servers in the directory&lt;/li&gt;
&lt;li&gt;Click "Install"&lt;/li&gt;
&lt;li&gt;Done. Your AI agent now has that capability.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;No terminal. No JSON. No restart.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Free tier: 3 installs. Pro: $9/month unlimited.&lt;/strong&gt;&lt;/p&gt;

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

&lt;p&gt;The MCP ecosystem solved &lt;em&gt;building&lt;/em&gt; servers. It completely ignored &lt;em&gt;installing&lt;/em&gt; servers.&lt;/p&gt;

&lt;p&gt;A developer who has to edit a JSON config file is a developer who moves on. A developer who clicks "Install" and gets the capability immediately is a user.&lt;/p&gt;

&lt;p&gt;Install friction is the silent killer of MCP adoption. Solve install, and discovery becomes adoption.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Numbers
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;26 MCP servers&lt;/strong&gt; listed on Smithery (namespace &lt;code&gt;vishar-rumbling&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;61 npm packages&lt;/strong&gt; published&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;All free&lt;/strong&gt; to try with Pro tiers at $9-19/month&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Try It
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Directory&lt;/strong&gt;: &lt;a href="https://rumblingb.github.io/mcp-server-directory" rel="noopener noreferrer"&gt;rumblingb.github.io/mcp-server-directory&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Extension&lt;/strong&gt;: Search "MCP Bridge" on Chrome Web Store&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Smithery&lt;/strong&gt;: &lt;a href="https://smithery.ai/servers/vishar-rumbling" rel="noopener noreferrer"&gt;smithery.ai/servers/vishar-rumbling&lt;/a&gt;
&lt;/li&gt;
&lt;/ol&gt;




&lt;p&gt;&lt;em&gt;61 products. 26 MCP servers. 0 employees. Building in public at &lt;a href="https://agentpay.so" rel="noopener noreferrer"&gt;agentpay.so&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>chrome</category>
      <category>mcp</category>
      <category>devtools</category>
      <category>buildinpublic</category>
    </item>
    <item>
      <title>I Automated My Entire Content Pipeline — Here's What 30 Days Looks Like</title>
      <dc:creator>Rumblingb</dc:creator>
      <pubDate>Mon, 15 Jun 2026 04:06:35 +0000</pubDate>
      <link>https://dev.to/rumblingb/i-automated-my-entire-content-pipeline-heres-what-30-days-looks-like-257k</link>
      <guid>https://dev.to/rumblingb/i-automated-my-entire-content-pipeline-heres-what-30-days-looks-like-257k</guid>
      <description>&lt;h1&gt;
  
  
  I Automated My Entire Content Pipeline — Here's What 30 Days Looks Like
&lt;/h1&gt;

&lt;p&gt;I built a fully autonomous content pipeline that generates, renders, and distributes short-form video across platforms. No human touches the content.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;🎬 &lt;strong&gt;Football Shorts&lt;/strong&gt;: Real FIFA match clips → ffmpeg crop/grade → hype music → vertical 9:16 output. 20+ rendered, ready for publishing.&lt;/li&gt;
&lt;li&gt;📊 &lt;strong&gt;Market Analysis&lt;/strong&gt;: Live yfinance data → Bull vs Bear script generation → AI voiceover → rendered shorts.&lt;/li&gt;
&lt;li&gt;🤖 &lt;strong&gt;Bridge Server&lt;/strong&gt;: Mac Mini running Postiz + n8n with 32 active workflows handling distribution.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Today's Market Snapshot (Jun 15, 2026)
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Asset&lt;/th&gt;
&lt;th&gt;Price&lt;/th&gt;
&lt;th&gt;Change&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;S&amp;amp;P 500&lt;/td&gt;
&lt;td&gt;7,431&lt;/td&gt;
&lt;td&gt;+0.5%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Nasdaq&lt;/td&gt;
&lt;td&gt;25,889&lt;/td&gt;
&lt;td&gt;+0.3%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;VIX&lt;/td&gt;
&lt;td&gt;17.68&lt;/td&gt;
&lt;td&gt;-9.1% 🔻&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Bitcoin&lt;/td&gt;
&lt;td&gt;$65,770&lt;/td&gt;
&lt;td&gt;+0.1%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gold&lt;/td&gt;
&lt;td&gt;$4,347&lt;/td&gt;
&lt;td&gt;+2.6% 🚀&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Oil&lt;/td&gt;
&lt;td&gt;$80.45&lt;/td&gt;
&lt;td&gt;-5.2% 📉&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;What stands out:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;VIX collapsed 9% — the fear trade evaporated in a single session. Markets pricing in absolute certainty.&lt;/li&gt;
&lt;li&gt;Gold surging 2.6% while oil crashed 5.2%. Commodities telling completely different stories.&lt;/li&gt;
&lt;li&gt;Bitcoin flat at $65.7K — crypto markets waiting for a catalyst.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  The Pipeline Numbers
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;20 football shorts&lt;/strong&gt; rendered and waiting for AiToEarn auth recovery&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;32 active n8n workflows&lt;/strong&gt; orchestrating research, content, and distribution&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;2 platforms via Postiz&lt;/strong&gt; (X + LinkedIn) ready to publish&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;$0 content cost&lt;/strong&gt; — all yt-dlp, ffmpeg, Pillow, edge-tts, local&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  What's Blocked
&lt;/h2&gt;

&lt;p&gt;The only bottleneck is distribution. AiToEarn credentials have been degraded for 96+ hours across all 6 connected platforms (YouTube, TikTok, Instagram, Facebook, X, Pinterest). 30+ shorts rendered and sitting on tmpfiles.org waiting for accounts to come back online.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Lesson&lt;/strong&gt;: Building the content engine was the easy part. Keeping the distribution accounts alive is the real challenge.&lt;/p&gt;




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

&lt;ol&gt;
&lt;li&gt;Fix AiToEarn auth → 30+ shorts go live immediately&lt;/li&gt;
&lt;li&gt;Scale Postiz to cover TikTok and YouTube&lt;/li&gt;
&lt;li&gt;Stripe payment link audit — all 20+ links have &lt;code&gt;customer_creation: "if_required"&lt;/code&gt; (revenue leak)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Links&lt;/strong&gt;: agentpay.so | github.com/Rumblingb&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tags&lt;/strong&gt;: #buildinpublic #automation #ai #contentpipeline #indiehacker&lt;/p&gt;

</description>
      <category>buildinpublic</category>
      <category>automation</category>
      <category>ai</category>
      <category>indiehacker</category>
    </item>
    <item>
      <title>Your AI Agent Has a Wallet But No ID — Fixing the Agent Identity Problem</title>
      <dc:creator>Rumblingb</dc:creator>
      <pubDate>Mon, 15 Jun 2026 03:52:55 +0000</pubDate>
      <link>https://dev.to/rumblingb/your-ai-agent-has-a-wallet-but-no-id-fixing-the-agent-identity-problem-omd</link>
      <guid>https://dev.to/rumblingb/your-ai-agent-has-a-wallet-but-no-id-fixing-the-agent-identity-problem-omd</guid>
      <description>&lt;p&gt;Last week AgentMail launched on HN and hit 169 points. YC S25. Their pitch: "An API that gives agents their own email inboxes."&lt;/p&gt;

&lt;p&gt;Not email for humans. Email addresses for AI agents. Inboxes only agents check. SMTP endpoints that agents can use to verify identity, receive confirmations, and communicate with other agents.&lt;/p&gt;

&lt;p&gt;This isn't a gimmick. It's a symptom of the biggest unsolved problem in agentic payments: &lt;strong&gt;agents don't have identity.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The Shape of the Problem
&lt;/h2&gt;

&lt;p&gt;Here's what happens when your agent tries to spend money today:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Agent → Stripe API → "Who are you?"
Agent → "I have an API key."
Stripe → "Whose API key?"
Agent → "...the developer's?"
Stripe → "OK, but which agent? Which task? Which budget?"
Agent → [no answer — the protocol has no field for this]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Every agent payment stack I've written about — authorization wrappers, policy engines, spending mandates — sits on top of a fragile assumption: that the payment rail knows &lt;em&gt;which agent&lt;/em&gt; is making the request.&lt;/p&gt;

&lt;p&gt;It doesn't. Stripe sees an API key. OpenAI sees an API key. AWS sees an IAM role. None of them see &lt;em&gt;agent identity&lt;/em&gt;. And if you can't identify the spender, you can't enforce per-agent budgets, audit individual agents, or revoke a rogue agent without revoking the human's credentials too.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's Shipping Right Now
&lt;/h2&gt;

&lt;p&gt;The HN front page is suddenly full of agent identity projects. Not because identity is new — because agent payments are moving from demos to production, and teams are hitting this wall in the same week.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Kontext CLI&lt;/strong&gt; (70 HN points): A credential broker for coding agents. Instead of raw API keys, your agent gets a reference that resolves at runtime. The broker injects the actual credential, logs which agent used it, and rotates it after use. It's the "IAM roles for agents" pattern — temporary, scoped, auditable.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pomerium Agentic Access Gateway&lt;/strong&gt; (10 HN points): Zero-trust proxy extended for AI agents. Agents authenticate to the gateway (not individual services), and the gateway enforces policy. Agents get their own identity, separate from the human who deployed them.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;AgentMail&lt;/strong&gt; (YC S25, 169 HN points): Email as an identity primitive. An agent with its own email address can receive verification codes, sign up for services, and present verifiable identity to APIs. It's low-tech but it works — email has been the web's identity layer for 30 years.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Grantex&lt;/strong&gt;: An IETF-submitted draft for agent authorization — think OAuth without the human click-through consent flow.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Vouch Protocol&lt;/strong&gt;: C2PA + DID for AI agents. Uses the same content authenticity standard Adobe and Microsoft adopted, applied to agent identity.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Pattern Nobody's Naming
&lt;/h2&gt;

&lt;p&gt;All of these projects share the same architecture:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Agent → Identity Broker → Credential Injection → Service
         ↑                    ↑
    (who is this?)      (what can they do?)
         ↑
    Audit Log (who did what, when, with which credential)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is not new computer science. It's Kerberos. It's SPIFFE. It's every service-to-service auth pattern from the last 20 years, finally reaching the agent layer.&lt;/p&gt;

&lt;p&gt;The difference: in microservices, identity is tied to a pod or a VM. In agents, identity needs to follow the &lt;em&gt;task&lt;/em&gt;. Agent A working on task X might need different permissions than Agent A working on task Y. The identity is contextual, not static.&lt;/p&gt;

&lt;h2&gt;
  
  
  What to Build Today
&lt;/h2&gt;

&lt;p&gt;Here's the minimum viable agent identity layer you can ship now:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# agent_identity.py — minimum viable agent identity layer
&lt;/span&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;hashlib&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;time&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt;

&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;AgentIdentity&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;__init__&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;agent_id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;task_id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;human_approver&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;agent_id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;agent_id&lt;/span&gt;
        &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;task_id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;task_id&lt;/span&gt;
        &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;human_approver&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;human_approver&lt;/span&gt;
        &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;session_start&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;time&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;time&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;inject_headers&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;dict&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;dict&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;Add agent identity headers to every API call.&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;
        &lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;headers&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;X-Agent-ID&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;agent_id&lt;/span&gt;
        &lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;headers&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;X-Task-ID&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;task_id&lt;/span&gt;
        &lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;headers&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;X-Agent-Session&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;hashlib&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sha256&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;agent_id&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;:&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;task_id&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;:&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;session_start&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;encode&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
        &lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;hexdigest&lt;/span&gt;&lt;span class="p"&gt;()[:&lt;/span&gt;&lt;span class="mi"&gt;16&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;request&lt;/span&gt;

    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;audit_log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;action&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;amount&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;float&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;vendor&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;Write immutable audit entry for every spend action.&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;
        &lt;span class="n"&gt;entry&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;timestamp&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;time&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;time&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;agent_id&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;agent_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;task_id&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;task_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;action&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;action&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;amount&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;amount&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;vendor&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;vendor&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;session_hash&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;hashlib&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sha256&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
                &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;agent_id&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;:&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;task_id&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;:&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;session_start&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;encode&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
            &lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;hexdigest&lt;/span&gt;&lt;span class="p"&gt;()[:&lt;/span&gt;&lt;span class="mi"&gt;16&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;dumps&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Three headers: &lt;code&gt;X-Agent-ID&lt;/code&gt;, &lt;code&gt;X-Task-ID&lt;/code&gt;, &lt;code&gt;X-Agent-Session&lt;/code&gt;. That's it. The services you're paying (OpenAI, AWS, Stripe) will ignore them today — but your auth proxy, audit trail, and policy engine can use them immediately. When payment rails add agent identity fields (and they will — Visa's Replit investment is the signal), you'll already have the data.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Bottom Line
&lt;/h2&gt;

&lt;p&gt;AgentMail hitting 169 HN points isn't about email. It's about builders realizing the agent payment stack is missing its foundation. You can't have authorization without authentication. You can't have authentication without identity. And right now, agents have neither.&lt;/p&gt;

&lt;p&gt;The teams shipping the identity layer — Kontext, Pomerium, AgentMail, Grantex, Vouch — are building the primitives every agent payment stack will depend on. When your CFO asks "which agent spent $4,200 on that API bill" and your audit trail says "API key sk-...xyz" — you don't have an answer. That answer starts with agent identity.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;AgentPay Labs — Building the payment control plane for autonomous agents.&lt;/em&gt;&lt;br&gt;
&lt;em&gt;Previously: &lt;a href="https://dev.to/rumblingb/visa-just-bet-on-agentic-payments-heres-the-tooling-stack-to-build-safe-agent-payments-today-5gj6"&gt;Visa Just Bet on Agentic Payments&lt;/a&gt; | &lt;a href="https://dev.to/rumblingb/agent-spend-compliance-when-your-cfo-asks-who-approved-the-4200-api-bill-4l74"&gt;Agent Spend Compliance&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>payments</category>
      <category>agents</category>
      <category>identity</category>
    </item>
    <item>
      <title>The Hidden Revenue Leak in Your Stripe Payment Links</title>
      <dc:creator>Rumblingb</dc:creator>
      <pubDate>Mon, 15 Jun 2026 02:02:21 +0000</pubDate>
      <link>https://dev.to/rumblingb/the-hidden-revenue-leak-in-your-stripe-payment-links-1nf1</link>
      <guid>https://dev.to/rumblingb/the-hidden-revenue-leak-in-your-stripe-payment-links-1nf1</guid>
      <description>&lt;p&gt;I audited 22 Stripe payment links yesterday. Every single one had the same silent revenue leak.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Problem
&lt;/h2&gt;

&lt;p&gt;Stripe payment links have a &lt;code&gt;customer_creation&lt;/code&gt; field. It defaults to &lt;code&gt;"if_required"&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;"if_required"&lt;/code&gt; means: only create a Customer object when Stripe absolutely needs one. For subscriptions, it creates one. For one-time payments, it silently discards the customer's email.&lt;/p&gt;

&lt;p&gt;The money lands. But you lose the ability to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Follow up with paying customers&lt;/li&gt;
&lt;li&gt;Send renewal reminders&lt;/li&gt;
&lt;li&gt;Segment by purchase history&lt;/li&gt;
&lt;li&gt;Build an email list of actual buyers&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You get the transaction but not the relationship.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Fix (5 Seconds)
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;stripe payment_links update plink_XXXXX &lt;span class="se"&gt;\n&lt;/span&gt;  &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s2"&gt;"customer_creation=always"&lt;/span&gt; &lt;span class="se"&gt;\n&lt;/span&gt;  &lt;span class="nt"&gt;--confirm&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Or in the dashboard: Payment Links → Edit → Customer creation → "Always create a Customer"&lt;/p&gt;

&lt;p&gt;That's it. 5 seconds per link.&lt;/p&gt;

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

&lt;p&gt;When someone pays you $19 for an MCP server, they've raised their hand. They're not a random visitor — they're a buyer. If Stripe doesn't create a Customer object, you can never reach them again without building your own email capture flow.&lt;/p&gt;

&lt;p&gt;For subscription products, &lt;code&gt;"if_required"&lt;/code&gt; works fine — the subscription itself creates the Customer. But for one-time payments, every Stripe payment link with &lt;code&gt;"if_required"&lt;/code&gt; is a silent revenue leak. You're collecting payments but burning the leads.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Audit
&lt;/h2&gt;

&lt;p&gt;I checked all 22 AgentPay payment links. All 22 had &lt;code&gt;customer_creation: "if_required"&lt;/code&gt;. Zero were set to &lt;code&gt;"always"&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;That's 22 products where paying customers could vanish without a trace. Not because the product was bad. Not because the pricing was wrong. Because a single Stripe config field defaulted to discarding the most valuable piece of data: who paid you.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to Check Your Own Links
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Via Stripe CLI:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;stripe payment_links list &lt;span class="nt"&gt;--limit&lt;/span&gt; 100 &lt;span class="se"&gt;\n&lt;/span&gt;  &lt;span class="nt"&gt;--data&lt;/span&gt; &lt;span class="s2"&gt;"active=true"&lt;/span&gt; | jq &lt;span class="s1"&gt;'.data[] | {id, url, customer_creation}'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Via API:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-s&lt;/span&gt; https://api.stripe.com/v1/payment_links?active&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;true&lt;/span&gt;&amp;amp;limit&lt;span class="o"&gt;=&lt;/span&gt;100 &lt;span class="se"&gt;\n&lt;/span&gt;  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Authorization: Bearer &lt;/span&gt;&lt;span class="nv"&gt;$STRIPE_API_KEY&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="se"&gt;\n&lt;/span&gt;  | jq &lt;span class="s1"&gt;'.data[] | {id, customer_creation}'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Any link showing &lt;code&gt;customer_creation: "if_required"&lt;/code&gt; for a one-time payment product is silently discarding your customer emails.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Bottom Line
&lt;/h2&gt;

&lt;p&gt;Stripe gets you the money. But keeping the customer relationship is on you. The default config fights you. Fix it now — 5 seconds per link, zero code changes.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;61 products. 26 MCP servers. 22 payment links now audited.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Building in public at &lt;a href="https://agentpay.so" rel="noopener noreferrer"&gt;agentpay.so&lt;/a&gt;. All tools free at &lt;a href="https://smithery.ai/servers/vishar-rumbling" rel="noopener noreferrer"&gt;smithery.ai/servers/vishar-rumbling&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>stripe</category>
      <category>payments</category>
      <category>devtools</category>
      <category>buildinpublic</category>
    </item>
  </channel>
</rss>
