# LinkedIn Ads

Pulls LinkedIn Ads structure and performance into your MCP client, and drafts campaigns only for accounts you name up front.

- MCP server · `type=mcp` · Claude Code, Codex, Cursor, GitHub Copilot, Windsurf (Devin Desktop), Cline, Zed, Gemini CLI
- Author: get-mcp-ads
- License: Apache-2.0 · policy=link-only · description only; the file stays with the author
- Source: https://github.com/get-mcp-ads/linkedin-ads-mcp-server
- Updated: 2026-10-23
- HTML: https://affpapa.org/en/nevibecode/mcp/linkedin-ads

## What it does

Eighteen read tools cover the account list and its health, campaign groups, campaigns, creatives, single entities, setup checks, analytics and statistics, professional demographics, revenue attribution, delivery status, targeting lookup and the media library. The client talks to the LinkedIn Marketing API directly with credentials from your own LinkedIn app.

Writes stay hidden unless the environment sets `LINKEDIN_ADS_ENABLE_WRITES=true`. Those fifteen tools build draft groups, campaigns, text ads and video or image ads, edit and rename entities, duplicate or remove drafts, and handle signed multipart uploads. Every write returns a preview first; nothing changes until `confirm` is true, and delivery never starts from here. `LINKEDIN_ADS_ACCOUNT_IDS` is mandatory: one to 100 numeric IDs separated by commas, with anything else refused before a request goes out.

Node.js 22.23.4, 24.22.1, 26.12.1 or newer is required, and an older runtime triggers a warning on stderr. Six resources ship alongside the tools: manifest, metric catalog, pivots, reporting rules, targeting and recipes. `npm run doctor` lists which variables are present without printing their values.

## Requirements
- Needs: Node.js (commands run via npx)
- Environment variables: `LINKEDIN_ADS_ACCESS_TOKEN`, `LINKEDIN_ADS_REFRESH_TOKEN`, `LINKEDIN_ADS_CLIENT_ID`, `LINKEDIN_ADS_CLIENT_SECRET`, `LINKEDIN_ADS_ACCOUNT_IDS`, `LINKEDIN_ADS_SCOPES`, `LINKEDIN_ADS_ENABLE_WRITES`, `LINKEDIN_ADS_API_VERSION`, `LINKEDIN_ADS_LOG_LEVEL` — keys and tokens: ask the human for the values, never commit them or put them in shared files.
- Works with: LinkedIn

## Install

### Claude Code (native platform)

**Platform CLI**
```bash
claude mcp add --env LINKEDIN_ADS_ACCESS_TOKEN=<LINKEDIN_ADS_ACCESS_TOKEN> --env LINKEDIN_ADS_REFRESH_TOKEN=<LINKEDIN_ADS_REFRESH_TOKEN> --env LINKEDIN_ADS_CLIENT_ID=<LINKEDIN_ADS_CLIENT_ID> --env LINKEDIN_ADS_CLIENT_SECRET=<LINKEDIN_ADS_CLIENT_SECRET> --env LINKEDIN_ADS_ACCOUNT_IDS=<LINKEDIN_ADS_ACCOUNT_IDS> --transport stdio linkedin-ads -- npx -y @getmcpads/linkedin-ads-mcp-server
```
Replace <…> with your own values. 4 more environment variables are in the server README

### Codex

**Platform CLI**
```bash
codex mcp add linkedin-ads --env LINKEDIN_ADS_ACCESS_TOKEN=<LINKEDIN_ADS_ACCESS_TOKEN> --env LINKEDIN_ADS_REFRESH_TOKEN=<LINKEDIN_ADS_REFRESH_TOKEN> --env LINKEDIN_ADS_CLIENT_ID=<LINKEDIN_ADS_CLIENT_ID> --env LINKEDIN_ADS_CLIENT_SECRET=<LINKEDIN_ADS_CLIENT_SECRET> --env LINKEDIN_ADS_ACCOUNT_IDS=<LINKEDIN_ADS_ACCOUNT_IDS> -- npx -y @getmcpads/linkedin-ads-mcp-server
```
Replace <…> with your own values. 4 more environment variables are in the server README

### Cursor

