Skip to main content
Glama
TSS99
by TSS99

LinkedIn MCP

Un servidor MCP que permite a un asistente de IA buscar ofertas de empleo en LinkedIn y leer perfiles de LinkedIn, controlando una ventana real de Chrome a través del protocolo DevTools.

Es de solo lectura. No hay ninguna herramienta aquí que conecte, envíe mensajes, respalde, publique o postule; no como una opción de configuración, sino porque el código para hacerlo no existe. Es una línea deliberada: LinkedIn trata la escritura automatizada con mucha más severidad que la lectura automatizada, y mezclar ambas es lo que hace que se restrinjan cuentas.

Herramientas

Herramienta

Qué devuelve

linkedin_search_jobs

Listados con el título, la empresa, la ubicación, la modalidad de trabajo, el salario cuando se publica, la antigüedad de la publicación y job_id. Filtros: ubicación, publicadas en los últimos días, nivel de experiencia, tipo de empleo, modalidad de trabajo, Easy Apply, orden de clasificación.

linkedin_get_job

Una oferta completa: empresa, ubicación, la información del empleo de LinkedIn y la descripción entera con el bloque «See more» expandido.

linkedin_get_profile

Nombre, titular, ubicación, texto de «Acerca de», historial de experiencia, educación y habilidades.

linkedin_check_session

Indica si la sesión de navegador guardada sigue iniciada.

linkedin_close_session

Se desconecta de Chrome y deja la ventana y la sesión intactas.

Related MCP server: LinkedIn Sales & Navigator MCP Server

Instalación

Requiere Python 3.12+, uv y Google Chrome.

git clone https://github.com/TSS99/linkedin-mcp.git
cd linkedin-mcp
uv sync

Inicia sesión una vez. Esto abre una ventana de Chrome y espera a que inicies sesión manualmente: el script nunca teclea las credenciales, porque LinkedIn desafía la introducción automatizada de credenciales:

uv run linkedin-mcp --login

La sesión persiste en ~/.linkedin-mcp/chrome-profile. Puedes comprobarla cuando quieras con uv run linkedin-mcp --check, o borrarla con uv run linkedin-mcp --logout.

Qué perfil de Chrome controla

Por defecto, el servidor abre un perfil desechable propio. Esa ventana parecerá recién estrenada: sin marcadores, sin extensiones, sin sesión iniciada en nada más que LinkedIn. Ese es el punto: el servidor solo puede ver LinkedIn.

Si prefieres que controle tu Chrome habitual, de modo que reutilice la sesión de LinkedIn que ya tienes y no abra una ventana extraña, configura:

LINKEDIN_MCP_PROFILE_DIR=system

o apúntalo explícitamente a cualquier directorio de perfil. En la configuración de un cliente MCP, eso va en el bloque env:

{
  "mcpServers": {
    "linkedin": {
      "command": "uv",
      "args": ["--directory", "/path/to/linkedin-mcp", "run", "linkedin-mcp"],
      "env": { "LINKEDIN_MCP_PROFILE_DIR": "system" }
    }
  }
}

Aun así tienes que reiniciar Chrome una vez. --remote-debugging-port solo surte efecto al arrancar; no se puede activar en un proceso que ya está en ejecución. Por tanto, nunca se puede conectar a un Chrome que esté abierto en ese momento, diga lo que diga la configuración de perfil. Ciérralo por completo (Cmd+Q, no basta con cerrar la ventana) y deja que el servidor lo inicie, o inícialo tú mismo con el comando que imprime --login.

El puerto de depuración no está limitado a LinkedIn. Cualquier cosa que pueda acceder a 127.0.0.1:9224 puede controlar todas las pestañas de ese Chrome y leer todas las sesiones que contiene — tu correo, tu banco, todo — no solo LinkedIn. En el perfil aislado no hay nada más a lo que acceder. En tu perfil habitual lo hay todo. Ejecútalo así solo en una máquina de confianza y cierra el Chrome de depuración cuando termines.

--logout se niega a eliminar un perfil que no ha creado, así que apuntarlo a tu Chrome real no puede borrar el estado de tu navegador.

Configuración

Añade a la configuración de tu cliente MCP (ver mcp-config.example.json):

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

Para Claude Code: claude mcp add linkedin -- uv --directory /path/to/linkedin-mcp run linkedin-mcp

