gtm-api/linkedin-mcp
A hosted service whose meta-tools expose more than 160 LinkedIn actions, discovered at runtime, including Sales Navigator and Recruiter messaging. The ones that write reach a real account, behind a server-side preview-then-confirm gate. OAuth to the vendor for interactive clients, or a vendor bearer token for headless ones. LinkedIn is connected separately, inside the vendor dashboard.
- Last read
What it is built for, and the jobs it cannot do
The second card is the one a repository README never contains. Both are written from the project's own documentation and source, read on 20 September 2026.
Agent-driven LinkedIn outreach where writes matter: connection requests, member messages, InMail, Sales Navigator and Recruiter messaging, plus posting, commenting and reacting, run against an account you own with rate limits and a preview-then-confirm gate enforced server-side rather than in your own code.
Anyone who needs the automation to run on their own machine, or wants auditable execution code. The LinkedIn work happens on the vendor's infrastructure and the session never touches your device. Also not for pure bulk data extraction priced per record, which hosted scrapers do more cheaply, and not for anyone who needs an arrangement compatible with LinkedIn's User Agreement, which the README itself says does not permit third-party automation.
- Publisher
- gtm-api — the vendor of the hosted service it drives — the vendor of the product it drives.
- Licence
- MIT — open client, closed service
- Version
- 1.3.0
- Runs
- Hosted by the vendor
- Transport
- stdio and Streamable HTTP
- Repository
- github.com/gtm-api/linkedin-mcp
- Homepage
- gtm-api.com/linkedin-mcp-server/
- Last read
The repository is MIT-licensed and public, but it is the public interface only: a stdio launcher, three example client configs, an agent skill and the tool definitions. The LinkedIn execution layer runs on the vendor's servers and is not in the repository, so the service itself cannot be self-hosted or audited.
OAuth to the vendor for interactive clients, or a vendor bearer token for headless ones. LinkedIn is connected separately, inside the vendor dashboard.
A real browser signed in to your LinkedIn account, driven by the server — on your machine, or on a vendor’s.
It can reach everything you can, which is the point and the problem. Section 8.2 of the User Agreement bars bots and scraping by any means, and enforcement lands on the account rather than on the software.
The server writes to LinkedIn as you, over a route LinkedIn does not sanction. Automated messages and connection requests under a member’s own name are what the enforcement is built to catch, and the account is what it acts on.
A gtm-api account plus a LinkedIn account connected inside the vendor dashboard. You never paste a LinkedIn cookie or password into the MCP client. The MCP credential is either the OAuth consent flow, where there is no key to paste, or a vendor API key sent as a bearer header or read from an environment variable. One mode per connection: with a key attached, the OAuth flow never starts. The connected LinkedIn account is opened in a vendor-run anti-detect cloud browser with a dedicated proxy, which is why this is filed as a browser server.
Account risk is derived from the authentication class and from whether the server writes to LinkedIn — not judged per project. The 5 classes and the rule that maps them are on the LinkedIn MCP server directory; the ceilings LinkedIn enforces on any account, automated or not, are on LinkedIn limits. What this particular server exposes, and what it does with your credentials, is below.
19 of its 19 write actions land on LinkedIn under your own account
These are the tool names the server registers, as a client sees them. An assistant can call any tool the server exposes once it is connected, so the list below is the whole surface, not a feature summary.
- list_toolsets
- get_toolset_tools
- call_tool
All 3 tools it registers are named above. Three meta-tools. The 160-plus LinkedIn actions are discovered at runtime and invoked through the third one; the action names are not enumerated anywhere in the docs, and the bundled agent skill says never to guess one.
What it can read
11 read actions, written as what they return rather than as the tool signature.
- Profile enrichment at four depths, plus experience, skills, education, posts, featured items, contact info, languages, certifications, recommendations, comment activity, reaction activity, interests and services.
- Company enrichment at two depths, company posts, and public-identifier lookup.
- Post details, and activity-identifier lookup from a post URL.
- Search over people, companies, jobs, events, groups, courses, products, schools and service providers.
- Sales Navigator people search and company search, plus their parameter lookups.
- Recruiter people search, plus its parameter lookup.
- A post's comments, reactors and resharers.
- Message search, message metrics, your latest messages, and the same three for Sales Navigator and Recruiter separately.
- Download a message attachment, standard or Sales Navigator.
- Connection-request search, metrics, latest and sync; the same four for incoming invitations.
- Your scheduled posts.
What it can write, and where the write lands
19 of the 19 write actions land on LinkedIn itself. Those are the rows that carry the account risk: an automated message, invitation, post or campaign change is activity under your own name, and Section 8.2 of the User Agreement bars sending it by automated means. Section 8.2 of the User Agreement ↗
| Action | Where it lands | What it does |
|---|---|---|
send_linkedin_connection_request | Your LinkedIn account | Sends a connection request. Explicitly not idempotent: a second send while one is pending returns 409. |
withdraw_linkedin_connection_request | Your LinkedIn account | Withdraws a pending request. |
accept_linkedin_connection_invitation | Your LinkedIn account | Accepts an incoming invitation. |
ignore_linkedin_connection_invitation | Your LinkedIn account | Ignores an incoming invitation. |
send_linkedin_message | Your LinkedIn account | Sends a message as the connected account. |
send_linkedin_voice_message | Your LinkedIn account | Sends a voice message as the connected account. |
send_linkedin_inmail | Your LinkedIn account | Sends an InMail, which spends the account's own credits. |
send_linkedin_sales_nav_message | Your LinkedIn account | Sends a message through Sales Navigator. Requires a seat on the connected account. |
send_linkedin_recruiter_message | Your LinkedIn account | Sends a message through Recruiter. Requires a seat on the connected account. |
react_linkedin_message | Your LinkedIn account | Reacts to a message in a thread. |
delete_linkedin_message_on_linkedin | Your LinkedIn account | Deletes a message on LinkedIn, not only in the vendor mirror. |
start_linkedin_group_conversation | Your LinkedIn account | Opens a group conversation. |
create_linkedin_post | Your LinkedIn account | Publishes a post as the connected account. |
create_linkedin_comment | Your LinkedIn account | Publishes a comment under the account's name. |
react_linkedin_post | Your LinkedIn account | Reacts to a post. |
unreact_linkedin_post | Your LinkedIn account | Removes a reaction. |
delete_linkedin_post | Your LinkedIn account | Deletes one of the account's posts. |
delete_linkedin_comment | Your LinkedIn account | Deletes one of the account's comments. |
delete_linkedin_scheduled_post | Your LinkedIn account | Deletes a scheduled post before it publishes. |
Read the middle column before the third. A write that lands off LinkedIn — a vendor workspace, a CRM, a local file — is undone by deleting a row. A write that lands on LinkedIn has already been seen by another member.
Installing it, in the project's own commands
Every command and every configuration block below is the project's own, copied unchanged on 20 September 2026. Where a project publishes no config block, this page says so rather than composing one — a snippet written here would be a snippet the maintainer never tested.
Hosted, Claude Code
claude mcp add --transport http gtm-api https://mcp.gtm-api.com/mcpWith a key instead of the OAuth consent flow, append: --header "Authorization: Bearer gtm_live_..."
stdio launcher, for clients that cannot speak HTTP
npx -y @gtm-api/linkedin-mcpDocker
docker run -i --rm -v gtm-mcp-auth:/home/node/.mcp-auth gtmapi/linkedin-mcpMount the volume, or the consent step runs on every start. The Docker image lags the npm launcher.
The configuration block
Client config keys are not interchangeable, and a block pasted under the key a different client expects fails silently rather than erroring. That is why the blocks below are the project's own, in the clients it names, rather than one block normalised here.
Hosted endpoint
{
"mcpServers": {
"gtm-api": {
"url": "https://mcp.gtm-api.com/mcp"
}
}
}npx launcher variant, also verbatim from the README
{
"mcpServers": {
"gtm-api": {
"command": "npx",
"args": ["-y", "@gtm-api/linkedin-mcp"]
}
}
}Docker variant, also verbatim from the README
{
"mcpServers": {
"gtm-api": {
"command": "docker",
"args": ["run", "-i", "--rm", "-v", "gtm-mcp-auth:/home/node/.mcp-auth", "gtmapi/linkedin-mcp"]
}
}
}Nothing local on the default path: no Docker, no Node, no browser, no local LinkedIn session. What it does require is a hosted account — the free plan allows one connected account with no card — and a LinkedIn account connected through the vendor dashboard, which opens it in a vendor-run anti-detect cloud browser with a dedicated proxy. Node and npx are needed only for the stdio launcher, Docker only for the container variant. The Sales Navigator and Recruiter tools need the corresponding paid LinkedIn seat on the connected account.
Claude Desktop; Claude Code; Claude API; ChatGPT (through connectors); Cursor; LangChain; n8n; Any MCP-compatible client; a typed REST API with webhooks is offered as an alternative surface. Where the file goes in each Claude surface. The same block in Cursor. What a ChatGPT connector can and cannot reach.
streamable-http against the remote endpoint; stdio through the launcher, which bridges to it.
A managed service at a remote endpoint. An npx or Docker launcher exists for stdio-only clients, but it bridges to that same endpoint.
The vendor's own figures, quoted rather than computed
Free plan: $0 forever, one connected account, one user, no card, with a relaxed sync cadence and capped daily activity. Paid: $39 per connected account per month for one to four accounts; five accounts is $150 a month. A dedicated mobile proxy is $15 per account per month on top. Unlimited API calls, no per-action fees. The README claims volume pricing "from $10/account at scale"; the public pricing page's visible tiers start at $39 and no $10 figure is displayed. Read 20 September 2026.
Six dedicated tools rather than reused generic ones: Sales Navigator people search, company search, parameter lookup, message send, latest messages and attachment download. A Sales Navigator seat on the connected account is required; the server does not supply one.
Four tools, search and messaging oriented: Recruiter people search, parameter lookup, message send and latest messages. Recent commits add contract-identifier filters to conversation and activity-log search. A Recruiter seat on the connected account is required.
None of the figures above are LinkedIn's. They are third-party prices in the currency and the tiering each project publishes, read on 20 September 2026 and quoted rather than converted.
The LinkedIn seat is a separate bill, and this server does not supply one. Sales Navigator Core is $119.99 per seat per month, verified 12 September 2026 — every Sales Navigator tier and what it really costs, and the other servers that reach that seat. Recruiter Lite is $170 a month and full Recruiter is quote-only — LinkedIn Recruiter pricing, and what a server can do with that seat.
The code has moved recently
1 days between the last code change and the day these figures were read. Code changed within 90 days of the day this directory was checked.
Young but moving fast. The repository was created in late July 2026, so roughly eight weeks old at the observation date, with around 150 commits. Listed in the official MCP registry. The npm launcher is at 1.3.0; the Docker image was last updated in July, so the container path lags the npm one.
Active means code changed within 90 days of the observation date; stale means up to 365 days. It is measured from the last change to code, not to the README, and never from the maintainer's own adjective. Anything past a year is dropped from this directory rather than published as dormant.
- Stars
- 90 — 0 forks.
- Last commit
- — Substantive schema work, not README polish.
- Open issues
- 0
- Status
- Active
- Observed
Every figure in this section was read from GitHub on , and star and issue counts move daily. The issue count is the Issues tab, not the API field of the same name — that one counts pull requests as issues and overstates every repository in this directory.
What to check before you point it at a real account
Both cards below are read from the repository and its own security documentation. A project saying what it does with a session is evidence of intent, not proof of behaviour.
Every write action here runs on a personal LinkedIn account you own, and LinkedIn's User Agreement does not permit third-party automation. The README says this itself, and says no vendor can promise otherwise. Account loss is the real downside, and it falls on you, not the vendor. The write actions are the risk surface; the read actions carry far less. The mitigations are vendor-side, real and unaudited: one isolated anti-detect cloud browser and dedicated proxy per account, programmatic warm-up from a fraction of the platform maximum, per-action daily budgets checked before dispatch across sixteen buckets, randomised pacing between bulk actions, and a mandatory preview-then-confirm step on every outward action. The advertised ban-rate figure is explicitly self-reported and cannot be independently checked, so it is not repeated here. One documented failure mode: the connection-request tool is not idempotent, and a second send while a request is pending returns 409.
The repository's SECURITY.md covers vulnerability disclosure only — where to report, no public issues, receipt confirmed within three business days, reporters credited unless they decline. It says nothing about credential handling, token storage or data retention. Structurally, the LinkedIn session lives on the vendor's infrastructure, so the vendor holds the account session, the message history and the scraped data. The Docker config mounts a named volume for the OAuth token cache. Bearer-token mode puts a long-lived key in a client config file or an environment variable.
2 things that will waste an hour
Small, checkable and specific to this project — a stale package name, a broken link, a manifest that advertises something the code removed.
- The 160-plus action names are not enumerated anywhere in the docs; they are discovered at runtime through the meta-tools.
- A CONNECT.md file in the repository root is an internal development document pointing at localhost, not user-facing setup.
The servers that do a comparable job, and how they differ
Same rows, same sources, same observation date. The first column is this server.
| gtm-api/linkedin-mcpv1.3.0 | Linked API MCPv2.3.12 | stickerdaniel/linkedin-mcp-serverv4.24.4 | |
|---|---|---|---|
| Authenticates with | Browser session | Browser session | Browser session |
| Account risk | High | High | High |
| Writes to LinkedIn | 19 actions | 15 actions | 2 actions |
| Tools registered | 3 | 62 | 19 |
| Sales Navigator tools | Yes | Yes | No |
| Recruiter tools | Partial | No | No |
| Runs | Hosted by the vendor | Either | Self-hosted |
| Last code change | 19 September 2026 — active | 16 September 2026 — active | 20 September 2026 — active |
| Licence | MIT, open client, closed service | MIT, open client, closed service | Apache-2.0, open source |
Linked API MCP
Browser sessionA paid cloud-browser service whose tools cover messaging, connections, search, fetching, posting, engagement and Sales Navigator, plus admin tools that let an agent manage seats and rate limits. The MIT repository alone does nothing without the vendor.
stdio and Streamable HTTP62 toolsRead 20 September 2026stickerdaniel/linkedin-mcp-server
Browser sessionProfiles, companies, jobs, the feed, post search and your own inbox, read through a browser you sign into on your own account. Two tools write — a message and a connection request — and only the message tool takes a confirmation flag.
stdio and Streamable HTTP19 toolsRead 20 September 2026
Every page this profile was read from
12 pages — the repository, its documentation and, where one exists, the vendor's own pricing page. Nothing on this profile is summarised from another directory or from a blog post about the project.
- github.com/gtm-api/linkedin-mcp
- raw.githubusercontent.com/gtm-api/linkedin-mcp/master/README.md
- api.github.com/repos/gtm-api/linkedin-mcp
- api.github.com/repos/gtm-api/linkedin-mcp/commits?per_page=5
- raw.githubusercontent.com/gtm-api/linkedin-mcp/master/packages/mcp.linkedin/linkedin_messages/mcp-tools.ts
- raw.githubusercontent.com/gtm-api/linkedin-mcp/master/packages/mcp.linkedin/linkedin_scraping/mcp-tools.ts
- raw.githubusercontent.com/gtm-api/linkedin-mcp/master/packages/mcp.linkedin/linkedin_posting/mcp-tools.ts
- raw.githubusercontent.com/gtm-api/linkedin-mcp/master/skills/gtm-api-linkedin/SKILL.md
- raw.githubusercontent.com/gtm-api/linkedin-mcp/master/SECURITY.md
- registry.modelcontextprotocol.io/v0/servers?search=linkedin
- registry.npmjs.org/@gtm-api/linkedin-mcp
- gtm-api.com/pricing/
All of them read on . A repository moves faster than a price does: if a tool list or a command here no longer matches the project, the project changed and this page has not been re-read yet.
Read the write table before you connect it
19 of this server's actions land on LinkedIn under your own account, on a browser session. That is high account risk, and the account is what enforcement acts on.