Skip to main content
Glama

Server Details

Operate a real LinkedIn account from your AI agent. 52 tools for the inbox, invitations, network, profiles, Sales Navigator search in plain language, posts and engagement; six playbooks served as MCP prompts that preview before they write; daily quotas enforced server-side; structured errors; idempotent writes; signed webhooks when a prospect replies or a connection is accepted. LinkedIn only. 7-day trial, no card.

Ownership verified
Status
Healthy
Uptime
100.0% over the last 24 hours
Last Tested
Transport
Streamable HTTP · MCP 2024-11-05
URL
ChatGPT
–
Claude
–

TDQS

A3.9/5.0

Scored across 66 tools

Disambiguation4/5

Tools are grouped by clear domains (accounts, messaging, invitations, posts/comments, jobs, webhooks, Sales Navigator, scraping) and descriptions actively cross-reference near-neighbors (list_user_posts vs scrape_post, send_message vs salesnav_send_message, Reach jobs vs search_job_postings). A few pairs remain close enough to require a careful read — list_user_posts/list_page_posts/scrape_my_posts and get_home_feed/search_posts — but boundaries are stated rather than left implicit.

Naming Consistency4/5

Predominantly verb_noun snake_case with a consistent salesnav_ prefix for the Sales Navigator surface and stable verb semantics (list/get/scrape/create/update/delete). Minor deviations such as profile_viewers, reach_playbooks, scrape_my_posts (first-person) and the noun-only naming break the pattern slightly.

Tool Count2/5

66 tools is far beyond a comfortable agent surface and pushes well past the 25+ threshold, with many near-sibling tools (three post-listing variants, two inbox families, six job-management tools, five webhook tools). The domain is genuinely broad, but the set would benefit from consolidation or clearer tiering.

Completeness4/5

Coverage is deep and lifecycle-complete for most domains: full CRUD on jobs, scheduled posts and webhook endpoints, plus account, quota, messaging, invitation, comment, search and Sales Navigator operations. Gaps are minor — no unlike_post (like_post is idempotent only), no deletion of published posts, and no tool to list followers or manage pages themselves.

Publisher details

Operator
Kanbox · Publisher source
Operator website
https://www.reachmcp.com
Vendor relationship
First-party
Documentation
Not available
Trust center
Not available
Restrictions
Need a paid plan to be run

Available Tools

66 tools
accept_invitationB
Idempotent
Inspect

Accept a pending received connection request. Use to accept a received invitation (invitation_secret from list_received_invitations). Ask the user which ones.

Inputs: account_id (required), linkedin_id_or_url (required), idempotency_key. Returns: accepted

archive_conversationA
Idempotent
Inspect

Archive or unarchive a LinkedIn conversation. Set archive=false to unarchive. conversation_linkedin_id is the conversation_id returned by list_conversations; with page_id, a conversation of that company page's inbox. Housekeeping in the classic inbox or, with page_id, a company page's inbox; reversible (archive=false). Not a delete, see delete_conversation.

Inputs: account_id (required), conversation_linkedin_id (required), archive, page_id, +1 more. Returns: archived

cancel_jobA
DestructiveIdempotent
Inspect

Cancel a job: its pending items will never run. Items already executed are unaffected. Cannot be undone. Irreversible for the pending items (executed ones stay); confirm with the user. To stop temporarily use pause_job.

Inputs: job_id (required), idempotency_key. Returns: id, items, label, action, +11 more

comment_postAInspect

Post a comment on a LinkedIn post on behalf of the connected account. Use to write a new top-level comment on a post; to answer an existing comment use reply_comment. Counts against the daily comments quota; the text is public, preview it with the user.

Inputs: text (required), account_id (required), post_url_or_urn (required), page_id, +2 more. Returns: mentions, commented, mentions_not_applied

create_jobAInspect

Queue a batch of LinkedIn actions (messages, invitations, profile visits or comments) that Reach executes on its own over the following hours or days: spread across the account's activity window (set per account with update_account_quotas; default 09:00-18:00, Monday to Friday, in the account's timezone; overridable per job) with human-like gaps, never beyond the daily quota of the action. Returns immediately with a job_id and the planned schedule; the agent does not have to stay alive. The job pauses by itself when a quota is reached or the account disconnects and resumes when it can; webhooks job.started / job.progress / job.paused / job.completed report what happens. Use it for anything above a handful of actions instead of calling send_message or send_invitation in a loop. Always show the user the items before queuing them. Use for any batch above a handful of actions; returns at once with the schedule. Show the items to the user first. Not for a single action, call the direct tool.

