<?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: WebAZ</title>
    <description>The latest articles on DEV Community by WebAZ (@seasonkoh).</description>
    <link>https://dev.to/seasonkoh</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%2F4015190%2F38d5f2f7-9f0b-4c7f-bbf9-ac29ee85b23d.png</url>
      <title>DEV Community: WebAZ</title>
      <link>https://dev.to/seasonkoh</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/seasonkoh"/>
    <language>en</language>
    <item>
      <title>Your MCP Server Needs a Machine-Readable "No"</title>
      <dc:creator>WebAZ</dc:creator>
      <pubDate>Wed, 02 Sep 2026 16:36:01 +0000</pubDate>
      <link>https://dev.to/seasonkoh/your-mcp-server-needs-a-machine-readable-no-37ni</link>
      <guid>https://dev.to/seasonkoh/your-mcp-server-needs-a-machine-readable-no-37ni</guid>
      <description>&lt;p&gt;Most Agent integrations explain what an AI is allowed to do.&lt;/p&gt;

&lt;p&gt;They publish a tool list, an OpenAPI document, or an MCP schema. The Agent sees actions such as &lt;code&gt;search&lt;/code&gt;, &lt;code&gt;create_order&lt;/code&gt;, &lt;code&gt;send_message&lt;/code&gt;, or &lt;code&gt;refund&lt;/code&gt; and plans from there.&lt;/p&gt;

&lt;p&gt;That is only half of the contract.&lt;/p&gt;

&lt;p&gt;A production Agent also needs to know what it cannot do, what it must not do, which limits apply, and which actions remain human-gated even when the Agent has broad credentials.&lt;/p&gt;

&lt;p&gt;In other words, an Agent interface needs a machine-readable &lt;strong&gt;negative space&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Missing tools are not a complete boundary
&lt;/h2&gt;

&lt;p&gt;Suppose an anonymous shopping MCP exposes only one tool: product search.&lt;/p&gt;

&lt;p&gt;A careful client may infer that it cannot place an order. But several questions remain:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Is ordering unavailable on this surface, or merely undocumented?&lt;/li&gt;
&lt;li&gt;Can the Agent obtain a broader tool set after authentication?&lt;/li&gt;
&lt;li&gt;Which write scopes would be required?&lt;/li&gt;
&lt;li&gt;Is a proposed order reversible preparation or a real obligation?&lt;/li&gt;
&lt;li&gt;Does a human still have to approve the final action?&lt;/li&gt;
&lt;li&gt;What happens if the Agent exceeds a rate or cross-user access limit?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The absence of a tool answers none of these explicitly.&lt;/p&gt;

&lt;p&gt;Prompt instructions are not enough either. A sentence such as “do not buy without permission” depends on model behavior. A server-enforced capability boundary can return a deterministic denial. A machine-readable boundary lets the client understand that denial before it improvises a recovery path.&lt;/p&gt;

&lt;h2&gt;
  
  
  Five kinds of "no"
&lt;/h2&gt;

&lt;p&gt;A useful negative-space document should distinguish at least five categories.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Unavailable
&lt;/h3&gt;

&lt;p&gt;The capability does not exist on this interface.&lt;/p&gt;

&lt;p&gt;Example: an anonymous discovery endpoint can search but cannot create an order or move funds.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Scope-gated
&lt;/h3&gt;

&lt;p&gt;The capability exists, but the current identity has not declared or received the required scope.&lt;/p&gt;

&lt;p&gt;The server should default to deny rather than treat an unknown Agent as broadly trusted.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Rate-limited
&lt;/h3&gt;

&lt;p&gt;The action is permitted within an explicit budget. The limit, unit, and failure response should be predictable enough for a client to stop rather than retry aggressively.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Forbidden
&lt;/h3&gt;

&lt;p&gt;Some behavior should remain disallowed regardless of convenience: impersonation, exceeding declared scope, reselling user data, or rebuilding a cross-user profile graph from protocol reads.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Human-gated
&lt;/h3&gt;

&lt;p&gt;Some actions remain too consequential for a delegated scope to override. Arbitration, key revocation, account deletion, or large withdrawals may require a fresh human ceremony even when the Agent is otherwise authenticated.&lt;/p&gt;

&lt;p&gt;These categories produce different recovery behavior. “Unavailable” may send the user to another interface. “Scope-gated” may request authorization. “Rate-limited” should wait. “Forbidden” should stop. “Human-gated” should hand off a precise action for confirmation.&lt;/p&gt;

&lt;h2&gt;
  
  
  Documentation is not enforcement
&lt;/h2&gt;

&lt;p&gt;A negative-space file is useful only when it matches runtime behavior.&lt;/p&gt;

&lt;p&gt;The strongest version connects each declared boundary to an enforcement mechanism:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;named write scopes map to actual routes or tool actions;&lt;/li&gt;
&lt;li&gt;undeclared writes fail closed;&lt;/li&gt;
&lt;li&gt;rate caps produce stable error codes;&lt;/li&gt;
&lt;li&gt;repeated abuse changes an accountability state;&lt;/li&gt;
&lt;li&gt;sensitive transitions require a live human ceremony;&lt;/li&gt;
&lt;li&gt;limits are versioned with the same contract the Agent reads.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This turns the document from policy prose into an integration surface that can be tested.&lt;/p&gt;

&lt;h2&gt;
  
  
  A live example
&lt;/h2&gt;

&lt;p&gt;WebAZ publishes both sides of its Agent contract.&lt;/p&gt;

&lt;p&gt;As checked on September 2, 2026, its public protocol reported version &lt;code&gt;0.1.37&lt;/code&gt; and schema &lt;code&gt;49&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;The positive capability map is available at:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;https://webaz.xyz/.well-known/webaz-capabilities.json&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;It describes named write actions, read scopes, safe unscoped operations, and default-deny behavior for undeclared Agent writes.&lt;/p&gt;

&lt;p&gt;The negative space is available at:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;https://webaz.xyz/.well-known/webaz-negative-space.json&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;It lists forbidden behavior, cross-user and mass-action limits, consequences for repeated abuse, and an iron rule: certain sensitive actions require live WebAuthn regardless of declared scope.&lt;/p&gt;

&lt;p&gt;The public shopping surface demonstrates the smallest version of the idea. Its anonymous tool list exposes only &lt;code&gt;webaz_search&lt;/code&gt;. Account, order, reservation, and settlement actions are not present on that surface.&lt;/p&gt;

&lt;p&gt;This is an implementation example, not a claim that the design is complete or universally secure. A published boundary still needs adversarial tests, monitoring, and review. The useful property is that a client can inspect the intended boundary and compare it with observed behavior.&lt;/p&gt;

&lt;h2&gt;
  
  
  A practical test for Agent builders
&lt;/h2&gt;

&lt;p&gt;For one MCP server or Agent API, ask:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Can the client enumerate what this identity may do?&lt;/li&gt;
&lt;li&gt;Can it distinguish unavailable, scope-gated, rate-limited, forbidden, and human-gated actions?&lt;/li&gt;
&lt;li&gt;Does every consequential write have a named authorization boundary?&lt;/li&gt;
&lt;li&gt;Are denial and retry states deterministic?&lt;/li&gt;
&lt;li&gt;Can the client learn which actions must stop instead of escalating automatically?&lt;/li&gt;
&lt;li&gt;Is the boundary versioned and testable against the live service?&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Agents become more useful when they can act. They become more trustworthy when they can explain why they stopped.&lt;/p&gt;

&lt;p&gt;Publishing a machine-readable &lt;code&gt;yes&lt;/code&gt; is the start of an integration. Publishing an enforceable, machine-readable &lt;code&gt;no&lt;/code&gt; is what gives that integration a boundary.&lt;/p&gt;

&lt;p&gt;WebAZ integration contract: &lt;a href="https://webaz.xyz/.well-known/webaz-integration.json" rel="noopener noreferrer"&gt;https://webaz.xyz/.well-known/webaz-integration.json&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Capability map: &lt;a href="https://webaz.xyz/.well-known/webaz-capabilities.json" rel="noopener noreferrer"&gt;https://webaz.xyz/.well-known/webaz-capabilities.json&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Negative space: &lt;a href="https://webaz.xyz/.well-known/webaz-negative-space.json" rel="noopener noreferrer"&gt;https://webaz.xyz/.well-known/webaz-negative-space.json&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>mcp</category>
      <category>security</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Humans and AI Agents Need One Commerce Record, Not Two Realities</title>
      <dc:creator>WebAZ</dc:creator>
      <pubDate>Mon, 31 Aug 2026 23:29:05 +0000</pubDate>
      <link>https://dev.to/seasonkoh/humans-and-ai-agents-need-one-commerce-record-not-two-realities-4mmj</link>
      <guid>https://dev.to/seasonkoh/humans-and-ai-agents-need-one-commerce-record-not-two-realities-4mmj</guid>
      <description>&lt;p&gt;An AI-commerce demo can look complete after three steps:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;prompt -&amp;gt; product search -&amp;gt; tool call
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That is enough to demonstrate connectivity. It is not enough to demonstrate commerce.&lt;/p&gt;

&lt;p&gt;The difficult questions begin immediately afterward:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Did the seller publish enough information for a decision?&lt;/li&gt;
&lt;li&gt;Was the quoted price still valid when the request was submitted?&lt;/li&gt;
&lt;li&gt;Did the Agent prepare an order or make a binding commitment?&lt;/li&gt;
&lt;li&gt;Which human approved the consequential step?&lt;/li&gt;
&lt;li&gt;Which settlement path was selected?&lt;/li&gt;
&lt;li&gt;If a response timed out, did the action fail, succeed or remain unknown?&lt;/li&gt;
&lt;li&gt;What evidence can the buyer, seller and operator inspect later?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A production-oriented system should not answer those questions differently depending on whether the user arrived through a browser or an Agent.&lt;/p&gt;

&lt;p&gt;Humans and Agents need different permissions over one explicit commerce record, not two incompatible realities.&lt;/p&gt;

&lt;h2&gt;
  
  
  Start with shared facts
&lt;/h2&gt;

