EN
Sales Navigator MCP

Sales Navigator MCP Server: build lead search, lead lists and InMail into your product with a coding agent

Point Codex, Cursor, Claude Code or Gemini CLI at the hosted Unipile MCP server and it reads the Sales Navigator API routes: lead and account search with Sales Navigator filters, searches imported from a Sales Navigator URL, lead lists, account lists and InMail. The agent writes the feature into your project and tests it on a Development application, on the seat each user connects.
Codex
Cursor
Claude Code
Gemini CLI
Windsurf
Any MCP client
Start with a Development application. 7-day free trial, no credit card.
Your coding agent
Unipile MCP connected
Sarah
Add a Sales Navigator lead search to the prospecting page: job title, seniority, headcount, and "changed jobs". Hide it when the user has no seat.
Run requestGET /v2/{account_id}/linkedin/contractsseat found
Read endpointPOST /v2/{account_id}/linkedin/sales-navigator/search/peopleschema loaded
Added searchLeads(filters) in salesnav.service.ts and the filter form on the prospecting page. The feature checks the account's contracts first. Ran it on the Development app: 25 leads on the first page, cursor saved for the next one.
4 files changed · tested on the Development app
Now a "Save to lead list" button on each result.
Reading the lead-lists routes
Describe the next feature…
The short answer

Is there an official Sales Navigator MCP server?

No. LinkedIn does not publish a Sales Navigator MCP server, and Sales Navigator search, lists and InMail are not open to third-party products through its developer program. The Unipile MCP server is a hosted third-party server generated from the Unipile API, which includes the Sales Navigator API routes. Your coding agent reads them and writes the feature into your product. Each user connects their own LinkedIn account with its Sales Navigator seat through Hosted Auth, and your code acts on behalf of that authenticated user.

The server URL

Sales Navigator MCP server URLLive
https://developer.unipile.com/mcp?branch=v2.0
AuthHeader X-API-KEY with a scoped Account API key, over streamable HTTP. The same URL serves LinkedIn Classic, Recruiter and the other channels.
SeatThe Sales Navigator routes answer when the connected LinkedIn account holds a Sales Navigator seat. Check with GET /v2/{account_id}/linkedin/contracts.
AccountsYour Development application's test accounts while you build; in production, the account each user connected through Hosted Auth.
ClientsCodex, Cursor, Claude Code, Gemini CLI, Windsurf, or any MCP client over streamable HTTP.

How one prompt becomes a Sales Navigator feature

1
You describe the featureLet users paste a Sales Navigator search URL and import the leads into a campaign.
2
The agent reads the Sales Navigator API route
Read endpointPOST /v2/{account_id}/linkedin/sales-navigator/searchschema loaded
3
It writes the code and tests it on your Development applicationAdded importFromUrl() in salesnav.service.ts and the "Import from Sales Navigator" field on the campaign page. Ran it with a test URL on the Development app: 25 leads on page one, next cursor stored.
Everything the server does on LinkedIn
Prompts, not glue code

What your coding agent builds with the Sales Navigator MCP

Pick a Sales Navigator feature. Each transcript shows the prompt you give the agent, the Sales Navigator API routes it reads and runs through the Unipile MCP server, and what lands in your project. Paths are complete, on the API base URL https://api.unipile.com, with a scoped key in the X-API-KEY header.
Cursor · prospecting-appDevelopment app
Add Sales Navigator lead search to the prospecting page: current job title, seniority, company headcount, and a "changed jobs" toggle.
Read endpointGET /v2/{account_id}/linkedin/sales-navigator/search/parametersschema loaded
Run requestPOST /v2/{account_id}/linkedin/sales-navigator/search/people25 leads
Built the filter form (the pickers resolve names to IDs through the search parameters route), searchLeads(filters, cursor) in salesnav.service.ts and the results table with "Load more". Tested on the Development app with a test seat: 25 leads on the first page.4 files changed · tested on the Development app

Lead search with the Sales Navigator filters your users already know