Inputs: items (required), action (required), account_id (required), days, +5 more. Returns: id, items, label, action, +11 more

create_multi_photoAInspect

Create a LinkedIn multi-photo object from a list of digitalmediaAsset URNs. Returns an identifierUrn (urn:li:fsd_multiPhoto:…) to pass to create_post. author_urn is the urn:li:fsd_profile:… of the connected account (get it from get_me); for a company page post pass page_id instead. Use after uploading two or more images with upload_media_from_url; returns the single URN create_post takes. Not for one image.

Inputs: account_id (required), media_urns (required), page_id, alt_texts, +2 more. Returns: identifier_urn

create_postAInspect

Create or schedule a LinkedIn post, optionally with a media attachment. For a single image pass a urn:li:digitalmediaAsset:… URN; for multiple images pass a urn:li:fsd_multiPhoto:… URN from create_multi_photo. Set scheduled_at (Unix ms) to schedule; omit it to publish immediately. Publishes now or schedules (scheduled_time); counts against the daily posts quota. Show the user the full text before calling.

Inputs: text (required), account_id (required), page_id, media_urn, +4 more. Returns: resource_key

create_webhook_endpointAInspect

Register a URL to be called when something happens on LinkedIn, so an agent or an n8n/Make workflow can react instead of polling. Returns the signing secret ONCE; deliveries carry 'Reach-Signature: t=,v1=<hex HMAC-SHA256(secret, t + '.' + body)>'. Events: message.received, page.message.received, connection.new, account.status_changed, quota.threshold_reached, quota.reached, or '*' for all. Omit account_ids to subscribe for every account of the user. https only. Use when the user wants to react to a reply, a new connection, a quota alert or a job event from n8n, Make or their own code; needs an https URL they control. Not for the model to call itself.

Inputs: url (required), events (required), account_ids, description, +1 more. Returns: id, url, note, events, +8 more

decline_invitationA
DestructiveIdempotent
Inspect

Decline/ignore a pending received connection request. Use to ignore a received invitation; the sender is not notified. Not for invitations the account sent, see withdraw_invitation.

Inputs: account_id (required), linkedin_id_or_url (required), idempotency_key. Returns: declined

delete_accountA
DestructiveIdempotent
Inspect

Delete a LinkedIn account by account_id. Also clears invitation references before deletion. Removes the account from Reach only (LinkedIn is untouched); irreversible, requires the user's explicit confirmation. Not for disconnecting temporarily.

Inputs: account_id (required), idempotency_key. Returns: deleted, account_id

delete_commentA
DestructiveIdempotent
Inspect

Delete a LinkedIn comment: one the account wrote, or one written as a company page it administers. LinkedIn decides from the session's rights and refuses the others. Irreversible; confirm with the user and show the comment first. For a comment the account or one of its pages wrote; LinkedIn refuses comments of other people. No quota.

Inputs: account_id (required), comment_urn (required), idempotency_key. Returns: deleted, comment_urn

delete_conversationA
DestructiveIdempotent
Inspect

Permanently delete a LinkedIn conversation. conversation_linkedin_id is the conversation_id returned by list_conversations. Irreversible for this account; confirm with the user. To hide a thread without losing it use archive_conversation.

Inputs: account_id (required), conversation_linkedin_id (required), idempotency_key. Returns: deleted

delete_scheduled_postA
DestructiveIdempotent
Inspect

Delete a scheduled LinkedIn post. post_urn is the URN returned by list_scheduled_posts (e.g. urn:li:ugcPost:…). Only for posts still scheduled; irreversible, confirm with the user. A published post cannot be deleted through Reach.

Inputs: post_urn (required), account_id (required), idempotency_key. Returns: deleted, post_urn

delete_webhook_endpointA
DestructiveIdempotent
Inspect

Delete a webhook endpoint and its delivery history. Irreversible (the delivery history goes too); confirm with the user. To pause deliveries use update_webhook_endpoint with is_active=false.

Inputs: endpoint_id (required), idempotency_key. Returns: deleted, endpoint_id

follow_memberA
Idempotent
Inspect

Follow or unfollow a LinkedIn member without connecting. Set follow=false to unfollow. Use to follow someone's posts without a connection request (no quota); to connect use send_invitation.

Inputs: account_id (required), linkedin_id_or_url (required), follow, idempotency_key. Returns: following

get_account_quotasA
Read-onlyIdempotent
Inspect

