linkedin-mcp-server
by ihiteshgupta
README.md
# linkedin-mcp-server
> LinkedIn MCP Server — post content, share articles, and manage your LinkedIn profile through Claude using the official LinkedIn API.
[](https://www.npmjs.com/package/@dev-hitesh-gupta/linkedin-mcp-server)
[](https://opensource.org/licenses/MIT)
[](https://nodejs.org)
**6 tools** for creating posts, sharing articles, managing your profile, and more — powered by the official LinkedIn REST API with OAuth 2.0.
## Tools
| Tool | Description | Permissions Required |
|------|-------------|---------------------|
| `linkedin_get_profile` | Get your LinkedIn profile information | Basic (OpenID) |
| `linkedin_create_post` | Create a text post (up to 3000 chars) | Share on LinkedIn |
| `linkedin_create_article_post` | Share an article link with commentary | Share on LinkedIn |
| `linkedin_get_posts` | Get your recent posts | Share on LinkedIn ⚠️ |
| `linkedin_delete_post` | Delete a post by ID | Share on LinkedIn |
| `linkedin_get_connections_count` | Get your total connection count | ⚠️ May need partner access |
> ⚠️ **API Limitations:** `linkedin_get_posts` and `linkedin_get_connections_count` use LinkedIn endpoints that may require elevated or partner-level API access depending on your app's approval status. The core tools (get profile, create post, share article, delete post) work with standard access.
---
## Setup
LinkedIn requires creating a Developer App to get OAuth credentials. This takes about 10 minutes.
### Step 1 — Create a LinkedIn Developer App
1. Go to [developer.linkedin.com/apps](https://developer.linkedin.com/apps)
2. Click **"Create app"**
3. Fill in the required fields:
- **App name**: e.g. `My LinkedIn MCP`
- **LinkedIn Page**: You need a LinkedIn company page linked — create a simple one at [linkedin.com/company/setup/new](https://www.linkedin.com/company/setup/new/) if you don't have one
- **App logo**: Upload any image (required)
4. Agree to the terms and click **"Create app"**
### Step 2 — Configure OAuth Redirect URL
1. In your new app, go to the **"Auth"** tab
2. Under **"OAuth 2.0 settings"**, find **"Authorized redirect URLs for your app"**
3. Click **"Add redirect URL"** and enter exactly:
```
http://127.0.0.1:3000/callback
```
4. Click **"Update"**
5. Copy your **Client ID** and **Client Secret** from this page — you'll need them next
### Step 3 — Request API Products
1. Go to the **"Products"** tab in your app
2. Request access to both of these products:
- **Sign In with LinkedIn using OpenID Connect** — click "Request access" → Select → Agree
- **Share on LinkedIn** — click "Request access" → Select → Agree
3. Both are typically approved instantly for personal use
### Step 4 — Install & Configure
```bash
# Install globally
npm install -g @dev-hitesh-gupta/linkedin-mcp-server
# Create config directory and add your credentials
mkdir -p ~/.linkedin-mcp
cat > ~/.linkedin-mcp/credentials.json << 'EOF'
{
"client_id": "YOUR_CLIENT_ID",
"client_secret": "YOUR_CLIENT_SECRET"
}
EOF
# Authenticate — opens browser for LinkedIn sign-in
linkedin-mcp-server auth
```
Your access token is saved to `~/.linkedin-mcp/token.json` and valid for 60 days.
### Step 5 — Add to Claude Code
```bash
claude mcp add linkedin -- npx @dev-hitesh-gupta/linkedin-mcp-server
```
Or manually in your Claude config (`~/.claude/claude_desktop_config.json`):
```json
{
"mcpServers": {
"linkedin": {
"command": "npx",
"args": ["@dev-hitesh-gupta/linkedin-mcp-server"]
}
}
}
```
---
## Usage Examples
**Create a post:**
```
Post to LinkedIn: "Just shipped a new open-source MCP server for LinkedIn automation! Check it out. #opensource #ai"
```
**Share an article:**
```
Share this article on LinkedIn: https://example.com/article
My commentary: "Great read on the future of AI tooling"
```
**Control visibility:**
| Value | Who sees it |
|-------|-------------|
| `PUBLIC` | Everyone on LinkedIn (default) |
| `CONNECTIONS` | Your 1st-degree connections only |
| `LOGGED_IN` | Any logged-in LinkedIn member |
---
## Re-authentication
LinkedIn tokens expire after **60 days**. Re-authenticate when needed:
```bash
rm ~/.linkedin-mcp/token.json
linkedin-mcp-server auth
```
---
## Data & Auth Storage
All data is stored locally:
```
~/.linkedin-mcp/
├── credentials.json # Your LinkedIn app Client ID + Secret
└── token.json # OAuth access token (expires in 60 days)
```
> **Security:** Never commit these files to version control.
---
## Troubleshooting
**"Not authenticated" error:**
```bash
linkedin-mcp-server auth
```
**"Unable to determine member URN":**
Ensure the **Sign In with LinkedIn using OpenID Connect** product is approved in your app's Products tab.
**Post creation fails:**
Ensure the **Share on LinkedIn** product is approved. Check the Products tab in your LinkedIn Developer app.
**"Access blocked" during sign-in:**
Your LinkedIn app may still be under review. Check the Products tab for approval status.
**Token expired:**
```bash
rm ~/.linkedin-mcp/token.json && linkedin-mcp-server auth
```
**`linkedin_get_posts` or `linkedin_get_connections_count` returns errors:**
These tools use LinkedIn API endpoints that require elevated permissions not available with standard developer access. This is a LinkedIn API restriction.
---
## Requirements
- Node.js 18+
- A LinkedIn account
- LinkedIn Developer App with OAuth credentials (see setup above)
## License
MIT — [Hitesh Gupta](https://github.com/dev-hitesh-gupta)
TDQS
A3.7/5.0
Scored across 6 tools
Disambiguation5/5
Each tool targets a distinct operation: creating article vs text posts, deleting posts, retrieving posts, profile, and connections count. No overlap in functionality.
Naming Consistency5/5
All tools follow a consistent 'linkedin_verb_noun' pattern (e.g., linkedin_create_post, linkedin_get_profile), making the naming predictable and clear.
Tool Count5/5
With 6 tools covering posting, reading, and profile operations, the count is well-scoped for a focused LinkedIn server, not too many or too few.
Completeness3/5
Covers core post creation, deletion, and retrieval, but lacks update post and more detailed connection data, leaving notable gaps for a complete LinkedIn interaction surface.
Maintenance
ActivityInactive
ResponsivenessNo issues