The agent reads the people search body, builds the form in your stack and runs the first search on your Development application. Job title, seniority, function, headcount, location, and signals such as changed jobs or recent posts: the same filters the user has in Sales Navigator, on their own seat.
Endpoints the agent uses
GET/v2/{account_id}/linkedin/sales-navigator/search/parametersPOST/v2/{account_id}/linkedin/sales-navigator/search/people
Common mistake: Typing a job title or a company name where the filter expects an ID. Resolve the text to an ID with the search parameters route first, then pass the ID in the people search.
Sales Navigator search API: key features
Claude Code · crm-appDevelopment app
Add an account search on the Sales Navigator routes to the CRM, so reps can find target companies and open them in the CRM.
Read endpointPOST /v2/{account_id}/linkedin/sales-navigator/search/companiesschema loaded
Run requestPOST /v2/{account_id}/linkedin/sales-navigator/search/companies200 OK
Added searchAccounts(filters, cursor) and an "Accounts" tab next to "Leads" on the prospecting page. Each company row links to the matching CRM record when one exists. Tested on the Development app.3 files changed · tested on the Development app

Account search for target company lists

The companies search is the account side of Sales Navigator: the rep narrows down target companies, then moves on to the people who work there. The agent reads the exact body of the companies route before it writes the form, so it never guesses a filter name.
Endpoints the agent uses
POST/v2/{account_id}/linkedin/sales-navigator/search/companiesGET/v2/{account_id}/linkedin/sales-navigator/search/parameters
Common mistake: Reusing the lead search body on the companies route. People and companies take different filter sets; let the agent read each schema instead of copying one into the other.
Sales Navigator API guide
Codex · outreach-appDevelopment app
Let users paste a Sales Navigator search URL, or pick one of their saved searches, and import the leads into a campaign.
Read endpointPOST /v2/{account_id}/linkedin/sales-navigator/searchschema loaded
Run requestPOST /v2/{account_id}/linkedin/sales-navigator/search25 leads
Added an "Import from Sales Navigator" field that sends the pasted URL to the search-from-URL route, and a saved search picker that uses load_saved_search on the people search. Leads are added to the campaign one page at a time, with the cursor stored. Tested on the Development app.3 files changed · tested on the Development app

Import a search the user already built in Sales Navigator

Many users build their search in Sales Navigator itself. Your product can take that search as it is: from the URL they paste, or from a saved or recent search on their account. No need to rebuild the filters in your UI.
Endpoints the agent uses
POST/v2/{account_id}/linkedin/sales-navigator/searchPOST/v2/{account_id}/linkedin/sales-navigator/search/people
Common mistake: Sending a classic LinkedIn search URL to the Sales Navigator route. Validate that the pasted link is a Sales Navigator search before calling it, and show a clear message otherwise.
Sales Navigator API data guide
Cursor · prospecting-appDevelopment app
Show the user's Sales Navigator lead lists in the sidebar, let them open one, and add a "Save to lead list" button on each search result.
Run requestGET /v2/{account_id}/linkedin/sales-navigator/lead-lists6 lists
Read endpointPOST /v2/{account_id}/linkedin/sales-navigator/lead-lists/{list_id}/saveschema loaded
Added the lead lists sidebar, the list view (browse route, paginated) and the "Save to lead list" button, which calls the save route once per click and shows the error if LinkedIn refuses it. Tested on the Development app with a test list.4 files changed · tested on the Development app

Lead lists: browse them, save to them

Lead lists are where a Sales Navigator user keeps prospects. Your product can read the lists the user has, open one, and add a lead to it from your own UI. The list stays in Sales Navigator, so the user sees the same list in both places.
Endpoints the agent uses
GET/v2/{account_id}/linkedin/sales-navigator/lead-listsPOST/v2/{account_id}/linkedin/sales-navigator/lead-lists/{list_id}POST/v2/{account_id}/linkedin/sales-navigator/lead-lists/{list_id}/save
Common mistake: Using a list name as list_id. Take the ID from GET .../lead-lists, and do not retry a save blindly after a timeout: browse the list first to see if the lead is already there.
Sales Navigator API guide
Gemini CLI · crm-appDevelopment app
Sync the rep's Sales Navigator account lists into the CRM as target account segments, and let them add a company to a list from the account page.
Run requestGET /v2/{account_id}/linkedin/sales-navigator/account-lists4 lists
Run requestPOST /v2/{account_id}/linkedin/sales-navigator/account-lists/{list_id}38 accounts
Added the account list sync (lists and their companies upserted as CRM segments, on a manual "Sync" button) and "Add to account list" on the company page, on the save route. Tested on the Development app.4 files changed · tested on the Development app

Account lists as target account segments

