Skip to main content
Glama
pashaarshad

LinkedIn Automation MCP Server

by pashaarshad
README.md
# LinkedIn Automation MCP Server

An MCP (Model Context Protocol) server for LinkedIn automation that provides tools for automatically posting messages to LinkedIn, scheduling posts, and managing LinkedIn API integration.

## Features

- **Authentication**: OAuth2 authentication with LinkedIn API
- **Text Posts**: Create and publish text posts to LinkedIn
- **Image Posts**: Upload and post images with text content
- **Post Scheduling**: Schedule posts to be published at specific times
- **Profile Management**: Get authenticated user's LinkedIn profile information
- **Scheduled Post Management**: View, cancel, and manage scheduled posts

## Installation

1. Clone this repository
2. Install dependencies:
   ```bash
   npm install
   ```
3. Build the project:
   ```bash
   npm run build
   ```

## Configuration

Before using this MCP server, you need to:

1. **Create a LinkedIn App**: 
   - Go to [LinkedIn Developer Portal](https://developer.linkedin.com/)
   - Create a new app and get your Client ID and Client Secret
   - Configure OAuth redirect URLs

2. **Get an Access Token**:
   - Implement OAuth2 flow to get an access token
   - The access token needs the following scopes:
     - `r_liteprofile` (read profile information)
     - `r_emailaddress` (read email address)
     - `w_member_social` (write posts)

## Tools Available

### `authenticate_linkedin`
Authenticate with LinkedIn using an OAuth2 access token.

**Parameters:**
- `accessToken` (string): LinkedIn OAuth2 access token

### `post_to_linkedin`
Post a text message to LinkedIn.

**Parameters:**
- `text` (string): The text content of the post (1-3000 characters)
- `visibility` (string): Post visibility - "PUBLIC", "CONNECTIONS", or "LOGGED_IN_MEMBERS" (default: "PUBLIC")

### `post_image_to_linkedin`
Post an image with text to LinkedIn.

**Parameters:**
- `text` (string): The text content of the post (1-3000 characters)
- `imageUrl` (string): URL of the image to include in the post
- `altText` (string, optional): Alternative text for the image
- `visibility` (string): Post visibility - "PUBLIC", "CONNECTIONS", or "LOGGED_IN_MEMBERS" (default: "PUBLIC")

### `schedule_linkedin_post`
Schedule a post to be published later on LinkedIn.

**Parameters:**
- `text` (string): The text content of the post (1-3000 characters)
- `scheduledTime` (string): ISO 8601 timestamp for when to publish the post
- `visibility` (string): Post visibility - "PUBLIC", "CONNECTIONS", or "LOGGED_IN_MEMBERS" (default: "PUBLIC")

### `get_linkedin_profile`
Get the authenticated user's LinkedIn profile information.

**Parameters:** None

### `get_scheduled_posts`
Get all scheduled posts.

**Parameters:** None

### `cancel_scheduled_post`
Cancel a scheduled post.

**Parameters:**
- `scheduleId` (string): The ID of the scheduled post to cancel

## Usage with Claude Desktop

1. Build the server:
   ```bash
   npm run build
   ```

2. Add to Claude Desktop configuration (`claude_desktop_config.json`):
   ```json
   {
     "mcpServers": {
       "linkedin-automation": {
         "command": "node",
         "args": ["/absolute/path/to/linkedin-automation-mcp/build/index.js"]
       }
     }
   }
   ```

3. Restart Claude Desktop

## Development

```bash
# Install dependencies
npm install

# Build the project
npm run build

# Run the server (for testing)
npm start

# Development mode (build and run)
npm run dev
```

## LinkedIn API Rate Limits

This server respects LinkedIn API rate limits:
- Rate limit information is tracked and logged
- Automatic retry with backoff for rate-limited requests
- Best practices for API usage

## Security Considerations

- **Access Tokens**: Never commit access tokens to version control
- **Scopes**: Only request necessary OAuth scopes
- **Rate Limiting**: Respect LinkedIn's API rate limits
- **Error Handling**: Proper error handling for API failures

## Error Handling

The server includes comprehensive error handling for:
- Authentication failures
- API rate limits
- Network errors
- Invalid parameters
- LinkedIn API errors

## Contributing

1. Fork the repository
2. Create a feature branch
3. Make your changes
4. Add tests if applicable
5. Submit a pull request

## License

MIT License - see LICENSE file for details

## Support

For issues and questions:
1. Check the LinkedIn Developer Documentation
2. Review the MCP documentation at https://modelcontextprotocol.io/
3. Create an issue in this repository

## Disclaimer

This project is not officially affiliated with LinkedIn. Use in accordance with LinkedIn's API Terms of Service and Community Guidelines.