LinkedIn Toolkit
LinkedIn for AI agents from your own Chrome session: search, profiles, lists, outreach queue.
Connector by FormatixAI · GitHub account verified by the MCP Registry
Install
Works with Claude Code, Codex, VS Code, Cursor, Windsurf, Claude Desktop. Read the repository before you give any tool access to your data.
npx agentmarket install connector/formatixai-linkedin-toolkit
Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.
Get the weekly diff
The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.
About
Reviews
Write a reviewNo reviews yet. Installed it? Reviews come from verified installers only. How reviews work
Permissions
What this server can do and what it asks for, from its tool list and install config. Checked Oct 25, 2026.
- Tools
- 24 read · 10 write · 0 delete · 6 not yet classified
- Secrets
- None asked for
- Install scripts
- Not scanned yet
- Runs as
- Node.js package
Tools by what they do 40
Read from the source code; the running server may list different tools.
Read 24 · Look things up without changing anything.
linkedin_campaign_getlinkedin_campaign_listlinkedin_endpoints_checklinkedin_export_profileslinkedin_get_companylinkedin_get_company_employeeslinkedin_get_connection_statuslinkedin_get_connectionslinkedin_get_conversationslinkedin_get_event_attendeeslinkedin_get_group_memberslinkedin_get_messages
Show 12 more tools
linkedin_get_post_engagerslinkedin_get_profilelinkedin_get_statuslinkedin_list_alllinkedin_list_getlinkedin_list_memberslinkedin_queue_listlinkedin_research_getlinkedin_research_packlinkedin_research_resolvelinkedin_search_peoplelinkedin_view_profile
Write 10 · Create, change, send or run things.
linkedin_campaign_createlinkedin_comment_postlinkedin_followlinkedin_like_postlinkedin_queue_approvelinkedin_queue_rejectlinkedin_send_inmaillinkedin_send_invitelinkedin_send_messagelinkedin_sync
Not yet classified 6 · We could not tell from the name and description.
linkedin_campaign_enrolllinkedin_campaign_pauselinkedin_campaign_resumelinkedin_list_addlinkedin_list_createlinkedin_query_sql
Secrets and settings it asks for
Other settings (environment variables or headers).
LINKEDIN_TOOLKIT_HOME
Files it touches
- Any path the agent passes to its tools
Tools (40)
Read from the source code; the running server may differ. Descriptions are the server’s own words; hidden characters are shown as [U+…].
linkedin_campaign_createCreate a multi-step outreach sequence (view, follow, invite, message, inmail, like, comment, wait, branch) over a list or explicit publicIds. Use it instead of firing individual writes when the touches should be spaced over days. Returns the Campaign; steps still obey every quota and the approval queue.
linkedin_campaign_enrollEnroll publicIds into an existing campaign. Use it to top up a running sequence with newly sourced people. Already-enrolled people are skipped; returns {enrolled, skipped}.
linkedin_campaign_getFetch one campaign by campaignId including its stats. Use it to report on enrolled, sent, accepted, replied and positive counts per step.
linkedin_campaign_listList every campaign with its status. Use it to find campaignIds and see what is currently running or paused.
linkedin_campaign_pausePause a campaign so no further steps execute. Use it immediately if replies look negative or a challenge was detected. Returns the updated Campaign.
linkedin_campaign_resumeResume a paused campaign from where it stopped. Returns the updated Campaign.
linkedin_comment_postComment on a post by URL. Use it for public engagement before outreach; comments are queued for approval in Copilot mode because they are visible to everyone. Returns a WriteResult; pass dry_run to preview.
linkedin_endpoints_checkSelf-test every LinkedIn endpoint the extension uses; run this first when a tool returns LINKEDIN_ERROR. One read-only call per endpoint reports ok, failed, unverified or skipped, plus the LinkedIn client version the endpoint table was captured against, so you can tell "LinkedIn moved" from "the toolkit is broken". The search and profile reads it makes count against the normal daily caps.
linkedin_export_profilesFetch many profiles in one call from a list of LinkedIn URLs. Use it to hydrate a list you already have URLs for. Returns profiles plus a failed array of {url, error}; each profile counts against the 500 visits/day cap, so keep batches modest.
linkedin_followFollow a person without sending a connection invite. Use it when an invite would be too strong a first touch. This is a direct, metered action: it is paced and drawn from the visit bucket but never queued for approval, so the result status is "sent". Pass dry_run to preview.
linkedin_get_companyFetch a company page by URL or universalName. Use it for account research before outreach. Returns name, industry, size, HQ, website, description and follower count.
linkedin_get_company_employeesList people who work at a company, by universalName. Use it for account-based sourcing once you know the company. Returns a page of profiles plus nextStart; results count against the daily search cap.
linkedin_get_connection_statusCheck whether the user is already connected to, or has a pending invite with, each of the given publicIds. Always call this before sending invites so you do not re-invite existing connections. Returns a map publicId to connected | pending | none.
linkedin_get_connectionsList the user's own first-degree connections. Use it to work an existing network rather than sending new invites. Returns a page of profiles plus nextStart.
linkedin_get_conversationsList LinkedIn inbox threads, optionally only those since a timestamp or only unread. Use it to triage replies. Returns threads with participants, snippet, unread flag and sentiment when the extension has an AI provider configured.
Show 25 more tools
linkedin_get_event_attendeesList attendees of a LinkedIn event you can see. Use it to source people around a conference or webinar. Returns a page of profiles plus nextStart.
linkedin_get_group_membersList members of a LinkedIn group you belong to. Use it for niche sourcing. Returns a page of profiles plus nextStart.
linkedin_get_messagesFetch the messages in one thread by threadId. Use it after linkedin_get_conversations to read the full exchange before replying. Returns messages with sender publicId, body and sentAt.
linkedin_get_post_engagersList the people who liked or commented on a LinkedIn post. Use it to source warm leads who have shown intent. Returns engagers (a profile plus reaction or comment text) and nextStart.
linkedin_get_profileFetch one profile by URL or publicId. Use it before writing an invite or message so the copy can reference real detail. Returns the Profile; with full=true it also captures the rendered page text, photo and experience/education, which costs one profile visit against the 500/day cap.
linkedin_get_statusCheck that the Chrome extension is connected and the user is logged in to LinkedIn. Call this first in any session and again after a rate-limit error; returns extension version, autopilot on/off, business-hours flag, per-quota usage (invite, message, visit, search), pending approval-queue size and campaign counts.
linkedin_like_postLike a post by URL. Use it as a low-risk warm-up touch before inviting the author. This is a direct, metered action: it is paced and drawn from the visit bucket but never queued for approval, so the result status is "sent". Unlike a comment, a like carries no words of yours. Pass dry_run to preview.
linkedin_list_addAdd profiles (or bare publicIds) to a list. Use it to save search or engager results for later outreach. Duplicates are skipped; returns {added, duplicates}.
linkedin_list_allList every local list. Use it to discover listIds before adding members or creating a campaign. Returns all List records with their member counts.
linkedin_list_createCreate a named local list to hold prospects. Use it as the container for search results before enrolling them in a campaign. Returns the List with its listId. Lists live only in the local extension storage.
linkedin_list_getFetch one list by listId. Use it to confirm a list exists and how many members it holds. Returns the List record.
linkedin_list_membersPage through the members of a list. Use it to read back what is in a list, including tags, whether each person was contacted before and any signals. Returns members plus total.
linkedin_query_sqlRun a read-only SQL query against the local SQLite mirror of everything the toolkit has captured (tables: profiles, companies, searches, search_results, lists, list_members, campaigns, enrollments, actions, conversations, messages, events, packs). Use it for counting, filtering and joining across past work instead of re-scraping LinkedIn. Only a single SELECT or WITH statement is allowed and at most 1,000 rows are returned.
linkedin_queue_approveApprove queued writes by id so the extension sends them, optionally editing the note or body first. This works only when the user has turned Autopilot on: in the default Copilot mode approval is a human action and the extension answers UNAUTHORIZED, so show the queue with linkedin_queue_list and ask the user to approve in the popup. Returns {approved} immediately — the count marked approved, not sent. The extension then sends them one at a time at human pace, which takes seconds to minutes, so watch queue_item_sent events or poll linkedin_queue_list (status "sent" or "failed") rather than assu…
linkedin_queue_listList items in the human-approval queue, optionally filtered by status ("pending", "approved", "rejected", "sent" or "failed"). In Copilot mode every agent-originated write lands here first, so call this to show the user what is waiting, and poll it after linkedin_queue_approve to see what actually sent. Returns queue items with their action, params and target profile; a failed item carries result.error.
linkedin_queue_rejectReject queued writes by id so they are never sent. Like approving, this works only when the user has turned Autopilot on; in the default Copilot mode the extension answers UNAUTHORIZED and the user rejects in the popup. Returns {rejected}.
linkedin_research_getPoll a research job by jobId. Use it after linkedin_research_pack returned status "running". Returns {jobId, status, done, total, packs} with the packs finished so far.
linkedin_research_packTurn a list of rows (name, LinkedIn URL, email, domain or company) into full research packs: resolved profile, company, recent posts, mutual connections, connection status, signals and a ready-to-read markdown brief per row. Use it as the one-shot "research these people for me" tool. The server waits for the job to finish and returns the packs; if it takes longer than the research timeout it returns {jobId, status:"running"} and you should poll linkedin_research_get.
linkedin_research_resolveResolve messy rows (a name, an email, a company domain) to LinkedIn people or companies without doing the full research gather. Use it as a cheap first pass to check match quality before spending visits on linkedin_research_pack. Returns each row with kind, publicId or universalName, a confidence score and candidate profiles.
linkedin_search_peopleSearch LinkedIn people and return structured profiles. Use it to build a candidate or prospect list from keywords plus optional title, company and location filters. Returns up to 100 profiles per call with nextStart for paging; the extension caps search results at 1,000 per day.
linkedin_send_inmailSend an InMail with a subject line (requires Premium, Sales Navigator or Recruiter). Counts against the message cap and queues for approval in Copilot mode. Returns a WriteResult; pass dry_run to preview.
linkedin_send_inviteSend a connection invite, optionally with a note of at most 200 characters (LinkedIn's own limit; a longer note is refused with INVALID_PARAMS, so aim for 180 or fewer). Check linkedin_get_connection_status first. Hard cap 100 invites/day; in Copilot mode (the default) the invite is queued for human approval and the result status is "queued" rather than "sent". Note that on a free account LinkedIn allows only a few personalised (with-note) invitations a month, so prefer a note where it will count. Pass dry_run to preview the exact payload.
linkedin_send_messageSend a direct message to a first-degree connection. Hard cap 150 messages/day; in Copilot mode it is queued for approval. Returns a WriteResult; pass dry_run to preview.
linkedin_syncPull everything changed in the extension since the last sync into the local SQLite mirror. Call it before linkedin_query_sql so the database is current. Returns per-table row counts and the new sync timestamp.
linkedin_view_profileVisit a profile so the visit shows up in their "who viewed your profile". Use it as a light warm-up touch before an invite. This is a direct, metered action: it is paced and drawn from the visit bucket (500 visits/day) but never queued for approval, so the result status is "sent". Pass dry_run to preview.
Signals
- Stars
- 13
- Forks
- 5
- Open issues
- 14
- Last commit
- Oct 9, 2026 (19 days ago)
- Last release
- Sep 30, 2026 (28 days ago)
From GitHub (fetched Oct 24, 2026).
Details
- Registry name
io.github.FormatixAI/linkedin-toolkit- Version
- 2.1.0
- Auth
- No auth
- Packages
- npm linkedin-toolkit-mcp
- License
- MIT
- First seen
- Oct 24, 2026
- Last checked
- Oct 24, 2026
More from FormatixAI
Cite this page
LinkedIn Toolkit MCP server. Agent Mart. https://agentmart.dev/connectors/formatixai-linkedin-toolkit (last updated 2026-10-24)