Account lists mirror lead lists on the company side. A CRM or ABM tool can show the rep's lists as segments and add a company from its own account page, with the same three routes: list, browse, save.
Endpoints the agent uses
GET/v2/{account_id}/linkedin/sales-navigator/account-listsPOST/v2/{account_id}/linkedin/sales-navigator/account-lists/{list_id}POST/v2/{account_id}/linkedin/sales-navigator/account-lists/{list_id}/save
Common mistake: Mixing lead lists and account lists. A lead goes to a lead list, a company to an account list; each list ID belongs to one route family.
LinkedIn API for sales software
Claude Code · prospecting-appDevelopment app
When a rep opens a lead, show the profile the way Sales Navigator shows it, not the classic LinkedIn version.
Read endpointGET /v2/{account_id}/users/{user_id}schema loaded
Run requestGET /v2/{account_id}/users/{user_id}?variant=linkedin_sales_navigator200 OK
Added getLeadProfile(id), which requests the linkedin_sales_navigator variant, and the lead drawer on the prospecting page. The profile is fetched only when the rep opens a lead. Tested on the Development app.2 files changed · tested on the Development app

The lead profile, in its Sales Navigator variant

The profile route takes a variant. linkedin_sales_navigator returns the profile as Sales Navigator shows it; linkedin_classic and linkedin_recruiter are the other two. The route also documents profile sections such as experience, education and skills, and the agent reads how to request them.
Endpoints the agent uses
GET/v2/{account_id}/users/{user_id}?variant=linkedin_sales_navigator
Common mistake: Passing a profile URL or a display name as user_id. Use the ID returned by the search or the list, and fetch one profile when the user opens it, not a whole results page.
LinkedIn MCP server
Codex · outreach-appDevelopment app
Let the rep send a Sales Navigator InMail with a subject from the lead drawer, and show how many InMail credits are left.
Run requestGET /v2/{account_id}/linkedin/inmail-creditscredits
Read endpointPOST /v2/{account_id}/chats/sendschema loaded
Added the credits badge and the InMail composer (subject and body). sendInMail() calls the start-a-chat route with specifics.linkedin.sales_navigator.subject. The send button is disabled at zero credits, and a failed send is shown to the rep, never retried. Tested on the Development app.3 files changed · tested on the Development app

Sales Navigator InMail with a subject, on the user's credits

An InMail starts a new chat. The start-a-chat route takes LinkedIn-specific options, and the Sales Navigator block carries the subject. Credits belong to the user's seat: read them before you show the composer, and let the rep decide each send.
Endpoints the agent uses
POST/v2/{account_id}/chats/sendGET/v2/{account_id}/linkedin/inmail-credits
Common mistake: Retrying an InMail after an ambiguous error. A retry can send the message twice and spend two credits. Check the user's chats before offering to send again.
Send InMail with the LinkedIn API
Real routes, complete paths

The Sales Navigator API routes behind the Sales Navigator MCP

