<?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: Donny Nguyen (Donny Diamond Hands)</title>
    <description>The latest articles on DEV Community by Donny Nguyen (Donny Diamond Hands) (@donnywin85).</description>
    <link>https://dev.to/donnywin85</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%2F4014232%2F32cf1cdd-943d-4526-8fac-eeeb7eeac967.jpg</url>
      <title>DEV Community: Donny Nguyen (Donny Diamond Hands)</title>
      <link>https://dev.to/donnywin85</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/donnywin85"/>
    <language>en</language>
    <item>
      <title>Your x402 API settled on mainnet but never showed up in Coinbase's Bazaar? Check one character.</title>
      <dc:creator>Donny Nguyen (Donny Diamond Hands)</dc:creator>
      <pubDate>Thu, 30 Jul 2026 01:19:31 +0000</pubDate>
      <link>https://dev.to/donnywin85/your-x402-api-settled-on-mainnet-but-never-showed-up-in-coinbases-bazaar-check-one-character-3l20</link>
      <guid>https://dev.to/donnywin85/your-x402-api-settled-on-mainnet-but-never-showed-up-in-coinbases-bazaar-check-one-character-3l20</guid>
      <description>&lt;p&gt;We run two pay-per-call x402 endpoints (cross-DEX market data, Uniswap v4 hook risk scans). We settled &lt;strong&gt;four real mainnet payments&lt;/strong&gt; through the CDP facilitator over four weeks — and the Bazaar merchant endpoint kept returning:&lt;br&gt;
&lt;/p&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="nl"&gt;"pagination"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"limit"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"offset"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"total"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="nl"&gt;"resources"&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;We blamed "async index lag" for a month. It wasn't lag. It was one character — well, five: &lt;code&gt;http://&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  The diagnostic that costs nothing
&lt;/h2&gt;

&lt;p&gt;Before you pay for another settle hoping the index "catches up", decode your own 402 challenge:&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;-sI&lt;/span&gt; https://your-api.example.com/paid-route | &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="nt"&gt;-i&lt;/span&gt; payment-required | &lt;span class="nb"&gt;cut&lt;/span&gt; &lt;span class="nt"&gt;-d&lt;/span&gt;&lt;span class="s1"&gt;' '&lt;/span&gt; &lt;span class="nt"&gt;-f2&lt;/span&gt; | &lt;span class="nb"&gt;base64&lt;/span&gt; &lt;span class="nt"&gt;-d&lt;/span&gt; | jq .resource.url
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If that prints &lt;code&gt;http://your-api...&lt;/code&gt; instead of &lt;code&gt;https://&lt;/code&gt;, &lt;strong&gt;you have found your problem.&lt;/strong&gt; CDP silently declines to index a resource whose &lt;code&gt;resource.url&lt;/code&gt; isn't HTTPS. No error, no rejected status — the settle succeeds, your money moves, and the listing never appears.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why it happens to almost everyone
&lt;/h2&gt;

&lt;p&gt;You're behind a TLS-terminating proxy — Railway, Cloudflare, Render, Fly, a load balancer. TLS ends at the edge, so your Express app sees plain HTTP and &lt;code&gt;req.protocol === 'http'&lt;/code&gt;. The x402 middleware bakes that protocol into &lt;code&gt;resource.url&lt;/code&gt; in every 402 challenge &lt;em&gt;and every settle payload&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;The fix is one line, &lt;strong&gt;before&lt;/strong&gt; you mount &lt;code&gt;paymentMiddleware&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;set&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;trust proxy&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Use &lt;code&gt;1&lt;/code&gt;, not &lt;code&gt;true&lt;/code&gt;. With &lt;code&gt;true&lt;/code&gt;, Express takes the &lt;em&gt;leftmost&lt;/em&gt; &lt;code&gt;X-Forwarded-For&lt;/code&gt; entry — which any client can forge to dodge your rate limiter. With &lt;code&gt;1&lt;/code&gt; it takes the proxy-observed entry, which can't be spoofed. We verified: 16 parallel requests with 16 forged &lt;code&gt;X-Forwarded-For&lt;/code&gt; values still rate-limited correctly.&lt;/p&gt;

&lt;p&gt;After deploying that one line, our very next settle indexed in &lt;strong&gt;under a minute&lt;/strong&gt;. Four weeks of "lag", solved by one character of scheme.&lt;/p&gt;

&lt;h2&gt;
  
  
  Three more traps on the way to a listing
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;1. The 500-character description cap.&lt;/strong&gt; The CDP facilitator hard-rejects any settle whose &lt;code&gt;resource.description&lt;/code&gt; exceeds 500 chars — with a misleading schema-union error your buyer only ever sees as a silent second 402. We now assert the length at boot so it can't regress silently.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. A price floor may exist.&lt;/strong&gt; Our $0.001 route settled successfully and did not index in 30+ minutes. The same route at $0.01 indexed within four minutes of the next settle. Not conclusive (time passed too), but if your cheap route won't list, try a settle at ≥$0.01 before debugging anything else.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Probe traffic will impersonate demand.&lt;/strong&gt; Within hours of listing, something started hitting our paid route at a machine-steady ~240 requests/hour — &lt;strong&gt;replaying the exact example input from our own discovery metadata&lt;/strong&gt;. One User-Agent hash accounted for 94% of it. If you're counting 402 challenges as "interest", tag and exclude requests that replay your declared example, or your demand number is fiction.&lt;/p&gt;

