linkedin-mcp
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@linkedin-mcp Find me data analyst jobs in London"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
LinkedIn MCP
Unofficial Model Context Protocol server for LinkedIn — read your profile, network and connections, search people and jobs, and send messages from any MCP client (Claude, etc.).
It runs in two modes:
HTTP + OAuth 2.1 (recommended) — the server is an OAuth 2.1 authorization server for MCP clients and bridges to LinkedIn's real 3‑legged OAuth consent screen. Each user signs in on
linkedin.com; the server never sees their password.stdio — a local server that reads a
LINKEDIN_ACCESS_TOKENfrom the environment. Handy for a single user or quick testing.
This mirrors the auth architecture of @aol/ifood-mcp and @aol/uber-mcp, swapping their reverse‑engineered logins for LinkedIn's first‑class OAuth.
Tools
Tool | LinkedIn endpoint | Notes |
|
| Works with the default |
|
| Needs |
|
| Needs an approved connections product. |
|
| Needs an approved profile product. |
|
| Needs an approved search product. |
|
| Needs an approved jobs product. |
|
| Needs |
LinkedIn API access. Out of the box, a standard LinkedIn app only grants the OpenID Connect scopes (
openid profile email), solinkedin_meworks immediately. The other tools call endpoints that LinkedIn gates behind approved products (Sign In, Marketing, Talent Solutions, etc.). Until your app is approved for those, those tools will return 403 — this is a LinkedIn platform restriction, not a bug. Add the granted scopes toLINKEDIN_SCOPESonce approved.
Related MCP server: Linkd MCP Server
Quick start (HTTP + OAuth)
1. Create a LinkedIn app
Go to https://www.linkedin.com/developers/apps → Create app.
Under Auth, copy the Client ID and Client Secret.
Add your callback under Authorized redirect URLs:
http://localhost:3000/login/callback(orPUBLIC_URL+/login/callback).Under Products, add Sign In with LinkedIn using OpenID Connect (and any others you need).
2. Configure
cp .env.example .env
# then edit .env:
# MCP_JWT_SECRET=$(openssl rand -hex 32)
# LINKEDIN_CLIENT_ID=...
# LINKEDIN_CLIENT_SECRET=...
# PUBLIC_URL=http://localhost:30003. Run
npm install
npm run build
npm run start:http # or: npm run dev (tsx watch)Point your MCP client at http://localhost:3000/mcp. On first connect it runs
the OAuth 2.1 flow, redirects you to LinkedIn to sign in, and then calls tools
on your behalf.
Quick start (stdio)
cp .env.example .env
# set LINKEDIN_ACCESS_TOKEN=... (e.g. from the LinkedIn developer console token generator)
npm install && npm run build
npm startMCP client config:
{
"mcpServers": {
"linkedin": {
"command": "node",
"args": ["/absolute/path/to/linkedin-mcpserver/build/index.js"],
"env": { "LINKEDIN_ACCESS_TOKEN": "AQV..." }
}
}
}How the OAuth bridge works
MCP client ──/authorize──▶ this server ──302──▶ /login ──▶ /login/start
│
302 ▼ linkedin.com/oauth/v2/authorization
user signs in on LinkedIn
│
/login/callback ◀──302 code&state──────────────────────┘
│ exchange code → LinkedIn access + refresh token
│ fetch /v2/userinfo → stable member id (sub)
│ store tokens per‑user, mint an MCP auth code
▼
MCP client ──/token──▶ this server ──▶ HS256 JWT (audience‑bound to /mcp)
MCP client ──/mcp (Bearer JWT)──▶ tools call LinkedIn with the member's tokenMCP access tokens are short‑lived HS256 JWTs signed with
MCP_JWT_SECRET, audience‑bound to the/mcpresource (RFC 8707), with rotating refresh tokens.Downstream LinkedIn tokens are refreshed transparently when the app is approved for refresh tokens; otherwise the user re‑authenticates.
All state is in memory (single process). Swap the stores in
src/http/store.tsfor Redis/DB to scale horizontally.
Environment
Var | Required | Default | Purpose |
| – |
| HTTP port. |
| HTTP |
| URL the client + LinkedIn see. |
| HTTP | – | HS256 key (≥32 chars). |
| HTTP | – | LinkedIn app client id. |
| HTTP | – | LinkedIn app client secret. |
| – |
| OAuth scopes to request. |
| – |
| OAuth callback override. |
| stdio | – | Token for stdio mode. |
| – |
| API host override. |
| – | – |
|
Layout
src/
index.ts stdio server + tool catalog + executeTool + TokenProvider
http-server.ts remote MCP server (Streamable HTTP + OAuth 2.1)
http/
provider.ts LinkedInOAuthProvider (OAuthServerProvider, HS256 JWTs)
login-router.ts /login → LinkedIn consent → /login/callback
linkedin-auth.ts LinkedIn OAuth client (authorize / token / userinfo)
session-provider.ts per-user token lookup + transparent refresh
store.ts in-memory OAuth + downstream token storesScripts
Script | Action |
| Compile to |
| Run the HTTP/OAuth server. |
| Run the stdio server. |
|
|
|
|
|
|
License
MIT. See LICENSE.
Available Tools
7 toolslinkedin_connectionsC
List the member's 1st-degree connections (paginated). Requires an approved connections product/scope.
Inputs: count, start.
linkedin_get_profileA
Retrieve a member profile by person id (publicId or numeric/URN id). Requires an approved profile product/scope.
Inputs: personId (required).
linkedin_meA
Get the authenticated member's profile via OpenID Connect (sub, name, email, locale, picture). Works with the openid profile email scopes.
Inputs: no named parameters.
linkedin_network_statsA
Get the member's network size (1st-degree connection count). Requires the r_1st_connections_size product/scope.
Inputs: personUrn.
linkedin_search_jobsA
Search job postings by keywords / location / company / job type. Requires an approved jobs product/scope.
Inputs: jobType, keywords, location, companies.
linkedin_search_peopleC
Search member profiles by keywords / location / company / industry. Requires an approved search product/scope.
Inputs: keywords, location, industries, currentCompany.
linkedin_send_messageA
Send a message to a connection. Requires the w_member_social (messaging) product/scope.
Inputs: messageBody (required), recipientUrn (required), subject.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 7 tools
Each tool has a distinct purpose: self-profile, profile by ID, search people, search jobs, send messages, connections list, and network size. Although 'me' and 'get_profile' both retrieve profiles, one is self and the other is arbitrary, so there is no ambiguity. The two search tools clearly target different resources.
All tools share the 'linkedin_' prefix, which is consistent. However, the pattern after the prefix varies: some use bare nouns (me, connections, network_stats) while others use verb_noun (search_people, search_jobs, send_message, get_profile). This is a minor inconsistency but still predictable and readable.
With 7 tools, the server is well-scoped for a LinkedIn integration. Each tool covers a core functionality area without unnecessary bloat, falling well within the typical 3-15 range for a focused server.
The tool surface covers the most common LinkedIn actions: viewing profiles, searching people and jobs, messaging, and managing connections. Missing capabilities like posting updates or managing connection requests are noticeable but not critical, as the core workflows are covered.
Maintenance
Related MCP Connectors
A hosted LinkedIn MCP server for your own account. Paste one address into Claude, ChatGPT, Cursor or n8n to read your inbox, send messages and invitations, and search people. Free to start. Not made by LinkedIn.
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.
LinkedIn jobs, companies and people for AI agents, plus messages and invites via your own account.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceA Model Context Protocol server that enables seamless interaction with LinkedIn for job applications, profile retrieval, feed browsing, and resume analysis through natural language commands.36-
- AlicenseAqualityDmaintenanceAn unofficial Model Context Protocol server that enables programmatic access to LinkedIn data through tools like user search, company search, profile enrichment, and contact retrieval.745 npm3ISC
- FlicenseNot gradedqualityDmaintenanceA comprehensive Model Context Protocol server that enables AI assistants to interact with LinkedIn APIs for profile management, content creation, networking, messaging, and analytics.2-
- AlicenseAqualityFmaintenanceAn unofficial Model Context Protocol server that provides LinkedIn tools for searching users, enriching profiles, retrieving contact information, and conducting deep research through natural language interfaces.513 npm5MIT