unipile-linkedin-mcp
Click on "Deploy 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., "@unipile-linkedin-mcp Find me CTOs at startups using Sales Navigator"
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.
Unipile LinkedIn MCP Server
A fully-featured Model Context Protocol (MCP) server for the Unipile LinkedIn API. Enables AI assistants to interact with LinkedIn for search, messaging, connections, and Sales Navigator features.
Features
LinkedIn Search - People, companies, and posts search with Classic and Sales Navigator filters
Profile Management - View profiles, company pages, and your own profile
Connections - Send/accept/decline invitations, list connections
Messaging - List chats, send messages, start conversations
InMail - Send InMail to non-connections (Premium/Sales Navigator)
Sales Navigator - Advanced filters like tenure, seniority, company headcount
Related MCP server: MCP LinkedIn Sales Navigator
Installation
Using uvx (recommended)
uvx unipile-linkedin-mcpUsing pip
pip install unipile-linkedin-mcpConfiguration
Environment Variables
Set these environment variables before running:
export UNIPILE_API_KEY="your-api-key"
export UNIPILE_BASE_URL="https://api13.unipile.com:14376/api/v1"
export UNIPILE_ACCOUNT_ID="your-account-id"Or create a .env file in your working directory.
Claude Desktop Configuration
Add to your Claude Desktop config (~/Library/Application Support/Claude/claude_desktop_config.json on macOS):
{
"mcpServers": {
"unipile-linkedin": {
"command": "uvx",
"args": ["unipile-linkedin-mcp"],
"env": {
"UNIPILE_API_KEY": "your-api-key",
"UNIPILE_BASE_URL": "https://api13.unipile.com:14376/api/v1",
"UNIPILE_ACCOUNT_ID": "your-account-id"
}
}
}
}Available Tools (22 total)
Search
Tool | Description |
| Search people with Classic LinkedIn filters |
| Search with Sales Navigator advanced filters |
| Search for companies |
| Search LinkedIn posts/content |
| Get valid filter IDs (locations, industries, etc.) |
Profiles
Tool | Description |
| List all connected LinkedIn accounts |
| Get authenticated user's profile |
| Get any user's full profile |
| Get company page details |
Connections
Tool | Description |
| Send connection request (max 300 char message) |
| View pending outbound invites |
| View inbound connection requests |
| Accept a connection request |
| Decline a connection request |
| Withdraw a sent invitation |
| List 1st degree connections |
Messaging
Tool | Description |
| List message conversations |
| Get messages from a chat |
| Send message in existing chat |
| Start new conversation with connections |
InMail (Premium)
Tool | Description |
| Send InMail to non-connections |
| Check remaining InMail credits |
Usage Examples
Search for People
# Classic LinkedIn search
search_people(keywords="software engineer", location=["103644278"], limit=10)
# Sales Navigator search with advanced filters
search_people_sales_nav(
keywords="CTO",
company_headcount=[{"min": 51, "max": 200}],
changed_jobs=True,
seniority_level=["Director", "VP"]
)Get Search Parameter IDs
# Find location IDs
get_search_params(param_type="LOCATION", query="San Francisco")
# Find industry IDs
get_search_params(param_type="INDUSTRY", query="Software")Send a Connection Request
send_invitation(
provider_id="ACoAAB...",
message="Hi! I'd love to connect."
)Start a Conversation
# With 1st degree connection
start_chat(
attendees_ids=["ACoAAB..."],
text="Hello! Great connecting with you."
)
# InMail to non-connection (requires credits)
send_inmail(
attendees_ids=["ACoAAB..."],
subject="Quick question",
text="Hi, I noticed your work at..."
)Getting Unipile Credentials
Sign up at Unipile
Connect your LinkedIn account
Get your API key and account ID from the dashboard
Note your base URL (varies by region)
Rate Limits
Unipile recommends these daily limits:
Profile views: 80-100/day (Classic), 150/day (Sales Nav)
Invitations: 80-100/day (paid), 15/week (free)
Messages: 100-150/day
License
MIT License - see LICENSE for details.
Contributing
Contributions welcome! Please open an issue or PR on GitHub.
Available Tools
22 toolsaccept_invitationA
Accept a received connection request.
Args: invitation_id: The ID of the invitation to accept (from list_invitations_received)
Returns: Confirmation of acceptance
Inputs: invitation_id (required).
cancel_invitationA
Withdraw a sent connection request that hasn't been accepted yet.
Args: invitation_id: The ID of the sent invitation to cancel (from list_invitations_sent)
Returns: Confirmation of cancellation
Inputs: invitation_id (required).
decline_invitationA
Decline a received connection request.
Args: invitation_id: The ID of the invitation to decline (from list_invitations_received)
Returns: Confirmation of decline
Inputs: invitation_id (required).
get_chat_messagesA
Get messages from a specific chat conversation.
Args: chat_id: The chat/conversation ID (from list_chats) limit: Max messages per page (default 50) cursor: Pagination cursor from previous response
Returns: List of messages in the chat with sender info and timestamps
Inputs: chat_id (required), limit, cursor.
get_company_profileA
Get a company's LinkedIn profile/page details.
Args: company_id: The LinkedIn company ID or vanity URL name
Returns: Company profile data including description, industry, size, specialties, etc.
Inputs: company_id (required).
get_inmail_creditsA
Check remaining InMail credits for the connected LinkedIn account.
InMail credits are used when messaging non-connections. Premium users get a monthly allocation that varies by subscription tier.
Returns: Current InMail credit balance and any additional quota info
Inputs: no named parameters.
get_my_profileA
Get the authenticated user's full LinkedIn profile.
Returns comprehensive profile data including name, headline, summary, experience, education, skills, and more for the currently connected account.
Inputs: no named parameters.
get_profileA
Get a LinkedIn user's full profile by their provider ID.
Args: provider_id: The LinkedIn provider ID (from search results or profile URL) sections: Optional list of sections to include. Available sections: - about - experience - education - skills - certifications - languages - volunteering_experience - projects - recommendations_received - recommendations_given If not specified, returns all available sections.
Returns: Full profile data including requested sections
Inputs: provider_id (required), sections.
get_search_paramsA
Get valid parameter IDs for search filters.
LinkedIn search filters require specific IDs (not names). Use this tool to look up the IDs for locations, industries, companies, etc.
Args: param_type: Parameter type (case-insensitive) - one of: Common parameters: - "LOCATION" - Geographic locations - "INDUSTRY" - Industry categories - "COMPANY" - Companies - "SCHOOL" - Educational institutions - "PEOPLE" - People - "CONNECTIONS" - Connections - "SERVICE" - Services - "JOB_FUNCTION" - Job functions - "JOB_TITLE" - Job titles - "EMPLOYMENT_TYPE" - Employment types - "SKILL" - Skills
Sales Navigator specific:
- "REGION" - Regions
- "DEPARTMENT" - Departments
- "PERSONA" - Personas
query: Optional search string to filter results (e.g., "San Francisco")Returns: List of valid parameter IDs and names for the specified type
Inputs: param_type (required), query.
list_accountsA
List all connected LinkedIn accounts.
Returns information about all accounts linked to your Unipile integration, including account IDs, status, and provider information.
Inputs: no named parameters.
list_chatsA
List LinkedIn message conversations.
Args: limit: Max results per page (default 50) cursor: Pagination cursor from previous response unread_only: If True, only return chats with unread messages
Returns: List of chat conversations with latest message preview
Inputs: limit, cursor, unread_only.
list_invitations_receivedA
List inbound connection requests awaiting response.
Args: limit: Max results per page (default 50) cursor: Pagination cursor from previous response
Returns: List of pending received invitations with sender details
Inputs: limit, cursor.
list_invitations_sentA
List pending outbound connection requests.
Args: limit: Max results per page (default 50) cursor: Pagination cursor from previous response
Returns: List of pending sent invitations with recipient details
Inputs: limit, cursor.
list_relationsA
List your 1st degree connections on LinkedIn.
Args: limit: Max results per page (default 50) cursor: Pagination cursor from previous response
Returns: List of connections with profile summaries
Inputs: limit, cursor.
search_companiesA
Search for companies on LinkedIn.
Use get_search_params() to find valid IDs for industry and location filters.
Args: keywords: Company name or description keywords industry: List of industry IDs location: List of location IDs (headquarters) headcount_min: Minimum employee count headcount_max: Maximum employee count has_job_offers: True to find companies currently hiring limit: Max results per page (1-50, default 25) cursor: Pagination cursor from previous response
Returns: Search results with company profiles and pagination cursor
Inputs: keywords, industry, location, headcount_min, +4 more.
search_peopleA
Search for people on LinkedIn using Classic LinkedIn filters.
This is the standard LinkedIn search available to all users. Use get_search_params() to find valid IDs for location, industry, and company filters.
Args: keywords: Free text search (name, title, company, etc.) location: List of location IDs (use get_search_params to find IDs) industry: List of industry IDs company: List of current company IDs past_company: List of past company IDs network_distance: Connection degree [1, 2, 3] - 1=1st degree, 2=2nd degree, 3=3rd+ profile_language: ISO language codes (e.g., ["en", "fr"]) limit: Max results per page (1-50, default 25) cursor: Pagination cursor from previous response
Returns: Search results with profiles and pagination cursor
Inputs: keywords, location, industry, company, +5 more.
search_postsA
Search for LinkedIn posts/content.
Args: keywords: Content keywords to search for (required) sort_by: "relevance" or "date" (default: relevance) date_posted: "past_day", "past_week", or "past_month" content_type: "videos", "images", or "documents" limit: Max results per page (1-50, default 25) cursor: Pagination cursor from previous response
Returns: Search results with posts and pagination cursor
Inputs: keywords (required), sort_by, date_posted, content_type, +2 more.
send_inmailA
Send an InMail message to non-connections (requires LinkedIn Premium or Sales Navigator).
InMail allows you to message 2nd and 3rd degree connections without connecting first. Uses InMail credits - check get_inmail_credits() first.
Args: attendees_ids: List of LinkedIn provider IDs to message subject: InMail subject line (required for InMail) text: The message body content
Returns: Confirmation with sent InMail details
Inputs: attendees_ids (required), subject (required), text (required).
send_invitationA
Send a connection request to a LinkedIn user.
Note: LinkedIn limits invitation messages to 300 characters. Daily limits apply: ~80-100/day for paid accounts, ~15/week for free.
Args: provider_id: The LinkedIn provider ID of the person to connect with message: Optional personalized message (max 300 characters)
Returns: Confirmation of invitation sent or error
Inputs: provider_id (required), message.
send_messageA
Send a message in an existing chat conversation.
Use this for ongoing conversations with existing connections. For new conversations, use start_chat instead.
Args: chat_id: The chat/conversation ID (from list_chats) text: The message content to send
Returns: Confirmation with sent message details
Inputs: chat_id (required), text (required).
start_chatA
Start a new conversation with one or more LinkedIn users.
Use this to initiate messaging with 1st degree connections. For non-connections (2nd/3rd degree), use send_inmail instead.
Args: attendees_ids: List of LinkedIn provider IDs to message text: The initial message content
Returns: New chat details including chat_id for follow-up messages
Inputs: attendees_ids (required), text (required).
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 22 tools
Most tools have distinct purposes, but there is some overlap between start_chat, send_inmail, and send_message which could cause confusion. The descriptions help differentiate them, but the boundaries between initiating a chat vs sending an InMail vs sending a message in an existing chat are not immediately clear. Similarly, search_people and search_people_sales_nav are similar but separate. Overall, good disambiguation with minor issues.
All tool names follow a consistent verb_noun pattern in snake_case. Names clearly indicate the action and target resource (e.g., get_profile, send_invitation, search_companies). There are no mixed conventions or ambiguous naming styles.
With 22 tools, the set is comprehensive but slightly high. However, each tool serves a distinct function covering multiple areas (profiles, search, messaging, invitations, accounts). The count is appropriate for the broad scope of LinkedIn automation, though it could be trimmed slightly.
The tool set covers core LinkedIn workflows: profile retrieval, searching (people, companies, posts), messaging (chats, InMail, invitations), and account management. Missing features like profile updates, message deletion, or advanced filtering are minor gaps. Overall, it's sufficiently complete for common use cases.
Maintenance
Related MCP Connectors
LinkedIn for AI agents: inbox, invitations, Sales Navigator search, posts, jobs, quotas, webhooks.
Give AI agents the LinkedIn tools to find, qualify, engage, and follow up with prospects.
LinkedIn jobs, companies and people for AI agents, plus messages and invites via your own account.
LinkedIn for AI agents: search people, read profiles, posts and connections via a connected account
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.174,163Apache 2.0
- AlicenseAqualityBmaintenanceEnables AI assistants to search leads, view profiles, manage lists, send InMails, and export data from LinkedIn Sales Navigator through browser automation.87 npm15MIT
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to connect to LinkedIn, accessing profiles and companies, searching for jobs and people, managing saved jobs, updating job-search profile settings, and inspecting analytics.1Apache 2.0
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to interact with LinkedIn using the official API for profile access, company management, and job postings.Apache 2.0