Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, get in touch and we’ll put it right.

Reach MCP — LinkedIn for AI agents

REMOTE · APP.REACHMCP.COM · SCANNED SEP 20

LinkedIn for AI agents: inbox, invitations, Sales Navigator search, posts. Quotas and webhooks.

Available components

+4 this week 67 Trust /100
Trust breakdown (7 categories)

How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. How we score → Why this is hard to score →

Endpoint Security57
Transport & Reachability100
Schema Quality & AI Usability80
  • 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).Pass
  • AI-judged instruction clarity (excellent).Pass
  • Context-footprint check failed: tool/resource definitions use about 8304 tokens (~159/item across 52 items; 52 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
  • Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management33
  • Stability observed for 10 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage100
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 100% of tool parameters carry a description.Pass
  • Structured output schemas are declared (100% of tools); any adoption earns full credit.Pass
Tool Safety98
  • No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
  • 9 of 10 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation; "test_webhook_endpoint" implies "send" and declares readOnlyHint instead, contradicting what its own name says it does. See how to fix → Partial
  • An AI judge read all 52 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities20
  • Spec-recency check failed: implements MCP spec 2024-11-05; the latest is 2026-07-28. See how to fix → Fail
Install

How do I install the Reach MCP — LinkedIn for AI agents server?

Reach MCP — LinkedIn for AI agents is a hosted endpoint at https://app.reachmcp.com/mcp, so there is nothing to install locally. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

remote · app.reachmcp.com

# add to Claude Code
claude mcp add --transport http com-reachmcp-linkedin 'https://app.reachmcp.com/mcp'
// .cursor/mcp.json
{
  "mcpServers": {
    "com-reachmcp-linkedin": {
      "url": "https://app.reachmcp.com/mcp"
    }
  }
}
// .vscode/mcp.json
{
  "servers": {
    "com-reachmcp-linkedin": {
      "type": "http",
      "url": "https://app.reachmcp.com/mcp"
    }
  }
}
# ~/.codex/config.toml
[mcp_servers.com-reachmcp-linkedin]
url = "https://app.reachmcp.com/mcp"
// opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "com-reachmcp-linkedin": {
      "type": "remote",
      "url": "https://app.reachmcp.com/mcp",
      "enabled": true
    }
  }
}
# add to OpenClaw
openclaw mcp add com-reachmcp-linkedin --url 'https://app.reachmcp.com/mcp' --transport streamable-http
# ~/.hermes/config.yaml
mcp_servers:
  com-reachmcp-linkedin:
    url: "https://app.reachmcp.com/mcp"
// ~/.netclaw/config/netclaw.json
{
  "McpServers": {
    "com-reachmcp-linkedin": {
      "Transport": "http",
      "Url": "https://app.reachmcp.com/mcp"
    }
  }
}
# add to Vellum
assistant mcp add com-reachmcp-linkedin -t streamable-http -u 'https://app.reachmcp.com/mcp'
// mcp.json
{
  "mcpServers": {
    "com-reachmcp-linkedin": {
      "type": "http",
      "url": "https://app.reachmcp.com/mcp"
    }
  }
}

The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.

Changelog

Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.

  • 20 Sept 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 30 to 33. That category is still filling its 30-day observation window: 9 days of observed history at the previous scan, 10 at this one. The score rises as the window fills, whether or not the server changes.

  • 18 Sept 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 23 to 27. That category is still filling its 30-day observation window: 7 days of observed history at the previous scan, 8 at this one. The score rises as the window fills, whether or not the server changes.

  • 16 Sept 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 17 to 20. That category is still filling its 30-day observation window: 5 days of observed history at the previous scan, 6 at this one. The score rises as the window fills, whether or not the server changes.

  • 14 Sept 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 10 to 13. That category is still filling its 30-day observation window: 3 days of observed history at the previous scan, 4 at this one. The score rises as the window fills, whether or not the server changes.

  • 12 Sept 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 3 to 7. That category is still filling its 30-day observation window: 1 days of observed history at the previous scan, 2 at this one. The score rises as the window fills, whether or not the server changes.

  • 11 Sept 26 0
    • Stability: unverified → 0.03 functional
  • 10 Sept 26 62

    First indexed and scored.

Diagnostics

Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.

Captured 20 Sept 2026 · Probed https://app.reachmcp.com/mcp

TLS valid

Negotiated TLS 1.3 with TLS_AES_128_GCM_SHA256 .

