Pokemon TCG Restock Alerts - bujusjujus
oficialAlertas de reabastecimiento de Pokémon TCG en minoristas de EE. UU.: lanzamientos recientes, consultas de MSRP, horarios de reabastecimiento y webhooks firmados.
¿Qué puedes hacer con Pokemon TCG Restock Alerts Bujusjujus MCP?
- Consultar el stock actual — Pregunta qué productos de Pokémon TCG acaban de llegar a stock, filtrando por minorista, nombre del producto o margen máximo sobre el MSRP.
- Esperar un lanzamiento específico — Mantén un long-poll hasta que llegue una alerta coincidente, como una Pitch Black Elite Trainer Box a MSRP.
- Consultar el MSRP — Obtén el MSRP de los productos que coincidan con una consulta para juzgar si un precio listado es justo.
- Comparar la actividad de los minoristas — Consulta los recuentos de lanzamientos por minorista en una ventana elegida para evaluar qué tiendas han estado reponiendo stock.
- Explorar lanzamientos recientes — Obtén el historial de alertas de todos los tipos, filtrando por minorista, ventana temporal o confianza.
- Configurar un webhook firmado — Registra un endpoint HTTPS para recibir cada alerta coincidente como un POST firmado en lugar de hacer polling.
Servidor MCP alojado
npx add-mcp 'https://bujusjuj.us/mcp'Se instala en Claude Code, Codex, Cursor y más
Documentación
La API de reabastecimiento de Pokemon TCG para tiendas, apps y agentes de IA
Las mismas alertas de reabastecimiento en tiempo real que reciben los suscriptores de nuestra app, como datos sobre los que puedes construir: qué acaba de llegar a stock y dónde, su precio frente al MSRP, y cuándo suele reabastecer cada minorista. Conecta un agente de IA mediante el Model Context Protocol, llámalo desde tu propio código, o recibe webhooks firmados en tu servidor.
- Tiempo real. En el plan Live, las alertas llegan aproximadamente un segundo después de detectarse — en el mismo momento en que las reciben los suscriptores de nuestra propia app, sin retención. El plan Reference gratuito devuelve las mismas filas cinco minutos después.
- Diseñado para agentes. Cada alerta incluye un enlace al minorista, precio, MSRP, margen y un indicador
confidencepara que tu agente pueda distinguir un avistamiento confirmado de un informe no verificado. - Tres formas de consumirlo. Pregunta qué hay en stock ahora, mantén un long-poll hasta la próxima bajada que coincida, o recibe un POST de webhook firmado.
- Cobertura. Target, Walmart, Best Buy, Amazon, Pokémon Center, Sam's Club, Hot Topic, GameStop, Costco y Macy's.
Obtén una clave gratuita Plan Live — 29,99 $/mes
Las claves gratuitas se emiten al instante. Sin llamadas comerciales, sin esperas.
Oferta de lanzamiento: 10 $ de descuento en tu primer mes de Live, aplicado automáticamente al pagar. Solo para nuevos clientes de Live, finaliza el 30 de noviembre.
Para quién es
Tiendas de cartas y vendedores
Fija el precio de tu estantería frente al retail con get_product_msrp y el margen de cada listado. Consulta qué grandes minoristas han estado reabasteciendo y cuándo con get_retailer_stats, para planificar tu propio stock y eventos. Publica un feed de "reabastecido en retail" en tu sitio o Discord para que los coleccionistas vuelvan a ti.
Desarrolladores y bots
Añade alertas de reabastecimiento a tu app, bot de Discord o sitio sin construir un monitor. Mantén un long-poll para la próxima bajada que coincida, o deja que enviemos cada alerta a tu servidor como un webhook firmado. Cada alerta lleva un enlace al minorista limpio, precio, MSRP, margen y un indicador de confianza.
Agentes de IA
Añade un servidor MCP y tu asistente podrá responder "¿hay algo en stock?", esperar un producto concreto a MSRP, o decir si un precio es justo. La configuración tarda un par de minutos en Claude Code, Cursor, VS Code o Claude Desktop.
Creadores y comunidades
Ejecuta un feed de reabastecimiento para tus seguidores con una clave Live, mostrado al menos cinco minutos después de cada alerta (el tiempo real para una audiencia está disponible por acuerdo). ¿Prefieres recomendar la API? El programa de creadores paga el 25% de cada suscripción que refieras.
Cómo funciona
| Endpoint | https://bujusjuj.us/mcp |
|---|---|
| Protocolo | MCP sobre Streamable HTTP (JSON-RPC 2.0). Versiones de protocolo 2025-06-18 y 2025-03-26. Sin estado: cada petición es independiente. |
| Autenticación | Authorization: Bearer bjs_… en cada llamada a herramienta. initialize, tools/list y ping también responden sin clave, para que puedas explorar el servidor antes de registrarte. |
| Herramientas | 9 — consulta Herramientas |
| Webhooks | Opcionales, firmados con HMAC-SHA256 — consulta Webhooks |
Inicio rápido
1. Obtén una clave
Ve a bujusjujus.com/api-access, introduce tu correo y abre el enlace que te enviamos. Tu consola de desarrollador está ahí: toma una clave Reference gratuita de inmediato, o suscríbete a Live. No necesitas una cuenta primero — la crearemos nosotros.
Una clave tiene el aspecto de bjs_ seguido de 43 caracteres. Se muestra una sola vez; solo almacenamos un hash, así que guárdala en un lugar seguro. ¿Perdiste una? Revócala en la consola y genera otra.
2. Conecta tu agente
Claude Code
claude mcp add --transport http bujusjujus https://bujusjuj.us/mcp \
--header "Authorization: Bearer $BUJUS_API_KEY"
Cualquier cliente MCP que admita servidores HTTP remotos con cabeceras personalizadas (los nombres exactos de archivo y clave varían según el cliente):
{
"mcpServers": {
"bujusjujus": {
"type": "http",
"url": "https://bujusjuj.us/mcp",
"headers": { "Authorization": "Bearer bjs_YOUR_KEY" }
}
}
}
Para un cliente que solo ejecuta servidores locales (stdio), conéctalo con npx mcp-remote https://bujusjuj.us/mcp --header "Authorization: Bearer bjs_YOUR_KEY".
Las instrucciones paso a paso para Claude Desktop, Claude Code, Cursor y VS Code están en la guía de configuración. Los ejemplos ejecutables (Node, webhooks en Python, un feed de Discord) están en GitHub.
3. Pregunta
"¿Qué productos Pokemon están en stock ahora mismo?" · "Avísame en el momento en que una Pitch Black Elite Trainer Box baje a MSRP." · "¿Es 65 $ un precio justo para esa caja?"
O llámalo directamente
Cada llamada es un JSON-RPC POST. Los resultados de las herramientas vuelven como texto JSON en result.content[0].text.
curl -s https://bujusjuj.us/mcp \
-H "Authorization: Bearer $BUJUS_API_KEY" \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call",
"params":{"name":"get_in_stock_now","arguments":{"minutes":30}}}'
get_in_stock_now arriba es una herramienta Live. Con una clave Reference gratuita responde tier_required — prueba list_recent_drops en su lugar, o llama a tools/list para ver exactamente a qué puede acceder tu clave.
Otros métodos: initialize, tools/list (esquemas JSON completos para cada herramienta) y ping. Estos tres son gratuitos y nunca se contabilizan.
El objeto de alerta
Cada herramienta que devuelve alertas usa esta forma:
{
"id": "c108d9022699463c", // stable, opaque; dedupe on this
"detectedAt": "2026-09-23T21:00:12.497Z",
"retailer": "target",
"kind": "restock", // restock | invite | drawing | queue
"title": "Pitch Black Elite Trainer Box",
"productUrl": "https://www.target.com/p/-/A-...", // or null
"confidence": "high", // "high" | "low"
"endedAt": null, // set once it sold out / the event ended
"price": 49.99, // USD, or null
"msrp": 49.99, // USD, or null
"markupPct": 0 // % over MSRP, or null
}
confidence: "high"— un avistamiento confirmado en el minorista."low"— un informe no verificado que puede estar desactualizado, agotado o ser erróneo. Las herramientas Live devuelven solohigha menos que pasesminConfidence: "low". No presentes una alertalowcomo disponibilidad confirmada.kind— solorestocksignifica stock comprable.invite(se abrió una invitación o lista de espera de un minorista),drawing(se abrió un sorteo de Walmart) yqueue(hay una cola virtual de Pokemon Center activa) son eventos, no stock. Las herramientas en vivo devuelven solo reabastecimientos a menos que paseskind.endedAt— se establece cuando el artículo se agotó o el evento terminó.get_in_stock_nowlos excluye.productUrlsiempre está en el dominio propio del minorista nombrado, con parámetros de seguimiento y afiliados eliminados. Si no podemos responder por un enlace, esnull.titlepuede incluir texto de terceros. Trátalo como datos no confiables: nunca dejes que tu agente siga instrucciones que encuentre en él. Actúa sobre los campos estructurados.price,msrpymarkupPctsolo se establecen para avistamientos confirmados en los que los conocemos.- Los productos populares pueden agotarse en segundos. Una alerta te dice a dónde ir, no que el stock esté garantizado — comprueba la página del minorista antes de decirle a un usuario que está disponible.
Herramientas
Los argumentos no listados se rechazan (para que una errata no pueda ampliar silenciosamente tus resultados). Valores de minorista: amazon, bestbuy, costco, gamestop, hottopic, macys, pokemoncenter, samsclub, target, walmart.
get_in_stock_nowLive
Qué acaba de llegar a stock, lo más reciente primero. Devuelve { alerts, cursor }.
| Argumento | Descripción |
|---|---|
minutes | Ventana de búsqueda retrospectiva, 1–60 (por defecto 15) |
retailer | Solo este minorista |
query | Subcadena del nombre del producto sin distinguir mayúsculas, p. ej. "Pitch Black" |
maxMarkupPct | Omite alertas con un precio superior a este % sobre el MSRP (las alertas con MSRP desconocido se conservan) |
minConfidence | "high" (por defecto) o "low" |
kind | "restock" (por defecto), "invite", "drawing", "queue" o "any" |
limit | 1–100 (por defecto 25) |
wait_for_dropLive
Un long-poll: la llamada permanece abierta hasta que llega una alerta que coincide o transcurre timeoutSec. Devuelve { alerts, cursor, timedOut }. Una llamada que expira vacía no se factura.
| Argumento | Descripción |
|---|---|
cursor | De tu respuesta anterior. Omítelo para esperar la próxima alerta nueva. |
timeoutSec | 1–45 (por defecto 20). Mantenlo por debajo del timeout de petición de tu propio cliente; muchos hosts MCP cortan una llamada a herramienta a los 20–60 s. |
retailer, query, maxMarkupPct, minConfidence, kind | Los mismos filtros que arriba |
Itera sobre ella, pasando siempre de vuelta el cursor devuelto, para no perder ni repetir nunca una alerta:
let cursor;
for (;;) {
const r = await callTool('wait_for_drop', { cursor, query: 'Pitch Black', maxMarkupPct: 10, timeoutSec: 20 });
cursor = r.cursor;
for (const alert of r.alerts) act(alert); // dedupe on alert.id
}
Se pueden tener abiertas hasta 5 esperas por clave a la vez.
timeoutSec no es un retraso: una alerta que coincide vuelve aproximadamente un segundo después de que la detectemos, sea cual sea el timeout. Solo es cuánto tiempo puede permanecer abierta una llamada. Si tu cliente abandona una llamada antes, no pierdes nada — vuelve a llamar con el mismo cursor y se devuelve todo lo que llegó mientras tanto. ¿Ejecutas un bot del lado del servidor? Usa set_webhook y te enviamos cada alerta en su lugar.
list_recent_dropsFree
Historial de alertas, lo más reciente primero, de todos los tipos. retailer, sinceHours (1–2160, es decir, hasta 90 días), minConfidence, kind, limit (1–200, por defecto 50).
search_tracked_productsFree
El catálogo de productos que seguimos, con MSRP. query, retailer, limit. Devuelve { name, retailer, msrp }. Esta es la lista seguida, no una comprobación de stock.
get_product_msrpFree
MSRP de los productos que coinciden con query (obligatorio). Los productos sin un MSRP conocido se omiten, así que un resultado vacío significa "desconocido", no "gratis". Usa nombres específicos ("Pitch Black Elite Trainer Box") — una consulta corta también coincide con packs y bundles.
get_retailer_statsFree
Recuentos de bajadas por minorista durante days (1–90, por defecto 30), el más activo primero. Incluye informes no verificados, así que léelo como actividad relativa.
set_webhook · get_webhook · remove_webhookLive
Registra, inspecciona o elimina tu webhook. Consulta más abajo.
Webhooks
Para un bot del lado del servidor que no debería mantener una conexión abierta. Registra un endpoint HTTPS por clave:
{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"set_webhook",
"arguments":{"url":"https://hooks.example.com/bujus","query":"Pitch Black","maxMarkupPct":10}}}
La respuesta incluye un secreto de firma (whsec_…), mostrado una vez. Llamar a set_webhook de nuevo reemplaza la URL y los filtros y emite un nuevo secreto. get_webhook muestra el estado, los fallos y el último error (nunca el secreto).
Qué enviamos
POST https://hooks.example.com/bujus
Content-Type: application/json
User-Agent: bujusjujus-alerts-webhook/1
X-Bujus-Signature: t=1790197212,v1=5b3f…
{"type":"alert","cursor":179019721200000,"sentAt":"2026-09-23T21:00:13.004Z","alert":{ …alert object… }}
- Responde con cualquier
2xxen un plazo de 5 segundos. No se siguen redirecciones. - Una entrega fallida se reintenta tras unos 5 s, 30 s y 2 min. Tras 20 entregas fallidas consecutivas el webhook se desactiva; llama a
set_webhookpara reactivarlo. - Tu URL debe ser pública
httpsen el puerto 443. Se rechazan las direcciones privadas, de loopback e internas. - Las entregas a un mismo webhook se envían de una en una, en orden. Si tu endpoint se retrasa más de 50 alertas, se descartan las más antiguas.
- Puedes cambiar tu webhook hasta 10 veces por hora. El secreto de firma se devuelve a lo que haya llamado a
set_webhook— si fue un asistente de IA, el secreto está en su conversación, así que rótalo desde un script antes de pasar a producción.
Verifica cada petición
La firma es HMAC-SHA256(secret, "<t>.<raw body>") en hexadecimal. Usa los bytes sin procesar de la petición, compara en tiempo constante y rechaza un t con más de 5 minutos de antigüedad.
// Node.js
const crypto = require('crypto');
function verify(secret, rawBody, header) {
const p = Object.fromEntries(header.split(',').map(kv => kv.split('=')));
if (Math.abs(Date.now() / 1000 - Number(p.t)) > 300) return false;
const want = crypto.createHmac('sha256', secret).update(\`${p.t}.${rawBody}\`).digest();
const got = Buffer.from(p.v1 || '', 'hex');
return got.length === want.length && crypto.timingSafeEqual(got, want);
}
# Python
import hmac, hashlib, time
def verify(secret: str, raw_body: bytes, header: str) -> bool:
p = dict(kv.split("=", 1) for kv in header.split(","))
if abs(time.time() - int(p.get("t", 0))) > 300:
return False
want = hmac.new(secret.encode(), p["t"].encode() + b"." + raw_body, hashlib.sha256).hexdigest()
return hmac.compare_digest(want, p.get("v1", ""))
Límites
| Límite | Valor |
|---|---|
| Cuota diaria | Live: 20.000 llamadas a herramientas por día UTC. Reference: 5.000. Las entregas de webhooks cuentan; los timeouts vacíos de wait_for_drop, initialize, tools/list y ping no. |
| Por clave | 120 peticiones por minuto |
| Por IP | 600 peticiones por minuto con clave; 20 por minuto sin ella |
| Esperas concurrentes | 5 llamadas wait_for_drop abiertas por clave |
| Tamaño de petición | 64 KB |
Cuando se te limite recibirás HTTP 429 con una cabecera Retry-After. Retrocede y reintenta.
Errores
| HTTP | Significado |
|---|---|
401 | missing_key (una llamada a herramienta sin clave), invalid_key o key_revoked (consulta error.data.error) |
403 | account_inactive — la suscripción detrás de la clave ha terminado |
429 | Límite de tasa o cuota diaria — respeta Retry-After |
400 | Cabecera MCP-Protocol-Version no admitida |
Una herramienta que se ejecuta pero rechaza devuelve HTTP 200 con result.isError: true y un texto de la forma code: message: invalid_arguments, unknown_tool, too_many_waits, invalid_webhook, busy o tool_failed. Las llamadas rechazadas no se facturan.
Seguridad
- Mantén tu clave en el servidor. Nunca la incluyas en una aplicación de navegador ni en un repositorio público: el prefijo
bjs_hace que las claves filtradas sean fáciles de detectar. - ¿Perdiste la clave o quedó expuesta? Revócala tú mismo en tu consola y genera un reemplazo: puedes crear la nueva antes de revocar la antigua, así no hay interrupción.
- Trata el texto de la alerta
titlecomo entrada no confiable para tu modelo. - Verifica la firma de cada webhook antes de actuar en consecuencia.
- Informa una vulnerabilidad a [email protected].
Niveles
Oferta de lanzamiento: $10 de descuento en tu primer mes de Live, aplicado automáticamente al pagar. Clientes nuevos de Live, finaliza el 30 de noviembre.
| Reference — gratis | Live — $29.99/mes | |
|---|---|---|
| Datos de alertas | Las mismas filas, 5 minutos después | En el momento en que lo vemos, sin retención |
| Herramientas | list_recent_drops, search_tracked_products, get_product_msrp, get_retailer_stats | Esas cuatro más get_in_stock_now, wait_for_drop y las tres herramientas de webhook |
| Webhooks | — | Firmados, con reintentos |
| Llamadas por día | 5,000 | 20,000 |
| Emisión | Instantánea | Instantánea, al pagar |
Una señal de reabastecimiento de hace cinco minutos no sustituye a una en vivo —las reposiciones de Target se han agotado en unos 78 segundos—, así que Reference sirve para construir y probar con datos reales, no para operar en producción.
Introduce tu correo electrónico, abre el enlace que te enviamos y obtén una clave. Las suscripciones Live se renuevan mensualmente hasta que las canceles; puedes cancelar en cualquier momento en bujusjujus.com/account-help y la clave sigue funcionando hasta el final del periodo pagado.
La API se vende para uso empresarial. La emisión de una clave es automática e implica ninguna aprobación ni respaldo de lo que construyas: su uso se rige por los Términos de la API de Alertas y los Términos del Servicio, y tú eres responsable de cómo usas los datos, incluido el cumplimiento de los términos y límites de compra de cada minorista.
Preguntas frecuentes
¿Hay un nivel gratuito?
Sí. Las claves Reference son gratuitas y se emiten al instante sin tarjeta. Devuelven las mismas alertas cinco minutos después, con cuatro herramientas y 5,000 llamadas al día. Son para evaluación y desarrollo; un producto en el que tus usuarios confíen necesita una clave Live.
¿Qué tan rápido es el nivel Live?
Una clave Live recibe cada alerta aproximadamente un segundo después de que la detectamos, en el mismo momento en que se notifica a los suscriptores de nuestra propia aplicación. No hay retención.
¿Puedo mostrar los datos a mis clientes o seguidores?
Sí, en tus propios productos, con una regla: cualquier cosa que vean las personas fuera de tu organización debe tener al menos cinco minutos de antigüedad respecto a la hora detectedAt de la alerta. Las alertas en tiempo real para tu audiencia requieren un acuerdo aparte; escribe a [email protected].
¿Qué aplicaciones de IA funcionan con esto?
Cualquier cliente MCP que pueda conectarse a un servidor HTTP remoto y enviar un encabezado Authorization, como Claude Code, Cursor y VS Code. Las aplicaciones que solo ejecutan servidores locales, como Claude Desktop, se conectan a través del puente mcp-remote. La guía de configuración en bujusjujus.com/api-setup tiene los pasos para cada una.
¿Puedo usarlo para comprar productos automáticamente?
No. La API entrega información, no compras. Nuestros términos prohíben usar los datos para compras automatizadas o para eludir los términos o límites de compra de un minorista.
¿Cuánto tiempo puedo conservar los datos?
Hasta 30 días, el tiempo que necesites para operar tu producto, y no como archivo histórico. Si tu licencia termina, elimínalos en un plazo de 7 días. La sección 4 de los Términos de la API de Alertas tiene los detalles.
¿Puedo obtener límites más altos, redistribución en tiempo real o una factura?
Sí. Escribe a [email protected] con lo que estás construyendo y lo configuraremos.
Soporte
Escribe a [email protected]: una persona real lo lee.