Skip to main content
Glama
TSS99
by TSS99

LinkedIn MCP

AI 어시스턴트가 DevTools 프로토콜을 통해 실제 Chrome 창을 구동하여 LinkedIn 채용 정보를 검색하고 LinkedIn 프로필을 읽을 수 있게 해 주는 MCP 서버입니다.

이 서버는 읽기 전용입니다. 연결, 메시지, 추천, 게시, 지원을 수행하는 도구는 여기에 없습니다. 설정에서 비활성화된 것이 아니라, 그런 코드 자체가 존재하지 않기 때문입니다. 이것은 의도적인 경계선입니다. LinkedIn은 자동화된 쓰기를 자동화된 읽기보다 훨씬 엄격하게 다루며, 이 둘을 섞는 것이 계정이 제한되는 원인이 됩니다.

도구

도구

반환 내용

linkedin_search_jobs

제목, 회사, 위치, 근무 형태, 게시 당시 연봉, 게시 후 경과 시간, job_id를 포함한 채용 목록. 필터: 위치, 게시 후 기간, 경력 수준, 고용 형태, 근무 형태, Easy Apply, 정렬 순서.

linkedin_get_job

채용 공고 하나를 전체 공개 — 회사, 위치, LinkedIn의 채용 인사이트, 그리고 '더 보기' 접힘이 펼쳐진 전체 설명.

linkedin_get_profile

이름, 헤드라인, 위치, 소개(About) 텍스트, 경력 사항, 학력 및 기술.

linkedin_check_session

저장된 브라우저 세션이 여전히 로그인 상태인지 여부.

linkedin_close_session

Chrome에서 분리하여 창과 세션을 그대도 둡니다.

Related MCP server: LinkedIn Sales & Navigator MCP Server

설치

Python 3.12+, uv, Google Chrome이 필요합니다.

git clone https://github.com/TSS99/linkedin-mcp.git
cd linkedin-mcp
uv sync

한 번 로그인하세요. 그러면 Chrome 창이 열리고 직접 로그인할 때까지 기다립니다. 스크립트가 자격 증명을 입령하는 일은 절대 없습니다. LinkedIn이 스크립트 기반 자격 증명 입령을 차단하기 때문입니다.

uv run linkedin-mcp --login

세션은 ~/.linkedin-mcp/chrome-profile에 유지됩니다. 언제든지 uv run linkedin-mcp --check로 확인하고, uv run linkedin-mcp --logout으로 삭제할 수 있습니다.

어떤 Chrome 프로필을 구동하는가

기본적으로 서버는 자체 임시 프로필을 엽니다. 그 창은 완전히 새것처럼 보입니다 — 즸겨찾기 없음, 확장 프로그램 없음, LinkedIn 외에는 로그인된 것이 없음. 이것이 핵심입니다. 서버는 오직 LinkedIn만 볼 수 있습니다.

만약 평소 사용하는 Chrome을 구동하게 하려면 — 이미 로그인된 LinkedIn 세션을 재사용하고 낯선 창을 열지 않도록 — 다음을 설정하세요:

LINKEDIN_MCP_PROFILE_DIR=system

또는 원하는 프로필 디렉터리를 명시적으로 지정하세요. MCP 클라이언트 구정에서는 env 블록에 넣습니다:

{
  "mcpServers": {
    "linkedin": {
      "command": "uv",
      "args": ["--directory", "/path/to/linkedin-mcp", "run", "linkedin-mcp"],
      "env": { "LINKEDIN_MCP_PROFILE_DIR": "system" }
    }
  }
}

이렇게 하기 전에 이해해야 할 두 가지가 있습니다:

Chrome을 한 번은 재시작해야 합니다. --remote-debugging-port는 시잭 시에만 적요됩니다. 이미 실해 중인 프로세스에서는 킬 수 없습니다. 따라서 지금 열려 있는 Chrome은 프로필 설정과 관계없이 절대 연결할 수 없습니다. Chrome을 완전히 종료하고(Cmd+Q, 창을 닫는 것만으로는 부족) 서버가 시작하게 하거나, --login이 출력하는 명령으로 직접 시작하세요.

디버그 포트는 LinkedIn에 한정되지 않습니다. 127.0.0.1:9224에 접근할 수 있는 무엇이든 그 Chrome의 모든 탭을 조작하고 그 안의 모든 세션을 읽을 수 있습니다 — LinkedIn뿐만 아니라 메일, 은행, 전부 다요. 격리된 프로필에는 그 외에 접근할 것이 없습니다. 하지만 평소 프로필에는 모든 것이 있습니다. 신뢰하는 컴퓨터에서만 이런 방식으로 실행하고, 작업이 끝나면 디버그 Chrome을 닫으세요.

--logout은 자신이 생성하지 않은 프로필은 삭제하지 않습니다. 따라서 이 서버를 실제 Chrome에 지정해도 브라우저 상태가 지워지지 않습니다.

설정

MCP 클라이언트 구성에 추가하세요 (mcp-config.example.json 참조):

