@mhdd_24/linkedin-mcp
MCP server that posts to LinkedIn through the LinkedIn API. Enables creating text posts on your LinkedIn profile using natural language from any MCP-compatible client.
README
@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,email - Author URN is built from
memberId— not hardcoded - Visibilities come from config — validated before posting
create_postvalidates visibility, POSTs the share, returns the post URN
Prerequisites
| Requirement | Notes |
|---|---|
| Node.js 18+ | Uses native fetch |
| LinkedIn OAuth access token | Member token with required scopes (see below) |
| Default visibility (optional) | DEFAULT_VISIBILITY so you don't pass it every time |
Required OAuth scopes
| Scope | Purpose |
|---|---|
openid |
OpenID Connect identity |
profile |
Display name |
email |
Email address |
w_member_social |
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-mcp
This installs the linkedin-mcp CLI and compiles dist/ via the package prepack script.
Option B — npx (no global install)
npx @mhdd_24/linkedin-mcp
Downloads 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.js
Configure 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 |
|---|---|---|---|
LINKEDIN_ACCESS_TOKEN |
Yes* | — | OAuth access token for userinfo + posting |
DEFAULT_VISIBILITY |
No | PUBLIC |
Default audience for create_post |
LINKEDIN_API_BASE_URL |
No | https://api.linkedin.com |
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 |
|---|---|
whoami |
Test token — shows memberId, name, email, author URN |
list_visibilities |
Lists valid post visibility values |
create_post |
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 |
|---|---|---|
text |
Yes | "Just shipped a new feature!" |
visibility |
No* | "PUBLIC" |
accessToken |
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 LINKEDIN_ACCESS_TOKEN or pass accessToken on the tool |
| Invalid visibility | Run list_visibilities; use an exact match (case-insensitive) |
| visibility is required | Set DEFAULT_VISIBILITY in env or pass visibility on create_post |
| userinfo failed: 401 | Token expired or invalid — refresh your OAuth token |
| Post failed: 403 | Token missing w_member_social scope |
More detail: docs/WIKI.md § Troubleshooting.
License
ISC
Recommended Servers
playwright-mcp
A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.
Magic Component Platform (MCP)
An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.
Audiense Insights MCP Server
Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.
VeyraX MCP
Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.
graphlit-mcp-server
The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.
Kagi MCP Server
An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.
E2B
Using MCP to run code via e2b.
Neon Database
MCP server for interacting with Neon Management API and databases
Exa Search
A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.
Qdrant Server
This repository is an example of how to create a MCP server for Qdrant, a vector search engine.