개요
제작자가 쓴 설명(영어 원문)
Read LinkedIn profiles, companies, jobs and messages via your own browser session
PopNx MCP의 세 기둥
이 세 가지는 절대 하나의 점수로 합치지 않아요. 의견, 측정, 인기는 서로 다른 것이니까요.
- 사용자 의견i아직 리뷰가 없어요리뷰는 다음 단계에서 계정 기능과 함께 열려요
- 우리의 기본 점검i1개 중 1개 통과공개된 정보로 점검했으며, 코드는 아직 스캔하지 않았어요
- 사용 정도i아주 새로움↓ 27/주 · ★ –
할 수 있는 일
이 서버는 아직 쉬운 말로 된 요약을 쓰지 못했어요. 아래는 레지스트리에서 읽어 온 사실이에요.
- 연결 방식: 내 컴퓨터에서 실행
- 전송 방식: stdio
- 카테고리: 마케팅 및 소셜 미디어
- 입력해야 할 값: LINKEDIN_COOKIE
설치
쓰고 있는 AI 앱을 고른 다음 설정을 복사하세요.
설치하기 전에
- 기본 점검: 1개 중 1개 통과
- 내 컴퓨터에서 내 사용자 계정의 권한(파일, 네트워크, 앱)으로 실행돼요.
- 직접 입력할 값:
LINKEDIN_COOKIE,LINKEDIN_HEADLESS,LINKEDIN_MIN_INTERVAL,LINKEDIN_MAX_PER_HOUR
비밀로 표시된 값은 내 계정의 열쇠예요. 절대 다른 사람과 공유하거나 채팅에 붙여 넣지 마세요.
필요한 것
- PyPIPython의 uv 설치(uvx 명령어용)
어떤 앱을 쓰세요?
위에서 앱을 고르세요. 기억해 두었다가 다음부터는 버튼에 “…에 설치”라고 표시해요.
Claude Desktop → Settings → Developer → Edit Config를 열고 claude_desktop_config.json에 이 내용을 붙여 넣으세요
{
"mcpServers": {
"linkedin-api": {
"command": "uvx",
"args": [
"linkedin-api-mcp"
],
"env": {
"LINKEDIN_COOKIE": "your-value",
"LINKEDIN_HEADLESS": "your-value",
"LINKEDIN_MIN_INTERVAL": "your-value",
"LINKEDIN_MAX_PER_HOUR": "your-value"
}
}
}
}터미널에서 이 명령어를 실행하세요
claude mcp add linkedin-api --env LINKEDIN_COOKIE=your-value --env LINKEDIN_HEADLESS=your-value --env LINKEDIN_MIN_INTERVAL=your-value --env LINKEDIN_MAX_PER_HOUR=your-value -- uvx linkedin-api-mcp실행하기 전에 빈 값을 채워 주세요.
또는 설정을 직접 복사하기
프로젝트의 .cursor/mcp.json 또는 ~/.cursor/mcp.json에 붙여 넣으세요
{
"mcpServers": {
"linkedin-api": {
"command": "uvx",
"args": [
"linkedin-api-mcp"
],
"env": {
"LINKEDIN_COOKIE": "your-value",
"LINKEDIN_HEADLESS": "your-value",
"LINKEDIN_MIN_INTERVAL": "your-value",
"LINKEDIN_MAX_PER_HOUR": "your-value"
}
}
}
}브라우저가 앱을 열지 물어본 다음, 앱이 설정을 보여 주고 확인을 요청해요. 키 값은 비워 두니 직접 입력하세요.
또는 설정을 직접 복사하기
프로젝트의 .vscode/mcp.json에 붙여 넣으세요
{
"servers": {
"linkedin-api": {
"type": "stdio",
"command": "uvx",
"args": [
"linkedin-api-mcp"
],
"env": {
"LINKEDIN_COOKIE": "your-value",
"LINKEDIN_HEADLESS": "your-value",
"LINKEDIN_MIN_INTERVAL": "your-value",
"LINKEDIN_MAX_PER_HOUR": "your-value"
}
}
}
}브라우저가 앱을 열지 물어본 다음, 앱이 설정을 보여 주고 확인을 요청해요. 키 값은 비워 두니 직접 입력하세요.
이 서버는 내 컴퓨터에서 실행되는데, ChatGPT는 인터넷에 있는 서버에만 연결할 수 있어요. 다른 앱을 고르세요.
선택한 앱은 이 기기의 쿠키에만 저장돼요. 계정은 필요 없어요.
직접 입력할 값
- Your LinkedIn li_at session cookie. Optional if you have already stored it in the OS keyring with `linkedin-api-mcp auth`, which is the recommended route: this cookie is equivalent to being logged in…
LINKEDIN_HEADLESSenvRun the browser headless. Defaults to true; set to 0 to watch what it does.LINKEDIN_MIN_INTERVALenvMinimum seconds between LinkedIn actions. Defaults to 2.LINKEDIN_MAX_PER_HOURenvHard ceiling on LinkedIn actions per rolling hour. Defaults to 120. The server refuses past this rather than sleeping, so an agent in a loop is told to stop.
이 설정은 제작자의 레지스트리 정보로 만들었어요. README와 다르면 README를 따르세요.
할 수 있는 일
내 컴퓨터에서 실행돼요. 설치하면 AI 앱에 도구 목록이 나타나요.
기본 점검i
누구나 볼 수 있는 정보를 점검했고, 코드는 읽지 않았어요. 해당하지 않는 항목은 개수에서 뺐어요. · 2026년 11월 8일 점검
- ✓ 통과
제작자와 저장소 일치
레지스트리 이름이 GitHub 계정 JohannsenLum 기준으로 확인되었고, 이 계정이 저장소를 소유하고 있어요
- … 아직 점검 안 함
계속 관리되고 있음
아직 GitHub에서 이 저장소를 읽어 오지 않았어요
- … 아직 점검 안 함
라이선스 있음
아직 GitHub에서 이 저장소를 읽어 오지 않았어요
- – 해당 없음
엔드포인트 응답
내 컴퓨터에서 실행되는 서버라 인터넷 엔드포인트가 없어요
- – 해당 없음
OAuth로 로그인
내 컴퓨터에서 실행되며, 대신 로컬 설정을 사용해요
- … 아직 점검 안 함
도구 설명에 숨겨진 지시 없음
내 컴퓨터에서 실행돼요. 도구 목록은 인터넷 엔드포인트가 있는 서버에서만 읽을 수 있어요
마케팅 및 소셜 미디어 카테고리의 다른 서버와 비교i
- 이 카테고리의 다른 서버 3593개 중 0%보다 스타가 많아요
- 이 카테고리의 다른 서버 3593개 중 24%보다 최근에 레지스트리에 공개됐어요
- 기본 점검 결과가 이 카테고리의 다른 서버 3593개 중 100%와 같거나 더 좋아요
레지스트리에서 이 카테고리의 활성 서버 전체와 비교했어요. 스타는 게시자가 저장소를 소유한 경우에만 세요.
자주 묻는 질문
LinkedIn, 안전한가요?
해당하는 기본 점검 1개 중 1개를 통과했어요. 코드는 읽지 않았어요. 키나 토큰을 넣기 전에 서버가 어떤 권한을 요구하는지 확인하고, 꼭 필요한 권한만 있는 키를 쓰세요.
어떤 키나 코드가 필요한가요?
입력해야 할 값: LINKEDIN_COOKIE
내 컴퓨터에서 실행되나요, 클라우드에서 실행되나요?
내 컴퓨터에서 실행돼요. AI 앱이 필요할 때 실행하고, 데이터는 제작자의 서버를 거치지 않아요(서버 자체가 온라인 서비스를 호출하는 경우는 제외).
아직 관리되고 있나요?
GitHub 저장소는 마지막으로 – 변경됐고, 최신 버전(1.0.1)은 3개월 전 레지스트리에 올라왔어요.
어떤 앱에서 쓸 수 있나요?
Claude Desktop, Claude Code, Cursor, VS Code처럼 MCP를 지원하는 앱에서 쓸 수 있어요. 내 컴퓨터에 Python (uv)도 있어야 해요.
대신 쓸 수 있는 건 뭐가 있나요?
같은 카테고리에는: MCP YouTube Transcript, Google Analytics MCP, BibiGPT YouTube Video Summarizer
대안
같은 카테고리에서 다른 제작자가 만든 서버예요. 스타 순으로 정렬했어요.
카드 보는 법:↓ 주간 다운로드i★ GitHub 스타i세 기둥: 리뷰 · 점검 · 사용 정도i업데이트 = 최신 버전을 레지스트리에 공개한 날i
Google Analytics MCP
GA4 MCP server for AI agents: schema discovery, server-side aggregation, analysis-ready defaults.
BibiGPT YouTube Video Summarizer
AI video summarizer: summarize and transcribe YouTube, Bilibili, TikTok and podcast videos.
제작자의 README
README 열기
제작자의 저장소에서 쓰인 그대로 가져왔어요. PopNx MCP가 검토하거나 보증한 내용이 아니에요. HTML, 이미지, 스크립트는 제거했어요. 링크를 누르면 이 사이트를 벗어나요.
linkedin-api-mcp
Disclaimer: This is an independent, community project. It is not affiliated with, authorized by, endorsed by, or sponsored by LinkedIn Corporation or Microsoft. "LinkedIn" is a registered trademark of LinkedIn Corporation and is used here only descriptively to identify the third-party service this software interoperates with.
An MCP server for LinkedIn. It drives a real, headless browser (patchright, an undetected fork of Playwright) using your own logged-in LinkedIn session cookie. There is no scraping API, no credential stuffing, no bypass of LinkedIn's login. Your agent gets 12 read tools (profiles, companies, jobs, posts, your inbox) and two write tools, kept deliberately separate: sending a message and sending a connection request. Every action goes through a single browser session, one at a time, paced against limits you control. See Safety below.
Documentation: [mcp.johannsenlum.com/linkedin](https://mcp.johannsenlum.com/linkedin)
Install (one-click)
Deeplinks exist for Cursor and VS Code only; no other client has a documented install-link format. These prefill the command below, nothing else needs filling in since the cookie lives in your OS keyring, not an environment variable.
All clients
| Client | Deeplink? |
|---|---|
| Claude Code | no, one-line command |
| Claude Desktop | no |
| Cursor | yes, above |
| VS Code | yes, above |
| Codex CLI | no |
| Zed | no |
| Windsurf | no (Windsurf only resolves servers in its own registry) |
Claude Code
claude mcp add linkedin -- uvx linkedin-api-mcp
Claude Desktop : claude_desktop_config.json
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json Windows: %APPDATA%\Claude\claude_desktop_config.json
No one-click install exists for Claude Desktop (it installs .mcpb bundles, not deeplinks). Copy this JSON in via Settings → Developer → Edit Config:
{
"mcpServers": { "linkedin": { "command": "uvx", "args": ["linkedin-api-mcp"] } } }
Cursor : ~/.cursor/mcp.json
Fallback for the button above, or if you'd rather paste it directly:
{
"mcpServers": { "linkedin": { "command": "uvx", "args": ["linkedin-api-mcp"] } } }
VS Code : .vscode/mcp.json
Fallback for the button above, or if you'd rather paste it directly. Note VS Code uses a servers key, not mcpServers:
{
"servers": { "linkedin": { "type": "stdio", "command": "uvx", "args": ["linkedin-api-mcp"] } } }
Codex CLI : ~/.codex/config.toml
[mcp_servers.linkedin]
command = "uvx" args = ["linkedin-api-mcp"]
Codex CLI's config schema has changed across versions and this block is not independently verified against a live install. If it doesn't load, the reliable path is running uvx linkedin-api-mcp yourself and pointing Codex at whatever its current stdio-server config expects.
Zed : settings.json
No deeplink exists for Zed. Add this under context_servers in your Zed settings:
{
"context_servers": { "linkedin": { "source": "custom", "command": "uvx", "args": ["linkedin-api-mcp"] } } }
Windsurf : ~/.codeium/windsurf/mcp_config.json
No deeplink exists for Windsurf. It only resolves servers from its own registry, so this has to be pasted in manually via Windsurf Settings → MCP Servers → Edit raw config:
{
"mcpServers": { "linkedin": { "command": "uvx", "args": ["linkedin-api-mcp"] } } }
If you'd rather not rely on the keyring in a given client (a sandboxed environment, or CI), pass the cookie directly instead of running auth:
{
"mcpServers": { "linkedin": { "command": "uvx", "args": ["linkedin-api-mcp"], "env": { "LINKEDIN_COOKIE": "your-li_at-value" } } } }
Anywhere you do this, treat that config file with the same care as the cookie itself: don't commit it, and restrict its permissions.
Getting your session cookie
LinkedIn doesn't offer an API key for this kind of access, so the server uses the same session cookie your browser already holds.
- One-time: install the Chromium build the server drives.
uvx --from linkedin-api-mcp patchright install chromium
- Log in to linkedin.com in a normal browser.
- Open DevTools (
F12orCmd+Opt+I) → Application → Cookies →https://www.linkedin.com. - Find the row named
li_atand copy its Value.
[!WARNING]
**This cookie *is* your LinkedIn login.** Anyone who has it can act as you:
read your messages, message your connections, see everything your account can
see, without needing your password. It survives a password change, and it
cannot be revoked from any session list LinkedIn shows you. Never paste it
into a chat, a commit, an issue, a screenshot, or anywhere other than
linkedin-api-mcp auth.
- Store it:
uvx linkedin-api-mcp auth
Paste the value in when prompted; the terminal will not echo it back. By default it's stored in your OS keyring (Keychain, Windows Credential Manager, or Secret Service on Linux), never written to a config file.
- Verify LinkedIn accepts it before wiring up a client:
uvx linkedin-api-mcp --test
Prints the server's redacted configuration and confirms the session is live. It never prints the cookie itself.
Tools
| Tool | Description |
|---|---|
get_profile | Fetch a member's profile (headline, about, experience, education, skills) by URL or public identifier. |
get_my_profile | Fetch the profile of the account this server is logged in as. |
search_people | Search LinkedIn members by keyword. |
get_inbox | List recent message thread previews. |
get_conversation | Fetch the full message history of one thread, by id. |
search_conversations | Search your message threads by participant or keyword. |
send_message ✏️ | Write. Sends a real message to another member from your account. |
connect ✏️ | Write. Sends a real connection invitation to another member from your account. |
get_company | Fetch a company page (about, size, industry, recent posts). |
search_companies | Search LinkedIn companies by keyword. |
search_jobs | Search job postings by keyword and optional location. |
get_job | Fetch one job posting in full. |
search_posts | Search LinkedIn feed posts by keyword. |
linkedin_status | Check session validity and current usage against the rate limits in Safety. |
14 tools: 12 read, 2 write. send_message and connect are the only two that change anything, and both are visible to another real person the moment they run: there is no draft, preview, or undo step. Everything else only reads what your account can already see. Covered by 68 tests.
What's verified, and what isn't
This is a days-old project. Rather than claim everything works, here's what's actually been checked against a live account, and what hasn't.
| Status | Tool / behaviour | Note |
|---|---|---|
| Verified live | get_my_profile, get_profile, search_people, get_company, search_companies, search_jobs, search_posts, get_inbox | Called against a real account and returned real data. |
| Verified live | send_message ✏️ | A real message was sent, then the thread was read back to confirm it arrived. |
| Not yet verified | connect ✏️, get_conversation, search_conversations, get_job, linkedin_status | Implemented and tested, but not yet exercised against a live account by hand. |
| Known gap | conversation_id from get_inbox | Comes back null. LinkedIn binds inbox rows to in-memory JS objects rather than URLs, so there's no id to read out of the page. |
| Known gap | Reaction and comment counts on search_posts | Come back null. |
| Known gap | experience and education on get_profile | LinkedIn loads these sections only on scroll; they currently come back empty. |
Safety
- A serialised action queue. Every tool call, including
linkedin_status, passes through the same queue before it touches the browser: one action at a time, never in parallel. - A minimum interval and an hourly ceiling, both enforced, not just claimed:
| Setting | Default | Env var | Effect |
|---|---|---|---|
| Minimum interval between actions | 2 seconds | LINKEDIN_MIN_INTERVAL | Calls are paced against the previous one, not run back-to-back. |
| Actions per rolling hour | 120 | LINKEDIN_MAX_PER_HOUR | Once hit, further calls fail immediately with a rate_limited error rather than queueing or sleeping. |
The ceiling is local to this server: it exists to stop a looping agent from generating a burst of LinkedIn traffic, not because LinkedIn told us these numbers. Lowering them is always safe; raising them is you deciding you're willing to accept more risk than the defaults assume.
- Prompt-injection fencing on all scraped free text. Anything read off a LinkedIn page (a headline, an about section, a message) passes through your agent as data. It is fenced before your agent sees it, so text on a profile or in a message cannot pose as an instruction.
- The cookie lives in your OS keyring, not a config file, by default. See Getting your session cookie.
- `send_message` proves delivery before reporting success. It polls th
앞부분만 보여 드려요. 나머지는 저장소에서 읽어 보세요