LinkedIn MCP Server
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@LinkedIn MCP ServerGet my LinkedIn profile information"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
LinkedIn MCP Server (Official API)
⚡ NOW USING OFFICIAL LINKEDIN API ⚡
Through this LinkedIn MCP server, AI assistants like Claude can connect to LinkedIn using the official LinkedIn API with proper OAuth 2.0 authentication. This ensures compliance with LinkedIn's Terms of Service and provides enterprise-grade reliability.
🔄 Migration Completed: Web Scraping → Official API
This server has been fully migrated from web scraping to the official LinkedIn API:
✅ What Changed:
Web scraping → Official LinkedIn REST API
Cookie authentication → OAuth 2.0 with access tokens
Chrome/Selenium → HTTP API client
Terms violation → Fully compliant API usage
⚠️ Important Limitations:
Profile access: Only your own authenticated profile (not public profiles)
Company access: Only companies you manage or have admin access to
Job access: Only job postings from your companies
No public search: Cannot search arbitrary profiles/companies/jobs
🎯 New Capabilities:
OAuth 2.0 authentication flow
Compliant LinkedIn API usage
Enterprise-ready architecture
Stable API contract (no breaking changes from UI updates)
Related MCP server: LinkedIn MCP Server
🚀 Quick Start with Official API
1. Prerequisites
LinkedIn Developer Account
LinkedIn Developer Application with OAuth credentials
2. Setup LinkedIn Developer App
# See detailed setup guide
cat LINKEDIN_PERMISSIONS_SETUP.md3. Configure OAuth Credentials
export LINKEDIN_CLIENT_ID="your_client_id"
export LINKEDIN_CLIENT_SECRET="your_client_secret"
export LINKEDIN_REDIRECT_URI="http://localhost:8000/auth/callback"
# Optional: Direct access token for testing
export LINKEDIN_ACCESS_TOKEN="your_access_token"4. Install and Run
# Install dependencies
pip install linkedin-api-client fastmcp keyring python-dotenv
# Run the server
python -m linkedin_mcp_server5. OAuth Authentication Flow
Use
get_oauth_authorization_urltool to get authorization URLDirect user to authorization URL for consent
Get authorization code from callback
Use
exchange_oauth_codeto get access tokenUse API with authenticated access token
Installation Methods
https://github.com/user-attachments/assets/eb84419a-6eaf-47bd-ac52-37bc59c83680
Usage Examples (Official API)
Help me set up OAuth authentication with LinkedInGet my LinkedIn profile informationWhat companies do I have admin access to on LinkedIn?Show me job postings from companies I manageWhat are the limitations of the official LinkedIn API?Features & Tool Status (Official LinkedIn API)
OAuth Authentication (
get_oauth_authorization_url,exchange_oauth_code): Complete OAuth 2.0 flow for secure API accessProfile Access (
get_current_user_profile): Get authenticated user's LinkedIn profile informationToken Management (
get_token_info,refresh_access_token): Manage and refresh access tokensCompany Management (
search_companies,get_managed_companies): Access companies you manageJob Management (
search_job_postings,create_job_posting): Manage job postings for your companiesAPI Information (
get_api_migration_info): Learn about API capabilities and limitations
API Limitations: The official LinkedIn API has significant restrictions compared to web scraping:
Profile access: Only your own authenticated profile
Company access: Only companies you manage or have admin permissions for
Job access: Only job postings from companies you manage
No public search: Cannot access arbitrary public profiles, companies, or job listings
These limitations are imposed by LinkedIn's official API and ensure compliance with their Terms of Service.
☁️ Azure Functions Deployment (Recommended - Cloud)
Prerequisites: Azure CLI and Azure Functions Core Tools installed.
Quick Deployment
Run the automated deployment script:
# Make the script executable
chmod +x azure-deploy.sh
# Run deployment (will prompt for configuration)
./azure-deploy.shThe script will:
Create Azure resource group
Set up Function App with consumption plan
Deploy the LinkedIn MCP Server
Configure environment variables
Provide access URLs
Manual Deployment
1. Login to Azure:
az login2. Create resources:
# Create resource group
az group create --name linkedin-mcp-rg --location "East US"
# Create storage account
az storage account create --name linkedinmcpstorage --location "East US" --resource-group linkedin-mcp-rg --sku Standard_LRS
# Create function app
az functionapp create --resource-group linkedin-mcp-rg --consumption-plan-location "East US" --runtime python --runtime-version 3.11 --functions-version 4 --name linkedin-mcp-server --storage-account linkedinmcpstorage3. Deploy and configure:
# Deploy the function
func azure functionapp publish linkedin-mcp-server
# Set LinkedIn cookie
az functionapp config appsettings set --name linkedin-mcp-server --resource-group linkedin-mcp-rg --settings LINKEDIN_COOKIE="your_linkedin_cookie_here"Getting the LinkedIn Cookie
Open LinkedIn and login
Open Chrome DevTools (F12 or right-click → Inspect)
Go to Application > Storage > Cookies > https://www.linkedin.com
Find the cookie named
li_atCopy the Value field (this is your LinkedIn session cookie)
Use this value as your
LINKEDIN_COOKIEin the Azure Function settings
Usage
Once deployed, your LinkedIn MCP Server will be available at:
Health Check:
https://your-function-app.azurewebsites.net/api/healthMCP Endpoint:
https://your-function-app.azurewebsites.net/api/mcp
Client Configuration for Azure Functions:
{
"mcpServers": {
"linkedin": {
"command": "curl",
"args": [
"-X", "POST",
"https://your-function-app.azurewebsites.net/api/mcp",
"-H", "Content-Type: application/json",
"-d", "@-"
]
}
}
}Azure Functions Benefits
Serverless: No server management required
Auto-scaling: Automatically scales based on demand
Pay-per-use: Only pay for actual executions
High availability: Built-in redundancy and failover
Integrated monitoring: Azure Application Insights included
Secure: Function-level authentication and Azure security
Cost Estimation
Azure Functions consumption plan pricing:
Free tier: 1 million requests and 400,000 GB-seconds per month
Beyond free tier: $0.20 per million executions + $0.000016/GB-second
Typical cost: $5-20/month for moderate usage (100-500 LinkedIn operations/day)
The cookie will expire after 30 days. Update theLINKEDIN_COOKIE environment variable in Azure when needed.
Environment Variables:
LINKEDIN_COOKIE- LinkedIn session cookie (required)LINKEDIN_MCP_LOG_LEVEL- Logging level (DEBUG, INFO, WARNING, ERROR)LINKEDIN_MCP_HEADLESS- Run browser in headless mode (default: 1)LINKEDIN_MCP_LAZY_INIT- Initialize browser on first request (default: 1)
Monitoring:
# View live logs
az functionapp logs tail --name linkedin-mcp-server --resource-group linkedin-mcp-rg
# Enable Application Insights for detailed monitoring
az monitor app-insights component create --app linkedin-mcp-server --location "East US" --resource-group linkedin-mcp-rgCommon Issues:
Function timeout: Default timeout is 5 minutes. Browser initialization takes 10-30 seconds on cold start.
Memory limits: Chrome requires significant memory. Consider Premium plan for heavy usage.
LinkedIn blocking: Use valid cookies and avoid excessive requests.
Debug locally:
# Install Azure Functions Core Tools
npm install -g azure-functions-core-tools@4 --unsafe-perm true
# Run locally
func start
# Test locally
curl http://localhost:7071/api/health📦 Claude Desktop (DXT Extension)
Prerequisites: Claude Desktop installed
One-click installation for Claude Desktop users:
Download the DXT extension
Double-click to install into Claude Desktop
Set your LinkedIn cookie in the extension settings
The DXT extension now uses the uvx installation method internally instead of Docker for better compatibility and performance.
Getting the LinkedIn Cookie
Open LinkedIn and login
Open Chrome DevTools (F12 or right-click → Inspect)
Go to Application > Storage > Cookies > https://www.linkedin.com
Find the cookie named
li_atCopy the Value field (this is your LinkedIn session cookie)
Use this value as your
LINKEDIN_COOKIEin the configuration
The cookie will expire during the next 30 days. Just get the new cookie and update your client config. There are also many cookie manager extensions that you can use to quickly copy the cookie.
DXT Extension Setup Help
Installation issues:
Ensure you have Claude Desktop installed
Download the latest DXT extension from releases
Login issues:
Ensure your LinkedIn cookie is set and correct
Make sure you have only one active LinkedIn session per cookie at a time. Trying to open multiple sessions with the same cookie will result in a cookie invalid error.
LinkedIn may require a login confirmation in the LinkedIn mobile app
You might get a captcha challenge if you logged in a lot of times in a short period of time, then try again later or follow the local setup instructions to run the server manually in --no-headless mode where you can debug the login process (solve captcha manually)
🚀 uvx Setup (Quick Install - Universal)
Prerequisites: Make sure you have uv installed.
Installation
Run directly from GitHub without cloning:
# Run directly from GitHub (latest version)
uvx --from git+https://github.com/stickerdaniel/linkedin-mcp-server linkedin-mcp-server --help
# Run with your LinkedIn cookie
uvx --from git+https://github.com/stickerdaniel/linkedin-mcp-server linkedin-mcp-server --cookie "li_at=YOUR_COOKIE_VALUE"Getting the LinkedIn Cookie
Open LinkedIn and login
Open Chrome DevTools (F12 or right-click → Inspect)
Go to Application > Storage > Cookies > https://www.linkedin.com
Find the cookie named
li_atCopy the Value field (this is your LinkedIn session cookie)
Use this value as your
LINKEDIN_COOKIEin the configuration
Run the server with the --get-cookie flag:
uvx --from git+https://github.com/stickerdaniel/linkedin-mcp-server \
linkedin-mcp-server --get-cookieCopy the cookie from the output and set it as LINKEDIN_COOKIE in your client configuration. If this fails with a captcha challenge, use the Chrome DevTools method above.
The cookie will expire during the next 30 days. Just get the new cookie and update your client config. There are also many cookie manager extensions that you can use to quickly copy the cookie.
uvx Setup Help
Client Configuration:
{
"mcpServers": {
"linkedin": {
"command": "uvx",
"args": [
"--from",
"git+https://github.com/stickerdaniel/linkedin-mcp-server",
"linkedin-mcp-server"
],
"env": {
"LINKEDIN_COOKIE": "li_at=YOUR_COOKIE_VALUE"
}
}
}
}Transport Modes:
Default (stdio): Standard communication for local MCP servers
Streamable HTTP: For web-based MCP server
CLI Options:
--log-level {DEBUG,INFO,WARNING,ERROR}- Set logging level (default: WARNING)--no-lazy-init- Login to LinkedIn immediately instead of waiting for the first tool call--transport {stdio,streamable-http}- Set transport mode--host HOST- HTTP server host (default: 127.0.0.1)--port PORT- HTTP server port (default: 8000)--path PATH- HTTP server path (default: /mcp)--get-cookie- Attempt to login with email and password and extract the LinkedIn cookie--cookie {cookie}- Pass a specific LinkedIn cookie for login--user-agent {user_agent}- Specify custom user agent string to prevent anti-scraping detection
Basic Usage Examples:
# Run with cookie from environment variable
LINKEDIN_COOKIE="YOUR_COOKIE_VALUE" uvx --from git+https://github.com/stickerdaniel/linkedin-mcp-server linkedin-mcp-server
# Run with cookie via flag
uvx --from git+https://github.com/stickerdaniel/linkedin-mcp-server linkedin-mcp-server --cookie "YOUR_COOKIE_VALUE"
# Run with debug logging
uvx --from git+https://github.com/stickerdaniel/linkedin-mcp-server linkedin-mcp-server --log-level DEBUG
# Extract cookie with credentials
uvx --from git+https://github.com/stickerdaniel/linkedin-mcp-server linkedin-mcp-server --get-cookieHTTP Mode Example (for web-based MCP clients):
uvx --from git+https://github.com/stickerdaniel/linkedin-mcp-server linkedin-mcp-server \
--transport streamable-http --host 127.0.0.1 --port 8080 --path /mcpTest with mcp inspector:
Install and run mcp inspector
bunx @modelcontextprotocol/inspectorClick pre-filled token url to open the inspector in your browser
Select
Streamable HTTPasTransport TypeSet
URLtohttp://localhost:8080/mcpConnect
Test tools
Installation issues:
Ensure you have uv installed:
curl -LsSf https://astral.sh/uv/install.sh | shCheck uv version:
uv --version(should be 0.4.0 or higher)
Cookie issues:
Ensure your LinkedIn cookie is set and correct
Cookie can be passed via
--cookieflag orLINKEDIN_COOKIEenvironment variableMake sure you have only one active LinkedIn session per cookie at a time
Login issues:
LinkedIn may require a login confirmation in the LinkedIn mobile app for --get-cookie
You might get a captcha challenge if you logged in a lot of times in a short period
🐍 Local Setup (Develop & Contribute)
Prerequisites: Chrome browser and Git installed
ChromeDriver Setup:
Check Chrome version: Chrome → menu (⋮) → Help → About Google Chrome
Download matching ChromeDriver: Chrome for Testing
Make it accessible:
Place ChromeDriver in PATH (
/usr/local/binon macOS/Linux)Or set:
export CHROMEDRIVER_PATH=/path/to/chromedriverif no CHROMEDRIVER_PATH is set, the server will try to find it automatically by checking common locations
Installation
# 1. Clone repository
git clone https://github.com/stickerdaniel/linkedin-mcp-server
cd linkedin-mcp-server
# 2. Install UV package manager
curl -LsSf https://astral.sh/uv/install.sh | sh
uv python # install python if you don't have it
# 3. Install dependencies and dev dependencies
uv sync
uv sync --group dev
# 4. Install pre-commit hooks
uv run pre-commit install
# 5. Start the server once manually
# You will be prompted to enter your LinkedIn credentials, and they will be securely stored in your OS keychain
# Once logged in, your cookie will be stored in your OS keychain and used for subsequent runs until it expires
uv run -m linkedin_mcp_server --no-headless --no-lazy-initLocal Setup Help
CLI Options:
--no-headless- Show browser window (debugging)--log-level {DEBUG,INFO,WARNING,ERROR}- Set logging level (default: WARNING)--no-lazy-init- Login to LinkedIn immediately instead of waiting for the first tool call--get-cookie- Login with email and password and extract the LinkedIn cookie--clear-keychain- Clear all stored LinkedIn credentials and cookies from system keychain--cookie {cookie}- Pass a specific LinkedIn cookie for login--user-agent {user_agent}- Specify custom user agent string to prevent anti-scraping detection--transport {stdio,streamable-http}- Set transport mode--host HOST- HTTP server host (default: 127.0.0.1)--port PORT- HTTP server port (default: 8000)--path PATH- HTTP server path (default: /mcp)--help- Show help
HTTP Mode Example (for web-based MCP clients):
uv run -m linkedin_mcp_server --transport streamable-http --host 127.0.0.1 --port 8000 --path /mcpClaude Desktop:
{
"mcpServers": {
"linkedin": {
"command": "uv",
"args": ["--directory", "/path/to/linkedin-mcp-server", "run", "-m", "linkedin_mcp_server"]
}
}
}Login/Scraping issues:
Use
--no-headlessto see browser actions (captcha challenge, LinkedIn mobile app 2fa, ...)Add
--no-lazy-initto attempt to login to LinkedIn immediately instead of waiting for the first tool callAdd
--log-level DEBUGto see more detailed loggingMake sure you have only one active LinkedIn session per cookie at a time. Trying to open multiple sessions with the same cookie will result in a cookie invalid error. E.g. if you have a logged in browser session with a docker container, you can't use the same cookie to login with the local setup while the docker container is running / session is not closed.
ChromeDriver issues:
Ensure Chrome and ChromeDriver versions match
Check ChromeDriver is in PATH or set
CHROMEDRIVER_PATHin your env
Python issues:
Check Python version:
uv python --version(should be 3.12+)Reinstall dependencies:
uv sync --reinstall
Feel free to open an issue or PR!
Acknowledgements
Built with LinkedIn Scraper by @joeyism and FastMCP.
⚠️ Use in accordance with LinkedIn's Terms of Service. Web scraping may violate LinkedIn's terms. This tool is for personal use only.
Star History
License
This project is licensed under the Apache 2.0 license.
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- AlicenseAqualityBmaintenanceEnables AI assistants to interact with LinkedIn by scraping profiles, companies, job postings, and getting personalized job recommendations using authenticated browser automation.Last updated172,992Apache 2.0
- Alicense-qualityCmaintenanceEnables AI agents to interact with LinkedIn for posting, commenting, liking, and managing connections via OAuth2 authentication.Last updated27MIT
- FlicenseAqualityCmaintenanceEnables LLMs and agents to interact with LinkedIn's REST API for managing profiles, creating posts, viewing connections, and overseeing organizations.Last updated52
- AlicenseBqualityCmaintenanceEnables AI agents to manage LinkedIn profiles, posts, connections, skills, education, and certifications through the LinkedIn API.Last updated1816955MIT
Related MCP Connectors
Give AI agents the LinkedIn tools to find, qualify, engage, and follow up with prospects.
Let AI tools securely access your LinkedIn network and DMs
Managed LinkedIn MCP server for AI agents: search, connect, message and enrich on accounts you own.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/ASISaga/linkedin.asisaga.com'
If you have feedback or need assistance with the MCP directory API, please join our Discord server