&lt;h2&gt;
  
  
  Working examples
&lt;/h2&gt;

&lt;p&gt;Both endpoints are live if you want a reference implementation to poke at:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;https://x402.donnyautomation.com/call?pair=WBNB/USDC&lt;/code&gt; — cross-DEX prices, liquidity &amp;amp; arbitrage spread on BSC, $0.01&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;https://x402.donnyautomation.com/v4hooks?address=0x...&lt;/code&gt; — Uniswap v4 hook custody-risk decode on Base, $0.01&lt;/li&gt;
&lt;li&gt;Free, no-payment demo: &lt;code&gt;https://x402.donnyautomation.com/demo/v4hooks/0x000052423c1dB6B7ff8641b85A7eEfc7B2791888&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Or install the MCP wrapper and let your agent pay for itself: &lt;code&gt;npx bsc-dex-spread-mcp&lt;/code&gt; (npm: &lt;code&gt;bsc-dex-spread-mcp&lt;/code&gt;)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Hit the 402, decode the header, and check that &lt;code&gt;resource.url&lt;/code&gt; says &lt;code&gt;https&lt;/code&gt;. Ours does now.&lt;/p&gt;

</description>
      <category>web3</category>
      <category>api</category>
      <category>ai</category>
      <category>defi</category>
    </item>
    <item>
      <title>Give your AI agent a cross-DEX spread tool it pays for itself (x402 + MCP, no account, no key)</title>
      <dc:creator>Donny Nguyen (Donny Diamond Hands)</dc:creator>
      <pubDate>Fri, 03 Jul 2026 23:52:48 +0000</pubDate>
      <link>https://dev.to/donnywin85/give-your-ai-agent-a-cross-dex-spread-tool-it-pays-for-itself-x402-mcp-no-account-no-key-1jo5</link>
      <guid>https://dev.to/donnywin85/give-your-ai-agent-a-cross-dex-spread-tool-it-pays-for-itself-x402-mcp-no-account-no-key-1jo5</guid>
      <description>&lt;p&gt;AI agents are starting to pay for data directly. The x402 protocol lets an HTTP&lt;br&gt;
endpoint answer a request with &lt;code&gt;402 Payment Required&lt;/code&gt;, the client signs a small&lt;br&gt;
USDC payment, and the same request is retried and served. No signup, no API key&lt;br&gt;
to request, no invoice — the agent just pays a cent and gets the data.&lt;/p&gt;

&lt;p&gt;I put a real endpoint behind that protocol and wrapped it as an MCP tool. This&lt;br&gt;
post covers what it returns, why an agent would want it, and how to plug it in.&lt;/p&gt;
&lt;h2&gt;
  
  
  What the endpoint does
&lt;/h2&gt;

&lt;p&gt;The endpoint sells one thing: &lt;strong&gt;real-time cross-DEX price and spread data for&lt;br&gt;
PancakeSwap v2 and v3 on BNB Smart Chain (BSC).&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="err"&gt;GET https://x402.donnyautomation.com/call?pair=WBNB/USDC
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Given a token pair (&lt;code&gt;SYM/SYM&lt;/code&gt;, first symbol is the USD-priceable side) and an&lt;br&gt;
optional PancakeSwap v3 fee tier, it returns:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;per-venue mid prices across PancakeSwap v2 and v3 pools,&lt;/li&gt;
&lt;li&gt;the best buy and best sell venue,&lt;/li&gt;
&lt;li&gt;the gross cross-DEX spread in basis points,&lt;/li&gt;
&lt;li&gt;per-venue and total liquidity (TVL), and&lt;/li&gt;
&lt;li&gt;the source block number.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A trimmed response:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json-doc"&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;"pair"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"WBNB/USDC"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"network"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"bsc"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"chainId"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;56&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"blockNumber"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;107562007&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"nativeUsd"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;546.6&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"pricesByVenue"&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="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"venue"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"pancake"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"surface"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"v2"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"price"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;546.6&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"tvlUsd"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1234567&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="c1"&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;"bestBuy"&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;"venue"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"pancakeV3:500"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"price"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&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;"bestSell"&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;"venue"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"biswap"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="nl"&gt;"price"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&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;"midSpreadBps"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;27.4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"crossDex"&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;"grossSpreadBps"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;14.05&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"buyVenue"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&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;"sellVenue"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&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;"surface"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"v2v3"&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;"liquidity"&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;"venues"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"totalTvlUsd"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&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;"ts"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2026-07-01T..."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"source"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"rpc"&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;It costs &lt;strong&gt;$0.01 USDC per call on Base mainnet&lt;/strong&gt;. The seller holds no private&lt;br&gt;
key — payment settlement is handled by a facilitator, and the endpoint only&lt;br&gt;
proxies to its BSC reader once payment is verified.&lt;/p&gt;
&lt;h2&gt;
  
  
  Why an agent needs cross-DEX spread data