The server exposes the Unipile API itself, so what your coding agent can build on Sales Navigator is what the Sales Navigator API does. Ten routes are specific to Sales Navigator: search, search parameters, lead lists and account lists. Profiles, InMail, credits and contracts use the shared LinkedIn routes. Paths below are complete, on the API base URL https://api.unipile.com, with the scoped key in the X-API-KEY header.
10Sales Navigator routes: people, companies, from a URL, parameters, lead lists, account lists
6list routes: list, browse and save, for lead lists and for account lists
1server URL and one scoped key, shared with LinkedIn Classic, Recruiter and the other channels
0endpoints to guess: the agent reads the exact schema before it writes code
2 routes
Lead search People search with the Sales Navigator filter set, and the parameters route that turns a job title, company or location typed by the user into the ID the filter expects.
POST/v2/{account_id}/linkedin/sales-navigator/search/people
GET/v2/{account_id}/linkedin/sales-navigator/search/parameters
"Add lead search with seniority and headcount filters to the prospecting page."
1 route
Account search Company search on the Sales Navigator side, to build target account lists before looking for the people inside them.
POST/v2/{account_id}/linkedin/sales-navigator/search/companies
"Add a target account search next to the lead search."
1 route + saved searches
Search from a URL Run a search the user built in Sales Navigator from its URL. Saved and recent searches load through the people search body.
POST/v2/{account_id}/linkedin/sales-navigator/search
POST/v2/{account_id}/linkedin/sales-navigator/search/people
"Let users paste a Sales Navigator search URL and import the leads."
3 routes
Lead lists List the user's lead lists, browse the leads in one, save a lead to a list.
GET/v2/{account_id}/linkedin/sales-navigator/lead-lists
POST/v2/{account_id}/linkedin/sales-navigator/lead-lists/{list_id}
POST/v2/{account_id}/linkedin/sales-navigator/lead-lists/{list_id}/save
"Show the user's lead lists in the sidebar and add "Save to list" on each result."
3 routes
Account lists The same three operations on the company side: list the account lists, browse one, save an account to it.
GET/v2/{account_id}/linkedin/sales-navigator/account-lists
POST/v2/{account_id}/linkedin/sales-navigator/account-lists/{list_id}
POST/v2/{account_id}/linkedin/sales-navigator/account-lists/{list_id}/save
"Sync the rep's account lists into the CRM as segments."
Shared routes
Lead profile and connection Read a profile in its Sales Navigator variant, and send a connection request from the lead page with the shared LinkedIn routes.
GET/v2/{account_id}/users/{user_id}?variant=linkedin_sales_navigator
POST/v2/{account_id}/users/me/relation-requests
"Open the lead drawer with the Sales Navigator profile variant."
Shared routes
Sales Navigator InMail Start a chat with a subject under the Sales Navigator options, and read the seat's remaining InMail credits.
POST/v2/{account_id}/chats/send
GET/v2/{account_id}/linkedin/inmail-credits
"Add an InMail composer with a subject and a credits badge."
Shared routes
Seat, contracts and connection Connect the account through Hosted Auth, list the contracts it holds and select the Sales Navigator one when there are several.
POST/v2/auth/link
GET/v2/{account_id}/linkedin/contracts
POST/v2/{account_id}/linkedin/contracts/{contract_id}/select
"Hide the Sales Navigator tab when the connected account has no seat."
One complete request, exactly as the agent runs it
POSThttps://api.unipile.com/v2/{account_id}/linkedin/sales-navigator/search/peopleX-API-KEY: your-scoped-api-key200 OK
The server follows every Unipile API release, so a new Sales Navigator route reaches your agent the day it ships. In production your product calls the same routes on the account each user connected through Hosted Auth, as user actions in your UI. Same routes as the Unipile LinkedIn API, in the code the agent writes or through the official SDKs.·API reference
LinkedInPeople search filters

The Sales Navigator MCP filter set, field by field

These are the body fields of POST /v2/{account_id}/linkedin/sales-navigator/search/people, as the Unipile API v2 documents them. Your coding agent reads their exact shape through the MCP server before it writes the filter form, so the fields in your UI match the ones Sales Navigator applies on the user's seat.
Role and seniority12 fields
Find the right person: what they do today, what they did before, how senior they are and how long they have been in the role. Body fields
Keywords and namekeywords, first_name, last_name
Current and past rolecurrent_job_title, past_job_title, function, seniority, persona
Experience and backgroundyears_in_position, years_of_experience, school, profile_language
"Add job title, function and seniority pickers to the lead search."
Company and location10 fields
Narrow down by the company the lead works for, its size and type, its industry, and where the lead or the company is based. Body fields
Companycurrent_company, past_company, company_headcount, company_type, industry, years_in_company
Locationlocation, company_location, postal_code, radius
"Filter leads by headcount and company location, with a postal code and radius option."
Signals13 fields
The filters sales teams pay for: people who just changed jobs, who posted recently, who follow the user's company or viewed the user's profile. Body fields
Activity and intentchanged_jobs, posted_on_linkedin, following_your_company, viewed_your_profile_recently, recent_interaction
Relationship with the usernetwork_distance, connections_of, past_colleague, shared_experiences, group, messaged, viewed_profile, last_viewed_at
"Add Changed jobs and Follows our company toggles to the lead search."
Lists and saved searches8 fields
Search inside what the user already curated in Sales Navigator, reload a saved or recent search, or save the current one back to their account. Body fields
Listslead_list, account_list, saved_leads, saved_accounts, saved_resources
Saved and recent searchesload_saved_search, load_recent_search, save_search
"Let users pick one of their saved searches and run it from our app."
Most filters expect IDs, not free text. A job title, a company, an industry or a location typed by the user is resolved first with GET /v2/{account_id}/linkedin/sales-navigator/search/parameters, then passed to the people search. The schema also documents include, exclude, id, name, min and max inside the filter objects: the agent reads which filter takes which shape instead of guessing. Account search has its own body on POST /v2/{account_id}/linkedin/sales-navigator/search/companies.
Quick start

