Juicebox MCP
Juicebox MCP
Un servidor MCP local que lee tus datos de Juicebox para Claude — búsquedas guardadas y sus resultados puntuados — usando tu propia sesión de Juicebox iniciada.
Se ejecuta por completo en tu máquina. Tu sesión nunca sale de ella, y cada llamada se realiza como tú, en tu propio asiento.
Leer no cuesta créditos de exportación. Todo lo que devuelven las herramientas de lectura proviene de
la misma superficie libre que la página de resultados de búsqueda ya renderiza. Una herramienta escribe, y lo dice:
jb_run_search crea una búsqueda guardada real en tu espacio de trabajo.
Instalación
Opción A — Extensión de escritorio (la más fácil)
Descarga juicebox-mcp.mcpb desde
Releases, haz doble clic,
o arrástralo a Claude Desktop → Ajustes → Extensiones.
No hay ninguna clave de API que pegar. Tras instalar, haz los pasos del navegador de una sola vez que vienen abajo.
Opción B — desde el código fuente
git clone https://github.com/jnot807/juicebox-mcp.git
cd juicebox-mcp
npm install # also downloads the Chromium build (see note)
npm run login # a real browser opens — sign in to Juicebox yourself
npm run check # proves the session works headlessDespués regístralo con Claude Code:
claude mcp add -s user juicebox -- node "$(pwd)/server.js"-s user lo hace disponible en cada sesión; sin él, el registro se
limita al directorio desde el que lo hayas ejecutado.
La descarga única del navegador
Esto maneja un Chromium real, y ese binario no forma parte de node_modules —
es una descarga única de unos 500MB a una caché compartida
(~/Library/Caches/ms-playwright en macOS).
npm install la consigue automáticamente mediante un paso post-instalado. La extensión
de escritorio necesita ejecutarlo una vez a mano, porque una extensión incluye node_modules
pero no esa caché:
npx patchright install chromiumSi falta, el servidor te lo dice en lenguaje normal en lugar de lanzar un stack trace sobre un ejecutable que falta.
Iniciar sesión
La autenticación es un inicio de sesión de verdad, no una clave. npm run login abre
una ventana del navegador; inicia sesión en Juicebox como harías normalmente. La sesión
queda entonces almacenada en session/ (gitignored, chmod 600) y se reutiliza sin cabeza.
Vuelve a iniciar sesión siempre que npm run check empiece a fallar.
Herramientas
Herramienta | Qué hace |
| Búsquedas guardadas en un proyecto (id y nombre). |
| Candidatos clasificados de una búsqueda: nombre, URL de LinkedIn, título, empresa, ubicación, |
| Tamaño de un filtro sin ejecutar la búsqueda: la primitiva de ajuste. |
| ESCRIBE. Crea y ejecuta una nueva búsqueda desde una solicitud en lenguaje natural, devuelve sus candidatos. Deja una búsqueda guardada visible a todo tu espacio de trabajo — confirma antes de usarla. |
experience[] es la única forma de ver empleadores anteriores: el payload de la API lleva
solo el mayor actual, sin él los exalumnos de una empresa objetivo son invisibles.
Qué proyecto lee por defecto
Nada está fijo. Al iniciar sesión, una sonda carga /projects, que redirige
a un proyecto que tu asiento puede ver, y ese id se guarda como defaultProjectId en
session/session-meta.json.
Se escribe una vez y luego se deja. La redirección sigue al proyecto
que la aplicación tuvo abierto más recientemente, así que confiar en él cada vez haría una llamada a herramienta
con el projectId que leer un proyecto distinto del que leyó ayer.
Orden de resolución:
JUICEBOX_PROJECT_ID(env — esto es lo que la opción "proyecto por defecto" opcional de la extensión de escritorio fija)JUICEBOX_VALIDATOR_PROJECT(env — también fija la verificación de auth a ese proyecto)defaultProjectIdensession/session-meta.json, fijada por descubrimiento
Cada herramienta tambien admite un projectId explícito, que siempre gana.
Los id de proyecto de Juicebox son claves de ~20 caracteres como c5PheL2fANnXu6BQVUdo — la
parte /project/<id>/ de una URL. Si pasas un UUID, el servidor lo rechaza con una
explicación en lugar de navegar en silencio a un proyecto que no existe.
Dos reglas que llevan las herramientas
verdictFound→ false→unknown`, nunca un negativo. "No hay evidencia" y "la evidencia dice que no" son veredictos distintos. Colapsarlos puntúa a un candidato por un criterio que nadie podía comprobar.Los términos de aptitud amplios diluyen la clasificación. Las aptitudes se ponderan con OR; un término amplio como "Gestión de cuentas" en una búsqueda de éxito de clientes infla el grupo por ~3.4×. Retira los términos genéricos y promueve contenido enduro el requisito a un filtro de aptitud.
Scripts mientras el servidor está en marcha
No se puede compartir el perfil del navegador: perfil de sesión/ es de un solo escritor y es el
servidor MCP lo mantiene cuando se está ejecutando. Otro proceso que intente abrirlo
falla el control de autenticación — que se reporta como "sesión expirada" y te hace
volver a iniciar sesión.
Para diagnosticar, construye un contexto reciente desde el punto de control. Misma cerradura, misma sesión:
const { chromium } = require('patchright');
const browser = await chromium.launch({ headless: true });
const context = await browser.newContext({ storageState: 'session/storage-state.json' });Cómo funciona, y las trampas
La página de resultados se renderiza del lado del servidor en la primera carga, así que /api/profiles/results solo
se dispara en interacción. El cliente empuja la página para que la app haga su propia
solicitud, y entonces captura la respuesta — que incluye el conjunto clasificado completo, no
solo la página visible.
Tres cosas que morderán a cualquería que edite client.js:
No uses nunca
addInitScript. Oculta en silencio no-op como medida anti-detección: sin error, el script no se ejecuta. Usapage.on('response').linkedin_URLdel API está cifrada (hex:hex), comoperfiles[].urlydetalles de url. Las URLs reales vienen de las tarjetas renderizadas y se unen enfull_namenormalizado. — medido al 100% en una búsqueda en vivo.La lista se vacía en medio de la paginación. Un paginador nulo significa "sigue moviéndote", no "fallaste". Depender del cambio de paginador durante la transición es cómo sucedieron dos bugs anteriores.
Cuándo se rompe
Esto va sobre el API interna de Juicebox. No hay un contrato de estabilidad, y puede cambiar sin previo aviso.
npm run difffalla →sesión expirada:npm run diff.El servidor dice que falta Chromium →
npx patchright install chromium.jb_get_resultsdevuelvesource: "dom-fallback"→ la captura de la API se rompió; pierdematchRateycriteria.
Comprueba que RESULTS todavía coincide con el caché.
jb_get_resultsinforma dejoinedLinkedInUrls: 0→ el marcado de la tarjeta cambió; revisaharvest/rewindToFirstPage.La lista de búsqueda vacía → el marcado de la página del proyecto cambió; ver
listSavedSearches.
Requisitos
Node.js 18 o más nuevo
Una cuenta de Juicebox en la que puedas iniciar sesión
~500MB de disco libre para la descarga de Chromium
Licencia
MIT. No asociado a Juicebox.# Juicebox MCP
Un servidor MCP local que lee los datos de Juicebox para Claude Code: búsquedas guardadas y resultados puntuados mediante tu propia sesión de Juicebox.
Se ejecuta completamente en tu máquina. Tu sesión nunca sale de ella, y cada llamada se hace como tú, en tu propio asiento.
Leer no cuesta créditos de exportación. Todo lo que devuelven las herramientas de lectura proviene de la misma superficie libre que la página de resultados de búsqueda ya renderiza. Una herramienta escribe, y lo dice: jb_run_search crea una búsqueda guardada real en tu área de trabajo.
Instalación
Opción A: extensión de escritorio (la más fácil)
Descarga juicebox-mcp.mcpb desde Releases, haz doble clic o arrástralo a Ayuda de Claude → Configuración.
No hay ninguna API key que pegar. Después de instalar, haz los pasos del navegador una sola vez aquí abajo.
Opción B: desde la fuente
git clone https://github.com/jnot807/juicebox-mcp.git
cd juicebox-mcp
npm install # also downloads the Chromium build (see note)
npm run login # a real browser opens — sign in to Juicebox yourself
npm run check # proves the session works headlessRegístralo con Claude Code:
claude mcp add -s user juicebox -- node "$(pwd)/server.js"-s user lo hace disponible en cada sesión; sin él, el alta estáá limitado al directorio desde el que lo ejecutes.
La descarga única del navegador
Esto controla un Chromium real, y ese binario no forma parte de node_modules — es una descarga única de unos 500 MB en una caché compartida (~/Library/Caches/ms-playwright en macOS).
npm install la obtiene automáticamente mediante un paso de post-instalación. Los usuarios de la extensión de escritorio necesitan ejecutarla manualmente una vez ; una extensión incluye node_modules pero no esa caché:
npx patchright install chromiumSi falta, el servidor te lo dice en lenguaje plano y no te lanza un stack trace por un binario ausente.
Iniciar sesión
La autenticación es un inicio de sesión real, no una clave. npm run login abre una ventana del navegador; inicia sesión en Juicebox como harías normalmente. La sesión se guarda en session/ (en gitignore, chmod 600) y se reutiliza de forma ciega.
Vuelve a iniciar sesión siempre que npm run check empiece a fallar.
Herramientas
Herramienta | Qué hace |
| Búsquedas guardadas de un proyecto (id + nombre). |
| Candidatos clasificados de una búsqueda: nombre, LinkedIn URL, cargo, empresa, ubicación, |
| Tamaño de un conjunto de filtros sin ejecutar la búsqueda — la primilla de ajuste. |
| ESCRIBE. Crea y ejecuta una nueva búsqueda desde un prompt en lenguaje natural, luego devuelve sus candidatos. Deja una búsqueda guardada visible para todo tu espacio de trabajo: confirma antes de usarla. |
experience[] es la única forma de ver empleadores anteriores: el payload de la API lleva solo el actual, por lo que exalumnos de la misma empresa son invisibles si no.
Qué proyecto lee por defecto
Nada está fijo incrustado. Al iniciar sesión, un probe carga /projects, que redirige a un proyecto que tu asiento puede ver, y ese id se guarda como defaultProjectId en session/session-meta.json.
Se escribe una sola vez y luego se deja. La redirección sigue al proyecto que más recientemente tenía la app abierta, así que un intento con cada projectId distinto leería un proyecto distinto del que leyó ayer.
Orden de resolución:
odio de proyecto(env — esto es lo que la extensión de escritorio "proyecto por defecto" fija)validación de proyecto(env — también fija la comprobación de auth a ese proyecto)defaultProjectIdensession/session-meta.json, fijado por descubrimiento
Cada herramienta también acepta un projectId explícito, que siempre gana.
Los ids de proyecto de son claves tipo ~20 caracteres como c5eP4fANnXU6oBQVUabs — el /project/<id>/ de una URL. Si pasas un UUID, el servidor te lo rechaza con una explicación en lugar de navegar en silencio a un proyecto que no existe.
Dos reglas que llevan las herramientas
verdictFound: false→unknown, nunca negativo. "No hay evidencia" y "la evidencia dice que no" son veredictos distintos. Colapsarlos puntúa a una candidata por un criterio que nadie pueede comprobar en realidad.Los términos de aptitud amplios diluyen el ranking. Los términos son ponderados con OR; una búsqueda de éxito de clientes con el término "Accounts" como el éxito de Gestión de cuentas pública infla el grupo por ~2×. Descarta los términos genéricos y promueve el requisito difícil a un filtro de aptitud.
Ejecutar scrpts mientras el servidor está en marcha
No puedes compartir el perfil de la sesión: perfiles/sesión/ es de un único escritor, el
servidor MCP lo mantiene siempre que se está ejecutando. Un segundo proceso que intenta abrirlo
falla la comprobación de auth — que se reporta como "sesión caducada" y te hace
dar vueltas al iniciar sesión.
Para diagnóstico, construye un contexto nuevo desde el punto de control. Mismo candado, misma sesión:
const { chromium } = require('patchright');
const browser = await chromium.launch({ headless: true });
const context = await browser.newContext({ storageState: 'session/storage-state.json' });Cómo funciona, y las trampas
La página se muestra desde el servidor en la primera carga, así que /api/profiles/results solo
se dispara en la interacción. El cliente conduce la página para que la app haga su
propia request, y el resultado capturarespuesta — que lleva la conjugada completa,
no solo la página visible.
Tres cosas que muerden a cualquiera que edite client.js:
1: Nunca uses addInitScript. Juicio silencion se no-op como
mediate anti-detección: sin script, no hay error. Usa page.on('response').
2: La URL de linkedin está cifrada (hex:hex), como
los url de perfiles[].url y perfil.detalles URL. Las URL reales vienen de las tarjetas
renderizados y por full_name normalizado — medido al 100% en una búsqueda en vivo.
3: La lista se blanca a mitad de paginación. Un pager nula significa "sigues en el medio",
no "falló". Bloquear cualquier cosa en pager-change durante una transición es
cómo pasaron dos errores anteriores.
4. Si jb_get_results devuelve src: "dom-fallback": la captura de API se rompió; pierdes matchRate y criteria. Comprueba que RESULTS sigue haciendo.
Cuenta la aplicación
Esto monta el interno API de Juicebox. No hay ningún estabilidad puede cambiar sin previo aviso.
npm run difffalló →sesión caducada:npm run diff.El servidor dice Chromium falta →
npx patchright install chromium.jb_get_resultsreturnssource: "dom-fallback"de la captura API se rompió; pierdesmatchRateycriteria. CompruebaRESULTStodavía coincide con la caché.jb_get_resultsreportajoinedLinkedInUrls: 0el marcado de la tarjeta cambió; revisaharvest/rewindToFirstPage.Lista de búsqueda vacía → el marcado de la pagina del proyecto cambió; revisa
listSearches.
Requisitos
Node.js 18 o más reciente
Una cuenta de Juicebox donde puedes iniciar sesión
hédes~ké500MB libres de disco para la descarga de Chromium
Licencia
MIT. No afiliado a Juicebox.# Juicebox MCP
Un servidor MCP local que lee sus datos de Juicebox en Claude Code — búsquedas guardadas y resultados puntuados— mediante su propia sesión de Juicebox iniciada.
Se ejecuta enteramente en su máquina. Su sesión nunca sale de ella, y cada llamada se hace como usted, en su propio asiento.
Leer no cuesta créditos de exportación. Todo lo que devuelven las herramientas de lectura proviene de la misma superficie lisa y libre que la página de resultados de búsqueda ya renderizada. Una herramienta escribe, y lo dice: jb_run_search crea una búsqueda guardada real en su espacio de trabajo.
Instalación
Opción A: Extensión de escritorio (la más fácil)
Descargue
juicebox-mcp.mcpbdesde Releases, haga doble clic o arrástrelo a Claude Desktop → Settings.
No hay ninguna clave API que pegar. Después de instalar, realice los pasos de navegador únicos que aparecen abajo.
Opción B: desde la fuente
git clone https://github.com/jnot807/juicebox-mcp.git
cd juicebox-mcp
npm install # also downloads the Chromium build (see note)
npm run login # a real browser opens — sign in to Juicebox yourself
npm run check # proves the session works headlessRegístrelo con Claude Code:
claude mcp add -s user juicebox -- node "$(pwd)/server.js"-s user lo hace disponible en cada sesión; sin él, el registro se
limita al directorio desde el que lo execute.
La descarga única del navegador
Esto conduce a un Chromium real, y ese binario no forma parte de node_modules:
es una descarga única de unos 500 MB en una caché compartida
(~/Library/Caches/ms-playwright en macOS).
npm install lo obtiene automáticamente mediante un paso de post-instalación. Los usuarios de la extensión de escritorio
deben ejecutarlo una vez a mano, porque una extensión incluye node_modules
pero no esa caché:
npx patchright install chromiumSi falta, el servidor se lo dice en lenguaje sencillo en lugar de lanzar un stack trace sobre un binario que falta.
Iniciar sesión
La autenticación es un inicio de sesión real, no una clave. npm run login abre
una ventana del navegador; inicie sesión en Juicebox como lo haría normalmente. La sesión se
almacena entonces en session/ (gitignored, chmod 600) y se reutiliza sin cabeza.
Vuelva a iniciar sesión cada vez que npm run check empiece a fallar.
Herramientas
Herramienta | Qué hace |
| Búsquedas guardadas en un proyecto (id + nombre). |
| Candidatos clasificados de una búsqueda: nombre, URL de LinkedIn, título, empresa, ubicación, |
| Tamaño de un filtro sin ejecutar la búsqueda — la primilla de ajuste. |
| ESCRIBE. Crea y ejecuta una nueva búsqueda desde un prompt en lenguaje natural, luego devuelve sus candidatos. Deja una búsqueda guardada visible en todo tu espacio de trabajo: confirma antes de usarla. |
experience[] es la única forma de ver empleadores anteriores: el payload de la API lleva
solo el actual, así que los alumni de una empresa sin ella son invisibles.
Qué proyecto lee por defecto
Nada está fijo incrustado. Al iniciar sesión, una sonda carga /projects, que redirige
a un proyecto que tu asiento pueda ver, y ese id se guarda como defaultProjectId en
session/session-meta.json.
Se escribe una vez y luego se deja. El redirige sigue al proyecto
sobre el que la app estuvo más recientemente abierto, por lo que confiar en él cada ejecución haría una
llamada de herramienta con projectId distinta del que leyó ayer.
Orden de resolución:
JUICEBOX_PROJECT_ID(env — es lo que el "campo de proyecto por defecto" de la extensión de escritorio fijó)JUICEBOX_VALIDATOR_PROJECT(env — también fija la comprobación de auth a ese proyecto)defaultProjectIdensession/session-meta.json, fijado por descubrimiento
Cada herramienta también toma un projectId explícito, que siempre gana.
Los ids de proyecto de Juicebox son claves tipo ~20 caracteres como c5TuB7nJWuVdo9LpPg1 — la
parte /proyecto/<id>/ de una URL. Si pasa un UUID, el servidor lo rechaza con
una explicación en lugar de aterrizar a un proyecto que no existe.
Dos reglas que llevan las herramientas
candidatoEncontrado: false→desconocido, nunca un negativo. "No se encontró evidencia" y "la evidencia dice que no" son veredictos distintos. Colapsarlos infravalora una candidata a un criterio que nadie realmente pudo chequear.Los términos de aptitud anchos diluyen la clasificación. Las aptitudes son ponderadas OR; una búsqueda de customer success con el término amplio term como "Account Management" en una búsqueda de management infla el pool por ~3.4×. Descarta los términos de gen y promueve en la correo the one hard requirement a un filtro de aptitud.
Ejecutar scripts mientras el servidor está activo
No se puede compartir el perfil de la sesión: session/ es de una sola escritora, el
servidor MCP lo mantiene abierto solo cada vez que se ejecuta. Un segundo proceso que lo intente
falla la comprobación de auth — que se reporta a sí misma como "sesión expirada" y te hace
dar vueltas iniciando sesión.
Para el diagnóstico, construya un contexto nuevo desde el punto de control. El mismo bloqueo, misma sesión:
const { chromium } = require('patchright');
const browser = await chromium.launch({ headless: true });
const context = await browser.newContext({ storageState: 'session/storage-state.json' });Cómo funciona, y las trampas
La ficha de la sesión se renderiza desde servidor en la primera carga, así que /api/profiles/results solo
se dispara en la interacción. El cliente empuja a la página para que la aplicación emita su
solicitud, y entonces capta la respuesta — que lleva el resultado clasificado completo, no
solo la página visible.
Tres cosas que muerden cualquiera que edite client.js:
Nunca uses
addInitScript.* Patches de forma sulfonosa lo ignora como si no pasara nada — no script; no error. Usapage.on('response').linkedin_urldel API está cifrado (hex:hex), búscalosurls[].urlyprofileDetails.url. Las URLs reales provienen de las tarjetas y se unen enfull_namenormalizado—medido al 100% en una búsqueda en vivo.La lista corta en medio de la paginación. Un paginador "no está trayendo" significa "sigue en movimiento", no "no resultado". El golpe de estado en la transición de la página es cómo pasaron dos bugs anteriores.
Cuándo se rompe
Está montado en la Juicebox API interna del jugo. No hay un contrato de estabilidad, puede cambiar sin aviso.
npm run lintfalla →sesión caducada:npm run login.El server dice que falta Chromium →
npx patchright install chromium.jb_get_resultsdevuelvesrc: "dom-fallback"→ la captura del API se rompió; pierdesmatchRate+criteria. Comprueba queRESULTStodavía coinciden con la ruta caché.jb_get_resultsreportajoinedLinkedInUrls: 0→ el marcado de la tarjeta cambió; revisaharvest/rewindToFirstPage.La lista de búsqueda vacía → el marcado de la página del proyecto cambió; revisa
listStoredSearches.
Requisitos previos
Node.js 18 o más nuevo
lock Una cuenta de Juicebox en la que puedas into iniciar sesión
~500MB de disco libre para descarga de Chromium
Licencia
MIT. No asociado con Juicebox.# Juicebox MCP
Un servidor MCP local que lee tus datos de Juicebox en Claude Code — búsquedas guardadas y resultados puntuados— mediante tu propia sesión de Juicebox iniciada.
Se ejecuta enteramente en tu máquina. Tu sesión nunca sale de ella, y cada llamada se hace como tú, en tu propio asiento.
Leer no cuesta créditos de exportación. Todo lo que devuelven las herramientas de lectura proviene de la misma superficie libre que la página de resultados de búsqueda ya renderizada. Una herramienta escribe, y lo dice: jb_run_search crea una búsqueda guardada real en tu espacio de trabajo.
Instalación continuada de la extensión de escritorio (la más fácil)
Descarga
juicebox-mcp.mcpbdesde Releases, haz doble clic o arrástralo a Claude Desktop → Configuración.
No hay ninguna clave API que pegar. Después de instalar, haz tos pasos de navegación que van abajo.
Opcional: desde la fuente
git clone https://github.com/jnot807/juicebox-mcp.git
cd juicebox-mcp
npm install # also downloads the Chromium build (see note)
npm run login # a real browser opens — sign in to Juicebox yourself
npm run check # proves the session works headlessRegístralo con Claude Code:
claude mcp add -s user juicebox -- node "$(pwd)/server.js"-s user lo hace disponible en cada sesión; si no, el registro está
restringido al directorio desde el que lo ejecutes.
La descarga única del navegador
Esto maneja un Chromium real, y ese binario no forma parte de node_modules —
es una descarga única de unos 500MB de caché compartida
(~/Library/caches/ms-playwright en macOS).
npm install lo obtiene automáticamente mediante un paso de post-instalado. Los usuarios de la extensión de escritorio
necesitan ejecutarlo una vez a mano, porque una extensión incluye node_modules
pero no ese caché:
npx patchright install chromiumSi no, el servidor te lo dice en lenguaje honesto en lugar de lanzar un stack trace sobre un binario que falta.
Iniciar sesión
La autenticación es un inicio de sesión real, no una clave. npm run login abre
una ventana del navegador; inicia sesión en Juicebox como harías tú normalmente. La sesión se
almacena en session/ (gitignored, chmod 700) y se reutiliza de forma invisible.
Vuelve a iniciar sesión siempre que npm run check empiece a fallar.
Herramientas
Herramienta | Qué hace |
| Búsquedas guardadas en de (id + nombre). |
| Resultados clasificados de una búsqueda — nombre, URL de LinkedIn, cargo, empresa, ubicación, |
| Tamaño de un filtro sin ejecutar la búsqueda — la primilla de ajuste. |
| ESCRIBE. Crea y ejecuta una nueva búsqueda desde un prompt en lenguaje natural, luego devuelve sus candidatos. Deja una búsqueda guardada visible a todo tu espacio de trabajo: confirma antes de usarla. |
experience[] es la única manera de ver empleadores antiguos: el payload de la API lleva
solo data tual, así que los alumnos de una empresa son invisibles sin.
Qué proyecto lee por defecto
Nada está fijo de incrustado. En el inicio de la sesión, una sonda del
carga /projects, que redirects a un proyecto que tu asiento pueda ver,
y ese id se guarda como defaultProjectId en session/session-meta.json.
Se escribe una vez y se deja en paz. La redirección sigue al proyecto
que la app tenía más recientemente abierto, así que confiar en él en cada ejecución
haría una llamada de herramienta con el projectId que no fuese que ayer.
Orden de resolución:
JUICEBOX_PROJECT_ID(env — esto es lo que el campo "proyecto por defecto" opcional de la extensión de escritorio fija)VALIDATION_PROJECT_ID(env — también incrusta el cheque de auth contra ese proyecto)defaultProjectIdensession/session.json, fijado por el descubrimiento
Cada herramienta también toma un projectId explícito, que siempre gana.
Los ids de proyectos de Juicebox son claves tipo ~20 caracteres como c5Phe2fANnXu6BQVdo — la
parte /proyecto/<id>/ de una URL. Si pasas un UUID, el servidor lo rechaza con
una explicación en lugar de silenciosamente a un proyecto que no existe.
Dos normas que las herramientas ifferencias
verdictFound: false→unknown, nunca un negativo. "No hay evidencia" y "la evidencia dice que no" son veredictos diferentes. (Colapsarlos baja a una candidata a una producción de un criterio que nadie podría realmente comprobar.)Los términos de aptitud amplios (amplio) diluyen el ranking. Los términos de aptitud se ponderan conOR; un término de población / la industria como "Gestión de cuentas" en una búsqueda de gestión de clientes infla el grupo en ~3.4×. Quita los genéricos y subebe el requisito duro a un filtro de aptitud.
Cuando se ejecutan scripts mientras el servidor está en marcha
No puedes compartir perfil de sesión: session/ es un solo escritor, el
servidor MCP lo mantiene cuando quiera que se ejecuta. Un segundo proceso que lo intente
falla el cheque de auth — que se reporta a sí mismo como "sesión expirada" y te pone
dando vueltas reiniciando sesión.
Para diagnosticar, construye un contexto fresco desde el checkpoint. Misma cerradura, misma sesión:
const { chromium } = require('patchright');
const browser = await chromium.launch({ headless: true });
const context = await browser.newContext({ storageState: 'session/storage-state.json' });Cómo funciona, y las trampas
La página se renderiza desde el servidor en la primera carga, así que /api/profiles/results solo
se dispara en la interacción. El cliente empuja la página a la aplicación para que emita su
propia solicitud, y luego captura la respuesta — que lleva todo el conjunto clasificado, no
solo la página visible.
Tres cosas que muerden a quienquiera que edite client.js:
Nunca
addInitScript. Parchea silenciosamente como un sinónimo contra-detección — no, solo el script, no error. Usapage.on('response').la
urldel API está cifrado (hex:hex) igualurls[].urlyprofile.urllos. Las URLs reales vienen de los tarjetas y seappliedcon enfull_namenormalizada — medida al 100% en una búsqueda en vivo.La lista en blanco a mitad de una paginación. Un paginador nullo que significa "sigue adelante", no "fallido". El golpe a la transición de paginación es cómo cómo fueron dos errores anteriores.
Cuándo se rompe
Esto monta la interna API de Juicebox. No hay contrato de estabilidad, y puede cambiar sin aviso.
npm run checkfallo →sesión expirada:npm run login.El servidor dice que falta Chromium →
npx patchright install chromium.jb_get_resultsdevuelvesource: "dom-fallback"→ la captura del API se rompió; pierdesmatchRateycriteria. Comprueba queRESULTSsigue coincidiendo con la ruta.jb_get_resultsreportajoinedLinkedInUrls: 0→ el marcado de la tarjeta de tablero cambió; revisaharvest/rewindToFirstPage.La lista de búsqueda vacía → el marcado de la página del proyecto cambió; revisa
listStoredSearches.
Requisitos
Node.js 18 o más nuevo* Una cuenta de Juicebox que pueda iniciar sesión
~500MB de espacio libre en disco para la descarga de Chromium
Licencia
Permitida MT. No afiliada a Juicebox.
This server cannot be installed
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 Connectors
Persistent context for Claude. Your AI always knows your projects and next actions across sessions.
Amazon brand, seller, niche & buy-box intelligence inside your own Claude or ChatGPT.
Stealth scraping & search. Bypasses Cloudflare, DataDome & LinkedIn via Cyborg HITL approach.
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/jnot807/juicebox-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server