<?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: Ricardo Cuba</title>
    <description>The latest articles on DEV Community by Ricardo Cuba (@ricardo_cuba).</description>
    <link>https://dev.to/ricardo_cuba</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3923961%2F08670c7b-77ea-4739-8461-7f7bd3e804a4.jpeg</url>
      <title>DEV Community: Ricardo Cuba</title>
      <link>https://dev.to/ricardo_cuba</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/ricardo_cuba"/>
    <language>en</language>
    <item>
      <title>Add Commerce to Your AI Agent in 4 Lines</title>
      <dc:creator>Ricardo Cuba</dc:creator>
      <pubDate>Tue, 09 Jun 2026 15:05:42 +0000</pubDate>
      <link>https://dev.to/ricardo_cuba/add-commerce-to-your-ai-agent-in-4-lines-1gad</link>
      <guid>https://dev.to/ricardo_cuba/add-commerce-to-your-ai-agent-in-4-lines-1gad</guid>
      <description>&lt;p&gt;&lt;strong&gt;4 commands. 38 retailers. 8 countries. Your agent just learned how to shop.&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  The problem
&lt;/h2&gt;

&lt;p&gt;You're building an AI agent. It can search the web, reason about complex topics, generate code. But when it needs to answer a simple question like &lt;em&gt;"how much does rice cost in Lima today?"&lt;/em&gt; — it hits a wall.&lt;/p&gt;

&lt;p&gt;Not because it's dumb. Because every retailer has a different API, auth mechanism, schema, and checkout flow. There's no Stripe for commerce data.&lt;/p&gt;

&lt;p&gt;Until now.&lt;/p&gt;




&lt;h2&gt;
  
  
  4 lines. That's it.
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# 1. Install&lt;/span&gt;
pip &lt;span class="nb"&gt;install &lt;/span&gt;cli-market-world

&lt;span class="c"&gt;# 2. Guided first search + interactive tutorial&lt;/span&gt;
market init           &lt;span class="c"&gt;# login + first query&lt;/span&gt;
market tutorial       &lt;span class="c"&gt;# 3 exercises: search, compare, export — 60 seconds&lt;/span&gt;

&lt;span class="c"&gt;# 3. Search — your agent just queried 38 retailers in &amp;lt;1s&lt;/span&gt;
market search &lt;span class="s2"&gt;"leche"&lt;/span&gt; &lt;span class="nt"&gt;--country&lt;/span&gt; PE &lt;span class="nt"&gt;--json&lt;/span&gt;

&lt;span class="c"&gt;# 4. Connect to your AI agent via MCP&lt;/span&gt;
&lt;span class="c"&gt;# Add to Cursor / Codex/ Claude / any MCP client:&lt;/span&gt;
&lt;span class="c"&gt;# → https://cli-market.dev/tools?utm_source=devto&amp;amp;utm_campaign=spike-jun10&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That's the entire integration. No API keys per retailer. No HTML scraping. No schema mapping.&lt;/p&gt;




&lt;h2&gt;
  
  
  What happens under the hood
&lt;/h2&gt;

&lt;p&gt;When your agent runs market search "rice" --country PE --json, CLI Market:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Normalizes the query — "arroz", "rice", "arroz blanco" all map to the same product&lt;/li&gt;
&lt;li&gt;Queries our collector — 38 active retailers, refreshed every 4 hours&lt;/li&gt;
&lt;li&gt;Returns structured JSON — price per kg/L, store name, country, timestamp&lt;/li&gt;
&lt;li&gt;Handles auth — one CLI Market token, not 38 retailer tokens.&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  What it looks like in your terminal:
&lt;/h2&gt;

&lt;p&gt;CLI Market terminal output — 60 seconds, real prices&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="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;"query"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"arroz"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"country"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"PE"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"results"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"product"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Arroz Extra 5kg"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"price"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;18.90&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_per_kg"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;3.78&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"store"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Wong"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"country"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"PE"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"refreshed_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-06-10T08: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;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;h2&gt;
  
  
  MCP: the missing piece