Subject Issuer Valid from Valid until Key Signature Serial
CN=app.reachmcp.com CN=WE1,O=Google Trust Services,C=US 3 Sept 2026 2 Dec 2026 ECDSA 256 ECDSA-SHA256 3e202e71561ad9bb13a015f932479ec5
SANs: app.reachmcp.com
CN=WE1,O=Google Trust Services,C=US (CA) CN=GTS Root R4,O=Google Trust Services LLC,C=US 13 Dec 2023 20 Feb 2029 ECDSA 256 ECDSA-SHA384 7ff31977972c224a76155d13b6d685e3
CN=GTS Root R4,O=Google Trust Services LLC,C=US (CA) CN=GlobalSign Root CA,OU=Root CA,O=GlobalSign nv-sa,C=BE 15 Nov 2023 28 Jan 2028 ECDSA 384 SHA256-RSA 7fe530bf331343bedd821610493d8a1b

Background: What to check on a remote MCP endpoint →

DNSSEC insecure

Validation of app.reachmcp.com. Not signed

Zone DS Keys Algorithms Outcome
. trust_anchor 20326, 38696 8, 8 Verified
com. present 19718 13 Verified
reachmcp.com. absent Unsigned (proven) parent-signed NSEC/NSEC3 proves an unsigned delegation
Authentication No authorisation required

The endpoint answered without asking for a token. Anyone who knows the URL can reach it.

Result No authorisation required
HTTP status 200

Background: How OAuth 2.1 works in the 2026 MCP spec →

Transports 2 probes
Transport URL Outcome Status Location
streamable-http https://app.reachmcp.com/mcp Verified 200
http (plaintext) http://app.reachmcp.com/mcp HTTPS enforced 301 https://app.reachmcp.com/mcp
MCP tools · 52 exposed · ~8,304 tokens

The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →

Tool Tokens
accept_invitation ~146

Accept a pending received connection request.

NameTypeReqDescription
account_idintegeryesReach id of the LinkedIn account to act on, from list_accounts.
idempotency_keystringOptional. A key you choose (a UUID is fine) that names this exact call. If you retry with the same key and the same arguments, the first call's result is returned and nothing is done twice on LinkedI…
linkedin_id_or_urlstringyesThe LinkedIn member: profile URL, vanity name (the part after /in/), Sales Navigator URL, or internal member id.
NameTypeReqDescription
acceptedboolean

No examples provided.

archive_conversation ~170

Archive or unarchive a LinkedIn conversation. Set archive=false to unarchive. conversation_linkedin_id is the conversation_id returned by list_conversations.

NameTypeReqDescription
account_idintegeryesReach id of the LinkedIn account to act on, from list_accounts.
archivebooleanTrue to archive, False to unarchive.
conversation_linkedin_idstringyesConversation (thread) id, as returned by list_conversations.
idempotency_keystringOptional. A key you choose (a UUID is fine) that names this exact call. If you retry with the same key and the same arguments, the first call's result is returned and nothing is done twice on LinkedI…
NameTypeReqDescription
archivedbooleanCurrent archived state

No examples provided.

comment_post ~147

Post a comment on a LinkedIn post on behalf of the connected account.

NameTypeReqDescription
account_idintegeryesReach id of the LinkedIn account to act on, from list_accounts.
idempotency_keystringOptional. A key you choose (a UUID is fine) that names this exact call. If you retry with the same key and the same arguments, the first call's result is returned and nothing is done twice on LinkedI…
post_url_or_urnstringyesLinkedIn post URL, slug, or URN.
textstringyesComment text.
NameTypeReqDescription
commentedboolean

No examples provided.

connect ~158

Send a connection request to a LinkedIn member. Optional message capped at 300 chars (premium) or 200 chars.

NameTypeReqDescription
account_idintegeryesReach id of the LinkedIn account to act on, from list_accounts.
idempotency_keystringOptional. A key you choose (a UUID is fine) that names this exact call. If you retry with the same key and the same arguments, the first call's result is returned and nothing is done twice on LinkedI…
linkedin_id_or_urlstringyesLinkedIn member ID, vanity name, or profile URL.
messagestringOptional personalised invitation note.
NameTypeReqDescription
connectedbooleanInvitation sent

No examples provided.

create_multi_photo ~228

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).