&lt;p&gt;An Agent cannot make a reliable purchase decision from marketing copy alone. A useful product record needs decision-relevant facts such as:&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="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="s2"&gt;"19.90 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;"availability"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"in_stock"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"handling_time"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"within 72h"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"delivery_estimate"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"7-14 days"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"return_window"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"7 days"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"unknowns"&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;"final carrier before fulfillment"&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;The exact schema will differ by system. The important property is that a person and an Agent inspect the same facts, including what is not known.&lt;/p&gt;

&lt;p&gt;If the browser says “available” while the Agent endpoint returns stale inventory, the system has not created agentic commerce. It has created a second, less visible storefront that will eventually disagree with the first.&lt;/p&gt;

&lt;h2&gt;
  
  
  Separate preparation from commitment
&lt;/h2&gt;

&lt;p&gt;Many useful Agent actions are reversible:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;search;&lt;/li&gt;
&lt;li&gt;compare;&lt;/li&gt;
&lt;li&gt;request a quote;&lt;/li&gt;
&lt;li&gt;assemble a cart;&lt;/li&gt;
&lt;li&gt;prepare an order request;&lt;/li&gt;
&lt;li&gt;explain the terms to the user.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The commitment boundary is different. Creating an order, authorizing payment or accepting a consequential term should not be smuggled into a harmless-looking tool chain.&lt;/p&gt;

&lt;p&gt;A safer flow looks like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;discover
  -&amp;gt; quote
  -&amp;gt; prepare order request
  -&amp;gt; show terms and unknowns
  -&amp;gt; human approval
  -&amp;gt; create order
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;WebAZ currently uses this distinction on its authenticated commerce path. An Agent may search, quote, draft and submit an order request. A human Passkey approval is required before the order exists.&lt;/p&gt;

&lt;p&gt;The reviewed public shopping MCP is narrower by design. It is anonymous and discovery-only: it exposes search but cannot create orders or move funds.&lt;/p&gt;

&lt;p&gt;That limitation is a product property, not a missing demo effect. A client can connect the surface without accidentally giving an exploratory prompt transactional authority.&lt;/p&gt;

&lt;h2&gt;
  
  
  Settlement paths should remain distinguishable
&lt;/h2&gt;

&lt;p&gt;“Payment supported” hides more than it explains.&lt;/p&gt;

&lt;p&gt;Different settlement mechanisms have different trust assumptions, failure modes and recovery options. They should not be presented as interchangeable buttons behind one generic payment claim.&lt;/p&gt;

&lt;p&gt;WebAZ currently exposes two real settlement paths.&lt;/p&gt;

&lt;h3&gt;
  
  
  Direct Pay
&lt;/h3&gt;

&lt;p&gt;Direct Pay supports off-platform payment from buyer to seller. WebAZ records order states, acknowledgements, a snapshot of the seller's payment instructions and submitted evidence.&lt;/p&gt;

&lt;p&gt;The boundary matters: WebAZ does not hold principal. It does not verify the payee or payment method, guarantee payment or delivery, or issue the seller's refund.&lt;/p&gt;

&lt;h3&gt;
  
  
  USDC on-chain escrow
&lt;/h3&gt;

&lt;p&gt;The USDC path locks real funds in an immutable Base-mainnet contract. The contract constrains exits and enforces per-order caps on-chain; WebAZ does not custody the principal.&lt;/p&gt;

&lt;p&gt;The contract has not had a third-party security audit. That disclosure belongs beside the feature, not in a footnote that disappears during promotion.&lt;/p&gt;

&lt;p&gt;The shared principle is not that the two paths are equally safe. It is that the selected path and its boundary remain visible in the transaction record.&lt;/p&gt;

&lt;h2&gt;
  
  
  Payment is not fulfillment
&lt;/h2&gt;

&lt;p&gt;A payment provider can report success while the commerce system still lacks a confirmed order, inventory allocation or fulfillment state.&lt;/p&gt;

&lt;p&gt;Agents make this distinction more urgent because an automated retry can turn an ambiguous timeout into a duplicate consequential action.&lt;/p&gt;

&lt;p&gt;After every write, the system should be able to answer:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;What is the last proven fact?&lt;/li&gt;
&lt;li&gt;What remains unknown?&lt;/li&gt;
&lt;li&gt;Is the next action safe to retry?&lt;/li&gt;
&lt;li&gt;Which participant acts next?&lt;/li&gt;
&lt;li&gt;Which evidence supports that conclusion?&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This is why state, acknowledgements, evidence, recovery and dispute handling are part of the commerce interface rather than back-office details.&lt;/p&gt;

&lt;h2&gt;
  
  
  Apply the same discipline to contribution
&lt;/h2&gt;

&lt;p&gt;Agent participation has a similar boundary problem.&lt;/p&gt;

&lt;p&gt;An Agent can discover a public task, inspect its constraints and prepare an evidence-backed suggestion. That does not automatically make the suggestion an accepted contribution, grant source access or create an economic claim.&lt;/p&gt;

&lt;p&gt;The WebAZ production core is private. Source access and code contributions are invitation-based. Invited AI-assisted work requires a Passkey-bound accountable human.&lt;/p&gt;

&lt;p&gt;Again, different roles operate on one record:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;requester -&amp;gt; executor/tool -&amp;gt; reviewer -&amp;gt; accepted artifact -&amp;gt; accountable party
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The Agent can be named as an executor without being presented as the person who accepted responsibility for shipping the result.&lt;/p&gt;

&lt;h2&gt;
  
  
  A four-question implementation test
&lt;/h2&gt;

&lt;p&gt;Take one real transaction in your own system and ask:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;What may the Agent read?&lt;/li&gt;
&lt;li&gt;What may it prepare without committing the user?&lt;/li&gt;
&lt;li&gt;Which exact step requires human approval?&lt;/li&gt;
&lt;li&gt;What evidence remains after that action?&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If the browser and Agent surfaces produce different answers, the integration is not yet operating under one commerce model.&lt;/p&gt;

&lt;p&gt;If “payment succeeded” is the last explainable state, the transaction record is incomplete.&lt;/p&gt;

&lt;p&gt;If the Agent can commit but nobody can identify the accountable approver, the permission model is incomplete.&lt;/p&gt;

&lt;p&gt;The goal is not maximum autonomy. It is legible autonomy: every participant can see the facts, permissions, commitment boundary and resulting evidence.&lt;/p&gt;

&lt;p&gt;That is the shared stack WebAZ is currently testing across its PWA, MCP surfaces, real settlement paths and contribution entry.&lt;/p&gt;

&lt;p&gt;WebAZ: &lt;a href="https://webaz.xyz" rel="noopener noreferrer"&gt;https://webaz.xyz&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>agents</category>
      <category>mcp</category>
      <category>ecommerce</category>
    </item>
    <item>
      <title>An Open Task Is Not Yet a Contribution</title>
      <dc:creator>WebAZ</dc:creator>
      <pubDate>Sun, 30 Aug 2026 03:02:23 +0000</pubDate>
      <link>https://dev.to/seasonkoh/an-open-task-is-not-yet-a-contribution-476</link>
      <guid>https://dev.to/seasonkoh/an-open-task-is-not-yet-a-contribution-476</guid>
      <description>&lt;p&gt;Most contributor onboarding starts by collecting identity.&lt;/p&gt;

&lt;p&gt;Create an account. Join the community. Request repository access. Pick an issue. Only then discover whether the work is relevant, bounded or even ready to be attempted.&lt;/p&gt;

&lt;p&gt;That sequence is especially awkward in AI-assisted development. An Agent can produce a plausible patch quickly, but speed does not answer the questions that maintainers actually need resolved:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Was this problem authorized?&lt;/li&gt;
&lt;li&gt;What files, systems or external actions were inside the boundary?&lt;/li&gt;
&lt;li&gt;What evidence would prove completion?&lt;/li&gt;
&lt;li&gt;Which risks required human review?&lt;/li&gt;
&lt;li&gt;Who is accountable for the result?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A useful contributor surface should reveal those constraints before it asks for commitment.&lt;/p&gt;

&lt;h2&gt;
  
  
  Start with problems, not identity collection
&lt;/h2&gt;

&lt;p&gt;WebAZ currently exposes a narrow public contribution entry through the full Remote MCP surface.&lt;/p&gt;

&lt;p&gt;Without an API key, a person or Agent can:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;list public build tasks;&lt;/li&gt;
&lt;li&gt;inspect a task's execution boundary and acceptance criteria;&lt;/li&gt;
&lt;li&gt;submit an evidence-backed suggestion to the maintainer review inbox.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The conceptual flow looks like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;discover public task
  -&amp;gt; inspect boundary and verification
  -&amp;gt; decide whether the problem is understood
  -&amp;gt; submit a structured suggestion
  -&amp;gt; maintainer review
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The default buyer-facing MCP surface does not advertise the contribution tool. The full surface exposes &lt;code&gt;webaz_contribute&lt;/code&gt;, where &lt;code&gt;list_open&lt;/code&gt;, &lt;code&gt;detail&lt;/code&gt; and &lt;code&gt;suggest&lt;/code&gt; are public starting actions.&lt;/p&gt;

&lt;p&gt;A compact interaction can begin with:&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="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"action"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"list_open"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"area"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"docs"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"agent_capabilities"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"markdown,read-source"&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;The result is not merely a title list. A task can describe risk level, required capabilities, autonomy, estimated effort, context size, dependencies, blocking conditions and whether human review is required.&lt;/p&gt;

&lt;p&gt;Before doing anything, a prospective participant can ask for the detail view:&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="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"action"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"detail"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"task_id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"&amp;lt;public-task-id&amp;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;That is where a real coordination system should state what may change, what must not change, what commands or evidence are expected and what “done” means.&lt;/p&gt;

&lt;h2&gt;
  
  
  Suggestions are intentionally weaker than contributions
&lt;/h2&gt;

&lt;p&gt;The next distinction prevents the public entry point from becoming a participation factory.&lt;/p&gt;

