← MCP servers · stickerdaniel

linkedin-mcp-server

BLOCKgrade D · trust 61/100

Open-source MCP server for LinkedIn. Give Claude and any MCP-compatible AI agent access to profiles, companies, jobs, and messages.

ai agentsanthropicchatgptchatgpt desktopclaudeclaude aiclaude codeclaude desktop

Overview

From the repository's own README, as read at the audited commit.

# MCP Server for LinkedIn<!-- mcp-name: io.github.stickerdaniel/linkedin-mcp-server --><p align="left">  <a href="https://pypi.org/project/mcp-server-linkedin/" target="_blank"><img src="https://img.shields.io/pypi/v/mcp-server-linkedin?color=blue" alt="PyPI"></a>  <a href="https://github.com/stickerdaniel/linkedin-mcp-server/actions/workflows/ci.yml" target="_blank"><img src="https://github.com/stickerdaniel/linkedin-mcp-server/actions/workflows/ci.yml/badge.svg?branch=main" alt="CI Status"></a>  <a href="https://github.com/stickerdaniel/linkedin-mcp-server/actions/workflows/release.yml" target="_blank"><img src="https://github.com/stickerdaniel/linkedin-mcp-server/actions/workflows/release.yml/badge.svg?branch=main" alt="Release"></a>  <a href="https://github.com/stickerdaniel/linkedin-mcp-server/blob/main/LICENSE" target="_blank"><img src="https://img.shields.io/badge/License-Apache%202.0-%233fb950?labelColor=32383f" alt="License"></a></p>> **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 that lets AI assistants like Claude read LinkedIn data through your own logged-in browser session. Access profiles and companies, search for jobs, or get job details.## Sponsor<p align="center">  <a href="https://golink.onl/unipile-banner" target="_blank">    <picture>      <source media="(prefers-color-scheme: dark)" srcset="https://github.com/user-attachments/assets/c2e7f3b4-6812-4f28-8728-10f882a44e0e">      <img src="https://github.com/user-attachments/assets/89ab8932-ae79-41c2-8416-a699e924218b" alt="Unipile, one API for every LinkedIn feature" width="100%">    </picture>  </a></p>This MCP server is **free** and **open source**, supported by [**Unipile**](https://golink.onl/unipile-l

Connect

Built from this server's own package name, version and transport as found in its source — not copied from anyone's documentation, so it cannot drift against a page we do not control. Replace the environment placeholders with a token scoped to the least it needs.

claude-code (pypi)
claude mcp add mcp-server-linkedin --env PROXY_SERVER=${PROXY_SERVER} --env PROXY_USERNAME=${PROXY_USERNAME} --env PROXY_PASSWORD=${PROXY_PASSWORD} --env PROXY_SERVER=${PROXY_SERVER} -- None mcp-server-linkedin==4.24.0
claude-code (oci)
claude mcp add linkedin-mcp-server:4.24.0 --env PROXY_SERVER=${PROXY_SERVER} --env PROXY_USERNAME=${PROXY_USERNAME} --env PROXY_PASSWORD=${PROXY_PASSWORD} --env PROXY_SERVER=${PROXY_SERVER} -- docker run -i --rm docker.io/stickerdaniel/linkedin-mcp-server:4.24.0:None

Exposed tools (10) 9 read · 1 write · 0 destructive

ToolRiskDescription
close_sessionreadClose the current browser session and clean up resources.
connect_with_personread
get_company_employeesread
get_company_postsread
get_company_profileread
get_job_detailsread
get_sidebar_profilesread
search_companiesread
search_peopleread
send_messagewrite

Details

Source
stickerdaniel/linkedin-mcp-server
PyPI
mcp-server-linkedin
Transports
stdio · streamable-http
Credentials it reads
PROXY_PASSWORDPROXY_SERVERPROXY_USERNAME
License
Apache-2.0
Stars
3,450 · pushed 0d ago

Trust audit

Do not install this without reading the findings. The audit found something that could harm you or your machine.

LayerWhat it checksResult
L0Provenance & inventoryPASS
L1Static analysis of the codeWARN
L2Instruction surface (what it tells the agent)FAIL
L3Class-specific surfacePASS
L4Behavioural (sandbox)SKIPPED

What the source does

Filesystem
declared (5 observation(s))
Network
declared (5 observation(s))
Shell
none-observed
Dependencies
pinned
Secrets in source
found

Findings (25)

