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 sign me in to LinkedIn and show my profile"
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.
@echohello/linkedin-mcp
LinkedIn MCP server for Claude, Codex, OpenCode and other MCP clients. TypeScript, stdio transport, member OAuth, and a small tool surface for the signed-in member's profile and text posts.
npm install
npm run build
LINKEDIN_CLIENT_ID=... LINKEDIN_CLIENT_SECRET=... node dist/index.jsWhy
LinkedIn does not ship an MCP server. This one speaks the public member APIs only: three-legged OAuth, OpenID userinfo, and a text post on behalf of the signed-in member. It does not take a browser session cookie, and it does not read other people's data, send messages, or send connection requests.
Related MCP server: linkedin-mcp-server
What you need
Create an app in the LinkedIn developer portal and add:
Sign In with LinkedIn using OpenID Connect (
openid,profile,email)Share on LinkedIn (
w_member_social)
Register this redirect URL exactly:
http://127.0.0.1:53682/callback
Tools
Tool | Purpose |
| Start member sign-in and return the approval URL |
| Wait for the loopback callback, or exchange a pasted redirect URL |
| Show whether a session is stored, without returning tokens |
| Read the signed-in member's OpenID profile |
| Publish a text post as that member |
| Delete the stored session |
Configure
Variable | Required | Purpose |
| yes | App client id |
| yes | App client secret |
| no | Defaults to |
| no | Space-separated override of the default member scopes |
| no | Posts API version header, |
| no | Session file. Defaults to |
The session file is mode 0600. Tool results never include the access token.
Sign in from a terminal before starting the server, or let the agent call the login tools:
LINKEDIN_CLIENT_ID=... LINKEDIN_CLIENT_SECRET=... node dist/index.js loginMCP client config:
{
"mcpServers": {
"linkedin": {
"command": "node",
"args": ["/absolute/path/to/linkedin-mcp/dist/index.js"],
"env": {
"LINKEDIN_CLIENT_ID": "your-client-id",
"LINKEDIN_CLIENT_SECRET": "your-client-secret"
}
}
}
}Out of scope
Messaging, invitations, company-page posting, image and video uploads, and reading the member's feed all need products this server does not request. r_member_social is a restricted permission and is not part of the default scope set.
Develop
npm test
npm run typecheckAvailable Tools
6 toolslinkedin_create_postA
Publish a text post as the signed-in member. Requires the Share on LinkedIn product (w_member_social).
Inputs: commentary (required), visibility.
linkedin_finish_loginA
Finish member sign-in. Waits for the loopback callback, or exchanges a pasted redirect URL. Saves the session locally.
Inputs: redirectUrl, timeoutSeconds.
linkedin_loginA
Start LinkedIn member sign-in. Returns a URL the member must open and approve. When the redirect URI is loopback, a local listener waits for the callback. Tokens are never returned.
Inputs: no named parameters.
linkedin_logoutA
Delete the stored member session.
Inputs: no named parameters.
linkedin_profileA
Read the signed-in member's OpenID profile (name, email, picture, member id).
Inputs: no named parameters.
linkedin_statusB
Show whether a member session is stored. Does not return tokens.
Inputs: no named parameters.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 6 tools
Each tool has a distinct function: the login/finish_login pair forms a clear two-step flow, and status, logout, profile, and create_post are all sharply separated. The only mild risk is confusion between linkedin_login and linkedin_finish_login, but descriptions disambiguate the sequence.
All six tools use a consistent linkedin_ prefix with snake_case verb/noun naming (linkedin_login, linkedin_finish_login, linkedin_status, etc.). The convention is predictable throughout.
Six tools is well-scoped for an auth-plus-basic-actions server, with each tool earning its place across the session lifecycle and core member operations.
The auth lifecycle (login, finish, status, logout) plus profile read and post creation covers the core member flow. Minor gaps exist—no post delete/list, no profile update—but the surface is coherent for its apparent scope.
Maintenance
Related MCP Connectors
LinkedIn API as MCP tools to retrieve profile data and publish content. Powered by HAPI MCP.
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.
LinkedIn Ads MCP server: run LinkedIn campaigns, ad groups, ads and reports from AI.
1PerfectPost is a LinkedIn content management platform. This MCP server gives AI assistants read and write access to a user's PerfectPost account: published posts with their engagement analytics, drafts lifecycle (create / edit / schedule), and LinkedIn profile data.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceMCP server for LinkedIn, enabling posting, liking, commenting, and profile retrieval via official OAuth 2.0. Features CLI, HTTP admin, and optional Telegram bot.14 npmMIT
- AlicenseNot gradedqualityDmaintenanceMCP server for LinkedIn API integration. Enables authentication, profile access, connections, search, messaging, and feed management via OAuth2.MIT
- AlicenseNot gradedqualityDmaintenanceMCP server that lets you publish text and image posts to LinkedIn, fetch your profile, and check auth status using natural language.MIT
- AlicenseAqualityDmaintenanceLocal-first MCP server using LinkedIn's official OAuth and REST APIs to connect a member account, read profile, and publish text posts.4135 npmMIT