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
Arguments
| Name | Type | Required | Meaning |
|---|---|---|---|
| keywords | string | no | Free text and job titles, e.g. "VP Engineering fintech" |
| location | string | no | Comma-separated place names, e.g. "Berlin, Munich" |
| industry | string | no | Comma-separated industry names |
| company | string | no | Comma-separated companies to restrict the search to |
| exclude_company | string | no | Comma-separated companies to exclude |
| limit | number | no | How many profiles to return, 1–50 (default 20) |
| sales_navigator | boolean | no | Use the account's Sales Navigator search, which supports typed filters. Requires a Sales Navigator seat on that account. |
| account | string | no | Sender 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:
{
"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 -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.
{
"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
get_linkedin_profile
Read one LinkedIn profile: identity, current role, followers, job-change signal and latest post
get_linkedin_posts
Recent posts by a LinkedIn member, newest first
list_sender_accounts
The LinkedIn accounts this workspace can act as, with their status, warm-up stage and remaining daily budget
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.