Docs · Tool reference

LinkedIn MCP tools

65 tools, documented against the code that serves them. 43 read LinkedIn through a connected account; the rest read and write this workspace on our own server. Nothing here writes to LinkedIn.

Updated 2026-09-18 · Server 2.0.0

This page and the endpoint read from the same array in the codebase, so the reference cannot list a tool the server does not implement. If a capability is missing here, it is missing there — see what is not exposed for the things people most often assume are present. Setup is on the Claude page; the LinkedIn accounts these tools drive are covered under accounts for agents.

Two surfaces, and why the difference matters

Every tool falls on one side of a line, and it is the first thing to understand about this server because it governs cost, risk and rate limits alike.

LinkedIn tools (43)

Reach a live LinkedIn session through one of your connected sender accounts. They see what that account sees. They are rate limited, and they need an account to exist first.

Workspace tools (22)

Read this workspace's own records on our server — campaigns, leads, the unified inbox, the approval queue, plus the catalogue, your library, your projects and your credits. No LinkedIn call, no rate limit, and they work on an empty workspace (they just return empty). Two of them write, both to us: pause_campaign and install_product.

LinkedIn tools

These are the reason to connect this server rather than read a dashboard. Each one runs as a named sender account: pass account to choose, or leave it out and the first connected account is used.

ToolWhat it doesAccess
search_linkedin_peopleSearch LinkedIn for people matching an ICP, through a connected sender accountread-only
get_linkedin_profileRead one LinkedIn profile: identity, current role, followers, job-change signal and latest postread-only
get_linkedin_postsRecent posts by a LinkedIn member or company page, newest firstread-only
list_linkedin_connectionsFirst-degree connections of a connected sender accountread-only
get_account_seatWhat the connected LinkedIn seat includes: Premium, Sales Navigator, Recruiter, Open Profile, InMail credits left, company pages it can message asread-only
get_my_profileThe connected account's own LinkedIn profile: name, headline, location, public URL, emailread-only
get_profile_viewersWho viewed the connected account's profile recently, as LinkedIn lists itread-only
get_ssiThe connected account's LinkedIn Social Selling Index: overall score and the four pillarsread-only
get_profile_sectionsOne LinkedIn profile in depth: experience, education, skills (with endorsement ids), languages, certifications, projects, recommendations, contact inforead-only
check_reachabilityBefore reaching out: degree of connection, pending invitation, whether a connection request, a message or an InMail can go to this person — and whether the do-not-contact list or another account of the workspace already covers themread-only
get_companyA LinkedIn company page: description, industry, size, headquarters, followers, website, employee growthread-only
get_postOne LinkedIn post: text, author, reactions, comments, reposts, and whether the account can react or commentread-only
list_post_commentsComments on a LinkedIn post, or replies to one comment — with each commenter's headline and degreeread-only
list_post_reactionsWho reacted to a LinkedIn post (or one of its comments), with each person's headline and degree — the warmest leads a post producesread-only
get_profile_activityWhat a member has been doing on LinkedIn: the comments they wrote or the posts they reacted toread-only
list_sent_invitationsConnection requests the account sent that are still pending — the ones to withdraw before they hurt the accept rateread-only
list_received_invitationsConnection requests the account received and has not answered, with each inviter's headline and noteread-only
list_followersFollowers of the connected account, or of another member or companyread-only
list_followingMembers and pages the connected account followsread-only
list_conversationsThe account's LinkedIn conversations, newest first — classic, Sales Navigator, Recruiter and company-page inboxesread-only
get_conversationOne LinkedIn conversation: who is in it (headline, degree) and its messages, oldest firstread-only
list_recent_messagesThe latest LinkedIn messages across all of the account's conversations, newest firstread-only
search_linkedin_companiesSearch LinkedIn companies by keywords, location, industry and headcount — classic or Sales Navigatorread-only
search_linkedin_postsSearch LinkedIn posts by keywords — the conversations a market is having this weekread-only
search_linkedin_jobsSearch LinkedIn job postings — the companies hiring for a role are the companies with the budgetread-only
search_linkedin_urlRun a search a person built in LinkedIn or Sales Navigator and copied the URL of — people, companies, posts or jobs, filters intactread-only
find_company_peopleThe people at one company who match a role — decision makers, a department, a title — through the account's searchread-only
lookup_search_filterThe ids LinkedIn's typed search filters take, for a name: a location, industry, company, school, job title, skill…read-only
propose_connection_requestPropose a LinkedIn connection request. It is NOT sent: it waits in the workspace's Approvals queue until a person approves it, then goes out under the account's Smart Limits.writes
propose_messagePropose a LinkedIn message to a 1st-degree connection. It is NOT sent: it waits in Approvals until a person approves (and may edit) it.writes
propose_profile_visitPropose visiting a LinkedIn profile as the account — the person will see it in "Who viewed your profile". NOT done until approved.writes
propose_inmailPropose an InMail to someone outside the account's network. NOT sent: it waits in Approvals. Spends an InMail credit when sent, unless the person has an Open Profile.writes
propose_replyPropose a reply in an existing LinkedIn conversation. NOT sent: it waits in Approvals.writes
propose_withdraw_invitationPropose withdrawing a pending connection request. NOT done until approved. LinkedIn then blocks re-inviting that person for about three weeks.writes
propose_accept_invitationPropose accepting a connection request the account received. NOT done until approved.writes
propose_ignore_invitationPropose ignoring a connection request the account received. NOT done until approved.writes
propose_followPropose following a LinkedIn member — a softer first touch than an invitation. NOT done until approved.writes
propose_unfollowPropose unfollowing a LinkedIn member. NOT done until approved.writes
propose_endorsementPropose endorsing one of a member's skills. NOT done until approved. The person is notified.writes
propose_post_reactionPropose reacting to a LinkedIn post or one of its comments. NOT done until approved.writes
propose_commentPropose a comment on a LinkedIn post, or a reply to a comment on it. NOT posted until approved. Public and permanent.writes
propose_postPropose a post on the account's own feed, optionally scheduled. NOT published until approved — and not before publish_at.writes
propose_message_reactionPropose reacting to a LinkedIn message with an emoji. NOT done until approved.writes