Get the quotas configuration and usage counters for a LinkedIn account. Use before a batch to know what is left today; use update_account_quotas to change limits or the activity window.

Inputs: account_id (required). Returns: id, window, timezone, window_end, +28 more

get_account_request_logsA
Read-onlyIdempotent
Inspect

Get request logs for a LinkedIn account with optional filtering by request_type and pagination using limit/offset. Use to debug a failing account (each LinkedIn call with its status); for totals use get_account_request_logs_stats.

Inputs: account_id (required), limit, offset, request_type. Returns: result

get_account_request_logs_statsA
Read-onlyIdempotent
Inspect

Get aggregated request-log statistics for a LinkedIn account, grouped by day, week, or month, with optional action and date-range filters. Use for the weekly review or to size an account's activity; for individual calls use get_account_request_logs.

Inputs: account_id (required), end_date, group_by, start_date, +1 more. Returns: buckets, end_date, group_by, start_date, +2 more

get_home_feedA
Read-onlyIdempotent
Inspect

Read the account's own LinkedIn home feed, as on linkedin.com/feed: recent posts from its connections and the people and pages it follows, plus posts LinkedIn shows because a connection reacted or commented (feed_reason). Returns up to 10 posts per page with the text, the engagement and the author (name, headline, member id, relationship degree). Ads and suggestion carousels are left out. First call with start=0; for the next page pass back next_start and pagination_token. Use to find posts to engage with among the people the account already knows or follows (connections, followed creators and pages); for a topic across all of LinkedIn use search_posts. Then like_post or comment_post with post_urn. The feed is ranked by LinkedIn and changes between calls, so read it page by page from start=0 rather than keeping offsets. One LinkedIn call per page; keep to a few pages per run. Read-only.

Inputs: account_id (required), start, pagination_token. Returns: One page of the account's LinkedIn home feed.

get_invitation_statusA
Read-onlyIdempotent
Inspect

Get the connection and invitation status between the connected account and a LinkedIn member. Returns is_connection, invitation_type (SENT/PENDING/WITHDRAWN/REFUSED). Use before send_invitation or send_message to know the relationship (connected, invitation pending, refused). Read-only, cheap.

Inputs: account_id (required), linkedin_id_or_url (required). Returns: Connection / invitation status between the connected account and a LinkedIn mem…

get_jobA
Read-onlyIdempotent
Inspect

One job with its status, totals, next execution time and every item (scheduled time, result or error). Use to report progress or to see why an item failed; for an overview of all jobs use list_jobs.

Inputs: job_id (required). Returns: id, items, label, action, +11 more

get_meA
Read-onlyIdempotent
Inspect

Call LinkedIn Voyager /me for an account through the stored proxy/cookies and return the normalized profile (same fields as Kanbox uses from /me). Use to confirm which LinkedIn profile an account is (name, headline, premium); one LinkedIn call. Not needed before every action.

Inputs: account_id (required). Returns: Profile fields extracted from Voyager ``GET /voyager/api/me``, matching what Ka…

like_postA
Idempotent
Inspect

Like a LinkedIn post on behalf of the connected account. Pass the post URL, slug, or URN. Use for a light touch on a post; idempotent on LinkedIn's side. Counts against the daily reactions quota.

Inputs: account_id (required), post_url_or_urn (required), page_id, idempotency_key. Returns: liked

list_accountsA
Read-onlyIdempotent
Inspect

Return LinkedIn accounts accessible with the provided API key. If the key is restricted, only allowed account IDs are returned. Use first in every session to get the account_id the other tools need; ask which account when several are listed.

Inputs: no named parameters. Returns: result

list_connectionsA
Read-onlyIdempotent
Inspect

List LinkedIn 1st-degree connections for an account (Voyager dash connections), paged with start/count — same payload as GET /api/linkedin/{account_id}/connections. Use to walk the account's own 1st-degree network; for pending invitations use list_sent_invitations or list_received_invitations; for search use scrape_search.

Inputs: account_id (required), count, start. Returns: Paged list of connections (Voyager dash connections API).

list_conversation_messagesA
Read-onlyIdempotent
Inspect

List messages in a LinkedIn conversation via Voyager /messaging/conversations/{id}/events (Kanbox get_conversation_messages), with optional created_before paging — same as GET /api/linkedin/{account_id}/conversations/{conversation_linkedin_id}/messages. Do not call this in a loop to wait for replies: the same read is refused if repeated within 60s, inbox reads are capped at 300 per account per day, and polling gets LinkedIn accounts restricted. Subscribe a webhook to message.received instead. Use after list_conversations to read a thread before replying; the conversation_linkedin_id comes from list_conversations.

