Every LinkedIn Tool, One MCP Server
Search people, send messages, publish posts, track analytics, and manage campaigns - all through the Model Context Protocol. Works with Claude, GPT, and any MCP-compatible AI agent.
Search & Discovery
Find people, companies, and content on LinkedIn
Search LinkedIn People
Search LinkedIn's full people directory by keyword, job title, company, location, industry, and more. When a Sales Navigator subscription is detected, advanced filters like seniority level, years of experience, and recent job changes are automatically available. Results include name, headline, profile URL, and connection degree.
Search LinkedIn Companies
Search LinkedIn's company directory by keyword, industry, location, and employee headcount. Supports both Classic and Sales Navigator APIs - Sales Navigator mode uses nested filter structures automatically for richer results. Returns company name, description, industry, employee count, and page URL.
Search LinkedIn Posts
Search posts by KEYWORD across all of LinkedIn. To get posts from a specific person, use list_posts instead. Discover trending content, monitor topics, and find engagement opportunities. Returns matching posts with full text content, engagement metrics (likes, comments, shares), and author information.
Get Search Parameters
Retrieve valid LinkedIn search filter parameter IDs for use in search_people and search_companies. Returns structured lists of IDs for filter types like location, industry, company headcount, school, function, and seniority level. These IDs are required when using advanced search filters.
View LinkedIn Profile
View a LinkedIn profile by URL or public identifier. Returns full profile data including experience, education, skills, headline, summary, and connection status. When Sales Navigator is available, provides richer data: full names for 3rd+ degree connections, contact info (emails/phones), shared connections count, and lead flags.
Get Company Profile
Get a company's LinkedIn page details including full description, employee count, headquarters and office locations, industry classification, specialties, and follower count. Use the company name or LinkedIn page URL slug as the identifier.
Get Profile Viewers
See who viewed your LinkedIn profile recently. Returns viewer names, headlines, current company, and when they viewed your profile. Useful for identifying warm leads who are already interested in you and for monitoring profile visibility after content campaigns.
Save Search
Save a set of search parameters (keyword, title, company, location, etc.) under a user-defined name for easy re-execution later. Avoids re-entering complex filter combinations. Works with people, company, and post searches. Saved searches can be listed, run, and deleted.
List Saved Searches
List all saved search configurations for your account. Returns search names, types, filter summaries, and last-run timestamps. Use this to find a saved search ID before running or deleting it.
Run Saved Search
Execute a previously saved search using its stored filters. Supports cursor-based pagination so you can resume from where you left off across sessions. Returns the same results as the original search tool (people, companies, or posts) with full data.
Delete Saved Search
Delete a saved search configuration by ID. This permanently removes the saved filters and any associated cursor state. Use list_saved_searches to find the ID first.
Messaging
Send and manage LinkedIn messages and conversations
List Conversations
List your LinkedIn message conversations with contact names, last message preview, and timestamps. Returns chat_id needed by send_message. If you need to message someone new, skip this and use start_conversation. Supports pagination for navigating through your full inbox.
Get Messages
Get messages from a specific LinkedIn conversation by chat ID. Returns the full message history with sender names, message text, and timestamps. Supports pagination for long conversations. Use list_conversations first to get the chat_id.
Send Message
Send a message in an existing LinkedIn conversation. Only works for EXISTING conversations. If you haven't messaged this person before, use start_conversation instead. Requires the chat_id from list_conversations. Supports campaign tagging for tracking outbound activity.
Start Conversation
Start a new LinkedIn message conversation with one or more people. Use this to send the FIRST message to someone. For follow-up messages in an existing conversation, use send_message with the chat_id. Accepts LinkedIn profile IDs or URLs as recipients. Supports group conversations with multiple attendees. Automatically resolves profile URLs to provider IDs.
Send InMail
Send an InMail message to someone outside your direct network. InMail lets you reach 2nd and 3rd degree connections without needing a connection first. Requires InMail credits on the sender's LinkedIn account. Supports optional subject lines and campaign tagging.
Label Conversation
Add a custom label to a LinkedIn conversation for organization and split inbox views. Labels like 'Hot Lead', 'Client', or 'Candidate' help you filter and prioritize your inbox. A conversation can have multiple labels. Idempotent - adding the same label twice has no effect.
Unlabel Conversation
Remove a label from a LinkedIn conversation. Does not delete the conversation itself. No effect if the label was not present.
List Conversation Labels
List all labels in use across your conversations with counts. Returns an array sorted by count descending. Use these labels with list_conversations to filter by label for split inbox views.
Snooze Conversation
Snooze a conversation to hide it from your inbox until the specified time. When the reminder fires, the conversation resurfaces at the top of your inbox. If the other person replies before the reminder fires, it auto-cancels so you see the reply immediately. Optionally attach a note to remind yourself why you snoozed it.
Schedule Message
Schedule a message to be sent in a conversation at a future time. Works outside of campaigns for loose follow-ups like 'message them in 2 weeks'. The message is auto-sent at the specified time. If they reply before then, the scheduled message is auto-cancelled.
List Reminders
List all pending snooze reminders and scheduled messages. Shows what's snoozed, what messages are queued, and when they fire. Filter by status: pending (default), fired, cancelled, sent, failed, or 'all'.
Cancel Reminder
Cancel a pending snooze or scheduled message. If the conversation was snoozed (archived), it will be unarchived back into your inbox. Fails if the reminder is not found or already in a terminal status.
Smart Archive Conversation
Archive a conversation with smart auto-return. Unlike LinkedIn's native archive, the conversation automatically resurfaces in your inbox when the other person sends a new message. Great for cleaning up your inbox without losing track of conversations.
Unarchive Conversation
Unarchive a conversation, bringing it back into your active inbox. No effect if the conversation is not archived.
Bulk Archive Conversations
Archive all stale conversations older than N days (default 30, min 7). Only archives conversations where you sent the last message and got no reply. All archived conversations auto-return when the other person replies. Use dry_run=true to preview without archiving.
Content
Create, read, and engage with LinkedIn posts
Create LinkedIn Post
Publish a new LinkedIn post with text content and optional image or document attachments. Attachments are fetched from public URLs and uploaded to LinkedIn automatically. Supports campaign tagging for tracking content performance across multiple posts.
Get LinkedIn Post
Retrieve a specific LinkedIn post by its ID. Returns the full post content, author information, engagement metrics (likes, comments, shares, impressions), and media attachments. Use this to inspect individual posts found via search or feed.
List LinkedIn Posts
Get posts FROM a specific person's profile. For keyword search across all LinkedIn, use search_posts instead. Returns post content, engagement metrics, and supports pagination for browsing through a profile's full post history. Works with both personal profiles and company pages.
React to Post
Add a reaction to a LinkedIn post. Supports all six LinkedIn reaction types: like, celebrate, support, love, insightful, and funny. Reactions are idempotent - calling it again won't create duplicates. Supports campaign tagging for tracking engagement activity.
Comment on Post
Post a comment on a LinkedIn post, or reply to a specific comment (threaded reply). Use parent_comment_id to reply to someone's comment directly - they will be notified. Supports campaign tagging for tracking engagement activity. Commenting on prospects' posts is one of the highest-converting outreach warmup tactics.
Delete Comment
Delete a comment you posted on a LinkedIn post. Essential safety net for automated workflows - remove test comments, fix mistakes, or undo automated actions. Only works on comments you authored.
Edit Comment
Edit a comment you previously posted on a LinkedIn post. Useful for fixing typos, updating wording, or refining comments posted by automated workflows. Only works on comments you authored.
List Post Comments
List comments on a LinkedIn post. Returns comment text, author details (name, headline, company, title), thread structure (parent_comment_id, depth), and reaction counts. Accepts any post ID format - numeric, activity URN, or feed URN.
List Post Reactions
List reactions on a LinkedIn post. Returns the reaction type (like, celebrate, love, etc.) and author details for each reaction. Supports pagination for highly-engaged posts. Useful for identifying who is engaging with content.
Get LinkedIn Feed
Pull your LinkedIn feed - recent posts from your network. Returns posts with content, author info, and engagement metrics. Supports pagination via offset. Useful for discovering engagement opportunities, monitoring topics, and finding posts to comment on.
Engage With Latest Post
React to (and optionally comment on) someone's most recent LinkedIn post in a single action. Automatically fetches the target's latest post, adds a reaction, and posts your comment if provided. Ideal for warming up prospects before sending a connection request.
List Scheduled Posts
List all your pending scheduled posts that haven't been published yet. Returns the post content, scheduled publish time, and status for each. Use this to review your content calendar and manage upcoming posts.
Cancel Scheduled Post
Cancel a scheduled post before it publishes. The post is permanently removed from the queue. Use list_scheduled_posts to find the ID of the post you want to cancel.
Batch Reply Comments
Reply to multiple comments sequentially with rate-limit-aware pacing. Accepts up to 20 comment/reply pairs per call. Stops if the daily engagement safety limit (100/day) is reached. Use get_comment_status first to identify high-priority unanswered comments.
Connections
Manage your LinkedIn network and invitations
Send Connection Request
Send a LinkedIn connection request to someone. Optionally include a personal message (max 300 characters) to increase acceptance rates. Automatically resolves profile URLs and slugs to provider IDs. Supports campaign tagging for tracking outbound connection activity.
Get Connections
List your LinkedIn connections (1st degree network). Returns names, headlines, profile URLs, and connection metadata. Supports pagination for browsing through your full network. Useful for CRM syncing, network analysis, and identifying messaging targets.
List Pending Invitations
List connection invitations you've sent that are still pending acceptance. Returns recipient details, when the invitation was sent, and whether a message was included. Use this to manage your outbound connection pipeline and identify stale invitations to cancel.
Cancel Invitation
Cancel a pending connection invitation that hasn't been accepted yet. Use list_pending_invitations to find the invitation ID. Canceling old invitations frees up your weekly connection limit and helps avoid LinkedIn restrictions.
List Incoming Invitations
List connection requests you've received that are pending your response. Returns sender name, headline, invitation details, and the URN and shared_secret needed to accept or decline. Supports pagination via offset.
Accept Invitation
Accept a pending connection request. Requires the invitation URN and shared secret from list_incoming_invitations. Once accepted, the person becomes a 1st degree connection and you can message them directly.
Decline Invitation
Decline (ignore) a pending connection request. The sender is not notified that you declined. Requires the invitation URN from list_incoming_invitations. Use this to programmatically clean up unwanted connection requests.
List Accepted Invitations
List connection invitations you sent that were accepted. Returns the recipient details, when the invitation was sent, when it was accepted, and the acceptance delay. Use this to measure outbound conversion rates and trigger follow-up workflows.
Add to Blacklist
Add a LinkedIn profile to your do-not-contact blacklist. Blacklisted profiles are automatically excluded from outreach - send_invitation, send_message, and start_conversation will refuse to target them. Use this for opt-outs, competitors, or any profile you want to avoid contacting.
Remove from Blacklist
Remove a LinkedIn profile from your do-not-contact blacklist. Once removed, the profile can be targeted by outreach tools again. Use check_blacklist to verify the current status before removing.
Check Blacklist
Check if a LinkedIn profile is on your do-not-contact blacklist. Returns the blacklist status, reason (if provided), and when they were added. Use this before outreach to ensure you respect opt-outs and suppression lists.
Set Auto-Withdraw
Configure automatic withdrawal of pending connection invitations that haven't been accepted after a set number of days. This frees up your weekly invitation limit and prevents your account from accumulating stale requests. Set to 0 to disable.
Analytics
Track post performance, profile metrics, and activity
Get Post Analytics
Get real-time analytics for a specific LinkedIn post: views/impressions, likes, comments, and reposts count. Costs 1 API call. Only use if you need real-time data for a SINGLE post. For batch analytics or dashboards, use get_cached_post_analytics (instant, no API cost). Fetches live data directly from LinkedIn for the most up-to-date metrics.
Get Cached Post Analytics
Get cached post metrics for your account. Returns impressions, reactions, comments, reposts, and engagement rate for recent posts. Data is refreshed automatically by the content poller - no LinkedIn API calls are made. Supports sorting by any metric and filtering by content type.
Get Top Posts
Get your best-performing posts ranked by a chosen metric. Uses cached data from the content poller for fast responses. Supports ranking by impressions, reactions, comments, reposts, or engagement rate with a configurable lookback window.
Get Content Summary
Get an aggregated content performance summary: total impressions, reactions, engagement rate, and breakdown by content type (text, image, video, document, poll, article). Uses cached data for fast responses with a configurable lookback window.
Get Profile Analytics
Get daily profile metrics over time: profile views count and follower data. Uses cached data from the content poller for fast responses. Useful for tracking how content campaigns impact your profile visibility and growth.
Get Activity Analytics
Get a daily outbound activity summary: invitations sent, messages sent, posts published, and more. Aggregated from usage logs to show how actively you're using LinkedIn through Crispy. Useful for monitoring team activity and ensuring daily limits aren't being approached.
Purge Analytics Cache
Purge all cached analytics data for your account. This removes post metrics and profile metrics from the cache. Data will be re-populated automatically on the next poll cycle. Use this if you suspect stale or corrupted cache data.
Seed Post Analytics
Backfill your analytics cache by fetching your full LinkedIn post history with pagination. Upserts all post metrics (impressions, reactions, comments, reposts, engagement rate) into the cache in one go. Run once to seed historical data - subsequent updates happen automatically via the polling system.
Get Writing Style
Get your AI-generated messaging and posting style guides. When you connect your LinkedIn account, Crispy automatically analyzes your sent messages and posts using Claude to create a detailed writing style profile. This includes formality level, greeting/closing patterns, vocabulary, tone, post formats, and more. Use this data to write messages and posts that match your authentic voice.
Set Style Examples
Provide 1-3 LinkedIn profile URLs of people whose posting style you admire. Crispy fetches their recent posts and uses Claude to analyze the writing patterns, then generates a posting style guide based on those examples. This is perfect for users who don't post much themselves but want AI-generated content that matches a specific voice or format.
Refresh Writing Style
Re-trigger the full writing style analysis pipeline. This re-fetches your latest LinkedIn messages and posts, then uses Claude to regenerate both your messaging and posting style guides. Useful after you've changed your communication style or want to incorporate recent activity.
Get Comment Reach
Measure the reach and engagement ROI of your commenting activity on LinkedIn. Returns metrics like total comments, estimated impressions from commented posts, engagement received on your comments (likes, replies), and reach per comment. Useful for validating commenting as a growth strategy.
Get Comment Status
Instant comment follow-up intelligence. Shows unanswered comments on your posts ranked by commenter value (author title, headline, reactions). Helps you prioritize which commenters to reply to first. Reads from synced comment cache with no live API calls.
Campaigns
Create and track outbound campaign performance
Create Campaign
Create a new campaign for tracking outbound LinkedIn actions. Campaign IDs are user-defined slugs (e.g. 'q1-fintech-outreach'). Once created, tag any send_message, send_invitation, create_post, or other action with the campaign_id to track performance.
List Campaigns
List your campaigns with action counts. Returns active campaigns by default, with an option to include archived ones. Shows campaign name, creation date, and total actions tracked under each campaign.
Archive Campaign
Archive a campaign. Archived campaigns stop accepting new actions but all historical data is preserved for reporting. Use this to close out completed campaigns and keep your active campaign list clean.
Update Campaign
Update an existing campaign's name, description, or archived status. Use this to rename campaigns, add descriptions, or unarchive a previously archived campaign to resume tracking actions against it.
Delete Campaign
Permanently delete a campaign. Unlike archiving, this removes all campaign data including action history. This action cannot be undone. Use archive_campaign instead if you want to preserve historical data.
Get Campaign Stats
Get detailed campaign performance stats: action counts by tool type, daily breakdown of activity, and per-account breakdown for multi-account setups. Supports a configurable lookback window for time-bounded reporting.
Launch Experiment
Launch an A/B experiment on a campaign to compare variant performance using SPRT (Sequential Probability Ratio Test) for statistical significance. Campaign must have at least 2 step variants. Metric can be acceptance_rate or reply_rate. Pure DB operation with no LinkedIn API calls.
Get Experiment Results
Get experiment status, per-variant stats, SPRT decision, and winner assessment with confidence and lift percentage. Returns insufficient_data when control has fewer than 5 samples. When a winner is detected, returns lift and confidence. Pure DB operation.
Promote Experiment Winner
Apply the winning variant's content to the campaign sequence so all future sends use the winner. Replaces all step variants with only the winning variant. Experiment must be completed with a declared winner. Pure DB operation.
Get Variant Stats
Get per-variant performance metrics for a campaign. Returns sent count, reply count, acceptance count, reply rate, and acceptance rate per variant per step. Pure DB operation with no LinkedIn API calls.
Account
Manage account settings, diagnostics, and capacity
Get My Profile
Get your own LinkedIn profile information including name, headline, summary, and public identifier. Supports multi-account setups - pass an account_id to specify which LinkedIn profile to use. This is typically the first tool called to verify which account is connected.
Update Account Settings
Update your account settings. Currently supports tracking_mode: 'mcp_only' (default - only MCP actions are tracked) or 'all_activity' (all LinkedIn activity is tracked including manual actions). Only the account owner can change this privacy setting.
Contact Support
Contact Crispy support directly from within your MCP session. Automatically includes diagnostic information (account status, recent errors, plan details) to help resolve your issue faster. Supports normal and urgent priority levels.
Get Profile Capacity
Returns the status and remaining daily action limits for all connected LinkedIn accounts. Shows capacity for searches, profile views, messages, invitations, posts, and engagement. Includes account health indicators (healthy, warming_up, rate_limited, restricted). Use this to choose the best account for an action in multi-account setups.
Get Learned Preferences
Get all learned preferences for your workspace and account (e.g. outreach_tone='formal'). Preferences influence future recommendations from all enrichment tools. Returns an empty array if no preferences have been set.
Set Preference
Set an explicit preference that overrides AI recommendations. Examples: outreach_tone='formal', content_formality='casual', follow_up_frequency='weekly'. Use get_learned_preferences to see current values before setting.
Reset Preference
Remove a learned preference, resetting it to default behavior. The system will re-learn from future feedback. Use get_learned_preferences to see all current keys before resetting.
List Webhooks
List all registered webhook endpoints for your account. Returns webhook URLs, subscribed event types, signing secret hints, and delivery status. Use this to audit your webhook configuration and troubleshoot delivery issues.
Create Webhook
Register a new webhook endpoint to receive real-time LinkedIn event notifications. Specify the URL to receive events, the event types to subscribe to, and an optional signing secret for HMAC-SHA256 verification. Supports 24 event types including messages, invitations, profile views, and more.
Update Webhook
Update an existing webhook endpoint's configuration. You can change the URL, event subscriptions, signing secret, or active/inactive status. Use list_webhooks to find the webhook ID first.
Delete Webhook
Delete a registered webhook endpoint. This permanently removes the webhook and stops all event deliveries to that URL. Use list_webhooks to find the webhook ID. Consider using update_webhook to disable it instead if you may need it later.
Test Webhook
Send a test event to a registered webhook endpoint to verify it's receiving and processing events correctly. Sends a synthetic event with a test payload and reports the HTTP response status and latency. Useful for debugging webhook integrations.
Start Warm-Up
Start a gradual activity ramp-up program for a LinkedIn account. New accounts or recently restricted accounts should warm up before running at full capacity. The warm-up program gradually increases daily limits over 2-4 weeks to build LinkedIn trust safely.
Get Warm-Up Status
Check the current warm-up status and effective daily limits. Shows which day of the warm-up program you're on, the current effective limits (which increase each day), and the target full limits. Returns null if no warm-up is active.
Stop Warm-Up
End the warm-up program early and switch to full daily limits immediately. Use this if you're confident the account is ready for full activity. Not recommended for accounts with less than 7 days of warm-up completed.
Verify Session
Check if your LinkedIn session is still active and authenticated. Returns session health status, last activity time, and any warnings about expiring or degraded sessions. Use this to proactively detect session issues before they cause tool failures.
Configure Storage
Configure managed contact storage for your account. Enables lead tracking, outreach history, and contact management features. You can enable/disable storage and configure retention policies. When enabled, outreach actions (messages, invitations, comments) are automatically logged against contact records.
Lead Management
Track leads, outreach history, and contact interactions
Search Leads
Search your managed contact storage for tracked leads. Filter by name, company, status (new, contacted, replied, converted), tags, or last-contacted date. Returns lead records with profile info, status, notes, and outreach history summary. Requires managed storage to be enabled - check storage status with get_profile_capacity first.
Add Lead
Add a LinkedIn profile to your managed contact storage as a tracked lead. Stores profile info, status, tags, and notes. Once added, all outreach to this contact (messages, invitations, comments) is automatically logged in their outreach history. Requires managed storage to be enabled - check storage status with get_profile_capacity first.
Update Lead
Update a tracked lead's status, tags, or notes. Use this to move leads through your pipeline (new → contacted → replied → converted), add/remove tags for segmentation, or update notes with latest interaction context.
Get Outreach History
View the complete outreach timeline for a tracked contact. Returns all recorded interactions: messages sent, invitations, comments on their posts, reactions, and profile views - in chronological order. Requires managed storage to be enabled - check storage status with get_profile_capacity first.
Import Contacts
Bulk import contacts from competitor tools or CSV exports. Accepts a JSON array of contact objects with flexible field naming - camelCase (firstName), snake_case (first_name), or Title Case (First Name) all work. Deduplicates by LinkedIn URL. Supports up to 1000 contacts per call. Perfect for migrating from Lemlist, Heyreach, Expandi, Dripify, Waalaxy, or any tool that exports CSV.
Import Blacklist
Bulk import do-not-contact profiles from a competitor tool or internal list. Accepts LinkedIn URLs as strings or objects with URL + reason. Supports up to 5000 entries per call. All outreach tools automatically check the blacklist before sending - so importing your existing blacklist ensures no accidental outreach to blocked contacts.
Lists
Create and manage named contact collections for campaigns
Create List
Create a named contact list. Lists are reusable collections - use them to organize contacts before enrolling in campaigns.
List Lists
List your contact lists with member counts. Returns active lists by default.
Update List
Update a list's name, description, or archived status.
Delete List
Permanently delete a list. Contacts are not deleted - only the list and its memberships.
Add to List
Add contacts to a list. Accepts contact IDs or LinkedIn URLs. Idempotent - duplicates are ignored.
Remove from List
Remove contacts from a list by contact ID or LinkedIn URL.
Get List Contacts
Get contacts in a list with their profile data. Paginated.
The complete LinkedIn API. Ready when you are.
Connect your first LinkedIn profile in under 5 minutes. All 164 tools. Safe limits, warm-up, and full permission control built in.