NameTypeReqDescription
account_idintegeryesReach id of the LinkedIn account to act on, from list_accounts.
alt_textsarrayOptional alt text per image (same order as media_urns).
author_urnstringyesOnly messages from this author URN.
idempotency_keystringOptional. A key you choose (a UUID is fine) that names this exact call. If you retry with the same key and the same arguments, the first call's result is returned and nothing is done twice on LinkedI…
media_urnsarrayyesList of urn:li:digitalmediaAsset:… URNs.
NameTypeReqDescription
identifier_urnstringURN to pass as media_urn of create_post

No examples provided.

create_post ~256

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.

NameTypeReqDescription
account_idintegeryesReach id of the LinkedIn account to act on, from list_accounts.
allowed_commenters_scopestring'ALL' or 'CONNECTIONS_ONLY'.
idempotency_keystringOptional. A key you choose (a UUID is fine) that names this exact call. If you retry with the same key and the same arguments, the first call's result is returned and nothing is done twice on LinkedI…
media_urnstringOptional media URN to attach.
scheduled_atintegerScheduled publish time in Unix milliseconds. Omit to publish now.
textstringyesPlain text to send or post.
visibilitystring'ANYONE' or 'CONNECTIONS_ONLY'.
NameTypeReqDescription
resource_keystringIdentifier of the created or scheduled post

No examples provided.

create_webhook_endpoint ~250

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=<unix>,v1=<hex HMAC-SHA256(secret, t + '.' + body)>'. Events: 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.

NameTypeReqDescription
account_idsarrayOptional: only these LinkedIn account ids.
descriptionstringFree-text label for your own reference.
eventsarrayyesEvent types, or ['*'].
idempotency_keystringOptional. A key you choose (a UUID is fine) that names this exact call. If you retry with the same key and the same arguments, the first call's result is returned and nothing is done twice on LinkedI…
urlstringyeshttps URL that accepts a JSON POST.
NameTypeReqDescription
account_idsarray|null
consecutive_failuresinteger
created_atstring
descriptionstring
disabled_reasonstring
eventsarray
idinteger
is_activeboolean
last_delivery_atstring
notestring
secretstringSigning secret, returned once
urlstring

No examples provided.

decline_invitation ~149

Decline/ignore a pending received connection request.

NameTypeReqDescription
account_idintegeryesReach id of the LinkedIn account to act on, from list_accounts.
idempotency_keystringOptional. A key you choose (a UUID is fine) that names this exact call. If you retry with the same key and the same arguments, the first call's result is returned and nothing is done twice on LinkedI…
linkedin_id_or_urlstringyesThe LinkedIn member: profile URL, vanity name (the part after /in/), Sales Navigator URL, or internal member id.
NameTypeReqDescription
declinedboolean

No examples provided.

delete_account ~118

Delete a LinkedIn account by account_id. Also clears invitation references before deletion.

NameTypeReqDescription
account_idintegeryesReach id of the LinkedIn account to act on, from list_accounts.
idempotency_keystringOptional. A key you choose (a UUID is fine) that names this exact call. If you retry with the same key and the same arguments, the first call's result is returned and nothing is done twice on LinkedI…
NameTypeReqDescription
account_idinteger
deletedboolean

No examples provided.

delete_conversation ~147

Permanently delete a LinkedIn conversation. conversation_linkedin_id is the conversation_id returned by list_conversations.

NameTypeReqDescription
account_idintegeryesReach id of the LinkedIn account to act on, from list_accounts.
conversation_linkedin_idstringyesConversation (thread) id, as returned by list_conversations.
idempotency_keystringOptional. A key you choose (a UUID is fine) that names this exact call. If you retry with the same key and the same arguments, the first call's result is returned and nothing is done twice on LinkedI…
NameTypeReqDescription
deletedboolean

No examples provided.

delete_scheduled_post ~163

Delete a scheduled LinkedIn post. post_urn is the URN returned by list_scheduled_posts (e.g. urn:li:ugcPost:…).

NameTypeReqDescription
account_idintegeryesReach id of the LinkedIn account to act on, from list_accounts.
idempotency_keystringOptional. A key you choose (a UUID is fine) that names this exact call. If you retry with the same key and the same arguments, the first call's result is returned and nothing is done twice on LinkedI…
post_urnstringyesURN of the scheduled post (urn:li:…), from list_scheduled_posts.
NameTypeReqDescription
deletedboolean
post_urnstring

No examples provided.

delete_webhook_endpoint ~110

Delete a webhook endpoint and its delivery history.

NameTypeReqDescription
endpoint_idintegeryesWebhook endpoint id, from list_webhook_endpoints.
idempotency_keystringOptional. A key you choose (a UUID is fine) that names this exact call. If you retry with the same key and the same arguments, the first call's result is returned and nothing is done twice on LinkedI…
NameTypeReqDescription
deletedboolean
endpoint_idinteger

