Reach MCP
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.
- Status
- Healthy
- Uptime
- 100.0% over the last 24 hours
- Last Tested
- Transport
- Streamable HTTP · MCP 2024-11-05
- URL
- ChatGPT
- –
- Claude
- –
TDQS
Scored across 66 tools
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.
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.
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.
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 toolsaccept_invitationBIdempotentInspect
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_conversationAIdempotentInspect
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_jobADestructiveIdempotentInspect
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_invitationADestructiveIdempotentInspect
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_accountADestructiveIdempotentInspect
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_commentADestructiveIdempotentInspect
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_conversationADestructiveIdempotentInspect
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_postADestructiveIdempotentInspect
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_endpointADestructiveIdempotentInspect
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_memberAIdempotentInspect
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_quotasARead-onlyIdempotentInspect
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_logsARead-onlyIdempotentInspect
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_statsARead-onlyIdempotentInspect
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_feedARead-onlyIdempotentInspect
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_statusARead-onlyIdempotentInspect
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_jobARead-onlyIdempotentInspect
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_meARead-onlyIdempotentInspect
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_postAIdempotentInspect
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_accountsARead-onlyIdempotentInspect
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_connectionsARead-onlyIdempotentInspect
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_messagesARead-onlyIdempotentInspect
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_conversationsARead-onlyIdempotentInspect
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_jobsARead-onlyIdempotentInspect
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_pagesARead-onlyIdempotentInspect
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_notificationsARead-onlyIdempotentInspect
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_activityARead-onlyIdempotentInspect
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_postsARead-onlyIdempotentInspect
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_invitationsARead-onlyIdempotentInspect
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_postsARead-onlyIdempotentInspect
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_invitationsARead-onlyIdempotentInspect
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_postsARead-onlyIdempotentInspect
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_endpointsARead-onlyIdempotentInspect
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_jobAIdempotentInspect
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_viewersARead-onlyIdempotentInspect
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_playbooksARead-onlyIdempotentInspect
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_messageAIdempotentInspect
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_connectionADestructiveIdempotentInspect
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_jobAIdempotentInspect
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
scrape_my_postsARead-onlyIdempotentInspect
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_postARead-onlyIdempotentInspect
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_profileARead-onlyIdempotentInspect
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…
scrape_searchARead-onlyIdempotentInspect
Run one page of a LinkedIn, Sales Navigator, or Recruiter search and return normalized profile rows. Pass the full search URL. Use start+count to paginate (count ignored for standard LinkedIn, fixed ~10/page). Use to run a search URL you have (LinkedIn, Sales Navigator, Recruiter) one page at a time; build the Sales Navigator URL with salesnav_build_search_url first. Counts against the imports quota.
Inputs: url (required), account_id (required), count, start. Returns: Paged results from a LinkedIn, Sales Navigator, or Recruiter search URL.
search_job_postingsARead-onlyIdempotentInspect
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_postsARead-onlyIdempotentInspect
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_conversationAIdempotentInspect
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_endpointARead-onlyIdempotentInspect
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_quotasAIdempotentInspect
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_postAIdempotentInspect
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_endpointAIdempotentInspect
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_profileAIdempotentInspect
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_invitationADestructiveIdempotentInspect
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
- AlicenseNot gradedqualityCmaintenanceRemote 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
- AlicenseCqualityCmaintenanceCompetitor Monitor AI - MCP server providing AI-powered tools and automation by MEOK AI Labs112 npm29 PyPIMIT
- AlicenseAqualityDmaintenanceEnables 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.169 npm1MIT

industrylens-mcpofficial
AlicenseNot gradedqualityCmaintenanceBrowse IndustryLens's published competitive-intelligence reports and head-to-head competitor comparisons from any AI agent — real, source-backed data.MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.