mcp-supermercados-cl
A local MCP server for searching products, comparing prices, and building optimized shopping lists across major Chilean supermarkets (Jumbo, Santa Isabel, Unimarc, Tottus, Líder). Operates 100% locally — no cloud deployment, uses your residential IP, and credentials never leave your browser.
Shopping List & Personalization
build_list– Convert a natural language shopping list into concrete catalog products, prioritizing frequent purchases, best unit price, and active offerssuggest_swaps– Recommend cheaper or more natural/clean-ingredient alternatives for list itemsget_frequent_purchases– Retrieve habitual purchases from your logged-in Jumbo session, including Prime member pricingget_saved_lists– Access your saved shopping lists from your Jumbo account
Cart Management (Jumbo)
add_to_cart– Add/update products in your Jumbo cart, returning a normalized cart summary (total, savings, Prime savings)get_cart– Normalize your current Jumbo cart into a summary with items, subtotal, total, and savings
Catalog & Product Search
search_products– Search any supported supermarket's catalog with filters for price range, stock availability, and sorting by price or unit price (per kg/lt)get_product– Get full product details including current price, list price, member price, unit price, EAN, stock, ingredients, and nutritional sealsget_offers– Browse active promotions, filterable by category and Prime-only dealsfind_opportunities– Discover products with the highest current discounts in stock, sorted by discount percentage
Comparison & Diagnostics
compare_stores– Estimate the total cost of a shopping list across multiple chains and identify the cheapest optionadapter_status– Check which supermarket adapters are currently online and their response latency
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@mcp-supermercados-clCompara precio de leche entera en Jumbo y Lider"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
🛒 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.
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 buildY 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 |
| Convierte una lista en lenguaje natural en productos concretos. Prioriza tus frecuentes, mejor precio por unidad y ofertas. Flags |
| Reemplazos convenientes por precio por unidad. Con |
| Tus productos habituales, con precio Prime (requiere sesión). |
| Tus listas guardadas (requiere sesión). |
| Deja la lista en el carro de Jumbo; total, ahorro y ahorro Prime. |
Lectura de catálogo:
Tool | Qué hace |
| Busca en cualquier cadena. Filtros |
| Detalle por URL/slug: precio socio, EAN, ingredientes y sellos nutricionales. |
| Ofertas vigentes de Jumbo; |
| Mayores descuentos con stock, ordenados por |
Comparación y diagnóstico:
Tool | Qué hace |
| Total de una lista en varias cadenas; marca la más barata y advierte si compara formatos distintos. |
| Descubre tu sucursal (branchId) leyéndola del navegador, para no pedírtela a mano. |
| 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 sí 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 verificarSmoke 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:
launchPersistentContexttoma 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 chromiumLí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:
Manual:
search_productsdevuelveopenUrl+browserSnippet; abres esa búsqueda en tu navegador, ejecutas el snippet (lee__NEXT_DATA__del DOM) y reintentas pasando el resultado enbrowserHtml.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
envde tu cliente MCP):Variable
Requerida
Descripción
SUPERMERCADOS_PLAYWRIGHT_PROFILEsí
Carpeta del perfil de Chrome con tu sesión (
userDataDir). Activa el puente.SUPERMERCADOS_PLAYWRIGHT_PATHcon
npxCarpeta del paquete
playwrightcuando está instalado global (pornpxel server no lo resuelve solo). Valor: salida denpm root -g+/playwright.SUPERMERCADOS_PLAYWRIGHT_CHANNELno
chromeomsedgepara usar el navegador instalado (si no, el Chromium de Playwright).SUPERMERCADOS_PLAYWRIGHT_HEADLESSno
1para 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 apuntaSUPERMERCADOS_PLAYWRIGHT_PATHa su carpeta.NODE_PATHno sirve: el server carga Playwright conimport()(ESM) yNODE_PATHsolo aplica arequire()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_listycompare_storesemiten notificaciones de progreso MCP (notifications/progress) si el cliente las soporta, para no quedar en silencio durante listas largas.compare_storeslimita 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 endocs/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.
⚖️ Aviso legal
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
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- Flicense-qualityDmaintenanceProvides grocery price and nutritional information search capabilities, allowing AI agents to search for food products, compare prices, and analyze nutritional content across different grocery stores.Last updated1
- AlicenseAqualityCmaintenanceEnables 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.Last updated1514MIT
- FlicenseAqualityDmaintenanceEnables 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.Last updated84
- AlicenseAqualityAmaintenanceA Model Context Protocol server for real-time Swiss grocery shopping that searches and compares products across 8 major Swiss retailers (Migros, Coop, Aldi, Denner, Lidl, Farmy, Volgshop, Otto’s), normalizes per-unit prices, surfaces promotions, computes optimal multi-store shopping plans, and works with any MCP-compatible client without API keys or accounts.Last updated713524AGPL 3.0
Related MCP Connectors
Agent-native product catalog for AI shopping agents. 296M+ products, 28 countries.
Track prices & price history on any online shop, with alerts and an API
Search products, compare prices and discover deals across 6 European markets with your AI assistant.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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