&lt;p&gt;A suggestion is a proposal in a maintainer review inbox. It is not:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;a contribution fact;&lt;/li&gt;
&lt;li&gt;formal participation;&lt;/li&gt;
&lt;li&gt;repository access;&lt;/li&gt;
&lt;li&gt;accepted work;&lt;/li&gt;
&lt;li&gt;a reward, payment or redemption claim;&lt;/li&gt;
&lt;li&gt;ownership or governance rights.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That weaker status is useful. It allows a newcomer to add signal without pretending that every idea has already created value for the project.&lt;/p&gt;

&lt;p&gt;A good suggestion should still carry enough structure to be evaluated:&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="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"action"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"suggest"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"title"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Add a reproducible empty-state example for the public catalog"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"summary"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"The current guide shows successful search but not the expected zero-result contract. Add one exact request, response and verification note."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"expected_outcome"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"A reader can distinguish an honest empty result from a transport or authentication failure."&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_ref"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://example.com/reproduction-note"&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;This example is illustrative. A real suggestion should link only to evidence the proposer is authorized to share.&lt;/p&gt;

&lt;h2&gt;
  
  
  Private source changes the public promise
&lt;/h2&gt;

&lt;p&gt;The WebAZ production core repository is private. Source access and code contributions are invitation-based.&lt;/p&gt;

&lt;p&gt;That means the public contribution surface must not imply an open repository or promise that a suggestion will turn into code access. Public discovery and proposal are the available first steps. Maintainers decide whether a proposal needs clarification, should be converted into a task or belongs outside the current scope.&lt;/p&gt;

&lt;p&gt;This is less permissive than a public issue tracker, but it is more precise about what the system can promise today.&lt;/p&gt;

&lt;p&gt;It also creates a safer role for Agents. An Agent can discover a bounded problem, compare its capabilities with the task requirements, assemble public evidence and draft a suggestion. It cannot independently become the accountable contributor. Invited AI-assisted code contributions must still be triggered by a Passkey-bound human who accepts responsibility for the work.&lt;/p&gt;

&lt;h2&gt;
  
  
  Task metadata is part of the product
&lt;/h2&gt;

&lt;p&gt;An open-task system becomes useful when it helps prevent collisions and mis-scoped work.&lt;/p&gt;

&lt;p&gt;For Agent-assisted collaboration, I would expect at least these fields:&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="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"risk_level"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"low"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"required_capabilities"&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;"markdown"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"read-source"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"agent_autonomy"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"autonomous"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"estimated_context_size"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"small"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"human_review_required"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"dependencies"&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;"blocking_conditions"&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;"value_state"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"uncommitted"&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;The final field matters. A task estimate describes effort, not payment. A task record or suggestion should not be interpreted as an economic instrument or a promise of future value.&lt;/p&gt;

&lt;h2&gt;
  
  
  A five-question contributor test
&lt;/h2&gt;

&lt;p&gt;Before adding another signup form or “good first issue” label, test the entry point with five questions:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Can someone see a real problem before registering?&lt;/li&gt;
&lt;li&gt;Can they inspect the execution and verification boundary before starting?&lt;/li&gt;
&lt;li&gt;Can they tell the difference between a suggestion and accepted contribution?&lt;/li&gt;
&lt;li&gt;When AI assists, is there an accountable human?&lt;/li&gt;
&lt;li&gt;Can a maintainer reconstruct why the work was accepted?&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The goal is not zero friction. Trustworthy collaboration needs review, identity and responsibility at the right moments.&lt;/p&gt;

&lt;p&gt;The goal is to delay those demands until the participant understands the problem, while keeping every later status honest.&lt;/p&gt;

&lt;p&gt;For WebAZ, that begins with public task discovery and evidence-backed suggestions. No account is required to understand the work. Acceptance still has to be earned.&lt;/p&gt;

&lt;p&gt;WebAZ entry: &lt;a href="https://webaz.xyz" rel="noopener noreferrer"&gt;https://webaz.xyz&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>opensource</category>
      <category>agents</category>
      <category>mcp</category>
    </item>
    <item>
      <title>Payment Succeeded. Did the Transaction?</title>
      <dc:creator>WebAZ</dc:creator>
      <pubDate>Sat, 29 Aug 2026 08:49:54 +0000</pubDate>
      <link>https://dev.to/seasonkoh/payment-succeeded-did-the-transaction-51i4</link>
      <guid>https://dev.to/seasonkoh/payment-succeeded-did-the-transaction-51i4</guid>
      <description>&lt;p&gt;A payment API returns &lt;code&gt;success&lt;/code&gt;. The interface turns green. Everyone relaxes.&lt;/p&gt;

&lt;p&gt;But what exactly succeeded?&lt;/p&gt;

&lt;p&gt;The payment rail may have accepted or settled money while the merchant never received the callback. Inventory may still be uncommitted. The selected variant may have changed. Fulfillment may not have started. A buyer or Agent may be staring at a timeout and deciding whether to retry.&lt;/p&gt;

&lt;p&gt;In distributed commerce, payment success is one fact. Transaction completion is a chain of facts owned by different systems and people.&lt;/p&gt;

&lt;h2&gt;
  
  
  The green checkmark hides several clocks
&lt;/h2&gt;

&lt;p&gt;A useful commerce state model separates at least these stages:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;intent
  -&amp;gt; authorization
  -&amp;gt; payment attempt
  -&amp;gt; payment outcome
  -&amp;gt; merchant acknowledgement
  -&amp;gt; order acceptance
  -&amp;gt; fulfillment
  -&amp;gt; delivery / return / dispute
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;These stages do not advance on one clock.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The payment rail knows whether money moved.&lt;/li&gt;
&lt;li&gt;The merchant knows whether it accepted the commercial obligation.&lt;/li&gt;
&lt;li&gt;The inventory system knows whether the exact item and variant were committed.&lt;/li&gt;
&lt;li&gt;The fulfillment system knows whether dispatch started.&lt;/li&gt;
&lt;li&gt;The buyer knows whether the received outcome matches what was approved.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Collapsing them into &lt;code&gt;paid=true&lt;/code&gt; creates a dangerous ambiguity: nobody can tell who owns the next action.&lt;/p&gt;

&lt;h2&gt;
  
  
  Timeout is a state, not permission to retry
&lt;/h2&gt;

&lt;p&gt;Suppose an Agent submits a payment and the connection times out. There are at least three possibilities:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The payment failed before reaching the provider.&lt;/li&gt;
&lt;li&gt;The payment succeeded, but the response was lost.&lt;/li&gt;
&lt;li&gt;The provider accepted it, but final settlement is still pending.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Blindly retrying can create a duplicate charge. Blindly declaring failure can leave a paid buyer without an acknowledged order.&lt;/p&gt;

&lt;p&gt;The correct response is usually &lt;code&gt;outcome_unknown&lt;/code&gt;, followed by deterministic reconciliation. The system should query the authoritative payment record using the same idempotency key, compare it with the approved purchase intent and then advance the commerce state exactly once.&lt;/p&gt;

&lt;h2&gt;
  
  
  The receipt should connect intent to responsibility
&lt;/h2&gt;

&lt;p&gt;A model-generated sentence is not enough. A recoverable transaction needs a compact machine-readable record such as:&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="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"intent_id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"intent_123"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"idempotency_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;"checkout_123_attempt_1"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"approved"&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;"seller"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"seller_42"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"item"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"sku_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;"variant"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"green-8-pack"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"currency"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"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;"maximum_total"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"18.29"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"destination"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"SG"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"terms_version"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"terms_2026_08_29"&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;"payment"&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;"state"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"confirmed"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"authoritative_reference"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"rail_ref_456"&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;"commerce"&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;"merchant_acknowledged"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"inventory_committed"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"unknown"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"fulfillment"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"not_started"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"next_owner"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"merchant_reconciliation"&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;This is an illustrative architecture pattern, not a WebAZ API response. Its important property is that payment and commerce remain separate while the record identifies what was approved and who must act next.&lt;/p&gt;

&lt;h2&gt;
  
  
  Agents make this boundary more important
&lt;/h2&gt;

&lt;p&gt;Humans already misread green checkmarks. Agents add retries, tool chaining and compressed summaries.&lt;/p&gt;

&lt;p&gt;An Agent-safe commerce workflow should therefore:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;bind approval to an exact seller, item, variant, currency, maximum total, destination and terms version;&lt;/li&gt;
&lt;li&gt;assign an idempotency key before the first external write;&lt;/li&gt;
&lt;li&gt;represent timeout as &lt;code&gt;unknown&lt;/code&gt;, not &lt;code&gt;failed&lt;/code&gt;;&lt;/li&gt;
&lt;li&gt;reconcile against the authoritative rail before retrying;&lt;/li&gt;
&lt;li&gt;keep payment, order and fulfillment states independently visible;&lt;/li&gt;
&lt;li&gt;name the system or person that owns the next action.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The Agent may prepare and explain. It should not reinterpret approval or invent completion.&lt;/p&gt;

&lt;h2&gt;
  
  
  One current WebAZ example
&lt;/h2&gt;

&lt;p&gt;WebAZ currently exposes two live settlement rails with different custody models.&lt;/p&gt;

&lt;p&gt;With Direct Pay, payment happens off-platform from buyer to seller. WebAZ does not hold the principal. WebAZ does not verify the payee or payment method, guarantee payment or issue the seller's refund. It records order states, acknowledgements, a snapshot of the payment instructions and evidence so the later process remains legible.&lt;/p&gt;

&lt;p&gt;For eligible USDC orders, real funds are locked in an immutable Base-mainnet escrow contract. The contract is runtime-gated, capped per order and has not had a third-party security audit. An on-chain payment or release still does not prove delivery; settlement and fulfillment remain different states.&lt;/p&gt;

&lt;p&gt;The public WebAZ launch pulse reported 37 completed orders and 15 resolved disputes at 08:41 UTC on 29 August 2026. Those are dated protocol counts, not a claim that every failure mode above occurred on WebAZ.&lt;/p&gt;

&lt;h2&gt;
  
  
  A practical test
&lt;/h2&gt;