Inputs: account_id (required), conversation_linkedin_id (required), page_id, created_before. Returns: Messages for a conversation (Kanbox ``get_conversation_messages`` + public API…

list_conversationsA
Read-onlyIdempotent
Inspect

List LinkedIn messenger conversations (Voyager Messaging GraphQL), with optional archived, unread, starred filters and next_cursor paging — same as GET /api/linkedin/{account_id}/conversations. Each item returns conversation_id (the thread id — use this as conversation_linkedin_id when fetching messages or replying) and recipient_linkedin_id (the peer's fsd_profile id — use this as recipient_linkedin_id when sending a new message). last_message_from_me tells who wrote the last message: false means the other side spoke last and a reply is owed (last_message_sender_name says who, in group chats). since (ISO date or datetime) keeps only conversations active since then and drops next_cursor once older ones are reached, e.g. 'messages since Monday'. Do not call this in a loop to wait for replies: the same read is refused if repeated within 60s, inbox reads are capped at 300 per account per day, and polling gets LinkedIn accounts restricted. Subscribe a webhook to message.received instead. Use for the classic LinkedIn inbox (this is the one that matters in 95% of cases); Sales Navigator threads are separate, see salesnav_list_messaging_threads.

Inputs: account_id (required), count, since, unread, +4 more. Returns: Paged messenger list (Voyager Messaging GraphQL).

list_jobsA
Read-onlyIdempotent
Inspect

Jobs of this user, newest first, without their items. Filter by account or status (scheduled, running, paused, completed, cancelled). Use to find running or paused jobs before creating a new one on the same account; details and items are in get_job.

Inputs: limit, status, account_id. Returns: count, items

list_managed_pagesA
Read-onlyIdempotent
Inspect

List the LinkedIn company pages the account administers: page_id, name, URL, the account's admin roles, what those roles allow (post, comment, react, delete_post, read_messages, send_messages, read_activity) and whether page messaging is on. Pass a page_id to create_post, upload_media_from_url, create_multi_photo, comment_post, reply_comment or like_post to act as that page instead of the member, to list_conversations, list_conversation_messages or send_message for the page inbox, and to list_page_activity for the comments and mentions it received. Use when the user wants to act as a company page (post, comment, like as the page) to get its page_id and check the role allows it; empty when the account administers no page. Cached ten minutes. Read-only.

Inputs: account_id (required), refresh. Returns: pages

list_notificationsA
Read-onlyIdempotent
Inspect

List the account's LinkedIn notifications, as on its Notifications page, newest first: mentions, comments and reactions on its posts, birthdays, work anniversaries, job changes, invitations, profile views. filter picks the tab: all (default), mentions, my_posts or jobs. Each item has card_type (LinkedIn's own name), kind (mention, comment, reaction, birthday, work_anniversary, job_change, invitation, reshare, job, profile_view or other), the line LinkedIn shows, published_at, read, url, actor_name and actor_linkedin_id (or actor_company_id for a page), and when it is about a post post_urn and post_text; when it is about a comment (a mention in a comment, a comment on the account's post) comment_urn and comment_text: pass comment_urn to reply_comment to answer in that thread. Reading does not mark them seen. One LinkedIn call per page; paged with start/next_start. Do not poll it: subscribe a webhook or check once a day. Use for the daily check: what happened to the account (mentions, comments, birthdays, work anniversaries, job changes); for every liker and commenter of its own posts use scrape_my_posts. Read-only.

Inputs: account_id (required), count, kinds, since, +2 more. Returns: items, next_start

list_page_activityA
Read-onlyIdempotent
Inspect

List a company page's activity, as in the page admin's Activity tab, newest first: comments on the page's posts, mentions, reshares, visitor digests. Each item has card_type (COMMENT, MENTION, PAGE_ACTIVITY_NEW_VISITORS…), the line LinkedIn shows, read, and for a comment its comment_urn, comment_text, the post (post_urn, post_text) and who acted: actor_name, actor_type (member or company) and actor_linkedin_id or actor_company_id. Pass comment_urn to reply_comment or like_post with the same page_id to answer as the page. Paged with start/next_start. Use to see what happened on a company page (who commented, mentioned or reshared) and find comments to answer; then reply_comment or like_post with comment_urn and the same page_id. Reading does not mark the cards seen. One LinkedIn call per page. Read-only.

Inputs: page_id (required), account_id (required), count, start, +1 more. Returns: items, next_start, unseen_count

list_page_postsA
Read-onlyIdempotent
Inspect

List a company page's own posts, newest first, as in the page admin's Posts tab, each with its stats: impressions, reactions, comments, shares, clicks, engagements, engagement_rate, click_through_rate and video_views (organic only), plus post_urn, post_url, post_text, post_type, published_at and the admin who wrote it (author_linkedin_id). post_urn goes as is to scrape_post (who engaged), comment_post or like_post with the same page_id. Paged with start/next_start; total is the page's post count. Use for how a company page's posts perform (impressions, engagement rate, clicks) or to pick a page post to engage on; then scrape_post with post_urn for who engaged. One LinkedIn call per page of posts. Read-only.

Inputs: page_id (required), account_id (required), count, start. Returns: posts, total, next_start

list_received_invitationsA
Read-onlyIdempotent
Inspect

List pending connection invitations received by the account (with invitation_secret to accept them). Use to triage invitations waiting for the account (then accept_invitation or decline_invitation); for those the account sent use list_sent_invitations.

Inputs: account_id (required), count, start. Returns: Paged list of invitations.

list_scheduled_postsA
Read-onlyIdempotent
Inspect

List scheduled LinkedIn posts for an account, paged. Returns post URNs, text content, and scheduled publish times. Use to see what is queued to publish; published posts are not listed here, use list_user_posts for those.

Inputs: account_id (required), count, start. Returns: Paged list of scheduled posts.

list_sent_invitationsA
Read-onlyIdempotent
Inspect

List pending connection invitations sent by the account that have not yet been accepted. Use to find invitations the account sent that are still pending (then withdraw_invitation if stale); for received ones use list_received_invitations.

Inputs: account_id (required), count, start. Returns: Paged list of invitations.

list_user_postsA
Read-onlyIdempotent
Inspect

Get recent posts published by a LinkedIn member (via profileUpdatesV2). Paginate with start/count. Use to read what a member published recently (their content, not who engaged); to get likers and commenters of a post use scrape_post. Read-only.

Inputs: account_id (required), linkedin_id_or_url (required), count, start. Returns: Recent posts published by a LinkedIn member.

list_webhook_endpointsA
Read-onlyIdempotent
Inspect

List the webhooks registered for this user: the URLs Reach calls when a conversation gets a new message (message.received), a company page the account administers gets one (page.message.received), the account gains a 1st-degree connection (connection.new), an account changes connection state (account.status_changed) or a daily quota is close to or at its limit (quota.threshold_reached, quota.reached). Read-only. Use to see where Reach already posts events and which events; also returns the event catalogue.

Inputs: no named parameters. Returns: endpoints, event_types

pause_jobA
Idempotent
Inspect

Pause a job: nothing more runs until resume_job is called. Reach also pauses a job by itself when a quota is reached or the account disconnects, and resumes those on its own. Use to hold a job the user is unsure about; resume_job re-plans it. Reach pauses on quota or disconnection by itself.

Inputs: job_id (required), idempotency_key. Returns: id, items, label, action, +11 more

profile_viewersA
Read-onlyIdempotent
Inspect

Get the list of members who recently viewed the account's profile (requires LinkedIn Premium). Use for the 'who viewed my profile' list (needs LinkedIn Premium; empty or an error otherwise). Read-only.

Inputs: account_id (required). Returns: total, viewers

reach_playbooksA
Read-onlyIdempotent
Inspect

START HERE. Return the catalogue of ready-made LinkedIn playbooks — what this server can actually accomplish, as named workflows rather than raw endpoints. Each entry carries its tool sequence, its prerequisites, and the full instructions to run it. Call this first when the user asks what you can do with their LinkedIn account, or when a request is vague. Pass playbook_id to get one playbook's instructions and then follow them. Use first for a vague request or 'what can you do'; not needed when the user names a precise action.

Inputs: playbook_id, include_instructions. Returns: playbook, playbooks, how_to_use

react_messageA
Idempotent
Inspect

Add or remove an emoji reaction on a LinkedIn message. Set react=false to remove the reaction. message_urn is the message_urn returned by list_conversation_messages (e.g. urn:li:msg_message:(urn:li:fsd_profile:…,123456789)). emoji is a Unicode emoji character (e.g. 👍, ❤️). Pass conversation_linkedin_id to also mark the conversation as read. Use for an emoji reaction on one message inside a thread (message_urn from list_conversation_messages); to reply in words use send_message.

Inputs: emoji (required), account_id (required), message_urn (required), react, +2 more. Returns: emoji, reacted

remove_connectionA
DestructiveIdempotent
Inspect

Remove an existing 1st-degree connection. Irreversible on LinkedIn (the person is not notified); confirm with the user. Not for pending invitations, see withdraw_invitation.

Inputs: account_id (required), linkedin_id_or_url (required), idempotency_key. Returns: removed

reply_commentAInspect

Post a reply to an existing LinkedIn comment. Pass the comment_id (URN) returned by scrape_post as comment_urn — it is used directly as threadUrn. Use to answer a specific comment (comment_urn from scrape_my_posts or scrape_post); for a new comment on the post itself use comment_post. Counts against the daily comments quota.

Inputs: text (required), account_id (required), comment_urn (required), page_id, +2 more. Returns: replied, mentions, mentions_not_applied

resume_jobA
Idempotent
Inspect

Resume a paused job. Its pending items are re-planned from now, inside the window and the remaining quota. Use after a manual pause; jobs paused for quota or disconnection resume on their own and need no call.

Inputs: job_id (required), idempotency_key. Returns: id, items, label, action, +11 more

salesnav_build_search_urlA
Read-onlyIdempotent
Inspect

Build a Sales Navigator people-search URL from structured lead-search filters, using as many filters as the request implies. RESOLUTION: industry accepts numeric ids OR names (auto-resolved via the taxonomy); region accepts numeric REGION ids OR location names (auto-resolved via geo typeahead — needs account_id). If a name is ambiguous, the tool returns {needs_disambiguation:[...]} with candidates instead of a URL — re-call with the chosen id. BOOLEAN: keywords and current_title accept LinkedIn boolean syntax (AND/OR/NOT, quotes, parentheses). EXCLUSION: any list value may be an object {id|name, exclude:true}. Set execute=true to also run the first page of results (reuses the live search) and return leads. Use after resolving the ids to get the Sales Navigator search URL, then scrape_search on it. Builds a URL only, no LinkedIn call.

Inputs: count, group, start, region, +26 more. Returns: url, items, query, start, +3 more

salesnav_list_messaging_threadsA
Read-onlyIdempotent
Inspect

List Sales Navigator messaging threads (salesApiMessagingThreads). Requires the account to have a Sales Navigator subscription (has_sales_nav). Returns threads with messages and participant profiles. Paginate by passing next_page_starts_at from the previous response as page_starts_at. Use only when the account has Sales Navigator and the user asks about that inbox; the classic inbox is list_conversations.

Inputs: account_id (required), count, filter, page_starts_at. Returns: count, items, total, filter, +2 more

salesnav_list_thread_messagesA
Read-onlyIdempotent
Inspect

Fetch a Sales Navigator thread with all its messages and participant profiles (salesApiMessagingThreads/{id}). Requires a Sales Navigator subscription. Use the thread id returned by salesnav_list_messaging_threads. message_count controls how many (most recent) messages are returned; compare with total_message_count in the response to know if more exist. Use to read one Sales Navigator thread (thread id from salesnav_list_messaging_threads); classic inbox threads use list_conversation_messages.

Inputs: thread_id (required), account_id (required), message_count. Returns: id, archived, messages, participants, +4 more

salesnav_resolve_industryA
Read-onlyIdempotent
Inspect

Resolve an industry name (any language) to its LinkedIn Industry Code(s) using the bundled Industry Codes V2 taxonomy (offline, no LinkedIn call). Returns ranked candidates with id, label and hierarchy path. Use the returned id(s) in salesnav_build_search_url's industry filter. Call once per industry term; if several candidates look plausible, pick by the hierarchy path. Use for industries only (offline taxonomy, any language, no LinkedIn call); for locations, companies, schools and titles use salesnav_typeahead.

Inputs: query (required), limit. Returns: query, candidates

salesnav_send_messageAInspect

Send a message in an existing Sales Navigator thread (salesApiMessageActions). Requires the account to have a Sales Navigator subscription. Use the thread id returned by salesnav_list_messaging_threads. Use only to reply inside an existing Sales Navigator thread; everything else (new messages, classic inbox) goes through send_message. Counts against the daily messages quota.

Inputs: text (required), thread_id (required), account_id (required), copy_to_crm, +1 more. Returns: success, thread_id, message_id, status_code

salesnav_typeaheadA
Read-onlyIdempotent
Inspect

Live Sales Navigator autocomplete for facets whose ids are dynamic. Use type='geo' to resolve a location to its REGION id (the only reliable way — LinkedIn region ids are not enumerable), and type='company' / 'school' / 'title' for those entity facets. Returns [{id, displayValue, headline}]. Feed the chosen id into salesnav_build_search_url (region / current_company / school / current_title). Requires a connected account. Use for facets whose ids are dynamic (geo, company, school, title…); for industries use salesnav_resolve_industry. One LinkedIn call per lookup.

Inputs: query (required), account_id (required), type, count. Returns: type, query, results

scrape_my_postsA
Read-onlyIdempotent
Inspect

Fetch likers and/or commenters for the account's own recent posts. since_hours limits to posts published in the last N hours (default 24). Use for engagement on the account's own posts (likers, commenters, comment URNs for reply_comment); for someone else's post use scrape_post.

Inputs: account_id (required), liked, comments, max_posts, +1 more. Returns: Engagers across recent posts published by the connected account.

scrape_postA
Read-onlyIdempotent
Inspect

Fetch likers and/or commenters for a LinkedIn post. Pass the full post URL or slug. Set liked=true and/or comments=true. Use to get the people who liked or commented on one post you have the URL of; for the account's own recent posts use scrape_my_posts. Counts against the imports quota.

Inputs: account_id (required), post_id_or_url (required), liked, comments. Returns: Aggregated likers and commenters for a LinkedIn post.

scrape_profileA
Read-onlyIdempotent
Inspect

Fetch a complete LinkedIn profile (name, headline, company, experience, skills…). Pass a LinkedIn URL, vanity name, internal member ID, or Sales Navigator lead URL. Uses SalesNav API when available for richer data. Use to read one person in depth (experience, skills, company); costly, one LinkedIn call per profile. For a list of people use scrape_search; to just check the relationship use get_invitation_status.

Inputs: account_id (required), linkedin_id_or_url (required). Returns: Normalized profile from a LinkedIn, Sales Navigator, or Recruiter search result…

search_job_postingsA
Read-onlyIdempotent
Inspect

Search LinkedIn job postings, like the Jobs tab of LinkedIn: which companies are hiring for a role right now. Returns up to 25 postings per page with the title, the hiring company (name and numeric company_id), location, workplace type, salary when shown and listing date. Keywords take LinkedIn's syntax: "exact phrase", OR, AND, NOT. Filter by location, recency, workplace type, job type, experience level and company; paginate with start (0, 25, 50…). These are LinkedIn job offers, not Reach jobs (create_job / list_jobs). Use to find companies hiring for a role (a buying signal: a company hiring SDRs needs sales tooling, one hiring a Head of Data will buy data tools); then salesnav_build_search_url with current_company=[company_id] for the people who decide, or scrape_search on a classic people search filtered on that company. Not for Reach batch jobs (list_jobs). One LinkedIn call per page of up to 25 postings, each counted against the daily job_searches quota (default 50 pages); keep to a few pages. Read-only.

Inputs: account_id (required), start, geo_id, sort_by, +7 more. Returns: One page of LinkedIn job posting search results.

search_postsA
Read-onlyIdempotent
Inspect

Search LinkedIn posts by keywords, like the Posts tab of LinkedIn search: who is talking about a topic right now. Returns about 10 posts per page with the text, the engagement and the author (name, headline, member id, relationship degree). Keywords take LinkedIn's syntax: "exact phrase", OR, AND, NOT. Filter by recency, author job title, author company or industry, and content type; paginate with start (0, 10, 20…). Use to find who is posting about a topic (buying signals, hiring, pain points, competitors) and reach the authors; then scrape_post on a result for the people who engaged, scrape_profile on an author to qualify, send_invitation with author_linkedin_id. One LinkedIn call per page of ~10 posts; keep to a few pages. Read-only.

Inputs: keywords (required), account_id (required), start, sort_by, +5 more. Returns: One page of LinkedIn post search results.

send_invitationAInspect

Send a connection request to a LinkedIn member. Optional message capped at 300 chars (premium) or 200 chars. Use to connect with someone not yet a 1st-degree connection; check get_invitation_status first to avoid duplicates. Counts against the daily invitations quota; for more than ten use create_job. To follow without connecting use follow_member.

Inputs: account_id (required), linkedin_id_or_url (required), message, idempotency_key. Returns: connected

send_messageAInspect

Send a LinkedIn DM via Voyager createMessage: use conversation_linkedin_id for an existing thread or recipient_linkedin_id for a new DM. Use for the classic inbox: conversation_linkedin_id to reply in a thread, recipient_linkedin_id for a new one (1st-degree connections, or InMail). Counts against the daily messages quota; for a Sales Navigator thread use salesnav_send_message; for more than ten messages use create_job.

Inputs: account_id (required), text, page_id, idempotency_key, +3 more. Returns: success, status_code

star_conversationA
Idempotent
Inspect

Star or unstar a LinkedIn conversation. Set star=false to remove the star. conversation_linkedin_id is the conversation_id returned by list_conversations; with page_id, a conversation of that company page's inbox. Housekeeping in the classic inbox or, with page_id, a company page's inbox; reversible (star=false). No quota.

Inputs: account_id (required), conversation_linkedin_id (required), star, page_id, +1 more. Returns: starred

test_webhook_endpointA
Read-onlyIdempotent
Inspect

Send a signed 'ping' event to a webhook endpoint right now and report the HTTP status it answered. Use to check a receiver end to end (signed ping, HTTP status back); does not deliver real events.

Inputs: endpoint_id (required). Returns: ok, response_status, response_excerpt

update_account_quotasA
Idempotent
Inspect

Update one or more quota configuration fields for a LinkedIn account, and its activity window (the hours, days and timezone jobs run in when a job does not set its own). Only provided fields are updated. Changes limits and the activity window for jobs; does not reset today's counters. Raising a limit is the user's decision, ask first.

Inputs: account_id (required), timezone, window_end, window_days, +15 more. Returns: quotas, window, updated, account_id

update_scheduled_postA
Idempotent
Inspect

Update the text and/or scheduled time of an existing scheduled LinkedIn post. post_urn is the URN returned by list_scheduled_posts (e.g. urn:li:ugcPost:…). At least one of text or scheduled_at must be provided. Only for posts still scheduled (post_urn from list_scheduled_posts); a published post cannot be edited through Reach.

Inputs: post_urn (required), account_id (required), text, scheduled_at, +1 more. Returns: updated, post_urn

update_webhook_endpointA
Idempotent
Inspect

Change a webhook's url, events, account_ids, description or is_active. Only provided fields change. Re-enabling clears the failure counter. Use to change events, accounts or url, or to re-enable an endpoint disabled after failures; to stop deliveries temporarily set is_active=false rather than deleting.

Inputs: endpoint_id (required), url, events, is_active, +3 more. Returns: id, url, events, is_active, +6 more

upload_media_from_urlAInspect

Upload an image to LinkedIn by fetching it from a public URL. Returns a digitalmediaAsset URN (urn:li:digitalmediaAsset:…) that can be passed to create_post (single image) or create_multi_photo (multi-photo). Use this instead of upload-media when working as an agent — no binary file upload needed. Use before create_post when the post needs an image; returns the URN create_post expects. For several images, then create_multi_photo.

Inputs: image_url (required), account_id (required), page_id, idempotency_key, +1 more. Returns: urn

visit_profileA
Idempotent
Inspect

Simulate a profile view, triggering a 'viewed your profile' notification for the target member. Use to leave a 'viewed your profile' trace as a soft touch before an invitation; counts against the daily visits quota. Not needed to read a profile, use scrape_profile.

Inputs: account_id (required), linkedin_id_or_url (required), idempotency_key. Returns: visited

withdraw_invitationA
DestructiveIdempotent
Inspect

Withdraw a pending sent connection request. Use to cancel a pending sent invitation (from list_sent_invitations), for example one older than three weeks. Not for received invitations, see decline_invitation.

Inputs: account_id (required), linkedin_id_or_url (required), idempotency_key. Returns: withdrawn

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    Related MCP Servers

    • A
      license
      Not graded
      quality
      C
      maintenance
      Remote MCP server that lets AI assistants read tracked competitive intelligence — competitor news, reviews, website changes, social posts and ads — and act on it by managing projects, competitors, battle cards, reports and canvases. Every answer carries a source and a date, and write actions only publish when explicitly shared.
      MIT
    • A
      license
      A
      quality
      D
      maintenance
      Enables brand visibility monitoring across major AI platforms like ChatGPT, Claude, Gemini, and Perplexity. It allows users to track visibility scores, analyze competitor data, and receive actionable insights to improve AI-generated brand recommendations.
      16
      9 npm
      1
      MIT
    • A
      license
      Not graded
      quality
      C
      maintenance
      Browse IndustryLens's published competitive-intelligence reports and head-to-head competitor comparisons from any AI agent — real, source-backed data.
      MIT
    Try in Browser

    Glama MCP Gateway

    Add one secure layer between your agents and this server.

    Resources