<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Ricardo Cuba</title>
    <description>The latest articles on Forem by Ricardo Cuba (@ricardo_cuba).</description>
    <link>https://forem.com/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>Forem: Ricardo Cuba</title>
      <link>https://forem.com/ricardo_cuba</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/ricardo_cuba"/>
    <language>en</language>
    <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://forem.com/ricardo_cuba/shipping-an-mcp-server-parallel-search-json-output-and-what-broke-along-the-way-2j3n</link>
      <guid>https://forem.com/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://forem.com/ricardo_cuba/how-i-registered-an-mcp-server-for-3760-retailers-and-what-i-learned-4npm</link>
      <guid>https://forem.com/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="560" height="323"&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://forem.com/ricardo_cuba/the-vtex-public-api-is-the-same-for-3760-retailers-but-no-one-aggregated-it-until-now-2hd7</link>
      <guid>https://forem.com/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://forem.com/ricardo_cuba/conecta-tus-agentes-de-ia-a-2000-retailers-de-latam-con-una-sola-api-3hgh</link>
      <guid>https://forem.com/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://forem.com/ricardo_cuba/3-ways-to-installing-ubuntu-515j</link>
      <guid>https://forem.com/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>
