Skip to main content
Glama

Linkedin Posts Job Radar

Encuentra ofertas de empleo reales en LinkedIn sin el ruido

MCP Server TypeScript Playwright React Express Vite Tailwind CSS SQLite License: ISC


Pídele a tu asistente de IA que busque en LinkedIn. Linkedin Posts Job Radar extrae los resultados, descarta todo lo que no sea un empleador contratando en un mercado que te interese, y te ofrece un panel para clasificar lo que queda en Ok, Quizá y No me interesa.

Todo permanece en tu máquina. Sin cuentas, sin servidores, sin que ningún dato salga de tu portátil.

El panel de Linkedin Posts Job Radar, filtrado a publicaciones que mencionan salario


Por qué

Busca "Senior Data Scientist" en LinkedIn y obtienes ofertas abiertas mezcladas con gente anunciando que está disponible, anuncios de cursos, resúmenes de newsletters y el mismo repost de agencia de staffing veinte veces — la mayor parte en países en los que no puedes trabajar.

Linkedin Posts Job Radar examina cada publicación antes de guardarla, así que clasificas una lista corta en lugar de abrirte paso entre cientos:

Harvest complete: 9 new posts added, 3 duplicates skipped,
12 rejected as outside allowed markets,
18 rejected as non-vacancy or agency posts

Related MCP server: LinkedIn-Posts-Hunter-MCP-Server

Instalación

Necesitarás Node.js 18+ y un cliente MCP como Claude Code, Claude Desktop o Cursor. Chromium se descarga solo en el primer uso.

Lo más rápido: sin clonar

Apunta tu cliente directamente al repositorio — npm lo descarga y compila por ti.

claude mcp add job-radar -- npx -y github:MaryemeBay/linkedin-posts-job-radar
{
  "mcpServers": {
    "job-radar": {
      "command": "npx",
      "args": ["-y", "github:MaryemeBay/linkedin-posts-job-radar"]
    }
  }
}
{
  "mcpServers": {
    "job-radar": {
      "command": "npx",
      "args": ["-y", "github:MaryemeBay/linkedin-posts-job-radar"]
    }
  }
}

El primer arranque tarda un par de minutos mientras compila y descarga Chromium; los arranques posteriores son inmediatos.

Cambiar las reglas de filtrado requiere el código fuente, así que clona si quieres ajustar qué mercados están permitidos.

Clonar, para cambiar las reglas

git clone https://github.com/MaryemeBay/linkedin-posts-job-radar.git
cd linkedin-posts-job-radar
npm run setup
npm run build

Regístralo con la ruta absoluta a donde lo hayas clonado:

claude mcp add job-radar -- node /absolute/path/to/linkedin-posts-job-radar/build/main.js

Para Claude Desktop o Cursor usa el JSON de arriba, con "command": "node" y "args": ["/ruta/absoluta/.../build/main.js"].

Como paquete

npm run bundle produce un archivo .mcpb que los clientes compatibles con paquetes MCP pueden instalar directamente, sin necesidad de herramientas de Node en la máquina donde se instala.

Configura tus mercados

Abre src/intake/market-policy.ts y lista los lugares donde aceptarías un trabajo de verdad:

export const ALLOWED_COUNTRIES = [
  'France',
  'United Kingdom',
  'Remote (Europe)',
  'Remote (Worldwide)',
]

Solo necesario si has clonado. Ejecuta npm run build después de editar — cualquier cosa fuera de esta lista nunca llega a tu base de datos.


Cómo usarlo

Habla con tu asistente en lenguaje natural:

"Inicia sesión en mi cuenta de LinkedIn" Se abre una ventana del navegador. Inicia sesión una vez — la sesión se guarda localmente, así que no te lo volverán a pedir.

"Busca en LinkedIn ofertas de Senior Data Scientist en Londres" Extrae los resultados e informa de lo que ha conservado y lo que ha descartado.

"Abre el panel" Abre localhost:7391. Clasifica las publicaciones como Ok / Quizá / No me interesa.

