Skip to main content
Glama
NLACE-COM

mcp-supermercados-cl

by NLACE-COM

🛒 mcp-supermercados-cl

Servidor MCP para buscar productos, comparar precios y armar la mejor lista de compra en supermercados chilenos con Claude, ChatGPT u otro cliente MCP.

npm node tests license

El foco es profundidad en la cadena donde tú ya compras — precios club, beneficios por RUT, productos frecuentes, carro — con la comparación entre cadenas como capacidad secundaria. Cubre las cinco grandes cadenas del país.

100 % local: el tráfico sale de tu máquina, a ritmo humano, y tus credenciales nunca tocan un servidor central.


Tabla de contenidos


Related MCP server: Superprecio MCP Server

🚫 ¿Se deploya en Vercel/AWS? No

Este MCP no tiene URL de producción y no se deploya en ningún servidor. Es intencional, y es la razón por la que funciona:

  • Usa transporte stdio (local), no HTTP. Corre en tu máquina, junto a tu cliente MCP (Claude Desktop, Claude Code, Cursor, ChatGPT Desktop).

  • Unimarc, Tottus y Lider bloquean el tráfico de datacenter (antibots). Un deploy en la nube no funcionaría para esas cadenas: necesitan tu IP residencial.

  • El precio socio, tus frecuentes y el carro viven en tu navegador logueado. Las credenciales no deben tocar un servidor central — eso además evita el mayor riesgo legal (un servicio que scrapee cuentas ajenas).

La forma de "producción" de un MCP como este es instalarlo local (vía npx o clonando el repo) y conectarlo a tu cliente. Igual que la mayoría de los MCP servers.


📦 Instalación

Requiere Node.js ≥ 20. Publicado en npm: mcp-supermercados-cl.

Opción 1 — vía npx (recomendada). No instalas nada; tu cliente MCP lo ejecuta al vuelo. En Claude Desktop / Claude Code (claude_desktop_config.json o .mcp.json):

{
  "mcpServers": {
    "supermercados": {
      "command": "npx",
      "args": ["-y", "mcp-supermercados-cl"]
    }
  }
}

Opción 2 — desde el código (para desarrollar o contribuir):

git clone https://github.com/NLACE-COM/mcp-supermercados-cl.git
cd mcp-supermercados-cl
npm install
npm run build

Y apunta tu cliente al build local:

{
  "mcpServers": {
    "supermercados": {
      "command": "node",
      "args": ["/ruta/absoluta/al/repo/dist/index.js"]
    }
  }
}

Para desarrollo rápido:

npm run dev        # servidor por stdio con tsx
npm run inspector  # abre el MCP Inspector

🏬 Cobertura por cadena

Cadena

Plataforma

Búsqueda

Precio socio

Detalle

Sesión / carro

Jumbo

Cencosud (Constructor.io)

✅ Prime

✅ frecuentes, listas, carro

Santa Isabel

Cencosud (Constructor.io)

carro Cencosud¹

Unimarc

VTEX (BFF propio)

✅ Club Unimarc

Tottus

Falabella (Next.js SSR)

Lider

Walmart Glass (SSR)

—²

¹ El carro de Santa Isabel reutiliza el mismo BFF Cencosud que Jumbo; se activa con tu sesión en santaisabel.cl. ² Lider no expone precio socio dual como el Prime de Jumbo; sus descuentos son rebajas directas ("Precio Lider") + bundles.

⚠️ Unimarc, Tottus y Lider requieren IP residencial (tu máquina); desde datacenter bloquean. Como el MCP corre local, en tu equipo funcionan.

Todos los resultados vienen enriquecidos: nombre, marca, descripción, foto, precio vigente, precio normal, precio socio, precio por unidad normalizado (por kg/lt para comparar formatos) y bundles ("2 x $2.000", "Lleva 8 por $X").


🧰 Tools disponibles

Núcleo — armar la mejor lista con tu sesión:

Tool

Qué hace

build_list

Convierte una lista en lenguaje natural en productos concretos. Prioriza tus frecuentes, mejor precio por unidad y ofertas. Flags onlyOffers / onlyInStock y maxBudget (ajusta a alternativas más baratas para caber). Incluye resumen formateado.

suggest_swaps

Reemplazos convenientes por precio por unidad. Con preferNatural: alternativas de precio similar con menos ingredientes.

get_frequent_purchases

Tus productos habituales, con precio Prime (requiere sesión).

get_saved_lists

Tus listas guardadas (requiere sesión).

add_to_cart / get_cart

Deja la lista en el carro de Jumbo; total, ahorro y ahorro Prime.

Lectura de catálogo:

Tool

Qué hace

search_products

Busca en cualquier cadena. Filtros maxPrice/minPrice/inStockOnly, orden sortBy (price / unitPrice).

get_product

Detalle por URL/slug: precio socio, EAN, ingredientes y sellos nutricionales.

get_offers

Ofertas vigentes de Jumbo; primeOnly, filtro por categoría.

find_opportunities

Mayores descuentos con stock, ordenados por discountPct. excludeIds para destacar lo que no tienes.

Comparación y diagnóstico:

Tool

Qué hace

compare_stores

Total de una lista en varias cadenas; marca la más barata y advierte si compara formatos distintos.

discover_branch

Descubre tu sucursal (branchId) leyéndola del navegador, para no pedírtela a mano.

adapter_status

Qué cadenas responden ahora y con qué latencia.

💬 Prompts guiados

Para no adivinar qué pedir, el servidor expone plantillas que tu cliente MCP muestra como sugerencias: armar_lista (con presupuesto opcional), conectar_sesion, comparar_carro y ofertas_frecuentes. El servidor además trae instructions para que el modelo te guíe en el primer uso (qué cadena, cuándo pedir sesión, cómo leer los errores).

Los errores vienen accionables: cada uno trae un campo action con el siguiente paso concreto (re-loguearte, reintentar, usar IP residencial…) en vez de un mensaje técnico.


🔐 Cómo funciona la sesión (sin credenciales en el servidor)

