@mhdd_24/linkedin-mcp

@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.

Category
Visit Server

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

  1. Access token calls userinfo → returns memberId, name, email
  2. Author URN is built from memberId — not hardcoded
  3. Visibilities come from config — validated before posting
  4. create_post validates 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?

  1. Package files land in node_modules/@mhdd_24/linkedin-mcp/ (or global prefix if -g).
  2. prepack / publish includes compiled dist/ — no local build needed for end users.
  3. The linkedin-mcp bin points to dist/index.js.
  4. Your MCP client runs that entry over stdio (stdin/stdout = MCP protocol; logs go to stderr).
  5. On startup: validateEnv() warns if access token is missing.
  6. Tools are registered; the server waits for CallTool requests from the AI.

After publishing to npm (maintainers)

  1. Bump version in package.json and src/config/linkedin.config.ts (LI.SERVER.VERSION).
  2. Build and test: npm run build then test with local mcp.json.
  3. Publish: npm publish --access public (logged in as package owner).
  4. Users update by restarting MCP — npx picks up the new version automatically.
  5. 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

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.

Official
Featured
TypeScript
Magic Component Platform (MCP)

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.

Official
Featured
Local
TypeScript
Audiense Insights MCP Server

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.

Official
Featured
Local
TypeScript
VeyraX MCP

VeyraX MCP

Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.

Official
Featured
Local
graphlit-mcp-server

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.

Official
Featured
TypeScript
Kagi MCP Server

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.

Official
Featured
Python
E2B

E2B

Using MCP to run code via e2b.

Official
Featured
Neon Database

Neon Database

MCP server for interacting with Neon Management API and databases

Official
Featured
Exa Search

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.

Official
Featured
Qdrant Server

Qdrant Server

This repository is an example of how to create a MCP server for Qdrant, a vector search engine.

Official
Featured