LinkedIn Sales Navigator
LinkedIn Sales Navigator contact and account search from your logged-in browser.
Connector by nick-choudhary · GitHub account verified by the MCP Registry
Chalk Labs
Need help deploying LinkedIn Sales Navigator?
Chalk Labs sets up agents like this inside real teams: connected to your tools, tested on your data, with a human in the loop where it matters.
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/nick-choudhary-linkedin-sales-nav-mcp
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
- 12 read · 2 write · 5 delete
- Secrets
- None asked for
- Install scripts
- Not scanned yet
- Runs as
- Python package
Tools by what they do 19
Read from the source code; the running server may list different tools.
Read 12 · Look things up without changing anything.
check_session_statusenrich_leadsexport_resultsfetch_lead_profilesget_lead_profileget_resultslist_queriesnext_outreach_batchoutreach_statuspipeline_statussearch_accountssearch_contacts
Write 2 · Create, change, send or run things.
check_repliesoutreach_skip
Delete 5 · Delete, drop, revoke or wipe things.
outreach_nextoutreach_submitreconcile_outreachrun_outreach_batchsend_message
Tools (19)
Read from the source code; the running server may differ. Descriptions are the server’s own words; hidden characters are shown as [U+…].
check_repliesCheck For RepliesRead the Sales Navigator inbox and mark leads who replied. Sends nothing. Reads structured message threads — a reply is a message whose author is the lead rather than you, matched to leads by the stable member_id, so nothing depends on parsing rendered text or guessing who spoke last. Only leads this server recorded a send for are considered; a conversation with someone you messaged by hand elsewhere is left alone. A lead marked `replied` still counts as contacted, so a reply can never cause a duplicate first touch. Args: campaign: Restrict matching to one campaign. Omit for all. sc…
check_session_statusCheck Session Statusread-onlyCheck whether the browser profile has a live Sales Navigator session. Launches (or reuses) the browser and verifies it lands on a signed-in /sales page. Use this first when searches fail — it tells you if you need to run `--login` again. Returns: Dict with logged_in (bool), plus the profile directory and headless setting for this server.
enrich_leadsEnrich Leads With Open Profile Statusread-onlyAdd Open Profile / InMail status to a saved contact search. Search results cannot carry this. Sales Navigator's search payload has an `openLink` field, but it is `false` for everyone — the real flag is `memberBadges.openLink`, which only the profile endpoint returns, one request per lead. There is no bulk endpoint. Two methods: * `compose` (default): clicks Message on each lead's row in the search results (no lead page load) and records what the panel loads — Open Profile status plus **contact info** (emails, websites, phones), **insights** (recent posts, job change, shared connecti…
export_resultsExport Resultsread-onlyExport a saved query's records to files under the output folder. Args: url_or_hash: The query's url_hash (from list_queries) or its original search URL. ctx: FastMCP context. format: 'json', 'csv', or 'both' (default). JSON is the full store view; CSV is flat columns for spreadsheets. include_raw: Include LinkedIn's raw element JSON in the export. Returns: Dict with url_hash, record_count, and the written file paths (output/<url_hash>/query.json + the record file(s)).
fetch_lead_profilesFetch Full Lead Profilesread-onlyFetch full profiles for a query's leads — depth 3, drafting material. Same endpoint as `enrich_leads`, much wider projection: headline, summary, full position descriptions, educations, skills, languages, volunteering, connection counts. About 15 KB per lead against ~240 bytes for the enrichment screen. Deliberately separate from `enrich_leads`. The screen runs across a whole list to find who is free to message; this runs only for the leads you are about to write to. Merging them would pull heavy payloads for leads you never contact, and would make "recent activity" as stale as the screen. R…
get_lead_profileGet Lead Profileread-onlyRead one stored full profile — the payload you draft a message from. Reads from the local store only; it does not call LinkedIn. Run `fetch_lead_profiles` first for leads that have not been fetched. Args: member_id: Stable LinkedIn member id.
get_resultsGet Results Sampleread-onlyPull a bounded slice of a saved query's records into the conversation for analysis. Bounded on purpose — for large sets, prefer export_results and analyze the file with code rather than loading everything into context. Args: url_or_hash: The query's url_hash or original search URL. ctx: FastMCP context. limit: Max records to return (1-200, default 25). offset: Records to skip (for paging through the sample). Returns: Dict with url_hash, total_records, returned, offset, and `records`.
list_queriesList Saved Queriesread-onlyList every saved search and its progress. Returns: Dict with `queries`: for each, url_hash, url, scraper_type, status (new|in_progress|paused|complete), last_page, total_available, records_count. Use a url_hash with export_results or get_results.
next_outreach_batchNext Outreach Batchread-onlyLeads eligible for a first message, best channel first. Read-only. Excludes anyone already sent to in ANY campaign — dedupe is on the stable member_id, so a person found by three searches is messaged once — and anyone already handled in this campaign. With open_profile_only (the default) only leads confirmed Open Profile by enrich_leads come back: those are free to message. Run enrich_leads first or this returns nothing. Args: url_or_hash: The query's url_hash or original search URL. campaign: A label for this outreach run, e.g. "direct-mail-q3". Dedupe is global, but status…
outreach_nextOpen Next Lead For OutreachOpen the next eligible lead's message panel and return what to draft from. Walks the search results row by row in the visible browser and clicks Message on the next lead that is not yet contacted. The panel's own data is captured -- Open Profile status, contact info, insights (recent posts, job change, shared connections), existing conversation. Leads that are not Open Profile or already have a conversation are skipped and recorded; the first eligible one is left open and returned. Then draft from `lead` and call `outreach_submit`. Modes: * draft -- submit saves the draft; nothing is…
outreach_skipSkip The Open LeadClose the open lead's panel without sending and record the reason.
outreach_statusOutreach Statusread-onlyCounts by status and channel, plus remaining daily cap. Args: campaign: Restrict to one campaign. Omit for all.
outreach_submitSubmit Draft For The Open Leadcan change or delete dataFill the open lead's panel with this draft, then act per the mode. The draft is validated first (length, banned phrases, and every `evidence_used` entry must be a field of the `lead` returned by outreach_next). In supervised/auto mode the panel is filled, a countdown runs in the page, and at zero the panel is read back -- so edits made during the countdown are what gets checked and sent. Skip in the page records the lead as skipped. Sends use the same two-phase commit, daily cap and dedupe as send_message, and only ever go to Open Profile leads. Args: url_or_hash: Same query as outreach_…
pipeline_statusPipeline Statusread-onlyOne funnel view of a query: scraped → enriched → open → profiled → sent. State otherwise lives across four tables; this joins it so "where is everything?" is one call instead of mental arithmetic. Args: url_or_hash: The query's url_hash or original search URL.
reconcile_outreachReconcile Ambiguous SendsSettle sends stuck in `sending` by checking LinkedIn itself. A `sending` row means the Send click happened but the outcome was never recorded — a crash, a killed browser, a disconnect. The message either went out or it did not, and only LinkedIn knows. This opens each lead's conversation, looks for our own message text, and resolves the row to `sent` or `failed`. Sends nothing. Until reconciled, an ambiguous lead is treated as already-contacted, so the uncertainty can never produce a duplicate — it can only delay a legitimate follow-up. Args: campaign: Restrict to one campaign. Omit for…
Show 4 more tools
run_outreach_batchRun Outreach Batchcan change or delete dataDraft and send for several leads in one call, unattended. Uses MCP sampling: the server asks YOUR client for each draft, so no model runs here and no API key lives here — only the request for a completion. That is what lets a scheduled job run the loop without a person taking a turn. Nothing is relaxed for automation. Every draft goes through the same send path as a manual one: the evidence gate, global dedupe, the daily cap, the free-channel-only default, and two-phase commit. `dry_run` still defaults to true, so the first call shows you what it would say and sends nothing. Stops early whe…
search_accountsSearch Sales Navigator Accountsread-onlySearch companies/accounts by driving Sales Navigator in the logged-in browser and capturing its search API responses. Results are saved to the local database automatically; this tool returns a small summary, not the records (call export_results or get_results for the data). Build the search in Sales Navigator (industry / headcount / geography / growth filters), copy the URL from the address bar, and pass it here. Saved account lists work too. Resumable: the search URL is hashed to a query id. If a previous run stopped partway, calling again with the same URL resumes from the next page instea…
search_contactsSearch Sales Navigator Contactsread-onlySearch people/leads by driving Sales Navigator in the logged-in browser and capturing its search API responses. Results are saved to the local database automatically; this tool returns a small summary, not the records (call export_results or get_results for the data). Build the search in Sales Navigator (title / geography / industry / seniority / keyword filters), copy the URL from the address bar, and pass it here. Saved lead lists work too. Resumable: the search URL is hashed to a query id. If a previous run stopped partway, calling again with the same URL resumes from the next page instea…
send_messageSend Sales Navigator Messagecan change or delete dataSend ONE Sales Navigator message. Writes to LinkedIn. This is the only tool here that is not read-only, and it is guarded accordingly: * `dry_run` defaults to **true** — you get back exactly what would be sent and nothing leaves the browser. Set it false deliberately. * Sending must also be enabled server-side (`ENABLE_SENDING=true`), so a default install cannot message anyone. * A lead already messaged in ANY campaign is refused. * A rolling 24h cap applies across all campaigns. * If the lead is not Open Profile the message would spend an InMail credit, and that is refused unless `ALL…
Signals
- Stars
- 2
- Forks
- 1
- Open issues
- 0
- Weekly downloads
- 35
- Last commit
- Sep 23, 2026 (1 month ago)
- Last release
- Aug 20, 2026 (2 months ago)
- Last package publish
- Aug 20, 2026 (2 months ago)
From GitHub (fetched Oct 24, 2026) and the package registry.
Details
- Registry name
io.github.nick-choudhary/linkedin-sales-nav-mcp- Version
- 1.2.0
- Auth
- No auth
- Packages
- pypi linkedin-sales-nav-mcp
- License
- MIT
- First seen
- Oct 24, 2026
- Last checked
- Oct 24, 2026
Done for you
Rather not set it up yourself?
Chalk Labs scopes, builds and runs agents for your team: the task audit, the eval harness, the integrations and the weekly ops report. Fixed scope, priced before we start.
See how we build AI agents →Read the case studies
Chalk Labs is a two-founder AI and growth studio. We build AI agents, CRMs and MVPs for Web3 and AI companies, and have shipped 50+ product and token launches.
- launches shipped
- 50+
- launches shipped
- media placements
- 500+
- media placements
- founders on every account
- 2
- founders on every account
Press we've placed: Forbes · CoinDesk · Decrypt · Cointelegraph · The Block
Rahil Jain, Co-founder, Chalk Labs. Ex-Goldman Sachs engineer. You talk to the person who builds it.
Get LinkedIn Sales Navigator running in your business
Tell us what you want to automate. A founder replies within one working day with a plan, not a pitch deck.
Cite this page
LinkedIn Sales Navigator MCP server. Agent Mart. https://agentmart.dev/connectors/nick-choudhary-linkedin-sales-nav-mcp (last updated 2026-10-24)