{
  "mcpServers": {
    "linkedin": {
      "command": "uv",
      "args": ["--directory", "/path/to/linkedin-mcp", "run", "linkedin-mcp"]
    }
  }
}

Claude Code의 경우: claude mcp add linkedin -- uv --directory /path/to/linkedin-mcp run linkedin-mcp

작동 방식과 이유

별도로 실행된 브라우저가 아닌 실제 Chrome 프로필에 CDP로 연결합니다. Playwright 자체의 Chromium은 LinkedIn이 검사하는 여러 방식으로 자신을 드러냅니다. 직접 로그인한 실제 Chrome에 연결하면 브라우저 지문과 쿠키가 그대로 유지됩니다. 서버는 디버그 포트 9224에서 실행되므로 9222/9223 포트의 다른 브라우저 기반 MCP 서버와 공존할 수 있습니다.

탐색은 속도가 조절됩니다. LinkedIn은 요청량뿐 아니라 호출 주기로도 요청을 제한합니다. 따라서 goto는 지터(jitter)가 적용된 최소 간격을 강제합니다. 오랜 연구 작업이 가능한 것보다 느린 것은 의도된 것입니다.

LinkedIn의 DOM에 있는 모든 문자열은 두 번 나타납니다 — 한 번은 시각적으로, 한 번은 스크린 리더를 위한 visually-hidden span으로. 따라서 원시 innerText는 "Acme Corp\nAcme Corp"로 읽힙니다. dedupe_lines는 연속된 중복을 제거합니다. 이 기능이 없으면 파싱된 모든 필드가 두 배로 나옵니다.

선택자는 순서가 있는 폴백 목록입니다. LinkedIn의 클래스 이름은 난독화되어 있고 자주 바뀝니다. 가능한 경우 파서는 클래스 변동을 견뎌낸 요소 — data-occludable-job-id 속성, 안정적인 div#experience 앵커 ID —에 기반을 두고, 필드별 훅을 신뢰하기보다 카드 텍스트에서 줄 순서를 파싱하는 방식으로 폴백합니다.

실패한 스크래핑은 절대 빈 결과를 반환하지 않습니다. 모든 도구는 래퍼로 감싸져 있어, 앵커가 없으면 선택자와 URL을 명시하는 {"status": "error", "error_type": "stale_selector", ...}을 반환합니다. []를 받은 LLM은 "채용 정보를 찾을 수 없음"이라고 확신하며 보고할 것입니다. 이렇게 하면 도구 오작동과 실제로 결과가 없는 경우를 구분할 수 있습니다.

테스트

uv run pytest

테스트는 순수 파서 — URL/필터 구성, 카드 파싱, 프로필 항목 파싱, 줄 중복 제거 —를 LinkedIn DOM이 실제로 생성하는 형태의 픽스처와 대조하여 검증합니다. 브라우저와 네트워크가 필요 없습니다.

문제가 발생하는 경우

반드시 그렇습니다. LinkedIn은 마크업 변경을 지속적으로 배포하며, 스크레이퍼는 남의 HTML에 대한 추측일 뿐입니다. 언젠가는 stale_selector 오류가 발생할 것이라고 예상하세요. 해결책은 보통 tools/jobs.pytools/profiles.py의 선택자 목록에 항목을 하나 더 추가하고, tests/test_parsers.py에 픽스처를 하나 추가하는 것입니다.

auth_required와 함께 checkpoint URL이 나오면, LinkedIn이 사람을 요구하는 것입니다. Chrome 창을 열고 챌린지를 해결한 다음 다시 시도하세요.

이용 약관에 대하여

구현이 아무리 신중해도 자동 접근은 LinkedIn 사용자 약관에 위배됩니다. LinkedIn은 이러한 이유로 계정을 제한하기도 합니다. 이 도구는 개인 연구 용도입니다. 읽기 전용 설계와 속도 조절 요청이 위험을 줄여 주지만 없애지는 않으며, 그 위험은 이 도구에 연결한 계정이 부담합니다. 판단하시기 바랍니다.

라이선스

Apache-2.0

Install Server
A
license - permissive license
A
quality
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
    A
    quality
    Not graded
    maintenance
    Enables AI assistants to interact with LinkedIn and LinkedIn Sales Navigator for searching profiles, managing leads, and handling messaging via cookie-based authentication. It supports professional networking tasks such as sending connection requests and retrieving account details through the Model Context Protocol.
    22
    1
  • A
    license
    A
    quality
    D
    maintenance
    Enables searching and scraping of LinkedIn for structured data on people, companies, and job listings. It allows AI clients to retrieve detailed profiles, experience, and activity sections using browser automation.
    7
    175
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables AI assistants to search, filter, and extract job listings from LinkedIn using an automated headless browser with semantic AI filtering and deduplication.
    15
    MIT

View all related MCP servers

Related MCP Connectors

  • Give AI agents the LinkedIn tools to find, qualify, engage, and follow up with prospects.

  • Live LinkedIn data for AI agents: profiles, companies, jobs, posts, email finding. No account risk.

  • Run LinkedIn outreach from your AI chat: find leads, launch campaigns, send, and reply.

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

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