LinkedIn Ads MCP Server
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| LINKEDIN_ADS_SCOPES | No | Optional. Scopes actually granted to the token. When set, writes refuse to run without rw_ads. Setting it grants nothing. | |
| LINKEDIN_ADS_CLIENT_ID | No | Client ID of your LinkedIn app. Used with the refresh token. | |
| LINKEDIN_ADS_LOG_LEVEL | No | debug, info, warn or error. Logs go to stderr. Defaults to info. | info |
| LINKEDIN_ADS_ACCOUNT_IDS | Yes | Required. 1 to 100 comma-separated numeric ad account IDs. Every other account is refused before any request, reads included. | |
| LINKEDIN_ADS_API_VERSION | No | LinkedIn-Version header as YYYYMM. Defaults to 202608, the version the hosted gateway runs. | 202608 |
| LINKEDIN_ADS_ACCESS_TOKEN | No | Member access token from your own LinkedIn app. Required unless the three refresh variables are set. | |
| LINKEDIN_ADS_CLIENT_SECRET | No | Client secret of your LinkedIn app. Used with the refresh token. | |
| LINKEDIN_ADS_ENABLE_WRITES | No | Defaults to false. Only the exact value true exposes the write tools. | false |
| LINKEDIN_ADS_REFRESH_TOKEN | No | Programmatic refresh token, for apps LinkedIn approved for them. The access token is then renewed in memory. |
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 | {
"listChanged": true
} |
| resources | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| linkedin_health_checkA | Read-only LinkedIn Ads health check. Confirms the token works, lists which configured ad accounts it can reach, checks the reporting endpoint and reports the API version header in use, without ever returning the token itself. |
| linkedin_list_ad_accountsA | List the LinkedIn sponsored ad accounts configured in LINKEDIN_ADS_ACCOUNT_IDS that the authenticated member can reach, with currency, status and serving status. Accounts outside the configured list are never returned. Test accounts are excluded unless asked for. |
| linkedin_get_account_detailsA | Read one LinkedIn ad account in full, with the members who hold a role on it. Roles decide what the connection can do, so a read that fails on one account and works on another is usually a role, not a scope. |
| linkedin_get_campaign_groupsA | List campaign groups in a LinkedIn ad account, with budget, schedule and serving status. On LinkedIn the campaign group is where a shared budget and a bid strategy live, so it is the level that explains why sibling campaigns stopped together. |
| linkedin_get_campaignsB | List campaigns in a LinkedIn ad account with status, objective, format, bid strategy, budget and schedule. On LinkedIn the campaign holds the targeting and the bid, and the creatives under it are the ads. |
| linkedin_get_creativesA | List the creatives of a LinkedIn ad account, optionally for given campaigns. A creative is the ad itself, and it carries its own intended status, its review verdict and the reasons it is being held back. |
| linkedin_get_insightsA | Run a LinkedIn Ads report grouped by one pivot. This is the analytics finder: one pivot, any granularity, and up to 20 fields including dateRange and pivotValues. Ratios such as CTR, CPC and CPM do not exist in the API and are computed here from the raw terms. |
| linkedin_run_statistics_reportA | Run a LinkedIn Ads report grouped by up to three pivots at once. This is the statistics finder, the only way to cross campaign with device, or campaign group with serving location, in a single request. |
| linkedin_get_demographicsA | Break LinkedIn delivery down by professional demographics: company, company size, industry, seniority, job title, job function or location. These are the numbers LinkedIn is bought for, and they come with limits the tool states alongside the rows. |
| linkedin_validate_queryA | Check a pivot and metric combination against the LinkedIn reporting rules before spending a call on it. Returns the fields that would actually be sent, the ones LinkedIn would drop, and the twenty field ceiling. Makes no request to LinkedIn. |
| linkedin_get_revenue_attributionA | Read the LinkedIn Revenue Attribution Report: pipeline and closed won revenue from the CRM, attributed to LinkedIn advertising. Only answers for accounts whose Business Manager has a CRM connected, and only over a window of 30 to 366 days. |
| linkedin_get_delivery_statusA | Explain why LinkedIn ads are or are not serving, from the account down to the creative. LinkedIn keeps a user status and a system serving status side by side, and it is almost always the second one that says why nothing is running. |
| linkedin_get_setup_guideA | Read account, supported formats and native LinkedIn write requirements before preparing changes. |
| linkedin_get_entityA | Read one campaign group, campaign or creative and verify account ownership. |
| linkedin_find_targetingB | Look up native targeting URNs such as countries by name. |
| linkedin_list_mediaA | List account image/video library files with download URLs and native processing status; not ad performance. |
| linkedin_get_mediaA | Refresh one image/video URL and verify library association. |
| linkedin_list_ad_creativesA | List the images and playable videos used by the ads of an account, with the actual ad names. Separates landing URLs from media URLs. Does not report delivery. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
| linkedin-manifest | |
| linkedin-metrics | |
| linkedin-pivots | |
| linkedin-reporting-rules | |
| linkedin-targeting | |
| linkedin-recipes |
TDQS
Scored across 18 tools
Several tools have genuinely close boundaries: linkedin_get_insights vs linkedin_run_statistics_report (reporting, differentiated only by pivot count), and linkedin_get_creatives vs linkedin_list_ad_creatives vs linkedin_list_media vs linkedin_get_media form a cluster of media/creative tools that are easy to confuse. The descriptions do narrate the differences, but the naming alone would not let an agent pick correctly.
Consistent linkedin_ prefix with a verb_noun pattern (get_insights, list_ad_accounts, run_statistics_report, validate_query, find_targeting). Minor deviation: several list operations use 'get' (get_campaigns, get_creatives) while others use 'list' (list_media, list_ad_accounts), which blurs read-one vs read-many.
18 tools is on the higher side but each maps to a real LinkedIn Ads entity or report and the domain is genuinely rich. It stays under the 25+ 'heavy' threshold and no tool looks like obvious padding, though the media/creative quartet could likely be consolidated.
Read/reporting coverage is strong (insights, multi-pivot stats, demographics, revenue attribution, delivery status, accounts, campaigns, creatives, media, targeting, validation). However the surface is essentially read-only with no create/update/pause/budget operations, and the setup guide's mention of 'write requirements before preparing changes' implies mutations are a known, unaddressed gap for an Ads server.