&lt;/h2&gt;

&lt;p&gt;CLI Market exposes 22 curated MCP tools (46 legacy) — search, compare, basket, checkout paths — so your agent can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Search products across all retailers&lt;/li&gt;
&lt;li&gt;Compare prices between stores&lt;/li&gt;
&lt;li&gt;Filter by country, category, or price range&lt;/li&gt;
&lt;li&gt;Get historical price data (Pro tier)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Connect in Cursor or any MCP client in 30 seconds. &lt;br&gt;
Configuration at:&lt;br&gt;
 &lt;a href="https://cli-market.dev/tools?utm_source=devto&amp;amp;utm_campaign=spike-jun10" rel="noopener noreferrer"&gt;https://cli-market.dev/tools?utm_source=devto&amp;amp;utm_campaign=spike-jun10&lt;/a&gt;.&lt;/p&gt;


&lt;h2&gt;
  
  
  What you can build with this
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Price monitoring agents — track commodity prices across LATAM&lt;/li&gt;
&lt;li&gt;Shopping assistants — "find the cheapest 5kg rice in Lima"&lt;/li&gt;
&lt;li&gt;Competitive intelligence — benchmark your retail prices against the market&lt;/li&gt;
&lt;li&gt;Supply chain optimization — auto-reorder when prices drop below threshold&lt;/li&gt;
&lt;/ul&gt;


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

&lt;p&gt;We're working on cart + checkout — so your agent doesn't just search, it buys. One API call to add to cart across any supported retailer.&lt;/p&gt;

&lt;p&gt;Start building:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;  pip &lt;span class="nb"&gt;install &lt;/span&gt;cli-market-world
  market init
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;MCP tools:&lt;br&gt;
&lt;a href="https://cli-market.dev/tools?utm_source=devto&amp;amp;utm_campaign=spike-jun10" rel="noopener noreferrer"&gt;https://cli-market.dev/tools?utm_source=devto&amp;amp;utm_campaign=spike-jun10&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Docs for agents: &lt;br&gt;
&lt;a href="https://cli-market.dev/llms.txt" rel="noopener noreferrer"&gt;https://cli-market.dev/llms.txt&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Pricing:&lt;br&gt;
&lt;a href="https://cli-market.dev/#pro-checkout?utm_source=devto&amp;amp;utm_campaign=week2" rel="noopener noreferrer"&gt;https://cli-market.dev/#pro-checkout?utm_source=devto&amp;amp;utm_campaign=week2&lt;/a&gt;                                             &lt;/p&gt;




&lt;p&gt;&lt;em&gt;*&lt;em&gt;CLI Market — Commerce infrastructure for AI agents. 38 retailers. 8 countries. MIT on PyPI.&lt;br&gt;
*&lt;/em&gt;&lt;/em&gt;&lt;/p&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

</description>
      <category>ai</category>
      <category>mcp</category>
      <category>cli</category>
      <category>agentskills</category>
    </item>
    <item>
      <title>CLI Market — Mi agente compra en 36 tiendas de 11 países. Una sola API.</title>
      <dc:creator>Ricardo Cuba</dc:creator>
      <pubDate>Thu, 28 May 2026 14:41:41 +0000</pubDate>
      <link>https://dev.to/ricardo_cuba/cli-market-my-agent-shops-at-41-stores-across-7-countries-one-api-2ggp</link>
      <guid>https://dev.to/ricardo_cuba/cli-market-my-agent-shops-at-41-stores-across-7-countries-one-api-2ggp</guid>
      <description>&lt;p&gt;Los agentes de IA no pueden comparar precios en el retail físico. Cada tienda tiene su propio sistema de autenticación, lógica de búsqueda y flujo de compra. Los agentes fallan antes de la primera consulta.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;CLI Market&lt;/strong&gt; resuelve esto: un solo &lt;code&gt;pip install&lt;/code&gt;, una API unificada para &lt;strong&gt;36 retailers verificados en 11 países&lt;/strong&gt;. 43 herramientas MCP. Más de 45.000 precios reales actualizados cada 4 horas. Checkout por PayPal (API) o QR (Yape/Plin).&lt;/p&gt;




