# LinkedIn Ads in Meta Muse

Adwarp is an open-source MCP server that connects Meta Muse to LinkedIn Ads. Run your own Adwarp endpoint, add it to Muse as a custom connector, then ask Muse to size audiences, draft campaigns and pull reports.

```text
> Draft a LinkedIn campaign for VPs of demand gen at 50 USD a day.
adwarp.create_campaign "VP Demand Gen", 50 USD/day: DRAFT
adwarp.create_text_ad 3 variants: DRAFT
Nothing is live. Review them in Campaign Manager.
```

## Set up in 3 steps

1. Sign in to LinkedIn once. Create a LinkedIn developer app with the Advertising API, then sign in from your terminal. App approval usually takes a day or 2.

   `npx -y adwarp auth login`
2. Deploy your own endpoint. Muse runs in Meta's cloud, so it can't reach your laptop. Deploy Adwarp's endpoint in 1 click, and paste in the values npx -y adwarp auth export prints plus a token from openssl rand -hex 32.

   [Deploy to Vercel](https://vercel.com/new/clone?repository-url=https%3A%2F%2Fgithub.com%2Fadwarp-dev%2Fadwarp&root-directory=apps%2Fweb&project-name=adwarp-mcp&repository-name=adwarp-mcp&env=ADWARP_LINKEDIN_CLIENT_ID,ADWARP_LINKEDIN_CLIENT_SECRET,ADWARP_LINKEDIN_REFRESH_TOKEN,MCP_AUTH_TOKEN&envDescription=LinkedIn%20app%20values%20from%20npx%20-y%20adwarp%20auth%20export%20and%20a%20long%20random%20MCP_AUTH_TOKEN%20that%20your%20AI%20app%20sends%20as%20a%20bearer%20token.&envLink=https%3A%2F%2Fadwarp.dev%2Fdocs%2Fhosted%23self-host-on-vercel)
3. Add it in Muse. Send Muse this message with your endpoint's URL. When it asks for a key, type your MCP_AUTH_TOKEN into the secure prompt as a bearer token, never into the chat.

   > Add a custom MCP server called adwarp at https://your-app.vercel.app/api/mcp

### Setting it up by hand?

The Deploy button asks for these. By hand, create a Vercel project from the Adwarp repo with its Root Directory set to apps/web and add them. If Vercel Authentication covers production, turn it off there, or Muse can't reach the endpoint.

`Vercel environment variables`:

```text
ADWARP_LINKEDIN_CLIENT_ID=...
ADWARP_LINKEDIN_CLIENT_SECRET=...
ADWARP_LINKEDIN_REFRESH_TOKEN=...
MCP_AUTH_TOKEN=<a long random string>
```

## 5 prompts to try first

### How many VPs of demand gen at US software companies can we reach on LinkedIn?

```text
> How many VPs of demand gen at US software companies can we reach on LinkedIn?
adwarp.estimate_audience titles + VP + US + software: 2,140 members
```

### Draft a LinkedIn campaign for VPs of demand gen at 50 USD a day.

```text
> Draft a LinkedIn campaign for VPs of demand gen at 50 USD a day.
adwarp.create_campaign "VP Demand Gen", 50 USD/day: DRAFT
adwarp.create_text_ad 3 variants: DRAFT
Nothing is live. Review them in Campaign Manager.
```

### Put last week's LinkedIn results next to our Meta ads.

```text
> Put last week's LinkedIn results next to our Meta ads.
adwarp.performance_summary LinkedIn, last 7 days: 8 campaigns
The Meta side comes from Muse's own Meta ads connector.
```

### Which LinkedIn ads should I pause this week?

```text
> Which LinkedIn ads should I pause this week?
adwarp.get_performance creative, last 7 days: 41 ads
3 ads under 0.4% click-through rate after 1,500 impressions
```

### What LinkedIn ads is our biggest competitor running?

```text
> What LinkedIn ads is our biggest competitor running?
adwarp.inspect_competitor_ads name search: 394 ads
```

## Why running LinkedIn ads from Muse gets better results

### Meta and LinkedIn in 1 chat

Muse reads your Meta ads through its own connector and Adwarp adds LinkedIn, so 1 question compares both.

### Nothing spends on its own

Every campaign and ad starts as a draft, and Muse can ask before every action, so you approve what goes live.

### Your secret stays in Vercel

Muse holds 1 token for your own endpoint. Your LinkedIn client secret stays in your Vercel project.

## Questions, answered

### Does Meta Muse connect to LinkedIn Ads?

Not on its own. Muse has no LinkedIn Ads connector, so Adwarp adds one: an open-source MCP server that reaches LinkedIn Ads through your own developer app.

### Why do I need my own endpoint?

Muse runs in Meta's cloud, so it can't reach a server on your laptop. Your own endpoint takes 1 bearer token, which is how Muse adds a custom connector, and it keeps your LinkedIn client secret out of Muse. More: [Muse setup in the docs](https://adwarp.dev/docs/clients/muse)

### Can Muse spend money on its own?

No. Every campaign, ad group and ad starts as a draft, and it goes live only when you explicitly ask or switch it on in Campaign Manager.

### Does it work for Google Ads?

Not yet. Adwarp's Google tools run on your machine, which Muse can't reach. More: [Google Ads in Muse](https://adwarp.dev/google-ads/muse)

### Where are my LinkedIn credentials stored?

In your Vercel project's environment variables. Muse keeps only the bearer token for your endpoint, in its secure credential store.

### Which tools work in Muse?

Every LinkedIn tool your endpoint serves: audience sizing, campaigns and ads, reporting and Ad Library search.

List uploads, CRM audiences and the change journal read files on your machine, so they run in Claude, Codex, Cursor or the CLI.

| Feature | In Muse |
| --- | --- |
| Campaigns, audience sizing, reporting | Yes |
| Ad Library through the official API | Yes |
| CSV list uploads | No |
| Salesforce and HubSpot audiences | No |
| Change journal and lift | No |

### What does Muse ask for?

A name, your endpoint's URL, the transport and 1 bearer token.

| Muse asks | Answer |
| --- | --- |
| Name | adwarp |
| URL | https://your-app.vercel.app/api/mcp |
| Transport | HTTP |
| Auth | Bearer token: your MCP_AUTH_TOKEN, typed into the secure prompt |

## Related

- [LinkedIn Ads in Grok](https://adwarp.dev/linkedin-ads/grok): The same endpoint in Grok Bot
- [Campaigns](https://adwarp.dev/linkedin-ads/campaigns): Draft from a brief
- [Reporting](https://adwarp.dev/linkedin-ads/reporting): Spend, CTR and CPC on demand

Not affiliated with or endorsed by LinkedIn or Google.

Canonical page: https://adwarp.dev/linkedin-ads/muse
Last updated: 2026-10-23