No examples provided.

follow ~170

Follow or unfollow a LinkedIn member without connecting. Set follow=false to unfollow.

NameTypeReqDescription
account_idintegeryesReach id of the LinkedIn account to act on, from list_accounts.
followbooleanTrue to follow, False to unfollow.
idempotency_keystringOptional. A key you choose (a UUID is fine) that names this exact call. If you retry with the same key and the same arguments, the first call's result is returned and nothing is done twice on LinkedI…
linkedin_id_or_urlstringyesThe LinkedIn member: profile URL, vanity name (the part after /in/), Sales Navigator URL, or internal member id.
NameTypeReqDescription
followingbooleanCurrent follow state

No examples provided.

get_account_quotas ~46

Get the quotas configuration and usage counters for a LinkedIn account.

NameTypeReqDescription
account_idintegeryesReach id of the LinkedIn account to act on, from list_accounts.
NameTypeReqDescription
daily_comments_confinteger
daily_comments_usedinteger
daily_imports_recruiter_confinteger
daily_imports_recruiter_usedinteger
daily_imports_salesnav_confinteger
daily_imports_salesnav_usedinteger
daily_imports_standard_confinteger
daily_imports_standard_usedinteger
daily_invitations_confinteger
daily_invitations_usedinteger
daily_messages_confinteger
daily_messages_usedinteger
daily_posts_confinteger
daily_posts_usedinteger
daily_reactions_confinteger
daily_reactions_usedinteger
daily_visits_confinteger
daily_visits_usedinteger
idinteger

No examples provided.

get_account_request_logs ~103

Get request logs for a LinkedIn account with optional filtering by request_type and pagination using limit/offset.

NameTypeReqDescription
account_idintegeryesReach id of the LinkedIn account to act on, from list_accounts.
limitintegerMaximum number of rows to return.
offsetintegerNumber of rows to skip.
request_typestringOnly rows of this request type (for example send_message, list_conversations, connect).
NameTypeReqDescription
resultarrayRequest log rows, newest first.

No examples provided.

get_account_request_logs_stats ~150

Get aggregated request-log statistics for a LinkedIn account, grouped by day, week, or month, with optional action and date-range filters.

NameTypeReqDescription
account_idintegeryesReach id of the LinkedIn account to act on, from list_accounts.
end_datestringEnd of the period, ISO 8601 (default: now).
group_bystringBucket size for the statistics: day, week or month.
request_typestringOnly rows of this request type (for example send_message, list_conversations, connect).
start_datestringStart of the period, ISO 8601 (default: 30 days ago).
NameTypeReqDescription
available_actionsarray
bucketsarray
end_datestring
group_bystring
request_type
start_datestring

No examples provided.

get_me ~61

Call LinkedIn Voyager /me for an account through the stored proxy/cookies and return the normalized profile (same fields as Kanbox uses from /me).

NameTypeReqDescription
account_idintegeryesReach id of the LinkedIn account to act on, from list_accounts.
NameTypeReqDescription
firstnamestring
headlinestring
is_premiumboolean
lastnamestring
linkedin_idMiniProfile id (entityUrn suffix after fs_miniProfile:).
linkedin_plain_idNumeric member id from objectUrn.
linkedin_public_idPublic / vanity identifier.
pictureProfile picture URL derived from VectorImage artifacts.

No examples provided.

invitation_status ~101

Get the connection and invitation status between the connected account and a LinkedIn member. Returns is_connection, invitation_type (SENT/PENDING/WITHDRAWN/REFUSED).

NameTypeReqDescription
account_idintegeryesReach id of the LinkedIn account to act on, from list_accounts.
linkedin_id_or_urlstringyesThe LinkedIn member: profile URL, vanity name (the part after /in/), Sales Navigator URL, or internal member id.
NameTypeReqDescription
degreeConnection distance (1, 2 or 3).
invitation_idInvitation URN, if any.
invitation_secretShared secret, required to accept a received invitation.
invitation_type'SENT' (pending sent), 'PENDING' (received, awaiting acceptance), 'WITHDRAWN', or 'REFUSED'.
is_connectionbooleanTrue if the member is a 1st-degree connection.

No examples provided.

like_post ~150

Like a LinkedIn post on behalf of the connected account. Pass the post URL, slug, or URN.