&lt;p&gt;Take one failed or ambiguous checkout from your own system and answer five questions:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;What is the last authoritative fact?&lt;/li&gt;
&lt;li&gt;Which state is still unknown?&lt;/li&gt;
&lt;li&gt;Is retrying safe, and how is that proven?&lt;/li&gt;
&lt;li&gt;Who owns the next action?&lt;/li&gt;
&lt;li&gt;What evidence will let the buyer, merchant and operator reconstruct the decision later?&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If the answer is only “the payment screen was green,” the transaction is not yet legible enough for an Agent.&lt;/p&gt;

&lt;p&gt;Payment success matters. But a trustworthy commerce system must also explain what happened next.&lt;/p&gt;

&lt;p&gt;WebAZ protocol status: &lt;a href="https://webaz.xyz/.well-known/webaz-protocol.json" rel="noopener noreferrer"&gt;https://webaz.xyz/.well-known/webaz-protocol.json&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>ecommerce</category>
      <category>architecture</category>
      <category>webdev</category>
    </item>
    <item>
      <title>An MCP Server Is Not Interoperable Just Because It Connects</title>
      <dc:creator>WebAZ</dc:creator>
      <pubDate>Fri, 28 Aug 2026 07:34:14 +0000</pubDate>
      <link>https://dev.to/seasonkoh/an-mcp-server-is-not-interoperable-just-because-it-connects-m34</link>
      <guid>https://dev.to/seasonkoh/an-mcp-server-is-not-interoperable-just-because-it-connects-m34</guid>
      <description>&lt;p&gt;An MCP handshake proves that two endpoints can start a session. It does not prove that an Agent can understand the tool, call it correctly, distinguish display text from machine-readable state, or know when to stop.&lt;/p&gt;

&lt;p&gt;I ran an independent test with FastMCP 3.4.7 as the client and WebAZ's public shopping MCP as the remote server.&lt;/p&gt;

&lt;p&gt;The question was deliberately narrow:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;What should an MCP smoke test verify beyond connection success?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  A four-part minimum
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Advertised schema
&lt;/h3&gt;

&lt;p&gt;Call &lt;code&gt;list_tools()&lt;/code&gt; and inspect the input schema, not just the tool name. A caller should be able to construct a valid request and identify conflicting fields.&lt;/p&gt;

&lt;p&gt;The tested endpoint exposed one anonymous tool, &lt;code&gt;webaz_search&lt;/code&gt;. It did not advertise account, order, reservation or settlement actions.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Explicit error state
&lt;/h3&gt;

&lt;p&gt;Check &lt;code&gt;CallToolResult.is_error&lt;/code&gt;. A text block alone is not proof that an operation completed successfully.&lt;/p&gt;

&lt;p&gt;The test call returned &lt;code&gt;is_error=false&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Concise model-facing content
&lt;/h3&gt;

&lt;p&gt;The ordinary content block summarized that three products were found without copying the full payload into model context.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Deterministic structured content
&lt;/h3&gt;

&lt;p&gt;The structured result carried destination normalization, product fields and workflow state:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;response_type=comparison&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;completion=complete&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;assistant_action=answer&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Singapore&lt;/code&gt; normalized to &lt;code&gt;SG&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;three products returned from four matches&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Checking only rendered text would have missed the fields a deterministic client or UI needs.&lt;/p&gt;

&lt;h2&gt;
  
  
  Minimal reproduction
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;asyncio&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;fastmcp&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Client&lt;/span&gt;


&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
    &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="nc"&gt;Client&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://webaz.xyz/mcp/shopping-v1&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;tools&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;list_tools&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
        &lt;span class="k"&gt;assert&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;tool&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;tool&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;tools&lt;/span&gt;&lt;span class="p"&gt;]&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;webaz_search&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

        &lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;call_tool&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;webaz_search&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&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;query&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;tissue&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;ship_to&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;Singapore&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;sort&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;price_asc&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;limit&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="p"&gt;)&lt;/span&gt;

        &lt;span class="k"&gt;assert&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;is_error&lt;/span&gt; &lt;span class="ow"&gt;is&lt;/span&gt; &lt;span class="bp"&gt;False&lt;/span&gt;
        &lt;span class="k"&gt;assert&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;content&lt;/span&gt;
        &lt;span class="k"&gt;assert&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;structured_content&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;completion&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="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;complete&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
        &lt;span class="k"&gt;assert&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;structured_content&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;assistant_action&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="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;answer&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;


&lt;span class="n"&gt;asyncio&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;run&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Observed on 2026-08-28 with Python 3.13.12 and FastMCP 3.4.7.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Agent-commerce implication
&lt;/h2&gt;

&lt;p&gt;A fluent answer can hide an incomplete transaction state. Discovery is not a quote. A quote is not an order. An order is not settlement. Settlement is not fulfillment.&lt;/p&gt;

&lt;p&gt;Those boundaries should be represented in schemas and structured results, not only in prose prompts.&lt;/p&gt;

&lt;p&gt;This was one public, read-only call. It was not a security audit, load test, OAuth test, renderer test, order test or payment test. FastMCP did not participate in or endorse the experiment.&lt;/p&gt;

&lt;p&gt;The takeaway: verify the advertised schema, &lt;code&gt;is_error&lt;/code&gt;, concise &lt;code&gt;content&lt;/code&gt; and raw &lt;code&gt;structured_content&lt;/code&gt; separately. Connection success is only the beginning.&lt;/p&gt;

&lt;p&gt;FastMCP client documentation: &lt;a href="https://gofastmcp.com/clients/tools" rel="noopener noreferrer"&gt;https://gofastmcp.com/clients/tools&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Public test endpoint: &lt;a href="https://webaz.xyz/mcp/shopping-v1" rel="noopener noreferrer"&gt;https://webaz.xyz/mcp/shopping-v1&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>opensource</category>
      <category>webdev</category>
      <category>mcp</category>
    </item>
    <item>
      <title>A 5-Minute Grok Commerce Experiment with a Custom MCP</title>
      <dc:creator>WebAZ</dc:creator>
      <pubDate>Thu, 27 Aug 2026 11:08:10 +0000</pubDate>
      <link>https://dev.to/seasonkoh/a-5-minute-grok-commerce-experiment-with-a-custom-mcp-2jmk</link>
      <guid>https://dev.to/seasonkoh/a-5-minute-grok-commerce-experiment-with-a-custom-mcp-2jmk</guid>
      <description>&lt;p&gt;This is a reproducible experiment, not a concept mockup. Add WebAZ to your own Grok account and test whether Grok can turn buying intent into structured product discovery and comparison.&lt;/p&gt;

&lt;p&gt;WebAZ is not currently listed in xAI's preconfigured Connector Catalog, so installation uses Grok's &lt;strong&gt;Custom MCP&lt;/strong&gt; option.&lt;/p&gt;

&lt;h2&gt;
  
  
  Before You Start
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Use a Grok account with access to Connectors.&lt;/li&gt;
&lt;li&gt;Open &lt;a href="https://grok.com/connectors" rel="noopener noreferrer"&gt;https://grok.com/connectors&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;The public-search experiment does not require a WebAZ account.&lt;/li&gt;
&lt;li&gt;Never paste a password, API key, wallet seed phrase or other secret into a connector URL or chat.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Experiment A: Public Product Search
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Add the Connector
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Click &lt;strong&gt;New Connector&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Select &lt;strong&gt;Custom&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Name: &lt;code&gt;WebAZ Shopping&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;MCP URL: &lt;code&gt;https://webaz.xyz/mcp/shopping-v1&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Save and enable it.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Run the Test
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;Use WebAZ Shopping to find tissue under 15 USDC. Compare price, delivery time and return terms.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Expected Result
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Grok invokes &lt;code&gt;WebAZ Shopping Search&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;It returns structured product cards rather than a generic list of links.&lt;/li&gt;
&lt;li&gt;Results may include current WebAZ price, delivery, return and seller information.&lt;/li&gt;
&lt;li&gt;Missing facts should remain missing; Grok should not invent shipping fees, taxes, guarantees or seller confirmation.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  What This Does Not Do
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;No WebAZ account access&lt;/li&gt;
&lt;li&gt;No order creation&lt;/li&gt;
&lt;li&gt;No inventory reservation&lt;/li&gt;
&lt;li&gt;No payment&lt;/li&gt;
&lt;li&gt;No private account data&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Experiment B: Account Quote or Draft
&lt;/h2&gt;

&lt;p&gt;Add this only when you want account-authorized quote or draft functionality.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Click &lt;strong&gt;New Connector → Custom&lt;/strong&gt; again.&lt;/li&gt;
&lt;li&gt;Name: &lt;code&gt;WebAZ Shopping Account&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;MCP URL: &lt;code&gt;https://webaz.xyz/mcp/grok-v1&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Complete WebAZ OAuth when prompted.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;An OAuth prompt or HTTP &lt;code&gt;401&lt;/code&gt; before authorization is expected security behavior.&lt;/p&gt;

&lt;p&gt;Test with a bounded instruction:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Use WebAZ Shopping Account to prepare a quote for the selected item. Do not place an order or pay. Show the exact item, seller, price, delivery and return terms for my review.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;A quote or draft is not a completed transaction. Any real commitment should remain subject to explicit human confirmation.&lt;/p&gt;

&lt;h2&gt;
  
  
  Business and Enterprise
&lt;/h2&gt;

&lt;p&gt;A team administrator provisions the connector in xAI Cloud Console under &lt;strong&gt;Grok Business → Connectors → + Add Connector → Other&lt;/strong&gt;. Team members can use it after provisioning, but each member must complete their own OAuth for account features.&lt;/p&gt;

