Skip to main content
Glama
ashishodu2023

LinkedIn OpenID MCP

README.md
# LinkedIn OpenID MCP

Multi-user **Model Context Protocol** server that connects ChatGPT / Claude / Cursor to LinkedIn using **only** LinkedIn’s official [Sign In with OpenID Connect](https://learn.microsoft.com/en-us/linkedin/consumer/integrations/self-serve/sign-in-with-linkedin-v2) API.

**Docs site:** https://ashishodu2023.github.io/linkedin-mcp/

## What it does

| Tool | Purpose |
|:--|:--|
| `get_linkedin_profile` | Authenticated user’s OpenID profile (`name`, `email`, `picture`, `sub`) |
| `search` | Search profile fields + docs |
| `fetch` | Fetch `profile` or `docs` resources |

Each end-user authorizes **their own** LinkedIn account (OAuth). No scraping. No messaging automation.

## Quick start (local)

```bash
python3 -m venv .venv && source .venv/bin/activate
pip install -r requirements.txt

export BASE_URL="https://YOUR-PUBLIC-URL"          # ngrok / cloud URL
export LINKEDIN_CLIENT_ID="..."
export LINKEDIN_CLIENT_SECRET="..."
export LINKEDIN_REDIRECT_URI="${BASE_URL}/oauth/linkedin/callback"

PYTHONPATH=src uvicorn linkedin_mcp.server:app --reload --port 8080
```

### LinkedIn Developer app

1. Create app at https://www.linkedin.com/developers/apps  
2. Products → enable **Sign In with LinkedIn using OpenID Connect**  
3. Auth → Authorized redirect URL: `https://YOUR-PUBLIC-URL/oauth/linkedin/callback`

### ChatGPT

1. Settings → Connectors → Advanced → enable **Developer mode**  
2. Create connector → MCP URL = `https://YOUR-PUBLIC-URL/`  
3. Auth = OAuth (discovery via `/.well-known/oauth-authorization-server`)  
4. Sign in → authorize LinkedIn → ask: `Call get_linkedin_profile`

## Deploy

Any HTTPS host with a public root URL works (Fly.io, Railway, Render, Cloud Run).

```bash
# example
export BASE_URL=https://linkedin-mcp.example.com
# set LinkedIn secrets as platform env vars
```

See `Dockerfile` and `fly.toml` / `railway.toml` in-repo.

## Limits (important)

Official LinkedIn OpenID returns **lite profile only**. It does **not** grant feed, connections, inbox, or arbitrary profile scraping. Requesting those via unofficial APIs risks account bans.

## License

MIT — Ashish Verma