NameTypeReqDescription
account_idintegeryesReach id of the LinkedIn account to act on, from list_accounts.
idempotency_keystringOptional. A key you choose (a UUID is fine) that names this exact call. If you retry with the same key and the same arguments, the first call's result is returned and nothing is done twice on LinkedI…
post_url_or_urnstringyesLinkedIn post URL, slug, or urn:li:activity:….
NameTypeReqDescription
likedboolean

No examples provided.

list_accounts ~32

Return LinkedIn accounts accessible with the provided API key. If the key is restricted, only allowed account IDs are returned.

Input schema present but exposes no named parameters.

NameTypeReqDescription
resultarrayConnected LinkedIn accounts visible to this key.

No examples provided.

list_connections ~89

List LinkedIn 1st-degree connections for an account (Voyager dash connections), paged with start/count — same payload as GET /api/linkedin/{account_id}/connections.

NameTypeReqDescription
account_idintegeryesReach id of the LinkedIn account to act on, from list_accounts.
countintegerPage size.
startintegerPagination offset, 0-based.
NameTypeReqDescription
countintegerRequested page size.
itemsarray
next_startIf set, use as the ``start`` query param for the next page (Kanbox-style paging).
startintegerOffset used for this request.
totalTotal connections reported by LinkedIn ``paging.total``.

No examples provided.

list_conversation_messages ~134

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.

NameTypeReqDescription
account_idintegeryesReach id of the LinkedIn account to act on, from list_accounts.
conversation_linkedin_idstringyesConversation (thread) id, as returned by list_conversations.
created_beforestringOnly messages created before this Unix timestamp in milliseconds, to page back in time.
NameTypeReqDescription
conversation_linkedin_idstringKanbox ``Conversation.linkedin_id`` / conversation key.
has_morebooleanTrue when LinkedIn likely has older events (page size 20).
messagesarray
next_created_beforePass as ``created_before`` to fetch the next (older) page.
total_countintegerNumber of messages in this response.

No examples provided.

list_conversations ~181

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).

NameTypeReqDescription
account_idintegeryesReach id of the LinkedIn account to act on, from list_accounts.
archivedbooleanOnly archived conversations.
countintegerPage size.
next_cursorstringCursor returned by the previous page; omit for the first page.
starredbooleanOnly starred conversations.
unreadbooleanOnly conversations with unread messages.
NameTypeReqDescription
archivedbooleanMatches query: archived folder (``category:ARCHIVE``) when not unread.
countintegerRequested page size (LinkedIn typically caps at 25).
itemsarray
next_cursorPass as ``next_cursor`` for the following page when present.
starredbooleanMatches query: starred folder or client filter when combined.
unreadbooleanMatches query: unread filter (search query with ``read:false``).

No examples provided.

list_received_invitations ~75

List pending connection invitations received by the account (with invitation_secret to accept them).

NameTypeReqDescription
account_idintegeryesReach id of the LinkedIn account to act on, from list_accounts.
countintegerPage size (max 100).
startintegerPagination offset, 0-based.
NameTypeReqDescription
countinteger
invitationsarray
startinteger
totalinteger

No examples provided.

list_scheduled_posts ~79

List scheduled LinkedIn posts for an account, paged. Returns post URNs, text content, and scheduled publish times.

NameTypeReqDescription
account_idintegeryesReach id of the LinkedIn account to act on, from list_accounts.
countintegerPage size.
startintegerPagination offset, 0-based.
NameTypeReqDescription
countinteger
postsarray
startinteger
totalTotal number of scheduled posts.

No examples provided.

list_sent_invitations ~74

List pending connection invitations sent by the account that have not yet been accepted.

NameTypeReqDescription
account_idintegeryesReach id of the LinkedIn account to act on, from list_accounts.
countintegerPage size (max 100).
startintegerPagination offset, 0-based.
NameTypeReqDescription
countinteger
invitationsarray
startinteger
totalinteger

No examples provided.

list_webhook_endpoints ~83

