linkedin-ads-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| PORT | No | HTTP port (default 8080). | |
| BASE_URL | No | Public URL of this service. Used for OAuth metadata and as the canonical resource URI tokens are bound to. Required for Mode B. | |
| ALLOWED_EMAILS | No | Comma-separated allow-list of LinkedIn-account emails. Empty = no restriction. | |
| GCP_PROJECT_ID | No | GCP project hosting Firestore. Required for Mode B. | |
| LINKEDIN_CLIENT_ID | No | OAuth client ID from your LinkedIn app. | |
| TOKEN_STORAGE_PATH | No | Override the local token file path. Defaults to ~/.linkedin-ads-mcp/tokens.json. Mode A only. | |
| LINKEDIN_TOKENS_JSON | No | Inline JSON to seed local tokens (overrides the file). Mode A only. | |
| LINKEDIN_REDIRECT_URI | No | Override the LinkedIn callback URL. Defaults to ${BASE_URL}/oauth/callback. | |
| LINKEDIN_CLIENT_SECRET | No | OAuth client secret from your LinkedIn app. |
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 |
|---|---|
| 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_performanceA | 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_groupsC | 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_demographicsB | 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_performanceA | 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_conversionsA | 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_formsA | Lists all lead generation forms configured for an account with their questions and settings. Helps understand what forms are available and their configuration. |
| compare_performanceA | 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_trendsB | 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_groupA | Creates a new LinkedIn campaign group for organizing campaigns. Campaign groups manage status, budget, and performance across multiple related campaigns. |
| update_campaign_groupA | 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_statusB | Updates the intended status of a LinkedIn creative/ad. Can activate, pause, or archive creatives. |
| create_creativeB | 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_adA | 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. |
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 25 tools
Most tools target clearly distinct resources and actions—accounts, campaigns, campaign groups, creatives, audiences, conversions, lead forms, and analytics. The main possible confusion is between create_creative and create_inline_ad, but the descriptions clarify that one references existing content while the other creates content inline; list_campaigns and get_campaign_performance are also explicitly differentiated.
Tool names generally follow a consistent snake_case verb_noun pattern with clear verbs like list, get, create, update, delete, compare, and upload. Minor inconsistencies exist, notably get_campaign_groups is a listing operation while parallel resources use list_, and get_daily_trends/compare_performance use metric-style names rather than resource-object names.
At 25 tools, the surface is on the heavy side for an MCP server. Most tools serve a distinct aspect of LinkedIn ads management, but the number of separate performance/analytics tools and creative-creation variants pushes it into the borderline heavy range.
The server covers the core campaign and creative lifecycle plus performance analytics well, but notable gaps remain: there is no list/get creatives tool, no video upload despite inline ad support mentioning video, and no create/update for lead forms, conversions, or audiences. These gaps require external workarounds for some common workflows.