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.
- 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
- Clone this repository
- Install dependencies:
npm install
- Build the project:
npm run build
Before using this MCP server, you need to:
-
Create a LinkedIn App:
- Go to LinkedIn Developer Portal
- Create a new app and get your Client ID and Client Secret
- Configure OAuth redirect URLs
-
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)
Authenticate with LinkedIn using an OAuth2 access token.
Parameters:
accessToken(string): LinkedIn OAuth2 access token
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 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 postaltText(string, optional): Alternative text for the imagevisibility(string): Post visibility - "PUBLIC", "CONNECTIONS", or "LOGGED_IN_MEMBERS" (default: "PUBLIC")
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 postvisibility(string): Post visibility - "PUBLIC", "CONNECTIONS", or "LOGGED_IN_MEMBERS" (default: "PUBLIC")
Get the authenticated user's LinkedIn profile information.
Parameters: None
Get all scheduled posts.
Parameters: None
Cancel a scheduled post.
Parameters:
scheduleId(string): The ID of the scheduled post to cancel
-
Build the server:
npm run build
-
Add to Claude Desktop configuration (
claude_desktop_config.json):{ "mcpServers": { "linkedin-automation": { "command": "node", "args": ["/absolute/path/to/linkedin-automation-mcp/build/index.js"] } } } -
Restart Claude Desktop
# Install dependencies
npm install
# Build the project
npm run build
# Run the server (for testing)
npm start
# Development mode (build and run)
npm run devThis 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
- 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
The server includes comprehensive error handling for:
- Authentication failures
- API rate limits
- Network errors
- Invalid parameters
- LinkedIn API errors
- Fork the repository
- Create a feature branch
- Make your changes
- Add tests if applicable
- Submit a pull request
MIT License - see LICENSE file for details
For issues and questions:
- Check the LinkedIn Developer Documentation
- Review the MCP documentation at https://modelcontextprotocol.io/
- Create an issue in this repository
This project is not officially affiliated with LinkedIn. Use in accordance with LinkedIn's API Terms of Service and Community Guidelines.