&lt;blockquote&gt;
&lt;p&gt;🇬🇧 &lt;em&gt;AI agents can't comparison-shop in physical retail. Every store has its own auth, search logic, and checkout flow. **CLI Market&lt;/em&gt;* fixes this: one &lt;code&gt;pip install&lt;/code&gt;, one API across 36 verified retailers in 11 countries. 43 MCP tools. 45,000+ real prices refreshed every 4 hours.*&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Cómo funciona
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Buscar&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;market search &lt;span class="s2"&gt;"leche"&lt;/span&gt; &lt;span class="nt"&gt;--country&lt;/span&gt; PE
&lt;span class="c"&gt;# → precios de Metro, Wong, Plaza Vea en &amp;lt;2s&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Comparar&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;market basket leche:2 arroz:1
&lt;span class="c"&gt;# → compara el carrito completo en 9 supermercados&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Pagar&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;market checkout &lt;span class="nt"&gt;--payment&lt;/span&gt; yape
&lt;span class="c"&gt;# → genera QR, confirma vía webhook&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;blockquote&gt;
&lt;p&gt;🇬🇧 &lt;em&gt;How it works — Search: get prices from multiple retailers in &amp;lt;2s. Compare: full cart comparison across 9 supermarkets. Checkout: generates QR code, confirms via webhook.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Por qué lo construí
&lt;/h2&gt;

&lt;p&gt;El cuello de botella para los agentes de compras con IA no es el LLM — es la capa de datos de comercio. Cada agente que construí necesitaba scrapear 36 sitios web solo para responder &lt;em&gt;"¿dónde está la leche más barata cerca de mí?"&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;El proyecto comenzó como un conector VTEX y creció hasta cubrir 36 retailers en &lt;strong&gt;Perú, Argentina, Brasil, México, Colombia, Chile, EE.UU. y más&lt;/strong&gt;. Tenemos conectores VTEX, Shopify y Magento corriendo un daemon colector cada 4 horas. ~45K precios indexados actualmente, creciendo a &lt;strong&gt;más de 200K&lt;/strong&gt; con descargas de catálogo completo.&lt;/p&gt;

&lt;p&gt;También estamos trabajando en un &lt;strong&gt;archivo histórico de precios de 90 días&lt;/strong&gt; para seguimiento de inflación.&lt;/p&gt;




&lt;blockquote&gt;
&lt;p&gt;🇬🇧 &lt;em&gt;The bottleneck for AI shopping agents isn't t LM — it's the commerce data layer. Started as a single VTEX connector, now covering 36 retailers across 11 countries. Working on 200K+ prices and a 90-day historical price archive for inflation tracking.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Abierto a todos
&lt;/h2&gt;

&lt;p&gt;Construido en Python. Licencia MIT. Los retailers pueden listarse gratis — si tenés una tienda en Shopify o Magento, solo necesitamos un token de API de solo lectura. Sin lock-in.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;📦 &lt;strong&gt;Repositorio:&lt;/strong&gt; &lt;a href="https://github.com/Treevu-ai/cli-market-world" rel="noopener noreferrer"&gt;https://github.com/Treevu-ai/cli-market-world&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;🌐 &lt;strong&gt;Demo:&lt;/strong&gt; &lt;a href="https://cli-market.dev" rel="noopener noreferrer"&gt;https://cli-market.dev&lt;/a&gt; (GIF de terminal de 60s mostrando un checkout completo con agente)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;¡Me encantaría recibir feedback de quienes estén construyendo agentes de IA o trabajando en infraestructura de retail!&lt;/p&gt;




