@mhdd_24/linkedin-mcp
Click on "Install 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., "@@mhdd_24/linkedin-mcpPost to LinkedIn: Just finished a great book on AI."
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.
@mhdd_24/linkedin-mcp
MCP server that posts to LinkedIn through the LinkedIn API. Use it from Cursor, Claude Desktop, VS Code Copilot, or any MCP-compatible client.
You type natural language — the assistant calls create_post for you. No manual member ID setup; your LinkedIn OAuth access token resolves identity automatically.
Full documentation: docs/WIKI.md
How it works (30 seconds)
You (chat) → MCP client → linkedin-mcp → LinkedIn userinfo (access token)
→ LinkedIn ugcPosts API
→ Text post on your profile
Access token calls
userinfo→ returnsmemberId,name,emailAuthor URN is built from
memberId— not hardcodedVisibilities come from config — validated before posting
create_postvalidates visibility, POSTs the share, returns the post URN
Related MCP server: linkedin-mcp
Prerequisites
Requirement | Notes |
Node.js 18+ | Uses native fetch |
LinkedIn OAuth access token | Member token with required scopes (see below) |
Default visibility (optional) |
|
Required OAuth scopes
Scope | Purpose |
| OpenID Connect identity |
| Display name |
| Email address |
| Create posts on your profile |
Obtain a token via the LinkedIn OAuth 2.0 Authorization Code flow.
Install
Option A — npm (recommended after publish)
npm install -g @mhdd_24/linkedin-mcpThis installs the linkedin-mcp CLI and compiles dist/ via the package prepack script.
Option B — npx (no global install)
npx @mhdd_24/linkedin-mcpDownloads and runs the latest published version on each invocation.
Option C — clone and build (contributors)
git clone https://github.com/Mhdd-24/Linkedin-MCP.git
cd Linkedin-MCP
npm install
npm run build
node dist/index.jsConfigure your MCP client
Cursor
Edit Cursor Settings → MCP or ~/.cursor/mcp.json:
{
"mcpServers": {
"linkedin": {
"command": "npx",
"args": ["-y", "@mhdd_24/linkedin-mcp"],
"env": {
"LINKEDIN_ACCESS_TOKEN": "<your-oauth-access-token>",
"DEFAULT_VISIBILITY": "PUBLIC"
}
}
}
}After global install, you can use:
"command": "linkedin-mcp"Local development:
"command": "node",
"args": ["/path/to/linkedin-mcp/dist/index.js"]Restart Cursor (or toggle the MCP server off/on) after saving.
Claude Desktop
%APPDATA%\Claude\claude_desktop_config.json (Windows) or ~/Library/Application Support/Claude/claude_desktop_config.json (macOS):
{
"mcpServers": {
"linkedin": {
"command": "npx",
"args": ["-y", "@mhdd_24/linkedin-mcp"],
"env": {
"LINKEDIN_ACCESS_TOKEN": "<your-oauth-access-token>",
"DEFAULT_VISIBILITY": "PUBLIC"
}
}
}
}Environment variables
Variable | Required | Default | Purpose |
| Yes* | — | OAuth access token for userinfo + posting |
| No |
| Default audience for |
| No |
| LinkedIn API host |
* Or pass accessToken on each tool call.
Aliases: LI_ACCESS_TOKEN, accessToken, defaultVisibility, etc. (see WIKI).
Never commit access tokens. Put them only in MCP env or a local .env (for npm run dev).
Tools
Tool | Purpose |
| Test token — shows memberId, name, email, author URN |
| Lists valid post visibility values |
| Create a text post on your LinkedIn profile |
Usage
Step 1 — Verify setup (optional)
In chat:
Run whoami on the linkedin MCP.
Expected: your LinkedIn identity and author URN.
Step 2 — See valid visibilities (optional)
list_visibilities
Examples: PUBLIC, CONNECTIONS
Step 3 — Create a post
Post to LinkedIn: Just shipped a new feature! Excited to share what we've been building.
Create a LinkedIn post with visibility PUBLIC: Happy to announce our open-source MCP server for LinkedIn integration.
create_post parameters
Parameter | Required | Example |
| Yes | "Just shipped a new feature!" |
| No* | "PUBLIC" |
| No | Only if not in env |
* Optional when DEFAULT_VISIBILITY is set in MCP config.
What happens after npm install?
Package files land in
node_modules/@mhdd_24/linkedin-mcp/(or global prefix if-g).prepack/ publish includes compileddist/— no local build needed for end users.The
linkedin-mcpbin points todist/index.js.Your MCP client runs that entry over stdio (stdin/stdout = MCP protocol; logs go to stderr).
On startup:
validateEnv()warns if access token is missing.Tools are registered; the server waits for
CallToolrequests from the AI.
After publishing to npm (maintainers)
Bump version in
package.jsonandsrc/config/linkedin.config.ts(LI.SERVER.VERSION).Build and test:
npm run buildthen test with localmcp.json.Publish:
npm publish --access public(logged in as package owner).Users update by restarting MCP —
npxpicks up the new version automatically.Global install users:
npm update -g @mhdd_24/linkedin-mcp.
Current package version: 1.0.0.
See WIKI — Publishing for the full checklist.
Troubleshooting
Problem | Fix |
MCP server won't start | Check Node.js 18+ is installed |
No access token provided | Set |
Invalid visibility | Run |
visibility is required | Set |
userinfo failed: 401 | Token expired or invalid — refresh your OAuth token |
Post failed: 403 | Token missing |
More detail: docs/WIKI.md § Troubleshooting.
License
ISC
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/Mhdd-24/Linkedin-MCP'
If you have feedback or need assistance with the MCP directory API, please join our Discord server