A powerful Model Context Protocol (MCP) server for seamless LinkedIn integration with automatic OAuth 2.0 authentication. Get instant access to LinkedIn data through AI assistants like SIYA Desktop with zero manual setup required.
- Automatic OAuth flow - Browser opens automatically for LinkedIn login
- Seamless integration - Works immediately with SIYA Desktop
- Secure token management - 60-day tokens with automatic refresh
- Multi-user support - Manage multiple LinkedIn accounts effortlessly
- Profile Management - Access your profile and others' profiles
- Advanced Search - Find users, companies, and jobs with filters
- Content Creation - Post, like, comment, and share on LinkedIn
- Job Management - Search jobs, apply, save, and track applications
- Networking - Manage connections and send messages
- Company Insights - Follow companies and access detailed information
npm install -g linkedin-mcp-server
- Go to LinkedIn Developer Portal
- Create a new application
- Add redirect URI:
http://localhost:44002/auth/linkedin/callback
- Copy your Client ID and Client Secret
Add to your SIYA Desktop configuration file:
{
"mcpServers": {
"linkedin": {
"command": "linkedin-mcp-server",
"env": {
"LINKEDIN_CLIENT_ID": "your_client_id_here",
"LINKEDIN_CLIENT_SECRET": "your_client_secret_here"
}
}
}
}
{
"mcpServers": {
"linkedin": {
"command": "linkedin-mcp-server",
"args": [
"--client-id", "your_client_id_here",
"--client-secret", "your_client_secret_here"
]
}
}
}
{
"mcpServers": {
"linkedin": {
"command": "npx",
"args": [
"linkedin-mcp-server",
"--client-id", "your_client_id_here",
"--client-secret", "your_client_secret_here"
]
}
}
}
That's it! Ask SIYA to use LinkedIn tools and authentication happens automatically.
-
get_my_profile
- Get your LinkedIn profile -
get_linkedin_profile
- Get any user's profile by ID
-
search_linkedin_users
- Advanced user search with filters
-
get_linkedin_company
- Get company information -
get_company_profile
- Get detailed company profile
-
search_jobs
- Search jobs with advanced filters -
get_job_details
- Get detailed job information -
get_recommended_jobs
- Get personalized job recommendations -
apply_to_job
- Apply to jobs directly -
save_job
- Save jobs for later -
get_saved_jobs
- Get your saved jobs -
get_job_applications
- Track your applications -
get_company_jobs
- Get all jobs from a company
-
create_linkedin_post
- Create and publish posts -
get_my_posts
- Get your posts and engagement -
like_post
- Like posts -
comment_on_post
- Comment on posts -
share_post
- Share posts with commentary -
get_feed
- Get your LinkedIn feed
-
get_linkedin_conversations
- Get message history -
send_linkedin_message
- Send messages to connections
-
get_linkedin_connections
- Get your connections -
send_connection_request
- Send connection requests -
get_connection_requests
- Get pending requests -
accept_connection_request
- Accept requests
-
follow_company
- Follow companies -
get_followed_companies
- Get followed companies
-
logout
- Clear authentication tokens
"Get my LinkedIn profile"
// Calls: get_my_profile → Automatic auth if needed → Returns profile data
"Find software engineer jobs in San Francisco at tech companies"
// Calls: search_jobs with filters → Returns matching jobs
"Post an update about my latest project on LinkedIn"
// Calls: create_linkedin_post → Posts to your LinkedIn
Perfect for personal use. Tokens stored in ~/.linkedin-mcp/tokens_default.json
.
Environment Variables:
{
"mcpServers": {
"linkedin": {
"command": "linkedin-mcp-server",
"env": {
"LINKEDIN_CLIENT_ID": "your_client_id",
"LINKEDIN_CLIENT_SECRET": "your_client_secret"
}
}
}
}
Command Line Arguments:
{
"mcpServers": {
"linkedin": {
"command": "linkedin-mcp-server",
"args": ["--client-id", "your_client_id", "--client-secret", "your_client_secret"]
}
}
}
Using npx:
{
"mcpServers": {
"linkedin": {
"command": "npx",
"args": ["linkedin-mcp-server", "--client-id", "your_client_id", "--client-secret", "your_client_secret"]
}
}
}
For teams or multiple accounts. Each user gets separate token storage.
Environment Variables:
{
"mcpServers": {
"linkedin-personal": {
"command": "linkedin-mcp-server",
"env": {
"LINKEDIN_CLIENT_ID": "your_client_id",
"LINKEDIN_CLIENT_SECRET": "your_client_secret",
"LINKEDIN_USER_ID": "personal"
}
},
"linkedin-work": {
"command": "linkedin-mcp-server",
"env": {
"LINKEDIN_CLIENT_ID": "your_client_id",
"LINKEDIN_CLIENT_SECRET": "your_client_secret",
"LINKEDIN_USER_ID": "work"
}
}
}
}
Command Line Arguments:
{
"mcpServers": {
"linkedin-personal": {
"command": "linkedin-mcp-server",
"args": [
"--client-id", "your_client_id",
"--client-secret", "your_client_secret",
"--default-user-id", "personal"
]
},
"linkedin-work": {
"command": "linkedin-mcp-server",
"args": [
"--client-id", "your_client_id",
"--client-secret", "your_client_secret",
"--default-user-id", "work"
]
}
}
}
Using npx:
{
"mcpServers": {
"linkedin-personal": {
"command": "npx",
"args": [
"linkedin-mcp-server",
"--client-id", "your_client_id",
"--client-secret", "your_client_secret",
"--default-user-id", "personal"
]
},
"linkedin-work": {
"command": "npx",
"args": [
"linkedin-mcp-server",
"--client-id", "your_client_id",
"--client-secret", "your_client_secret",
"--default-user-id", "work"
]
}
}
}
Pass credentials directly as arguments (highest priority):
# All-in-one setup with arguments
linkedin-mcp-server --client-id "your_id" --client-secret "your_secret" --setup
# Check authentication with arguments
linkedin-mcp-server --client-id "your_id" --client-secret "your_secret" --auth
# Multi-user setup with arguments
linkedin-mcp-server --client-id "your_id" --client-secret "your_secret" --setup --user-id work
# Set default user for multi-user mode
linkedin-mcp-server --default-user-id "work" --setup --user-id personal
--client-id CLIENT_ID LinkedIn OAuth2 client ID (overrides LINKEDIN_CLIENT_ID env var)
--client-secret SECRET LinkedIn OAuth2 client secret (overrides LINKEDIN_CLIENT_SECRET env var)
--default-user-id USER_ID Default user identifier (overrides LINKEDIN_USER_ID env var)
--access-token TOKEN LinkedIn access token (legacy mode)
--user-id USER_ID Specific user identifier for multi-user support
--setup Run authentication setup wizard
--auth Check authentication status
--logout Clear saved authentication tokens
--list-users List all registered users
--remove-user USER_ID Remove a specific user and their tokens
--debug, -d Enable debug logging
--help, -h Show help message
- Command line arguments (highest priority)
- Environment variables (medium priority)
- Default values (lowest priority)
# Setup authentication (environment variables)
linkedin-mcp-server --setup
# Check authentication status
linkedin-mcp-server --auth
# Logout (clear tokens)
linkedin-mcp-server --logout
# Start MCP server
linkedin-mcp-server
# Setup specific user
linkedin-mcp-server --setup --user-id work
# List all users
linkedin-mcp-server --list-users
# Remove user
linkedin-mcp-server --remove-user work
# Start with specific user
LINKEDIN_USER_ID=work linkedin-mcp-server
Use LinkedIn MCP Server without installing it globally using npx:
# Run setup with npx
npx linkedin-mcp-server --client-id "your_id" --client-secret "your_secret" --setup
# Check authentication
npx linkedin-mcp-server --client-id "your_id" --client-secret "your_secret" --auth
# Start server with npx
npx linkedin-mcp-server --client-id "your_id" --client-secret "your_secret"
{
"mcpServers": {
"linkedin": {
"command": "npx",
"args": [
"linkedin-mcp-server",
"--client-id", "86yi0odon2lx3g",
"--client-secret", "WPL_AP1.your_secret_here.actual_secret"
]
}
}
}
{
"mcpServers": {
"linkedin-personal": {
"command": "npx",
"args": [
"linkedin-mcp-server",
"--client-id", "86yi0odon2lx3g",
"--client-secret", "WPL_AP1.your_secret_here.actual_secret",
"--default-user-id", "personal"
]
},
"linkedin-work": {
"command": "npx",
"args": [
"linkedin-mcp-server",
"--client-id", "86yi0odon2lx3g",
"--client-secret", "WPL_AP1.your_secret_here.actual_secret",
"--default-user-id", "work"
]
}
}
}
For Claude Desktop users who want to use npx:
Location: ~/Library/Application Support/Claude/claude_desktop_config.json
(macOS)
{
"mcpServers": {
"linkedin": {
"command": "npx",
"args": [
"linkedin-mcp-server",
"--client-id", "your_client_id",
"--client-secret", "your_client_secret"
]
}
}
}
- ✅ No global installation - Always uses latest version
- ✅ Auto-updates - Gets latest features automatically
- ✅ Clean system - No global packages cluttering your system
- ✅ Version flexibility - Can specify exact versions if needed
{
"mcpServers": {
"linkedin": {
"command": "npx",
"args": [
"linkedin-mcp-server@1.0.1",
"--client-id", "your_client_id",
"--client-secret", "your_client_secret"
]
}
}
}
Your LinkedIn app needs these scopes (configured automatically):
-
openid
- OpenID Connect authentication -
profile
- Basic profile access -
email
- Email address access
- Application Type: Choose appropriate type for your use case
-
Redirect URIs:
http://localhost:44002/auth/linkedin/callback
-
Scopes: Select
openid
,profile
,email
- Local-only storage - Tokens stored securely on your machine
- OAuth 2.0 standard - Industry-standard authentication
- No data transmission - No data sent to third parties
- Automatic token refresh - Handles token expiration seamlessly
- Secure token storage - Encrypted local storage
-
2/28 tools fully working (7.1%):
get_my_profile
,logout
- 14/28 require LinkedIn Partner approval (50%): Advanced features need special permissions
- 12/28 have API restrictions (42.9%): Limited by LinkedIn's standard API access
This is normal behavior for LinkedIn's API - most advanced features require special partnership approval.
✅ get_my_profile - Get your profile information
✅ logout - Clear authentication tokens
- Most LinkedIn APIs require LinkedIn Partner Program approval
- Standard developer accounts have very limited access
- This affects job tools, messaging tools, content tools, etc.
- Profile access works perfectly for standard accounts
git clone <repository-url>
cd linkedin-mcp-server
npm install
npm run build
# Set environment variables
export LINKEDIN_CLIENT_ID="your_client_id"
export LINKEDIN_CLIENT_SECRET="your_client_secret"
# Setup authentication
npm run auth:setup
# Start development server
npm run dev
# Test authentication
npm run test:auth
# Test tools (shows which work vs need approval)
npm run test:tools
# Required (can be provided as command line arguments instead)
LINKEDIN_CLIENT_ID="your_linkedin_app_client_id"
LINKEDIN_CLIENT_SECRET="your_linkedin_app_client_secret"
# Optional
LINKEDIN_USER_ID="default_user_identifier"
LINKEDIN_REDIRECT_URI="http://localhost:44002/auth/linkedin/callback"
LINKEDIN_ACCESS_TOKEN="your_access_token" # Legacy mode
Configuration values are resolved in this order:
-
Command Line Arguments (highest priority)
-
--client-id
overridesLINKEDIN_CLIENT_ID
-
--client-secret
overridesLINKEDIN_CLIENT_SECRET
-
--default-user-id
overridesLINKEDIN_USER_ID
-
--access-token
overridesLINKEDIN_ACCESS_TOKEN
-
-
Environment Variables (medium priority)
LINKEDIN_CLIENT_ID
LINKEDIN_CLIENT_SECRET
LINKEDIN_USER_ID
LINKEDIN_ACCESS_TOKEN
-
Default Values (lowest priority)
- Default redirect URI:
http://localhost:44002/auth/linkedin/callback
- Default user ID:
default
- Default redirect URI:
Pure Environment Variables:
export LINKEDIN_CLIENT_ID="86yi0odon2lx3g"
export LINKEDIN_CLIENT_SECRET="WPL_AP1.your_secret"
linkedin-mcp-server --setup
Pure Command Line Arguments:
linkedin-mcp-server --client-id "86yi0odon2lx3g" --client-secret "WPL_AP1.your_secret" --setup
Mixed Configuration (arguments override environment):
export LINKEDIN_CLIENT_ID="old_id"
export LINKEDIN_CLIENT_SECRET="old_secret"
linkedin-mcp-server --client-id "new_id" --setup # Uses new_id and old_secret
Authentication Failed
# Clear tokens and re-authenticate
linkedin-mcp-server --logout
linkedin-mcp-server --setup
Missing Credentials
- Ensure
LINKEDIN_CLIENT_ID
andLINKEDIN_CLIENT_SECRET
are set - Check SIYA Desktop configuration file
Tool Errors
- Most tools require LinkedIn Partner approval (expected behavior)
- Use
get_my_profile
to test basic functionality
linkedin-mcp-server --debug
# Check logs at: /tmp/linkedin-mcp-server.log
We welcome contributions! Please:
- Fork the repository
- Create a feature branch
- Submit a pull request
MIT License - see LICENSE file for details.
🎯 Perfect for: Personal LinkedIn automation, AI-powered networking, automated job searching, and seamless LinkedIn integration with AI assistants.