LinkedIn MCP

Extrae perfiles y empresas de LinkedIn, obtén trabajos recomendados y realiza búsquedas de empleo.

Documentación

Servidor MCP para LinkedIn

PyPI CI Status Release License

Un servidor MCP que conecta asistentes de IA como Claude a LinkedIn a través de tu propia sesión de navegador iniciada. Consulta perfiles y empresas, envía mensajes, gestiona tu bandeja de entrada o busca empleos. Todas las acciones del navegador se ejecutan localmente en tu máquina.

Este es un proyecto independiente de código abierto, no afiliado, autorizado, respaldado ni patrocinado por LinkedIn o Microsoft. LinkedIn es una marca comercial de LinkedIn Corporation y se utiliza aquí únicamente para identificar el servicio con el que interactúa este software.


Patrocinador de LinkedIn MCP
Cadenza, hosted LinkedIn MCP for your AI assistant

¿Prefieres no ejecutar un servidor? Cadenza es el servidor MCP de LinkedIn alojado para tus agentes, en web, escritorio y móvil. Establece tus propios límites en las acciones de LinkedIn y usa tu Sales Navigator, Recruiter e InMail.

Usa el código FOUNDING20 para obtener un 20% de descuento en tu primer año Prueba Cadenza →


Unipile, one API for every LinkedIn feature

Este servidor MCP cuenta con el apoyo de Unipile. Unipile es la opción en la nube totalmente gestionada para desarrolladores: una API de LinkedIn alojada para Classic, Sales Navigator y Recruiter que gestiona la autenticación, las sesiones y la infraestructura por ti.

Prueba Unipile gratis durante 7 días →


Métodos de instalación - Servidor MCP de LinkedIn

uvx Install MCP Bundle Codex Plugin Docker