&lt;h2&gt;
  
  
  Current Availability
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Grok supports user-added Custom MCP connectors.&lt;/li&gt;
&lt;li&gt;WebAZ public shopping initializes anonymously and is discovery-only.&lt;/li&gt;
&lt;li&gt;WebAZ account functionality is OAuth-protected.&lt;/li&gt;
&lt;li&gt;WebAZ is not currently in xAI's preconfigured Connector Catalog.&lt;/li&gt;
&lt;li&gt;xAI does not currently document a public self-service submission process for third-party catalog listing.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Sources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://docs.x.ai/grok/connectors" rel="noopener noreferrer"&gt;xAI Grok Connectors&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.x.ai/grok/connector-management" rel="noopener noreferrer"&gt;xAI Business / Enterprise Connector Management&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://webaz.xyz" rel="noopener noreferrer"&gt;WebAZ&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>ai</category>
      <category>tutorial</category>
      <category>opensource</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Before You Connect an AI Shopping Tool, Ask These Seven Questions</title>
      <dc:creator>WebAZ</dc:creator>
      <pubDate>Tue, 25 Aug 2026 15:15:15 +0000</pubDate>
      <link>https://dev.to/seasonkoh/before-you-connect-an-ai-shopping-tool-ask-these-seven-questions-5gil</link>
      <guid>https://dev.to/seasonkoh/before-you-connect-an-ai-shopping-tool-ask-these-seven-questions-5gil</guid>
      <description>&lt;p&gt;Installing an AI connector is easy. Deciding whether it deserves authority is harder.&lt;/p&gt;

&lt;p&gt;The usual installation guide answers technical questions: Which URL do I enter? Which package do I run? Which client is supported?&lt;/p&gt;

&lt;p&gt;A useful trust guide should answer a different set of questions:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;What can the AI access before I sign in?&lt;/li&gt;
&lt;li&gt;Which actions can change real state?&lt;/li&gt;
&lt;li&gt;Which actions still require a person?&lt;/li&gt;
&lt;li&gt;What happens to payment?&lt;/li&gt;
&lt;li&gt;What evidence survives after the tool acts?&lt;/li&gt;
&lt;li&gt;Which safety claims can be independently checked?&lt;/li&gt;
&lt;li&gt;What is still unknown or unfinished?&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;I am using WebAZ as the concrete example below, but the checklist applies to any MCP server or AI-commerce connector.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Can I test useful behavior without creating an account?
&lt;/h2&gt;

&lt;p&gt;A connector should not demand maximum trust before demonstrating minimum usefulness.&lt;/p&gt;

&lt;p&gt;WebAZ exposes a discovery-only shopping MCP endpoint:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;https://webaz.xyz/mcp/shopping-v1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It can search the reviewed public product surface. It cannot create an order, reserve stock, charge a payment method, move funds, accept terms, or read private account data.&lt;/p&gt;

&lt;p&gt;That makes the first evaluation reversible: connect, inspect product data, and decide whether the result is useful before registering.&lt;/p&gt;

&lt;p&gt;The broader Remote MCP endpoint is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;https://webaz.xyz/mcp
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For MCP clients that use local STDIO configuration, the current public bridge is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx &lt;span class="nt"&gt;-y&lt;/span&gt; @seasonkoh/webaz@latest
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The package is a thin bridge to the live service. It is not a local copy of the private WebAZ production core.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Does the interface separate reading from acting?
&lt;/h2&gt;

&lt;p&gt;“The AI has tools” is not a permission model.&lt;/p&gt;

&lt;p&gt;A safer surface distinguishes at least four levels:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;read public facts;&lt;/li&gt;
&lt;li&gt;prepare a reversible draft;&lt;/li&gt;
&lt;li&gt;request a consequential action;&lt;/li&gt;
&lt;li&gt;commit or settle with accountable authorization.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;On WebAZ, anonymous access is for public reads. Authenticated capabilities depend on the selected surface and granted authorization. Selected higher-risk actions return a browser approval URL rather than silently treating the model's request as the person's consent.&lt;/p&gt;

&lt;p&gt;This distinction matters more than a generic instruction such as “please ask before buying.” Capability boundaries should exist in the interface, not only in the prompt.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Why does registration use an invitation and Passkey?
&lt;/h2&gt;

&lt;p&gt;Browsing does not require an invitation. Account creation currently does.&lt;/p&gt;

&lt;p&gt;WebAZ uses invitations as an anti-abuse and Sybil-resistance control while the live network is actively developed. It is an account-integrity control, not a launch-status label or an investment-style scarcity mechanism.&lt;/p&gt;

&lt;p&gt;A Passkey binds the account to an accountable human and is retained as a confirmation boundary for selected consequential actions. It does not make every transaction safe, and it does not verify that a seller's off-platform payment instructions are correct. It establishes who approved an action; it does not replace due diligence.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Where does the money go?
&lt;/h2&gt;

&lt;p&gt;The word “payment” is too broad to describe custody.&lt;/p&gt;

&lt;p&gt;WebAZ currently has two real rails with different models.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Direct Pay&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The buyer pays the seller directly off-platform. WebAZ records the payment-information snapshot, acknowledgements, order state, and evidence. WebAZ does not hold the principal, verify the payee or payment method, guarantee payment or delivery, or issue the seller's refund.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;USDC on-chain escrow&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Eligible orders can lock real USDC in an immutable contract on Base mainnet. Contract exits are limited to the original buyer, the voucher-bound seller, or the configured fee destination, and per-order caps are enforced on-chain.&lt;/p&gt;

&lt;p&gt;The contract has not had a third-party security audit. That limitation belongs in the main explanation, not in fine print.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. What remains after the AI acts?
&lt;/h2&gt;

&lt;p&gt;An agent response is not a transaction record.&lt;/p&gt;

&lt;p&gt;For a real workflow, the system should preserve the product and payment information that was accepted, the order state, relevant acknowledgements, evidence, and the transition that occurred. Without that trail, a convincing conversation can still leave the buyer and seller unable to explain what happened.&lt;/p&gt;

&lt;p&gt;WebAZ is designed around explicit order states and evidence rather than treating the chat transcript as the source of truth.&lt;/p&gt;

&lt;h2&gt;
  
  
  6. Can the current claims be checked without trusting a social post?
&lt;/h2&gt;

&lt;p&gt;The strongest source should be current and machine-readable.&lt;/p&gt;

&lt;p&gt;WebAZ publishes its live protocol facts here:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;https://webaz.xyz/.well-known/webaz-protocol.json
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The document reports the current software version, MCP endpoints, authentication model, network phase, payment disclosures, and links to additional capability and integration documents.&lt;/p&gt;

&lt;p&gt;The official npm registry currently reports &lt;code&gt;@seasonkoh/webaz&lt;/code&gt; version &lt;code&gt;0.1.36&lt;/code&gt;. Search snippets may lag behind registry changes, so the registry and the live protocol document are better version sources than an old directory page.&lt;/p&gt;

&lt;h2&gt;
  
  
  7. What should still make me cautious?
&lt;/h2&gt;

&lt;p&gt;Trustworthy documentation should make refusal possible.&lt;/p&gt;

&lt;p&gt;For WebAZ, the important limits include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;registration remains invite-gated;&lt;/li&gt;
&lt;li&gt;additional payment methods are still being added;&lt;/li&gt;
&lt;li&gt;Direct Pay occurs off-platform and the payee or method is not verified by WebAZ;&lt;/li&gt;
&lt;li&gt;WebAZ does not guarantee payment, delivery, or seller refunds;&lt;/li&gt;
&lt;li&gt;the USDC contract is live but has not had a third-party security audit;&lt;/li&gt;
&lt;li&gt;the public npm package is a bridge, not public access to the private production core;&lt;/li&gt;
&lt;li&gt;a manual MCP connection is not the same as an official app-directory listing.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Those statements do not weaken the trust story. They are the trust story.&lt;/p&gt;

&lt;h2&gt;
  
  
  A low-risk first test
&lt;/h2&gt;

&lt;p&gt;Start with public discovery and ask the AI to separate facts from unknowns:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Search WebAZ for products relevant to my request. Show price, stock, delivery, returns, seller context, and every warning or missing field. Do not create an order or assume compatibility.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Use the Agent Commerce Lab for current client setup:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://webaz.xyz/ai/" rel="noopener noreferrer"&gt;https://webaz.xyz/ai/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The first question is not whether an AI can click “buy.”&lt;/p&gt;

&lt;p&gt;It is whether the system makes authority, evidence, custody, and uncertainty visible before anyone does.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Current-status boundary, verified 2026-08-25:&lt;/strong&gt; WebAZ is publicly launched and actively developed. Direct Pay and eligible Base-mainnet USDC escrow are real payment rails with different custody models. WebAZ does not hold the principal on Direct Pay and does not verify the payee or payment method. The USDC contract has not had a third-party security audit. Public shopping discovery does not create orders or move funds.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>mcp</category>
      <category>ecommerce</category>
    </item>
    <item>
      <title>The Second Click Is the Real Test of an AI Shopping Plugin</title>
      <dc:creator>WebAZ</dc:creator>
      <pubDate>Tue, 25 Aug 2026 02:34:31 +0000</pubDate>
      <link>https://dev.to/seasonkoh/the-second-click-is-the-real-test-of-an-ai-shopping-plugin-7d</link>
      <guid>https://dev.to/seasonkoh/the-second-click-is-the-real-test-of-an-ai-shopping-plugin-7d</guid>
      <description>&lt;p&gt;The first successful search is the easiest part of an AI shopping demo.&lt;/p&gt;

&lt;p&gt;A user asks for a product, the model calls a tool, and a polished result card appears. That proves the happy path can work once. It does not yet prove that the integration can survive ordinary use.&lt;/p&gt;

&lt;p&gt;The more revealing test is the second click.&lt;/p&gt;

&lt;p&gt;Can the shopper open the same product again? Can they move between products without an earlier interaction suppressing the next one? What happens when a direct tool response and a matching result notification arrive in different orders? Does the detail view stay in the shopper's language?&lt;/p&gt;

&lt;p&gt;Those questions shaped the latest WebAZ Shopping review build.&lt;/p&gt;

&lt;h2&gt;
  
  
  One interaction, one settlement
&lt;/h2&gt;

&lt;p&gt;Interactive tool surfaces often receive the same logical result through more than one path. A direct response may arrive first, or a matching tool-result notification may arrive first.&lt;/p&gt;

&lt;p&gt;If each path has its own timeout and success logic, the UI can briefly show a failure even though a valid result has already arrived. It can also render the same outcome twice or leave an interaction in an ambiguous state.&lt;/p&gt;

