Skip to main content
Glama
AmmYoo7

linkedin-safe-mcp

by AmmYoo7

linkedin-safe-mcp

Сервер MCP, который даёт AI-агентам (Claude Code, Codex, Claude Desktop, Cursor, …) суперспособности LinkedIn — без риска для вашего аккаунта LinkedIn:

  • Публикация в LinkedIn — текст, ссылки и изображения через официальный API LinkedIn (OAuth, соответствует ToS), плюс комментарии и лайки.

  • Поиск вакансий — фильтры по ключевым словам/локации/удалёнке/опыту/дате через публичные гостевые эндпоинты LinkedIn. Без логина и cookies: ваш аккаунт не задействуется.

  • Ведение поиска работы — локальный трекер заявок на SQLite (заинтересован → откликнулся → собеседование → оффер) с заметками и снимками каждой вакансии, чтобы агент мог управлять вашим пайплайном и писать персонализированные сопроводительные письма даже после удаления вакансии.

Почему такая архитектура?

У LinkedIn нет официального API для поиска вакансий, а неофициальные пути (внутренний API Voyager с вашей сессионной cookie li_at, headless-браузеры на вашей залогиненной сессии) нарушают Пользовательское соглашение LinkedIn §8.2 и регулярно приводят к ограничению аккаунтов. Этот сервер намеренно выбирает компромисс:

Проблема

Как решается

Риск для аккаунта

Публикация, комментарии, лайки

Официальный REST API, ваше собственное OAuth-приложение, w_member_social

Нет — санкционировано

Поиск вакансий и детали

Гостевые эндпоинты (страницы вакансий для неавторизованных), лимит по IP

Нет — никакие учётные данные не задействованы

Трекинг заявок

Локальная SQLite на вашей машине

Нет — никогда не касается LinkedIn

Easy Apply, личные сообщения, чтение ленты

Намеренно не включено — невозможно без доступа, нарушающего ToS

Требования

  • Python 3.11+ и uv

  • Только для публикации: бесплатное self-serve приложение разработчика LinkedIn (настройка за 5 минут ниже). Поиск вакансий и трекер работают без какой-либо настройки.

Установка и подключение к агенту

Склонируйте/скопируйте этот каталог, затем зарегистрируйте его в вашем MCP-клиенте. <REPO> ниже — абсолютный путь к этому проекту.

Claude Code

claude mcp add linkedin \
  --env LINKEDIN_CLIENT_ID=your_client_id \
  --env LINKEDIN_CLIENT_SECRET=your_client_secret \
  -- uv run --directory <REPO> linkedin-safe-mcp

Или в .mcp.json проекта:

{
  "mcpServers": {
    "linkedin": {
      "command": "uv",
      "args": ["run", "--directory", "<REPO>", "linkedin-safe-mcp"],
      "env": {
        "LINKEDIN_CLIENT_ID": "your_client_id",
        "LINKEDIN_CLIENT_SECRET": "your_client_secret"
      }
    }
  }
}

Codex (~/.codex/config.toml)

[mcp_servers.linkedin]
command = "uv"
args = ["run", "--directory", "<REPO>", "linkedin-safe-mcp"]
env = { LINKEDIN_CLIENT_ID = "your_client_id", LINKEDIN_CLIENT_SECRET = "your_client_secret" }

Claude Desktop (claude_desktop_config.json) — та же JSON-структура, что и .mcp.json выше.

Переменные LINKEDIN_CLIENT_* нужны только для публикации; опустите их, если вам нужны только поиск вакансий и трекер.

Включение публикации (одноразовая настройка приложения LinkedIn)

  1. Перейдите на https://www.linkedin.com/developers/appsCreate app (требуется привязать любую страницу LinkedIn; можно создать тривиальную).

  2. На вкладке Products приложения добавьте Share on LinkedIn и Sign In with LinkedIn using OpenID Connect.

  3. На вкладке Auth добавьте redirect URL http://localhost:8765/callback.

  4. Скопируйте Client ID и Client Secret в переменные окружения, показанные выше.

  5. Авторизуйтесь один раз — любым способом:

    • В терминале: uv run --directory <REPO> linkedin-safe-mcp auth

    • Или просто попросите агента что-нибудь опубликовать; он вызовет инструмент login и передаст вам URL авторизации.

Токены хранятся в ~/.linkedin-mcp/tokens.json (режим 0600) и действуют ~60 дней; LinkedIn не выдаёт refresh-токены self-serve приложениям, поэтому при истечении срока нужно повторно выполнить вход (auth_status сообщает агенту точное время).

Инструменты

Инструмент

Нужна авторизация

Что делает

auth_status

Сообщает состояние конфигурации/авторизации с точными следующими шагами

login / logout

Браузерный OAuth-поток / удаление сохранённых токенов