HerramientaDescripción
get_person_profileLee secciones del perfil como experiencia, educación, habilidades, proyectos y publicaciones.
get_my_profileLee tu propio perfil usando las mismas secciones seleccionables.
connect_with_personEnvía o acepta una solicitud de conexión, con una nota opcional.
get_sidebar_profilesEncuentra enlaces de perfiles recomendados en la barra lateral de una persona.
get_inboxLista conversaciones de mensajería recientes de tu bandeja de entrada de LinkedIn.
get_conversationLee una conversación por nombre de usuario o ID de hilo.
search_conversationsBusca mensajes por palabra clave en tus conversaciones.
send_messageEnvía después de la confirmación. Dirigirse a un perfil puede iniciar un DM separado en lugar de responder en un hilo (#483).
get_company_profileLee publicaciones y empleos; las referencias "acerca de" pueden incluir un company_urn para la faceta de búsqueda currentCompany.
get_company_postsLee publicaciones recientes publicadas en la página de LinkedIn de una empresa.
search_companiesEncuentra perfiles de empresas de LinkedIn que coincidan con una búsqueda por palabra clave.
get_company_employeesLista empleados de una empresa, opcionalmente filtrados por palabra clave.
search_jobsEncuentra ofertas de empleo de LinkedIn por palabra clave y ubicación.
get_saved_jobsLista las ofertas de empleo que has guardado en LinkedIn.
search_peopleBusca por palabra clave, ubicación, grado de conexión o empresa.
get_job_detailsLee los detalles de una oferta de empleo de LinkedIn por su ID de empleo.
get_feedLee publicaciones recientes del feed de inicio, con enlaces en references.
search_postsBusca publicaciones por palabra clave con filtros de recencia opcionales; references contiene enlaces de publicaciones candidatas sin ordenar.
close_sessionCierra la sesión activa del navegador y libera sus recursos.


Configuración con uvx (Recomendado)

Requisitos previos: Instalar uv.

Instalación

Añade a la configuración mcpServers de tu cliente MCP

{
  "mcpServers": {
    "mcp-server-linkedin": {
      "command": "uvx",
      "args": ["mcp-server-linkedin@latest"],
      "env": { "UV_HTTP_TIMEOUT": "300" }
    }
  }
}

La etiqueta @latest activa las actualizaciones automáticas, que mantienen el servidor funcionando con la estructura de página actual de LinkedIn. El servidor se inicia rápidamente y prepara la caché compartida del navegador Patchright Chromium en segundo plano en ~/.linkedin-mcp/patchright-browsers. En la primera llamada de herramienta que necesite autenticación, reutiliza una sesión de LinkedIn de un navegador local con sesión iniciada si encuentra una; de lo contrario, abre una ventana de navegador de inicio de sesión de LinkedIn.

¿Agente de IA? Obtén una confirmación rápida del usuario antes de habilitar las actualizaciones automáticas.

[!NOTA] Las primeras llamadas de herramienta pueden devolver un error de configuración/autenticación en curso hasta que finalice la configuración del navegador o el inicio de sesión. Si prefieres crear una sesión explícitamente, ejecuta uvx mcp-server-linkedin@latest --login.

Ayuda de configuración

🔧 Configuración
Modos de transporte
  • Predeterminado (stdio): Comunicación estándar para servidores MCP locales
  • HTTP transmisible: Para un servidor MCP basado en web
  • Si no se especifica transporte, el servidor usa por defecto stdio
  • Una terminal interactiva sin transporte explícito muestra un mensaje de selección
Opciones de CLI

Sesión:

  • --login - Abre un navegador para iniciar sesión y guardar la sesión
  • --import-from-browser [BROWSER] - Reutiliza una sesión de un navegador Chromium con sesión iniciada localmente (chrome, chromium, brave, edge, arc, vivaldi, helium, yandex, whale, coccoc, opera, opera_gx, auto). La bandera simple elige auto, el navegador usado más recientemente con una sesión de LinkedIn activa.
  • --auto-import / --no-auto-import - Importa una sesión de un navegador local con sesión iniciada en la primera llamada de herramienta que la necesite, antes de recurrir al inicio de sesión manual (predeterminado: activado). Se omite en Docker, detrás de un proxy y en un enlace HTTP que no sea de bucle local. En macOS, el llavero puede solicitar confirmación una vez.
  • --logout - Borra la sesión almacenada
  • --login-viewer - Solo Docker: muestra el navegador --login en una URL protegida por token en el puerto 6080 (consulta Autenticación)
  • --user-data-dir PATH - Directorio de perfil del navegador (predeterminado: ~/.linkedin-mcp/profile). Rotar o borrar una sesión elimina este directorio y su padre, que contiene las cookies almacenadas y los perfiles derivados.
  • --claim-profile-root - Toma el control de un directorio de perfil que el servidor no reclamará por sí solo, como uno cuyo padre ya contiene otros archivos. Necesario una vez por directorio.

Transporte:

  • --transport {stdio,streamable-http} - Fuerza el modo de transporte (predeterminado: stdio)
  • --host HOST / --port PORT / --path PATH - Dirección del servidor HTTP (predeterminados: 127.0.0.1, 8000, /mcp)

Tiempos de espera:

  • --timeout MS - Tiempo de espera para una operación de página individual (predeterminado: 5000)
  • --tool-timeout SECONDS - Tiempo de espera para una llamada de herramienta completa (predeterminado: 180). Auméntalo para raspados pesados, redes lentas o un navegador con arranque en frío.
  • --login-timeout SECONDS - Cuánto tiempo espera el navegador de inicio de sesión a que termines de iniciar sesión (predeterminado: 1800; 0 = sin límite). --login-viewer finaliza la sesión después de 30 minutos en cualquier caso.
  • --login-inline-wait SECONDS - Cuánto tiempo espera una llamada de herramienta a que finalice el inicio de sesión antes de indicar al modelo que reintente (predeterminado: 25, máximo 45; 0 = devolver de inmediato)

Navegador compartido:

  • --browser-wait SECONDS - Cuánto tiempo esperar a que otro proceso del servidor entregue el navegador compartido (predeterminado: 25, máximo 45; 0 = informar ocupado de inmediato). Solo importa con varios clientes MCP ejecutándose a la vez.
  • --browser-min-hold SECONDS - Tiempo mínimo que este proceso mantiene el navegador compartido antes de entregarlo (predeterminado: 20). Limitado a 3 segundos por debajo de --browser-wait, así que auméntalo junto con este. Un valor más alto significa menos reinicios del navegador pero esperas más largas para otros clientes.
  • --browser-idle-timeout SECONDS - Cierra un navegador inactivo y libera el perfil después de este tiempo sin una llamada de herramienta (predeterminado: 600; 0 = mantenerlo abierto)

Navegador:

  • --no-headless - Muestra la ventana del navegador (útil para depuración)
  • --chrome-path PATH - Ruta a un ejecutable de Chrome/Chromium
  • --proxy-server URL - Enruta el tráfico del navegador a través de un proxy, como scheme://host:port. Configúralo antes de --login; consulta Usar un proxy.

Otros:

  • --log-level {DEBUG,INFO,WARNING,ERROR} - Nivel de registro (predeterminado: WARNING)
Importa una sesión desde tu navegador de uso diario

Si ya has iniciado sesión en LinkedIn en Chrome, Chromium, Brave, Edge, Arc, Vivaldi, Helium, Yandex, Naver Whale, Cốc Cốc, Opera u Opera GX, puedes omitir el paso manual de --login y reutilizar esa sesión:

# Auto-pick the most recently used browser with a live LinkedIn session
uvx mcp-server-linkedin@latest --import-from-browser
# Or target a specific browser
uvx mcp-server-linkedin@latest --import-from-browser brave

Esto lee las cookies de LinkedIn del navegador, las valida contra tu feed y las guarda en ~/.linkedin-mcp/profile/, el mismo lugar donde escribe --login. Notas:

  • Con varios navegadores con sesión iniciada, se prueba primero la sesión de LinkedIn activa más reciente. Si LinkedIn la rechaza (revocada o cerrada sesión de forma remota), se prueba automáticamente la siguiente más reciente; la primera que el servidor acepte se importa. No hay mensaje para elegir. Pasa un nombre de navegador para dirigirse a uno específicamente.
  • En macOS, el llavero del sistema puede solicitar permiso para acceder al Almacenamiento Seguro del navegador. Cierra primero el navegador de origen para una lectura más fiable.
  • Las cookies protegidas por el cifrado vinculado a la aplicación de Chrome 127+ (v20) no se pueden descifrar sin elevación del sistema operativo; en ese caso, usa --login en su lugar.
  • Las cookies importadas coinciden con el conjunto en disco de un inicio de sesión real. El servidor local las lee completas desde el perfil guardado; el puente de Docker se reduce al mismo subconjunto mínimo de autenticación que usa para una sesión normal.
Modo HTTP y depuración

Ejemplos básicos de uso:

# Run with debug logging
uvx mcp-server-linkedin@latest --log-level DEBUG

Ejemplo de modo HTTP (para clientes MCP basados en web):

uvx mcp-server-linkedin@latest --transport streamable-http --host 127.0.0.1 --port 8080 --path /mcp

Los registros del servidor en tiempo de ejecución los emite FastMCP/Uvicorn.

Las llamadas de herramienta se serializan para proteger la sesión compartida del navegador de LinkedIn, tanto dentro de un proceso de servidor como entre procesos separados. Si ejecutas varios clientes MCP a la vez, cada uno inicia su propio proceso de servidor, y solo uno de ellos usa el navegador a la vez; los demás esperan brevemente y toman el control tan pronto como termina una llamada. Un cliente que espera demasiado recibe un mensaje de "navegador ocupado" y simplemente puede reintentar. Usa --log-level DEBUG para ver los registros de espera/adquisición/liberación.

Esto cubre procesos en la misma máquina y en el mismo entorno de ejecución. No se extiende entre el host y un contenedor Docker que comparte el mismo directorio ~/.linkedin-mcp, así que no ejecutes --login o --logout en el host mientras un contenedor esté en ejecución.

Prueba con el inspector de mcp:

  1. Instala y ejecuta el inspector de mcp bunx @modelcontextprotocol/inspector
  2. Haz clic en la URL de token prellenada para abrir el inspector en tu navegador
  3. Selecciona Streamable HTTP como Transport Type
  4. Establece URL a http://localhost:8080/mcp
  5. Conecta
  6. Prueba las herramientas
❗ Solución de problemas
Problemas de instalación - Asegúrate de tener uv instalado: `curl -LsSf https://astral.sh/uv/install.sh | sh` - Verifica la versión de uv: `uv --version` (debe ser 0.4.0 o superior) - En la primera ejecución, `uvx` descarga todas las dependencias de Python. En conexiones lentas, el tiempo de espera HTTP predeterminado de 30s de uv puede ser demasiado corto. La configuración recomendada anterior ya establece `UV_HTTP_TIMEOUT=300` (segundos) para evitar esto. - *Windows, `DLL load failed while importing _greenlet`*: cambia a greenlet 3.5.5 o más reciente, cuyas ruedas de Windows publicadas incluyen el runtime de C++ dentro de la extensión nuevamente. Una ejecución nueva de `uvx` lo resuelve por sí sola; un entorno que fija sus dependencias necesita `uv lock --upgrade-package greenlet`. Solo greenlet 3.3.1 hasta 3.5.4 necesita `MSVCP140.dll`, que ni el instalador de python.org ni las compilaciones gestionadas por `uv` incluyen, y un greenlet compilado desde el código fuente puede necesitarlo en cualquier versión. Cuando la versión no se puede cambiar, el [Microsoft Visual C++ Redistributable](https://learn.microsoft.com/en-us/cpp/windows/latest-supported-vc-redist) proporciona esa DLL. Reportado como [greenlet#525](https://github.com/python-greenlet/greenlet/issues/525), corregido en [greenlet#526](https://github.com/python-greenlet/greenlet/pull/526).
Problemas de sesión
  • El perfil del navegador se almacena en ~/.linkedin-mcp/profile/
  • Las descargas del navegador gestionado se guardan en caché en ~/.linkedin-mcp/patchright-browsers/
  • La caché del navegador sigue creciendo: una actualización del servidor puede traer una nueva revisión de Chromium, y Patchright conserva la anterior mientras cualquier versión instalada aún la referencie. uvx mantiene un archivo por cada versión que hayas ejecutado, por lo que cada una de ellas mantiene dicha referencia y las revisiones antiguas permanecen. El servidor registra una advertencia nombrando las revisiones que conserva y cuánto espacio ocupan. Para recuperarlo, detén cada instancia del LinkedIn MCP Server, elimina ~/.linkedin-mcp/patchright-browsers/ y deja que el próximo lanzamiento descargue el navegador actual.
Problemas de inicio de sesión
  • Asegúrate de tener solo una sesión activa de LinkedIn a la vez
  • LinkedIn puede requerir una confirmación de inicio de sesión en la aplicación móvil de LinkedIn para --login
  • LinkedIn puede mostrar un desafío captcha durante el inicio de sesión. Ejecuta uvx mcp-server-linkedin@latest --login que abre un navegador donde puedes resolverlo manualmente.
Problemas de tiempo de espera
  • Operaciones de página que fallan (elementos no encontrados, navegación que se cuelga): aumenta el tiempo de espera de operaciones de página del navegador: --timeout 10000 o TIMEOUT=10000 (milisegundos, predeterminado 5000).
  • Llamadas de herramienta completas que agotan el tiempo (por ejemplo, perfiles de varias secciones, Chromium en arranque en frío, contenedores lentos): aumenta el tiempo de espera de ejecución por herramienta: --tool-timeout 300 o TOOL_TIMEOUT=300 (segundos, predeterminado 180).
  • Primera llamada de herramienta sin sesión: si un navegador local con sesión iniciada tiene una sesión activa de LinkedIn, el servidor la importa automáticamente (ver AUTO_IMPORT_FROM_BROWSER / --auto-import) en lugar de forzar un inicio de sesión manual. En macOS, el llavero puede solicitar una vez acceso a Safe Storage. Si no existe una sesión de navegador importable, se recurre a abrir una ventana de inicio de sesión y espera hasta LOGIN_INLINE_WAIT segundos (predeterminado 25, máximo 45; --login-inline-wait) para que un inicio de sesión rápido se resuelva en una llamada. Si el tiempo transcurre, la herramienta devuelve una señal pendiente y el modelo reintenta en unos 30 segundos. Ni la importación automática ni la espera en línea se aplican bajo Docker o cuando el servidor está vinculado a un host HTTP que no sea de bucle local. Crea la sesión en el host con --login, o usa el comando explícito de Docker --login --login-viewer.
  • Los usuarios con conexiones lentas pueden necesitar valores más altos para cualquiera de los dos.
Se te dijo que ejecutaras --login en el host cuando ya lo hiciste
  • Si las llamadas de herramienta responden "No valid LinkedIn session is available in Docker" en una máquina que no es un contenedor, el runtime fue mal detectado. Esto ocurrió en hosts Linux que ejecutan un daemon de Docker para servicios no relacionados. Establece LINKEDIN_MCP_CONTAINER=false para anular la detección; true fuerza lo contrario.
Ruta personalizada de Chrome
  • Si Chrome está instalado en una ubicación no estándar, usa --chrome-path /path/to/chrome
  • También se puede establecer mediante variable de entorno: CHROME_PATH=/path/to/chrome
  • En macOS y Linux, el navegador debe ser al menos tan nuevo como el que abrió tu perfil por última vez, y el servidor rechaza el lanzamiento de lo contrario. (No en Windows: allí no se puede preguntar la versión de un navegador sin iniciar uno, por lo que la verificación está desactivada). Un navegador más antiguo puede descartar silenciosamente almacenes que uno más nuevo escribió, incluida la sesión guardada, y el fallo entonces parece exactamente un inicio de sesión caducado. El mensaje nombra ambas versiones. Volver al Chromium incluido después de ejecutar un Chrome más nuevo una vez es la forma habitual de cumplir esto; o ejecuta el navegador más nuevo nuevamente, cualquiera que haya sido, o ejecuta --login, que mueve la sesión almacenada a un lado e inicia sesión de nuevo con el navegador que tengas. --logout también lo borra pero descarta la sesión antigua en lugar de mantenerla recuperable, y pide confirmación en la terminal, por lo que no se puede usar desde un servidor que un cliente MCP haya iniciado.
  • Solo Chrome, Chromium y Chrome for Testing se comparan de esta manera. Los forks se numeran de manera diferente (Vivaldi está en 7.x, el número de compilación de Edge está muy por debajo del de Chrome bajo el mismo major), por lo que apuntar CHROME_PATH a uno desactiva la verificación en lugar de producir un rechazo que nada podría satisfacer.


Paquete MCP de Claude Desktop (anteriormente DXT)

Requisitos previos: Claude Desktop.

Instalación

  1. Descarga el último artefacto .mcpb desde releases
  2. Haz clic en el archivo .mcpb descargado para instalarlo en Claude Desktop
  3. Llama a cualquier herramienta de LinkedIn

Al inicio, el Paquete MCP prepara la caché compartida del navegador Patchright Chromium en segundo plano. En la primera llamada de herramienta que necesite autenticación, el servidor reutiliza una sesión de LinkedIn de un navegador local con sesión iniciada si encuentra una, y de lo contrario abre una ventana de navegador de inicio de sesión de LinkedIn.

[!NOTE] Las primeras llamadas de herramienta pueden devolver un error de configuración/autenticación en curso hasta que la configuración del navegador o el inicio de sesión terminen. Reintenta la llamada de herramienta una vez que la descarga del navegador o el inicio de sesión se completen.

Ayuda de configuración

❗ Solución de problemas
Comportamiento de configuración inicial
  • Claude Desktop inicia el paquete inmediatamente; la configuración del navegador continúa en segundo plano
  • Si el navegador Patchright Chromium aún se está descargando, reintenta la herramienta después de una breve espera
  • Las descargas del navegador gestionado se comparten bajo ~/.linkedin-mcp/patchright-browsers/
  • La caché del navegador sigue creciendo: Patchright conserva una revisión antigua de Chromium mientras cualquier versión instalada aún la referencie, por lo que una actualización puede dejar ambas en el disco. El servidor registra una advertencia nombrando lo que conserva. Para recuperar el espacio, detén cada instancia del LinkedIn MCP Server, elimina ~/.linkedin-mcp/patchright-browsers/ y deja que el próximo lanzamiento descargue el navegador actual.
  • Windows, el paquete sale con DLL load failed while importing _greenlet: instala el Microsoft Visual C++ Redistributable, o reinstala un paquete que fije greenlet 3.5.5 o más reciente, cuyas ruedas de Windows publicadas incluyen el runtime de C++ dentro de la extensión nuevamente. Un paquete que fije greenlet 3.3.1 hasta 3.5.4 necesita MSVCP140.dll de ese redistribuible, que ni el instalador de python.org ni las compilaciones gestionadas por uv incluyen, y un greenlet compilado desde el código fuente puede necesitarlo en cualquier versión. El servidor lo nombra por sí mismo al inicio, y solo después de verificar que el cargador no puede producir esa DLL. Reportado como greenlet#525, corregido en greenlet#526.
Problemas de inicio de sesión
  • Asegúrate de tener solo una sesión activa de LinkedIn a la vez
  • LinkedIn puede requerir una confirmación de inicio de sesión en la aplicación móvil de LinkedIn para --login
  • LinkedIn puede mostrar un desafío captcha durante el inicio de sesión. Ejecuta uvx mcp-server-linkedin@latest --login que abre un navegador donde puedes resolver captchas manualmente. Consulta la configuración de uvx para los requisitos previos.
Problemas de tiempo de espera
  • Operaciones de página que fallan (elementos no encontrados, navegación que se cuelga): aumenta el tiempo de espera de operaciones de página del navegador: --timeout 10000 o TIMEOUT=10000 (milisegundos, predeterminado 5000).
  • Llamadas de herramienta completas que agotan el tiempo (por ejemplo, perfiles de varias secciones, Chromium en arranque en frío, contenedores lentos): aumenta el tiempo de espera de ejecución por herramienta: --tool-timeout 300 o TOOL_TIMEOUT=300 (segundos, predeterminado 180).
  • Primera llamada de herramienta sin sesión: si un navegador local con sesión iniciada tiene una sesión activa de LinkedIn, el servidor la importa automáticamente (ver AUTO_IMPORT_FROM_BROWSER / --auto-import) en lugar de forzar un inicio de sesión manual. En macOS, el llavero puede solicitar una vez acceso a Safe Storage. Si no existe una sesión de navegador importable, se recurre a abrir una ventana de inicio de sesión y espera hasta LOGIN_INLINE_WAIT segundos (predeterminado 25, máximo 45; --login-inline-wait) para que un inicio de sesión rápido se resuelva en una llamada. Si el tiempo transcurre, la herramienta devuelve una señal pendiente y el modelo reintenta en unos 30 segundos. Ni la importación automática ni la espera en línea se aplican bajo Docker o cuando el servidor está vinculado a un host HTTP que no sea de bucle local. Crea la sesión en el host con --login, o usa el comando explícito de Docker --login --login-viewer.
  • Los usuarios con conexiones lentas pueden necesitar valores más altos para cualquiera de los dos.
Se te dijo que ejecutaras --login en el host cuando ya lo hiciste
  • Si las llamadas de herramienta responden "No valid LinkedIn session is available in Docker" en una máquina que no es un contenedor, el runtime fue mal detectado. Esto ocurrió en hosts Linux que ejecutan un daemon de Docker para servicios no relacionados. Establece LINKEDIN_MCP_CONTAINER=false para anular la detección; true fuerza lo contrario.


Plugin de Codex

Requisitos previos: Codex y uv.

Instalación

Ejecuta en una terminal

codex plugin marketplace add stickerdaniel/linkedin-mcp-server
codex plugin add linkedin-mcp-server@linkedin-mcp-server

El plugin ejecuta una versión fija del servidor a través de uvx. Cada versión actualiza esa versión, y Codex la instala la próxima vez que se inicie. En la primera llamada de herramienta que necesite autenticación, el servidor reutiliza una sesión de LinkedIn de un navegador local con sesión iniciada si encuentra una, y de lo contrario abre una ventana de navegador de inicio de sesión de LinkedIn.



Configuración con Docker

Sé lo que estoy haciendo

Requisitos previos: Asegúrate de que Docker esté instalado y en ejecución.

Autenticación

Inicia sesión una vez. El contenedor abre un navegador de inicio de sesión de LinkedIn que controlas desde tu propia pestaña del navegador.

macOS / Linux:

# Create the directory first so the container can save your session into it
mkdir -p ~/.linkedin-mcp
docker run -it --rm \
  -v ~/.linkedin-mcp:/home/pwuser/.linkedin-mcp \
  -p 127.0.0.1:6080:6080 \
  stickerdaniel/linkedin-mcp-server:latest \
  --login --login-viewer

PowerShell (Windows):

$sessionDir = Join-Path $env:USERPROFILE ".linkedin-mcp"
New-Item -ItemType Directory -Force -Path $sessionDir | Out-Null
docker run -it --rm `
  -v "${sessionDir}:/home/pwuser/.linkedin-mcp" `
  -p 127.0.0.1:6080:6080 `
  stickerdaniel/linkedin-mcp-server:latest `
  --login --login-viewer

Abre la URL completa que el comando imprime (lleva el token de acceso) e inicia sesión. El visor se cierra solo después; deja que el comando salga por sí solo para que la sesión se almacene por completo. Se rinde después de 30 minutos.

Mantén el mismo directorio del host montado en /home/pwuser/.linkedin-mcp en cada docker run posterior, de lo contrario el servidor no puede encontrar la sesión.

Agrega a la configuración de mcpServers de tu cliente MCP

macOS / Linux (ruta absoluta en JSON):

{
  "mcpServers": {
    "mcp-server-linkedin": {
      "command": "docker",
      "args": [
        "run", "--rm", "-i",
        "-v", "/absolute/path/to/.linkedin-mcp:/home/pwuser/.linkedin-mcp",
        "stickerdaniel/linkedin-mcp-server:latest"
      ]
    }
  }
}

Escribe esa primera ruta completa. Un cliente ejecuta docker directamente en lugar de a través de un shell, por lo que un ~ inicial llega a Docker sin expandir y rechaza el montaje.

PowerShell (Windows): usa una ruta JSON con barras diagonales. Una ruta con barras invertidas como C:\Users\Alice\.linkedin-mcp falla el análisis JSON porque \U es un escape inválido. Usa C:/Users/Alice/.linkedin-mcp en su lugar, reemplazando Alice con tu nombre de usuario.

{
  "mcpServers": {
    "mcp-server-linkedin": {
      "command": "docker",
      "args": [
        "run", "--rm", "-i",
        "-v", "C:/Users/Alice/.linkedin-mcp:/home/pwuser/.linkedin-mcp",
        "stickerdaniel/linkedin-mcp-server:latest"
      ]
    }
  }
}

[!NOTE] En PowerShell, ~ no se expande dentro de un argumento compuesto de Docker -v. Use C:/Users/<you>/.linkedin-mcp o construya la ruta con $env:USERPROFILE\.linkedin-mcp antes de pasarla a Docker.

[!NOTE] Las sesiones caducan con el tiempo. Cuando las llamadas a herramientas empiecen a solicitar autenticación, repita el comando de inicio de sesión anterior, o ejecute uvx mcp-server-linkedin@latest --login en el host.

Ayuda de configuración

🔧 Configuración
Modos de transporte
  • Predeterminado (stdio): Comunicación estándar para servidores MCP locales
  • HTTP transmisible: Para un servidor MCP basado en web
  • Si no se especifica ningún transporte, el servidor usa por defecto stdio
  • Una terminal interactiva sin transporte explícito muestra un mensaje de selección
Opciones de CLI

Sesión:

  • --auto-import / --no-auto-import - Importar una sesión desde un navegador local con sesión iniciada en la primera llamada a herramienta que la necesite, antes de recurrir al inicio de sesión manual (ignorado en Docker). En macOS, el llavero puede solicitar confirmación una vez.
  • --logout - Borrar la sesión almacenada y todos los perfiles derivados de ella
  • --login-viewer - Con --login, mostrar el navegador de inicio de sesión en una URL protegida por token en el puerto 6080. Requiere el montaje de perfil de Autenticación.
  • --user-data-dir PATH - Directorio de perfil del navegador (predeterminado: ~/.linkedin-mcp/profile). Rotar o borrar una sesión elimina este directorio y su padre, que contiene las cookies almacenadas y los perfiles derivados.
  • --claim-profile-root - Tomar control de un directorio de perfil que el servidor no reclamará por sí solo, como uno cuyo padre ya contiene otros archivos. Necesario una vez por directorio.

Transporte:

  • --transport {stdio,streamable-http} - Forzar el modo de transporte (predeterminado: stdio)
  • --host HOST / --port PORT / --path PATH - Dirección del servidor HTTP (predeterminados: 127.0.0.1, 8000, /mcp)

Tiempos de espera:

  • --timeout MS - Tiempo de espera para una sola operación de página (predeterminado: 5000)
  • --tool-timeout SECONDS - Tiempo de espera para una llamada completa a herramienta (predeterminado: 180). Auméntelo para raspados pesados, redes lentas o un navegador con arranque en frío.
  • --login-timeout SECONDS - Cuánto tiempo espera el navegador de inicio de sesión a que termine de iniciar sesión (predeterminado: 1800; 0 = sin límite). --login-viewer finaliza la sesión después de 30 minutos de todos modos.
  • --login-inline-wait SECONDS - Cuánto tiempo espera una llamada a herramienta a que finalice el inicio de sesión antes de indicar al modelo que reintente (predeterminado: 25, máximo 45; 0 = devolver de inmediato)

Navegador compartido:

  • --browser-wait SECONDS - Cuánto tiempo esperar a que otro proceso del servidor entregue el navegador compartido (predeterminado: 25, máximo 45; 0 = informar ocupado de inmediato). Solo importa con varios clientes MCP ejecutándose a la vez.
  • --browser-min-hold SECONDS - Tiempo mínimo que este proceso conserva el navegador compartido antes de entregarlo (predeterminado: 20). Limitado a 3 segundos por debajo de --browser-wait, así que auméntelo junto con este. Un valor más alto significa menos reinicios del navegador pero esperas más largas para otros clientes.
  • --browser-idle-timeout SECONDS - Cerrar un navegador inactivo y liberar el perfil después de este tiempo sin una llamada a herramienta (predeterminado: 600; 0 = mantenerlo abierto)

Navegador:

  • --chrome-path PATH - Ruta a un ejecutable de Chrome/Chromium (rara vez necesario en Docker)
  • --proxy-server URL - Enrutar el tráfico del navegador a través de un proxy, como scheme://host:port. Configúrelo antes de --login; consulte Usar un proxy.

Otros:

  • --log-level {DEBUG,INFO,WARNING,ERROR} - Nivel de registro (predeterminado: WARNING)

[!NOTE] El --login simple aún no tiene ventana visible en Docker. Agregue --login-viewer y publique 127.0.0.1:6080:6080 solo para el comando de inicio de sesión de una sola vez. Docker ya tiene pantalla por defecto, por lo que --no-headless no cambia nada. El --daemon experimental se ignora en Docker porque su propietario puede sobrevivir a la pantalla virtual.

Modo HTTP

Ejemplo de modo HTTP (para clientes MCP basados en web):

Bash / macOS / Linux:

docker run -it --rm \
  -v ~/.linkedin-mcp:/home/pwuser/.linkedin-mcp \
  -p 127.0.0.1:8080:8080 \
  stickerdaniel/linkedin-mcp-server:latest \
  --transport streamable-http --host 0.0.0.0 --port 8080 --path /mcp

PowerShell (Windows):

$sessionDir = Join-Path $env:USERPROFILE ".linkedin-mcp"
docker run -it --rm `
  -v "${sessionDir}:/home/pwuser/.linkedin-mcp" `
  -p 127.0.0.1:8080:8080 `
  stickerdaniel/linkedin-mcp-server:latest `
  --transport streamable-http --host 0.0.0.0 --port 8080 --path /mcp

Ambas mitades son necesarias y hacen trabajos diferentes. --host 0.0.0.0 hace que el servidor sea accesible dentro del contenedor: un proceso vinculado a 127.0.0.1 allí no se puede alcanzar a través de un puerto publicado. El 127.0.0.1: delante de -p es lo que lo limita fuera, a esta máquina. Elimine ese prefijo y Docker publicará en cada interfaz, lo que coloca un endpoint sin autenticación en su red. El servidor no puede distinguir entre ambos, por lo que advierte de cualquier manera.

La publicación en bucle local limita esto a la máquina, no al contenedor. Otros contenedores en el mismo host aún pueden alcanzarlo a través de host.docker.internal dondequiera que ese nombre se resuelva, que es el predeterminado en Docker Desktop y OrbStack, pero no en Docker Linux nativo.

Los registros del servidor en tiempo de ejecución los emite FastMCP/Uvicorn.

El servidor HTTP responde a solicitudes dirigidas a localhost o a la dirección a la que está vinculado, y rechaza otras con 421. Eso es lo que impide que un sitio web que simplemente visita apunte un dominio a este servidor y use su sesión de LinkedIn a través de su propio navegador.

Alcanzar el servidor por cualquier otro nombre se rechaza, incluido un nombre de máquina en su red y el nombre público frente a un proxy inverso. O bien haga que el proxy reescriba el Host ascendente a la dirección del backend, o nombre el host bajo el que lo sirve:

FASTMCP_HTTP_ALLOWED_HOSTS='["mcp.example"]'

Eso permite exactamente ese nombre y sigue rechazando todo lo demás. El endpoint aún no tiene autenticación, por lo que cualquier cosa alcanzable más allá de su propia máquina pertenece detrás de algo que la proporcione.

Prueba con mcp inspector:

  1. Instale y ejecute mcp inspector bunx @modelcontextprotocol/inspector
  2. Haga clic en la URL de token prellenada para abrir el inspector en su navegador
  3. Seleccione Streamable HTTP como Transport Type
  4. Establezca URL a http://localhost:8080/mcp
  5. Conéctese
  6. Pruebe las herramientas
❗ Solución de problemas
Problemas con Docker
  • Asegúrese de que Docker esté instalado
  • Verifique si Docker está en ejecución: docker ps
  • Errores de permisos en ~/.linkedin-mcp: una ejecución anterior de Docker rootful puede haber creado el directorio como root. Soluciónelo con sudo chown -R "$(id -u):$(id -g)" ~/.linkedin-mcp.
Problemas de inicio de sesión
  • Asegúrese de tener solo una sesión activa de LinkedIn a la vez
  • LinkedIn puede requerir una confirmación de inicio de sesión en la aplicación móvil de LinkedIn para --login
  • LinkedIn puede mostrar un desafío de captcha durante el inicio de sesión. Ejecute uvx mcp-server-linkedin@latest --login, que abre un navegador donde puede resolver captchas manualmente. Consulte la configuración de uvx para los requisitos previos.
  • Si la autenticación de Docker queda obsoleta después de volver a iniciar sesión en el host, reinicie Docker una vez para que pueda hacer un nuevo puente desde la nueva generación de sesión de origen.
Problemas de tiempo de espera
  • Operaciones de página que fallan (elementos no encontrados, navegación que se cuelga): aumente el tiempo de espera de operación de página del navegador: --timeout 10000 o TIMEOUT=10000 (milisegundos, predeterminado 5000).
  • Llamadas completas a herramientas que agotan el tiempo (por ejemplo, perfiles de varias secciones, Chromium con arranque en frío, contenedores lentos): aumente el tiempo de espera de ejecución por herramienta: --tool-timeout 300 o TOOL_TIMEOUT=300 (segundos, predeterminado 180).
  • Primera llamada a herramienta sin sesión: si un navegador con sesión iniciada localmente tiene una sesión activa de LinkedIn, el servidor la importa automáticamente (consulte AUTO_IMPORT_FROM_BROWSER / --auto-import) en lugar de forzar un inicio de sesión manual. En macOS, el llavero puede solicitar confirmación una vez para el acceso a Safe Storage. Si no existe una sesión de navegador importable, recurre a abrir una ventana de inicio de sesión y espera hasta LOGIN_INLINE_WAIT segundos (predeterminado 25, máximo 45; --login-inline-wait) para que un inicio de sesión rápido se resuelva en una sola llamada. Si la espera transcurre, la herramienta devuelve una señal pendiente y el modelo reintenta en unos 30 segundos. Ni la importación automática ni la espera en línea se aplican bajo Docker o cuando el servidor está vinculado a un host HTTP que no sea de bucle local. Cree la sesión en el host con --login, o use el comando explícito de Docker --login --login-viewer.
  • Los usuarios con conexiones lentas pueden necesitar valores más altos para cualquiera de ellos.
Se le indicó ejecutar --login en el host cuando ya lo hizo
  • Si las llamadas a herramientas responden "No hay una sesión válida de LinkedIn disponible en Docker" en una máquina que no es un contenedor, el tiempo de ejecución se detectó incorrectamente. Esto ocurrió en hosts Linux que ejecutan un daemon de Docker para servicios no relacionados. Establezca LINKEDIN_MCP_CONTAINER=false para anular la detección; true fuerza lo contrario.
Ruta personalizada de Chrome
  • Si Chrome está instalado en una ubicación no estándar, use --chrome-path /path/to/chrome
  • También se puede establecer mediante variable de entorno: CHROME_PATH=/path/to/chrome
  • En macOS y Linux, el navegador debe ser al menos tan nuevo como el que abrió su perfil por última vez, y el servidor rechaza el lanzamiento de lo contrario. (No en Windows: un navegador allí no puede consultarse su versión sin iniciar uno, por lo que la verificación está desactivada). Un navegador más antiguo puede eliminar silenciosamente almacenes que uno más nuevo escribió, incluida la sesión guardada, y el fallo entonces parece exactamente un inicio de sesión caducado. El mensaje nombra ambas versiones. Volver al Chromium incluido después de ejecutar un Chrome más nuevo una vez es la forma habitual de cumplir esto; o ejecute el navegador más nuevo de nuevo, cualquiera que haya sido, o ejecute --login, que mueve la sesión almacenada a un lado e inicia sesión de nuevo con el navegador que tiene. --logout también lo borra, pero descarta la sesión antigua en lugar de mantenerla recuperable, y solicita confirmación en la terminal, por lo que no se puede usar desde un servidor que un cliente MCP inició.
  • Solo Chrome, Chromium y Chrome for Testing se comparan de esta manera. Los forks se numeran de manera diferente (Vivaldi está en 7.x, el número de compilación de Edge está muy por debajo del de Chrome bajo el mismo major), por lo que apuntar CHROME_PATH a uno desactiva la verificación en lugar de producir un rechazo que nada podría satisfacer.
  • En la configuración documentada de Docker, esta verificación no se aplica. El contenedor nunca abre el perfil que creó con --login; deriva el suyo propio de sus cookies y, por defecto, lo reconstruye desde cero en cada inicio, por lo que no hay nada que una imagen más antigua pueda degradar. Con EXPERIMENTAL_PERSIST_DERIVED_RUNTIME se conserva el perfil derivado, y una etiqueta de imagen que retrocede lo descarta y lo vuelve a derivar, nuevamente sin que usted tenga que hacer nada. La verificación importa en el host, donde el servidor abre ese perfil directamente. No durante --login en sí, que mueve el perfil antiguo a un lado antes de iniciar un navegador y, por lo tanto, nunca puede activarla.


Usar un proxy

Proveedores de proxy patrocinados
Swiftproxy logo

Swiftproxy ofrece proxies residenciales con sesiones fijas y orientación geográfica mundial. Sus opciones dedicadas de ISP estático incluyen redes como AT&T, Sky UK y Rogers, con tráfico ilimitado y direcciones renovables.

Use el código PROXY90 para obtener un 10% de descuento Probar Swiftproxy →

RapidProxy logo

RapidProxy ofrece más de 90 millones de IP residenciales en todo el mundo para automatización de LinkedIn y flujos de trabajo de navegador, con sesiones fijas, orientación geográfica y soporte de alta concurrencia. Los planes comienzan en $0.55/GB con tráfico que no caduca. Use el código RAPID10 para obtener un 10% de descuento en Pruebe RapidProxy gratis →



LinkedIn puntúa la dirección desde la que la sesión inicia sesión. La dirección IP habitual de tu cuenta es la segura. Debes usar un proxy en tu país cuando el servidor no pueda usar la suya: una VPS, otro país o una segunda cuenta que no deba compartir la dirección de la primera.

Con un proveedor de pago, usa una sesión residencial fija que mantenga una sola dirección (nunca rotación por solicitud). Un túnel completo WireGuard o un nodo de salida Tailscale en tu red doméstica funciona cuando el servidor debe usar tu dirección doméstica habitual.

Ayuda de configuración

🔧 Configuración
  • Configura el proxy antes de --login. Mover una sesión existente a una nueva dirección activa un punto de control de LinkedIn. Eso incluye una sesión de --import-from-browser, que se creó en tu dirección real.
  • --proxy-server scheme://host:port o PROXY_SERVER, con http, https, socks4 o socks5. Solo se enruta el tráfico del navegador, no el transporte MCP.
  • Pasa las credenciales a través de PROXY_USERNAME y PROXY_PASSWORD, o inclúyelas en PROXY_SERVER usando la forma combinada http://user:pass@host:port. La forma combinada no es aceptada por la opción de CLI --proxy-server.
  • PROXY_BYPASS=localhost,127.0.0.1,::1 llega a los objetivos locales directamente. Con un proxy configurado, Chromium enruta localhost a través de él también.
❗ Solución de problemas
  • Chromium no puede autenticarse en un proxy SOCKS, por lo que las credenciales requieren un endpoint http(s). Si tu proveedor solo ofrece SOCKS5 autenticado, ejecuta un relé local que contenga las credenciales y apunta el servidor a ese.
  • Una contraseña de proxy incorrecta se muestra como un tiempo de espera o un inicio de sesión fallido, porque Chromium reintenta el desafío de autenticación hasta que la página agota el tiempo. Si las sesiones dejan de funcionar justo después de agregar un proxy, verifica primero las credenciales del proxy.
  • La importación automática se omite mientras hay un proxy configurado: la sesión importada se movería de tu dirección real al proxy. Usa --login.
  • Dentro de un contenedor, 127.0.0.1 es el propio contenedor, por lo que un relé en el host es host.docker.internal; el Docker nativo de Linux también necesita --add-host=host.docker.internal:host-gateway.


Configuración desde el código fuente (Desarrollar y contribuir)

Las contribuciones son bienvenidas. Consulta CONTRIBUTING.md para las pautas de arquitectura y las listas de verificación. Busca primero en los problemas existentes y luego usa los formularios de problemas para cualquier cosa nueva. Los agentes de IA siguen la habilidad de paquete de problemas.

Requisitos previos: Git y uv instalados

Instalación

Ejecuta en una terminal

# 1. Clone repository
git clone https://github.com/stickerdaniel/linkedin-mcp-server
cd linkedin-mcp-server

# 2. Install UV package manager (if not already installed)
curl -LsSf https://astral.sh/uv/install.sh | sh

# 3. Install dependencies
uv sync
uv sync --group dev

# 4. Install pre-commit hooks
uv run pre-commit install

# 5. Start the server
uv run -m linkedin_mcp_server

Ayuda de configuración

🔧 Configuración
Opciones de CLI

Sesión:

  • --login - Abre un navegador para iniciar sesión y guardar la sesión
  • --import-from-browser [BROWSER] - Reutiliza una sesión de un navegador Chromium con sesión iniciada localmente (chrome, chromium, brave, edge, arc, vivaldi, helium, yandex, whale, coccoc, opera, opera_gx, auto). La bandera simple elige auto, el navegador usado más recientemente con una sesión activa de LinkedIn.
  • --auto-import / --no-auto-import - Importa una sesión de un navegador local con sesión iniciada en la primera llamada de herramienta que la necesite, antes de recurrir al inicio de sesión manual (predeterminado: activado). Se omite en Docker, detrás de un proxy y en un enlace HTTP que no sea de bucle local. En macOS, el llavero puede solicitar una vez.
  • --status - Verifica si la sesión almacenada es válida y luego sale
  • --logout - Borra la sesión almacenada
  • --user-data-dir PATH - Directorio del perfil del navegador (predeterminado: ~/.linkedin-mcp/profile). Rotar o borrar una sesión elimina este directorio y su padre, que contiene las cookies almacenadas y los perfiles derivados.
  • --claim-profile-root - Toma el control de un directorio de perfil que el servidor no reclamará por sí solo, como uno cuyo padre ya contiene otros archivos. Se necesita una vez por directorio.

Transporte:

  • --transport {stdio,streamable-http} - Fuerza el modo de transporte (predeterminado: stdio)
  • --host HOST / --port PORT / --path PATH - Dirección del servidor HTTP (predeterminados: 127.0.0.1, 8000, /mcp)

Tiempos de espera:

  • --timeout MS - Tiempo de espera para una sola operación de página (predeterminado: 5000)
  • --tool-timeout SECONDS - Tiempo de espera para una llamada de herramienta completa (predeterminado: 180). Auméntalo para raspados pesados, redes lentas o un navegador de arranque en frío.
  • --login-timeout SECONDS - Cuánto tiempo espera el navegador de inicio de sesión a que termines de iniciar sesión (predeterminado: 1800; 0 = sin límite). --login-viewer finaliza la sesión después de 30 minutos de todos modos.
  • --login-inline-wait SECONDS - Cuánto tiempo espera una llamada de herramienta a que un inicio de sesión termine antes de decirle al modelo que reintente (predeterminado: 25, máximo 45; 0 = devolver de inmediato)

Navegador compartido:

  • --browser-wait SECONDS - Cuánto tiempo esperar a que otro proceso del servidor entregue el navegador compartido (predeterminado: 25, máximo 45; 0 = informar ocupado de inmediato). Solo importa con varios clientes MCP ejecutándose a la vez.
  • --browser-min-hold SECONDS - Tiempo más corto que este proceso mantiene el navegador compartido antes de entregarlo (predeterminado: 20). Se limita a 3 segundos por debajo de --browser-wait, así que auméntalo junto con ese. Un valor más alto significa menos reinicios del navegador pero esperas más largas para otros clientes.
  • --browser-idle-timeout SECONDS - Cierra un navegador inactivo y libera el perfil después de este tiempo sin una llamada de herramienta (predeterminado: 600; 0 = mantenerlo abierto)

Navegador:

  • --no-headless - Muestra la ventana del navegador (útil para depuración)
  • --slow-mo MS - Retraso entre acciones del navegador (predeterminado: 0, útil para depuración)
  • --viewport WxH - Tamaño de la ventana gráfica (predeterminado: 1280x720). Se aplica solo al modo sin ventana; un lanzamiento con ventana usa el tamaño real de la ventana.
  • --chrome-path PATH - Ruta a un ejecutable de Chrome/Chromium
  • --installer-temp-dir PATH - Directorio existente para archivos temporales de instalación del navegador (entorno: INSTALLER_TEMP_DIR).
  • --proxy-server URL - Enruta el tráfico del navegador a través de un proxy, como scheme://host:port. Configúralo antes de --login; consulta Usar un proxy.

Otros:

  • --log-level {DEBUG,INFO,WARNING,ERROR} - Nivel de registro (predeterminado: WARNING)
  • --help - Muestra la ayuda

Nota: La mayoría de las opciones de CLI tienen equivalentes de variables de entorno. Consulta .env.example para más detalles.

Modo HTTP y Claude Desktop

Ejemplo de modo HTTP (para clientes MCP basados en web):

uv run -m linkedin_mcp_server --transport streamable-http --host 127.0.0.1 --port 8000 --path /mcp

Claude Desktop:

{
  "mcpServers": {
    "mcp-server-linkedin": {
      "command": "uv",
      "args": ["--directory", "/path/to/linkedin-mcp-server", "run", "-m", "linkedin_mcp_server"]
    }
  }
}

stdio se usa por defecto para esta configuración.

❗ Solución de problemas
Problemas de inicio de sesión
  • Asegúrate de tener solo una sesión activa de LinkedIn a la vez
  • LinkedIn puede requerir una confirmación de inicio de sesión en la aplicación móvil de LinkedIn para --login
  • LinkedIn puede mostrar un desafío de captcha durante el inicio de sesión. El comando --login abre un navegador donde puedes resolverlo manualmente.
Problemas de raspado
  • Usa --no-headless para ver las acciones del navegador y depurar problemas de raspado
  • Agrega --log-level DEBUG para ver un registro más detallado
Problemas de sesión
  • El perfil del navegador se almacena en ~/.linkedin-mcp/profile/
  • Las descargas del navegador administrado se almacenan en caché en ~/.linkedin-mcp/patchright-browsers/, compartido con las instalaciones de uvx y MCP Bundle
  • La caché del navegador sigue creciendo: Patchright mantiene una revisión antigua de Chromium mientras cualquier versión instalada aún la referencie, y un archivo uv o un segundo árbol de trabajo es una referencia de ese tipo. El servidor registra una advertencia nombrando lo que contiene. Para recuperar el espacio, detén cada instancia del LinkedIn MCP Server, elimina ~/.linkedin-mcp/patchright-browsers/ y deja que el próximo lanzamiento descargue el navegador actual.
  • Usa --logout para borrar el perfil y comenzar de nuevo
Problemas de Python/Patchright
  • Verifica la versión de Python: python --version (debe ser 3.12.4+)
  • Reinstala Patchright: uv run patchright install chromium
  • Reinstala las dependencias: uv sync --reinstall
Problemas de tiempo de espera
  • Operaciones de página que fallan (elementos no encontrados, navegación que se cuelga): aumenta el tiempo de espera de operación de página del navegador: --timeout 10000 o TIMEOUT=10000 (milisegundos, predeterminado 5000).
  • Llamadas de herramienta completas que agotan el tiempo (por ejemplo, perfiles de varias secciones, Chromium de arranque en frío, contenedores lentos): aumenta el tiempo de espera de ejecución por herramienta: --tool-timeout 300 o TOOL_TIMEOUT=300 (segundos, predeterminado 180).
  • Primera llamada de herramienta sin sesión: si un navegador con sesión iniciada localmente tiene una sesión activa de LinkedIn, el servidor la importa automáticamente (consulta AUTO_IMPORT_FROM_BROWSER / --auto-import) en lugar de forzar un inicio de sesión manual. En macOS, el llavero puede solicitar una vez el acceso a Safe Storage. Si no existe una sesión de navegador importable, recurre a abrir una ventana de inicio de sesión y espera hasta LOGIN_INLINE_WAIT segundos (predeterminado 25, máximo 45; --login-inline-wait) para que un inicio de sesión rápido se resuelva en una llamada. Si la espera transcurre, la herramienta devuelve una señal pendiente y el modelo reintenta en unos 30 segundos. Ni la importación automática ni la espera en línea se aplican bajo Docker o cuando el servidor está vinculado a un host HTTP que no sea de bucle local. Crea la sesión en el host con --login, o usa el comando explícito de Docker --login --login-viewer.
  • Los usuarios con conexiones lentas pueden necesitar valores más altos para cualquiera de los dos.
Se te dijo que ejecutaras --login en el host cuando ya lo hiciste
  • Si las llamadas de herramienta responden "No valid LinkedIn session is available in Docker" en una máquina que no es un contenedor, el entorno de ejecución se detectó incorrectamente. Esto sucedió en hosts Linux que ejecutan un daemon de Docker para servicios no relacionados. Configura LINKEDIN_MCP_CONTAINER=false para anular la detección; true fuerza lo contrario.
Ruta personalizada de Chrome
  • Si Chrome está instalado en una ubicación no estándar, usa --chrome-path /path/to/chrome
  • También se puede configurar mediante variable de entorno: CHROME_PATH=/path/to/chrome
  • En macOS y Linux, el navegador debe ser al menos tan nuevo como el que abrió tu perfil por última vez, y el servidor rechaza el lanzamiento de lo contrario. (No en Windows: a un navegador allí no se le puede preguntar su versión sin iniciar uno, por lo que la verificación está desactivada). Un navegador más antiguo puede descartar silenciosamente almacenes que uno más nuevo escribió, incluida la sesión guardada, y el fallo entonces se ve exactamente como un inicio de sesión caducado. El mensaje nombra ambas versiones. Volver al Chromium incluido después de ejecutar un Chrome más nuevo una vez es la forma habitual de cumplir esto; o ejecuta el navegador más nuevo nuevamente, cualquiera que haya sido, o ejecuta --login, que mueve la sesión almacenada a un lado e inicia sesión de nuevo con el navegador que tienes. --logout también lo borra pero descarta la sesión antigua en lugar de mantenerla recuperable, y pide confirmación en la terminal, por lo que no se puede usar desde un servidor que un cliente MCP inició.
  • Solo Chrome, Chromium y Chrome for Testing se comparan de esta manera. Los forks se numeran de manera diferente (Vivaldi está en 7.x, el número de compilación de Edge está muy por debajo del de Chrome bajo el mismo mayor), por lo que apuntar CHROME_PATH a uno desactiva la verificación en lugar de producir un rechazo que nada podría satisfacer.


[!IMPORTANT] Preguntas frecuentes

¿Es seguro usarlo? ¿Me pueden banear? Esta herramienta controla una sesión real de navegador; no explota APIs no documentadas ni evita la autenticación. El Acuerdo de Usuario de LinkedIn prohíbe el acceso automatizado, y las cuentas que usan herramientas automatizadas pueden ser restringidas o baneadas. Úsalo bajo tu propio riesgo; no hay garantía de seguridad de la cuenta. Si encuentras algún problema, házmelo saber en los Debates.

¿Qué pasa si mis agentes ejecutan demasiadas acciones? Las llamadas a herramientas se ejecutan secuencialmente a través de una cola. Eres responsable del volumen de automatización que ejecutes; úsalo con moderación y guía a tus agentes de manera responsable.

Agradecimientos

Construido con FastMCP y Patchright.

Úsalo de acuerdo con el Acuerdo de Usuario de LinkedIn. El acceso automatizado puede violar los términos de LinkedIn y puede llevar a restricciones de cuenta. Esta herramienta es solo para uso personal y no incluye ninguna garantía de ningún tipo.

Licencia

Este proyecto está licenciado bajo la licencia Apache 2.0.

¡Se agradece construir sobre este proyecto! Consulta la licencia para los términos y el NOTICE para la atribución.