CRITICALPrompt injection · prompt.transfer_instruction · CWE-94, CWE-1427
.agents/skills/2-repro-issue/SKILL.md:97
The `notifications/initialized` post often returns `{"error":{"code":-32602,"message":"Invalid request parameters"}}` and the server log shows a long pydantic ClientRequest validation dump. **This is 
Why it matters. an instruction to move sensitive data to an outside destination
Fix. remove; a skill never needs the user's secrets off the machine
MEDIUMNetwork egress · net.raw_ip · CWE-200, CWE-319
.agents/skills/2-repro-issue/SKILL.md:82
curl -s -D /tmp/repro-$NUM-headers -X POST http://127.0.0.1:$PORT/mcp \
MEDIUMNetwork egress · net.raw_ip · CWE-200, CWE-319
.agents/skills/2-repro-issue/SKILL.md:90
curl -s -X POST http://127.0.0.1:$PORT/mcp \
MEDIUMNetwork egress · net.raw_ip · CWE-200, CWE-319
.agents/skills/2-repro-issue/SKILL.md:111
curl -s -X POST http://127.0.0.1:$PORT/mcp \
MEDIUMNetwork egress · net.raw_ip · CWE-200, CWE-319
.agents/skills/3-verify-pr-fix/SKILL.md:109
curl -s -D /tmp/verify-pr-$PR-headers -X POST http://127.0.0.1:$PORT/mcp \
MEDIUMNetwork egress · net.raw_ip · CWE-200, CWE-319
.agents/skills/3-verify-pr-fix/SKILL.md:119
curl -s -X POST http://127.0.0.1:$PORT/mcp \
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
tests/test_bootstrap.py:4681
token = "private-access-token"
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
tests/test_daemon_election.py:3140
secret = "proxy-password-must-not-cross"
LOWInventory / provenance · inv.hidden_file · CWE-1104
.coveragerc
.coveragerc
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWInventory / provenance · inv.hidden_file · CWE-1104
.mcpbignore
.mcpbignore
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWInventory / provenance · inv.hidden_file · CWE-1104
.pre-commit-config.yaml
.pre-commit-config.yaml
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWInventory / provenance · inv.symlink · CWE-1104
CLAUDE.md
CLAUDE.md
Why it matters. link not followed
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
tests/scraping/test_company.py:92
await scraper.scrape_company("../../feed", {"about"})
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
tests/scraping/test_company.py:692
await scraper.get_company_employees("../../feed")
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
tests/scraping/test_conversations.py:435
await reader._open_conversation_by_username("../../feed")
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
tests/scraping/test_conversations.py:758
await reader.get_conversation(thread_id="../../feed")
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
tests/scraping/test_facade_contracts.py:479
linkedin_username="../../feed", thread_id="2-direct", index=-1
LOWObfuscation / stealth · obf.base64_blob · CWE-506, CWE-94
README.md:35
[![uvx](https://img.shields.io/badge/uvx-Quick_Install-de5fe9?style=for-the-badge&logo=data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDEiIGhlaWdodD0iNDEiIHZpZXdCb3g9IjAgMCA0MSA0MSIgZmlsbD0ibm9uZSIgeG1sbnM
LOWObfuscation / stealth · obf.decode_call · CWE-506, CWE-94
linkedin_mcp_server/browser_import/extract.py:193
encrypted_key = base64.b64decode(payload["os_crypt"]["encrypted_key"])
LOWObfuscation / stealth · obf.decode_call · CWE-506, CWE-94
linkedin_mcp_server/process_gate.py:20
decoded = bytes.fromhex(nonce)
LOWObfuscation / stealth · obf.decode_call · CWE-506, CWE-94
linkedin_mcp_server/process_protocol.py:27
decoded = bytes.fromhex(value)
LOWObfuscation / stealth · obf.rtl_override · CWE-506, CWE-94
tests/test_pr_title.py:147
"",
LOWObfuscation / stealth · obf.rtl_override · CWE-506, CWE-94
tests/test_pr_title.py:148
"",
LOWObfuscation / stealth · obf.rtl_override · CWE-506, CWE-94
tests/test_pr_title.py:149
"",
LOWObfuscation / stealth · obf.rtl_override · CWE-506, CWE-94
tests/test_pr_title.py:150
"",

Gates applied: critical_finding, no_behavioural_pass, undeclared_transfer.

Audited 2026-09-13 · audit v0.4.0 · source sha afa0f16d00a3 · full audit: observations/trust-audit/mcp-server/stickerdaniel__linkedin-mcp-server.json · Report an issue or request a re-scan

Audit history

DateSourceVerdictGradeScoreChange
2026-09-13afa0f16d00a3BLOCKD61first audit

Alternatives

Other servers in the same categories, safer ones first.

Questions

What is the linkedin-mcp-server MCP server?

Open-source MCP server for LinkedIn. Give Claude and any MCP-compatible AI agent access to profiles, companies, jobs, and messages.

What tools does linkedin-mcp-server expose?

10 in total: 9 read-only, 1 that write, and 0 that can delete or overwrite. Every one is listed on this page with its risk.

Is linkedin-mcp-server safe to connect to an agent?

No — not without reading the findings first. The audit graded it D (61/100) and found 1 critical or high issue in the source. Each one is listed on this page with the file and line it is on.

What credentials does linkedin-mcp-server need?

It reads PROXY_PASSWORD, PROXY_SERVER and PROXY_USERNAME from the environment. Give it a token scoped to the least it needs — an agent that can be talked into calling a tool can be talked into calling it with your credentials.

How does linkedin-mcp-server run?

It speaks stdio and streamable-http, so it runs as a local process your client starts. It is published on PyPI as mcp-server-linkedin.

How current is this page?

The grade is for one exact copy of the source (afa0f16d00a3), read on 2026-09-13. The repository is watched and re-audited when it changes.

Provenance: OBSERVED · read 2026-09-13 · job trust-audit-2026-09-13