Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| LOG_LEVEL | No | Logging level (DEBUG, INFO, WARNING, ERROR) | INFO |
| DATABASE_URL | No | Database connection URL | sqlite+aiosqlite:///data/linkedin_mcp.db |
| LINKEDIN_API_ENABLED | No | Enable the LinkedIn API client | false |
| FEATURE_POST_SCHEDULING | No | Enable post scheduling | true |
| FEATURE_BROWSER_FALLBACK | No | Enable Playwright browser automation | true |
| FEATURE_ANALYTICS_TRACKING | No | Enable analytics features | true |
Capabilities
Features and capabilities supported by this server
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {
"tasks": {
"list": {},
"cancel": {},
"requests": {
"tools": {
"call": {}
},
"prompts": {
"get": {}
},
"resources": {
"read": {}
}
}
}
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| debug_context | Debug tool to check the internal state of the MCP server. Returns information about:
|
| get_my_profile | Get the authenticated user's LinkedIn profile. Returns profile data including:
Uses the Official LinkedIn API (OAuth 2.0) when available for reliable results. Falls back to unofficial API if official client is not configured. |
| get_profile | Get comprehensive LinkedIn profile data with multi-source enrichment. Uses the Profile Enrichment Engine to aggregate data from multiple endpoints in parallel, providing the most complete profile information available. Args: profile_id: LinkedIn public ID (e.g., "johndoe") or URN use_cache: Whether to use cached data if available (default: True) include_activity: Include recent activity/posts (default: True) include_network: Include network stats like connections/followers (default: True) include_badges: Include member badges like Premium status (default: True) Returns comprehensive profile data including:
|
| get_profile_contact_info | Get contact information for a LinkedIn profile. Args: profile_id: LinkedIn public ID Returns contact info including email, phone, websites, and social profiles. |
| get_profile_skills | Get skills and endorsements for a LinkedIn profile. Args: profile_id: LinkedIn public ID Returns skills categorized by endorsement count with top endorsers. |
| get_profile_interests | Get profile interests including influencers, companies, groups, and topics. This data is unique to the Professional Network Data API and provides insights into what/who a person follows on LinkedIn. Args: profile_id: LinkedIn public ID (e.g., "johndoe") Returns: Profile interests organized by category (influencers, companies, groups, topics) |
| get_similar_profiles | Get profiles similar to a given profile. Uses the Professional Network Data API to find similar profiles based on industry, role, skills, and other factors. Args: profile_id: LinkedIn public ID (e.g., "johndoe") limit: Maximum number of similar profiles to return (default: 10) Returns: List of similar profiles with relevance scoring |
| get_profile_articles | Get articles written by a LinkedIn profile. Uses the Professional Network Data API to fetch articles (long-form content) published by the specified profile. Args: profile_id: LinkedIn public ID (e.g., "johndoe") limit: Maximum number of articles to return (default: 20) Returns: List of articles with title, content preview, and engagement metrics |
| get_article | Get the full content of a LinkedIn article. Uses the Professional Network Data API to fetch the complete article content, author information, and engagement metrics. Args: article_url: Full URL of the LinkedIn article Returns: Article content with title, body, author info, and engagement data |
| get_company_by_domain | Get company information by website domain. Uses the Professional Network Data API to look up a company by its website domain (e.g., "anthropic.com" → Anthropic). Args: domain: Company website domain (e.g., "anthropic.com") Returns: Company information including name, industry, size, and LinkedIn URL |
| get_network_stats | Get statistics about the authenticated user's LinkedIn network. Returns network size, growth indicators, and connection insights. |
| batch_get_profiles | Get multiple LinkedIn profiles efficiently. Args: profile_ids: Comma-separated list of profile public IDs (max 10) Returns profiles with basic info and success/failure status for each. |
| get_cache_stats | Get cache statistics and performance metrics. Returns cache size, hit rate, and memory usage. |
| get_feed | Get the authenticated user's LinkedIn feed. Args: limit: Maximum number of feed items to return (default: 10, max: 50) use_cache: Whether to use cached data if available (default: True) Returns recent feed posts with engagement data. |
| get_profile_posts | Get posts from a specific LinkedIn profile. Args: profile_id: LinkedIn public ID or URN limit: Maximum number of posts to return (default: 10, max: 50) use_cache: Whether to use cached data if available (default: True) Returns posts with engagement metrics (likes, comments, shares). |
| create_post | Create a new LinkedIn post using the Official API (recommended) or unofficial API. Uses the Official LinkedIn API with w_member_social scope when available. This is the TOS-compliant method that requires enabling "Share on LinkedIn" product. Args: text: Post content (max 3000 characters) visibility: Post visibility - PUBLIC or CONNECTIONS Returns the created post details including post URN. |
| create_image_post | Create a LinkedIn post with an image using the Official API. Requires "Share on LinkedIn" product enabled in your LinkedIn Developer app. Args: text: Post text content (max 3000 characters) image_path: Image source - can be: - Absolute path to local file (JPG, PNG, GIF) - URL to image (http:// or https://) - Base64-encoded image (data:image/png;base64,...) alt_text: Accessibility text describing the image (recommended) visibility: Post visibility - PUBLIC or CONNECTIONS Returns the created post details including post URN and image URN. |
| create_video_post | Create a LinkedIn post with a video using the Official API. Requires "Share on LinkedIn" product enabled in your LinkedIn Developer app. LinkedIn supports video uploads up to 10 minutes for most users. Supported formats: MP4 (recommended), MOV Maximum file size: 200MB Recommended specs: 1080p, H.264 codec, AAC audio, 30fps Args: text: Post text content (max 3000 characters) video_path: Video source - can be: - Absolute path to local file (MP4, MOV) - URL to video (http:// or https://) title: Optional title for the video visibility: Post visibility - PUBLIC or CONNECTIONS Returns the created post details including post URN and video URN. Note: Video may take a few minutes to process before appearing in the feed. |
| create_document_post | Create a LinkedIn post with a document (PDF, PPTX, DOCX) using the Official API. Documents appear as carousel-style slideshows in the LinkedIn feed. Great for sharing presentations, guides, reports, etc. Requires "Share on LinkedIn" product enabled in your LinkedIn Developer app. Supported formats: PDF (recommended), PPTX, DOCX Maximum file size: 100MB Args: text: Post text content (max 3000 characters) document_path: Document source - can be: - Absolute path to local file (PDF, PPTX, DOCX) - URL to document (http:// or https://) title: Optional title for the document (defaults to filename) visibility: Post visibility - PUBLIC or CONNECTIONS Returns the created post details including post URN and document URN. |
| create_poll | Create a LinkedIn poll using the Official API. Requires "Share on LinkedIn" product enabled in your LinkedIn Developer app. Args: question: Poll question (also displayed as post text, max 140 characters) options: Comma-separated poll options (2-4 options, each max 140 characters) duration_days: Poll duration - 1, 3, 7, or 14 days (default: 7) visibility: Post visibility - PUBLIC or CONNECTIONS Returns the created poll post details. |
| delete_post | Delete a LinkedIn post using the Official API. Requires "Share on LinkedIn" product enabled in your LinkedIn Developer app. Args: post_urn: The URN of the post to delete (e.g., "urn:li:share:123456") Returns success status. |
| edit_post | Edit/update an existing LinkedIn post using the Official API. Requires "Share on LinkedIn" product enabled in your LinkedIn Developer app. Args: post_urn: The URN of the post to edit (e.g., "urn:li:share:123456") text: New text content for the post (optional, max 3000 characters) image_path: Path to new image file to replace existing media (optional) alt_text: Alt text for the new image (optional) Returns: Success status with updated fields information. Note: At least one of 'text' or 'image_path' must be provided. This uses LinkedIn's PARTIAL_UPDATE method to update only specified fields. |
| create_comment | Create a comment on a LinkedIn post using the Official API. Requires "Share on LinkedIn" product enabled in your LinkedIn Developer app. Args: post_urn: The URN of the post to comment on (e.g., "urn:li:share:123456" or "urn:li:activity:123456") text: The comment text content (max 1250 characters) parent_comment_urn: Optional URN of parent comment for nested replies image_path: Optional image source (only for nested replies) - can be: - Absolute path to local file (JPG, PNG, GIF) - URL to image (http:// or https://) - Base64-encoded image (data:image/png;base64,...) Returns the created comment details including comment ID. Note: LinkedIn only allows images in nested comments (replies to other comments), not in top-level comments directly on posts. Note: Commenting requires the "Community Management API" product from LinkedIn, which has a separate approval process. The "Share on LinkedIn" product only allows creating posts, not comments. If you receive a permission error, you'll need to apply for Community Management API access in your Developer Portal. |
| delete_comment | Delete a comment from a LinkedIn post using the Official API. Requires "Community Management API" product enabled in your LinkedIn Developer app. Args: post_urn: The URN of the post containing the comment (e.g., "urn:li:share:123456" or "urn:li:activity:123456") comment_id: The ID or URN of the comment to delete Returns success status. Note: You can only delete comments that you have authored. |
| get_comments_official | Get comments on a LinkedIn post using the Official API. Requires "Community Management API" product enabled in your LinkedIn Developer app. Args: post_urn: The URN of the post (e.g., "urn:li:share:123456" or "urn:li:ugcPost:123456") start: Pagination start index (default: 0) count: Number of comments to return (default: 50, max: 100) Returns list of comments with: - id: Comment ID - urn: Full comment URN (use this as parent_comment_urn to reply) - actor_urn: URN of the comment author - actor_name: Name of the comment author (if available) - text: Comment text content - parent_comment: URN of parent comment if this is a reply - created_at: Timestamp when comment was created Use the returned comment URN as parent_comment_urn in create_comment to reply to a comment. |
| create_reaction | Add a reaction to a LinkedIn post or comment using the Official API. Requires "Community Management API" product enabled in your LinkedIn Developer app. Args: target_urn: The URN of the post or comment to react to (e.g., "urn:li:share:123456", "urn:li:activity:123456", "urn:li:comment:(urn:li:activity:123,456)") reaction_type: Type of reaction to add. Options: - LIKE (👍 Like) - default - PRAISE or CELEBRATE (👏 Celebrate) - EMPATHY or LOVE (❤️ Love) - INTEREST or INSIGHTFUL (💡 Insightful) - APPRECIATION or SUPPORT (🙏 Support) - ENTERTAINMENT or FUNNY (😄 Funny) Returns the created reaction details. Note: The MAYBE reaction type is deprecated and no longer supported. |
| delete_reaction | Remove a reaction from a LinkedIn post or comment using the Official API. Requires "Community Management API" product enabled in your LinkedIn Developer app. Args: target_urn: The URN of the post or comment to remove reaction from (e.g., "urn:li:share:123456", "urn:li:activity:123456") Returns success status. Note: This removes your reaction from the specified content. |
| get_auth_status | Get LinkedIn authentication status for both official and unofficial APIs. Returns detailed status including:
|
| search_ads | Search for ads in the LinkedIn Ad Library. The Ad Library provides transparency into ads running on LinkedIn. At least one of keyword or advertiser must be provided. Requires "LinkedIn Ad Library" product enabled in your LinkedIn Developer app. Args: keyword: Search term to find in ad content advertiser: Company/advertiser name to search for country: ISO 3166-1 alpha-2 country code (e.g., "US", "GB", "DE") count: Number of results to return (default 25, max 100) Returns: List of ads matching the search criteria with details including: - Advertiser and payer information - Ad content (text, images, videos) - Impression data and targeting parameters |
| search_ads_by_advertiser | Search for all ads by a specific advertiser/company. Requires "LinkedIn Ad Library" product enabled in your LinkedIn Developer app. Args: advertiser_name: Name of the advertiser/company to search for country: Optional country filter (ISO 3166-1 alpha-2 code) count: Number of results to return (default 25, max 100) Returns: List of ads from the specified advertiser with full details. |
| search_ads_by_keyword | Search for ads containing a specific keyword. Requires "LinkedIn Ad Library" product enabled in your LinkedIn Developer app. Args: keyword: Search term to find in ad content country: Optional country filter (ISO 3166-1 alpha-2 code) count: Number of results to return (default 25, max 100) Returns: List of ads matching the keyword with full details. |
| analyze_draft_content | Analyze draft content and get suggestions for improvement. Args: content: Draft post content to analyze industry: Optional industry for targeted hashtag suggestions Returns content analysis with score, suggestions, and recommended hashtags. |
| create_draft | Create a content draft for later publishing. Args: content: Draft content title: Optional title for organization tags: Comma-separated tags for categorization Returns the created draft details. |
| list_drafts | List all content drafts. Args: tag: Optional tag to filter by Returns list of drafts sorted by last update. |
| get_draft | Get a specific draft by ID. Args: draft_id: ID of the draft Returns the draft details. |
| update_draft | Update a content draft. Args: draft_id: ID of the draft to update content: New content (optional) title: New title (optional) tags: New comma-separated tags (optional) Returns the updated draft. |
| delete_draft | Delete a content draft. Args: draft_id: ID of the draft to delete Returns success status. |
| publish_draft | Publish a draft as a LinkedIn post. Args: draft_id: ID of the draft to publish visibility: Post visibility - PUBLIC, CONNECTIONS, or LOGGED_IN Returns the published post details. |
| schedule_post | Schedule a post for future publishing. Args: content: Post content scheduled_time: ISO format datetime (e.g., "2024-12-25T10:00:00") visibility: Post visibility - PUBLIC, CONNECTIONS, or LOGGED_IN timezone: Timezone for the scheduled time (default: UTC) Returns the scheduled post details with job_id. |
| list_scheduled_posts | List all scheduled posts. Args: status: Filter by status (pending, published, failed, cancelled) Returns list of scheduled posts. |
| get_scheduled_post | Get a specific scheduled post. Args: job_id: ID of the scheduled post Returns the scheduled post details. |
| cancel_scheduled_post | Cancel a scheduled post. Args: job_id: ID of the scheduled post to cancel Returns success status. |
| update_scheduled_post | Update a scheduled post. Args: job_id: ID of the scheduled post content: New content (optional) scheduled_time: New ISO format datetime (optional) visibility: New visibility (optional) Returns the updated scheduled post. |
| get_post_reactions | Get reactions/likes on a specific post. Args: post_urn: LinkedIn post URN (e.g., "urn:li:activity:123456789") Returns list of users who reacted and reaction types. |
| get_post_comments | Get comments on a specific post. Args: post_urn: LinkedIn post URN limit: Maximum comments to return (default: 50) Returns list of comments with author info. |
| search_people | Search for people on LinkedIn. Args: keywords: General search keywords limit: Maximum results to return (default: 10, max: 50) keyword_title: Filter by job title (e.g., 'VP Engineering', 'Product Manager') keyword_company: Filter by company name Note: Location/region filters are not supported by the underlying API. Returns list of matching profiles with name, title, location, and profile URL. Search priority:
|
| search_companies | Search for companies on LinkedIn. Args: keywords: Search keywords limit: Maximum results to return (default: 10, max: 50) Returns list of matching companies. Search priority:
|
| search_jobs | Search for job postings on LinkedIn. Args: keywords: Search keywords (e.g., 'Python Developer', 'Product Manager') location_name: Location (e.g., 'San Francisco Bay Area', 'New York') job_type: Job type filter - F=Full-time, P=Part-time, C=Contract, T=Temporary, I=Internship experience: Experience level - 1=Internship, 2=Entry, 3=Associate, 4=Mid-Senior, 5=Director, 6=Executive remote: Remote options - 1=On-site, 2=Remote, 3=Hybrid distance: Distance from location in miles listed_at: Max seconds since job was posted (default: 86400 = 24 hours) limit: Maximum results to return (default: 10, max: 50) Returns list of matching job postings. WARNING: Uses unofficial API. May trigger LinkedIn bot detection with heavy use. |
| get_job | Get detailed information about a specific job posting. Args: job_id: LinkedIn job ID (from search results or job URL) Returns job details including description, requirements, company info, etc. WARNING: Uses unofficial API. |
| get_job_skills | Get skills required for a job posting. Args: job_id: LinkedIn job ID Returns list of required and preferred skills for the job. WARNING: Uses unofficial API. |
| get_profile_views | Get profile view statistics for the authenticated user. Returns profile view data including view count and viewer information (if available based on your LinkedIn subscription). WARNING: Uses unofficial API. |
| get_conversations | Get your LinkedIn messaging conversations. Args: limit: Maximum conversations to return (default: 20) Returns list of conversations with participants and last message preview. WARNING: Uses unofficial API. May trigger LinkedIn bot detection. |
| get_conversation | Get full message history for a specific conversation. Args: conversation_id: Conversation ID (from get_conversations results) Returns conversation details with full message history. WARNING: Uses unofficial API. |
| get_conversation_details | Get conversation ID and details for a specific profile. Useful for finding the conversation ID to send a message to someone. Args: profile_id: LinkedIn profile ID or URN Returns conversation details including conversation ID. WARNING: Uses unofficial API. |
| send_message | Send a LinkedIn message to one or more recipients. Args: recipients: List of LinkedIn profile public IDs (e.g., ['john-doe', 'jane-smith']) text: Message content to send Returns success status and message details. WARNING: Uses unofficial API. May trigger LinkedIn bot detection. Sending too many messages may result in account restrictions. Use responsibly and respect LinkedIn's terms of service. |
| mark_conversation_as_seen | Mark a conversation as read/seen. Args: conversation_urn: Conversation URN ID Returns success status. WARNING: Uses unofficial API. |
| get_invitations | Get pending connection invitations you've received. Args: limit: Maximum invitations to return (default: 50) Returns list of pending invitations with sender info. Note: LinkedIn API only supports fetching received invitations. Sent invitations are not available through this endpoint. WARNING: Uses unofficial API. |
| send_connection_request | Send a connection request to a LinkedIn profile. Args: profile_id: LinkedIn profile public ID (e.g., 'john-doe') message: Optional personalized message (max ~300 characters) Returns success status and request details. WARNING: Uses unofficial API. May trigger LinkedIn bot detection. LinkedIn limits connection requests. Use responsibly. |
| reply_invitation | Accept or reject a connection invitation. Args: invitation_id: Invitation ID (from get_invitations results) shared_secret: Shared secret (from get_invitations results) action: 'accept' or 'reject' Returns success status. WARNING: Uses unofficial API. |
| remove_connection | Remove an existing LinkedIn connection. Args: profile_id: LinkedIn profile public ID of the connection to remove Returns success status. WARNING: This action is IRREVERSIBLE. The person will need to re-request connection and you'll need to accept. Uses unofficial API. |
| get_company | Get detailed company information. Args: public_id: Company's public identifier (URL slug, e.g., 'microsoft') Returns company details including description, industry, employee count, etc. |
| get_company_updates | Get recent posts/updates from a company page. Args: public_id: Company's public identifier (URL slug) limit: Maximum updates to return (default: 10, max: 50) Returns list of company posts/updates. |
| get_organization_followers | Get follower count for an organization using the Community Management API. This tool uses the official LinkedIn Community Management API which provides accurate follower counts for organizations you have admin access to. Args: organization_id: LinkedIn organization URN ID (numeric, e.g., '12345678') Returns follower count and organization details. Note: Requires Community Management API access and admin permissions for the organization. |
| get_school | Get school/university information. Args: public_id: School's public identifier (URL slug) Returns school details including name, description, follower count, etc. |
| get_post_analytics | Get analytics for a specific post. Args: post_urn: LinkedIn post URN Returns engagement metrics including reactions, comments, and shares. Note: View count requires Partner API access. |
| get_rate_limit_status | Get current rate limit status. Returns remaining API calls and rate limit information. |
| analyze_engagement | Perform deep engagement analysis on a specific post. Args: post_urn: LinkedIn post URN follower_count: Author's follower count for rate calculation (optional) Returns comprehensive engagement metrics, reaction distribution, and quality score. |
| analyze_content_performance | Analyze content performance patterns for a profile. Args: profile_id: LinkedIn public ID post_limit: Number of posts to analyze (default: 20, max: 50) Returns content analysis with type distribution, engagement patterns, and recommendations. |
| analyze_optimal_posting_times | Analyze optimal posting times based on engagement patterns. Args: profile_id: LinkedIn public ID post_limit: Number of posts to analyze (default: 30, max: 50) Returns optimal posting times by hour and day with engagement averages. |
| analyze_post_audience | Analyze the audience engaging with a specific post. Args: post_urn: LinkedIn post URN Returns audience demographics based on commenters' profiles. |
| analyze_hashtag_performance | Analyze hashtag usage and performance. Args: profile_id: LinkedIn public ID post_limit: Number of posts to analyze (default: 30, max: 50) Returns hashtag frequency, engagement correlation, and recommendations. |
| generate_engagement_report | Generate a comprehensive engagement report for a profile. Args: profile_id: LinkedIn public ID post_limit: Number of posts to analyze (default: 20) Returns a full engagement report with content analysis, timing, and recommendations. |
| get_my_posts | Get your own LinkedIn posts. Uses the data provider to retrieve your authored posts with metadata. Returns post URNs that can be used with get_my_post_analytics. Args: count: Number of posts to retrieve (max 100) Returns list of your posts with URNs, content, and timestamps. |
| get_my_post_analytics | Get analytics for your own posts using the Official API. Uses the r_member_postAnalytics scope (Community Management API) to get accurate impression counts, engagement metrics, and reach data. Args: post_urns: List of specific post URNs to analyze. If not provided, will fetch your recent posts automatically. limit: If no URNs provided, analyze this many recent posts (default: 10) Returns analytics including impressions, reactions, comments, shares, and engagement rate. |
| analyze_my_content_performance | Analyze your content performance comprehensively. Provides detailed analysis of your posting patterns, engagement metrics, best performing content types, and optimal posting times. Args: post_limit: Number of posts to analyze (default: 30, max: 50) Returns detailed performance analysis with content breakdown, timing insights, and recommendations. |
| get_my_posting_recommendations | Get personalized posting recommendations based on your content performance. Analyzes your posting history to provide data-driven recommendations on content types, timing, and engagement strategies. Args: post_limit: Number of posts to analyze for recommendations (default: 30) Returns recommendations prioritized by potential impact. |
| generate_my_content_calendar | Generate a content calendar based on your performance data. Creates a data-driven posting schedule that optimizes for your best performing days, times, and content types. Args: weeks: Number of weeks to plan (default: 4, max: 12) posts_per_week: Target posts per week (default: 3, max: 7) Returns content calendar with suggested dates, times, and content prompts. |
| get_profile_sections | Get all editable profile sections with current content. Returns overview of profile sections including:
|
| get_profile_completeness | Calculate profile completeness score with improvement suggestions. Returns:
|
| update_profile_headline | Update profile headline. Requires Playwright browser automation to be enabled. Args: headline: New headline text (max 220 characters) Returns success status. |
| update_profile_summary | Update profile summary/about section. Requires Playwright browser automation to be enabled. Args: summary: New summary text (max 2600 characters) Returns success status. |
| upload_profile_photo | Upload a new profile photo. Requires Playwright browser automation to be enabled. Args: photo_path: Absolute path to the photo file (JPG, PNG) Returns success status. |
| upload_background_photo | Upload a new background/banner photo. Requires Playwright browser automation to be enabled. Args: photo_path: Absolute path to the photo file (JPG, PNG) Returns success status. |
| add_profile_skill | Add a skill to your profile. Requires Playwright browser automation to be enabled. Args: skill_name: Name of the skill to add Returns success status. |
| check_browser_automation_status | Check if browser automation is available for profile updates. Returns availability status and feature capabilities. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
| engagement_analysis_prompt | Generate a prompt to analyze engagement patterns for a profile. |
| content_strategy | Generate a prompt for LinkedIn content strategy development. |
| competitor_analysis | Generate a prompt to analyze competitor LinkedIn activity. Args: competitor_ids: Comma-separated list of competitor profile IDs |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
| server_info | Get LinkedIn MCP server information and status. |