linkedin-safe-mcp
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 앱, | 없음 — 공식 지원 |
구직 검색 및 상세 정보 | 게스트 엔드포인트(로그아웃 상태의 채용 페이지), 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 앱 설정)
https://www.linkedin.com/developers/apps로 이동 → Create app(LinkedIn 페이지를 연결해야 하며, 간단한 페이지를 만들 수 있습니다).
앱의 Products 탭에서 Share on LinkedIn 및 Sign In with LinkedIn using OpenID Connect를 추가합니다.
Auth 탭에서 리다이렉트 URL
http://localhost:8765/callback을 추가합니다.Client ID와 Client Secret을 위에 표시된 환경 변수에 복사합니다.
한 번 인증합니다 — 두 가지 방법 모두 가능:
터미널에서:
uv run --directory <REPO> linkedin-safe-mcp auth또는 에이전트에게 게시를 요청하면
login도구를 호출하여 인증 URL을 전달합니다.
토큰은 ~/.linkedin-mcp/tokens.json(모드 0600)에 저장되며 약 60일 동안 유효합니다. LinkedIn은 셀프 서비스 앱에 리프레시 토큰을 발급하지 않으므로 만료 시 로그인을 다시 실행해야 합니다(auth_status가 에이전트에게 정확한 시점을 알려줍니다).
도구
도구 | 인증 필요 | 기능 |
| – | 구성/인증 상태를 정확한 다음 단계와 함께 보고 |
| – | 브라우저 OAuth 흐름 / 저장된 토큰 삭제 |
| ✓ | 연결된 계정의 이름, 이메일, person URN |
| ✓ | 게시물 게시: 텍스트(+해시태그), 선택적 링크 또는 로컬 이미지; |
| ✓ | 자신의 게시물 삭제(URN 또는 게시물 URL) |
| ✓ | 게시물에 댓글 작성(URN 또는 게시물 URL) |
| ✓ | 게시물 좋아요(URN 또는 게시물 URL) |
| – | 필터: 지역, 재택/하이브리드/출근, 게시 시점, 경력 수준, 고용 유형, Easy-Apply 전용, 정렬; 최대 50개 결과 |
| – | 전체 공고: 설명, 직급, 유형, 급여(표시된 경우), 지원자 수, 외부 지원 URL |
| – | 로컬 트래커에 공고 스냅샷 저장 |
| – | 단일 공고(이력 포함) / 파이프라인 개요(상태별 개수) |
| – | 관심 → 지원 → 면접 → 제안 / 거절 / 철회 / 보관, 메모 포함 |
| – | 메모 추가 / 공고 삭제 |
에이전트가 할 수 있는 일: "이번 주에 게시된 재택 시니어 엔지니어 역할을 찾아서, 유망한 공고를 저장하고, 저장된 설명에서 맞춤형 자기소개서를 작성하고, 지원한 공고를 표시하고, 내 오픈소스 작업 요약을 게시하세요."
구성
환경 변수 | 기본값 | 용도 |
| – | LinkedIn 앱 자격 증명(게시 전용) |
|
| 토큰 + 트래커 DB 위치 |
|
| OAuth 콜백 포트(앱의 리다이렉트 URL과 일치해야 함) |
|
|
|
|
|
|
| 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
This server cannot be installed
Maintenance
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.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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