Add the Sales Navigator MCP to your coding agent in one line

There is no separate Sales Navigator MCP server to install: the hosted Unipile MCP server covers the Sales Navigator API under the same URL as LinkedIn Classic, Recruiter and every other channel. Point your coding agent at it with a scoped API key, and it reads the Sales Navigator routes and runs requests against your Development application. The snippets below are the ones from the official documentation.
Cursor~/.cursor/mcp.json
Claude Codeclaude mcp add --transport http …
Codex CLI and IDE extension~/.codex/config.toml
Gemini CLI~/.gemini/settings.json
Windsurf~/.codeium/windsurf/mcp_config.json
~/.cursor/mcp.json
# Register the hosted Unipile MCP server in Claude Code claude mcp add --transport http --scope user \ unipile "https://developer.unipile.com/mcp?branch=v2.0" \ --header "X-API-KEY: your-scoped-api-key" # Verify the connection, or type /mcp inside a session claude mcp list
{ "mcpServers": { "unipile": { "url": "https://developer.unipile.com/mcp?branch=v2.0", "headers": { "X-API-KEY": "your-scoped-api-key" } } } }
{ "mcpServers": { "unipile": { "url": "https://developer.unipile.com/mcp?branch=v2.0", "headers": { "X-API-KEY": "your-scoped-api-key" } } } }
# Codex CLI and the Codex IDE extension share this file [mcp_servers.unipile] url = "https://developer.unipile.com/mcp?branch=v2.0" http_headers = { X-API-KEY = "your-scoped-api-key" } # Verify: codex mcp list
{ "mcpServers": { "unipile": { "httpUrl": "https://developer.unipile.com/mcp?branch=v2.0", "headers": { "X-API-KEY": "your-scoped-api-key" } } } } # Verify: /mcp inside Gemini CLI
Server connected. Try: "Add Sales Navigator lead search to the prospecting page, and hide it when the account has no seat."
1
Start with a Development applicationIn the Unipile dashboard, work in your Development application: connect a test LinkedIn account that holds a Sales Navigator seat through Hosted Auth, create a Scope with it and a scoped Account API key for that Scope. Production stays untouched, and an MCP client never gets a global or Service key.
2
Add the server to your coding agentPaste the config for your client, with the scoped key in the X-API-KEY header. Restart the client if it does not pick it up right away.
3
Describe the feature, review the codeDescribe the Sales Navigator feature you need. The agent reads the routes, writes the code in your project and runs requests on the Development app. Switch the key to Production when the flow passes.
Seat, contracts, on behalf of the user

Whose Sales Navigator seat does your integration use?

The seat of the user who connected the account. While you build, a test account on your Development application. In production, the LinkedIn account each user connected through Hosted Auth, with the Sales Navigator subscription that user already pays for, inside workflows that user starts and controls.
1 · Your coding agent Codex, Cursor, Claude Code Reads the Sales Navigator routes, writes the code
2 · Unipile MCP server Hosted, scoped API key Runs test requests on your Development app
3 · Unipile API The Sales Navigator routes Scopes the action to one account ID
4 · LinkedIn LinkedIn Sales Navigator seat LinkedIn's own rules, credits and limits apply
5 · The user's account The user Connected through Hosted Auth Their lists, their searches, their InMail credits
Connected account · prospecting-appConnected
The userLinkedIn
Sarah MitchellLinkedIn · Sales Navigator seat · linked by the user through Hosted Auth
Account IDacc_7f3…c91, the only identifier your code stores
ContractsListed with GET /v2/{account_id}/linkedin/contracts; Sales Navigator selected with POST /v2/{account_id}/linkedin/contracts/{contract_id}/select
InMailCredits read with GET /v2/{account_id}/linkedin/inmail-credits
SessionHeld by Unipile, never exposed to your app
ReconnectDisconnect
Without a seat, no Sales Navigator routesThe Sales Navigator routes answer only when the connected account holds a Sales Navigator seat. Without it, the account still works on the classic LinkedIn search, profile and messaging routes. Your product lists the contracts first, selects the Sales Navigator one when the account has several, and hides the feature when there is none.
Data stays in the user's sessionSearches, lists and profiles are routed through the authenticated user's own LinkedIn session. Unipile keeps no independent archive, index or database of LinkedIn profiles, leads or conversations: each request runs on a user-initiated action.
An independent technical intermediaryUnipile is an independent technical intermediary, not affiliated with LinkedIn. Each request is relayed to the account one end user connected through Hosted Auth, on behalf of that user, bounded by what that user can already do from their own Sales Navigator seat.
LinkedIn sets the limits, you respect themSearch pagination and InMail credits are defined by LinkedIn for each seat. Unipile relays the live usage signals so your product can pause or inform the user. How often it acts on an account remains a customer-side decision.
Honest limits