List the webhooks registered for this user: the URLs Reach calls when a conversation gets a new message (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.

Input schema present but exposes no named parameters.

NameTypeReqDescription
endpointsarray
event_typesobject

No examples provided.

profile_viewers ~49

Get the list of members who recently viewed the account's profile (requires LinkedIn Premium).

NameTypeReqDescription
account_idintegeryesReach id of the LinkedIn account to act on, from list_accounts.
NameTypeReqDescription
totalinteger
viewersarray

No examples provided.

reach_playbooks ~142

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.

NameTypeReqDescription
include_instructionsbooleanAlso return the full instruction text of every playbook (longer output).
playbook_idstringId of one playbook from the catalogue, to get its full instructions.
NameTypeReqDescription
how_to_usestring
playbookobject
playbooksarray

No examples provided.

react_message ~258

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.

NameTypeReqDescription
account_idintegeryesReach id of the LinkedIn account to act on, from list_accounts.
conversation_linkedin_idstringConversation ID — when provided the conversation is marked as read.
emojistringyesUnicode emoji character (e.g. 👍, ❤️).
idempotency_keystringOptional. A key you choose (a UUID is fine) that names this exact call. If you retry with the same key and the same arguments, the first call's result is returned and nothing is done twice on LinkedI…
message_urnstringyesFull message URN to react to.
reactbooleanTrue to add the reaction, False to remove it.
NameTypeReqDescription
emojistring
reactedboolean

No examples provided.

remove_connection ~147

Remove an existing 1st-degree connection.

NameTypeReqDescription
account_idintegeryesReach id of the LinkedIn account to act on, from list_accounts.
idempotency_keystringOptional. A key you choose (a UUID is fine) that names this exact call. If you retry with the same key and the same arguments, the first call's result is returned and nothing is done twice on LinkedI…
linkedin_id_or_urlstringyesThe LinkedIn member: profile URL, vanity name (the part after /in/), Sales Navigator URL, or internal member id.
NameTypeReqDescription
removedboolean

No examples provided.

reply_comment ~169

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.

NameTypeReqDescription
account_idintegeryesReach id of the LinkedIn account to act on, from list_accounts.
comment_urnstringyesURN of the comment to reply to (comment_id from scrape-post).
idempotency_keystringOptional. A key you choose (a UUID is fine) that names this exact call. If you retry with the same key and the same arguments, the first call's result is returned and nothing is done twice on LinkedI…
textstringyesReply text.
NameTypeReqDescription
repliedboolean

No examples provided.

salesnav_build_search_url ~935

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.

NameTypeReqDescription
account_idintegerRequired when passing location/industry NAMES or execute=true.
company_headcountarrayCOMPANY_HEADCOUNT codes: A=Self-employed B=1-10 C=11-50 D=51-200 E=201-500 F=501-1000 G=1001-5000 H=5001-10000 I=10001+.
company_typearrayCOMPANY_TYPE: C=Public P=Privately Held N=Non Profit D=Educational S=Partnership E=Self-Employed O=Self Owned G=Government.
countintegerPage size.
current_companyarrayResolved COMPANY ids (salesnav_typeahead type=company).
current_titlestringCurrent job title; free text + boolean (e.g. '(CTO OR "VP Engineering") NOT interim').
executebooleanAlso run the first results page and return leads.
first_namestringFirst name filter.
follows_your_companybooleanOnly people who follow your company page.
functionarrayFUNCTION 1-26: 1 Accounting 4 Business Dev 8 Engineering 10 Finance 12 HR 13 IT 15 Marketing 18 Operations 19 Product 25 Sales 26 Support (etc.).
grouparrayLinkedIn groups: names or ids.
industryarrayIndustry ids (use salesnav_resolve_industry) or names to auto-resolve. Items may be {id|name, exclude}.
keywordsstringGlobal keyword search; supports boolean operators.
last_namestringLast name filter.
past_colleaguebooleanOnly past colleagues.
past_companyarrayPast companies: names or ids; add exclude:true to exclude one.
past_titlestringBoolean search on past job titles.
posted_on_linkedinbooleanOnly people who posted on LinkedIn in the last 30 days.
profile_languagearrayISO 639-1 codes: en fr es de it pt nl ...
recently_changed_jobsbooleanOnly people who changed jobs in the last 90 days.
regionarrayREGION ids (use salesnav_typeahead type=geo) or location names to auto-resolve. Items may be {id|name, exclude}.
relationshiparrayRELATIONSHIP: F=1st S=2nd A=Group members O=3rd+.
schoolarrayResolved SCHOOL ids.
seniority_levelarraySENIORITY: 320 Owner/Partner 310 CXO 300 VP 220 Director 210 Exp. Manager 200 Entry Manager 130 Strategic 120 Senior 110 Entry 100 Trainee.
startintegerPagination offset, 0-based.
viewed_your_profilebooleanOnly people who viewed your profile recently.
with_shared_experiencesbooleanOnly people with shared experiences (school, company, group).
years_at_current_companyarray1=<1y 2=1-2y 3=3-5y 4=6-10y 5=>10y.
years_in_current_positionarray1=<1y 2=1-2y 3=3-5y 4=6-10y 5=>10y.
years_of_experiencearray1=<1y 2=1-2y 3=3-5y 4=6-10y 5=>10y.
NameTypeReqDescription
applied_filtersarray
itemsarrayFirst page of results when execute=true
needs_disambiguationarrayPresent instead of url when a name matched several ids
querystring
startinteger
totalinteger
urlstringSales Navigator people-search URL

No examples provided.

salesnav_list_messaging_threads ~127

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.

NameTypeReqDescription
account_idintegeryesReach id of the LinkedIn account to act on, from list_accounts.
countintegerThreads per page.
filterstringConversation folder.
page_starts_atintegerPagination cursor — next_page_starts_at from the previous response.
NameTypeReqDescription
countinteger
filterstringFilter used: INBOX or ARCHIVE.
itemsarray
next_page_starts_atPass as page_starts_at to fetch the next (older) page. None when there are no more results.
page_starts_atCursor passed in the request (None for first page).
totalTotal number of threads matching the filter.

No examples provided.

salesnav_list_thread_messages ~127

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.

NameTypeReqDescription
account_idintegeryesReach id of the LinkedIn account to act on, from list_accounts.
message_countintegerNumber of most-recent messages to return.
thread_idstringyesSales Navigator thread ID.
NameTypeReqDescription
archivedboolean
idstringSales Navigator thread ID.
messagesarray
next_page_starts_atUnix ms timestamp — value from the oldest thread, used as page_starts_at cursor.
participantsarray
restrictionsarray
total_message_countinteger
unread_countinteger

No examples provided.

salesnav_resolve_industry ~130

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.

NameTypeReqDescription
limitintegerMaximum number of rows to return.
querystringyesIndustry name to look up, e.g. 'software', 'banque', 'real estate'.
NameTypeReqDescription
candidatesarray
querystring

No examples provided.

salesnav_send_message ~180

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.

NameTypeReqDescription
account_idintegeryesReach id of the LinkedIn account to act on, from list_accounts.
copy_to_crmbooleanCopy message to CRM.
idempotency_keystringOptional. A key you choose (a UUID is fine) that names this exact call. If you retry with the same key and the same arguments, the first call's result is returned and nothing is done twice on LinkedI…
textstringyesMessage body (plain text).
thread_idstringyesSales Navigator thread ID.
NameTypeReqDescription
message_id
status_codeinteger
successboolean
thread_id

No examples provided.

salesnav_typeahead ~174

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.

NameTypeReqDescription
account_idintegeryesReach id of the LinkedIn account to act on, from list_accounts.
countintegerPage size.
querystringyesText to autocomplete, e.g. 'Paris', 'Google', 'HEC'.
typestringFacet to autocomplete. 'geo' -> region ids.
NameTypeReqDescription
querystring
resultsarray
typestring

No examples provided.

scrape_my_posts ~125

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).

