linkedin-mcp
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 |
| 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 |
| Una oferta completa: empresa, ubicación, la información del empleo de LinkedIn y la descripción entera con el bloque «See more» expandido. |
| Nombre, titular, ubicación, texto de «Acerca de», historial de experiencia, educación y habilidades. |
| Indica si la sesión de navegador guardada sigue iniciada. |
| 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 syncInicia 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 --loginLa 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=systemo 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 pytestLas 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
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 Servers
- AlicenseAqualityAmaintenanceEnables AI assistants to interact with LinkedIn by scraping profiles, companies, job postings, and getting personalized job recommendations using authenticated browser automation.173,204Apache 2.0
- FlicenseAqualityNot gradedmaintenanceEnables 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.221
- AlicenseAqualityDmaintenanceEnables 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.7175MIT
- AlicenseNot gradedqualityBmaintenanceEnables AI assistants to search, filter, and extract job listings from LinkedIn using an automated headless browser with semantic AI filtering and deduplication.15MIT
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.
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/TSS99/linkedin-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server