LinkedIn MCP Server
基于LinkedIn可见网页界面,提供类型化、策略强制的本地MCP能力。
文档
LinkedIn MCP Server
Disclaimer: LinkedIn is a registered trademark of LinkedIn Corporation and its affiliates. LinkedIn MCP Server is an independent, unofficial project and is not affiliated with, endorsed by, sponsored by, or associated with LinkedIn Corporation or its affiliates.
A LinkedIn MCP server to find jobs, search people, research companies, manage your network, publish and engage with posts, and read or send messages.
Tools
| Area | Function | MCP tool | LinkedIn UI compatibility | What it does |
|---|---|---|---|---|
| Jobs | Search jobs | linkedin.jobs.search | Search by keywords, location, distance, date, workplace, experience, employment type, company, industry, function, title, benefits, Easy Apply, verification, applicant count, network, and other visible filters. | |
| Read job details | linkedin.jobs.get | Read the complete job description, company, application method, and visible hiring team. | ||
| People | Search people | linkedin.people.search | Search by keywords, connection degree, hiring status, location, current or past company, title, school, industry, services, language, connections, and followers. | |
| Read profiles | linkedin.people.get | Read the complete visible profile or request selected sections such as About, experience, education, skills, projects, certifications, and recommendations. | ||
| Companies | Search companies | linkedin.companies.search | Search by keywords, headquarters, industry, size, available jobs, and first-degree connections. | |
| Read company details | linkedin.companies.get | Read Overview and About information, including website, headquarters, size, type, founding year, and specialties. | ||
| Posts | Search posts | linkedin.posts.search | Search by keywords, date, content type, author, company, relationship, mentions, author industry, and other visible filters. | |
| Read posts | linkedin.posts.get | Read complete content, media, links, mentions, hashtags, reactions, and engagement. | ||
| Read discussions | linkedin.posts.comments.list | Read paginated comments, replies, attachments, and reactions. | ||
| Publish posts | linkedin.posts.create | Publish supported personal text, link, image, video, document, poll, celebration, event, hiring, and expert-request posts. | ||
| Comment | linkedin.posts.comment | Add text, links, emoji, mentions, photos, or GIFs to posts. | ||
| React | linkedin.posts.react | Add, change, or remove reactions on posts. | ||
| Network | List connections | linkedin.connections.list | Browse established first-degree connections with sorting and pagination. | |
| Search connections | linkedin.connections.search | Search existing connections using applicable People filters. | ||
| List invitations | linkedin.invitations.list | Browse received and sent invitations using LinkedIn's visible filters. | ||
| Send invitations | linkedin.invitations.send | Send connection requests with optional notes. | ||
| Accept invitations | linkedin.invitations.accept | Accept incoming connection requests. | ||
| Ignore invitations | linkedin.invitations.ignore | Ignore incoming connection requests. | ||
| Messaging | Search messages | linkedin.messaging.search | Search by recipient or message text using inbox categories and filters. | |
| Read conversations | linkedin.messaging.conversation.get | Read message history, replies, edits, reactions, and attachments. | ||
| Send messages | linkedin.messaging.send | Send or reply in one-to-one conversations with text, links, emoji, files, images, and GIFs. | ||
| Server | Check runtime | linkedin.server.status | Inspect the shared runtime, queue, and active browser operation. | |
| Check LinkedIn session | linkedin.session.status | Inspect browser-profile, authentication, login, and pause state. | ||
| List capabilities | linkedin.capabilities.list | Inspect available capabilities, versions, read/write effects, and required LinkedIn surfaces. |
NOT CHECKED tools remain covered by the offline simulator on every pull request.
Each account-changing tool performs one complete action. MCP clients can use the tool's destructive annotation to ask for confirmation or apply their own durable per-tool approval policy. Every capability is task-specific; the server does not expose unrestricted browser, click, navigation, JavaScript, or network access.
See the capability matrix for exact filters, supported formats, inputs, outputs, limits, and unsupported features.
Installation
VS Code and GitHub Copilot
Or add this to .vscode/mcp.json:
{
"servers": {
"linkedin-mcp": {
"command": "uvx",
"args": ["--from", "linkedin-mcp-local", "linkedin-mcp", "serve", "--transport", "stdio"]
}
}
}
See the VS Code MCP documentation.
Codex and ChatGPT Desktop
Add this to ~/.codex/config.toml:
[mcp_servers."linkedin-mcp"]
command = "uvx"
args = ["--from", "linkedin-mcp-local", "linkedin-mcp", "serve", "--transport", "stdio"]
startup_timeout_sec = 60
tool_timeout_sec = 900
default_tools_approval_mode = "auto"
Codex CLI, the Codex IDE extension, and ChatGPT Desktop share this local configuration. Restart the client after saving it. See the Codex MCP documentation.
Claude Code
claude mcp add --scope user --transport stdio linkedin-mcp -- \
uvx --from linkedin-mcp-local linkedin-mcp serve --transport stdio
Check it with claude mcp list. See the
Claude Code MCP documentation.
Claude Desktop
Download the .mcpb file, then open Settings → Extensions → Advanced
settings → Install Extension.
See Claude Desktop's extension documentation.
Cursor
For manual setup, open Cursor Settings → MCP →
Add new MCP server, set the command to uvx, and set the arguments to
--from linkedin-mcp-local linkedin-mcp serve --transport stdio.
See the Cursor MCP documentation.
Gemini CLI
In ~/.gemini/settings.json, add a local server named linkedin-mcp under
mcpServers with command uvx and arguments
--from linkedin-mcp-local linkedin-mcp serve --transport stdio, then run
gemini mcp list.
See the Gemini CLI MCP documentation.
Windsurf
Open Settings → AI → Manage MCP Servers, or add a local server named
linkedin-mcp to ~/.codeium/windsurf/mcp_config.json with command uvx and
arguments --from linkedin-mcp-local linkedin-mcp serve --transport stdio.
See the Windsurf MCP documentation.
Cline
Open MCP Servers → Configure, then add a local server named linkedin-mcp
with command uvx and arguments
--from linkedin-mcp-local linkedin-mcp serve --transport stdio.
See the Cline MCP documentation.
Roo Code
Open Roo Code's MCP settings and add a local server named linkedin-mcp to the
global file or .roo/mcp.json, using command uvx and arguments
--from linkedin-mcp-local linkedin-mcp serve --transport stdio.
See the Roo Code MCP documentation.
Zed
Add this to Zed settings:
{
"context_servers": {
"linkedin-mcp": {
"command": "uvx",
"args": ["--from", "linkedin-mcp-local", "linkedin-mcp", "serve", "--transport", "stdio"]
}
}
}
See the Zed MCP documentation.
Goose
Or add a custom stdio extension with command uvx and arguments
--from linkedin-mcp-local linkedin-mcp serve --transport stdio, or start one
CLI session with:
goose session --with-extension \
"uvx --from linkedin-mcp-local linkedin-mcp serve --transport stdio"
See the Goose documentation.
OpenCode
For OpenCode v2, add this to opencode.json:
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"servers": {
"linkedin-mcp": {
"type": "local",
"command": ["uvx", "--from", "linkedin-mcp-local", "linkedin-mcp", "serve", "--transport", "stdio"]
}
}
}
}
See the OpenCode MCP documentation.
JetBrains AI Assistant
Open Settings → Tools → AI Assistant → Model Context Protocol (MCP), click
Add, set the command to uvx, and set the arguments to
--from linkedin-mcp-local linkedin-mcp serve --transport stdio.
See the JetBrains MCP documentation.
Continue
Create .continue/mcpServers/linkedin-mcp.json with a local server named
linkedin-mcp, command uvx, and arguments
--from linkedin-mcp-local linkedin-mcp serve --transport stdio.
See the Continue MCP documentation.
Warp
Open Settings → AI → Manage MCP Servers → Add, name the server
linkedin-mcp, set the command to uvx, and set the arguments to
--from linkedin-mcp-local linkedin-mcp serve --transport stdio.
See the Warp MCP documentation.
Usage
First-time LinkedIn login
After installation, restart your MCP client. The server opens LinkedIn in a browser window where you can sign in and complete MFA or any checkpoint. On this first use it creates its own persistent Chromium profile automatically. Your session is saved in that profile and reused across restarts.
If you have not started the server yet and want to log in manually, create the dedicated profile first:
uvx --from linkedin-mcp-local linkedin-mcp profile create
uvx --from linkedin-mcp-local linkedin-mcp login
The server never asks for or stores your LinkedIn password.
Local session controls
Use these commands without locating PIDs or deleting lock files manually:
# Show or gracefully stop the process that owns this account
uvx --from linkedin-mcp-local linkedin-mcp status
uvx --from linkedin-mcp-local linkedin-mcp stop
# Inspect the dedicated Chromium profile or sign out visibly
uvx --from linkedin-mcp-local linkedin-mcp profile status
uvx --from linkedin-mcp-local linkedin-mcp logout
For a clean profile, run linkedin-mcp profile reset. The command asks for
confirmation, archives the old profile, and creates a replacement. See
Configuration
for the complete lifecycle.
Try it
Ask your MCP client naturally:
Find jobs
Find remote software engineering jobs in India posted this week with Easy Apply.
Research people
Find engineering managers at Stripe in India and show me their relevant experience.
Research companies
Find fintech companies in Bengaluru with 51–200 employees and summarize each company.
Explore posts
Find recent LinkedIn posts about AI agents and summarize the most useful discussions.
Manage your network
Show my latest received connection requests.
Send a connection request to
<profile URL>with the note<note>.
Send messages
Send
<message>to<profile URL>.
Action approval
Account-changing tools are marked destructive. Approval is controlled entirely by the MCP client: it may prompt, reject, or durably approve an exact tool. The server does not maintain a second scope or permission system. To let a Codex scheduled task publish posts unattended while every other LinkedIn action keeps its normal client behavior, approve only the direct post tool:
[mcp_servers."linkedin-mcp".tools."linkedin.posts.create"]
approval_mode = "approve"
Restart Codex after changing its configuration. The tool still resolves the exact visible target, validates any local attachment path, type, and size, performs one narrow UI action, and verifies the visible postcondition. Avoid approving the entire server when only one action is needed. See Configuration for the full model.
Architecture
%%{init: {"flowchart": {"nodeSpacing": 55, "rankSpacing": 65}, "themeVariables": {"fontSize": "20px"}}}%%
flowchart LR
A["MCP Clients<br/>Codex · Claude · Cursor"] --> B["stdio bridges or<br/>loopback HTTP"]
B --> C["Shared Local Runtime<br/>Typed LinkedIn Tools"]
C --> D["Fair Per-Client Queue"]
D --> E["One Atomic Browser Operation<br/>Fresh Page · Global Pacing"]
E -->|"Visible UI only"| F["LinkedIn"]
E <--> G["One Chromium Context<br/>Persistent Profile"]
C -. "Tool annotations and results" .-> A
Everything runs locally. There is no hosted backend, telemetry, database, external queue, LangGraph runtime, or credential service. Browser cookies live only in the local Playwright profile. The first client starts one shared local runtime; later clients attach to it, and fair scheduling gives each client a turn between complete tool calls. Operation state lasts only for that runtime. Read the full architecture and privacy policy.
Configuration
Common settings control:
- the persistent browser profile and headed/headless operation;
- the local attachment directory;
- internal pacing, queue capacity, and bounded collection traversal; and
- stdio or loopback-only Streamable HTTP transport.
Tool availability and approval are configured in the MCP client. See Configuration for every server environment variable, client policy guidance, local HTTP sharing, and the container image.
Privacy Policy
The server has no maintainer-operated backend, analytics, advertising, or telemetry. LinkedIn receives normal visible-UI requests, and the invoking MCP client receives tool results under its own data policy; the project sends nothing to the maintainer. Read the complete privacy policy for processing, storage, sharing, retention, and deletion details.
Safety
Use of this software is at your own risk. You are solely responsible for complying with LinkedIn's User Agreement, applicable laws, and third-party rights. LinkedIn may limit or restrict accounts that use prohibited automation. The maintainers do not authorize spam, unauthorized data collection, privacy violations, or circumvention of access controls.
- Use only accounts and activity you are authorized to operate.
- The server pauses on authentication expiry, checkpoints, restriction pages, permission failures, and configuration errors.
- It does not implement CAPTCHA bypass, proxy rotation, fingerprint spoofing, credential harvesting, stealth plugins, or private LinkedIn endpoints.
- Never commit or share the persistent browser profile or local assets.
See SECURITY.md and the security design.
More documentation
Support the project
If LinkedIn MCP Server is useful to you:
Let's connect
Have feedback or an idea for LinkedIn MCP Server?
License
Licensed under the Apache License 2.0.