Saltar al contenido
juancespedes.dev
Todos los proyectos
Caso de estudio

linkedin-pilot, servidor MCP para LinkedIn

Servidor MCP y CLI en TypeScript que permite a un asistente de IA actualizar un perfil, interactuar y postular a ofertas con la sesión real del usuario, con confirmación explícita antes de cada acción visible para terceros.

Ficha del proyecto

Rol
Autor y mantenedor
Periodo
sept de 2026 a hoy
  • 35+

    herramientas MCP documentadas para perfil, interacciones y postulacionesFuente: README del repositorio, octubre de 2026

El problema

La API oficial de LinkedIn no permite escribir en el perfil ni postular a ofertas, porque el acceso real exige un programa de socios y ni siquiera los socios pueden editar la experiencia. Quería que un asistente de IA hiciera ese trabajo con mi propia sesión, sin guardar mi contraseña y sin acciones sorpresa.

Mi rol

  • Diseñé la separación entre lectura y escritura y el motor de formularios.
  • Implementé el servidor MCP, la CLI y el banco de respuestas reutilizables.
  • Lo publiqué con documentación de instalación, diagnóstico y una salida de emergencia para terminar a mano cualquier flujo.

Restricciones

  • No hay API oficial para escribir, así que la única vía es la interfaz real.
  • La interfaz cambia de estructura y de clases CSS sin aviso, y se sirve en el idioma de la cuenta.
  • Ninguna acción visible para otras personas puede ocurrir sin confirmación explícita.
  • El inicio de sesión no se automatiza, porque dispara bloqueos y obligaría a guardar la contraseña.

Decisiones

  1. 01

    Leer por la API interna y escribir por la interfaz

    La API interna que usa la propia página devuelve el perfil y las ofertas estructurados en una sola llamada, con la sesión del mismo navegador. Para escribir no hay endpoint, así que se usa la interfaz, y si una vía falla se cae a la otra.

    Descartado

    • Raspar el HTML tanto para leer como para escribir
  2. 02

    Campos identificados por su etiqueta visible

    El motor de formularios lee el nombre accesible de cada control y lo empareja con un glosario bilingüe, así resiste los cambios de HTML y funciona con la cuenta en español o en inglés.

    Descartado

    • Selectores por clases CSS
  3. 03

    Un solo motor para el perfil y las postulaciones

    Editar una sección del perfil y completar una solicitud son el mismo problema, un formulario con campos. Una sola pieza resuelve ambos y una sección nueva queda soportada sin tocar código.

    Descartado

    • Un flujo escrito a mano para cada formulario
  4. 04

    Simulación por defecto y confirmación explícita

    Las acciones visibles para otras personas exigen confirmación, y las postulaciones corren primero en modo simulación para revisar las preguntas pendientes antes de enviar.

    Descartado

    • Ejecutar directamente lo que pida el asistente

Arquitectura

Un asistente de IA llama herramientas del servidor MCP. El servidor conduce un navegador con la sesión persistente del usuario, lee por la API interna de la página y escribe por la interfaz con un motor de formularios genérico.
  1. Clientes

    • Asistente de IACualquier cliente MCP
    • CLILos mismos comandos desde la terminal
  2. Servidor

    • Servidor MCPMás de 35 herramientas con confirmación
    • Motor de formulariosEtiquetas visibles y glosario bilingüe
    • Banco de respuestasRespuestas reutilizables
  3. Navegador

    • Navegador persistentePlaywright con la sesión del usuario
  4. LinkedIn

    • API internaLectura de perfil y ofertas
    • Interfaz webEscritura en perfil y solicitudes

Cómo se mueven los datos

  1. Asistente de IAhaciaServidor MCPLlamadas a herramientas
  2. CLIhaciaServidor MCPMismo núcleo
  3. Servidor MCPhaciaNavegador persistenteLecturas y acciones
  4. Servidor MCPhaciaMotor de formulariosEscrituras
  5. Banco de respuestashaciaMotor de formulariosRespuestas guardadas
  6. Navegador persistentehaciaAPI internaLectura con la sesión del navegador
  7. Motor de formularioshaciaInterfaz webLlena y envía formularios

Resultados

  • Un asistente puede actualizar el perfil completo, interactuar con otras personas y completar solicitudes con la sesión real del usuario.
  • Unas herramientas de navegador directas permiten terminar a mano cualquier flujo que falle, sin editar el proyecto.
  • El código es público, con documentación de instalación y diagnóstico.

Qué haría distinto

  • Pondría límites diarios conservadores y pausas entre acciones desde el primer día, porque las plataformas detectan patrones de automatización aunque la sesión sea real.
  • Agregaría pruebas con páginas reales guardadas para detectar los cambios de la interfaz antes de que fallen en uso.

Tecnologías

  • TypeScript
  • Node.js
  • Model Context Protocol
  • Playwright
  • REST APIs