What the Sales Navigator MCP does not change

The server does not lift LinkedIn's rules and does not promise volume. The Sales Navigator API gives your product the seat's real signals, so the feature you ship works inside them, the way the seat owner would.
What LinkedIn enforces
A Sales Navigator seat is requiredThe Sales Navigator routes answer only on an account that holds the seat. The seat is the user's own LinkedIn subscription; Unipile does not provide one.
InMail creditsEach InMail spends a credit of the user's seat, on the terms LinkedIn sets for that seat. Read the balance with GET /v2/{account_id}/linkedin/inmail-credits before you show the composer.
Search paginationSales Navigator searches return results page by page, within what LinkedIn lets the seat see. Your code pages with the cursor the API returns; it cannot fetch more than the seat itself can.
Invitation quotas still applyA connection request sent from a lead page uses the same weekly quota LinkedIn applies to the account, seat or no seat.
Checkpoints at connection timeLinkedIn may ask the account owner for a code or an in-app confirmation when the account is linked. Hosted Auth walks the user through it; your code never sees a password.
What to build into your product
Writes are user actionsSave a lead to a list, save an account, send an InMail: each one is triggered by the user in your UI, never by a background loop.
Check the seat before showing the featureList the contracts, select the Sales Navigator one when there are several, and hide Sales Navigator search and lists on accounts that have no seat.
Never retry a write blindlyAfter a timeout on an InMail or a list save, check the chats or browse the list before offering to try again. A blind retry can send twice or spend a second credit.
Read the usage signals and back offUnipile relays rate-limit responses, quota errors and provider states as they happen. Treat a limit as a stop, not as a retry.
One Scope and one scoped key per tenantA workspace only sees the accounts assigned to its Scope. The global key stays on your backend for administration, and the account owner can disconnect at any time.
Four ways to reach Sales Navigator data

How the Sales Navigator MCP options compare

Every Sales Navigator MCP server is third-party, so the real question for a product team is how each one reaches Sales Navigator, on whose seat, and what you can ship with it. The four families you will find, side by side.
Unipile MCP server Community open-source servers Public-data marketplaces No-code MCP bridges
How it reaches Sales Navigator Unipile MCP serverThe seat each of your users connects through Hosted Auth, then the Sales Navigator API routes Community open-source serversYour own LinkedIn login on your machine, driven by a browser session Public-data marketplacesPublic pages, no seat, results served from a data collection pipeline No-code MCP bridgesTheir LinkedIn app connection and a set of predefined actions
Sales Navigator features Unipile MCP serverLead and account search, search from a URL, lead lists, account lists, InMail, plus the Sales Navigator profile variant Community open-source serversMostly the classic profile; Sales Navigator depends on the project Public-data marketplacesPublic profiles and companies, not the user's lists or InMail No-code MCP bridgesPredefined actions, usually outside Sales Navigator
Read, or read and act Unipile MCP serverRead and act: search, save to a list, send an InMail, as features of your product Community open-source serversMostly read, a few writes depending on the project Public-data marketplacesRead only No-code MCP bridgesPredefined writes, little reading
Hosting and clients Unipile MCP serverHosted, one URL, any coding agent over HTTP: Codex, Cursor, Claude Code, Gemini CLI, Windsurf Community open-source serversSelf-hosted, local or Docker, usually one client at a time Public-data marketplacesHosted, token per client No-code MCP bridgesHosted, one generated URL per configuration
Other LinkedIn products and channels Unipile MCP serverLinkedIn Classic and Recruiter, plus WhatsApp, Instagram, Telegram, Gmail, Outlook, IMAP, Google and Outlook calendars Community open-source serversNone Public-data marketplacesOther public data sources No-code MCP bridgesThousands of apps, each with a shallow action set
Pricing model Unipile MCP serverPer connected account, whatever the request volume, 7-day free trial Community open-source serversFree, you host and maintain it Public-data marketplacesPer credit or per result No-code MCP bridgesPer task or per action
Whose terms your product works under Unipile MCP serverEach user's own account and Sales Navigator subscription, in workflows the user initiates and controls from your product Community open-source serversYour personal account, at your own risk Public-data marketplacesThe marketplace's data collection terms No-code MCP bridgesThe bridge's terms and its LinkedIn app permissions
Categories are described generically on purpose. What sets the Unipile server apart is the account model: your product searches, saves and sends as the user who connected the seat, with that user's lists and InMail credits, behind a single server URL shared with LinkedIn Classic, Recruiter and eight other channels.

