LinkedIn MCP Server
Un servidor MCP para la API REST v2 de LinkedIn que permite a asistentes de IA crear, listar y eliminar publicaciones, gestionar eventos, subir imágenes, comentar y reaccionar, con OAuth 2.0 y persistencia de sesión, seguimiento local del historial de publicaciones y múltiples pruebas automatizadas.
Documentación
Servidor MCP de LinkedIn
Un servidor de Protocolo de Contexto de Modelo (MCP) que proporciona a los asistentes de IA acceso a la API oficial de LinkedIn. Crea publicaciones, gestiona eventos e interactúa con LinkedIn, todo mediante lenguaje natural a través de cualquier cliente compatible con MCP.
Solo API oficial. Sin scraping, sin endpoints no oficiales, sin riesgo para tu cuenta.
Características
Herramientas de autoservicio (sin aprobación de LinkedIn)
| Herramienta | Descripción |
|---|---|
linkedin_auth_start | Iniciar el flujo de autenticación OAuth 2.0 |
linkedin_auth_callback | Completar OAuth con el código de autorización |
linkedin_auth_logout | Revocar el token y cerrar sesión |
linkedin_get_my_profile | Obtener tu perfil de LinkedIn (nombre, titular, foto, correo) |
linkedin_get_my_email | Obtener tu dirección de correo electrónico |
linkedin_get_auth_status | Verificar el estado de autenticación |
linkedin_get_rate_limits | Ver el uso de los límites de tasa de la API |
linkedin_create_post | Crear publicaciones de texto, artículo o imagen |
linkedin_delete_post | Eliminar tus publicaciones |
linkedin_create_comment | Comentar en publicaciones |
linkedin_react_to_post | Reaccionar a publicaciones (me gusta, celebrar, apoyar, amar, perspicaz, divertido) |
linkedin_upload_image | Subir imágenes para publicaciones |
linkedin_list_my_posts | Listar publicaciones creadas a través de este servidor con URNs de referencia |
linkedin_create_event | Crear eventos de LinkedIn |
linkedin_get_event | Obtener detalles del evento |
Aspectos destacados de la arquitectura
- OAuth 2.0 - Autenticación segura con almacenamiento persistente de tokens
- Restauración automática de sesión - Sobrevive a reinicios del servidor sin reautenticación (hasta que el token expire)
- Seguimiento del historial de publicaciones - Registro local en SQLite de publicaciones creadas a través del servidor para fácil referencia y eliminación
- Limitación de tasa adaptativa - Aprende los límites reales de LinkedIn a partir de los encabezados de respuesta
- Reintento automático - Retroceso exponencial para fallos transitorios (429, 5xx)
- Detección de capacidades - Solo expone herramientas que coinciden con tus alcances otorgados
- Versionado de API - Maneja la rotación mensual de versiones de la API de LinkedIn
Requisitos previos
- Node.js 20+
- Aplicación de desarrollador de LinkedIn (consulta los pasos de configuración a continuación)
Configuración de la aplicación de LinkedIn
Paso 1: Crear una aplicación de desarrollador de LinkedIn
- Ve a linkedin.com/developers/apps e inicia sesión
- Haz clic en Create app
- Completa los campos obligatorios:
- App name: Elige cualquier nombre (por ejemplo, "My MCP LinkedIn")
- LinkedIn Page: Selecciona tu página de LinkedIn o crea una si es necesario
- Privacy policy URL: Puedes usar la URL de tu sitio web o un marcador de posición
- App logo: Sube cualquier imagen (obligatorio)
- Marca la casilla del acuerdo legal y haz clic en Create app
Paso 2: Obtener tu Client ID y Client Secret
- Después de crear la aplicación, aterrizarás en la página de configuración de la aplicación
- Ve a la pestaña Auth
- Copia el Client ID - lo necesitarás para la configuración
- Copia el Client Secret (haz clic en el ícono del ojo para revelarlo) - también lo necesitarás
Paso 3: Agregar la URL de redirección
- Aún en la pestaña Auth, desplázate hasta OAuth 2.0 settings
- Bajo Authorized redirect URLs for your app, haz clic en Add redirect URL
- Ingresa:
http://localhost:3000/callback - Haz clic en Update para guardar
Importante: La URL de redirección debe coincidir exactamente, incluidos el protocolo (
http://), el puerto (:3000) y la ruta (/callback). Sin barra diagonal final.
Paso 4: Habilitar los productos requeridos
- Ve a la pestaña Products en la página de tu aplicación
- Solicita acceso a estos dos productos:
- Sign In with LinkedIn using OpenID Connect - Haz clic en Request access, revisa los términos y acepta
- Share on LinkedIn - Haz clic en Request access, revisa los términos y acepta
- Ambos productos suelen aprobarse al instante para uso de autoservicio
Verifica: Después de habilitarlos, vuelve a la pestaña Auth. Bajo OAuth 2.0 scopes, deberías ver:
openid,profile,w_member_social.
Inicio rápido
1. Instalación
git clone https://github.com/souravdasbiswas/linkedin-mcp-server.git
cd linkedin-mcp-server
npm install
npm run build
2. Configura tu cliente MCP
Para Claude Code (recomendado):
claude mcp add linkedin \
-e LINKEDIN_CLIENT_ID=your_client_id \
-e LINKEDIN_CLIENT_SECRET=your_client_secret \
-- node /path/to/linkedin-mcp-server/dist/index.js
O agrégalo manualmente a ~/.claude.json:
{
"mcpServers": {
"linkedin": {
"command": "node",
"args": ["/path/to/linkedin-mcp-server/dist/index.js"],
"env": {
"LINKEDIN_CLIENT_ID": "your_client_id",
"LINKEDIN_CLIENT_SECRET": "your_client_secret"
}
}
}
}
Para Claude Desktop, agrégalo a claude_desktop_config.json:
{
"mcpServers": {
"linkedin": {
"command": "node",
"args": ["/path/to/linkedin-mcp-server/dist/index.js"],
"env": {
"LINKEDIN_CLIENT_ID": "your_client_id",
"LINKEDIN_CLIENT_SECRET": "your_client_secret"
}
}
}
}
Reemplaza your_client_id y your_client_secret con los valores del Paso 2.
3. Autenticación
Una vez conectado, dile a tu asistente de IA:
"Authenticate with LinkedIn"
El asistente generará una URL de OAuth. Esto es lo que sucede:
- Abre la URL en tu navegador
- Inicia sesión en LinkedIn y haz clic en Allow para autorizar la aplicación
- LinkedIn redirige a
http://localhost:3000/callback?code=XXX&state=YYY - Como no hay un servidor local escuchando, verás un error de "página no encontrada" - eso es esperado
- Copia la URL completa de la barra de direcciones de tu navegador y pégala de vuelta al asistente
- El asistente extrae los parámetros
codeystatey completa la autenticación
Después de la primera autenticación, tu sesión persiste entre reinicios del servidor (el token es válido por 60 días). Solo necesitas reautenticarte cuando el token expire.
4. Úsalo
Ejemplos de indicaciones:
- "Post to LinkedIn: Just shipped a new feature that reduces API latency by 40%"
- "List my LinkedIn posts" - ver todas las publicaciones que has hecho a través del servidor
- "Delete my last LinkedIn post"
- "Create a LinkedIn event for our team meetup next Friday at 2pm"
- "React to this LinkedIn post with a celebrate reaction"
- "What's my LinkedIn profile info?"
Variables de entorno
| Variable | Obligatoria | Predeterminado | Descripción |
|---|---|---|---|
LINKEDIN_CLIENT_ID | Sí | - | Client ID de la aplicación de LinkedIn |
LINKEDIN_CLIENT_SECRET | Sí | - | Client secret de la aplicación de LinkedIn |
LINKEDIN_REDIRECT_URI | No | http://localhost:3000/callback | URI de redirección de OAuth |
LINKEDIN_MCP_DATA_DIR | No | ~/.linkedin-mcp | Directorio para el almacenamiento de tokens |
LINKEDIN_API_BASE_URL | No | https://api.linkedin.com | URL base de la API (anular para pruebas) |
LINKEDIN_AUTH_BASE_URL | No | https://www.linkedin.com/oauth/v2 | URL base de autenticación |
Desarrollo
# Install dependencies
npm install
# Type check
npm run typecheck
# Run tests
npm test
# Run tests in watch mode
npm run test:watch
# Run with coverage
npm run test:coverage
# Lint
npm run lint
# Dev mode (tsx, no build needed)
npm run dev
Arquitectura de pruebas
Las pruebas se ejecutan completamente contra un servidor simulado de la API de LinkedIn - no se realizan llamadas reales a la API.
| Capa | Qué prueba | Archivos |
|---|---|---|
| Pruebas unitarias | Auth, PKCE, almacén de tokens, limitador de tasa, errores, capacidades | tests/unit/ |
| Pruebas de integración | Flujo completo del protocolo MCP mediante transporte en memoria | tests/integration/ |
| Pruebas de contrato | Las formas de solicitud/respuesta coinciden con la especificación de la API de LinkedIn | tests/contract/ |
Estructura del proyecto
src/
index.ts # Entry point, stdio transport
server.ts # MCP server wiring
auth/
oauth2.ts # OAuth 2.0 flow + token exchange
token-store.ts # SQLite token persistence + session auto-restore
pkce.ts # PKCE challenge generation (available for public clients)
tools.ts # Auth MCP tools
client/
api-client.ts # HTTP client with retry
rate-limiter.ts # Adaptive rate limiting
version-manager.ts # LinkedIn API versioning
errors.ts # Structured error types
post-history.ts # Local post tracking (SQLite)
capabilities/
detector.ts # Scope-based capability detection
modules/
profile/tools.ts # Profile reading tools
posting/tools.ts # Post creation/management tools
events/tools.ts # Event management tools
types/
linkedin.ts # LinkedIn API type definitions
config.ts # Server configuration types
Limitaciones
Estas son restricciones de la API de LinkedIn, no limitaciones del servidor:
- No se pueden leer perfiles de otros - Solo el perfil del usuario autenticado
- No se puede buscar personas - No hay API pública de búsqueda
- No se pueden enviar mensajes - Solo disponible para socios de Sales Navigator
- No se pueden leer feeds - El alcance
r_member_socialestá cerrado - No se puede acceder a conexiones - Solo el recuento de conexiones con aprobación de Marketing API
- Límites de tasa - ~500 llamadas de aplicación/día, ~100 por miembro/día (nivel de desarrollo)
Extensión al nivel Pro
Si tu aplicación de LinkedIn tiene aprobación de Community Management API o Advertising API, la detección de capacidades del servidor habilitará automáticamente módulos adicionales cuando te autentiques con los alcances correspondientes. La arquitectura modular admite agregar nuevos módulos de API sin modificar el servidor principal.
Licencia
MIT