LinkedIn MCP Server: build LinkedIn features into your product with an AI coding agent
Give Codex, Cursor, Claude Code or Gemini CLI an agent that understands the Unipile LinkedIn API. It reads the endpoints, writes messaging, profile search, invitations, Sales Navigator and Recruiter features into your project, and tests them on a Development application, through the hosted Unipile MCP server.
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
Add LinkedIn messaging and Sales Navigator search to my ATS. Recruiters connect their own LinkedIn account from Settings.
Read endpointPOST /v2/auth/linkschema loaded
Added POST /api/accounts/connect on the backend: it creates the hosted auth link and returns the URL. The Settings page opens it and stores the account ID on the recruiter.
Now the Sales Navigator search on the candidate sourcing page.
Run requestPOST /v2/{account_id}/linkedin/sales-navigator/search/people200 OK
Describe the next feature…
The short answer
Does LinkedIn have an official MCP server?
No. LinkedIn does not publish a Model Context Protocol server, and its developer program does not open messaging, search or Recruiter to third-party products. The Unipile MCP server is a hosted third-party server generated from the Unipile API: your coding agent reads the LinkedIn endpoints and writes the integration into your product, where each user connects their own LinkedIn account through Hosted Auth and your code acts on behalf of that authenticated user.
The server URL
https://developer.unipile.com/mcp?branch=v2.0
AuthHeader
X-API-KEY with a scoped Account API key, over streamable HTTP. One URL for LinkedIn and eight other channels.AccountsYour Development application's test accounts while you build; in production, the LinkedIn 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 code in your project
1
You describe the featureAdd LinkedIn people search to the sourcing page, then retrieve the selected profile.
2
The agent reads the LinkedIn endpoints
Read endpointPOST /v2/{account_id}/linkedin/search/peopleschema loaded
3
It writes the code and tests it on your Development applicationAdded searchPeople() and getProfile() in linkedin.service.ts, wired to the sourcing page. Ran both on the Development app: 25 results, profile opened.
Prompts, not glue code
What your coding agent builds on LinkedIn
Pick an integration job. Each transcript shows the prompt you give the agent, the LinkedIn endpoints 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.Sync each recruiter's LinkedIn inbox into my ATS and let them reply from the candidate page, InMail included.
Search endpoints"chats messages send"3 matches
Run requestGET /v2/{account_id}/chats12 chats
Created
linkedin/inbox-sync.ts (chats and messages upserted on the candidate, cursor pagination) and POST /candidates/:id/reply, which calls the send route with the chat's own account ID. Ran the sync on the Development app: 12 chats, 87 messages imported.A LinkedIn inbox inside your product, from one prompt
The agent reads the chat and message contracts, writes the sync job and the reply endpoint in your stack, and runs the first requests on your Development application. InMail goes through the same routes when the connected account has a Recruiter or Sales Navigator seat.
Endpoints the agent uses
GET/v2/{account_id}/chatsGET/v2/{account_id}/chats/{chat_id}/messagesPOST/v2/{account_id}/chats/{chat_id}/messages/send
Common mistake: Mixing IDs. A message is always sent on the account that owns the chat; keep
LinkedIn messaging API guide
account_id and chat_id together from the list call to the send call.Implement Unipile Hosted Auth so each user connects their own LinkedIn account from Settings, and store the account ID on the user.
Read endpointPOST /v2/auth/linkschema loaded
Run requestPOST /v2/auth/link201 · link
Added
POST /api/accounts/connect on the backend: it creates the auth link with your key and returns the hosted URL. The Settings button opens it, and the callback stores the new account_id on the user. Verified on the Development app with a test LinkedIn account.Your users connect their own LinkedIn account, your app gets an account ID
Hosted Auth is the page Unipile serves to your users so they link their LinkedIn Classic, Recruiter or Sales Navigator account themselves. The agent wires the link creation on your backend, the redirect on your frontend and the storage of the account ID, which every later LinkedIn request needs.
Endpoints the agent uses
POST/v2/auth/linkGET/v2/accounts/{account_id}POST/v2/auth/checkpoint
Common mistake: Creating the auth link from the browser. The link is created on your server with your key; the frontend only receives the hosted URL.
Implement Hosted Auth with an agent
Add LinkedIn people search to the sourcing page with the classic filters, then retrieve the selected profile.
Read endpointPOST /v2/{account_id}/linkedin/search/peopleschema loaded
Run requestGET /v2/{account_id}/users/{user_id}200 OK
Added
searchPeople(filters) and getProfile(id) in linkedin.service.ts, the results grid with the API's pagination cursor, and the profile drawer. Tested on the Development app: 25 results, profile opened with headline, location and current company.Search with LinkedIn's own filters, then read the profile
People, company, post and job searches use the filters the user already has on LinkedIn. The agent reads the search parameters route to build the filter form, calls the search once, and fetches only the profile the user opens. Results are what the authenticated user can see from their own session.
Endpoints the agent uses
GET/v2/{account_id}/linkedin/search/parametersPOST/v2/{account_id}/linkedin/search/peopleGET/v2/{account_id}/users/{user_id}
Common mistake: Fetching every profile of a results page. Show the search results, then call the profile route only for the one the user opens.
LinkedIn profile API guide
Let recruiters send a connection request with a note from the candidate page, and show their pending invitations.
Read endpointPOST /v2/{account_id}/users/me/relation-requestsschema loaded
Run requestGET /v2/{account_id}/users/me/relation-requests7 pending
Added
POST /candidates/:id/invite (calls the relation request route with the note, 300 characters max) and the pending invitations list on the recruiter dashboard. Quota errors from the API are shown to the recruiter instead of retried. Tested on the Development app.Invitations from the user's account, inside LinkedIn's weekly quota
Connection requests, follows, pending and accepted invitations: the network routes act on the account the user connected and stay within the quota LinkedIn applies to that account. Your product exposes them as user actions, one request at a time.
Endpoints the agent uses
POST/v2/{account_id}/users/me/relation-requestsGET/v2/{account_id}/users/me/relation-requestsGET/v2/{account_id}/users/{user_id}/relations
Common mistake: Retrying an invitation on a quota error. Surface the limit to the user; the quota is LinkedIn's, per account and per week.
LinkedIn API: invitations and networking
Add Sales Navigator lead search to the prospecting page and let the user save results to one of their lead lists.
Run requestGET /v2/{account_id}/linkedin/sales-navigator/search/parametersfilters
Run requestPOST /v2/{account_id}/linkedin/sales-navigator/search/people143 leads
Built the filter form from the search parameters route, the lead search with cursor pagination, and "Save to list" on the lead-lists save route. The page checks the account's contracts first and hides the feature when no Sales Navigator seat is found. Tested on the Development app.
Sales Navigator search and lead lists, on the user's own seat
Lead and account searches with the full Sales Navigator filter set, saved lead lists and account lists. The feature works with the seat the user connected: their filters, their lists, their InMail credits. No browser session, no extension, the same server URL.
Endpoints the agent uses
GET/v2/{account_id}/linkedin/sales-navigator/search/parametersPOST/v2/{account_id}/linkedin/sales-navigator/search/peoplePOST/v2/{account_id}/linkedin/sales-navigator/lead-lists/{list_id}/save
Common mistake: Assuming every LinkedIn account has a seat. List the contracts with
Sales Navigator API guide
GET /v2/{account_id}/linkedin/contracts first, and select one when there are several.Sync our Recruiter projects and pipelines into the ATS, and check job slot credits before publishing a posting.
Run requestGET /v2/{account_id}/linkedin/recruiter/projectsproject list
Run requestPOST /v2/{account_id}/linkedin/recruiter/projects/{project_id}/pipeline34 candidates
Added the Recruiter sync job (projects, pipeline stages and candidates upserted on the ATS), the job slots credits check before publish, and contract selection when the account has several. Tested on the Development app with a Recruiter test contract.
Recruiter projects, pipelines and job postings in your ATS
Projects, pipeline candidates, talent pool search, applicants and resumes, job postings and job slot credits: the Recruiter routes answer on the contract the user selected. An ATS gets the whole Recruiter surface without a Recruiter-specific integration.
Endpoints the agent uses
GET/v2/{account_id}/linkedin/recruiter/projectsPOST/v2/{account_id}/linkedin/recruiter/projects/{project_id}/pipelineGET/v2/{account_id}/linkedin/recruiter/job-slots-credits
Common mistake: Calling Recruiter routes on a Classic account. They answer only on a Recruiter contract; check
Recruiter search API guide
GET /v2/{account_id}/linkedin/contracts before showing the feature.Real routes, complete paths
What the server exposes for LinkedIn
The server exposes the Unipile API itself, so what your coding agent can build on LinkedIn is what the API does, not a reduced list. On a connected LinkedIn account, 119 of the 179 operations apply, grouped below with a build prompt for each family. An operation is one HTTP method on one path of the Unipile API v2. Paths below are complete, on the API base URL
https://api.unipile.com, with the scoped key in the X-API-KEY header.119operations usable on a LinkedIn account, out of 179 in the API
3LinkedIn account types: Classic, Recruiter, Sales Navigator
1server URL and one scoped key, for LinkedIn and the eight other channels
0endpoints to guess: the agent reads the exact schema before it writes code
25 operations
Messages and conversations
List the inbox, read a thread, start a chat, send, forward or react. InMail goes through the same routes on a Recruiter or Sales Navigator seat.
GET/v2/{account_id}/chats
GET/v2/{account_id}/chats/{chat_id}/messages
POST/v2/{account_id}/chats/{chat_id}/messages/send
14 operations
Profiles, invitations, network
Read a profile, send or accept a connection request, list pending invitations, followers and relations, follow a member.
GET/v2/{account_id}/users/{user_id}
POST/v2/{account_id}/users/me/relation-requests
GET/v2/{account_id}/users/{user_id}/relations
6 operations
LinkedIn search
People, companies, posts and jobs search with the classic LinkedIn filters, or from a LinkedIn search URL the user already built.
POST/v2/{account_id}/linkedin/search/people
POST/v2/{account_id}/linkedin/search/companies
GET/v2/{account_id}/linkedin/search/parameters
20 operations
Posts, comments, reactions
List a member's posts, read comments and reactions, publish a post, comment or reply from the connected account.
GET/v2/{account_id}/users/{user_id}/posts
GET/v2/{account_id}/posts/{post_id}/comments
POST/v2/{account_id}/posts
10 operations
Sales Navigator
Lead and account searches with Sales Navigator filters, saved lead lists and account lists, on the user's own Sales Navigator seat.
POST/v2/{account_id}/linkedin/sales-navigator/search/people
GET/v2/{account_id}/linkedin/sales-navigator/lead-lists
POST/v2/{account_id}/linkedin/sales-navigator/lead-lists/{list_id}/save
25 operations
Recruiter
Projects, talent pool search, pipelines, saved candidates, applicants and their resumes, job postings from a Recruiter contract.
GET/v2/{account_id}/linkedin/recruiter/projects
POST/v2/{account_id}/linkedin/recruiter/search/people
POST/v2/{account_id}/linkedin/recruiter/projects/{project_id}/pipeline
10 operations
Job postings
Create, edit, publish and close job postings, check the budget, list applicants and read their resumes, from the user's LinkedIn account.
GET/v2/{account_id}/linkedin/jobs
POST/v2/{account_id}/linkedin/jobs/{job_id}/applicants
POST/v2/{account_id}/linkedin/jobs/{job_id}/publish
9 operations
Company pages and account
Company profiles, the pages the user manages, InMail credits, Recruiter contracts, skill endorsements, and a passthrough for any other LinkedIn call.
GET/v2/{account_id}/linkedin/company/{company_id}
GET/v2/{account_id}/linkedin/inmail-credits
GET/v2/{account_id}/linkedin/company/pages
One complete request, exactly as the agent runs it
The server follows every Unipile API release, so a new LinkedIn 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
Sales Navigator MCP and Recruiter MCP, on the same server
LinkedIn publishes no Sales Navigator MCP server and no Recruiter MCP server, and most LinkedIn MCP servers stop at the classic profile. The Unipile server exposes the Sales Navigator and Recruiter routes of the LinkedIn API to your coding agent, so a prospecting or sourcing feature ships with the seat or contract the connected account already has. No browser session, no extension, the same server URL.
Sales Navigator10 routes + contracts + InMail
Lead and account searches with the full Sales Navigator filter set, searches from a Sales Navigator URL the user already built, saved lead lists and account lists. Your feature works with the user's lists, their filters and their InMail credits.
What the seat unlocks
People and company searches with Sales Navigator filtersPOST /v2/{account_id}/linkedin/sales-navigator/search/peoplePOST /v2/{account_id}/linkedin/sales-navigator/search/companiesPOST /v2/{account_id}/linkedin/sales-navigator/search (from a Sales Navigator URL)
Lead lists and account lists: browse and saveGET /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}/saveGET /v2/{account_id}/linkedin/sales-navigator/account-lists
Search parameters and InMail creditsGET /v2/{account_id}/linkedin/sales-navigator/search/parametersGET /v2/{account_id}/linkedin/inmail-credits
Recruiter25 routes
Projects, pipelines, saved candidates, talent pool search, applicants and their resumes, job postings and job slot credits. An ATS gets the whole Recruiter surface without a Recruiter-specific integration.
What the contract unlocks
Projects and pipelines: list, create, edit, save a candidateGET /v2/{account_id}/linkedin/recruiter/projectsPOST /v2/{account_id}/linkedin/recruiter/projects/{project_id}/pipelinePOST /v2/{account_id}/linkedin/recruiter/projects/{project_id}/pipeline/candidate/save
Recruiter people search, from filters or from a Recruiter URLPOST /v2/{account_id}/linkedin/recruiter/search/peoplePOST /v2/{account_id}/linkedin/recruiter/search (from a Recruiter URL)POST /v2/{account_id}/linkedin/recruiter/projects/{project_id}/talent-pool/search
Applicants, resumes, job postings and job slot creditsPOST /v2/{account_id}/linkedin/recruiter/projects/{project_id}/talent-pool/applicantsGET /v2/{account_id}/linkedin/recruiter/projects/{project_id}/talent-pool/applicants/{applicant_profile_id}/resumeGET /v2/{account_id}/linkedin/recruiter/jobsGET /v2/{account_id}/linkedin/recruiter/job-slots-credits
GET /v2/{account_id}/linkedin/contracts and selects one with POST /v2/{account_id}/linkedin/contracts/{contract_id}/select.
"Add talent pool search to the ATS and let recruiters save candidates to a project."
LinkedIn Recruiter MCP: the full page
Recruiter search API guide
Access follows the subscription of the connected account. A Classic account gets messaging, profiles, invitations, posts and classic search. A Sales Navigator seat adds the lead and account routes. A Recruiter contract adds the project and pipeline routes. All paths are on
https://api.unipile.com, and your code can check what the account has with GET /v2/{account_id}/linkedin/contracts.Quick start
Add it to your coding agent in one line
There is no separate LinkedIn server to install: the hosted Unipile MCP server covers LinkedIn under the same URL as every other channel. Point your coding agent at it with a scoped API key, and it reads the LinkedIn endpoints 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
# 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 LinkedIn people search to the sourcing page, then retrieve the selected profile."
1
Start with a Development applicationIn the Unipile dashboard, work in your Development application: connect a test LinkedIn account 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 LinkedIn feature you need. The agent reads the endpoints, writes the code in your project and runs requests on the Development app. Switch the key to Production when the flow passes.
On behalf of the user
Whose LinkedIn account does your integration act on?
While you build, on the test accounts of your Development application. In production, on the LinkedIn account each user connected through Hosted Auth, inside workflows that user starts and controls.
1 · Your coding agent
Codex, Cursor, Claude Code
Reads the contract, writes the code
2 · Unipile MCP server
Hosted, scoped API key
Runs test requests on your Development app
3 · Unipile API
The LinkedIn routes
Scopes the action to one account ID
4 · LinkedIn
Classic, Recruiter, Sales Navigator
LinkedIn's own rules and quotas apply
5 · The user's account
Connected through Hosted Auth
Their inbox, their network, their limits
Sarah MitchellLinkedIn · Sales Navigator seat · linked by the user through Hosted Auth
Account ID
acc_7f3…c91, the only identifier your code storesScopeWorkspace 42 · scoped Account API key
SessionHeld by Unipile, never exposed to your app
StatusConnected · status changes arrive by webhook
ReconnectDisconnect
Honest limits
What LinkedIn limits still apply
The server does not lift LinkedIn's rules and does not promise volume. The API gives your product the account's real signals so the feature you ship works inside them, the way the account owner would.
What LinkedIn enforces
Invitation quotas per account and per weekConnection requests are capped by LinkedIn for each account. Your product sends one per user action and surfaces the limit when LinkedIn returns it.
Messaging volumes and InMail creditsMessages go to existing connections or open profiles. InMail spends the credits of the Sales Navigator or Recruiter seat, visible with
GET /v2/{account_id}/linkedin/inmail-credits.Search pagination and daily search limitsClassic search is paginated and rationed by LinkedIn; Sales Navigator and Recruiter seats get deeper results. Your code pages with the cursor the API returns, within what the account is allowed to see.
Seats and contractsSales Navigator and Recruiter routes answer only if the connected account holds the subscription. Check the contracts before showing the feature.
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, and the checkpoint routes let your app submit the code; your code never sees a password.
What to build into your product
Writes are user actionsSend, invite, comment, post, save to a list: each one is triggered by the user in your UI, never by a background loop.
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.
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.
Handle reconnect and checkpoint statesMap the account status to your UI (connected, needs a code, needs reconnection) so users know what to do, and never retry a checkpoint in a loop.
Use webhooks for anything continuousIf your product must react to every new message, subscribe to webhooks and let the event bring the message, instead of polling the inbox.
Four ways to connect a product to LinkedIn
How the LinkedIn MCP options compare
Every LinkedIn MCP server is third-party, so the real question for a product team is how each one reaches LinkedIn, on whose account, 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 LinkedIn
Unipile MCP serverThe LinkedIn account each of your users connects through Hosted Auth, then the LinkedIn API routes
Community open-source serversYour own LinkedIn login on your machine, driven by a browser session
Public-data marketplacesPublic pages, no account, results served from a data collection pipeline
No-code MCP bridgesTheir LinkedIn app connection and a set of predefined actions
LinkedIn surfaces
Unipile MCP serverClassic, Sales Navigator, Recruiter, plus company pages and job postings
Community open-source serversClassic profile only
Public-data marketplacesPublic profiles, companies and posts
No-code MCP bridgesA handful of actions on the company page or personal profile
Read, or read and act
Unipile MCP serverRead and act: messages, invitations, posts, comments, lists, projects, 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 channels on the same server
Unipile MCP serverEight: 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 LinkedIn 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 reads and acts as the user who connected the account, including on Sales Navigator and Recruiter, behind a single server URL shared with eight other channels.
LinkedIn MCP Server FAQ
The questions people actually type: official or not, the server URL, how the agent tests, Sales Navigator MCP and Recruiter MCP, accounts, code and price.
No. LinkedIn does not publish a Model Context Protocol server, and its developer program does not open messaging, search or Recruiter to third-party products. The Unipile MCP server is a hosted third-party server generated from the Unipile API: your coding agent reads the LinkedIn endpoints and writes the integration 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.
There is one URL for the whole Unipile API, LinkedIn included:
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 server per channel. Paste it into Codex, Cursor, Claude Code, Gemini CLI or Windsurf, and the agent discovers the LinkedIn endpoints on its own.On your Development application. Connect a test LinkedIn account through Hosted Auth, create a Scope with it and a scoped key for that Scope, and give that key to the agent. It runs the real routes (
GET /v2/{account_id}/chats, POST /v2/{account_id}/linkedin/search/people) on the test account, checks the responses and fixes the code. Production accounts only enter the picture when your reviewed code ships with its own scoped keys.Not from LinkedIn: it publishes neither a Sales Navigator MCP server nor a Recruiter MCP server. The Unipile MCP server exposes both, when the connected account holds the seat or contract. A Sales Navigator seat unlocks lead and account searches, lead lists and account lists (
POST /v2/{account_id}/linkedin/sales-navigator/search/people, GET /v2/{account_id}/linkedin/sales-navigator/lead-lists). A Recruiter contract unlocks projects, pipelines, talent pool search, applicants and job postings (GET /v2/{account_id}/linkedin/recruiter/projects, POST /v2/{account_id}/linkedin/recruiter/projects/{project_id}/pipeline). Your code lists the account's contracts and selects one.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.
No. LinkedIn's developer program covers a narrow set of partner products and does not expose messaging, search or Recruiter to third parties. The Unipile server works with the LinkedIn account your user connects, through the same LinkedIn API Unipile offers over REST. What you need is a Unipile scoped Account API key, created in the dashboard.
You paste the configuration into your coding agent and describe the LinkedIn feature in plain language. The agent reads the endpoints, writes the code in your project and tests it on the Development app; you review it like any pull request. In production your product calls the same routes over the REST API or the official SDKs, with its own scoped keys.
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.
Instagram