Skip to main content
Glama
AmmYoo7

linkedin-safe-mcp

by AmmYoo7

linkedin-safe-mcp

AI 에이전트(Claude Code, Codex, Claude Desktop, Cursor 등)에게 LinkedIn 슈퍼파워를 부여하는 MCP 서버 — LinkedIn 계정을 위험에 빠뜨리지 않으면서:

  • LinkedIn에 게시 — 텍스트, 링크, 이미지를 LinkedIn의 공식 API(OAuth, ToS 준수)를 통해 게시하고, 댓글과 좋아요도 가능.

  • 채용 정보 검색 — 키워드/지역/재택/경력/날짜 필터를 LinkedIn의 공개 게스트 엔드포인트로 검색. 로그인도 쿠키도 필요 없음: 계정이 전혀 관여하지 않습니다.

  • 구직 활동 관리 — 로컬 SQLite 애플리케이션 트래커(관심 → 지원 → 면접 → 제안)에 메모와 채용 공고별 스냅샷을 저장하여, 공고가 내려간 후에도 에이전트가 파이프라인을 관리하고 맞춤형 자기소개서를 작성할 수 있습니다.

왜 이런 설계인가?

LinkedIn은 공식 채용 검색 API를 제공하지 않으며, 비공식 경로(li_at 세션 쿠키를 사용한 Voyager 내부 API, 로그인 세션의 헤드리스 브라우저)는 LinkedIn 이용약관 §8.2를 위반하고 계정이 제한되는 사례가 빈번합니다. 이 서버는 의도적으로 절충안을 택했습니다:

우려 사항

처리 방식

계정 위험

게시, 댓글, 좋아요

공식 REST API, 자체 OAuth 앱, w_member_social

없음 — 공식 지원

구직 검색 및 상세 정보

게스트 엔드포인트(로그아웃 상태의 채용 페이지), IP 기반 속도 제한

없음 — 자격 증명 미사용

파이프라인 추적

로컬 SQLite(사용자 머신)

없음 — LinkedIn에 절대 접촉하지 않음

Easy Apply, DM, 피드 읽기

의도적으로 미포함 — ToS 위반 접근 없이는 불가능

요구 사항

  • Python 3.11+ 및 uv

  • 게시 기능만: 무료 셀프 서비스 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) — 위 .mcp.json과 동일한 JSON 형식입니다.

LINKEDIN_CLIENT_* 변수는 게시에만 필요합니다. 구직 검색 + 추적만 사용한다면 생략하세요.

게시 활성화(일회성 LinkedIn 앱 설정)

  1. https://www.linkedin.com/developers/apps로 이동 → Create app(LinkedIn 페이지를 연결해야 하며, 간단한 페이지를 만들 수 있습니다).

  2. 앱의 Products 탭에서 Share on LinkedInSign In with LinkedIn using OpenID Connect를 추가합니다.

  3. Auth 탭에서 리다이렉트 URL http://localhost:8765/callback을 추가합니다.

  4. Client IDClient Secret을 위에 표시된 환경 변수에 복사합니다.

  5. 한 번 인증합니다 — 두 가지 방법 모두 가능:

    • 터미널에서: uv run --directory <REPO> linkedin-safe-mcp auth

    • 또는 에이전트에게 게시를 요청하면 login 도구를 호출하여 인증 URL을 전달합니다.

토큰은 ~/.linkedin-mcp/tokens.json(모드 0600)에 저장되며 약 60일 동안 유효합니다. LinkedIn은 셀프 서비스 앱에 리프레시 토큰을 발급하지 않으므로 만료 시 로그인을 다시 실행해야 합니다(auth_status가 에이전트에게 정확한 시점을 알려줍니다).

도구

도구

인증 필요

기능

auth_status

구성/인증 상태를 정확한 다음 단계와 함께 보고

login / logout

브라우저 OAuth 흐름 / 저장된 토큰 삭제

get_my_profile

연결된 계정의 이름, 이메일, 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

관심 → 지원 → 면접 → 제안 / 거절 / 철회 / 보관, 메모 포함

add_job_note / remove_saved_job

메모 추가 / 공고 삭제

에이전트가 할 수 있는 일: "이번 주에 게시된 재택 시니어 엔지니어 역할을 찾아서, 유망한 공고를 저장하고, 저장된 설명에서 맞춤형 자기소개서를 작성하고, 지원한 공고를 표시하고, 내 오픈소스 작업 요약을 게시하세요."

구성

환경 변수

기본값

용도

LINKEDIN_CLIENT_ID / LINKEDIN_CLIENT_SECRET

LinkedIn 앱 자격 증명(게시 전용)

LINKEDIN_MCP_DIR

~/.linkedin-mcp

토큰 + 트래커 DB 위치

LINKEDIN_REDIRECT_PORT

8765

OAuth 콜백 포트(앱의 리다이렉트 URL과 일치해야 함)

LINKEDIN_API_VERSION

202606

/rest/* 호출의 LinkedIn-Version 헤더

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 전송

  • (고려 중, 선택적, 기본 꺼짐) 개인화 기능을 위한 쿠키 기반 Voyager 제공자 — LinkedIn ToS를 위반하므로 경고를 크게 표시

라이선스

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