# Crispy — LinkedIn API for AI agents > Generated from the tool registry. Do not edit by hand — run `npm run generate:llms`. Crispy is a remote MCP (Model Context Protocol) server + REST API that lets AI agents search, message, post, and manage LinkedIn. Works with Claude, Cursor, Windsurf, Cline, n8n, Make, and any MCP-compatible client. 164 live MCP tools. The tool list below has all 181 callable tools. 17 of them are not in the default MCP tools/list and are marked, but they still work over REST. 145 names are in the default core scope. 18 names are in the read-only scope. 12 tools need Advanced MCP tools turned on and sit outside the core scope. The scope sizes overlap, so they are not a partition and do not add to the live total. 205 REST routes publish all 181 callable tools. Some tools have more than one route. ## Endpoint POST https://crispy.sh/api/mcp REST base: https://crispy.sh/api/v1 ## Authentication Authorization: Bearer crispy_... API keys are generated from the Crispy dashboard. Claude.ai connects via OAuth instead. ## Pricing - Monthly: $49 per connected LinkedIn account per month. - Yearly: $468 per connected LinkedIn account charged yearly ($39 per month billed annually). - One plan, every documented tool included. No per-request fees. ## Tools (181) ### Profile (3) - edit_my_profile — Edit your LinkedIn headline (max 220 chars) or summary (max 2600 chars; safety limit: 10/day). Returns {accep… - get_profile — View a LinkedIn profile (250/day limit). Omit identifier for your own. Accepts provider_id, slug, or URL. Ret… - get_profile_viewers — See who viewed your profile recently (1-100, default 20). Returns provider_id (e.g. 'ACoAABcd1234') per viewe… ### Messaging & Inbox (25) - accept_suggested_label — Accept Crispy's suggested label for a conversation (e.g. 'sales', 'networking'). Promotes the suggestion to t… - bulk_archive — Archive stale conversations older than N days (default 30, min 7) where you sent last. Auto-return when the o… - cancel_reminder — Cancel a pending snooze or scheduled message (e.g. reminder_id from list_reminders). Unarchives snoozed conve… - daily_recap — Mixed-period briefing: connections/accepts from the last 24 hours; current unread chats and pending invites f… - delete_chat — Delete a conversation (e.g. chat_id from list_conversations). Irreversible. Fails if chat_id does not exist o… - delete_message — Delete a sent message (e.g. message_id from get_messages). LinkedIn allows deletion within 60 min only. Fails… - download_attachment — Download a message attachment (e.g. message_id and attachment_id from get_messages). Returns name, MIME type,… - edit_message — Edit a previously sent message (max 8000 chars). Only works for messages you sent. Requires message_id (from… - forward_message — Forward a message to another chat (max 100/day shared with send_message). Requires source chat_id, message_id… - get_briefing — Morning briefing: pulse, capacity, session in one call. e.g. include=['pulse','session'] to verify LinkedIn c… - get_comment_status — Unanswered comments on your posts ranked by value (1-100, default 20). Zero API calls — reads from synced cac… - get_inbox_status — Cached inbox triage (up to 200 threads): needs_reply, stale threads, and commitments. Unread is contact-dedup… - get_messages — Get messages from a conversation (1-100, default 20). Requires chat_id (e.g. 'msg_abc123') from list_conversa… - list_conversations — List LinkedIn conversations with last message preview (1-100, default 20). Returns chat_id (e.g. 'msg_abc123'… - list_labels — Labels in use across conversations with counts (e.g. {label: 'Hot Lead', count: 5}), sorted by count. Returns… - list_reminders — Pending snooze reminders and scheduled messages (default 50, sorted by remind_at). Filter by status: pending,… - mark_chat_read — Mark a conversation as read (chat_id from list_conversations, safety limit: 200/day). Idempotent. Returns {ma… - organize_conversation — Organize a conversation: archive, unarchive, label (e.g. 'Hot Lead'), snooze (max 200/day). snooze requires s… - react_to_message — Add an emoji reaction to a LinkedIn message. Supported on LinkedIn and WhatsApp. Pass an emoji character as t… - reject_suggested_label — Reject Crispy's suggested label for a conversation. Optionally pass correct_label (e.g. 'sales', 'networking'… - schedule_message — Schedule a message for a future time (e.g. send_at='2026-04-23T10:00:00Z', max 8000 chars). Auto-cancelled if… - search_messages — Search cached LinkedIn messages by keyword (1-100, default 20). Zero live API calls. Returns chat_id (e.g. 'm… - send_inmail — Send an InMail to someone outside your network (consumes InMail credits). Requires Sales Navigator. Max 1900… - send_message — Send a message to an existing chat or start a new one (safety limit: 150/day). Use chat_id for existing chats… - send_voice_message — Send a voice note to a LinkedIn chat from a public audio URL (.mp3/.m4a/.ogg/.wav, max 5 MB). Fails if audio_… ### Network & Connections (19) - block_contact (not in default tools/list) — Block + disconnect a contact (e.g. 'john-doe' or 'ACoAA...') in one call: add to do-not-contact list, remove… - cancel_invitation — Withdraw a pending invitation you sent. Pass invitation_id (e.g. '7412938501234') from list_invitations. Fail… - cancel_stale_invitations (not in default tools/list) — Withdraw all pending SENT invitations older than older_than_days (default 14, e.g. 30). Batch maintenance; id… - endorse_skills — Endorse a skill on a profile (safety limit: 50/day). Accepts provider_id (e.g. 'ACoAABGDkeIB...'), slug, or U… - follow_user — Follow someone on LinkedIn (safety limit: 50/day shared with unfollow_user). Accepts provider_id (e.g. 'ACoAA… - get_connections — List 1st-degree connections (1-100, default 20). Returns provider_id (e.g. 'ACoAABcd1234'). For 500+ connecti… - get_followers — List followers of a profile (1-100, default 20). Returns provider_id (e.g. 'ACoAABcd1234') per follower. Pagi… - get_inbox_sync_status — Read the authenticated account's receipt by event_id (e.g. UUID). Returns accepted, running, completed, faile… - get_network_analytics — Aggregate analytics over your locally-synced LinkedIn connections with optional filtering. Without filters: t… - list_invitations — List connection invitations (direction='incoming'|'sent', default 'incoming'). status='accepted' returns acce… - list_saved_connections — Search locally saved connections by name, company, title, or skills (1-100, default 20). Zero API calls. Retu… - manage_connections (not in default tools/list) — Manage saved connections: action='save' (identifier=provider_id/slug/URL [+ notes]; fetches and upserts the p… - remove_connection — Remove a LinkedIn connection (safety limit: 10/day). PERMANENT. Accepts provider_id (e.g. 'ACoAABcd1234'), sl… - respond_to_invitation — Accept or decline a connection invitation (no daily limit). Get invitation_urn from list_invitations(directio… - save_connection — Fetch and save a LinkedIn profile to local store (e.g. provider_id 'ACoAABcd1234' or slug 'john-doe'). Overwr… - search_connections — Search locally-synced connections (max 500) by keyword, title, company, location, or skills. DB-only — return… - send_invitation — Send a LinkedIn invitation (safety limit: 15/day). Note max 300 chars boosts acceptance. Accepts provider_id… - sync_inbox — Queue an inbox sync of up to 300 recent threads. Returns {queued:true,event_id} only once accepted; errors fa… - unfollow_user — Unfollow someone on LinkedIn (safety limit: 50/day shared with follow_user). Accepts provider_id (e.g. 'ACoAA… ### Content & Posts (24) - accept_content_suggestion — Accept a content queue suggestion and create a post draft from it (default 1/session). Marks suggestion as 'd… - batch_reply_comments — Reply to multiple comments (max 20, max 1250 chars each, e.g. [{comment_id, text}]). Items beyond the 100/day… - cancel_scheduled_post — Cancel a scheduled post (e.g. 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx' UUID from list_scheduled_posts) before i… - comment_on_post — Comment on a post (safety limit: 100/day, max 1250 chars). Use parent_comment_id to reply to a specific comme… - create_post — Publish a member LinkedIn post (safety limit: 10/day; max 3000 chars), now or with schedule_at. Supports atta… - delete_comment — Permanently delete a LinkedIn comment. Irreversible. Requires comment_id (e.g. from list_post_comments) and p… - delete_draft — Permanently delete a draft post. Only drafts with status 'draft' or 'archived' can be deleted. Cannot delete… - delete_post — Delete a LinkedIn post. Accepts post_id string (e.g. from list_posts or get_post). Cannot complete: returns n… - dismiss_content_suggestion — Dismiss a content queue suggestion (max 500 chars reason). Marks it 'dismissed' and logs signal so cron avoid… - engage_with_latest_post — React to someone's latest post and optionally comment (safety limit: 100/day). Accepts provider_id (e.g. 'ACo… - get_feed — Get your LinkedIn feed (1-100, default 20). Returns post_id (e.g. 'urn:li:activity:701...'), engagement count… - get_feed_research — Pull high-engagement feed posts sorted by engagement rate (1-50, default 20). Cached 2h. Use topic (e.g. 'AI… - get_post — Retrieve a LinkedIn post by ID (e.g. 'urn:li:activity:701...'). Returns content, author, and engagement metri… - list_drafts — List draft posts sorted by most recently updated. Default filter is status='draft'. Use status='published' to… - list_post_comments — List a post's top-level comments (1-100, default 20), or the replies to one comment when comment_id is given.… - list_post_reactions — List reactions on a post (1-100, default 20). Accepts post_id as numeric ID, activity URN, or feed URN. Retur… - list_posts — List posts (sort='recent'|'top', default 20). sort='recent' requires identifier (provider_id, e.g. 'ACoAABGDk… - list_scheduled_posts — List your scheduled posts (1-100, default 20). `id` is a Crispy-internal UUID for cancel_scheduled_post only,… - publish_draft — Publish a draft as a member LinkedIn post (shared 10/day limit). Refuses company-page, mention, and link-prev… - react_to_post — React to a LinkedIn post (safety limit: 100/day). Types: like, celebrate, support, love, insightful, funny. A… - reply_to_comment — Reply to a comment by comment_id (max 1250 chars, 100/day). Fails if comment not in cache — run get_comment_s… - repost_post — Reshare a LinkedIn post (safety limit: 100/day shared with reactions). post_id must be a URN (e.g. 'urn:li:ac… - save_draft — Save a LinkedIn post draft for update_draft or publish_draft (max 3000 chars). Attachments publish. Company-p… - update_draft — Edit a post with 'draft' or 'archived' status. Company-page, mention, and link-preview metadata may be stored… ### Search (9) - delete_saved_search — Delete a saved search by ID (e.g. 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx' UUID from list_saved_searches). Has… - get_search_parameters — Look up LinkedIn filter IDs by name (e.g. type='location', query='Netherlands'). Types: location, industry, f… - get_search_results — Return cached results for a saved search (e.g. search_id UUID from list_saved_searches). Populated nightly —… - list_saved_searches — List Crispy-local saved searches and IDs (e.g. UUID) for run_saved_search. Does not list LinkedIn or Sales Na… - run_saved_search — Run a Crispy-local saved search by ID (e.g. UUID). SN-only people filters return an error and zero results on… - save_search — Save a Crispy-local people, company, or post search (e.g. 'CTOs in Germany') from structured parameters or a… - search_companies — Search LinkedIn companies (Sales Navigator 1-25; Classic fixed 10; limit 300/day). Results are cached locally… - search_people — Search LinkedIn people (37 filters; Classic fixed 10). SN-only: error and zero results on Classic, no seat, o… - search_posts — Search posts by keyword (1-25, limit 300/day). Returns post_id (e.g. 'urn:li:activity:701...'), engagement, a… ### Analytics (8) - get_activity_analytics — Daily activity breakdown (e.g. last 7 days): invitations sent, messages, posts. Only Crispy actions counted b… - get_analytics — Get analytics by period and dimension. post/profile/content: live sub-handlers. posts/campaigns/etc: nightly… - get_cached_post_analytics — Get post metrics: impressions, reactions, comments, reposts, engagement rate (1-50, default 20). Cache with l… - get_comment_reach — Analyze reach and ROI of your commenting activity (e.g. last 30 days): posts commented on, impression correla… - get_content_patterns — Post performance patterns (zero API calls): hook styles, post lengths, CTA impact, posting times. Optional da… - get_post_analytics (not in default tools/list) — [Deprecated, removing in v6.2] Use get_analytics(dimension='post', id=) instead. Get impressions, re… - get_trial_attribution — Owner-scoped trial-invite (/try/[ref]) attribution. Aggregates trial_invites by ref: clicks, signups, convers… - get_variant_stats — Return per-step delivery and response stats for sends with a non-null variant_index. Example output: step 1,… ### Intelligence (5) - get_activities — Raw read of the activities event log (touchpoints, sends, replies, accepts) for computing your own scores / h… - get_inmail_balance — Available InMail credits (e.g. 10) and plan info for the connected account. Use before send_inmail to avoid f… - get_social_selling_index — Your LinkedIn Social Selling Index score and category breakdown (e.g. score 70/100). Requires Sales Navigator… - mark_commitment_fulfilled — Mark a tracked commitment as fulfilled (e.g. 'I'll send you that document by Friday'). commitment_id from get… - save_sales_navigator_lead — Save a profile as a Sales Navigator lead (provider_id e.g. 'ACoAABcd1234', slug, or URL). Requires Sales Navi… ### Campaigns (12) - apply_sequence_template — Apply a built-in sequence template to a campaign (e.g. template_name='voice-note-follow-up'). Copies follow_u… - archive_campaign — Archive a campaign (e.g. 'q1-outreach'). Permanently cancels queued pending/retry follow-ups; unarchive does… - build_campaign (not in default tools/list) — Scaffold a campaign in one call: create a list, add contacts, create the campaign, enroll them (policy-checke… - confirm_campaign_launch — Launch a ready campaign (e.g. 'gtm-engineers-apr26'): needs a bound list; relationship campaigns also need a… - delete_campaign — Permanently delete a campaign (e.g. campaign_id='q1-fintech-outreach'). No unarchive step needed first. FK ON… - get_campaign — Get campaign(s) (e.g. 'gtm-engineers-apr26'). No campaign_id: list all (user/workspace-scoped; account_id doe… - list_sequence_templates — List built-in sequence templates (e.g. '3-step-linkedin-outreach'). Returns name, description, step count. Re… - manage_outreach — Set up, pause, or resume campaign outreach. Paused follow-ups expire 14 days after scheduled send_at; pause r… - preview_campaign_launch — Preview a campaign launch (e.g. 'gtm-engineers-apr26'): up to 50 first-touch messages (default 10), list summ… - unarchive_campaign — Restore an archived campaign record (e.g. 'q1-outreach'). Cancelled follow-ups are not restored, and outreach… - upload_media — Re-host media from a public URL to Crispy storage for use in campaign steps. Supports audio (.m4a, .mp3, max… - upsert_campaign — Create or update a campaign (e.g. name='Q2 Outreach'). Omit campaign_id to create; provide it to update. Crea… ### Campaign Senders (1) - manage_senders — Manage campaign senders. action='list': returns configured senders. action='add': adds sender_account_id to t… ### Campaign Variants (1) - manage_variants — List, add, or remove campaign message arms. Safety limit: one step and one added/removed arm per call. Exampl… ### Lists (5) - list_lists (not in default tools/list) — [Deprecated, removing in v6.2] Use manage_lists with action='list' instead. List your contact lists with memb… - manage_lists — Create, delete, or list outreach lists. action='create' creates a new list; 'delete' removes it; 'list' retur… - run_search_to_list (not in default tools/list) — SN-only people filters return an error and zero contacts added on Classic, no seat, or expired SN; Classic is… - update_list — Update a list's name, description, or archived status (e.g. list_id 'senior-clinical-belgium'). Fails with 'n… - update_list_membership — Add or remove members from a list. For contact lists: pass contact_ids or linkedin_urls. For company lists (k… ### Leads (6) - add_lead — Enroll a contact in a campaign (e.g. 'gtm-engineers-apr26'). Returns a complete verdict on every call: added,… - check_lead_status — Pre-computed collision status for a lead (provider_id e.g. 'ACoAABCDEFG'): lists, campaigns, blacklisted, con… - get_contact — Get the complete contact picture: identifiers, campaign enrollments, messages, connection events, company lin… - get_outreach_history — Get outreach/activity history for a contact or all recent activity. Returns send_invitation, send_message, pr… - search_leads — Search your saved contacts and lists in Crispy (default 50). Does NOT search LinkedIn/Sales Navigator - use s… - upsert_lead — Add or update a lead by linkedin_url (e.g. 'john-doe' or 'linkedin.com/in/john-doe'). Creates if not found, u… ### Contacts (2) - intake_prospect (not in default tools/list) — One-call prospect intake: save a LinkedIn profile (e.g. 'john-doe'), resolve/create the contact, apply tags,… - list_contacts — Query and export contacts with rich filtering. Filter by connection/response status, campaign, custom attrs,… ### Imports (1) - import_contacts — Bulk-import contacts (JSON array, CSV, URL, storage). merge_strategy: 'merge' (default; tags UNION, attrs dee… ### Block List (11) - add_to_blacklist (not in default tools/list) — [Deprecated: use blacklist_contact_or_company.] Set a CRM contact or company blacklist flag. Company scope do… - add_to_block_list — Add a profile to do-not-contact block list (e.g. 'john-doe' or 'https://linkedin.com/in/john-doe'). Blocks al… - blacklist_contact_or_company (not in default tools/list) — Set a CRM blacklist flag. Company scope does NOT block direct outreach to company contacts; use add_to_block_… - check_block_list — Check a LinkedIn profile against the do-not-contact block list, or omit linkedin_url to list entries (default… - import_block_list — Bulk import profiles to the do-not-contact block list from a CSV or JSON array. Accepts URL strings or {linke… - import_data — Import contacts or blacklist entries from CSV or array. target='contacts' imports to contact DB; target='blac… - list_blacklist (not in default tools/list) — [Deprecated: use list_blacklisted_contacts_or_companies.] List CRM contacts or companies with a blacklist fla… - list_blacklisted_contacts_or_companies (not in default tools/list) — List CRM blacklist flags on contacts or companies. This does not read the do-not-contact list; use check_bloc… - remove_from_blacklist (not in default tools/list) — [Deprecated: use unblacklist_contact_or_company.] Clear a CRM contact or company blacklist flag. Company scop… - remove_from_block_list — Remove a profile from the do-not-contact block list. Allows outreach to resume for this profile. Accepts URL… - unblacklist_contact_or_company (not in default tools/list) — Clear a CRM blacklist flag. Company scope does not change per-person do-not-contact entries; use remove_from_… ### Companies (6) - get_company — Get a single company by company_id (e.g. 'uuid-here') or linkedin_company_id. Optionally include linked conta… - get_company_page_viewers — Get company page analytics (e.g. page views, visitor demographics) for the last 30 days. Requires organizatio… - get_company_profile — Get a company's LinkedIn page (e.g. 'microsoft' or 'urn:li:company:1035'). Cached 7 days. Returns description… - invite_to_follow_page — Invite connections to follow a company page (max 20/call, safety limit: 50/day). Requires you to be a page ad… - list_companies — Query and export companies with rich filtering. Filter by industry, headcount, location, tags, custom_attrs,… - upsert_company — Add or update a company (e.g. linkedin_company_id='12345'). Looks up by linkedin_company_id (preferred) or (n… ### Tags (5) - add_contact_tag — Tag a contact (e.g. name='vip') — creates the tag if it doesn't exist. One call upserts and links. Returns ta… - create_tag — Create a named tag (e.g. 'vip', 'warm-lead') with optional hex color for organizing contacts. User-scoped. Id… - delete_tag — Delete a tag (e.g. tag_id='abc123') and remove it from all contacts. Cannot be undone. Fails silently if tag… - list_tags — List all tags for this account (e.g. id, name, color). Returns empty array if no tags exist. Use tag_id in ad… - remove_contact_tag — Remove a tag (e.g. tag_id='abc123') from a contact. Does not delete the tag itself — only unlinks. Requires c… ### Notes (4) - add_note — Add a free-form note (e.g. 'Called re: Q3 deal') to a contact. Notes are user-scoped, timestamped. Fails if c… - delete_note — Delete a note (e.g. note_id='abc123'). Fails with note_not_found if the note does not exist or is not owned b… - list_notes — List notes for a contact, most recent first. Returns up to 50 notes. Returns empty array if no notes exist. F… - manage_notes (not in default tools/list) — Manage contact notes: action='add' (lookup + body; user-scoped, timestamped) or 'delete' (note_id; notes are… ### Custom Fields (7) - create_custom_field_definition — Define a typed custom field for contacts (e.g. score, tier). Returns invalid_kind error if kind is unknown. L… - delete_custom_field_definition — Delete a custom field definition (e.g. id from list_custom_field_definitions) and all its values. Returns not… - get_custom_field_values — Get all typed custom field values for a contact (e.g. score=90, tier=gold). Returns empty custom_fields array… - get_custom_fields (not in default tools/list) — Read custom fields. Returns all typed field definitions (id, name, kind like 'number', options, template_vari… - list_custom_field_definitions — List all typed custom field definitions. Returns empty array if none exist. Each entry includes id, name, kin… - manage_custom_fields (not in default tools/list) — Manage custom fields. action='create_definition' (name+kind[+options]), 'delete_definition' (id; removes the… - set_custom_field_value — Set a typed custom field value on a contact. Returns validation_error if value fails type check (e.g. non-num… ### Enrollment Policy (2) - get_enrollment_policy — Returns your enrollment policy defaults (8 toggles) and optionally a campaign effective merged policy. Toggle… - set_enrollment_policy — Update enrollment policy defaults or a campaign override. Omit fields to leave unchanged. campaign_id targets… ### Attendees (2) - list_chats_by_attendee — All 1:1 chats for an attendee. Pass a LinkedIn provider_id (e.g. 'ACoAABGDkeIB...'), the format the endpoint… - list_user_reactions — Reactions made by a user (provider_id e.g. 'ACoAA...', 1-100, default 20). Returns reaction type, post ID, ti… ### Writing Style (5) - get_content_context — Complete content dashboard in one call (zero API calls): writing style, recent posts, unanswered comments, dr… - get_writing_style — User's writing style guides for messaging, posting, and commenting (e.g. tone, structure, phrasing). Generate… - refresh_writing_style — Re-analyze writing style from recent posts and messages (e.g. after 30+ days). Returns 'processing' immediate… - set_style_examples — Provide 1-3 LinkedIn profiles to match posting style (e.g. 'garyvee'). Analyzes tone, structure, patterns. Re… - set_writing_style — Overwrite one or more writing-style guides (e.g. messaging_style) with custom prose. Any field passed replace… ### Account Settings (3) - get_account — Account status: daily limits, limit ranges (e.g. 15-25/day), message format, session health. verify_session:t… - manage_outreach_settings — Configure outreach: action='limits' (daily range), 'business_hours' (send window), 'message_format' (split/si… - update_account_settings — Update account settings (e.g. tracking_mode='all_activity'). permission_scope='core' (default) or 'full_acces… ### Sync (1) - trigger_sync — Nudge a sync for a contact or company (target='contact'|'company', id=UUID). Fires sync_requested webhook wit… ### Webhooks (6) - create_webhook — Create a webhook (e.g. 'https://myapp.com/hook'). URL must be HTTPS. Returns signing secret (save it). Fails… - delete_webhook — Delete a webhook (e.g. UUID from list_webhooks). Stops all deliveries and deletes attached subscriptions. Has… - get_webhook_deliveries — Recent delivery attempts for a webhook (1-50, default 20). Shows status, response codes, errors, retry schedu… - list_webhooks — List all webhooks configured for your account (webhook_id e.g. UUID). Shows URL, subscribed events, and enabl… - test_webhook — Send a test payload to a webhook (e.g. webhook_id UUID from list_webhooks). Returns delivery status code. Fai… - update_webhook — Update a webhook's URL, events, enabled status, or description. Pass webhook_id (e.g. 'xxxxxxxx-xxxx-xxxx-xxx… ### Event Subscriptions (3) - create_subscription — Route an event type to a webhook (e.g. event='message.received', webhook_id UUID from list_webhooks). Optiona… - delete_subscription — Delete an event subscription (e.g. UUID from list_subscriptions). Stops delivery for this subscription only.… - list_subscriptions — List event subscriptions (e.g. 'message.received'). Returns UUID, event type, filter, enabled, webhook_id. Re… ### API Keys (3) - create_api_key — Create a scoped API key (max 10/account). Raw key shown once — store securely. Scope: 'team', 'workspace', or… - list_api_keys — List API keys (metadata only: displayed prefix e.g. 'ws_abcdef123...', scope, permissions, usage_count). Raw… - revoke_api_key — Revoke exactly one API key by UUID or complete displayed prefix including '...' (e.g. 'ws_abcdef123...'). Par… ### Support (1) - contact_support — Contact support (max 5/hour). Subject max 200 chars, message max 5000 chars. Includes diagnostics automatical… ### Team (1) - manage_team — Team member workspace access (org admins). action='list' returns members with their scope + the org's workspa… ## Permission Scopes New accounts start on **core** scope (145 scope names). Upgrade to **full_access** for every callable tool. Advanced tools also need Advanced MCP tools turned on in Security settings. ### core (145 scope names) — default for all new accounts The lean MCP surface. Tools in core scope: - accept_content_suggestion - accept_suggested_label - add_lead - add_to_blacklist - add_to_block_list - apply_sequence_template - archive_campaign - batch_reply_comments - blacklist_contact_or_company - bulk_archive - cancel_invitation - cancel_reminder - cancel_scheduled_post - check_block_list - check_lead_status - comment_on_post - confirm_campaign_launch - contact_support - create_post - daily_recap - delete_campaign - delete_chat - delete_comment - delete_draft - delete_message - delete_post - delete_saved_search - dismiss_content_suggestion - download_attachment - edit_message - edit_my_profile - endorse_skills - engage_with_latest_post - follow_user - forward_message - get_account - get_activities - get_activity_analytics - get_analytics - get_briefing - get_cached_post_analytics - get_campaign - get_comment_reach - get_comment_status - get_company - get_company_page_viewers - get_company_profile - get_connections - get_contact - get_content_context - get_content_patterns - get_content_summary - get_feed - get_feed_research - get_followers - get_inbox_status - get_inbox_sync_status - get_inmail_balance - get_messages - get_network_analytics - get_outreach_history - get_post - get_post_analytics - get_profile - get_profile_viewers - get_search_parameters - get_search_results - get_social_selling_index - get_variant_stats - get_writing_style - import_block_list - import_contacts - import_data - invite_to_follow_page - list_blacklist - list_blacklisted_contacts_or_companies - list_chats_by_attendee - list_companies - list_contacts - list_conversations - list_drafts - list_invitations - list_labels - list_lists - list_post_comments - list_post_reactions - list_posts - list_reminders - list_saved_connections - list_saved_searches - list_scheduled_posts - list_sequence_templates - list_user_reactions - manage_connections - manage_lists - manage_outreach - manage_outreach_settings - manage_senders - manage_variants - mark_chat_read - mark_commitment_fulfilled - organize_conversation - preview_campaign_launch - publish_draft - react_to_message - react_to_post - refresh_writing_style - reject_suggested_label - remove_connection - remove_from_blacklist - remove_from_block_list - reply_to_comment - repost_post - respond_to_invitation - run_saved_search - save_connection - save_draft - save_sales_navigator_lead - save_search - schedule_message - search_companies - search_connections - search_leads - search_messages - search_people - search_posts - send_inmail - send_invitation - send_message - send_voice_message - set_style_examples - set_writing_style - sync_inbox - trigger_sync - unarchive_campaign - unblacklist_contact_or_company - unfollow_user - update_account_settings - update_draft - update_list - update_list_membership - upload_media - upsert_campaign - upsert_company - upsert_lead ### read_only (18 tools) — pure reads, no writes Safe surface for analytics dashboards, CRM integrations, and monitoring tools: - download_attachment - get_activities - get_company - get_company_page_viewers - get_contact - get_custom_field_values - get_custom_fields - get_enrollment_policy - get_followers - get_inmail_balance - get_social_selling_index - list_chats_by_attendee - list_companies - list_custom_field_definitions - list_notes - list_tags - list_user_reactions - preview_campaign_launch ### full_access — all 181 callable tools Full access allows every callable tool, including the ones not in the default tools/list. Advanced tools still need Advanced MCP tools turned on in Security settings. Webhooks, API keys, event subscriptions, warm-up controls, and raw analytics live here. ### How to switch scope ``` update_account_settings(permission_scope="full_access") ``` Then reconnect your MCP client (reload Claude, restart Cursor, etc.). The new scope takes effect on the next connection. ## Rate Limit Headers Every response includes: - `X-RateLimit-Limit` — daily call limit for this account - `X-RateLimit-Remaining` — calls remaining today - `X-RateLimit-Reset` — Unix timestamp when the limit resets (midnight UTC) Active paid subscriptions have no daily API call limit (the headers are omitted). While a subscription payment is past due, the account is limited to 50 API calls/day, counted per LinkedIn account across MCP, REST, and CLI, including background inbox and content sync. Updating the payment method at https://crispy.sh/dashboard/billing restores unlimited calls; upgrading does not. ## Recipes Machine-readable recipes: https://crispy.sh/recipes.md - Competitor Refugees: Find people who discuss a competing tool in public posts. Review each person, then send the connection requests you approve. https://crispy.sh/recipes/competitor-refugees - Warm Outreach: Like a prospect's latest post, then send a connection request that mentions it the next day. You approve each action. https://crispy.sh/recipes/warm-outreach - Conference Follow-Up: Match event attendees to LinkedIn profiles, launch an approved invite campaign that mentions the event, and follow up with a resource. https://crispy.sh/recipes/conference-follow-up - Inbox Triage: See which LinkedIn conversations need a reply, approve draft replies, and archive old threads in Crispy. https://crispy.sh/recipes/inbox-zero - Lead Qualifier: Check new connections against your ICP and tag the ones you approve as hot, warm, or cold. https://crispy.sh/recipes/lead-qualifier - Strategic Commenting: Find recent posts in your niche and comment on them. You approve every comment before it posts. https://crispy.sh/recipes/comment-engagement - Post and Engage: Draft a post with your writing style, publish it after you approve, then reply to comments the next day. https://crispy.sh/recipes/post-and-engage - LinkedIn to HubSpot: Read new LinkedIn connections and conversations with Crispy. Write only the items you approve to HubSpot through HubSpot's MCP server. https://crispy.sh/recipes/hubspot-sync - Weekly Performance Report: Build a weekly LinkedIn report with post performance, invitation and message totals, and campaign totals. https://crispy.sh/recipes/weekly-performance ## Links - Full reference: https://crispy.sh/llms-full.txt - Agent setup: https://crispy.sh/agent-setup.md - Docs: https://crispy.sh/docs - Playbooks Hub: https://crispy.sh/playbooks - Playbook: Triage incoming LinkedIn requests before the pitch arrives - https://crispy.sh/playbooks/incoming-requests - Guide — OpenAI dots: https://crispy.sh/docs/guides/dots - Guide — Grok Bot: https://crispy.sh/docs/guides/grok-bot - Article — connect LinkedIn to OpenAI dots: https://crispy.sh/blog/connect-linkedin-to-openai-dots - Article — connect LinkedIn to Grok Bot: https://crispy.sh/blog/connect-linkedin-to-grok-bot - Guide — post engagement campaigns: https://crispy.sh/docs/guides/post-engagement-campaign - Pricing: https://crispy.sh/pricing - LinkedIn MCP server: https://crispy.sh/linkedin-mcp-server - Official server question: https://crispy.sh/mcp/linkedin - MCP servers compared: https://crispy.sh/compare/mcp-servers - Integrations: https://crispy.sh/integrations - Setup guide: https://crispy.sh/integrations/claude - Setup guide: https://crispy.sh/integrations/claude-code - Setup guide: https://crispy.sh/integrations/chatgpt - Setup guide: https://crispy.sh/integrations/cursor - Setup guide: https://crispy.sh/integrations/codex - Setup guide: https://crispy.sh/integrations/n8n - Setup guide: https://crispy.sh/integrations/vscode - Setup guide: https://crispy.sh/integrations/windsurf - Setup guide: https://crispy.sh/integrations/jetbrains - Setup guide: https://crispy.sh/integrations/cline - Setup guide: https://crispy.sh/integrations/clay - Setup guide: https://crispy.sh/integrations/cowork - Setup guide: https://crispy.sh/integrations/hermes - Setup guide: https://crispy.sh/integrations/make - Setup guide: https://crispy.sh/integrations/zapier - Comparisons: https://crispy.sh/compare - Comparison, Crispy vs Expandi: https://crispy.sh/compare/expandi - Comparison, Crispy vs HeyReach: https://crispy.sh/compare/heyreach - Comparison, Crispy vs Dripify: https://crispy.sh/compare/dripify - Comparison, Crispy vs Lemlist: https://crispy.sh/compare/lemlist - Comparison, Crispy vs Taplio: https://crispy.sh/compare/taplio - Comparison, Crispy vs AuthoredUp: https://crispy.sh/compare/authoredup - Comparison, Crispy vs Kondo: https://crispy.sh/compare/kondo - Comparison, Crispy vs PhantomBuster: https://crispy.sh/compare/phantombuster - Comparison, Crispy vs Meet Alfred: https://crispy.sh/compare/meetalfred - Comparison, Crispy vs Waalaxy: https://crispy.sh/compare/waalaxy - Comparison, Crispy vs Closely: https://crispy.sh/compare/closely - Comparison, Crispy vs Dux-Soup: https://crispy.sh/compare/duxsoup - Comparison, Crispy vs Octopus CRM: https://crispy.sh/compare/octopuscrm - Comparison, Crispy vs Linked Helper: https://crispy.sh/compare/linkedhelper - Comparison, Crispy vs Skylead: https://crispy.sh/compare/skylead - Comparison, Crispy vs We-Connect: https://crispy.sh/compare/we-connect - Comparison, Crispy vs Zopto: https://crispy.sh/compare/zopto - Comparison, Crispy vs Aimfox: https://crispy.sh/compare/aimfox - Comparison, Crispy vs La Growth Machine: https://crispy.sh/compare/la-growth-machine - Dashboard: https://crispy.sh/dashboard - Sign up: https://crispy.sh/signup