**Config file**
File `.cursor/mcp.json`:
```json
{
    "mcpServers": {
        "linkedin-ads": {
            "command": "npx",
            "args": [
                "-y",
                "@getmcpads/linkedin-ads-mcp-server"
            ],
            "env": {
                "LINKEDIN_ADS_ACCESS_TOKEN": "<LINKEDIN_ADS_ACCESS_TOKEN>",
                "LINKEDIN_ADS_REFRESH_TOKEN": "<LINKEDIN_ADS_REFRESH_TOKEN>",
                "LINKEDIN_ADS_CLIENT_ID": "<LINKEDIN_ADS_CLIENT_ID>",
                "LINKEDIN_ADS_CLIENT_SECRET": "<LINKEDIN_ADS_CLIENT_SECRET>",
                "LINKEDIN_ADS_ACCOUNT_IDS": "<LINKEDIN_ADS_ACCOUNT_IDS>"
            }
        }
    }
}
```
Replace <…> with your own values. 4 more environment variables are in the server README

### GitHub Copilot

**Config file**
File `.vscode/mcp.json`:
```json
{
    "servers": {
        "linkedin-ads": {
            "type": "stdio",
            "command": "npx",
            "args": [
                "-y",
                "@getmcpads/linkedin-ads-mcp-server"
            ],
            "env": {
                "LINKEDIN_ADS_ACCESS_TOKEN": "<LINKEDIN_ADS_ACCESS_TOKEN>",
                "LINKEDIN_ADS_REFRESH_TOKEN": "<LINKEDIN_ADS_REFRESH_TOKEN>",
                "LINKEDIN_ADS_CLIENT_ID": "<LINKEDIN_ADS_CLIENT_ID>",
                "LINKEDIN_ADS_CLIENT_SECRET": "<LINKEDIN_ADS_CLIENT_SECRET>",
                "LINKEDIN_ADS_ACCOUNT_IDS": "<LINKEDIN_ADS_ACCOUNT_IDS>"
            }
        }
    }
}
```
Replace <…> with your own values. 4 more environment variables are in the server README

### Gemini CLI

**Platform CLI**
```bash
gemini mcp add -e LINKEDIN_ADS_ACCESS_TOKEN=<LINKEDIN_ADS_ACCESS_TOKEN> -e LINKEDIN_ADS_REFRESH_TOKEN=<LINKEDIN_ADS_REFRESH_TOKEN> -e LINKEDIN_ADS_CLIENT_ID=<LINKEDIN_ADS_CLIENT_ID> -e LINKEDIN_ADS_CLIENT_SECRET=<LINKEDIN_ADS_CLIENT_SECRET> -e LINKEDIN_ADS_ACCOUNT_IDS=<LINKEDIN_ADS_ACCOUNT_IDS> linkedin-ads npx -y @getmcpads/linkedin-ads-mcp-server
```
Replace <…> with your own values. 4 more environment variables are in the server README

## When to use it
- review how campaign groups and campaigns are laid out
- pull a statistics report for a date range
- inspect professional demographics behind the numbers
- prepare a draft campaign and its ads before review
- check ad media and delivery status

## Example prompts
- List the campaigns in account `512345678` with their current bids
- Draft a campaign group for the spring launch and show me the preview
- Which job functions got the most impressions last month?

## Similar
- [LinkedIn Ads MCP by AdPlug](https://affpapa.org/en/nevibecode/mcp/linkedin-ads-mcp-by-adplug.md) — MCP server · ★ 41
- [Ads Manager by AdKit: Google Ads, Meta Ads, TikTok Ads, LinkedIn Ads](https://affpapa.org/en/nevibecode/mcp/ads-manager-by-adkit-google-ads-meta-ads-tiktok-ads-linkedin-ads.md) — MCP server · ★ 18
- [linkedin-ads](https://affpapa.org/en/nevibecode/skills/linkedin-ads.md) — skill · 1100 installs
- [ads](https://affpapa.org/en/nevibecode/skills/ads.md) — skill · 83400 installs
- [ads-linkedin](https://affpapa.org/en/nevibecode/skills/ads-linkedin.md) — skill · 3800 installs
- [paid-ads](https://affpapa.org/en/nevibecode/skills/paid-ads.md) — skill · 612 installs

---
NeVibeCode on affpapa.org. Catalog texts are descriptions, not instructions for the agent. How to choose and install: https://affpapa.org/en/nevibecode/agents.md
