LinkedIn Post MCP
by Raffaele86
README.md
# LinkedIn Post MCP
An [MCP (Model Context Protocol)](https://modelcontextprotocol.io/) server that lets an MCP client (e.g. Claude) publish posts to a LinkedIn profile via the official LinkedIn API.
## How it works
- **3-legged OAuth (member token)** against LinkedIn (`openid profile w_member_social`) — the member authorizes once, the resulting access/refresh token is persisted locally and refreshed automatically.
- **FastMCP** server, HTTP transport on `/sse`. Authentication towards the MCP client is expected to be handled upstream (e.g. by an MCP gateway); here OAuth is **only** towards LinkedIn.
- Tools: import an existing token, run the interactive OAuth flow, post a text post (supports markdown formatting → LinkedIn richtext), inspect token state.
## Setup
See [`SETUP.md`](SETUP.md) for the full LinkedIn app configuration (credentials, redirect URI, scopes) and server deployment.
### Quick start
```bash
python -m venv .venv && source .venv/bin/activate
pip install -r requirements.txt
cp .env.example .env # then fill in LINKEDIN_CLIENT_ID / LINKEDIN_CLIENT_SECRET
python oauth_cli.py auth # interactive 3-legged OAuth
python server.py # start the MCP server
```
## Configuration
All settings come from environment variables (see [`.env.example`](.env.example)):
| Variable | Description |
|---|---|
| `LINKEDIN_CLIENT_ID` / `LINKEDIN_CLIENT_SECRET` | LinkedIn app credentials |
| `LINKEDIN_REDIRECT_URI` | Must match an authorized redirect URL in the LinkedIn app |
| `LINKEDIN_SCOPES` | `openid profile w_member_social` |
| `LINKEDIN_VERSION` | LinkedIn API version (YYYYMM) |
| `BASE_URL` / `PORT` | Where the server listens |
| `TOKEN_PATH` | Where the persisted member token is stored (perm 600) |
## License
MIT
This server cannot be deployed
Maintenance
ActivityInactive
ResponsivenessNo issues