NameTypeReqDescription
account_idintegeryesReach id of the LinkedIn account to act on, from list_accounts.
commentsbooleanInclude the people who commented, with their comment text.
likedbooleanInclude the people who liked.
max_postsintegerMax posts to process (max 20).
since_hoursintegerOnly posts from the last N hours (max 720).
NameTypeReqDescription
postsarray
total_postsinteger

No examples provided.

scrape_post ~93

Fetch likers and/or commenters for a LinkedIn post. Pass the full post URL or slug. Set liked=true and/or comments=true.

NameTypeReqDescription
account_idintegeryesReach id of the LinkedIn account to act on, from list_accounts.
commentsbooleanInclude commenters.
likedbooleanInclude likers.
post_id_or_urlstringyesLinkedIn post URL or slug.
NameTypeReqDescription
itemsarray
post_idstring
total_commentsinteger
total_likesinteger

No examples provided.

scrape_profile ~102

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.

NameTypeReqDescription
account_idintegeryesReach id of the LinkedIn account to act on, from list_accounts.
linkedin_id_or_urlstringyesLinkedIn profile URL, vanity name, Sales Navigator URL, or internal member ID.
NameTypeReqDescription
companyCurrent company name.
company_description
company_employee_count
company_employee_range
company_idLinkedIn company ID.
company_industry
company_linkedinLinkedIn company page URL.
company_location
company_logo
company_specialties
company_type
company_website
company_year_founded
connections
degreeNetwork degree: 1, 2, or 3.
firstname
full_nameFull name as returned by LinkedIn (standard search only).
headline
industry
is_open_profile
is_opentowork
is_premium
jobCurrent job title.
job_description
languages
lastname
linkedin_idstringProfile ID (fsd_profile or ts_profile suffix).
linkedin_plain_idNumeric member ID (objectUrn suffix).
linkedin_public_idVanity URL slug (/in/<slug>).
location
month_companyTenure at current company (months).
month_positionTenure at current position (months).
pictureProfile picture URL.
profile_urlPublic LinkedIn profile URL.
salesnavigator_urlSales Navigator profile URL (SalesNav searches only).
skills
startmonth_position
startyear_position
summary
year_companyTenure at current company (years).
year_positionTenure at current position (years).