Workspace tools

Your own outreach data, and the accounts the LinkedIn tools run through.

ToolWhat it doesAccess
list_sender_accountsThe LinkedIn accounts this workspace can act as, with their status, warm-up stage and remaining daily budgetread-only
connect_linkedin_accountConnect a LinkedIn account to this workspace. Returns a sign-in link, valid for 24 hours, for the PERSON to open and sign in to LinkedIn on the provider's hosted page; the account is added when they finish. Give the person the URL. Never ask them for their LinkedIn password, a verification code or a session cookie — they enter those only on that pagewrites
get_approvalThe status of a proposal made with any propose_* tool: pending, approved, sent, rejected, failed or expiredread-only
list_approvalsProposals in this workspace and what became of them: pending, approved, sent, rejected, failed or expiredread-only
list_do_not_contactThe workspace's do-not-contact list: people and companies no account may invite, message or InMailread-only
add_do_not_contactAdd a person or a company to the do-not-contact list. It can only stop outreach, never start it.writes
get_usageHow many LinkedIn tool calls this workspace has made this month, and the rate limit in forceread-only
list_campaignsList all campaigns with performance statsread-only
get_statsGet workspace-wide outreach statsread-only
list_leadsList lead lists and leadsread-only
get_inboxGet unified inbox conversationsread-only
list_tasksList drafts waiting for approvalread-only
pause_campaignPause a campaign by idwrites
search_capabilitiesSearch what TopClozer products can actually do, and what performs each capability todayread-only
search_productsSearch the TopClozer catalogue by outcome, kind, tier, price, risk or capabilityread-only
get_productOne product in full: capabilities, risk, price, and whether this workspace has bought or installed itread-only
install_productRecord an installation of a product into an AI client or the hosted runner. Writes a row; runs nothing.writes
list_installationsWhat this workspace has installed, where, and what it paid forread-only
list_projectsThe projects in this workspace, with how complete each one's context isread-only
get_project_contextThe reusable company / ICP / offer / voice record an agent should read before it writes anythingread-only
check_creditsThe workspace credit balance and the ledger entries behind itread-only
get_platform_usageWhat this workspace owns and has run: installs, purchases, the hosted seat, credits and the execution ledgerread-only

How to call a tool

Every call is the same envelope; only params changes.

request
POST https://topclozer.com/api/mcp
Authorization: Bearer tcz_live_YOUR_KEY
Content-Type: application/json

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": { "name": "<tool>", "arguments": { } }
}

Results come back as MCP content blocks — one text block whose body is the tool's JSON, pretty-printed. Parse the string; there is no structured-content field.

response
{
  "jsonrpc": "2.0",
  "id": 1,
  "result": {
    "content": [ { "type": "text", "text": "<the tool's JSON, pretty-printed>" } ]
  }
}

Errors

