list_ad_accountsLABSCO SUMMARY
Read and write in one server, so the analysis and the change are the same conversation.
Most reporting connectors stop at reporting. Here "which creative has the best CTR" and "pause the other one" are both callable, which is either the point or the risk depending on who has the credentials. Two API limits shape what you can ask: reach data is capped at a 92-day range, and demographic data lags 12-24 hours, so today's breakdown will not be there yet.
What it is
A server over the LinkedIn Marketing API covering both sides of ad operations: reading performance across accounts, campaigns, creatives, audiences and conversions, and writing campaign groups, campaigns and creatives.
What you get
- 25 specialised tools across accounts, campaigns, creatives, audiences, conversions, analytics and campaign management
- list_ad_accounts and get_account_details establish which account you are working in
- get_campaign_performance, get_creative_performance, get_campaign_groups and list_campaigns cover reporting — list_campaigns includes drafts and paused campaigns with zero impressions
- get_audience_demographics breaks results down by job function, industry, seniority, company size, country and region; get_audience_reach returns unique reach, frequency and native audience penetration
- get_conversion_performance, list_conversions, get_lead_gen_performance and list_lead_forms cover conversions and lead generation
- compare_performance contrasts two time periods or entities; get_daily_trends returns a daily time series
- create_campaign_group, update_campaign_group, create_campaign, update_campaign, create_creative, create_inline_ad, update_creative_status and upload_image handle the write side, with delete tools for groups and campaigns
- Every performance report carries the same metric set, including audience penetration and average dwell time
- Demographic results resolve to readable names rather than internal ids
Requirements
Node.js 18 or higher, and a LinkedIn Developer App attached to a company page with Advertising API access approved — approval typically takes 1-5 business days. Add http://localhost:3000/callback as a redirect URL, then supply LINKEDIN_CLIENT_ID and LINKEDIN_CLIENT_SECRET and run npm run auth once. Tokens are stored under your home directory, last 60 days and refresh automatically. The scopes used are r_ads, r_ads_reporting, rw_ads and r_organization_social.
Setup effort
Build from source — git clone https://github.com/danielpopamd/linkedin-ads-mcp.git
USE CASES
Reporting on the last month
Campaign and creative performance with the full metric set attached.
Finding out who is responding
Breakdowns by job function, industry and seniority, with names rather than ids.
Working out what changed
Compare two periods directly, or read the daily series.
Tracking cost per lead
Lead form submissions and conversion metrics by conversion action.
Acting on what the report showed
Pause a creative, adjust a budget or launch a campaign from the same conversation.
25 tools
Listed in project docs. Your client may show a different list.
get_account_detailsget_campaign_performanceget_creative_performanceget_campaign_groupslist_campaignsget_audience_demographicsget_audience_reachlist_saved_audiencesget_conversion_performancelist_conversionsget_lead_gen_performancelist_lead_formscompare_performanceget_daily_trendscreate_campaign_groupupdate_campaign_groupdelete_campaign_groupcreate_campaignupdate_campaigndelete_campaigncreate_creativecreate_inline_adupdate_creative_statusupload_imageBEFORE YOU INSTALL
What to know first
Tools you get
25 tools named in the project's documentation.
Requires
- node on PATH
- LINKEDIN_CLIENT_ID in your environment
- LINKEDIN_CLIENT_SECRET in your environment
Where it runs
The documented client runs the server on your machine.
INSTALLATION
Connect your client
Server setup
Clone the repository
git clone https://github.com/danielpopamd/linkedin-ads-mcp.git
cd linkedin-ads-mcpInstall dependencies
npm installBuild the project
npm run buildCreate your environment file
cp .env.example .envRun authentication flow
npm run authMCP Clients
Claude Desktop
{
"mcpServers": {
"linkedin-ads": {
"command": "node",
"args": [
"<YOUR_PATH_TO_LINKEDIN_ADS_MCP>/dist/index.js"
],
"env": {
"LINKEDIN_CLIENT_ID": "<YOUR_LINKEDIN_CLIENT_ID>",
"LINKEDIN_CLIENT_SECRET": "<YOUR_LINKEDIN_CLIENT_SECRET>"
}
}
}
}