El precio socio, los frecuentes y el carro viven detrás del login. En Jumbo, el token vive en el localStorage del navegador, así que el servidor nunca ve credenciales: el cliente (junto a tu navegador logueado) extrae los datos del DOM o ejecuta las llamadas autenticadas, y el MCP solo normaliza el resultado.

Ver src/adapters/session.ts y docs/captura-cencosud-2026-07-06.md.

¿Y esas API keys que aparecen en el código?

Verás claves como key_JopvNXKS61kwGkBe (Jumbo) o be-reg-groceries-sisa-catalog-wdhhq5a2fken (Santa Isabel) en los adaptadores. No son secretos. Son las claves públicas del frontend de Constructor.io y del BFF de catálogo: van embebidas en el JavaScript de jumbo.cl y santaisabel.cl, y son visibles en las DevTools de cualquier visitante. Solo identifican el índice de búsqueda del lado cliente — no dan acceso a ninguna cuenta ni permiten escribir. Sin ellas, el buscador no responde.

Los datos que son sensibles (token de sesión, precio socio, carro) viven en tu navegador logueado y nunca están en este repositorio. Un escáner automático puede marcar estas claves públicas como "token expuesto"; es un falso positivo.


🧪 Desarrollo y tests

npm test              # tests de contrato con fixtures reales (sin red) — 160 tests
npm run test:live     # smoke contra los sitios reales (opt-in, LIVE=1)
npm run test:session  # smoke de las tools de sesión de Jumbo (requiere tu navegador)
npm run typecheck     # tsc --noEmit
npm run lint          # ESLint
npm run format        # Prettier (--write); format:check para verificar

Smoke de sesión (test:session)