Failures split by who can do something about them. A problem the calling agent can act on — no connected account, an unresolvable profile URL, a sender that is paused — comes back as a successful response carrying isError: true and a sentence explaining what to do. That is what lets an assistant read the message and try something else instead of reporting a transport failure to the user.

tool error
{
  "jsonrpc": "2.0",
  "id": 1,
  "result": {
    "isError": true,
    "content": [ { "type": "text", "text": "This workspace has no connected LinkedIn account…" } ]
  }
}

Genuine protocol faults stay JSON-RPC errors:

CodeHTTPCause
-32001401No key, or an unknown or revoked one. The message names the header to send.
-32002429The workspace has spent its 30 LinkedIn calls for the current 5-minute window. Retry-After says how long to wait.
-32601200Method outside initialize, notifications/*, ping, tools/list and tools/call.
-32000200An unexpected failure inside a tool — for example the upstream provider returning a 5xx after its retries.

Note the asymmetry: only auth and the rate limit carry a non-200 status. Check the body, not just the status code.

Rate limits and pacing

30 LinkedIn tool calls per 5 minutes, counted per workspace. Shared across every LinkedIn tool, and per workspace rather than per key — a second key does not buy a second allowance. A single search_linkedin_people call returns up to 50 profiles, so the budget goes further than it looks.

It is there for your benefit, not ours. An agent retrying in a loop is precisely the request pattern that gets a LinkedIn account restricted, and a 429 you can retry past is a far better outcome than an account you cannot. Workspace tools are unlimited.

The other limits live inside the product and govern sending, which no tool here can trigger: a per-sender weekly invite cap, a warm-up ramp that starts a new account low and steps it up, a working-hours window evaluated in the workspace timezone, and a randomised gap between two actions on the same sender. They apply identically whether a person clicks send or an agent triggers the workflow.

What is not exposed, and why

  • Sending anything — no invite, message, reply, follow or like tool. Outbound actions are released by the scheduler under the workspace review mode, which by default queues every invite and message for a person to approve. This is the boundary the whole product is arranged around, not an unfinished feature.
  • Approving a draft — list_tasks shows the queue so an agent can summarise it. Clearing it is a person's job.
  • Writing leads or campaigns — an agent can search LinkedIn and read the result, but importing those people into a campaign happens in the app. pause_campaign is the only write, and deliberately one-way.
  • Company and job search — people search is implemented and proven; company and job entities are not, and we would rather have four LinkedIn tools that work than seven where three are guesses.
  • Account management — connecting an account, changing proxies, editing sending limits. Not implemented, and not planned as an agent surface.
  • MCP resources and prompts — the server advertises the tools capability only.
  • Paging and since-timestamps — list_leads and get_inbox return the full set. Filter client-side.

The REST sibling

The REST API covers the workspace surface for code rather than for a model, with the same key. The inbox data model behind get_inbox is described on the unified inbox page.

Changelog

2026-09-18 · server 2.0.0

LinkedIn itself is exposed. Five new tools — search_linkedin_people, get_linkedin_profile, get_linkedin_posts, list_linkedin_connections, get_account_seat, get_my_profile, get_profile_viewers, get_ssi, get_profile_sections, check_reachability, get_company, get_post, list_post_comments, list_post_reactions, get_profile_activity, list_sent_invitations, list_received_invitations, list_followers, list_following, list_conversations, get_conversation, list_recent_messages, search_linkedin_companies, search_linkedin_posts, search_linkedin_jobs, search_linkedin_url, find_company_people, lookup_search_filter, propose_connection_request, propose_message, propose_profile_visit, propose_inmail, propose_reply, propose_withdraw_invitation, propose_accept_invitation, propose_ignore_invitation, propose_follow, propose_unfollow, propose_endorsement, propose_post_reaction, propose_comment, propose_post, propose_message_reaction and list_sender_accounts — so an agent can search, research and read a profile rather than only read this workspace's own records. All read-only; no sending tool was added and none is planned. A workspace-scoped rate limit of 30 LinkedIn calls per 5 minutes ships in the same release, because handing an agent a live LinkedIn session without one is how accounts get restricted. Tool failures an agent can act on now return isError inside a normal result, per the MCP spec, instead of a JSON-RPC error.

2026-09-10 · server 1.1.0

Bearer / X-Api-Key / ?key= authentication added — before this, the endpoint accepted only a browser session cookie and no MCP client could connect. initialize, notifications/* and ping implemented so the handshake completes. GET answers 405 to an Accept: text/event-stream request instead of returning a JSON body a stream-expecting client cannot read.

2026-07 · server 1.0.0

First endpoint: tools/list and tools/call over JSON-RPC with the six workspace tools.