LinkedIn Ads MCP Toolkit
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| DASHBOARD_OPEN | No | Exact value `true` opens the generated dashboard in the default browser | |
| LINKEDIN_SCOPES | No | Space-separated approved OAuth scope names | rw_ads r_ads_reporting r_organization_social w_organization_social |
| DASHBOARD_END_DATE | No | Dashboard end date in `YYYY-MM-DD` format; default is today | |
| LINKEDIN_CLIENT_ID | Yes | Developer application client ID; required for login and refresh | |
| LINKEDIN_MAX_PAGES | No | Maximum pages per collection traversal; integer 1–10,000 | 1000 |
| LINKEDIN_PAGE_SIZE | No | Collection request page size; integer 1–100 | 100 |
| LINKEDIN_READ_ONLY | No | Exact `true` or `false`; hides and blocks mutation tools | false |
| TOKEN_STORAGE_PATH | No | Token-file path; an absolute path is recommended | ~/.linkedin-ads-mcp/tokens.json |
| DASHBOARD_START_DATE | No | Dashboard start date in `YYYY-MM-DD` format; default is 90 days before today | |
| LINKEDIN_API_VERSION | No | Marketing API version in `YYYYMM` format | 202601 |
| LINKEDIN_MAX_RETRIES | No | Extra GET attempts; integer 0–10. `0` means one attempt | 3 |
| DASHBOARD_OUTPUT_PATH | No | Generated HTML output path | dashboard.html |
| LINKEDIN_REDIRECT_URI | No | HTTP loopback URL with a registered host, port, and path; no credentials, query, or fragment | http://localhost:3000/callback |
| LINKEDIN_CLIENT_SECRET | Yes | Developer application secret; required for login and refresh | |
| LINKEDIN_ADS_ACCOUNT_ID | No | Positive numeric account ID; required for dashboard generation | |
| LINKEDIN_AUTH_NO_BROWSER | No | Exact value `true` disables automatic browser opening | |
| LINKEDIN_MAX_CONCURRENCY | No | Simultaneous API attempts per client; integer 1–50 | 5 |
| LINKEDIN_ADS_ACCOUNT_NAME | No | Dashboard display name | LinkedIn Ads |
| LINKEDIN_MAX_UPLOAD_BYTES | No | Local upload byte limit; integer 1–104,857,600. LinkedIn restrictions also apply | 20971520 |
| LINKEDIN_OAUTH_TIMEOUT_MS | No | Authorization flow deadline; integer 1–1,800,000 ms | 300000 |
| LINKEDIN_REQUEST_TIMEOUT_MS | No | Per-attempt request/body deadline; integer 1–300,000 ms | 30000 |
| LINKEDIN_RETRY_MAX_DELAY_MS | No | Maximum retry delay; integer from the base delay to 60,000 ms | 30000 |
| LINKEDIN_RETRY_BASE_DELAY_MS | No | Initial retry delay; integer 1–60,000 ms | 1000 |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| get_server_statusA | Returns local configuration and token expiration status without exposing secrets or making API calls. |
| list_ad_accountsA | Lists all LinkedIn Ad Accounts accessible to the authenticated user. Returns account names, IDs, status, currency, and serving statuses. Use this to get an overview of all accounts or find a specific account ID. |
| get_account_detailsA | Retrieves detailed information about a specific LinkedIn Ad Account including status, currency, notification settings, and linked organization. |
| get_campaign_performanceA | Retrieves performance metrics for campaigns within a specified date range. Returns key metrics like impressions, clicks, spend, CTR, conversions, audience penetration, and average dwell time. The primary tool for daily campaign monitoring and optimization decisions. |
| get_creative_performanceB | Retrieves performance metrics for individual ad creatives. Shows which specific ads are performing best, including engagement metrics (likes, comments, shares), video metrics, and average dwell time. Essential for creative optimization. |
| get_campaign_groupsB | Lists all campaign groups for an account with their configuration and optionally aggregated performance. Campaign groups help organize campaigns and control budget at a higher level. |
| get_audience_demographicsA | Retrieves demographic breakdown of who saw or interacted with your ads. Shows performance segmented by job function, seniority, industry, company size, or geographic location. Essential for understanding if you're reaching your target audience. Note: Demographic data has a 12-24 hour delay. |
| get_audience_reachA | Shows unique member reach and native audience penetration for campaigns. Returns LinkedIn's native audiencePenetration metric (approximate unique members reached / total target audience size). Helps understand what percentage of your target audience you've reached. Note: Date range must be 92 days or less. |
| list_saved_audiencesA | Lists saved/matched audiences available in the account for targeting. Shows audience names, sizes, and statuses to help plan campaign targeting. |
| get_conversion_performanceB | Retrieves conversion metrics broken down by conversion type/action. Shows which conversions are being driven by which campaigns, with cost per conversion and conversion value. |
| list_conversionsB | Lists all conversion tracking rules configured for an account. Shows conversion names, types, attribution windows, and enabled status. |
| get_lead_gen_performanceB | Retrieves lead generation form performance including form submissions, qualified leads, and cost per lead. Essential for B2B marketers running lead gen campaigns. |
| list_lead_formsB | Lists all lead generation forms configured for an account with their questions and settings. Helps understand what forms are available and their configuration. |
| compare_performanceB | Compares performance between two time periods, campaigns, or campaign groups. Calculates percentage changes and highlights significant differences. Essential for reporting on performance trends. |
| get_daily_trendsA | Retrieves daily performance trends over a specified period. Returns time-series data for visualizing performance patterns, identifying anomalies, and understanding day-of-week effects. |
| create_campaign_groupB | Creates a new LinkedIn campaign group for organizing campaigns. Campaign groups manage status, budget, and performance across multiple related campaigns. |
| update_campaign_groupB | Updates an existing LinkedIn campaign group. Can change status (ACTIVE/PAUSED/ARCHIVED/DRAFT), budget, name, or end date. |
| delete_campaign_groupA | Deletes a LinkedIn campaign group. Draft groups are deleted immediately. Non-draft groups are set to PENDING_DELETION status. |
| create_campaignB | Creates a new LinkedIn ad campaign within a campaign group. Requires targeting criteria, budget, and objective type. |
| update_campaignA | Updates an existing LinkedIn campaign. Can change status (ACTIVE/PAUSED/ARCHIVED), budget, name, targeting, bid amount, and other settings. Uses partial update - only specified fields are changed. |
| delete_campaignA | Deletes a LinkedIn campaign. Draft campaigns are deleted immediately. Non-draft campaigns are set to PENDING_DELETION status. |
| update_creative_statusA | Updates the intended status of a LinkedIn creative/ad. Can activate, pause, or archive creatives. |
| create_creativeA | Creates a new LinkedIn creative/ad under a campaign. Requires a content reference (post/share URN) or will be created as a reference to existing content. |
| create_inline_adB | Creates a new LinkedIn ad with inline content directly (without needing a pre-existing post). This creates the ad content (text, image/video, landing page, CTA) and the creative in a single call. Use this to create sponsored content ads from scratch. |
| list_campaignsA | Lists campaigns for a LinkedIn Ad Account. Unlike get_campaign_performance (which only returns campaigns with analytics data), this tool returns ALL campaigns including DRAFT and PAUSED campaigns with zero impressions. Supports filtering by campaign group and status. |
| upload_imageA | Uploads an image file to LinkedIn for use in ads. Supports PNG, JPG, and GIF formats. Returns the image URN that can be used as the mediaId when creating inline ads. The image is uploaded in two steps: initialize upload (get URL + URN), then upload binary. |
| search_ad_libraryA | Searches the LinkedIn Ad Library for ads matching criteria. Find and analyze real ads from any advertiser across different countries and time periods. Supports filtering by keyword, advertiser name, country, date range, targeting facets, and impression range. Returns ad preview URLs, advertiser details, targeting information, and impression statistics. Maximum 25 results per request (use pagination). |
| get_analyticsA | Query raw LinkedIn analytics with custom metrics, entity or demographic pivots, filters, and time granularity. Large metric selections are split and merged automatically. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 28 tools
Most tools have clearly distinct purposes (CRUD on campaigns/groups vs. specialized performance retrievals), and descriptions proactively distinguish look-alikes like get_campaign_performance vs. list_campaigns. However, the cluster of performance tools (get_campaign_performance, get_creative_performance, get_audience_demographics, get_conversion_performance, get_lead_gen_performance, get_daily_trends, get_analytics) has overlapping boundaries where an agent could easily pick the wrong one.
Nearly every tool follows a clean snake_case verb_noun pattern (get_, list_, create_, update_, delete_, upload_, compare_, search_). The convention is applied consistently across all 28 tools with no camelCase or naming-style deviations.
28 tools is a large surface that sits just above the comfortable 15-25 range, and several performance tools could plausibly be consolidated under get_analytics. The broad LinkedIn Ads domain (campaigns, creatives, audiences, conversions, lead gen, ad library) does justify most of them, so it's borderline rather than bloated.
Core lifecycle coverage is strong: full CRUD for campaigns and campaign groups, creative creation and status changes, plus extensive read/analytics for audiences, conversions, and lead gen. Minor gaps exist (no create/update for lead forms, audiences, or conversions; no creative delete beyond status), but agents can work around these.