Las tools de sesión de Jumbo (carro, listas guardadas, frecuentes) necesitan el token que vive en el localStorage de un navegador logueado, así que ni los tests de contrato ni el smoke live las cubren. Este smoke cierra ese hueco (issue #12) con el puente de Playwright sobre un perfil dedicado:

PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD=1 npm install --no-save playwright  # una vez
npm run session:login   # una vez: abre Chrome, inicias sesión y eliges tienda
npm run test:session    # cada vez que quieras verificar (~30 s)

session:login abre una ventana con un perfil aparte (~/.supermercados-smoke-profile, configurable con SUPERMERCADOS_SMOKE_PROFILE), espera a que inicies sesión y se cierra sola. Tus credenciales las escribes tú en esa ventana; el proyecto solo comprueba que el token exista, nunca su valor.

Por qué un perfil aparte y no el tuyo: launchPersistentContext toma el lock exclusivo del perfil, así que usar el de tu Chrome diario obliga a cerrarlo en cada corrida — y sobre un perfil grande (7,8 GB al probarlo) el lanzamiento ni siquiera completa: muere por timeout sin llegar a conectar. Con perfil dedicado arranca en ~2 s y tu navegador ni se entera.

Qué valida: que el sitio real siga aceptando los requests que arman los snippets de producción y que los parsers entiendan la respuesta.

Vale la pena correrlo antes de publicar una versión. Sin él, un cambio de contrato de Jumbo (rotación de apiKey, cambio del DOM de frecuentes) llega a producción sin aviso: pasó en la 1.4.4, donde el carro y las listas estuvieron rotos dos días hasta que lo reportó un usuario.

Los tests de contrato usan respuestas reales grabadas en tests/fixtures/. Los live requieren red y, para Unimarc/Tottus/Lider, IP residencial. Regraba una fixture cuando una cadena cambie su formato, anotando la fecha.

Cada push y PR corre lint + typecheck + build + test en CI (GitHub Actions, Node 20 y 22). Un smoke live semanal avisa por issue si una cadena cambia su formato. Para contribuir, revisa CONTRIBUTING.md.

Flujo de sesión: manual o automatizado

Las tools que requieren sesión (get_cart, get_frequent_purchases, get_saved_lists, add_to_cart) devuelven un browserSnippet: un fetch de una sola llamada para ejecutar en una pestaña ya logueada del sitio. Pasas el JSON de vuelta y la tool lo normaliza — el servidor nunca ve tu token.

Para automatizarlo (sin copiar/pegar), existe un puente opcional con Playwright (src/adapters/playwrightBridge.ts) que reusa el perfil de Chrome donde ya tienes la sesión. Playwright no viene con el paquete (es pesado); instálalo aparte si lo quieres:

npm install playwright
npx playwright install chromium

Líder y Tottus: puente automático contra el antibot

Líder y Tottus bloquean el fetch del servidor por fingerprint del cliente (TLS/JA3 + desafío JS de PerimeterX; en Líder además F5 BIG-IP con 307 → /blocked). No es tu IP: la misma IP en un navegador real carga los datos (issue #2). Hay dos formas de sortearlo en search_products, compare_stores y build_cheapest_basket:

  1. Manual: search_products devuelve openUrl + browserSnippet; abres esa búsqueda en tu navegador, ejecutas el snippet (lee __NEXT_DATA__ del DOM) y reintentas pasando el resultado en browserHtml.

  2. Automático: si configuras el puente Playwright por entorno, el servidor navega solo reusando tu perfil de Chrome (nunca ve tu token) y resuelve esas cadenas sin intervención. Variables (en la sección env de tu cliente MCP):

    Variable

    Requerida

    Descripción

    SUPERMERCADOS_PLAYWRIGHT_PROFILE

    Carpeta del perfil de Chrome con tu sesión (userDataDir). Activa el puente.

    SUPERMERCADOS_PLAYWRIGHT_PATH

    con npx

    Carpeta del paquete playwright cuando está instalado global (por npx el server no lo resuelve solo). Valor: salida de npm root -g + /playwright.

    SUPERMERCADOS_PLAYWRIGHT_CHANNEL

    no

    chrome o msedge para usar el navegador instalado (si no, el Chromium de Playwright).

    SUPERMERCADOS_PLAYWRIGHT_HEADLESS

    no

    1 para headless (por defecto con ventana, evita gatillar antibots/2FA).

    Requiere Playwright instalado y Chrome cerrado (para no chocar con el lock del perfil). Sin estas variables, el comportamiento es el manual de arriba.

    Con npx (Claude Desktop, etc.): el paquete corre en un cache efímero sin Playwright, así que instálalo global (npm install -g playwright) y apunta SUPERMERCADOS_PLAYWRIGHT_PATH a su carpeta. NODE_PATH no sirve: el server carga Playwright con import() (ESM) y NODE_PATH solo aplica a require() de CommonJS.

    {
      "mcpServers": {
        "supermercados-cl": {
          "command": "npx",
          "args": ["-y", "mcp-supermercados-cl@latest"],
          "env": {
            "SUPERMERCADOS_PLAYWRIGHT_PROFILE": "/Users/tu-usuario/Library/Application Support/Google/Chrome",
            "SUPERMERCADOS_PLAYWRIGHT_PATH": "/ruta/de/npm-root-g/playwright",
            "SUPERMERCADOS_PLAYWRIGHT_CHANNEL": "chrome"
          }
        }
      }
    }

🏗 Arquitectura

  • Un servidor, un adaptador por cadena (src/adapters/). Esquema normalizado con zod (src/core/types.ts): precio normal y precio socio separados, precio por unidad normalizado a base canónica.

  • HTTP a ritmo humano, por tipo de host: los endpoints de API (Constructor.io y los BFF de Cencosud/Unimarc/Santa Isabel) van a ~350 ms; los sitios que se scrapean por SSR (Tottus, Lider, PDPs www.*) mantienen ~1 s. Reintentos con backoff, user-agent realista (src/http/client.ts). Cache TTL 15 min. Ajustable por entorno: SUPERMERCADOS_MIN_DELAY_MS, SUPERMERCADOS_FAST_DELAY_MS, SUPERMERCADOS_TIMEOUT_MS, SUPERMERCADOS_MAX_RETRIES.

  • Feedback en vivo: build_list y compare_stores emiten notificaciones de progreso MCP (notifications/progress) si el cliente las soporta, para no quedar en silencio durante listas largas. compare_stores limita cada cadena a 25 s y devuelve resultado parcial en vez de bloquear a las demás.

  • Adaptadores aislados: un cambio de sitio rompe un adaptador, no todo.

  • Endpoints documentados en docs/ y en docs/PLAN-arquitectura.md.

src/
├── index.ts            # entrada MCP (stdio)
├── server.ts           # registro de tools
├── core/               # types, registry, normalize, listBuilder, compare, ...
├── adapters/           # cencosud (Jumbo+Santa Isabel), unimarc, tottus, lider
├── tools/              # una tool MCP por archivo
└── http/               # cliente HTTP con rate limit y reintentos

🤝 Cómo contribuir

¡Bienvenidas las contribuciones! Este proyecto está pensado para crecer con la comunidad. Ver CONTRIBUTING.md.

Ideas de alto impacto:

  • Carro/sesión en Unimarc, Tottus y Lider (cada una con su login propio).

  • Detalle (get_product) para Unimarc/Tottus/Lider.

  • Nuevas cadenas o farmacias.

  • Mantener las fixtures al día cuando una cadena cambie su API.

Cuando una cadena cambie su formato, npm run test:live lo detecta.


Herramienta personal, de código abierto, sin backend central. Cada usuario opera su propia cuenta desde su propia IP, a ritmo humano, sin redistribuir datos. Revisa los Términos y Condiciones de cada cadena antes de usarla. No afiliado a Cencosud, SMU, Falabella ni Walmart. Las marcas mencionadas pertenecen a sus respectivos dueños. Úsalo bajo tu propia responsabilidad.


📄 Licencia

MIT © contribuidores de mcp-supermercados-cl

Available Tools

14 tools
adapter_statusEstado de las cadenasA

Diagnóstico en vivo: qué cadenas soportadas están respondiendo ahora y con qué latencia. Úsalo si otra tool falla, para distinguir un endpoint caído de un error de uso.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description must disclose behavioral traits. It explains the tool is live diagnostic (read-only), checking responses and latency. It does not explicitly state it is non-destructive, but the diagnostic nature implicitly suggests no side effects. A small gap exists in not confirming it only observes, but for a 0-param tool this is acceptable.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two concise sentences, front-loading the core action and then providing usage context. Every sentence earns its place with zero redundancy or fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 0 parameters, no output schema, and the diagnostic nature, the description fully covers what the tool does and when to use it. It implies the output will list chain statuses and latency, which is sufficient context for an agent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 0 parameters and 100% coverage, so the baseline is 3. The description does not add parameter-specific meaning because there are none to describe. It mentions 'supported chains' but does not detail any input constraints, which is fine as there are none.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Diagnóstico en vivo: qué cadenas soportadas están respondiendo ahora y con qué latencia.' This specifies a concrete verb ('diagnose'), resource ('supported chains'), and scope ('live status, latency'). It distinguishes from sibling tools like get_product or add_to_cart, which serve entirely different functions.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly advises when to use the tool: 'Úsalo si otra tool falla, para distinguir un endpoint caído de un error de uso.' This provides clear guidance for the agent, stating that it is a diagnostic fallback to differentiate between a downed chain and a usage error.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

add_to_cartAgregar al carroA

Agrega/actualiza productos en el carro de Jumbo del usuario. El servidor no maneja credenciales: devuelve un browserSnippet (PATCH /cart/items con su body) para ejecutar en una pestaña YA LOGUEADA de www.jumbo.cl. Si el navegador lo ejecutó y entregas el JSON del carro en rawCartResult, devuelvo el carro normalizado (total, ahorro y ahorro Prime). Acción reversible (se puede quitar del carro); no es una compra.

ParametersJSON Schema
NameRequiredDescriptionDefault
itemsYesLíneas a agregar/actualizar.
storeNoCadena. Fase 3: jumbo.jumbo
branchIdYesSucursal de la sesión, ej. "jumboclj512". Requerido.
rawCartResultNoJSON de la respuesta del PATCH/GET /cart, si el navegador ya ejecutó el request. Se normaliza y devuelve.

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full responsibility. It covers critical behaviors: the server does not handle credentials, the need for a logged-in browser tab, the two-step process, and that the action is reversible and not a purchase. This fully discloses the tool's behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is relatively concise while conveying necessary steps and prerequisites. It is front-loaded with the main purpose. Minor redundancy (e.g., mentioning reversal twice) could be trimmed, but overall efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is complex with a two-step flow. The description adequately explains the prerequisites (logged-in tab), the process (browserSnippet, rawCartResult), and the outcome (normalized cart or snippet). Given no output schema, it sufficiently describes return values. It could mention error handling, but still comprehensive.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, providing a baseline of 3. The description adds value by explaining that skuId should use the 'id' field from search_products, that branchId is required, and that rawCartResult is the JSON response from PATCH/GET /cart. This goes beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool adds/updates products in the user's Jumbo cart. It uses specific verbs ('Agrega/actualiza') and resource ('productos en el carro de Jumbo'), distinguishes it from sibling tools like get_cart by noting it modifies the cart, and clarifies it is not a purchase.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains when to use it (to add/update products) and provides essential context: the two-step flow (returns browserSnippet requiring a logged-in tab), the role of rawCartResult, and that the action is reversible. It does not explicitly mention alternatives or when not to use, but the context is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

build_cheapest_basketArmar la canasta más barata (repartida por cadena)A

Toma una lista de ítems y, por CADA ítem, elige la cadena donde sale más barato (por precio por unidad cuando todas lo informan), agrupando la compra por cadena (la leche en una, el pan en otra). Devuelve plan por cadena, picks por ítem con alternativas, basketTotal (comprando cada cosa donde es más barata), singleStore y splitSaving (ahorro vs comprar todo en una sola cadena), y missing. Por defecto compara jumbo, santaisabel y unimarc (las que responden desde el servidor); tottus/lider requieren el puente de navegador (browserHtml de search_products). NO agrega al carro: para eso usa add_to_cart (hoy solo Jumbo, con sesión); para el resto quedan los links (url) de cada producto.

ParametersJSON Schema
NameRequiredDescriptionDefault
itemsYesÍtems en texto libre, ej. ["leche colun 1L", "pan de molde", "arroz 1kg"].
storesNoCadenas a comparar. Por defecto jumbo, santaisabel y unimarc (tottus/lider bloquean el fetch del servidor).
branchIdNoSucursal para precios locales de cadenas Cencosud, ej. "jumboclj512".

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full burden. It describes the selection logic, return fields, default stores, and limitations. While it does not cover rate limits or authorization, the behavior is sufficiently transparent for a comparison tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single dense paragraph that conveys all necessary information. It is front-loaded with the main action, but could benefit from slightly better structure. Every sentence is informative.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's moderate complexity (3 parameters, no output schema), the description covers the purpose, return fields, default behavior, limitations, and sibling differentiation comprehensively.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description adds operational context beyond the schema, such as default store list and the requirement for tottus/lider to use browserHtml. With 100% schema coverage, the description provides useful semantic additions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states that the tool takes a list of items and selects the cheapest store per item, returning aggregated results. It distinguishes itself from siblings like add_to_cart by explicitly stating what it does not do (add to cart).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit guidance on when to use this tool (to find the cheapest basket across stores) and when not to (use add_to_cart for adding items to cart). It also mentions that for tottus/lider, browserHtml from search_products is needed, implying prerequisite steps.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

build_listArmar lista de compraA

Convierte una lista en lenguaje natural (ej. ["leche", "arroz 1kg", "café de grano"]) en productos concretos del catálogo, eligiendo por mejor precio por unidad y ofertas vigentes. Devuelve por ítem el producto elegido, hasta 3 alternativas para ajustar, el ahorro por ofertas, y el total estimado en CLP. Con branchId usa precios/stock de esa sucursal. Si se entregan los productos frecuentes del usuario en frequentCards (desde get_frequent_purchases con sesión iniciada), se priorizan: la lista se arma con lo que la persona realmente compra. Si el usuario prefiere marcas específicas, incluirlas en el texto del ítem (ej. "leche colun").

ParametersJSON Schema
NameRequiredDescriptionDefault
itemsYesÍtems de la lista en texto libre, uno por producto deseado.
storeNoCadena: jumbo, santaisabel, unimarc, tottus o lider.jumbo
branchIdNoCódigo de sucursal para precios locales, ej. "jumboclj512".
maxBudgetNoPresupuesto máximo en CLP. Si el total lo supera, baja a alternativas más baratas (sin tocar tus frecuentes) y, si aún se pasa, sugiere qué quitar. No elimina ítems solo.
onlyOffersNotrue = arma la lista solo con productos en oferta (con descuento).
onlyInStockNotrue = solo productos con stock real.
frequentCardsNoProductos frecuentes del usuario (cards del DOM de la sesión) para priorizar lo que ya compra.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It discloses key behaviors: selection logic, returns per item (chosen product, alternatives, savings, total), handling of budget overflow, and the role of frequentCards. It could be more explicit about non-destructive nature, but overall is transparent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is relatively long but well-organized: it starts with the core functionality, then explains parameter behaviors in a logical order. Each sentence adds value, though minor redundancy could be trimmed.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 7 parameters and no output schema, the description comprehensively covers all key aspects: item conversion, pricing, offers, stock, budget handling, frequent products, and branch-specific prices. It provides enough detail for an AI agent to invoke the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

All 7 parameters have descriptions in the schema (100% coverage). The description adds useful context beyond the schema, such as how frequentCards are used and how maxBudget triggers downgrades. This supplements the schema well.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it converts a natural language list into concrete products from the catalog, selecting by best price per unit and offers. This distinguishes it from sibling tools like search_products or get_offers, which have different scopes.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear usage context, such as using branchId for local prices and frequentCards to prioritize frequent purchases. It does not explicitly list when not to use the tool or alternatives among siblings, but the guidance is sufficient for typical scenarios.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

compare_storesComparar cadenasA

Estima el total de una misma lista (ítems en texto libre) en varias cadenas chilenas y señala la más barata entre las que tienen todos los productos. Devuelve por cadena el mejor match por ítem y el total. IMPORTANTE: cada cadena resuelve el ítem por su cuenta, así que el 'más barato' puede ser un producto o formato distinto; usa el campo comparability (same/similar/mixed por ítem) y compara por precio por unidad, no solo por total. Capacidad secundaria: para el día a día conviene build_list con tu sesión. Nota: unimarc/tottus/lider requieren IP residencial; si una cadena falla, se reporta y las demás siguen.

ParametersJSON Schema
NameRequiredDescriptionDefault
itemsYesLista de productos en texto libre, ej. ["leche", "arroz 1kg", "café"].
storesNoCadenas a comparar. Por defecto, todas las disponibles.
branchIdNoSucursal para las cadenas Cencosud (ej. "jumboclj512").

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations, so description carries full burden. It discloses that each chain resolves items independently, so cheapest may be different product/format; recommends using 'comparability' field and comparing by unit price. Also notes IP requirements and failure handling, revealing important behavioral traits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single paragraph of about 5 sentences, front-loading the main purpose. Every sentence adds value, though slightly dense. Could be more structured but effectively concise.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers complexity: returns per-chain best match and total, notes comparability, IP requirements, default stores, and failure handling. No output schema, but description explains return values sufficiently.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with descriptions for all parameters. The description adds minor context (example for items, default for stores, branchId purpose for Cencosud) but does not significantly expand beyond schema. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool estimates the total of a list across Chilean chains and identifies the cheapest among those with all products. It specifies the verb 'Estima' and resource 'cadenas chilenas', and distinguishes from siblings like 'build_list' by focusing on comparison.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit guidance: 'para el día a día conviene build_list con tu sesión' tells when to use an alternative. The 'IMPORTANTE' note advises on comparability and unit price. Mentions IP requirements for specific chains and that failures are reported, providing clear usage context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

discover_branchDescubrir mi sucursalA

Obtiene el código de sucursal (branchId, ej. "jumboclj512") leyéndolo del navegador, para no pedírselo al usuario. Devuelve un browserSnippet para ejecutar en www.jumbo.cl (con la comuna/tienda ya elegida). El snippet retorna { found, branchId } o, si no hay tienda elegida, { found:false, hint }. Pasa ese resultado en discovered para que la tool lo valide y te confirme el branchId a usar.

ParametersJSON Schema
NameRequiredDescriptionDefault
storeNoCadena Cencosud. Por ahora jumbo/santaisabel.jumbo
discoveredNoResultado del browserSnippet, si el navegador ya lo ejecutó ({ found, branchId, ... }).

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Without annotations, the description carries the full burden. It explains the two-step process (returning a snippet, then validating the result), the snippet's return format, and that the result must be passed back. No destructive actions are mentioned, which is appropriate for a read operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single paragraph of about three sentences, efficiently covering the tool's purpose and mechanics. It could be more structured (e.g., separate usage notes), but it is concise and front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (browser interaction, validation step), the description covers key aspects: getting the snippet, executing it, and passing back the result. No output schema exists, but the return format is described. It is sufficiently complete for correct agent usage.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, and the description adds context: 'store' specifies the Cencosud chain (jumbo/santaisabel), and 'discovered' is the result of the browser snippet. The explanation of the flow enriches parameter understanding beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool obtains the branch code (branchId) from the browser, avoiding the need to ask the user. It specifies the output (browserSnippet) and distinguishes itself from other tools that don't perform browser interaction.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies using this tool when the branchId is needed and a browser snippet can be executed. It does not explicitly state when not to use it or name alternatives, but the context makes the usage clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

find_opportunitiesOportunidades del momentoA

Devuelve los productos con MAYOR descuento vigente y stock real, ordenados por porcentaje de descuento, para recomendar aprovechar ofertas. Cada resultado trae discountPct, saving (ahorro CLP) y memberSaving (ahorro extra socio Prime) además de nombre, precio, precio normal, unidad y foto. Filtrable por category y minDiscountPct. Pasar excludeIds (ids del carro o frecuentes) para destacar solo oportunidades que el usuario aún no tiene. primeOnly para ofertas exclusivas de socios. Hoy disponible en Jumbo (colección de ofertas verificada).

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMáximo de oportunidades a devolver.
storeNoCadena. Hoy: jumbo (con colección de ofertas).jumbo
branchIdNoSucursal para precios/stock locales, ej. "jumboclj512".
categoryNoCategoría para acotar, ej. "Despensa", "Lácteos".
primeOnlyNotrue = solo ofertas exclusivas de socios Jumbo Prime.
excludeIdsNoIds de producto a excluir (lo que el usuario ya tiene en el carro o compra siempre).
minDiscountPctNoDescuento mínimo en % para incluir (ej. 30 = solo 30%+ off).

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so the description carries full burden. It discloses return fields, sorting, filtering, and availability on Jumbo. It does not mention side effects, but it is clearly a read operation. The description is transparent about what the tool does.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, well-structured paragraph of about 6 sentences. It front-loads the core purpose and ordering, then lists return fields, filtering, and specific usage hints. No superfluous information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema, the description lists return fields explicitly. It covers filtering, exclusion, primeOnly, store availability, and limit. It does not mention pagination beyond the limit parameter or error handling, but for a top-deals tool, the information is sufficient.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, and the description adds significant context beyond schema descriptions. For example, excludeIds is explained as 'lo que el usuario ya tiene en el carro o compra siempre', and minDiscountPct includes an example. The description also lists return fields not in schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description explicitly states it returns products with the highest discount and real stock, sorted by discount percentage, for recommending deals. It lists returned fields (discountPct, saving, memberSaving) and filtering options. The title 'Oportunidades del momento' reinforces a clear purpose.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context: use for finding best deals, with specific usage tips for excludeIds (to exclude user's current items) and primeOnly (exclusive offers). It implies when to use (for deals) but does not explicitly differentiate from sibling tools like get_offers. Nonetheless, the context is sufficient for an agent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_cartEstado del carroA

Normaliza el carro de Jumbo del usuario a { items, subTotal, total, savings, primeSavings }. El servidor no ve credenciales. FLUJO RÁPIDO (una sola llamada): ejecuta el browserSnippet que devuelve esta tool en una pestaña YA LOGUEADA de www.jumbo.cl y pásame el JSON en rawCart. NO extraigas el estado de React ni el DOM del carro a mano: es lento, frágil e innecesario (este fetch trae todo el carro directo). Si no pasas rawCart, devuelvo el snippet listo para ejecutar.

ParametersJSON Schema
NameRequiredDescriptionDefault
storeNoCadena. Fase 3: jumbo.jumbo
rawCartNoJSON crudo de GET /cart que obtuvo el navegador ejecutando el browserSnippet.
branchIdNoSucursal, ej. "jumboclj512".

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Discloses that credentials are not seen by server ('El servidor no ve credenciales') and describes the two modes (normalize or return snippet). Lacks mention of rate limits or other side effects, but for a read-like tool with no annotations, this is above average.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single paragraph with important information front-loaded (purpose, workflow). Slightly dense due to embedded instructions but efficient overall.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Describes output format explicitly despite no output schema. Addresses the full workflow and integration with browser snippet. With sibling tools, this provides sufficient context for correct usage.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Adds significant meaning beyond the input schema: explains store default and phase, rawCart source from GET /cart, branchId as sucursal. The description clarifies the workflow for each parameter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool normalizes the user's Jumbo cart into a specific format (items, subTotal, total, savings, primeSavings). It distinguishes from siblings like add_to_cart and get_product by focusing on cart normalization.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit when-to-use: 'FLUJO RÁPIDO (una sola llamada)' with browser snippet, and when-not-to: 'NO extraigas el estado de React ni el DOM del carro a mano'. Also explains fallback behavior if rawCart is not provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_frequent_purchasesProductos frecuentes del usuarioA

Devuelve los productos que el usuario compra habitualmente en la cadena, normalizados con su precio vigente, precio normal y precio socio Jumbo Prime cuando aplica. Base para armar la lista con lo que la persona realmente compra. Requiere sesión: entrega en cards el resultado de ejecutar el browserSnippet (una sola pasada al DOM) en www.jumbo.cl/productos-frecuentes ya logueado. NO rasques el estado de React ni improvises selectores; usa el snippet. El servidor nunca maneja credenciales.

ParametersJSON Schema
NameRequiredDescriptionDefault
cardsNoCards de producto extraídas del DOM de /productos-frecuentes (data-cnstrc-item-* + textos de precio). Las entrega el navegador ya logueado del usuario.
storeNoCadena. Fase 2: jumbo.jumbo
branchIdNoSucursal de la sesión, ej. "jumboclj512".

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description fully discloses that it requires a logged-in session, uses a browser snippet, and warns against scraping React state or improvising selectors. It also states the server never handles credentials, adding important security context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is somewhat long but front-loaded with the main purpose. It includes necessary instructions, but some sentences could be more concise.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (no output schema, 3 params), the description provides enough context: it explains the output format (normalized prices, DOM-extracted cards), the requirement for a session, and behavioral constraints. It is complete for an agent to use effectively.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already explains parameters. The description adds value by explaining that the cards parameter comes from DOM extraction, but does not add significant new meaning beyond schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it returns frequently purchased products with normalized prices and Jumbo Prime price. It distinguishes itself by being the base for building the user's actual purchase list, differentiating from siblings like get_saved_lists or build_list.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides context that it requires a session and uses a browser snippet, and its purpose is explained. However, it does not explicitly state when to use this tool versus alternatives like get_saved_lists or when not to use it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_offersOfertas vigentesA

Lista las ofertas vigentes del supermercado (precio rebajado: price vigente vs listPrice normal). Filtrable por categoría (ej. "Despensa", "Lácteos") y por sucursal (branchId). El precio socio exacto se consulta con get_product (memberPrice). Nota: primeOnly (ofertas exclusivas socios) ya no está disponible en Jumbo — el landing dedicado fue discontinuado; devuelve un error accionable.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPágina de resultados.
limitNoMáximo de resultados (1-50).
storeNoCadena. jumbo (colecciones verificadas). santaisabel: aún sin colección de ofertas.jumbo
branchIdNoCódigo de sucursal para precios locales, ej. "jumboclj512".
categoryNoCategoría para filtrar, ej. "Despensa". Omitir para todas.
primeOnlyNotrue = solo ofertas exclusivas de socios Jumbo Prime. Discontinuado por Jumbo (2026-07): devuelve error accionable.

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden. It discloses the discontinued primeOnly behavior and the actionable error, explains the price semantics, and clarifies filter scope. It does not mention pagination or response format, but the core behavioral traits are well-covered for a list tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three sentences, each adding critical information: the core function and price definitions, filtering options and sibling pointer, and the discontinued flag. There is no redundancy or filler, and the most important details are front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given there is no output schema and no annotations, the description covers the essential context: what an offer is, how to filter, which store is unsupported, and the deprecated parameter. It lacks explicit guidance on default behavior when branchId is omitted, but that is minor since the schema marks it optional. The description is sufficiently complete for an agent to select and invoke the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3. The description goes beyond by providing concrete examples for category ('Despensa', 'Lácteos'), branchId ('jumboclj512'), and clarifying that primeOnly returns an error. It adds semantic value to the parameters, making the schema more actionable.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool lists current supermarket offers, distinguishing between discounted price (`price`) and normal price (`listPrice`). It explicitly differentiates from sibling tools by noting that exact member pricing is obtained via get_product (`memberPrice`), and it clarifies the scope and filtering options. This is a specific verb+resource combination that stands apart from other tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit guidance: it names get_product as the alternative for member pricing, warns that primeOnly is discontinued, and notes that Santa Isabel has no offers collection yet. This tells the agent when to use this tool and when to use another, with concrete exclusions and alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_productDetalle de productoA

Obtiene el detalle completo de un producto: precio vigente (price), precio normal (listPrice), precio socio Jumbo Prime (memberPrice) cuando existe, precio por unidad (unitPrice/unit), EAN, stock y oferta. Es la única fuente del precio socio en fase 1. Acepta la URL del producto (campo url de search_products), el path o el slug.

ParametersJSON Schema
NameRequiredDescriptionDefault
storeNoCadena: jumbo (precio Prime) o santaisabel (precio socio, sucursal por defecto o vía branchId).jumbo
idOrUrlYesURL completa, path ("/arroz-.../p") o slug del producto. Usar el `url` devuelto por search_products.
branchIdNoSucursal para el precio local. Santa Isabel: nombre de tienda (ej. "pedrofontova"); por defecto usa una sucursal céntrica.

TDQS

A4.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description must disclose behavior. It lists return fields but doesn't mention side effects, auth requirements, or error handling. Adequate but not thorough.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences front-load the purpose and list key fields. Every sentence adds value, no redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema, but description covers all return fields and parameters adequately. Provides complete picture for a product detail tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, but description adds context: explains idOrUrl accepts URL, path, or slug; store enum values; branchId for local prices. Goes beyond schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states it gets complete product details, lists specific fields (price, listPrice, memberPrice, etc.), and distinguishes from search_products which returns URLs.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says it's the only source for member price in phase 1 and that it accepts URLs from search_products. Implies it's for detailed product information but doesn't explicitly exclude other use cases.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_saved_listsListas guardadas del usuarioA

Devuelve las listas de compra guardadas del usuario en la cadena, normalizadas a { id, name, items[] }. Requiere sesión: ejecuta el browserSnippet (GET /lists) en una pestaña YA LOGUEADA de www.jumbo.cl y pásame el JSON en rawLists. Para el detalle con items, repite el fetch a /lists/{scope}/{idList}. NO rasques el DOM ni React; es una llamada JSON directa. El servidor nunca maneja credenciales.

ParametersJSON Schema
NameRequiredDescriptionDefault
storeNoCadena. Fase 2: jumbo.jumbo
branchIdNoSucursal de la sesión, ej. "jumboclj512".
rawListsNoJSON crudo de las listas del usuario (una lista con items[], o un arreglo de listas) que obtuvo el navegador.

TDQS

A3.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries full burden. It discloses the need for a logged-in session, direct JSON call, prohibition of DOM scraping, and that the server never handles credentials. This provides substantial behavioral context despite limited annotation support.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is adequately structured with purpose first, then instructions. However, it is somewhat verbose, mixing instructions with warnings. It could be more concise while retaining key information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description explains the user workflow, expected input format, and normalization of output. It also warns against scraping. Given the tool's complexity (external session), it covers most contextual needs, though error handling and edge cases are absent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with descriptions for store, branchId, and rawLists. The description adds operational context (e.g., rawLists comes from a browserSnippet) but does not significantly deepen parameter meaning beyond what the schema already provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it returns saved shopping lists normalized to { id, name, items[] }. It provides a specific verb and resource. However, it does not explicitly distinguish this tool from siblings like get_frequent_purchases, which could be a similar retrieval tool.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains the required session and browser workflow, implying when to use it (when lists are needed). However, it lacks explicit when-not-to-use or comparison to alternative tools, leaving some ambiguity about exclusivity.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_productsBuscar productosA

Busca productos en el catálogo de un supermercado chileno y devuelve resultados enriquecidos: name, brand, description, imageUrl, url. Precios en CLP: price es el precio vigente (con oferta si la hay), listPrice el normal cuando hay descuento, unitPrice/unit el precio por unidad base (kg/lt/un) para comparar formatos. Filtros opcionales: maxPrice/minPrice (CLP), inStockOnly; orden con sortBy (price = más barato primero, unitPrice = mejor precio por kg/lt). Con branchId (sucursal) los precios/stock son de esa tienda. Para el precio socio de un producto puntual, usar get_product.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPágina de resultados.
limitNoMáximo de resultados (1-50).
queryYesTexto de búsqueda, ej. "leche descremada" o "arroz grado 1".
storeNoCadena donde buscar: jumbo, santaisabel, unimarc, tottus o lider. unimarc/tottus/lider requieren IP residencial (la máquina del usuario).jumbo
sortByNoOrden: relevance (default), price (más barato primero) o unitPrice (mejor precio por kg/lt).relevance
branchIdNoCódigo de sucursal para precios/stock locales, ej. "jumboclj512". Omitir para catálogo nacional.
maxPriceNoFiltra productos con precio vigente <= a este valor (CLP).
minPriceNoFiltra productos con precio vigente >= a este valor (CLP).
browserHtmlNoLíder y Tottus: HTML de la página de búsqueda (o el JSON de __NEXT_DATA__) obtenido en un navegador real que ya pasó el antibot. Si se entrega, se parsea eso en vez de hacer el fetch (que la cadena bloquea por fingerprint del cliente). Flujo: llamar sin browserHtml → se devuelve openUrl+browserSnippet → ejecutarlo en el navegador → reintentar con browserHtml.
inStockOnlyNotrue = solo productos con stock real.

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Despite no annotations, the description explains key behaviors: price fields (price, listPrice, unitPrice), currency (CLP), local vs national scope with branchId, store-specific IP requirements, and the browserHtml flow. It does not mention rate limits or caching, but covers most critical aspects.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but well-organized, starting with purpose, then output fields, filters, sorting, and special notes. It is concise given the wealth of information, though slightly longer than ideal.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description enumerates output fields and explains price behavior. It mentions pagination parameters but does not detail total results or next-page handling. It references a sibling tool and store-specific quirks, providing sufficient context for a search tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, but the description adds significant extra meaning: it explains the output fields, price semantics, sorting logic (price: cheapest first, unitPrice: best per unit), filter effects, and the browserHtml retry mechanism. This goes well beyond the schema descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it searches products in a Chilean supermarket catalog and returns enriched results. It distinguishes from the sibling tool `get_product` for specific product price, providing a clear boundary.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly tells when to use this tool for broad search and when to use `get_product` for a single product's price. Also notes store-specific requirements (e.g., residential IP for some chains) and provides a workflow for handling antibot with `browserHtml`.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

suggest_swapsSugerir reemplazos convenientesA

Para cada ítem (nombre de producto o texto de búsqueda) sugiere reemplazos convenientes dentro del mismo catálogo. Por defecto: mejor precio por unidad (kg/lt/un) que el match actual. Con preferNatural: true cambia el criterio a 'más natural manteniendo el precio': trae alternativas de precio similar CON sus ingredientes y sellos nutricionales, para elegir la de lista de ingredientes más corta/limpia sin subir el gasto (usa la ficha; hoy Jumbo y Santa Isabel). Devuelve el producto actual y los reemplazos con su ahorro por unidad.

ParametersJSON Schema
NameRequiredDescriptionDefault
itemsYesProductos a optimizar, por nombre (ej. "Arroz Grado 1 Tucapel 1 kg") o búsqueda ("arroz").
storeNoCadena: jumbo, santaisabel, unimarc, tottus o lider.jumbo
branchIdNoCódigo de sucursal para precios locales, ej. "jumboclj512".
preferNaturalNotrue = prioriza alternativas más naturales (menos ingredientes) a precio similar, con ingredientes incluidos.

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description bears full burden. It discloses return contents (current product and replacements with savings per unit), natural mode details (ingredients, nutritional seals), and store support. It omits rate limits or authentication, but the read-only nature is clear.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single paragraph that efficiently conveys all key points: purpose, default behavior, optional mode, stores supported, and output. It is front-loaded with the main action. Could be slightly better structured (e.g., bullet points for modes) but is concise and complete.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema, the description adequately specifies return values (current product, replacements, savings per unit). Parameters are fully explained. It does not cover error cases or edge conditions, but for a simple suggestion tool, the information is sufficient for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, but the description adds significant nuance: it explains the purpose of items (product name or search text), store enum values, branchId for local prices, and preferNatural's detailed behavior (more natural with similar price, includes ingredients). This enhances understanding beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's function: to suggest convenient replacements for items within the same catalog. It specifies two modes (price-based and natural-preference) and differentiates from sibling tools like search_products and get_product.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear guidance on default usage (best price per unit) and alternative usage with preferNatural: true for natural alternatives. It lacks explicit exclusions or alternatives, but the context is sufficient for an agent to decide when to use this tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 1 tool updatev1.4.7
    • Changedget_offers1 field changed
      • changedInput schema / properties / primeOnly / description
        Previous value: -"true = solo ofertas exclusivas de socios Jumbo Prime."New value: +"true = solo ofertas exclusivas de socios Jumbo Prime. Discontinuado por Jumbo (2026-07): devuelve error accionable."
  2. 1 tool updatev1.4.5
    • Changedadd_to_cart1 field changed
      • changedInput schema / properties / items / items / properties / skuId / description
        Previous value: -"id del producto (skuId / data-cnstrc-item-id)"New value: +"ID del ítem del carro: usa el campo `id` de search_products, no el campo `sku` (que es la referencia comercial)."
  3. 2 tool updatesv1.4.3
    • Addedbuild_cheapest_basket
    • Changedsearch_products1 field changed
      • addedInput schema / properties / browserHtml
        Added value: +{
        +  "description": "Líder y Tottus: HTML de la página de búsqueda (o el JSON de __NEXT_DATA__) obtenido en un navegador real que ya pasó el antibot. Si se entrega, se parsea eso en vez de hacer el fetch (que la cadena bloquea por fingerprint del cliente). Flujo: llamar sin browserHtml → se devuelve openUrl+browserSnippet → ejecutarlo en el navegador → reintentar con browserHtml.",
        +  "type": "string"
        +}
  4. 3 tool updatesv1.2.0
    • Changedbuild_list1 field changed
      • addedInput schema / properties / maxBudget
        Added value: +{
        +  "description": "Presupuesto máximo en CLP. Si el total lo supera, baja a alternativas más baratas (sin tocar tus frecuentes) y, si aún se pasa, sugiere qué quitar. No elimina ítems solo.",
        +  "exclusiveMinimum": 0,
        +  "type": "integer"
        +}
    • Addeddiscover_branch
    • Changedget_cart1 field changed
      • changedInput schema / properties / rawCart / description
        Previous value: -"JSON crudo de GET /cart que obtuvo el navegador del usuario."New value: +"JSON crudo de GET /cart que obtuvo el navegador ejecutando el browserSnippet."
  5. 12 tool updatesv1.0.0
    • First observedadapter_status
    • First observedadd_to_cart
    • First observedbuild_list
    • First observedcompare_stores
    • First observedfind_opportunities
    • First observedget_cart
    • First observedget_frequent_purchases
    • First observedget_offers
    • First observedget_product
    • First observedget_saved_lists
    • First observedsearch_products
    • First observedsuggest_swaps

TDQS

A4.3/5.0
Disambiguation4/5

Most tools have distinct purposes, but there is potential confusion between `find_opportunities` and `get_offers` (both deal with discounts) and between `build_cheapest_basket` and `compare_stores` (both compare across stores). However, descriptions clarify the differences.

Naming Consistency5/5

All tools follow a consistent `verb_noun` snake_case pattern (e.g., `search_products`, `get_cart`, `build_list`). No mixing of conventions.

Tool Count5/5

14 tools is appropriate for a grocery shopping assistant, covering search, product details, list building, price comparison, cart management, offers, and saved lists without being overwhelming.

Completeness5/5

The tool set covers the full shopping workflow: search, details, list optimization, price comparison, cart operations, offers, saved lists, and branch discovery. Missing explicit cart removal and list deletion, but these are minor gaps.

Maintenance

ActivityNo data
ResponsivenessWithin a week

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    C
    maintenance
    Enables AI assistants to search products, compare prices, and find the best deals across multiple supermarkets in Argentina through Superprecio's price comparison API. Transforms Claude into an expert shopping assistant for Latin American grocery shopping.
    15
    14
    MIT
  • F
    license
    A
    quality
    D
    maintenance
    Enables AI assistants to track global food prices, search products by barcode or name, and compare costs across 27 countries. It provides tools for real-time price scraping and data aggregation from major international supermarket chains.
    8
    4
    -
  • F
    license
    Not graded
    quality
    D
    maintenance
    Enables cross-store price comparison and recipe-driven cart automation for Israeli grocery stores Shufersal and Tiv Taam, with an extensible architecture for additional stores.
    -

Appeared in Searches

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/NLACE-COM/mcp-supermercados-cl'

If you have feedback or need assistance with the MCP directory API, please join our Discord server