get_my_profile

Имя, email, person URN подключённого аккаунта

create_post

Опубликовать пост: текст (+хэштеги), опциональная ссылка или локальное изображение; PUBLIC или CONNECTIONS

delete_post

Удалить один из ваших постов (URN или URL поста)

comment_on_post

Оставить комментарий к посту (URN или URL поста)

like_post

Поставить лайк посту (URN или URL поста)

search_jobs

Фильтры: локация, удалёнка/гибрид/офис, время публикации, уровни опыта, типы занятости, только Easy Apply, сортировка; до 50 результатов

get_job

Полное описание вакансии: описание, уровень, тип, зарплата если указана, количество откликов, внешний URL для отклика

save_job

Сохранить снимок вакансии в локальный трекер

get_saved_job / list_saved_jobs

Одна вакансия с историей / обзор пайплайна со счётчиками статусов

update_job_status

заинтересован → откликнулся → собеседование → оффер / rejected / withdrawn / archived, с заметками

add_job_note / remove_saved_job

Добавить заметку / удалить вакансию

Что агенты могут делать с этим: "найди удалённые роли staff-инженера, опубликованные на этой неделе, сохрани перспективные, составь персонализированные сопроводительные письма из сохранённых описаний, отметь те, на которые я откликнулся, и опубликуй сводку о своей open-source работе."

Конфигурация

Переменная окружения

По умолчанию

Назначение

LINKEDIN_CLIENT_ID / LINKEDIN_CLIENT_SECRET

Учётные данные приложения LinkedIn (только для публикации)

LINKEDIN_MCP_DIR

~/.linkedin-mcp

Где хранятся токены и БД трекера

LINKEDIN_REDIRECT_PORT

8765

Порт OAuth-колбэка (должен совпадать с redirect URL приложения)

LINKEDIN_API_VERSION

202606

Заголовок LinkedIn-Version для вызовов /rest/*

LINKEDIN_POSTS_BACKEND

auto

rest, ugc или auto (попробовать и запомнить, что разрешено вашему приложению)

LINKEDIN_MCP_USER_AGENT

Chrome UA

UA для гостевых запросов к вакансиям

Поведение и ограничения

  • Публикация: LinkedIn ограничивает публикацию участников 150 запросами/день и отклоняет точные дубликаты недавних постов (422). Зарезервированные символы в тексте поста автоматически экранируются для версионированного API, чтобы скобки не вызывали ошибок; хэштеги сохраняются.

  • Поиск вакансий: гостевые эндпоинты ограничены по IP (HTTP 429). Сервер кэширует результаты (10 минут для поисков / 6 часов для деталей вакансий), повторяет запросы с экспоненциальной задержкой и распределяет многостраничные запросы; при устойчивом 429 возвращает агенту понятную ошибку «подождите минуту». Держите limit умеренным.

  • Позиция по скрейпингу: гостевой поиск вакансий читает те же публичные страницы, что видит неавторизованный посетитель, с умеренной скоростью и кэшированием для минимизации нагрузки. Тем не менее, LinkedIn может в любой момент изменить или закрыть эти эндпоинты — парсеры закреплены фикстурными тестами, так что поломка обнаруживается громко, а ошибки инструментов остаются понятными для агента.

Разработка

uv sync            # install deps (Python ≥3.11)
uv run pytest      # 48 tests: parsers vs live fixtures, payloads, OAuth, tracker,
                   # plus an end-to-end stdio smoke test that spawns the real server
uv run ruff check src tests && uv run ruff format --check src tests

Структура: src/linkedin_mcp/server.py (поверхность инструментов) · api/ (официальный REST: посты, социальные действия, загрузки, двойной rest/ugc-бэкенд) · auth/ (OAuth + хранилище токенов) · jobs/ (гостевой клиент, HTML-парсеры, маппинги фильтров) · tracker/ (SQLite-хранилище) · cli.py (serve | auth | status | logout).

Дорожная карта

  • Публикация на PyPI (uvx linkedin-safe-mcp одной строкой)

  • Типы реакций кроме лайка; посты с несколькими изображениями; посты-опросы

  • Опциональные сторонние провайдеры данных о вакансиях за той же схемой инструментов

  • Транспорт streamable-http для удалённого/хостингового использования

  • (Рассматривается, только opt-in, по умолчанию выключено) cookie-основанный провайдер Voyager для персонализированных функций — с громкими предупреждениями, так как это нарушает ToS LinkedIn

Лицензия

MIT

-
license - not tested
-
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 Connectors

  • Managed LinkedIn MCP server for AI agents: search, connect, message and enrich on accounts you own.

  • MCP server for LeadDelta — manage LinkedIn connections and CRM data via AI assistants.

  • GetJobzi MCP server for job search, application tracking, and career forecasting.

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

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