&lt;/h2&gt;

&lt;p&gt;Cross-DEX spread is the raw signal behind several agent tasks:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Arbitrage detection&lt;/strong&gt; — a positive gross spread across venues, net of fees,
is the entry condition for a two-leg trade.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Best-execution routing&lt;/strong&gt; — which venue to buy from and which to sell to,
right now, at this block.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Slippage and liquidity checks&lt;/strong&gt; — per-venue TVL tells an agent whether a
given size will move the price.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The alternative is for every agent to run BSC RPC infrastructure, maintain pool&lt;br&gt;
addresses across v2 and v3 fee tiers, and re-derive constant-product and&lt;br&gt;
concentrated-liquidity math. Most agents should not. One tool call, one cent, a&lt;br&gt;
fresh block-stamped answer.&lt;/p&gt;
&lt;h2&gt;
  
  
  Using it from an MCP client
&lt;/h2&gt;

&lt;p&gt;The endpoint is wrapped as a Model Context Protocol server so any MCP-capable&lt;br&gt;
agent (Claude Desktop, Claude Code, and others) can call it as a tool. Install:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-g&lt;/span&gt; bsc-dex-spread-mcp
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It is also available via &lt;a href="https://smithery.ai/servers/donnywin85/bsc-dex-spread-mcp" rel="noopener noreferrer"&gt;Smithery&lt;/a&gt;&lt;br&gt;
and the official MCP registry (&lt;code&gt;io.github.donnywin85/bsc-dex-spread&lt;/code&gt;).&lt;/p&gt;

&lt;p&gt;Then add it to your MCP client config, supplying your own buyer wallet:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json-doc"&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;"mcpServers"&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;"bsc-dex-spread"&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;"command"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"npx"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"args"&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="s2"&gt;"-y"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"bsc-dex-spread-mcp"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"env"&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;"EVM_PRIVATE_KEY"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"0xYOUR_BASE_MAINNET_BUYER_KEY"&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;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;A note on the wallet model, because it matters: &lt;strong&gt;you supply the key; the package&lt;br&gt;
ships none.&lt;/strong&gt; The server signs each payment with the key in &lt;code&gt;EVM_PRIVATE_KEY&lt;/code&gt;,&lt;br&gt;
which you set in your own config. Fund that wallet with a few dollars of USDC on&lt;br&gt;
Base and nothing else — the x402 &lt;code&gt;exact&lt;/code&gt; scheme uses EIP-3009&lt;br&gt;
&lt;code&gt;transferWithAuthorization&lt;/code&gt;, so the facilitator broadcasts the transfer and pays&lt;br&gt;
the gas. A zero-ETH wallet settles fine. Treat it as a disposable, low-balance&lt;br&gt;
spending wallet.&lt;/p&gt;

&lt;p&gt;Once configured, the agent has a &lt;code&gt;get_dex_spread(pair, fee?)&lt;/code&gt; tool and pays&lt;br&gt;
$0.01 USDC each time it calls it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Proof it is live
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Live usage/telemetry page: &lt;a href="https://x402.donnyautomation.com/stats" rel="noopener noreferrer"&gt;https://x402.donnyautomation.com/stats&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;First real mainnet settlement (self-payment, to prove the path end to end):
&lt;a href="https://basescan.org/tx/0x0c3ceda02f8aa36d48da392330e5bdcc9f34632a5dba2366a1663d6e7a301733" rel="noopener noreferrer"&gt;&lt;code&gt;0x0c3ceda02f8aa36d48da392330e5bdcc9f34632a5dba2366a1663d6e7a301733&lt;/code&gt;&lt;/a&gt;
— Base mainnet, receipt status success. The transaction was submitted by the
facilitator, confirming the buyer paid zero gas.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The &lt;code&gt;/stats&lt;/code&gt; page shows challenge-versus-paid counts and recent settlements, so&lt;br&gt;
you can watch real demand accrue rather than take my word for it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Takeaway
&lt;/h2&gt;

&lt;p&gt;If you are building agents that touch on-chain markets, this is a small, honest&lt;br&gt;
example of the pattern worth copying: a narrow, useful data endpoint, priced per&lt;br&gt;
call, discoverable and payable by machines without a human in the loop. The&lt;br&gt;
protocol is x402; the packaging is MCP; the price is a cent.&lt;/p&gt;

</description>
      <category>web3</category>
      <category>mcp</category>
      <category>ai</category>
      <category>defi</category>
    </item>
  </channel>
</rss>
