Tool reference · LinkedIn

get_linkedin_posts

Recent posts by a LinkedIn member, newest first

read-onlyreaches LinkedInrate limited

Updated 2026-09-18 · Server 2.0.0

What it does

What a person has been saying, newest first. Separate from get_linkedin_profile because content research wants a history, not just the latest post, and paying for the profile fetch to get it is wasteful.

This tool drives a real LinkedIn account

It runs through a connected sender account in your workspace — not through a scraper and not through your own profile. Call list_sender_accounts first to see which identities are connected and healthy. If the workspace has none, this tool returns an error telling you so; accounts for agents covers how teams get one without risking their own profile.

Arguments

NameTypeRequiredMeaning
profilestringyesProfile URL, public identifier or provider id
limitnumbernoHow many posts, 1–20 (default 5)
accountstringnoSender account id or name to read as.

This table is generated from the literal inputSchema that tools/list returns, so what your client sees and what this page says are the same object:

inputSchema
{
  "type": "object",
  "properties": {
    "profile": {
      "type": "string",
      "description": "Profile URL, public identifier or provider id"
    },
    "limit": {
      "type": "number",
      "description": "How many posts, 1–20 (default 5)"
    },
    "account": {
      "type": "string",
      "description": "Sender account id or name to read as."
    }
  },
  "required": [
    "profile"
  ]
}

Request

Paste this, swap the key, and you have called the tool.

curl
curl -s https://topclozer.com/api/mcp \
  -H "Authorization: Bearer tcz_live_YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
      "name": "get_linkedin_posts",
      "arguments": { "profile": "example", "limit": 10 }
    }
  }'

Returns

{ providerId, count, posts }. Each post: id, text, postedAt (epoch ms), isRepost, and reactions/comments when LinkedIn returns counters.

The payload arrives inside an MCP content block — one text block whose body is this JSON, pretty-printed. Parse the string; there is no structured-content field.

payload
{
  "providerId": "ACoAAB1x…",
  "count": 1,
  "posts": [
    {
      "id": "urn:li:activity:7…",
      "text": "We finally cut our p99 in half. The fix was not the database…",
      "postedAt": 1789084800000,
      "isRepost": false,
      "reactions": 214,
      "comments": 31
    }
  ]
}

Worth knowing

Returns an empty array — not an error — for a profile with no visible activity, which is the common case for senior buyers. Text is whitespace-collapsed. Reposts are included and flagged; filter on isRepost if you want original writing only.

Rate limit

30 LinkedIn tool calls per 5 minutes, per workspace. Exceeding it returns HTTP 429 with JSON-RPC error -32002 and a Retry-After header. The budget is shared by every LinkedIn tool and counted per workspace, so minting a second key does not buy a second allowance.

The limit exists because an agent retrying in a loop is the request pattern that gets a LinkedIn account restricted, and a restricted account is a much worse outcome for you than a 429. Workspace tools do not spend this budget.

Related tools

All 21 tools are listed on the tool index. Connecting a client is on the Claude setup page, and the protocol details are on the server page.