&lt;blockquote&gt;
&lt;p&gt;🇬🇧 &lt;em&gt;Built in Python. MIT licensed. Retailers can list for free — Shopify or Magento store, read-only API token is all we need. No lock-in. Would love feedback from anyone building AI agents or working on retail infrastructure!&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>python</category>
      <category>ai</category>
      <category>opensource</category>
      <category>cli</category>
    </item>
    <item>
      <title>Shipping an MCP server: parallel search, JSON output, and what broke along the way</title>
      <dc:creator>Ricardo Cuba</dc:creator>
      <pubDate>Thu, 21 May 2026 01:57:06 +0000</pubDate>
      <link>https://dev.to/ricardo_cuba/shipping-an-mcp-server-parallel-search-json-output-and-what-broke-along-the-way-2j3n</link>
      <guid>https://dev.to/ricardo_cuba/shipping-an-mcp-server-parallel-search-json-output-and-what-broke-along-the-way-2j3n</guid>
      <description>&lt;p&gt;CLI Market hit 3,760 retailers this week. With that scale came problems. &lt;/p&gt;

&lt;p&gt;Here's what we fixed and what we learned.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[Problem 1: Search timeout][...]

[Problem 2: --json flag that didn't work][...]

[Problem 3: Session loss on cloud deploys][...]

[What we learned about Render vs Railway][...]

[Full changelog + code links]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;pip install cli-market&lt;br&gt;
github.com/Treevu-ai/cli-market-world&lt;/p&gt;

</description>
      <category>mcp</category>
      <category>python</category>
      <category>ai</category>
      <category>opensource</category>
    </item>
    <item>
      <title>How I registered an MCP server for 3,760 retailers — and what I learned</title>
      <dc:creator>Ricardo Cuba</dc:creator>
      <pubDate>Wed, 20 May 2026 00:08:56 +0000</pubDate>
      <link>https://dev.to/ricardo_cuba/how-i-registered-an-mcp-server-for-3760-retailers-and-what-i-learned-4npm</link>
      <guid>https://dev.to/ricardo_cuba/how-i-registered-an-mcp-server-for-3760-retailers-and-what-i-learned-4npm</guid>
      <description>&lt;p&gt;Yesterday CLI Market was a PyPI package. &lt;br&gt;
This week it's an official MCP Registry server: &lt;br&gt;
&lt;a href="//io.github.Treevu-ai/cli-market"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvu0c62gvt540wqh890p9.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvu0c62gvt540wqh890p9.gif" alt=" " width="600" height="346"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Here's what it took to get listed, what the registry validation looks like, and why MCP is the missing layer between e-commerce and AI agents.&lt;/p&gt;

&lt;p&gt;**&lt;/p&gt;

&lt;h2&gt;
  
  
  The MCP Registry: what it took to get listed
&lt;/h2&gt;

&lt;p&gt;**&lt;br&gt;
The Model Context Protocol Registry at registry.modelcontextprotocol.io is the canonical&lt;br&gt;
directory of MCP servers. Getting listed isn't just about having a working server — the registry validates ownership, checks schema compliance, and verifies that the package actually exists.&lt;/p&gt;

&lt;p&gt;*&lt;em&gt;Step 1: The &lt;code&gt;mcp.json&lt;/code&gt; file&lt;br&gt;
*&lt;/em&gt;&lt;br&gt;
Every MCP server needs a mcp.json at the repo root. Ours:&lt;br&gt;
&lt;code&gt;{&lt;br&gt;
      "$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json"&lt;br&gt;
    ,&lt;br&gt;
      "name": "io.github.Treevu-ai/cli-market",&lt;br&gt;
      "title": "CLI Market",&lt;br&gt;
      "version": "1.0.1",&lt;br&gt;
      "description": "12 MCP tools for search, compare, purchase across 3,760 retailers in 67 c&lt;br&gt;
    ountries",&lt;br&gt;
      "repository": {&lt;br&gt;
        "url": "https://github.com/Treevu-ai/cli-market-world",&lt;br&gt;
        "source": "github"&lt;br&gt;
      },&lt;br&gt;
      "packages": [{&lt;br&gt;
        "registryType": "pypi",&lt;br&gt;
        "identifier": "cli-market",&lt;br&gt;
        "version": "1.0.17",&lt;br&gt;
        "transport": { "type": "stdio" }&lt;br&gt;
      }]&lt;br&gt;
    }&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Key decisions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Name format: io.github.{org}/{project} — reverse-DNS, org-scoped&lt;/li&gt;
&lt;li&gt;registryType: pypi — CLI Market is a Python package on PyPI&lt;/li&gt;
&lt;li&gt;transport: stdio — the MCP server communicates over standard input/output&lt;/li&gt;
&lt;li&gt;version locked — no ranges, exact version matching&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;*&lt;em&gt;Step 2: Proving ownership&lt;br&gt;
*&lt;/em&gt;&lt;br&gt;
The registry doesn't trust that cli-market on PyPI belongs to Treevu-ai on GitHub. It validates by scanning the PyPI package README for a specific HTML comment:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;!-- mcp-name: io.github.Treevu-ai/cli-market --&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;This line must appear in the README that renders on PyPI. The registry fetches the package, parses the README, and checks that the annotation matches the server name. If it doesn't match — rejected.&lt;/p&gt;

&lt;p&gt;We added this to our README, bumped the version to 1.0.17, and uploaded to PyPI. The registry validated it in under a second.&lt;/p&gt;

&lt;p&gt;*&lt;em&gt;Step 3: Schema validation&lt;br&gt;
*&lt;/em&gt;&lt;br&gt;
The publish endpoint runs the full ServerJSON schema validator. Every field is checked:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;description max 100 characters, name must match ^[a-zA-Z0-9.-]+/[a-zA-Z0-9._-]+$,&lt;br&gt;
packages[].identifier must resolve in the registry, packages[].transport.type must be stdio/&lt;br&gt;
streamable-http/sse.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;One thing that tripped us up: the schema changed between mcp.json (the repo-side format) and ServerJSON (the registry API format). In the repo, you declare command, args, type. In the registry API, those go inside packages[].transport and packages[] requires registryType + identifier + transport. Getting this right took a few rounds.&lt;/p&gt;

&lt;p&gt;*&lt;em&gt;Step 4: Authentication&lt;br&gt;
*&lt;/em&gt;&lt;br&gt;
The registry uses GitHub OAuth. We exchanged a GitHub token for a registry JWT:&lt;br&gt;
&lt;code&gt;POST /v0.1/auth/github-at  →  { registry_token: "eyJ..." }&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Then published:&lt;br&gt;
&lt;code&gt;POST /v0.1/publish  →  { server: {...}, _meta: { status: "active" } }&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;The token expires, so for updates you re-authenticate. The whole flow is scriptable in under 10 lines of bash.&lt;/p&gt;

&lt;p&gt;The 12 tools: architecture&lt;/p&gt;

&lt;p&gt;All 12 tools sit on top of a unified VTEX connector that normalizes 3,760 retailer APIs into a single JSON schema.&lt;/p&gt;

&lt;p&gt;_Four tools deserve special attention:&lt;br&gt;
_&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;- market_compare — Not a simple price fetch. It first normalizes SKUs across retailers (the same product has different internal IDs at Carrefour Brazil and Sainsbury's UK), deduplicates, and returns a canonical price set. Three steps under one MCP call.&lt;/li&gt;
&lt;li&gt;market_checkout — Chains: cart validation → stock verification → payment method resolution → order confirmation. All in one invocation. But it never completes autonomously — V1 requires explicit human approval before execution.&lt;/li&gt;
&lt;li&gt;market_ask — The most composite tool. Natural language input → semantic search → cross-retailer comparison → cart building → checkout readiness. "Buy rice" walks the full pipeline.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The composition pattern — Tools are atomic enough to compose, composite enough to not drown the agent. 12 tools. Not 1 mega-tool. Not 100 individual REST endpoints.&lt;/p&gt;

&lt;p&gt;───&lt;/p&gt;

&lt;p&gt;What I'd do differently&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Read the OpenAPI spec first. The publish endpoint schema is documented at /docs. I guessed from the mcp.json format and hit 5 validation errors before getting it right.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Set up the PyPI annotation early. The mcp-name comment is the ownership proof. Add it to your README before you publish to the registry.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Script the auth flow. GitHub token → registry JWT → publish. Three curl calls. Wrap them in a Makefile target and forget about it.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;───&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;CLI Market is on the registry&lt;/strong&gt;. &lt;br&gt;
The agent can now search, compare, and buy across 3,760 retailers in 67 countries — all via structured tool calls with zero scraping.&lt;/p&gt;

&lt;p&gt;pip install cli-market&lt;br&gt;
io.github.Treevu-ai/cli-market&lt;br&gt;
github.com/Treevu-ai/cli-market-world&lt;/p&gt;

&lt;p&gt;Ricardo Cuba&lt;br&gt;
Founder &amp;amp; Product Lead | CLI Market&lt;br&gt;
CEO Sinapsis Innovadora&lt;br&gt;
Trujillo, Perú&lt;/p&gt;

</description>
      <category>mcp</category>
      <category>python</category>
      <category>ai</category>
      <category>opensource</category>
    </item>
    <item>
      <title>The VTEX public API is the same for 3,760 retailers — but no one aggregated it. Until now.</title>
      <dc:creator>Ricardo Cuba</dc:creator>
      <pubDate>Tue, 19 May 2026 01:15:27 +0000</pubDate>
      <link>https://dev.to/ricardo_cuba/the-vtex-public-api-is-the-same-for-3760-retailers-but-no-one-aggregated-it-until-now-2hd7</link>
      <guid>https://dev.to/ricardo_cuba/the-vtex-public-api-is-the-same-for-3760-retailers-but-no-one-aggregated-it-until-now-2hd7</guid>
      <description>&lt;p&gt;VTEX runs e-commerce for Nike, Carrefour, Samsung, Motorola, and 3,760+ other brands. Every one exposes the same search and catalog API endpoints. Same JSON schema. Same pagination rules.&lt;/p&gt;

&lt;p&gt;For years, if you wanted to query products across retailers, you had to scrape or make separate API calls per store. There was no aggregation layer.&lt;/p&gt;

&lt;p&gt;VTEX powers e-commerce for Nike, Carrefour, Samsung, and 3,760+ brands. &lt;br&gt;
All share the same public API — but no one had built the aggregation layer for programmatic access. Until now.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;pip install cli-market&lt;/strong&gt; and your terminal becomes a commerce engine across 67 countries.&lt;/p&gt;

&lt;p&gt;So I built one.&lt;br&gt;
gifsicle --optimize=3 --lossy=80 demo.gif -o demo-small.gif&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcrngxa6zlrnynfdjgg5q.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcrngxa6zlrnynfdjgg5q.gif" alt=" " width="560" height="323"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Technical details:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Single Python connector that maps VTEX's public search/catalog/checkout endpoints&lt;/li&gt;
&lt;li&gt;Each retailer = one config line: {domain, country, currency, line}&lt;/li&gt;
&lt;li&gt;SQLite price snapshots for historical data&lt;/li&gt;
&lt;li&gt;Rich terminal UI + REST API + MCP server (12 tools)&lt;/li&gt;
&lt;li&gt;JSON output saves ~85% context window tokens vs raw HTML&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Everything is indexed and queryable cross-retailer. Search "milk" and get results from Carrefour Brazil, Sainsbury's UK, Wong Peru, in one response.&lt;/p&gt;

&lt;p&gt;GitHub: &lt;a href="https://github.com/Treevu-ai/cli-market-world" rel="noopener noreferrer"&gt;https://github.com/Treevu-ai/cli-market-world&lt;/a&gt;&lt;br&gt;
Live: &lt;a href="https://cli-market.dev" rel="noopener noreferrer"&gt;https://cli-market.dev&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Stack: Python, FastAPI, Rich, SQLite, Next.js. MIT license.&lt;/p&gt;

&lt;p&gt;Curious what the community thinks about e-commerce APIs being still optimized for browsers instead of programmatic access.&lt;/p&gt;

</description>
      <category>api</category>
      <category>cli</category>
      <category>python</category>
      <category>showdev</category>
    </item>
    <item>
      <title>Conecta tus agentes de IA a +2000 retailers de LATAM con una sola API</title>
      <dc:creator>Ricardo Cuba</dc:creator>
      <pubDate>Mon, 18 May 2026 04:14:09 +0000</pubDate>
      <link>https://dev.to/ricardo_cuba/conecta-tus-agentes-de-ia-a-2000-retailers-de-latam-con-una-sola-api-3hgh</link>
      <guid>https://dev.to/ricardo_cuba/conecta-tus-agentes-de-ia-a-2000-retailers-de-latam-con-una-sola-api-3hgh</guid>
      <description>&lt;p&gt;En este post te presento CLI Market, una infraestructura de comercio open source que conecta 100 retailers en 12 países de LATAM a través de una sola API y una CLI para agentes de IA.&lt;/p&gt;

&lt;p&gt;_&lt;/p&gt;

&lt;p&gt;¿Qué es CLI Market?&lt;br&gt;
CLI Market unifica catálogos, precios y disponibilidad de múltiples retailers para que tus agentes de IA puedan buscar, comparar y simular compras sin integrar tienda por tienda.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;2000+ retailers conectados&lt;/li&gt;
&lt;li&gt;40+ países en el mundo&lt;/li&gt;
&lt;li&gt;Una API y una CLI open source&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;👉 Sitio: &lt;a href="https://cli-market.dev/" rel="noopener noreferrer"&gt;https://cli-market.dev/&lt;/a&gt;&lt;br&gt;
👉 Repo: &lt;a href="https://github.com/Treevu-ai/cli-market-world" rel="noopener noreferrer"&gt;https://github.com/Treevu-ai/cli-market-world&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Cómo empezar?
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/Treevu-ai/cli-market-latam.git
&lt;span class="nb"&gt;cd &lt;/span&gt;cli-market-latam
npm &lt;span class="nb"&gt;install
&lt;/span&gt;npm run cli
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Ejemplo rápido para listar retailers por país:
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;cli-market retailers list --country=PE
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Con esto ya puedes exponer catálogos como herramientas para tus agentes (HTTP, JSON, MCP) y construir asistentes que optimicen compras en retail sobre una sola capa de infraestructura.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>api</category>
      <category>startup</category>
    </item>
    <item>
      <title>first create post dev test</title>
      <dc:creator>Ricardo Cuba</dc:creator>
      <pubDate>Mon, 11 May 2026 02:41:34 +0000</pubDate>
      <link>https://dev.to/ricardo_cuba/3-ways-to-installing-ubuntu-515j</link>
      <guid>https://dev.to/ricardo_cuba/3-ways-to-installing-ubuntu-515j</guid>
      <description>&lt;p&gt;One of the most powerful things I've learned a few days ago is the possibilities to vibe coding from ubuntu and docker containers&lt;/p&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>productivity</category>
      <category>programming</category>
    </item>
  </channel>
</rss>