"Muéstrame todo lo que marqué como Ok que mencione un salario" Filtra el panel desde la conversación.

"Elimina todo lo que marqué como No me interesa"

El panel

Clasifica una publicación y su barra lateral de acento toma ese color, así que una lista larga sigue siendo legible de un vistazo. Una tarjeta "No me interesa" se atenúa hasta que pasas el cursor por encima. Hacer clic en una clasificación que una publicación ya tiene la borra, así que un clic erróneo necesita un clic más en lugar de un cuarto botón.

Applied se registra por separado — el veredicto es lo que opinas de la oferta, Applied es si has actuado sobre ella.

Cada publicación muestra el país y cualquier salario que mencione, ambos extraídos automáticamente del texto de la publicación.

Vista de tabla

Tema oscuro


Qué se descarta

Tres filtros, aplicados a medida que llegan las publicaciones:

Filtro

Rechaza

Relevancia

Publicaciones sin indicios de una oferta abierta — comentarios, resúmenes, anuncios de cursos

Autor

Publicaciones "Open to work" y reposts de agencias de staffing

Mercado

Ofertas fuera de tus países permitidos

Relevancia busca intención de contratación en sentido amplio, porque muchas ofertas reales nunca dicen "hiring" — Lead Data Analyst opportunity at HelloFresh in London es una oferta de empleo.

Autor detecta agencias de dos maneras: redacción como our client, on behalf of, C2C o Outside IR35, y títulos como Recruitment Consultant o Executive Recruiter. Los títulos que existen en ambos lados — "Recruiter" a secas, "Talent Acquisition" — nunca rechazan por sí solos, y Corporate Recruiter se trata como interno. El reclutador de un empleador es exactamente de quien quieres recibir noticias.

Mercado acepta una publicación que nombre cualquier país permitido. Mencionar uno no deseado no es descalificatorio — una oferta en París que menciona requisitos de visado para solicitantes de otros lugares sigue siendo una oferta en París. Las publicaciones sin ubicación detectable se conservan, ya que muchas ofertas reales no indican una.

¿Quieres contratos freelance? umbrella, Outside IR35 y C2C se tratan como señales de agencia. Elimínalos de AGENCY_BODY en src/intake/relevance.ts para dejar pasar el trabajo por contrato.

Detección de ubicación

Reconoce unos 105 países por nombre y por ciudad, en inglés, francés, alemán, español y portugués, además de listas de códigos como Remote EU (CZ/EE/FI/PL/ES/SE).

Una línea de ubicación explícita gana por completo. Cuando una publicación dice 📍 Location: London, UK o Lieu : Paris, esa línea decide — así que una publicación encabezada con 📍 Islamabad, Pakistan que menciona Londres más abajo se clasifica correctamente como una oferta en Islamabad, no en Londres.

Detección de salario

Cada cifra en una moneda se clasifica por período de pago y solo se conserva si el importe tiene sentido para ese período. Eso es lo que distingue un salario real de un $2,000 welcome bonus o vales de comida de €12.50/day, y lo que mantiene $100/hour mientras rechaza un $100 a secas.

Gestiona $128,470 - $208,770, 96k€, £75k-£115k, 110000USD-135000USD, 60,4K GBP/yr (coma decimal francesa), £830/day y $7,000/month.


Tus datos

Qué

Dónde

Publicaciones extraídas

~/.linkedin-mcp/resources/linkedin.db

Sesión de LinkedIn

~/.linkedin-mcp/auth.json

Ambos viven fuera de este repositorio y nunca se confirman. No se envía nada a ningún sitio — el panel es un servidor local, y el único tráfico de red es Playwright hablando con LinkedIn como lo haría tu propio navegador.

Para borrarlo todo: rm -rf ~/.linkedin-mcp


Herramientas que tu asistente puede llamar

Herramienta

Qué hace

linkedin_session

Iniciar sesión, comprobar la sesión, borrar las credenciales guardadas

harvest_posts

Buscar y almacenar publicaciones, informando de lo que se descartó

