Tool reference · LinkedIn

search_linkedin_people

Search LinkedIn for people matching an ICP, through a connected sender account

read-onlyreaches LinkedInrate limited

Updated 2026-09-18 · Server 2.0.0

What it does

Turn an ICP description into real LinkedIn profiles. This is the tool an agent reaches for first when the job starts with "find people who…" — it runs the search through one of the workspace's connected accounts, so the results are the ones that account can actually see and act on.

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
keywordsstringnoFree text and job titles, e.g. "VP Engineering fintech"
locationstringnoComma-separated place names, e.g. "Berlin, Munich"
industrystringnoComma-separated industry names
companystringnoComma-separated companies to restrict the search to
exclude_companystringnoComma-separated companies to exclude
limitnumbernoHow many profiles to return, 1–50 (default 20)
sales_navigatorbooleannoUse the account's Sales Navigator search, which supports typed filters. Requires a Sales Navigator seat on that account.
accountstringnoSender account id or name to search as. Defaults to the workspace's first connected account.

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": {
    "keywords": {
      "type": "string",
      "description": "Free text and job titles, e.g. \"VP Engineering fintech\""
    },
    "location": {
      "type": "string",
      "description": "Comma-separated place names, e.g. \"Berlin, Munich\""
    },
    "industry": {
      "type": "string",
      "description": "Comma-separated industry names"
    },
    "company": {
      "type": "string",
      "description": "Comma-separated companies to restrict the search to"
    },
    "exclude_company": {
      "type": "string",
      "description": "Comma-separated companies to exclude"
    },
    "limit": {
      "type": "number",
      "description": "How many profiles to return, 1–50 (default 20)"
    },
    "sales_navigator": {
      "type": "boolean",
      "description": "Use the account's Sales Navigator search, which supports typed filters. Requires a Sales Navigator seat on that account."
    },
    "account": {
      "type": "string",
      "description": "Sender account id or name to search as. Defaults to the workspace's first connected account."
    }
  }
}

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": "search_linkedin_people",
      "arguments": {
        "keywords": "VP Engineering",
        "industry": "Financial Services",
        "location": "Berlin, Munich",
        "exclude_company": "TopClozer",
        "limit": 25,
        "sales_navigator": true
      }
    }
  }'

Returns

{ searchedAs, count, people }. Each person: providerId, fullName, headline, company, location, profileUrl, networkDistance. providerId is the handle the other LinkedIn tools take.

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
{
  "searchedAs": "Marcus Feld",
  "count": 1,
  "people": [
    {
      "providerId": "ACoAAB1x…",
      "fullName": "Dana Whitfield",
      "headline": "CTO at Northbeam",
      "company": "Northbeam",
      "location": "Austin, Texas, United States",
      "profileUrl": "https://www.linkedin.com/in/example",
      "networkDistance": "DISTANCE_2"
    }
  ]
}

Worth knowing

Out-of-network profiles LinkedIn masks as "LinkedIn Member" are dropped rather than returned with a blank name — they cannot be personalized or reliably invited, so they are noise. With sales_navigator: true, location/industry/company are resolved to LinkedIn's numeric filter ids and sent as typed filters (a genuine filter, not a keyword blob); that path needs a Sales Navigator seat on the account, and falls back to a keyword search if LinkedIn rejects the typed body. Without it every criterion is folded into one keyword string. Results are paged through the search cursor up to the requested limit.

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.