&lt;p&gt;The safer model is to give each detail request one lifecycle and one deadline:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;both valid arrival orders converge on the same settlement path;&lt;/li&gt;
&lt;li&gt;duplicate suppression means "still pending," not success or failure;&lt;/li&gt;
&lt;li&gt;the first matching success settles the interaction once;&lt;/li&gt;
&lt;li&gt;a timeout remains an honest failure when no matching success arrives.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This sounds small, but it is the difference between a demo animation and a state machine that a user can rely on.&lt;/p&gt;

&lt;h2&gt;
  
  
  Repetition is part of the contract
&lt;/h2&gt;

&lt;p&gt;A product-detail action is not globally unique. A shopper may inspect a product, compare another one, and return to the first. Deduplication that outlives one interaction turns a valid second click into a silent no-op.&lt;/p&gt;

&lt;p&gt;The scope of deduplication therefore has to match the scope of the user action. Replays inside one interaction should be suppressed. A later, deliberate interaction should be allowed to run normally.&lt;/p&gt;

&lt;p&gt;This principle applies beyond shopping. Idempotency protects a system from accidental replay, but it should not erase a new user intention.&lt;/p&gt;

&lt;h2&gt;
  
  
  Localization has to survive the tool boundary
&lt;/h2&gt;

&lt;p&gt;A multilingual conversation can still produce a detail view in the wrong language if locale context is lost between search results, tool metadata, and the rendered component.&lt;/p&gt;

&lt;p&gt;Keeping product details in the shopper's locale is more than a presentation preference. Shipping terms, return conditions, stock notes, and unknown fields are decision-relevant information. A language fallback can change whether the user understands the limits of the result.&lt;/p&gt;

&lt;h2&gt;
  
  
  Keep the first public surface narrow
&lt;/h2&gt;

&lt;p&gt;The reviewed WebAZ Shopping endpoint is intentionally discovery-only. It exposes one public &lt;code&gt;webaz_search&lt;/code&gt; tool for product search and comparison.&lt;/p&gt;

&lt;p&gt;It does not provide login, account access, ordering, payment, credentials, or private data.&lt;/p&gt;

&lt;p&gt;That boundary lets us test the read-only experience before attaching consequential actions. A shopping integration should first demonstrate that it can return repeatable, localized, decision-ready information. Preparation, commitment, and settlement can then be added behind their own explicit authority boundaries.&lt;/p&gt;

&lt;h2&gt;
  
  
  What this build proves, and what it does not
&lt;/h2&gt;

&lt;p&gt;The current review build demonstrates a more reliable product-discovery interaction:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;repeated detail clicks work as new interactions;&lt;/li&gt;
&lt;li&gt;asynchronous result paths converge on one outcome;&lt;/li&gt;
&lt;li&gt;timeouts remain explicit;&lt;/li&gt;
&lt;li&gt;product details preserve shopper locale;&lt;/li&gt;
&lt;li&gt;the public tool surface remains discovery-only.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It does not mean that a new ChatGPT plugin version has been approved or published. The build and demo are prepared for the review process; approval and publication are separate steps.&lt;/p&gt;

&lt;p&gt;You can watch the current 55-second production demo here:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://webaz.xyz/plugin-review/webaz-shopping-demo.mp4" rel="noopener noreferrer"&gt;https://webaz.xyz/plugin-review/webaz-shopping-demo.mp4&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For teams building AI commerce interfaces, the practical question is simple: after the first impressive result, what does your second click reveal about the system?&lt;/p&gt;

</description>
      <category>ai</category>
      <category>product</category>
      <category>software</category>
    </item>
    <item>
      <title>One Commerce Protocol, Two Interfaces: PWA for Humans and MCP for Agents</title>
      <dc:creator>WebAZ</dc:creator>
      <pubDate>Mon, 24 Aug 2026 01:21:22 +0000</pubDate>
      <link>https://dev.to/seasonkoh/one-commerce-protocol-two-interfaces-pwa-for-humans-and-mcp-for-agents-4fme</link>
      <guid>https://dev.to/seasonkoh/one-commerce-protocol-two-interfaces-pwa-for-humans-and-mcp-for-agents-4fme</guid>
      <description>&lt;p&gt;When a product adds an agent interface, it is tempting to treat it as a second application: the web interface is for people, while a collection of tools is for AI.&lt;/p&gt;

&lt;p&gt;That split is convenient at the UI layer. It becomes dangerous when it reaches the transaction model.&lt;/p&gt;

&lt;p&gt;If the human interface and the agent interface use different order states, permission rules or definitions of completion, the system develops two versions of commercial reality. A person may see a pending request while an agent reports a completed action. A step that requires human confirmation in the web app may become an unreviewed shortcut in the agent API. When something fails, neither side can explain the same outcome.&lt;/p&gt;

&lt;p&gt;The safer design is two interfaces over one protocol.&lt;/p&gt;

&lt;h2&gt;
  
  
  Different strengths, shared state
&lt;/h2&gt;

&lt;p&gt;A PWA and an MCP server should not be identical. They serve different operators.&lt;/p&gt;

&lt;p&gt;A human interface is good at displaying terms, collecting deliberate approval, managing identity and helping a person inspect an exception. An agent interface is good at structured discovery, comparison, repetitive preparation and following explicit machine-readable contracts.&lt;/p&gt;

&lt;p&gt;The interfaces can divide work without dividing truth:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Human PWA                         Agent MCP
---------                         ---------
inspect terms                     read structured facts
manage identity                   search and compare
review a proposed action          prepare a request
perform Passkey approval          receive the resulting state
inspect exceptions                continue from explicit outcomes
              \                 /
               one state machine
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The important property is not visual consistency. It is behavioral consistency. Both interfaces should agree on the entity being acted on, the current state, the allowed transition and the evidence produced by that transition.&lt;/p&gt;

&lt;h2&gt;
  
  
  Permissions should describe actions
&lt;/h2&gt;

&lt;p&gt;Possession of a credential should not silently mean permission to perform every write.&lt;/p&gt;

&lt;p&gt;WebAZ publishes a capability matrix in which authenticated agent writes map to named action scopes. Undeclared writes are denied by default. This makes authorization part of the integration contract instead of an assumption hidden in client code.&lt;/p&gt;

&lt;p&gt;Conceptually, an agent declaration can say:&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="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"allowed_actions"&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="s2"&gt;"search"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="s2"&gt;"place_order"&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;The exact set is less important than the principle: permission should name the action and its boundary. A search capability does not imply permission to place an order. Permission to prepare an order does not imply permission to approve an irreversible step.&lt;/p&gt;

&lt;h2&gt;
  
  
  Preparation is not consent
&lt;/h2&gt;

&lt;p&gt;Agent workflows become easier to reason about when actions are separated by reversibility:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Read:&lt;/strong&gt; inspect public or party-authorized state.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Prepare:&lt;/strong&gt; search, compare, quote or assemble a request.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Commit:&lt;/strong&gt; create a commercial obligation or change accountable state.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Settle:&lt;/strong&gt; move value or finalize an irreversible outcome.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;An agent can be very useful at the first two levels. Moving from preparation to commitment should require a visible rule, not a vague instruction such as "buy the best one."&lt;/p&gt;

&lt;p&gt;In WebAZ, risk actions return an approval URL. The human completes the required Passkey ceremony in a browser surface. The agent can prepare the action and continue after the protocol reports the result, but it does not impersonate the person during the approval.&lt;/p&gt;

&lt;p&gt;Some actions are covered by an iron rule: no declared scope overrides the requirement for live human presence. This is a protocol property, not a preference left to each agent client.&lt;/p&gt;

&lt;h2&gt;
  
  
  A discovery-only surface is still useful
&lt;/h2&gt;

&lt;p&gt;Not every MCP endpoint needs a path to checkout.&lt;/p&gt;

&lt;p&gt;WebAZ's reviewed &lt;code&gt;shopping-v1&lt;/code&gt; surface is deliberately discovery-only. It exposes one search tool for reviewed active listings and cannot create orders or move funds. That smaller surface lets buyers and builders evaluate whether an agent can represent product facts and unknowns honestly before introducing consequential actions.&lt;/p&gt;

&lt;p&gt;This is a useful deployment pattern:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;start with a narrow read surface;&lt;/li&gt;
&lt;li&gt;evaluate outputs against the human-visible record;&lt;/li&gt;
&lt;li&gt;add preparation actions with explicit states;&lt;/li&gt;
&lt;li&gt;add commitment only when identity, permission and recovery are defined;&lt;/li&gt;
&lt;li&gt;keep human-presence requirements outside the agent's ability to bypass.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  An integration checklist
&lt;/h2&gt;

&lt;p&gt;Before adding an agent interface to a commerce system, ask:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Do the web app and the agent read the same product and order identifiers?&lt;/li&gt;
&lt;li&gt;Can both interfaces name the same current state?&lt;/li&gt;
&lt;li&gt;Is each agent write mapped to an explicit scope?&lt;/li&gt;
&lt;li&gt;Are undeclared writes rejected?&lt;/li&gt;
&lt;li&gt;Are preparation and commitment separate transitions?&lt;/li&gt;
&lt;li&gt;Does human approval happen on a surface the person can inspect?&lt;/li&gt;
&lt;li&gt;Can an agent resume from the confirmed result instead of guessing whether an action succeeded?&lt;/li&gt;
&lt;li&gt;Can both interfaces produce the same audit trail when an operation fails?&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If the answers differ by interface, the problem is not just API design. It is a split transaction model.&lt;/p&gt;

&lt;h2&gt;
  
  
  One protocol is the product
&lt;/h2&gt;

&lt;p&gt;Agent-native commerce should not mean maintaining an AI shortcut beside the real system. It should mean exposing the real system through another interface while preserving the rules that make its outcomes understandable.&lt;/p&gt;

