Connect LinkedIn to Cursor through MCP
Cursor reads .cursor/mcp.json inside a project and ~/.cursor/mcp.json globally, both under an mcpServers object. Same key as Claude Desktop, so a block written for that moves across unchanged. What does not move across is the threat model: the project file sits inside the repository you have open, and the thing reading it can edit your files and propose shell commands. LinkedIn publishes no MCP server — 10 of the 13 third-party ones name Cursor in their own documentation, and 4 of them put no LinkedIn account behind the connection at all.
- Config shapes from
- cursor.com/docs/mcp ↗
- Last read
Two files, one object, and a field Cursor's own documentation disagrees with itself about
All three blocks below are copied from Cursor's MCP page, read against the raw page rather than through a summary. Take the server's actual entry from its own project — these are the shape it goes in, not something to install. The scope you choose is a real decision and not a preference: .cursor/mcp.json is a file in your repository, and ~/.cursor/mcp.json is not.
- 1Decide the scope before you decide the server
A project config is .cursor/mcp.json, a file inside the repository you have open. A global config is ~/.cursor/mcp.json in your home directory. Both take the same mcpServers object. Anything holding a credential belongs in the global file or behind an environment variable, because the project file is a file your version control can see.
- 2Take the server’s block from the project, not from an article
Every block on a profile page here is the maintainer’s own, copied whole. Cursor reads the same mcpServers key Claude Desktop does, so a Claude Desktop block moves across unchanged; a VS Code block does not, because VS Code keys on servers instead and the same JSON under the wrong key fails without an error.
- 3Put the token in env, or in ${env:NAME}
Cursor resolves ${env:NAME}, ${userHome}, ${workspaceFolder}, ${workspaceFolderBasename}, ${pathSeparator} and ${/} inside command, args, env, url and headers, so a token can stay in your shell profile rather than in the file. The envFile field is available to stdio servers only; a remote server has to use interpolation instead.
- 4Check the tool list, and leave approval on
Cursor asks for approval before using an MCP tool by default, and shows the arguments behind the arrow next to the tool name. Read the tool list before the first run: a LinkedIn server that can send a message registers that tool alongside the read ones, and an allowlist written for a formatter is not an allowlist written for a tool that acts under your name.
- 5When nothing appears, read the MCP log
Open the Output panel — Cmd+Shift+U on macOS, Ctrl+Shift+U on Windows and Linux — and select MCP Logs from the dropdown. It carries server initialisation, tool calls and errors. For an npm-launched server that is running old code, Cursor’s own remedy is to remove it from Customize, clear the npm cache and add it back.
A local server, launched by Cursor
Cursor's Node example. Most LinkedIn MCP servers are this shape — 11 of the 13 can run as a local stdio process, and the rest are reachable only over HTTP. Note what is not in the block: the page's own field table lists type as required with the value "stdio", and every stdio example it prints leaves it out. Adding it satisfies both readings.
{
"mcpServers": {
"server-name": {
"command": "npx",
"args": ["-y", "mcp-server"],
"env": {
"API_KEY": "value"
}
}
}
}Cursor's MCP documentation, CLI Server — Node.js ↗, read 20 September 2026. command is required and must be on your path or given in full; args, env and envFile are optional. envFile is available to stdio servers only.
A remote server, reached over HTTP
The hosted LinkedIn servers take this form: url and headers in place of command and args. The first line is the documentation's own comment above the block, kept because the rule on this site is that a config block is copied whole; it is not part of the object, and a strict JSON parser will reject it.
// MCP server using HTTP or SSE - runs on a server
{
"mcpServers": {
"server-name": {
"url": "http://localhost:3000/mcp",
"headers": {
"API_KEY": "value"
}
}
}
}Cursor's MCP documentation, Remote Server ↗, read 20 September 2026. For a server that uses OAuth, Cursor also takes an auth object beside url, where CLIENT_ID is required, CLIENT_SECRET is optional, and an omitted scopes array is discovered from the server's /.well-known/oauth-authorization-server.
The token, kept out of the repository
The block worth reading twice if you are using project scope. Cursor resolves ${env:NAME}, ${userHome}, ${workspaceFolder}, ${workspaceFolderBasename}, ${pathSeparator} and ${/} inside command, args, env, url and headers. That is how a LinkedIn session cookie or a scraper key stays in your shell profile instead of in a tracked file.
{
"mcpServers": {
"remote-server": {
"url": "https://api.example.com/mcp",
"headers": {
"Authorization": "Bearer ${env:MY_SERVICE_TOKEN}"
}
}
}
}Cursor's MCP documentation, Config interpolation ↗, read 20 September 2026. The same page's own guidance on secrets is to use environment variables rather than hardcoding them.
10 of the 13 name Cursor, and the 3 that do not still run in it
Two different claims, kept apart. The second column is whether the maintainer wrote Cursor down, which tells you whether there is a tested install path and somebody to file an issue with. It is not whether the server works: MCP is a protocol, and a stdio server launched by a command runs the same under any client that can launch it. The column that decides what the connection costs you is the last one.
| Server | Cursor in the project's own docs | How Cursor reaches it | What it hands LinkedIn |
|---|---|---|---|
| Subio Scrape | Cursor | stdio | No account Low No credential of any kind. It sees only what LinkedIn serves a signed-out visitor. |
| Bright Data MCP (LinkedIn tools) | Cursor | stdio and Streamable HTTP | Vendor API key Low A Bright Data API token. No LinkedIn account, login or cookie is involved. |
| Anysite MCP Server | Cursor | stdio and Streamable HTTP | Vendor API key Low An Anysite API key or OAuth token. No LinkedIn login, cookie or grant is involved anywhere in the MCP path. |
| Insaight | Not named. The project names a shape instead: Any stdio MCP client that can run uvx (not documented, but the repository's own entry is a plain stdio one) | stdio | Vendor API key Low An Apify API token. No LinkedIn credentials of any kind. |
| LinkedIn Ads MCP Server | ChatGPT and Cursor are named in the repository description and the hosted tip, with no setup instructions in this repository | stdio | OAuth 2.0 Medium OAuth 2.0 against LinkedIn's Marketing API, under a developer app you register yourself. No cookie, no scraping, no browser session. |
| eliasbiondo/linkedin-mcp-server | Cursor | stdio and Streamable HTTP | Browser session Medium Your own LinkedIn account, signed in by hand in a browser window the server opens. No API key, no OAuth, no pasted credential. |
| stickerdaniel/linkedin-mcp-server | Not named. The project names a shape instead: Any MCP-compatible client over stdio | stdio and Streamable HTTP | Browser session High Your own LinkedIn account, through a browser the server drives. No API key and no LinkedIn API. |
| La Growth Machine MCP | Cursor | Streamable HTTP | Browser session High A browser sign-in to La Growth Machine, not to LinkedIn. LinkedIn is reached through an identity already connected inside the workspace. |
| Linked API MCP | Cursor | stdio and Streamable HTTP | Browser session High Two vendor-issued API tokens, not LinkedIn credentials. You sign in to LinkedIn once, by hand, inside the vendor's cloud browser. |
| gtm-api/linkedin-mcp | Cursor | stdio and Streamable HTTP | Browser session High OAuth to the vendor for interactive clients, or a vendor bearer token for headless ones. LinkedIn is connected separately, inside the vendor dashboard. |
| LinkedGrow | Cursor | Streamable HTTP | Browser session High An API key for the MCP server. LinkedIn itself is connected separately, by entering the account's email and password in the application. |
| southleft/linkedin-mcp | Not named, and the project names no catch-all client either. | stdio | High Four credentials at once. Posting and analytics run on your own LinkedIn developer app; messaging, connections and search run on a session taken from a signed-in browser. |
| linkedincli | Cursor | stdio | High A session from your own logged-in browser, replayed against LinkedIn's internal API. No OAuth, no API key, no developer app. |
The exposure badge measures one thing — the chance that the LinkedIn account behind the server ends up restricted — and is derived from the credential and from whether the server writes to LinkedIn, not typed per record. The full rule, and the 7 servers researched and left out, are on the directory. Client lists read from each project's own documentation on 20 September 2026.
Start with a server that holds no LinkedIn credential, because the mistakes are cheap
3 of the 4 servers that need no LinkedIn account name Cursor in their own documentation. Two of them are below, each block the project's own and already in the mcpServers shape Cursor reads, so it goes straight into either file. Neither can write to LinkedIn, and neither has an account to restrict.
Subio Scrape — no credential of any kind
It reads what LinkedIn serves a signed-out visitor and nothing else, by driving a browser it wipes the session cookies from before every run. That is the whole ceiling: no people search, no feed, no messages. It also needs a desktop session where a browser window can render, so it will not run over SSH or in a container. The project ships per-client install guides and Cursor is one of them. The block it publishes is labelled for every client that uses an mcpServers object, which is what Cursor is.
{
"mcpServers": {
"subio-scrape": {
"command": "npx",
"args": ["-y", "github:alijancb/subio-mcp"]
}
}
}Copied from the Subio Scrape repository ↗, read 20 September 2026. It installs from a personal GitHub account with no pinned version, so the code that runs can change between two runs of the same command — the full record is on its profile.
Bright Data MCP (LinkedIn tools) — a vendor key instead of your login
Hand it a profile, company, job, post or people-search URL and it returns structured JSON, fetched by the vendor rather than by you. The exposure does not disappear; it moves from your account to a vendor's relationship with LinkedIn. Two things to know before it is in a repository: the token in the env block is a plaintext secret and a spend authorisation, and this is a general web-access server of which a handful of tools are the LinkedIn extractors — 69 tools will arrive in your tool list.
{
"mcpServers": {
"Bright Data": {
"command": "npx",
"args": ["@brightdata/mcp"],
"env": {
"API_TOKEN": "<your-api-token-here>"
}
}
}
}Copied from the Bright Data MCP (LinkedIn tools) repository ↗, read 20 September 2026. Swap the literal token for ${env:API_TOKEN} if this is going in project scope. Pricing, the free allowance and what each extractor returns are on its profile; the paid alternative with server-side filtering is Anysite MCP Server.
LinkedIn data in an editor is a build tool, not an outreach tool
The Claude Desktop reader wants an assistant that can look something up mid-conversation. The Cursor reader has a repository open and a thing they are making. Those are different jobs, and a LinkedIn MCP server is genuinely good at one of them.
The best reason to have this in an editor rather than a browser. Call the tool on one profile, read the JSON it actually returns — not the JSON the documentation implies — and write the type against it in the next file. The vendor-key servers are the ones worth wiring up for this, because you can run the call as many times as the allowance permits without anything happening to a LinkedIn account.
A list of company pages becomes a JSON file in the repository, in one pass, without a browser tab and a copy-paste loop. This is the job Bright Data MCP (LinkedIn tools) and Anysite MCP Server are built for, and neither of them can write to LinkedIn at all.
Reading a company page or a job posting into the document you are drafting, once, while you are drafting it. Worth being honest about the ceiling: a server holding no credential sees only the signed-out page, and LinkedIn walls a signed-out client after a handful of them.
An editor is not a scheduler. The 8 servers that write to LinkedIn do it from a live session, and a campaign that keeps running needs rate limiting, a queue and a record of what was sent — none of which a chat pane has. The invitation and InMail ceilings that decide whether any of it survives are on the LinkedIn limits page.
Cursor's MCP log is an Output panel for debugging — server initialisation, tool calls, errors — and it is not an audit trail. If what happened on LinkedIn needs to be reconstructable later, the tool that did it should be keeping the record, and most of these do not.
3 servers reach Sales Navigator and every one requires the seat to be yours already. The 2,500-result search cap and the $119.99 a month are the same in an editor as anywhere else, read from LinkedIn on 12 September 2026.
A coding agent holding a live LinkedIn session has two things a chat window does not
Your source tree, and a terminal. That is not an argument against connecting anything — it is the reason the choice of server matters more here than it does in Claude Desktop, and the reason the controls below are worth setting before the first run rather than after an incident. Every control named is Cursor's own, from its own documentation.
A headline, an About section, a post body, an inbound message. All of it arrives as a tool result in the same context that is editing your files and proposing commands. The projects that take this seriously say so in their own tool descriptions — LinkedGrow wraps lead names, headlines, post text and replies in an untrusted-content marker, and Subio Scrape's SECURITY.md names prompt injection as a reportable vulnerability. Treat a tool result as data, never as an instruction, and do not point a read tool at an inbox you have not read.
Cursor asks before using an MCP tool and shows the arguments behind the arrow next to the tool name. But MCP follows the same Run Modes as terminal commands, and its documentation says that in Auto-review mode allowlisted MCP tools run immediately while everything else is routed through the classifier. Allowlist a tool, not a server: stickerdaniel/linkedin-mcp-server registers 19 tools of which 2 send, and linkedincli registers 43 with no rate limiting and no confirmation step of its own.
This is the difference from Claude Desktop, stated plainly. claude_desktop_config.json lives in an application directory; .cursor/mcp.json lives next to your code, where it is one absent gitignore line from being committed and one screen-share from being read aloud. A LinkedIn session cookie in that file is full account access with no password and no second factor. Use ~/.cursor/mcp.json, or ${env:NAME}.
The open arbitrary-file-read report against LinkedIn Ads MCP Server — its upload path takes a caller-controlled absolute path with no directory confinement — was filed on 12 July 2026 and was still unanswered on 20 September 2026. In a desktop chat client that is a bad bug. In an editor, the files that process can reach are the repository, the dotfiles beside it and whatever else is in your home directory.
Cursor's enterprise MCP Allowlist, under Team Settings, approves local servers by command pattern and remote ones by URL pattern, and takes a per-server tool allowlist that restricts which tools may run automatically. Its own documentation states that leaving that list empty allows every tool from the server, so an approved LinkedIn server with no tool list is an approved send path. Local command servers also carry a network mode — allow all, allowlist, deny all, or no sandbox.
A server disabled in Customize does not load and does not appear in chat, which Cursor documents as useful for troubleshooting and for reducing tool clutter. For a LinkedIn server it is also the cheapest control on this page: connect it for the afternoon you need it, turn it off afterwards, and the question of what an agent might do with a live session while you are working on something else does not arise.
Cursor's controls read from its MCP documentation ↗ on 20 September 2026, where the page's own security note is that MCP servers can access external services and execute code on your behalf. LinkedIn's side of it — Section 8.2, and what enforcement lands on — is quoted in full on connecting LinkedIn to Claude, and applies identically here.
This page exists so the config is right, not because a crowd is searching for it
Worth saying, because the honest version of a reference page includes what it does not know. Two of the claims underneath this URL are weaker than the ones on the Claude page beside it, and both are checkable.
Google's suggest endpoint returns linkedin mcp for cursor as a completion on the linkedin mcp seed, which means it clears the frequency threshold suggest applies. That is the whole of the demand evidence. The claude linkedin seed, by contrast, returns a full set of build-and-connect completions, which is why that page is the longer one. No cursor linkedin seed was probed, and no volume figure, trend or forum evidence was obtainable at all — so there is none quoted anywhere on this site. The suggest query itself ↗
Cursor's own table names stdio, SSE and Streamable HTTP as its transports. The specification names two. The transports page defines two bindings, stdio and Streamable HTTP, and HTTP+SSE — the original 2024-11-05 transport — is not one of them. It sits instead in the specification's registry of deprecated features: deprecated in revision 2025-03-26, reclassified as Deprecated under the feature lifecycle policy by SEP-2596, migration path Streamable HTTP, earliest removal "Three months after SEP-2596 reaches Final". That is a condition, not a date. A server still offering an SSE endpoint is offering a legacy compatibility path, not a choice. Both pages were read on 20 September 2026 and both are accurate about themselves; the consequence for a reader is narrow but real, which is that a LinkedIn server offering only an SSE endpoint is on a removal path rather than on a supported one. The specification’s deprecated-features registry ↗
Everything on this page is the state of two documentation sites on one day. The protocol underneath both changed substantially on 28 July 2026, removing the initialize handshake and protocol-level sessions outright. Anything here that stops matching what Cursor publishes should be treated as this page being out of date rather than as Cursor being wrong, and the date at the top is there so you can tell how far out.
The questions people arrive with, answered directly
Where does Cursor keep its MCP config, and what is the key?
Two files, one shape. .cursor/mcp.json inside a project, for tools that belong to that project, and ~/.cursor/mcp.json in your home directory for tools you want everywhere. Both use a top-level mcpServers object, the same key Claude Desktop and Claude Code use, so a block written for either of those moves across unchanged. VS Code is the one that differs: it keys on servers, and a block pasted under the wrong key fails silently.
Is there an official LinkedIn MCP server for Cursor?
We found no MCP server published by LinkedIn or by Microsoft as of 20 September 2026. The check covered five published places: LinkedIn's developer product catalogue, which lists no MCP product among its consumer, marketing, sales, talent, plugin and regulatory entries; the LinkedIn API documentation on Microsoft Learn, whose six business lines contain no MCP section; the README of the microsoft/mcp repository, which names thirty-one Microsoft servers and no LinkedIn one; the MCP Registry, where a search for "linkedin" returns third-party entries and none under a com.linkedin or com.microsoft name; and GitHub's own search, which finds no repository matching "mcp" in the linkedin organisation. It stops where publication stops: a partner-only or unannounced integration would appear in none of them. Nothing about that answer is Cursor-specific — there is no LinkedIn server for any client, and every one of the 13 in this directory is built by somebody else. 10 of them name Cursor in their own documentation.
Does a Cursor stdio entry need a type field?
Cursor’s documentation answers this twice and the two answers do not match. Its STDIO server table lists type as Required with the value "stdio"; every stdio example on the same page omits it, and so do the blocks the server projects publish. Including "type": "stdio" satisfies both readings and costs nothing, which is what to do while the page contradicts itself. Claude Code is the clearer case: it reads an entry with no type as stdio, and needs type only when the entry has a url.
Will Cursor run a LinkedIn tool without asking me?
By default, no — Cursor’s documentation says it asks for approval before using MCP tools and shows the arguments behind the arrow next to the tool name. But MCP follows the same Run Modes as terminal commands, and in Auto-review mode allowlisted MCP tools run immediately while everything else goes to the classifier. That is a reasonable default for a formatter and a different proposition for a tool that sends a connection request under your name, so allowlist tool by tool rather than server by server.
Is it safe to put a LinkedIn token in .cursor/mcp.json?
It is a file in your repository, so treat it as one. A LinkedIn session cookie is equivalent to full account access — whoever holds it acts as you, with no password and no second factor — and a vendor API key is a bill. Either belongs in ~/.cursor/mcp.json, or referenced as ${env:NAME} from your shell profile, which Cursor resolves inside command, args, env, url and headers. This is the one setup difference from Claude Desktop that actually matters: Claude Desktop’s config lives in an application directory, and Cursor’s project config lives next to your code.
Can an agent in Cursor use my Sales Navigator seat?
3 of the 13 servers reach Sales Navigator and none of them supplies a seat. LinkedIn’s own Sales Navigator API says it is not accepting new partners, so each of them drives the interface with your logged-in session and your own subscription — a Core seat is $119.99 a month, read from LinkedIn on 12 September 2026. The 2,500-result search cap applies to the agent exactly as it applies to you, because it is a limit of the product rather than of the client.
My server does not appear in Cursor. What is wrong?
Work down four things in order. The key: mcpServers, not servers. The file: .cursor/mcp.json in the project you actually have open, or ~/.cursor/mcp.json. The toggle: a server switched off in Customize will not load and will not appear in chat. The log: Output panel, MCP Logs in the dropdown, which shows initialisation errors and crashes. If the server starts but behaves like an older version, it is an npm cache — Cursor’s documented remedy is to remove it, run npm cache clean --force, and add it back.
Will connecting one of these get my LinkedIn account restricted?
It can, and which server you chose decides whether the question applies at all. 4 of the 13 put no LinkedIn account behind them, so there is nothing of yours to restrict. The rest drive a real signed-in session, and Section 8.2 of the User Agreement prohibits using bots or other automated methods to access the service, add or download contacts, send or redirect messages, or create, comment on, like, share or re-share posts. LinkedIn’s prohibited-software page says the consequence lands on the member’s account rather than on the software. This page describes the routes; it does not tell you to take one.
Global scope, approval on, read tools first
10 of the 13 servers name Cursor and 4 put no LinkedIn account behind the connection. Start with one of those, keep the credential out of the repository, and add a write tool only once you have watched the read ones run.