vacancies

Leer, contar o borrar — filtrar por palabra clave, mercado, salario, veredicto, applied

dashboard_filters

Cambiar los filtros del panel desde la conversación

open_dashboard / close_dashboard

Iniciar y detener el panel

Comandos

npm run viewer      # dashboard on :7391, without going through your assistant
npm run rederive    # recompute country and pay for stored posts
npm run seed        # import posts from a JSON export
npm run build       # rebuild after changing any rule
npm run typecheck

npm run rederive -- --all vuelve a inferir cada publicación en lugar de solo los espacios en blanco — ejecútalo después de editar un detector.

Para mover el panel fuera del puerto 7391:

JOB_RADAR_PORT=9090 npm run viewer

Cuando tu cliente MCP lanza el servidor, pon JOB_RADAR_PORT en el bloque env de ese servidor para que open_dashboard use el mismo puerto.


Estructura del código

src/
  main.ts               MCP server: tool schemas and dispatch
  commands/             One module per tool
  linkedin/
    session/            Playwright login, credential storage
    harvest/            Search crawler, URL building, post parsing
  intake/               The screening pipeline
    ingest.ts             Applies every gate, then writes
    relevance.ts          Vacancy vs commentary vs agency
    market-policy.ts      Country allowlist  <- edit this
    location.ts           Country inference
    compensation.ts       Pay parsing
  store/                SQLite handle, schema, queries
  viewer/               Dashboard API and React app
  platform/             Paths, persisted filter state
scripts/                Maintenance scripts

El almacén es sql.js, que mantiene toda la base de datos en memoria y la escribe de vuelta por completo. Con dos procesos ejecutándose — el servidor MCP y el panel — cada uno serviría de otro modo una instantánea obsoleta y sobrescribiría las filas del otro en su siguiente guardado.

store/connection.ts toma la huella del archivo por tamaño y fecha de modificación, lo recarga cuando otro proceso ha escrito, y registra sus propios guardados para no recargar innecesariamente. Eliminar esa comprobación pierde datos silenciosamente.


Atribución

Derivado de LinkedIn-Posts-Hunter-MCP-Server por Kevin Weitgenant, utilizado bajo la licencia ISC.

Este fork reorganiza el código en torno al pipeline de captación, añade los filtros de relevancia, agencia y mercado descritos arriba, añade la inferencia de país y salario, sustituye un indicador guardado por el veredicto de clasificación, renombra las herramientas MCP, reconstruye el panel y corrige la sobrescritura de la base de datos entre procesos.

Licencia ISC — consulta LICENSE, que incluye ambas líneas de copyright.

A
license - permissive license
Not graded
quality - not tested
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
    Not graded
    quality
    D
    maintenance
    Helps users find suitable LinkedIn job opportunities by automatically scraping listings, analyzing compatibility with user profiles using AI, and sending custom match reports via email.
    1
  • A
    license
    Not graded
    quality
    D
    maintenance
    Provides tools for automating LinkedIn job post search and management. Job opportunities often appear in LinkedIn posts first, before they're posted on traditional job boards. By monitoring LinkedIn posts, you can discover opportunities earlier and get a competitive advantage in your job search.
    19
    6
    ISC
  • A
    license
    Not graded
    quality
    B
    maintenance
    An MCP server that finds recent job postings based on your LinkedIn profile, scores each against your resume, and logs the results — all without logging into or scraping LinkedIn.
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Searches LinkedIn, Indeed, USAJobs, and Google Jobs from the command line, deduplicates across sources, and optionally finds hiring manager emails; also runs as an MCP server for AI agents.
    MIT

View all related MCP servers

Related MCP Connectors

  • Semantic search over 3.5M+ live US job postings pulled straight from company ATSes. Read-only.

  • Unified jobs search over official feeds + ATS boards (USAJOBS, Adzuna, Muse, Greenhouse, Lever...)

  • Search AI-native jobs, inspect application forms, and fetch free interview-prep resources.

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/MaryemeBay/linkedin-posts-job-radar'

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