Skip to main content
Glama
EgiStr

linkedin-mcp

by EgiStr

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
LINKEDIN_CLIENT_IDNoLinkedIn OAuth client ID for PKCE login flow
LINKEDIN_ACCESS_TOKENNoYour LinkedIn access token (requires appropriate scopes)
LINKEDIN_CLIENT_SECRETNoLinkedIn 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

CapabilityDetails
tools
{
  "listChanged": true
}

Tools

Functions exposed to the LLM to take actions

NameDescription
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:

  • LINKEDIN_CLIENT_ID environment variable set

  • LINKEDIN_CLIENT_SECRET environment variable set

  • A LinkedIn Developer App with "Sign In with LinkedIn using OpenID Connect" and "Share on LinkedIn" products configured

Args:

  • port (number, 1024-65535): Localhost port for the OAuth callback (default: 8080)

  • open_browser (boolean): Auto-open browser (default: true). Set false for headless.

  • timeout (number, 30000-600000): Max wait for callback in ms (default: 120000)

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:

  • response_format ('markdown' | 'json'): Output format (default: 'markdown')

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:

  • sub (unique member ID for your app)

  • name, given_name, family_name

  • email (if "email" scope is granted)

  • picture

  • locale

Unlike getMyProfile, this always works even with minimal scopes.

Args:

  • response_format ('markdown' | 'json'): Output format (default: 'markdown')

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:

  • text (string, required): Post content (1-3000 chars)

  • visibility ("PUBLIC" | "CONNECTIONS" | "LOGGED_IN"): Who can see the post (default: "PUBLIC")

  • response_format ('markdown' | 'json'): Output format (default: 'markdown')

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:

  • member_id (string, optional): LinkedIn member ID (sub) to fetch posts for

  • start (number): Start index for pagination (default: 0)

  • count (number): Number of posts to return, max 50 (default: 10)

  • response_format ('markdown' | 'json'): Output format (default: 'markdown')

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:

  • post_id (string, required): Post ID or URN (e.g., 'post-123' or 'urn:li:share:post-123')

  • response_format ('markdown' | 'json'): Output format (default: 'markdown')

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:

  • start (number): Start index for pagination (default: 0)

  • count (number): Number of items to return, max 50 (default: 10)

  • response_format ('markdown' | 'json'): Output format (default: 'markdown')

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:

  • start (number): Start index for pagination (default: 0)

  • count (number): Number of connections to return, max 50 (default: 10)

  • response_format ('markdown' | 'json'): Output format (default: 'markdown')

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:

  • recipient_id (string, required): LinkedIn member ID of the recipient

  • text (string, required): Message text (1-2000 chars)

  • response_format ('markdown' | 'json'): Output format (default: 'markdown')

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:

  • keywords (string, required): Search keywords (name, title, company, etc.)

  • start (number): Start index for pagination (default: 0)

  • count (number): Number of results (max 50, default: 10)

  • response_format ('markdown' | 'json'): Output format (default: 'markdown')

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

No resources

Latest Blog Posts

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/EgiStr/linkedin-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server