No examples provided.

scrape_search ~123

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).

NameTypeReqDescription
account_idintegeryesReach id of the LinkedIn account to act on, from list_accounts.
countintegerPage size (max 25). Ignored for standard LinkedIn.
startintegerPagination offset.
urlstringyesFull LinkedIn / SalesNav / Recruiter search URL.
NameTypeReqDescription
countintegerRequested page size.
itemsarray
next_startPass as ``start`` for the next page when present.
startintegerOffset used for this request.
totalTotal results reported by LinkedIn.

No examples provided.

send_message ~235

Send a LinkedIn DM via Voyager createMessage: use conversation_linkedin_id for an existing thread or recipient_linkedin_id for a new DM.

NameTypeReqDescription
account_idintegeryesReach id of the LinkedIn account to act on, from list_accounts.
conversation_linkedin_idstringConversation (thread) id, as returned by list_conversations.
idempotency_keystringOptional. A key you choose (a UUID is fine) that names this exact call. If you retry with the same key and the same arguments, the first call's result is returned and nothing is done twice on LinkedI…
in_mail_premiumbooleanSend as InMail to someone outside the network (premium accounts); requires recipient_linkedin_id.
recipient_linkedin_idstringRecipient profile id (fsd_profile id) to start a new conversation; from list_conversations or scrape_profile. Omit when replying in an existing conversation.
textstringPlain text to send or post.
NameTypeReqDescription
status_codeintegerHTTP status from LinkedIn (e.g. 201 on success).
successboolean

No examples provided.

star_conversation ~171

Star or unstar a LinkedIn conversation. Set star=false to remove the star. conversation_linkedin_id is the conversation_id returned by list_conversations.

NameTypeReqDescription
account_idintegeryesReach id of the LinkedIn account to act on, from list_accounts.
conversation_linkedin_idstringyesConversation (thread) id, as returned by list_conversations.
idempotency_keystringOptional. A key you choose (a UUID is fine) that names this exact call. If you retry with the same key and the same arguments, the first call's result is returned and nothing is done twice on LinkedI…
starbooleanTrue to star, False to unstar.
NameTypeReqDescription
starredbooleanCurrent starred state

No examples provided.

test_webhook_endpoint ~50

Send a signed 'ping' event to a webhook endpoint right now and report the HTTP status it answered.

NameTypeReqDescription
endpoint_idintegeryesWebhook endpoint id, from list_webhook_endpoints.
NameTypeReqDescription
okboolean
response_excerptstring
response_statusinteger|null

No examples provided.

Common questions

What is the Reach MCP — LinkedIn for AI agents server?

Reach MCP — LinkedIn for AI agents is listed in the public MCP registry as com.reachmcp/linkedin. LinkedIn for AI agents: inbox, invitations, Sales Navigator search, posts. Quotas and webhooks. This page covers its hosted endpoint (https://app.reachmcp.com/mcp).

Is the Reach MCP — LinkedIn for AI agents server safe to use?

Reach MCP — LinkedIn for AI agents scores 67 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

What tools does the Reach MCP — LinkedIn for AI agents server expose?

Reach MCP — LinkedIn for AI agents exposes 52 tools: reach_playbooks, list_accounts, delete_account, get_account_quotas, update_account_quotas, and 47 more. Their descriptions and schemas cost roughly 8,304 tokens of context every time the server is loaded.

Does the Reach MCP — LinkedIn for AI agents server require authentication?

No. We connected to Reach MCP — LinkedIn for AI agents without credentials and it answered, so anything it exposes is reachable by anyone who knows the address.

Is the Reach MCP — LinkedIn for AI agents server still maintained?

Reach MCP — LinkedIn for AI agents is still listed as active in the MCP registry. We last reached this channel on 20 September 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.