Skip to main content
Glama
sandeepramdas

LinkedIn MCP Server

README.md
# LinkedIn MCP Server

A Model Context Protocol (MCP) server using the TypeScript SDK for LinkedIn integration. Allows an AI agent (e.g. Claude) to authenticate with LinkedIn and share posts or links.

## Prerequisites

- Node.js (>=14) and npm
- LinkedIn Developer App:
  - Create an app at https://www.linkedin.com/developers/apps
  - Under "Products", add **Sign In with LinkedIn** (OpenID Connect) and **Share on LinkedIn**
  - **Authorized Redirect URI** must match `.env`: `http://localhost:8000/auth/linkedin/callback`
  - Copy your **Client ID** and **Client Secret** into `.env`

## Setup

```bash
git clone <repo_url>
cd linkedin-mcp
npm install
```

Create a `.env` in project root with:

```env
SESSION_SECRET=your-session-secret
AUTH_PORT=8000          # OAuth callback server port
HTTP_PORT=8001          # HTTP/SSE server port
LINKEDIN_CLIENT_ID=your-client-id
LINKEDIN_CLIENT_SECRET=your-client-secret
LINKEDIN_REDIRECT_URI=http://localhost:8000/auth/linkedin/callback
```

## Running

1. **OAuth Callback Server** (must stay running):
   ```bash
   npm run dev:auth
   ```

2. **MCP Server**:
   - Via Claude Desktop:
     ```bash
     claude-desktop
     ```
   - Or manually:
     ```bash
     npm run dev
     ```
   - This starts stdio transport + HTTP+SSE server.

3. **Inspector UI**:
   ```bash
   npm run build
   npx @modelcontextprotocol/inspector node build/server.js
   ```
   - Open the Inspector in browser → **Tools**
   - Use `linkedin-share-post` or `linkedin-share-link` tools.

## Testing

1. Visit `http://localhost:8000/auth/linkedin` in browser → complete LinkedIn login.
2. Confirm “Authentication successful!”.
3. In Inspector, run sample post/link tools.
4. Verify content on your LinkedIn profile.

## Claude Desktop Integration

1. Run `npm run dev:auth`
2. Visit `http://localhost:8000/auth/linkedin` in browser → complete LinkedIn login.
3. Confirm “Authentication successful!”. A token file should be generated. Do not close this terminal.
4. Open Claude Desktop and verify the tools are listed

Configure your `claude_desktop_config.json` file:

```json
{
  "mcpServers": {
    "linkedin": {
      "command": "node",
      "args": ["/Users/ken/Desktop/lab/linkedin-mcp/build/server.js"],
      "transport": "http",
      "url": "http://localhost:8001",
      "sseEndpoint": "/stream",
      "httpEndpoint": "/message",
      "env": {
        "SESSION_SECRET": "your-session-secret",
        "AUTH_PORT": "8000",
        "HTTP_PORT": "8001",
        "LINKEDIN_CLIENT_ID": "your-client-id",
        "LINKEDIN_CLIENT_SECRET": "your-client-secret",
        "LINKEDIN_REDIRECT_URI": "http://localhost:8000/auth/linkedin/callback"
      }
    }
  },
  "globalShortcut": "Ctrl+Space"
}
```
(You can find this file from Claude Desktop by going to settings > developer > edit config)

Save and **restart Claude Desktop** to apply changes.

TDQS

B3.4/5.0

Scored across 2 tools

Disambiguation5/5

The two tools are clearly distinct: one shares a link with commentary, the other shares a text post. No overlap in purpose.

Naming Consistency5/5

Both tools follow the consistent pattern 'linkedin-share-{type}', using snake_case and a clear verb_noun structure.

Tool Count3/5

Two tools is somewhat thin for a LinkedIn server; while it covers two core posting actions, it feels like a minimal offering for the social network domain.

Completeness3/5

The server covers link sharing and text posting, but misses image/video posts, schedule, and profile operations, leaving notable gaps for typical LinkedIn usage.

Maintenance

ActivityInactive
ResponsivenessNo issues