Cómo funciona y por qué

CDP contra un perfil real de Chrome, no contra un navegador iniciado. El Chromium de Playwright se anuncia de una docena de formas que LinkedIn comprueba. Conectarse a un Chrome real en el que has iniciado sesión tú mismo mantiene fieles la huella y la cookie. El servidor se ejecuta en el puerto de depuración 9224, por lo que coexiste con otros servidores MCP controlados por navegador en 9222/9223.

Las navegaciones se espacian. LinkedIn limita la tasa según la cadencia, no solo el volumen, así que goto impone un intervalo mínimo con variación aleatoria. Una sesión de investigación larga es más lenta de lo que podría ser, a propósito.

Cada cadena del DOM de LinkedIn aparece dos veces: una visible y otra en un span visually-hidden para lectores de pantalla, por lo que el innerText bruto se lee como "Acme Corp\nAcme Corp". dedupe_lines colapsa las repeticiones consecutivas; sin él, todos los campos analizados salen duplicados.

Los selectores son listas ordenadas de respaldo. Los nombres de clase de LinkedIn están ofuscados y se renombran a menudo. Cuando es posible, los analizadores se anclan en elementos que han sobrevivido a los cambios de clase — el atributo data-occludable-job-id, los ids de anclaje estables div#experience — y recurren a analizar el orden de las líneas del texto de la tarjeta en lugar de confiar en un gancho por campo.

Un raspado fallido nunca devuelve un resultado vacío. Cada herramienta está envuelta para que un anclaje ausente devuelva {"status": "error", "error_type": "stale_selector", ...} nombrando el selector y la URL. Si a un LLM se le pasa [], informará de "no se encontraron ofertas" con total confianza; esto hace que una herramienta rota y un vacío real sean distinguibles.

Pruebas

uv run pytest

Las pruebas cubren los analizadores puros — construcción de URL/filtros, análisis de tarjetas, análisis de entradas de perfil, deduplicación de líneas — contra datos de prueba con la forma que produce realmente el DOM de LinkedIn. No necesitan navegador ni red.

Cuándo se rompe

Se romperá. LinkedIn publica cambios de marcado constantemente, y un scraper es una conjetura sobre el HTML de otra persona. Espera errores stale_selector con el tiempo; la solución suele ser una entrada más en una lista de selectores en tools/jobs.py o tools/profiles.py, además de un dato de prueba en tests/test_parsers.py.

Si obtienes auth_required con una URL de checkpoint, LinkedIn quiere a un humano: abre la ventana de Chrome, resuelve el desafío y reintenta.

Un apunte sobre los términos de uso

El acceso automatizado va contra el Contrato de Usuario de LinkedIn, independientemente de lo cuidadosa que sea la implementación, y LinkedIn sí restringe cuentas por ello. Esta es una herramienta de investigación personal; el diseño de solo lectura y las solicitudes espaciadas reducen el riesgo, pero no lo eliminan, y la cuenta a la que la apuntes es la que asume ese riesgo. Usa tu criterio.

Licencia

Apache-2.0

Install Server
A
license - permissive license
A
quality
C
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Servers

  • F
    license
    A
    quality
    Not graded
    maintenance
    Enables AI assistants to interact with LinkedIn and LinkedIn Sales Navigator for searching profiles, managing leads, and handling messaging via cookie-based authentication. It supports professional networking tasks such as sending connection requests and retrieving account details through the Model Context Protocol.
    22
    1
  • A
    license
    A
    quality
    D
    maintenance
    Enables searching and scraping of LinkedIn for structured data on people, companies, and job listings. It allows AI clients to retrieve detailed profiles, experience, and activity sections using browser automation.
    7
    175
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables AI assistants to search, filter, and extract job listings from LinkedIn using an automated headless browser with semantic AI filtering and deduplication.
    15
    MIT

View all related MCP servers

Related MCP Connectors

  • Give AI agents the LinkedIn tools to find, qualify, engage, and follow up with prospects.

  • Live LinkedIn data for AI agents: profiles, companies, jobs, posts, email finding. No account risk.

  • Run LinkedIn outreach from your AI chat: find leads, launch campaigns, send, and reply.

View all MCP Connectors

Latest Blog Posts

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/TSS99/linkedin-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server