Sales Navigator MCP FAQ

The questions people actually type: official or not, the server URL, lead search, the seat, InMail, MCP versus API, accounts and price.
Not from LinkedIn: it does not publish a Sales Navigator MCP server, and Sales Navigator search, lists and InMail are not open to third-party products through its developer program. The Unipile MCP server is a hosted third-party server generated from the Unipile API, and it exposes the Sales Navigator API routes: lead and account search, search from a Sales Navigator URL, lead lists and account lists. Your coding agent reads them and writes the feature into your product, where each user connects their own account and your code acts on behalf of that authenticated user. Unipile is an independent technical intermediary and is not affiliated with, endorsed by, or sponsored by LinkedIn.
The same URL as the rest of the Unipile API: https://developer.unipile.com/mcp?branch=v2.0, over streamable HTTP, with a scoped Account API key in the X-API-KEY header. There is no separate Sales Navigator server. Paste it into Codex, Cursor, Claude Code, Gemini CLI or Windsurf, and the agent finds the Sales Navigator routes on its own.
Yes. The agent reads POST /v2/{account_id}/linkedin/sales-navigator/search/people and its filter set (job title, seniority, function, headcount, location, changed jobs, lead lists, saved searches and more), resolves typed values to IDs with GET /v2/{account_id}/linkedin/sales-navigator/search/parameters, writes the search into your project and runs it on your Development application. Account search uses POST /v2/{account_id}/linkedin/sales-navigator/search/companies, and a search the user built in Sales Navigator runs from its URL with POST /v2/{account_id}/linkedin/sales-navigator/search.
The server connects, but the Sales Navigator routes only answer on an account that holds a Sales Navigator seat. Without it, the account works on the classic LinkedIn search, profile and messaging routes. Your code lists the account's contracts with GET /v2/{account_id}/linkedin/contracts, selects the Sales Navigator one with POST /v2/{account_id}/linkedin/contracts/{contract_id}/select when there are several, and hides the feature when there is none. The seat is the user's own LinkedIn subscription; Unipile does not sell one.
Yes, as a user action. An InMail starts a chat with POST /v2/{account_id}/chats/send, with the subject in specifics.linkedin.sales_navigator.subject. Each InMail spends a credit of the user's seat; read the balance with GET /v2/{account_id}/linkedin/inmail-credits before showing the composer, and never retry a send after an ambiguous error, since a retry can send twice.
Same routes, different moment. The Sales Navigator API is what your product calls in production, over REST or the official SDKs, with its own scoped keys. The Sales Navigator MCP is how your coding agent reads those routes while you build: it discovers the endpoints, reads the schemas, writes the code and tests it on your Development application. Nothing runs through the MCP server in production unless you choose to.
While you build, the test accounts of your Development application. In production, only the account an end user connected through Hosted Auth and that sits in your Scope: your code receives an account ID, never credentials, and every request runs on behalf of that authenticated user, inside a workflow the user initiates and controls from your product. How often your product acts on an account is a customer-side decision within LinkedIn's limits.
The MCP server is included in every Unipile plan, with no per-message or per-request fee. Billing is per connected account, whatever the channel: from 49 EUR per month for up to 10 accounts, then 5 EUR per additional account, down to 3 EUR at volume. The 7-day free trial needs no credit card. Full grid on the pricing page. The Sales Navigator seat itself is the user's LinkedIn subscription.