&lt;p&gt;WebAZ publishes the current integration contract, capability matrix and negative-space rules as machine-readable documents:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://webaz.xyz/.well-known/webaz-integration.json" rel="noopener noreferrer"&gt;https://webaz.xyz/.well-known/webaz-integration.json&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://webaz.xyz/.well-known/webaz-capabilities.json" rel="noopener noreferrer"&gt;https://webaz.xyz/.well-known/webaz-capabilities.json&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://webaz.xyz/.well-known/webaz-negative-space.json" rel="noopener noreferrer"&gt;https://webaz.xyz/.well-known/webaz-negative-space.json&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The PWA and MCP do different jobs. The protocol remains one.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>security</category>
      <category>webdev</category>
      <category>opensource</category>
    </item>
    <item>
      <title>The Most Important Output of a Shopping Agent May Be `unknown`</title>
      <dc:creator>WebAZ</dc:creator>
      <pubDate>Sun, 23 Aug 2026 06:58:46 +0000</pubDate>
      <link>https://dev.to/seasonkoh/the-most-important-output-of-a-shopping-agent-may-be-unknown-56me</link>
      <guid>https://dev.to/seasonkoh/the-most-important-output-of-a-shopping-agent-may-be-unknown-56me</guid>
      <description>&lt;p&gt;A shopping agent that always returns a complete answer is not necessarily useful. In commerce, completeness can be a warning sign.&lt;/p&gt;

&lt;p&gt;Product pages are uneven. A listing may state price, stock, return terms, handling time and a delivery estimate while omitting exact dimensions, compatibility, maximum load or included accessories. A human buyer usually notices the gap and asks a follow-up question. A language model may instead complete the pattern from similar products and present the inferred value with the same confidence as a seller-declared fact.&lt;/p&gt;

&lt;p&gt;The difficult part of AI commerce is therefore not only retrieval. It is preserving provenance and uncertainty through the entire decision process.&lt;/p&gt;

&lt;h2&gt;
  
  
  Three classes of product facts
&lt;/h2&gt;

&lt;p&gt;An agent-facing product record should distinguish at least three classes:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Declared facts&lt;/strong&gt;: values supplied by the seller or another accountable source.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Derived facts&lt;/strong&gt;: values calculated from declared inputs through a visible rule.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Unknown facts&lt;/strong&gt;: values that are absent, ambiguous, stale or unsupported.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;These classes should not collapse into one polished description. A field that is absent should remain absent. A derived estimate should identify its inputs. A seller statement should not silently become a platform guarantee.&lt;/p&gt;

&lt;p&gt;An illustrative response shape could look like this:&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="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"item"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Metal Laptop Cooling Stand"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"declared"&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;"price"&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;"amount"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;18.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;"currency"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"USDC"&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;"availability"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"in_stock"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"return_window_days"&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;"handling_time_hours"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;72&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"delivery_estimate_days"&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;"SG"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;12&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"default"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;18&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;"decision_flags"&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="s2"&gt;"new_seller"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="s2"&gt;"no_sales_history"&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;"unknown"&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="s2"&gt;"exact_dimensions"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="s2"&gt;"weight"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="s2"&gt;"supported_laptop_size_range"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="s2"&gt;"maximum_load"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="s2"&gt;"included_parts"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="s2"&gt;"material_thickness"&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;"checked_at"&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-08-23"&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;This is an explanatory shape rather than a claim that every commerce platform uses the same schema. The useful property is the separation itself.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why a string like &lt;code&gt;unknown&lt;/code&gt; is not enough
&lt;/h2&gt;

&lt;p&gt;Production systems usually need more than a null value. The reason a field is unknown affects what the agent should do next.&lt;/p&gt;

&lt;p&gt;For example:&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="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"field"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"maximum_load"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"state"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"unknown"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"reason"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"not_declared_by_seller"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"next_action"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"ask_seller"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"blocks"&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;"compatibility_recommendation"&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;Other reasons might include &lt;code&gt;stale_value&lt;/code&gt;, &lt;code&gt;conflicting_sources&lt;/code&gt;, &lt;code&gt;not_applicable&lt;/code&gt;, or &lt;code&gt;outside_sale_region&lt;/code&gt;. These states lead to different behavior. A stale price may require refresh. Conflicting dimensions may require evidence review. An undeclared compatibility claim should block a recommendation rather than invite a guess.&lt;/p&gt;

&lt;h2&gt;
  
  
  Decision flags are not verdicts
&lt;/h2&gt;

&lt;p&gt;Risk indicators need the same care. A new seller or a seller with no sales history is not automatically untrustworthy. Those are decision flags: facts a buyer may want to weigh, not accusations generated by the platform.&lt;/p&gt;

&lt;p&gt;The agent should surface the flag, explain its source and allow the buyer to choose. It should not convert a sparse history into a fabricated reputation score.&lt;/p&gt;

&lt;h2&gt;
  
  
  A public test surface
&lt;/h2&gt;

&lt;p&gt;WebAZ currently exposes a reviewed, discovery-only shopping surface at:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;https://webaz.xyz/mcp/shopping-v1&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;The surface exposes one search tool and cannot create orders or move funds. The WebAZ Agent Commerce Lab includes a known-versus-unknown prompt using the real reviewed laptop-stand listing described above.&lt;/p&gt;

&lt;p&gt;The prompt asks the agent to produce two lists:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;facts the listing actually states, with values;&lt;/li&gt;
&lt;li&gt;facts a careful buyer would want but the listing does not state.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For the second list, the agent must say &lt;code&gt;unknown&lt;/code&gt; and must not fill gaps with typical values for similar products.&lt;/p&gt;

&lt;p&gt;That constraint matters because it makes the failure visible. If an agent invents a screen-size range or maximum load, the output can be compared against the public listing and rejected.&lt;/p&gt;

&lt;h2&gt;
  
  
  A practical evaluation checklist
&lt;/h2&gt;

&lt;p&gt;When evaluating a shopping agent, test more than whether it found the product.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Does every price include a currency and a freshness signal?&lt;/li&gt;
&lt;li&gt;Does availability come from the current sellable variant rather than marketing text?&lt;/li&gt;
&lt;li&gt;Are handling time and delivery time kept separate?&lt;/li&gt;
&lt;li&gt;Are return terms represented as conditions rather than a vague "easy returns" claim?&lt;/li&gt;
&lt;li&gt;Can the agent list important missing fields without guessing?&lt;/li&gt;
&lt;li&gt;Does it distinguish seller statements from platform verification?&lt;/li&gt;
&lt;li&gt;Are decision flags shown as evidence for human judgment rather than automated verdicts?&lt;/li&gt;
&lt;li&gt;Does the workflow stop before an unsupported or irreversible action?&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This evaluation is useful even before a store supports agent checkout. It reveals product-data gaps that affect human buyers too.&lt;/p&gt;

&lt;h2&gt;
  
  
  Honest incompleteness is a capability
&lt;/h2&gt;

&lt;p&gt;AI commerce is often presented as a race toward fewer questions and faster checkout. That framing rewards confident completion, even when the underlying product record is incomplete.&lt;/p&gt;

&lt;p&gt;A safer goal is decision readiness. The agent should collect what is known, preserve where it came from, expose what remains unknown and identify the next responsible action. Sometimes that action is comparison. Sometimes it is asking the seller. Sometimes it is stopping.&lt;/p&gt;

&lt;p&gt;You can run the known-versus-unknown test on the discovery-only WebAZ Agent Commerce Lab:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://webaz.xyz/ai/" rel="noopener noreferrer"&gt;https://webaz.xyz/ai/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Ask it to separate seller-stated facts from missing details. The quality of the &lt;code&gt;unknown&lt;/code&gt; list may tell you more than the recommendation.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>ecommerce</category>
      <category>webdev</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Independent Stores Do Not Need a Second AI Store</title>
      <dc:creator>WebAZ</dc:creator>
      <pubDate>Sat, 22 Aug 2026 07:33:45 +0000</pubDate>
      <link>https://dev.to/seasonkoh/independent-stores-do-not-need-a-second-ai-store-196d</link>
      <guid>https://dev.to/seasonkoh/independent-stores-do-not-need-a-second-ai-store-196d</guid>
      <description>&lt;p&gt;When merchants hear that AI assistants may become a new shopping interface, the first reaction is often: do we need to build another storefront for agents?&lt;/p&gt;

&lt;p&gt;Usually, no.&lt;/p&gt;

&lt;p&gt;The more immediate problem is that the existing store rarely has one dependable product record that both a person and an agent can interpret in the same way.&lt;/p&gt;

&lt;p&gt;A human shopper can open several tabs, read the product description, inspect a variant selector, find the shipping FAQ, and ask support what a vague sentence means. An agent has to turn all of that into a structured decision. If the facts conflict or a detail is missing, the model may omit the problem or fill the gap with a plausible answer.&lt;/p&gt;

&lt;p&gt;That is not mainly a chatbot problem. It is a product-data and action-boundary problem.&lt;/p&gt;

&lt;h2&gt;
  
  
  One commercial truth, two interfaces
&lt;/h2&gt;

&lt;p&gt;An AI-ready store does not need two independently maintained catalogs. It needs one commercial source of truth that can be rendered for humans and exposed to agents.&lt;/p&gt;

&lt;p&gt;At minimum, that record should make these categories explicit:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Identity:&lt;/strong&gt; product, exact variant, SKU or merchant product identifier.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Current state:&lt;/strong&gt; whether the item is active and in stock now.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Commercial terms:&lt;/strong&gt; price, currency, sale region, and seller or payee reference.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fulfillment:&lt;/strong&gt; handling time and delivery estimate, kept separate.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Returns:&lt;/strong&gt; whether returns are accepted, the time window, and important conditions.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Evidence:&lt;/strong&gt; when the value was checked and which system supplied it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Unknowns:&lt;/strong&gt; details the merchant has not declared and the agent must not invent.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The last category is easy to underestimate. A record that says &lt;code&gt;unknown&lt;/code&gt; is often safer and more useful than a polished paragraph that lets a model infer the wrong compatibility, delivery date, warranty, or included accessory.&lt;/p&gt;

&lt;p&gt;Here is an illustrative audit shape, not a claim about a universal commerce standard:&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="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"item_id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"merchant-item-123"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"variant"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"black-128gb"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"availability"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"in_stock"&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="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"amount"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;49.00&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"currency"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"SGD"&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;"sale_regions"&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;"SG"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"handling_time"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2 business days"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"delivery_estimate"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"3-5 business days"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"returns"&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;"accepted"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"window_days"&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="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;"unknowns"&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="s2"&gt;"official warranty coverage"&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;"checked_at"&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-08-22T07:00:00Z"&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;The exact schema will differ by platform. The important design property is that the agent does not have to reverse-engineer a transaction from marketing prose.&lt;/p&gt;

