Price Tracker MCP
Seguimiento de precios a lo largo del tiempo: registra puntos de precio por producto o servicio, observa tendencias y cambios porcentuales.
Documentación
mcp-price-tracker
Servidor MCP para seguimiento de precios, un rastreador de precios y vigilante de caídas de precios para páginas de tiendas. Consulta y vigila precios de productos en páginas de tiendas ordinarias.
Funciona con Claude Desktop, Claude Code, Cursor y cualquier cliente del Protocolo de Contexto de Modelos. Se ejecuta en tu propia máquina, o alojado sin instalación.
Página del producto: https://mcp.zovo.one/s/price-tracker — qué hace, las herramientas que expone y un endpoint de token en vivo.
Instalación
Alojado, nada que instalar. Obtén un token de https://mcp.zovo.one/mcp/connect (la página de conexión) o https://mcp.zovo.one/mcp/token (el mismo token como JSON); se emite uno anónimo gratuito al instante y una clave Pro funciona de la misma manera. Luego apunta un cliente MCP a https://mcp.zovo.one/mcp/price-tracker a través de streamable-http y envía el token como Authorization: Bearer <token>.
Si tu cliente no puede configurar cabeceras, coloca el token en la ruta en su lugar: https://mcp.zovo.one/mcp/price-tracker/t/<token>. Ambas formas funcionan. La URL desnuda sin token responde 401 en tools/call, por lo que el token no es opcional.
Claude Desktop, un clic. Descarga price-tracker.mcpb desde la última versión y haz doble clic en él.
Desde el código fuente. El espejo es autocontenido: cada dependencia de @theluckystrike/* está incluida, por lo que un clon nuevo se compila sin configuración adicional.
git clone https://github.com/theluckystrike/mcp-price-tracker.git
cd mcp-price-tracker
npm install && npm run build
Luego apunta tu cliente al punto de entrada compilado:
{
"mcpServers": {
"price-tracker": {
"command": "node",
"args": ["/absolute/path/to/mcp-price-tracker/dist/index.js"]
}
}
}
@theluckystrike/mcp-price-trackeraún no está publicado en npm, por lo que un comandonpx -y @theluckystrike/mcp-price-trackerfallará. Las tres rutas anteriores son las que funcionan y cada una es probada por CI.
![]()
Espejo de solo lectura de mcp-servers/servers/price-tracker. Ver MIRROR.md.
Destacado en Awesome MCP Servers — listado del directorio | endpoint alojado en vivo, nivel gratuito, sin registro.
Pregunta a tu asistente cuánto cuesta algo ahora mismo. Apúntalo a cualquier página de producto y leerá el precio de la página, lo recordará y te dirá la próxima vez si el precio se movió, cuánto, y si alcanzó el número que estabas esperando. Funciona en páginas de tiendas ordinarias leyendo los datos estructurados que la mayoría de las tiendas ya publican (JSON-LD, Open Graph, microdatos) y recurriendo al precio visible cuando no los tienen. Cuando un gran minorista bloquea las solicitudes automatizadas, lo dice claramente y te permite registrar el precio tú mismo para que el historial permanezca intacto. Todo se almacena en un archivo JSON en tu propia máquina.
Creado por theluckystrike.
En el Registro oficial de MCP (io.github.theluckystrike/price-tracker-drop-alert-watch).
Vigila cualquier página de producto para detectar caídas de precios desde el chat, sin servicio de scraping, sin cuenta, todo local.
Instalación en 60 segundos
La publicación en npm de @theluckystrike/mcp-price-tracker está pendiente. Hasta entonces, el paquete de un clic .mcpb o un clon+compilación
es la ruta que funciona, ambas verificadas a continuación.
Un clic (.mcpb): descarga price-tracker.mcpb desde la última versión y haz doble clic en él en Claude Desktop:
https://github.com/theluckystrike/mcp-servers/releases/latest
(claude_desktop_config.json):
{
"mcpServers": {
"price-tracker": {
"command": "npx",
"args": ["-y", "@theluckystrike/mcp-price-tracker"]
}
}
}
Claude Code:
claude mcp add price-tracker -- npx -y @theluckystrike/mcp-price-tracker
(.cursor/mcp.json):
{
"mcpServers": {
"price-tracker": {
"command": "npx",
"args": ["-y", "@theluckystrike/mcp-price-tracker"]
}
}
}
La forma npx anterior comienza a funcionar en el momento en que se publica el paquete. Hasta entonces, usa el paquete .mcpb anterior, o
compila desde el código fuente con exactamente estos tres comandos:
git clone https://github.com/theluckystrike/mcp-servers.git && cd mcp-servers
npm install
npm run build -w packages/mcp-license -w servers/price-tracker
Luego apunta el command de tu cliente a node con un argumento: la ruta absoluta a servers/price-tracker/dist/index.js.
Para ejecutar en modo Pro, establece MCP_LICENSE_KEY en el mismo bloque de configuración, o llama a license_activate una vez con tu clave.
Herramientas
| Herramienta | Qué hace |
|---|---|
price_check | Obtiene una página ahora; devuelve precio, moneda, título, confianza de extracción y el cambio con respecto a la última observación almacenada para esa URL. No se necesita vigilancia. |
watch_add | Comienza a rastrear una URL. Almacena la primera observación. Opcional label, target_price, currency. |
watch_list | Cada vigilancia con precio actual, mínimo, máximo, cambio, objetivo, confianza y fuente. |
watch_remove | Deja de rastrear, por id o url. |
watch_refresh | Vuelve a obtener una vigilancia (id) o todas (all: true); agrega observaciones y devuelve actual, anterior, mínimo, máximo, % de cambio y banderas de objetivo alcanzado. Esto es lo único que verifica precios. |
price_history | Observaciones almacenadas para una vigilancia, de más antigua a más reciente, opcional limit. |
price_add_manual | Registra un precio que leíste tú mismo, para tiendas que bloquean bots. Crea la vigilancia si es necesario. |
alerts_pending | Vigilancias cuyo último precio está en o por debajo del objetivo, o que cayeron 5% o más desde la observación anterior. Gratis. |
license_status | Gratis o Pro, y dónde actualizar. |
license_activate | Activa una clave Pro. Verificada sin conexión. |
Recurso: prices://watches - JSON de cada vigilancia con su último precio.
Indicación: check_prices - actualiza cada vigilancia y resume las caídas y objetivos alcanzados en un solo comando.
Lo que puedes decir
| Tú dices | Herramienta |
|---|---|
| "¿Cuánto cuesta esto ahora: <url>?" | price_check |
| "Vigila esa página y avísame si baja de 40." | watch_add |
| "Muéstrame todo lo que estoy vigilando y si algo bajó." | watch_refresh (todo) luego watch_list |
| "Deja de rastrear ese portátil, lo compré en otro lugar." | watch_remove |
| "Actualiza mis vigilancias." | watch_refresh |
| "¿Cuál es el historial de precios de la estantería que estoy vigilando?" | price_history |
| "Lo verifiqué yo mismo, es 39.99 GBP en tienda, regístralo." | price_add_manual |
| "¿Algo de lo que vigilo ha alcanzado su objetivo o ha bajado mucho?" | alerts_pending |
| "¿Estoy en el plan gratuito o Pro?" | license_status |
| "Aquí está mi clave de licencia, actívala." | license_activate |
Ejemplo práctico
Una ejecución real contra books.toscrape.com, desde docs/USER_VALUE_R2.md, con WebFetch/WebSearch
deshabilitados para que las propias herramientas del rastreador de precios tuvieran que responder:
You: What does this cost right now: https://books.toscrape.com/catalogue/...?
price_check { url: "https://books.toscrape.com/catalogue/..." }
-> price 51.77, currency GBP, source regex-fallback, confidence low
Assistant: GBP 51.77. Confidence: low (regex-fallback) -- this page has no
structured price data, so I read it from the visible text.
La etiqueta de confianza no es decoración: books.toscrape.com no lleva JSON-LD ni microdatos, por lo que este es
el único caso en las pruebas donde el respaldo de regex era la única ruta a un número, y el modelo transmitió la
etiqueta "baja" al usuario sin que se lo pidieran en lugar de afirmar 51.77 como un hecho.
Alertas: nada se ejecuta en segundo plano
No hay programador ni demonio. Una vigilancia es un historial almacenado, no una suscripción: los precios se vuelven a leer solo cuando se ejecuta watch_refresh, y alerts_pending informa sobre lo que ya está almacenado. El patrón de trabajo es decir "actualiza mis vigilancias" al inicio de una sesión (o ejecutar la indicación check_prices), y luego preguntar qué bajó.
Gratis vs Pro
| Gratis | Pro ($19 pago único) | |
|---|---|---|
price_check | Ilimitado | Ilimitado |
alerts_pending | Sí, ilimitado | Sí, ilimitado |
| Vigilancias | 3 | Ilimitadas |
| Historial por vigilancia | Últimas 30 observaciones | Historial completo |
watch_refresh un artículo | Sí | Sí |
watch_refresh todo a la vez | No | Sí |
price_add_manual | Sí | Sí |
| Verificación de redirección y confianza de extracción | Sí | Sí |
Obtener Pro - $19 por este servidor, $39 por todos los servidores, de por vida.
Cómo se leen los precios
En orden: JSON-LD Product/Offer (price, priceCurrency, lowPrice), microdatos itemprop="price", Open Graph og:price:amount / product:price:amount, meta itemprop, data-price atributos, pistas comunes de clase e id de precio (incluyendo el a-offscreen de Amazon), y finalmente un regex sobre el texto visible de los primeros 200 KB. Se entienden tanto los separadores europeos como los estadounidenses, por lo que 1.299,00 EUR y 1,299.00 USD ambos se convierten en 1299.00.
Los precios se almacenan como cadenas decimales en la unidad principal con un separador decimal . y sin agrupación, por ejemplo "1299.00". Las marcas de tiempo son ISO 8601 UTC.
Cada lectura lleva una confianza: high para JSON-LD, microdatos, meta itemprop y Open Graph; medium para atributos data-price y pistas de clase o id de precio; low para el respaldo de regex. Una lectura low en una página sin título de producto se informa pero nunca se almacena.
Cuando una página describe varios productos en JSON-LD (recomendaciones, "los clientes también compraron"), las ofertas de un producto nunca se combinan con las de otro: gana el producto cuyo nombre coincide con el título de la página; de lo contrario, el primer producto que lleva ofertas. Los precios tachados y anteriores (<s>, <del>, <strike>, y clases como old-price, was, compare-at-price, list-price, rrp) se omiten, por lo que un 199 tachado junto a un 99 en vivo informa 99. Un código ISO escrito junto al número ("$10 USD") gana sobre la moneda adivinada del dominio, y twitter:data1 - texto libre como "Envío gratis por más de $50" - no se lee como un precio.
Las páginas se obtienen con un User-Agent de navegador de escritorio, un tiempo de espera de 12 segundos, se siguen las redirecciones y un límite de cuerpo de 2 MB. Después de la obtención, la URL final se compara con la que pediste: si la tienda redirigió fuera de la ruta del producto - una profundidad de ruta diferente, una página de categoría o de inicio, o un título genérico como "Productos", "Inicio", el nombre de la tienda solo, o "no encontrado" - obtienes the shop redirected to <finalUrl>, which is not a product page en lugar del artículo más barato en el listado donde aterrizó. Una redirección que solo inserta un slug canónico delante del mismo id de producto o ruta (URLs estilo Newegg, Amazon /dp/, Zalando) se acepta, no se rechaza.
Cómo almacena datos
Las vigilancias y su historial de precios viven en un archivo JSON:
${XDG_DATA_HOME:-~/.local/share}/mcp-servers/price-tracker/watches.json. Cada mutación (watch_add,
watch_remove, watch_refresh, price_add_manual) ocurre bajo un archivo de bloqueo de asesoramiento,
.../price-tracker/.lock, mantenido durante el ciclo de cargar-mutar-guardar para que dos actualizaciones que se ejecutan a la vez no puedan
intercalarse. price_check y las herramientas de solo lectura no necesitan el bloqueo. Los guardados escriben en un archivo temporal y lo
renombran en su lugar, por lo que una escritura interrumpida no puede dejar un archivo a medio escribir. Para respaldar tu historial de
vigilancias, copia watches.json.
Solo un archivo faltante cuenta como "aún no hay vigilancias". Si watches.json existe pero no se puede leer o analizar, el
servidor nunca lo trata como vacío: los bytes ilegibles se mueven a watches.json.corrupt-<timestamp>, la
falla se escribe en stderr, y cada herramienta responde con un error que nombra ese archivo hasta que el servidor se
reinicia. Una base de datos dañada por lo tanto nunca puede ser sobrescrita silenciosamente por el próximo precio que registres.
Límites y advertencias honestas
- La tasa de extracción en el mundo real es aproximadamente 5 de 12 en una muestra mixta de grandes minoristas: cinco sitios
devolvieron un muro de bots 403 directo (H&M, Allegro, MediaMarkt, Home Depot, Etsy), uno agotó el tiempo de espera (Best
Buy), y el resto se dividió entre precios correctos y una lectura rechazada intencionalmente (una redirección fuera de
la página del producto). Esto es una propiedad de la web abierta, no un error que el servidor pueda arreglar; no hay
navegador sin cabeza ni solucionador de CAPTCHA aquí, por diseño (sin dependencias nativas, sin API de pago).
price_add_manuales la respuesta que funciona para una tienda bloqueada. - No hay trabajo en segundo plano. Nada verifica precios a menos que tú (o tu cliente, a través de un script
programado que ejecutes tú mismo) llames a
watch_refresh. Esto no es una característica faltante; un servidor stdio local no tiene por qué ejecutar un demonio en tu máquina. - El nivel gratuito limita las vigilancias a 3 y el historial a las últimas 30 observaciones por vigilancia;
price_checkyalerts_pendingson ilimitados en el nivel gratuito. - Una lectura de regex con confianza
lowaún se informa, pero nunca se trata silenciosamente como cierta; transmítela al usuario como una estimación, no como un hecho.
Solución de problemas
npxse cuelga o no encuentra el paquete: la publicación npm de este paquete está pendiente. Usa el paquete.mcpbo la ruta de clonar y compilar indicada arriba hasta que esté disponible.- Usar el paquete
.mcpb: se instala directamente en Claude Desktop; no hay un paso de configuración separado. - Usar la ruta de clonación: el binario del servidor es
servers/price-tracker/dist/index.jsdespués denpm run build. Apunta elcommandde tu cliente anodecon esa ruta absoluta como único argumento. - Versión de Node: requiere Node >= 18. Verifica con
node -v. - Una alerta siempre da error "no es una página de producto": la tienda te redirigió fuera de la URL que le diste (una página de categoría, página de inicio o un título genérico). Obtén la URL exacta del producto nuevamente desde la tienda y vuelve a agregar la alerta, o usa
price_add_manualsi la tienda sigue redirigiendo. - Una tienda devuelve 403 cada vez: está bloqueando solicitudes automatizadas. Esto es esperado para un subconjunto de grandes minoristas (ver Límites arriba); usa
price_add_manual. - No aparece nada / fallos silenciosos: los registros van solo a stderr, nunca a stdout. En Claude Desktop revisa Configuración -> Desarrollador -> el archivo de registro del servidor; en Claude Code revisa la terminal o
--mcp-debug.
Privacidad
Todos los datos permanecen locales, en ${XDG_DATA_HOME:-~/.local/share}/mcp-servers/price-tracker/watches.json. Las únicas solicitudes de red son a las páginas de producto que tú nombres. Las claves de licencia se verifican sin conexión; no se envía nada a ningún lugar.
Se combina con
- mcp-invoice, factura a un cliente por algo que compraste después de rastrear su precio.
- mcp-spreadsheet, exporta
price_historyy analízalo como una hoja de cálculo. - mcp-time-tracker, registra las horas que pasas comparando precios, si eso es facturable de alguna manera.
- office-suite, todos los servidores hermanos detrás de una sola instalación, una sola entrada de configuración.
- Guía: Observa el precio de un producto con Claude y recibe un aviso cuando baje
Preguntas frecuentes
No hay un programador en este servidor. Los precios solo se vuelven a leer cuando se ejecuta watch_refresh, lo cual ocurre cuando lo pides (o cuando un trabajo cron/launchd que configures tú mismo lo llama).
O la tienda devolvió una respuesta de muro anti-bots (403) o la solicitud se redirigió fuera de la página del producto hacia una página de listado, categoría o inicio. Ambos casos se informan honestamente en lugar de devolver un número incorrecto; usa price_add_manual para mantener el historial manualmente.
El precio provino de un respaldo de patrón de texto en lugar de los datos estructurados propios de la página (JSON-LD, microdatos, Open Graph). Generalmente es correcto, pero no se ha verificado contra un campo legible por máquina.
watch_add y price_add_manual aceptan un currency explícito, pero el número que almacenes debe coincidir con lo que realmente leíste; el servidor no convierte monedas.
No. Las únicas solicitudes salientes son a las URLs de producto que agregas, para obtener sus páginas. No hay telemetría ni cuenta.
Licencia MIT.
Usa estos documentos como un servidor MCP
Cualquier cliente MCP (Claude, Cursor, Windsurf, VS Code) puede leer la documentación de este repositorio directamente a través de GitMCP, sin instalación:
- URL de Docs MCP: https://gitmcp.io/theluckystrike/mcp-price-tracker