# timkulbaev/mcp-linkedin [Health: Active]

**Category:** 🌐 Social Media  
**Repository:** https://github.com/timkulbaev/mcp-linkedin  
**GitHub Stars:** 2  
**Views:** 5  
**Installs:** 0  
**Upvotes:** 0  
**Directory Page:** https://allmcps.com/mcp/timkulbaev-mcp-linkedin

## Description
LinkedIn publishing, commenting, and reacting via Unipile API. Dry-run by default, SKILL.md included, CLI-first design for AI automation workflows.

## Claude Desktop Quick Installation
Heuristic fallback — verify the package name and runner against the repository README before running it. Uses `npx` (confidence: low):

```json
"mcpServers": {
  "mcp-linkedin": {
    "command": "npx",
    "args": ["-y","timkulbaev-mcp-linkedin"],
    "env": {
      "UNIPILE_API_KEY": "",
      "UNIPILE_DSN": ""
    }
  }
}
```

**Requires environment variables:** `UNIPILE_API_KEY`, `UNIPILE_DSN` — the values above are empty placeholders; fill in real credentials before running (see the repository for what each one is for).

## Documentation

## What timkulbaev/mcp-linkedin MCP server does

The timkulbaev/mcp-linkedin MCP server gives MCP-compatible AI clients three LinkedIn actions: create an original post, add a comment to an existing post, and react to a post. The server sends these requests to Unipile, which connects the configured LinkedIn account and handles LinkedIn OAuth.

Post creation accepts text, optional media, company mentions, and a dry-run flag. Text is limited to 3,000 characters. Media can be supplied as local paths or URLs, and supported formats include JPG, JPEG, PNG, GIF, WEBP, and MP4. Company names are resolved through Unipile's LinkedIn company search so they can become clickable mentions.

## How it works

An MCP client communicates with the local process using JSON-RPC over stdio. The server validates tool inputs, prepares media and mentions, then calls the Unipile API. For remote media URLs, files are downloaded to a temporary directory and removed after the publish attempt.

The intended publishing sequence is preview first, publish second. `linkedin_publish` and `linkedin_comment` use `dry_run: true` by default. A preview reports the proposed content, character count, media validation, resolved mentions, and warnings. The client must call the tool again with `dry_run: false` to perform the action. `linkedin_react` has no preview mode and acts immediately.

After a successful post, the response includes a post ID and indicates that the post was automatically liked. A LinkedIn feed URL can be formed from that ID using the activity URN format shown by the project.

## Setup and configuration

To run timkulbaev/mcp-linkedin, use Node.js 18 or later. Clone the repository, change into its directory, and run `npm install`. Configure the MCP client to start `index.js` with Node and provide an absolute path to that entry point.

Two environment variables are required:

- `UNIPILE_API_KEY`: the API key from the Unipile dashboard.
- `UNIPILE_DSN`: the Unipile data source name, such as an `apiXX.unipile.com:XXXXX` value.

The credentials are passed in the MCP client configuration and read from `process.env` when the process starts; the README does not use a `.env` file. Before connecting the server, create a Unipile account, connect a LinkedIn account, and retrieve the API key and DSN from the dashboard. Restart Claude Code or Claude Desktop after changing the MCP configuration.

## Tools and capabilities

The available tools are:

- `linkedin_publish`: previews or publishes an original post, with optional media and company mentions.
- `linkedin_comment`: previews or posts a comment using a LinkedIn post URL or raw post URN.
- `linkedin_react`: applies `like`, `celebrate`, `support`, `love`, `insightful`, or `funny` to a LinkedIn post.

The media handler checks that local files exist, are non-empty, and use a supported type. Unresolved company names remain visible as preview warnings, and the post may still be published without those mentions.

## Limitations and notes

The timkulbaev/mcp-linkedin MCP server requires an active Unipile account connected to LinkedIn; it does not manage LinkedIn credentials directly. Reactions are not protected by dry-run mode, so they should be treated as immediate operations. URL media is temporary and is cleaned up after publishing succeeds or fails.

The repository includes unit tests using Node's built-in test runner and a Biome lint script. The documented client examples cover Claude Code and Claude Desktop, while the server is described as usable with other MCP-compatible clients.

_Full upstream README: https://allmcps.com/mcp/timkulbaev-mcp-linkedin/readme_