&lt;h2&gt;
  
  
  Discovery is not checkout
&lt;/h2&gt;

&lt;p&gt;Making a product readable to an agent does not mean the agent should immediately be able to buy it.&lt;/p&gt;

&lt;p&gt;These are different capability levels:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Discover:&lt;/strong&gt; find products that match a request.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Compare:&lt;/strong&gt; explain differences, missing information, and risk flags.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Prepare:&lt;/strong&gt; build a quote, cart, or order request without creating an obligation.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Commit:&lt;/strong&gt; create the order or authorize payment through the required human and policy controls.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Settle and recover:&lt;/strong&gt; record what happened, reconcile unknown outcomes, and define who acts next.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;A store can become much more useful to AI at levels one and two without granting autonomous checkout. This is a practical migration path because it improves product clarity before introducing irreversible actions.&lt;/p&gt;

&lt;h2&gt;
  
  
  A live implementation boundary
&lt;/h2&gt;

&lt;p&gt;WebAZ is currently testing this separation in public.&lt;/p&gt;

&lt;p&gt;As checked on August 22, 2026, its public protocol document reports software version &lt;code&gt;0.1.35&lt;/code&gt; and schema version &lt;code&gt;37&lt;/code&gt;. The broad machine catalog at:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;https://webaz.xyz/.well-known/webaz-acp-feed.json&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;is explicitly described as an ACP-inspired discovery projection, not a strict ACP-ingestable merchant feed. It exposes product-level fields such as item identity, title, description, price, availability, seller, sale region, category, and return terms when available.&lt;/p&gt;

&lt;p&gt;WebAZ also exposes a smaller human-reviewed shopping surface at:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;https://webaz.xyz/mcp/shopping-v1&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;That endpoint is deliberately discovery-only. It lets an agent search reviewed, active, in-stock listings and return decision flags, but it cannot create an order or move funds.&lt;/p&gt;

&lt;p&gt;This boundary matters more than the size of the catalog. It creates a place to test whether agents can represent products honestly before asking them to perform consequential actions.&lt;/p&gt;

&lt;h2&gt;
  
  
  Audit one product page
&lt;/h2&gt;

&lt;p&gt;Pick one product from an existing store and ask:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Can a buyer and an agent identify the exact sellable variant?&lt;/li&gt;
&lt;li&gt;Are stock and price current, or only implied by page text?&lt;/li&gt;
&lt;li&gt;Is the sale or delivery region explicit?&lt;/li&gt;
&lt;li&gt;Are handling time and delivery time separated?&lt;/li&gt;
&lt;li&gt;Are return terms machine-readable or buried in a generic policy page?&lt;/li&gt;
&lt;li&gt;Does the page distinguish merchant-declared facts from assumptions?&lt;/li&gt;
&lt;li&gt;Would a human page and an agent response show the same commercial terms?&lt;/li&gt;
&lt;li&gt;If a value changes, can both interfaces identify the newer record?&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The goal is not to make the page longer. The goal is to make the same commercial truth available through a human interface and a machine interface.&lt;/p&gt;

&lt;h2&gt;
  
  
  Start with legibility
&lt;/h2&gt;

&lt;p&gt;AI-ready commerce is often framed as an autonomous-checkout race. That skips the more basic work.&lt;/p&gt;

&lt;p&gt;Before an agent can transact responsibly, it has to know what is being sold, by whom, under which terms, which facts are current, and which facts are missing. A separate AI storefront can hide those problems behind another interface. A shared product record exposes and improves them.&lt;/p&gt;

&lt;p&gt;You can test the discovery-only WebAZ Agent Commerce Lab here:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://webaz.xyz/ai/" rel="noopener noreferrer"&gt;https://webaz.xyz/ai/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Try one real shopping request, then inspect which facts are explicit and which questions still require the merchant or buyer.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>ai</category>
      <category>ecommerce</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Connect Your AI to a Real Store, But Do Not Let It Buy Yet</title>
      <dc:creator>WebAZ</dc:creator>
      <pubDate>Fri, 21 Aug 2026 05:56:20 +0000</pubDate>
      <link>https://dev.to/seasonkoh/connect-your-ai-to-a-real-store-but-do-not-let-it-buy-yet-dek</link>
      <guid>https://dev.to/seasonkoh/connect-your-ai-to-a-real-store-but-do-not-let-it-buy-yet-dek</guid>
      <description>&lt;p&gt;Most AI-commerce demos race toward the most dramatic moment: the agent clicks &lt;strong&gt;Buy&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;That is probably the wrong first milestone.&lt;/p&gt;

&lt;p&gt;Before an AI should create an order, it needs to demonstrate something less exciting and more important: it can inspect a real store without inventing facts or assuming authority it does not have.&lt;/p&gt;

&lt;h2&gt;
  
  
  The first test is not checkout
&lt;/h2&gt;

&lt;p&gt;A useful shopping agent should be able to answer questions such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Did it find the exact product or merely a similar title?&lt;/li&gt;
&lt;li&gt;Is the product currently in stock?&lt;/li&gt;
&lt;li&gt;What delivery estimate did the seller actually state for this destination?&lt;/li&gt;
&lt;li&gt;What are the return and handling terms?&lt;/li&gt;
&lt;li&gt;Which important details are missing?&lt;/li&gt;
&lt;li&gt;Is the seller new or missing transaction history?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The agent should expose those facts before it asks for permission to do anything consequential.&lt;/p&gt;

&lt;p&gt;This leads to a clean initial architecture: create a discovery surface that has enough real commerce context to support a decision, but no capability to create an order or move money.&lt;/p&gt;

&lt;h2&gt;
  
  
  A deliberately narrow MCP surface
&lt;/h2&gt;

&lt;p&gt;WebAZ now exposes a live shopping MCP endpoint:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;https://webaz.xyz/mcp/shopping-v1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It requires no login and exposes exactly one tool: &lt;code&gt;webaz_search&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;The surface is limited to reviewed, active, in-stock physical products. A search can return product price, stock status, delivery estimate, return window, handling time, public seller context, and explicit decision flags.&lt;/p&gt;

&lt;p&gt;It cannot:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;create an order;&lt;/li&gt;
&lt;li&gt;reserve stock;&lt;/li&gt;
&lt;li&gt;charge a payment method;&lt;/li&gt;
&lt;li&gt;move funds;&lt;/li&gt;
&lt;li&gt;accept terms for a user; or&lt;/li&gt;
&lt;li&gt;access private account data.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is not a temporary omission. It is the point of the surface.&lt;/p&gt;

&lt;h2&gt;
  
  
  A live query
&lt;/h2&gt;

&lt;p&gt;On August 21, 2026, I queried the public tool for &lt;code&gt;phone stand&lt;/code&gt; products that could ship to Singapore.&lt;/p&gt;

&lt;p&gt;The tool returned three current matches. The displayed price range was 2 to 16.1 USDC. All three were in stock and showed seven-day returns. Their stated handling times ranged from 48 to 72 hours, with an approximately 12-day seller-provided delivery estimate for Singapore.&lt;/p&gt;

&lt;p&gt;The results also included decision flags. All three indicated a new seller; two indicated no sales history.&lt;/p&gt;

&lt;p&gt;Those flags are more important than they may appear. Product discovery systems are often optimized to return something plausible. A decision-support system should instead make uncertainty and weak evidence visible.&lt;/p&gt;

&lt;p&gt;The query result is not an order, reservation, settlement quote, or recommendation. Products and terms can change. It is a dated snapshot of what the reviewed catalog stated at query time.&lt;/p&gt;

&lt;h2&gt;
  
  
  The human boundary comes later
&lt;/h2&gt;

&lt;p&gt;Discovery-only does not mean agents can never participate in a transaction.&lt;/p&gt;

&lt;p&gt;On the authenticated WebAZ surface, an agent can move through reversible preparation steps:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;search → quote → draft → submit order request
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Execution stops there. A human Passkey approval is required before the order exists.&lt;/p&gt;

&lt;p&gt;That separates two very different questions:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Can the agent prepare a decision?&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Who has authority to create the real obligation?&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The public shopping endpoint answers the first question without quietly granting the second.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why this matters for three audiences
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Buyers
&lt;/h3&gt;

&lt;p&gt;The agent can organize current facts and unknowns before the buyer decides whether to continue. It cannot turn a recommendation into a purchase behind the user's back.&lt;/p&gt;

&lt;h3&gt;
  
  
  Independent sellers
&lt;/h3&gt;

&lt;p&gt;The same query becomes a store-readiness test. If an agent cannot explain stock, delivery, returns, variants, and warnings accurately, the problem may be missing or ambiguous catalog data rather than the AI model.&lt;/p&gt;

&lt;h3&gt;
  
  
  Agent builders
&lt;/h3&gt;

&lt;p&gt;The interface keeps the public tool surface small. There is no need to rely on a prompt such as “please do not buy anything.” The capability simply is not present.&lt;/p&gt;

&lt;p&gt;That is a stronger boundary than model behavior alone.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try the test
&lt;/h2&gt;

&lt;p&gt;The live Agent Commerce Lab includes setup instructions for ChatGPT, Claude, Codex, and Cursor:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://webaz.xyz/ai/" rel="noopener noreferrer"&gt;https://webaz.xyz/ai/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;One prompt to try:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Find phone stands that ship to Singapore. Compare price, stock, delivery ETA, returns, handling time, and every decision flag. Separate facts the listing states from facts that are missing. Do not assume compatibility unless the listing states it.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The interesting result is not whether the agent produces a confident recommendation.&lt;/p&gt;

&lt;p&gt;It is whether the agent knows where confidence should stop.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Boundary:&lt;/strong&gt; The public WebAZ shopping MCP is discovery-only. It does not create orders, charge, reserve inventory, move funds, or accept terms. Product availability and seller-stated terms can change.&lt;/p&gt;

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