linkedin-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| LINKEDIN_CLIENT_ID | No | LinkedIn OAuth client ID for PKCE login flow | |
| LINKEDIN_ACCESS_TOKEN | No | Your LinkedIn access token (requires appropriate scopes) | |
| LINKEDIN_CLIENT_SECRET | No | LinkedIn OAuth client secret for PKCE login flow |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| linkedin_oauth_loginA | Authenticate with LinkedIn using OAuth PKCE flow. Opens your browser to LinkedIn's authorization page, captures the callback, exchanges the authorization code for an access token, and saves it to the config file for future use. This is the recommended way to authenticate. Once complete, all other tools can use the saved token automatically. Prerequisites:
Args:
Returns: Confirmation message with token expiry and granted scopes. |
| linkedin_get_my_profileA | Get the authenticated user's LinkedIn profile information. Returns your full profile details including name, headline, vanity URL, profile picture, email, and locale. Combines both the OpenID Connect userinfo endpoint and the LinkedIn profile API. Args:
Returns (JSON format): { "id": string, // LinkedIn member ID "firstName": string, // First name "lastName": string, // Last name "fullName": string, // Full display name "headline": string, // Professional headline "vanityName": string, // Custom URL identifier "profileUrl": string, // Full LinkedIn URL "email": string, // Email address (if available) "pictureUrl": string, // Profile picture URL "locale": string // Locale setting } Requires scope: openid + r_liteprofile (or r_basicprofile) |
| linkedin_get_user_infoA | Get basic user identity information via OpenID Connect. This works with the minimal "openid" scope and returns:
Unlike getMyProfile, this always works even with minimal scopes. Args:
Returns (JSON format): { "sub": string, // Unique member ID "name": string, // Full name "givenName": string, // First name "familyName": string, // Last name "email": string, // Email address "emailVerified": boolean // Whether email is verified "picture": string, // Profile picture URL "locale": string // Locale } Requires scope: openid (always available with Sign In with LinkedIn) |
| linkedin_create_postA | Create and publish a new LinkedIn post. Publishes a text post to your LinkedIn feed. Supports PUBLIC, CONNECTIONS-only, or LOGGED_IN visibility settings. Args:
Returns (JSON format): { "postId": string, // Post ID "urn": string, // LinkedIn URN "text": string, // Text preview (first 100 chars) "visibility": string, // Visibility setting used "status": string, // Always "PUBLISHED" "url": string // Direct link to the post } Requires scope: w_member_social (Share on LinkedIn product) |
| linkedin_list_postsA | List LinkedIn posts for a member. Returns posts published by the specified member (or the authenticated user by default). Posts are returned newest-first with pagination support. Args:
Returns (JSON format): { "total": number, // Total posts available "count": number, // Posts in this response "start": number, // Current offset "has_more": boolean, // Whether more pages exist "next_offset": number, // Offset for next page "posts": [{ "id": string, // Post ID "text": string, // Post commentary/text "author": string, // Author URN "created": string, // Human-readable date "created_timestamp": number, // Unix timestamp ms "visibility": string,// Visibility setting "url": string // Direct link }] } Requires scope: r_member_social or r_organization_social |
| linkedin_delete_postA | Permanently delete a LinkedIn post by its ID or URN. ⚠️ DESTRUCTIVE — This action cannot be undone. Args:
Returns (JSON format): { "postId": string, // The ID that was deleted "status": "DELETED", // Always "DELETED" "note": string // Warning about permanence } Requires scope: w_member_social |
| linkedin_get_feedA | Get recent activity from the authenticated user's LinkedIn feed. Returns recent posts and activities from your network. Args:
Returns (JSON format): { "total": number, "count": number, "start": number, "has_more": boolean, "items": [{ "id": string, // Activity URN "actor": string, // Actor URN "time": string, // Human-readable timestamp "timestamp": number,// Unix timestamp ms "content": string // Content preview }] } Note: LinkedIn's public API has limited feed access. |
| linkedin_get_connectionsA | Get the authenticated user's LinkedIn connections. Lists your 1st-degree connections with pagination support. Args:
Returns (JSON format): { "total": number, "count": number, "start": number, "has_more": boolean, "connections": [{ "id": string, // Member ID "name": string, // Display name "profileUrl": string // LinkedIn profile URL }] } ⚠️ NOTE: Connections API requires LinkedIn Partner Program access. Standard OAuth apps will receive an error message explaining the limitation. |
| linkedin_send_messageA | Send a direct message to a LinkedIn member. ⚠️ NOTE: This tool is NOT available with standard OAuth apps. Direct messaging requires LinkedIn's Messaging API (partner program). This tool returns a clear error message explaining the limitation. Args:
|
| linkedin_search_peopleA | Search for LinkedIn members by keywords. ⚠️ NOTE: This tool is NOT available with standard OAuth apps. People search requires LinkedIn Sales Navigator API or a third-party provider. This tool returns a clear error message explaining the limitation. Args:
|
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 10 tools
Most tools clearly target distinct actions and resources, but linkedin_get_my_profile and linkedin_get_user_info overlap in profile identity purposes, and linkedin_list_posts vs linkedin_get_feed could be confused as both return content. The unavailable tools are clearly labeled with limitation messages, which reduces ambiguity.
All tools follow a consistent linkedin_verb_noun pattern with snake_case throughout, e.g., create_post, list_posts, delete_post, get_feed. The oauth_login tool fits the same pattern and does not introduce stylistic inconsistency.
Ten tools is a reasonable size for a LinkedIn MCP server and the scope is understandable. However, three tools (send_message, get_connections, search_people) are non-functional placeholders for standard OAuth users, slightly reducing the effective surface.
The server covers authentication, profile retrieval, post creation, listing, and deletion, but lacks post updating, comments, reactions, and other common LinkedIn interactions. Several advertised tools are unavailable without partner access, leaving notable gaps in messaging, connections, and search.