paid-ads
Server Details
Hosted MCP server for Google Ads and LinkedIn Ads analysis.
Glama couldn't complete the latest health check. If this server requires authentication, missing or expired test credentials may be the cause. A test profile lets Glama authenticate for health checks and discover tools; it is separate from your personal connections.
If you are the author, claim ownership, then add or update a test profile under Admin → Test Profile.
- Status
- Unhealthy
- Uptime
- 0.0% over 37 days
- OAuth
- Works in Glama
- Last Tested
- Transport
- Streamable HTTP
- URL
TDQS
Scored across 56 tools
Tools are clearly separated by platform prefix (linkedin_, google_ads_) and have distinct purposes (analyze, compare, render, get, etc.). Descriptions explicitly direct users to preferred rendering tools, reducing ambiguity. However, the high number of similar tools (e.g., multiple compare functions) may still cause minor confusion.
Naming follows a consistent snake_case verb_noun pattern across all tools (e.g., linkedin_analyze_campaign, google_ads_render_weekly_group_report). No mixing of conventions, and verbs like get, render, analyze, compare are used uniformly.
With 56 tools covering two major ad platforms plus setup and reporting, the count is high but reflects the complexity of the domain. However, many tools are redundant (e.g., multiple equivalent 'get' vs 'render' pairs), and the set could be streamlined without sacrificing capability.
The tool surface covers the full analysis and reporting lifecycle for both LinkedIn and Google Ads, including data retrieval, analysis, rendering, and account health. Missing are campaign creation/update tools, but these are outside the stated purpose. Minor gaps like lacking bulk operations or cross-platform comparison are acceptable.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
1 tool update
- Added
linkedin_get_creative_preview_asset
1 tool update
- Added
linkedin_render_account_health
3 tool updates
- Changed
linkedin_compare_creative_performance5 fields changed- added
Input schema / properties / lookbackDays / anyOfAdded value: +[ + { + "type": "number" + }, + { + "type": "string" + } +] - changed
Input schema / properties / lookbackDays / descriptionPrevious value: -"Performance-report style alias for a single trailing window size in days when windows is omitted. For example, lookbackDays: 30 is equivalent to windows: [30]."New value: +"Performance-report style alias for a single trailing window size in days when windows is omitted. For example, lookbackDays: 30, \"30d\", \"30 days\", or \"past 30 days\" is equivalent to windows: [30]." - removed
Input schema / properties / lookbackDays / typeRemoved value: -"number" - added
Input schema / properties / windows / items / anyOfAdded value: +[ + { + "type": "number" + }, + { + "type": "string" + } +] - removed
Input schema / properties / windows / items / typeRemoved value: -"number"
- Added
linkedin_record_creative_comparison_render_event - Changed
linkedin_render_creative_comparison5 fields changed- added
Input schema / properties / lookbackDays / anyOfAdded value: +[ + { + "type": "number" + }, + { + "type": "string" + } +] - changed
Input schema / properties / lookbackDays / descriptionPrevious value: -"Performance-report style alias for a single trailing window size in days when windows is omitted. For example, lookbackDays: 30 is equivalent to windows: [30]."New value: +"Performance-report style alias for a single trailing window size in days when windows is omitted. For example, lookbackDays: 30, \"30d\", \"30 days\", or \"past 30 days\" is equivalent to windows: [30]." - removed
Input schema / properties / lookbackDays / typeRemoved value: -"number" - added
Input schema / properties / windows / items / anyOfAdded value: +[ + { + "type": "number" + }, + { + "type": "string" + } +] - removed
Input schema / properties / windows / items / typeRemoved value: -"number"
1 tool update
- Changed
linkedin_render_creative_comparison1 field changed- changed
Input schema / properties / pageSize / descriptionPrevious value: -"MCP delivery page size for creative comparison rows when comparisonPayload is not supplied. Defaults to 50, max 200."New value: +"MCP delivery page size for raw creative rows when comparisonPayload is not supplied. Visual renders automatically request up to 200 rows for app hydration so the dashboard is not limited by model-supplied page sizes."
1 tool update
- Added
linkedin_get_creative_comparison_rows
1 tool update
- Changed
linkedin_render_creative_comparison1 field changed- removed
Input schema / oneOfRemoved value: -[ - { - "required": [ - "comparisonPayload" - ] - }, - { - "not": { - "anyOf": [ - { - "required": [ - "campaignId" - ] - }, - { - "required": [ - "campaignIds" - ] - } - ] - }, - "properties": { - "scope": { - "enum": [ - "account" - ], - "type": "string" - } - }, - "required": [ - "scope", - "accountId" - ] - }, - { - "anyOf": [ - { - "required": [ - "advertiserContextId" - ] - }, - { - "required": [ - "advertiserName" - ] - }, - { - "required": [ - "query" - ] - } - ], - "not": { - "anyOf": [ - { - "required": [ - "campaignId" - ] - }, - { - "required": [ - "campaignIds" - ] - } - ] - } - }, - { - "anyOf": [ - { - "required": [ - "campaignId" - ] - }, - { - "required": [ - "campaignIds" - ] - } - ], - "properties": { - "scope": { - "enum": [ - "campaign" - ], - "type": "string" - } - }, - "required": [ - "scope" - ] - } -]
2 tool updates
- Changed
linkedin_compare_creative_performance1 field changed- changed
Input schema / properties / accountId / descriptionPrevious value: -"Numeric LinkedIn Ad Account ID. Required for account-wide creative comparisons. When used with campaignId or campaignIds, set scope to campaign so the account is treated only as the parent account."New value: +"Numeric LinkedIn Ad Account ID. If omitted for account-wide creative comparisons, advertiserName/query or the most recent LinkedIn account from session memory is used when available. When used with campaignId or campaignIds, set scope to campaign so the account is treated only as the parent account."
- Changed
linkedin_render_creative_comparison2 fields changed- changed
Input schema / properties / accountId / descriptionPrevious value: -"Numeric LinkedIn Ad Account ID. Required for account-wide creative reports. When used with campaignId or campaignIds, set scope to campaign so the account is treated only as the parent account."New value: +"Numeric LinkedIn Ad Account ID. If omitted for account-wide creative reports, advertiserName/query or the most recent LinkedIn account from session memory is used when available. When used with campaignId or campaignIds, set scope to campaign so the account is treated only as the parent account." - changed
Input schema / properties / comparisonPayload / descriptionPrevious value: -"The structuredContent object returned by linkedin_compare_creative_performance."New value: +"The structuredContent object returned by linkedin_compare_creative_performance, or a wrapper object containing that payload such as a prior render result."
2 tool updates
- Changed
linkedin_compare_creative_performance3 fields changed- added
Input schema / properties / advertiserContextIdAdded value: +{ + "description": "Optional saved advertiser context ID used to resolve the LinkedIn ad account for account-wide creative comparisons when accountId is not supplied.", + "type": "string" +} - added
Input schema / properties / advertiserNameAdded value: +{ + "description": "Optional saved advertiser name, such as Thorogood, used to resolve the LinkedIn ad account for account-wide creative comparisons when accountId is not supplied.", + "type": "string" +} - added
Input schema / properties / queryAdded value: +{ + "description": "Optional advertiser or LinkedIn account search text used to resolve the account for account-wide creative comparisons when accountId is not supplied.", + "type": "string" +}
- Changed
linkedin_render_creative_comparison4 fields changed- changed
Input schema / oneOfPrevious value: -[ - { - "required": [ - "comparisonPayload" - ] - }, - { - "not": { - "anyOf": [ - { - "required": [ - "campaignId" - ] - }, - { - "required": [ - "campaignIds" - ] - } - ] - }, - "properties": { - "scope": { - "enum": [ - "account" - ], - "type": "string" - } - }, - "required": [ - "scope", - "accountId" - ] - }, - { - "anyOf": [ - { - "required": [ - "campaignId" - ] - }, - { - "required": [ - "campaignIds" - ] - } - ], - "properties": { - "scope": { - "enum": [ - "campaign" - ], - "type": "string" - } - }, - "required": [ - "scope" - ] - } -]New value: +[ + { + "required": [ + "comparisonPayload" + ] + }, + { + "not": { + "anyOf": [ + { + "required": [ + "campaignId" + ] + }, + { + "required": [ + "campaignIds" + ] + } + ] + }, + "properties": { + "scope": { + "enum": [ + "account" + ], + "type": "string" + } + }, + "required": [ + "scope", + "accountId" + ] + }, + { + "anyOf": [ + { + "required": [ + "advertiserContextId" + ] + }, + { + "required": [ + "advertiserName" + ] + }, + { + "required": [ + "query" + ] + } + ], + "not": { + "anyOf": [ + { + "required": [ + "campaignId" + ] + }, + { + "required": [ + "campaignIds" + ] + } + ] + } + }, + { + "anyOf": [ + { + "required": [ + "campaignId" + ] + }, + { + "required": [ + "campaignIds" + ] + } + ], + "properties": { + "scope": { + "enum": [ + "campaign" + ], + "type": "string" + } + }, + "required": [ + "scope" + ] + } +] - added
Input schema / properties / advertiserContextIdAdded value: +{ + "description": "Optional saved advertiser context ID used to resolve the LinkedIn ad account for account-wide visual creative reports when accountId is not supplied.", + "type": "string" +} - added
Input schema / properties / advertiserNameAdded value: +{ + "description": "Optional saved advertiser name, such as Thorogood, used to resolve the LinkedIn ad account for account-wide visual creative reports when accountId is not supplied.", + "type": "string" +} - added
Input schema / properties / queryAdded value: +{ + "description": "Optional advertiser or LinkedIn account search text used to resolve the account for account-wide visual creative reports when accountId is not supplied.", + "type": "string" +}
2 tool updates
- Changed
linkedin_compare_creative_performance9 fields changed- added
Input schema / anyOfAdded value: +[ + { + "required": [ + "endDate" + ] + }, + { + "required": [ + "dateRange" + ] + } +] - changed
Input schema / properties / accountId / descriptionPrevious value: -"Optional numeric LinkedIn Ad Account ID. Pass this for a bounded multi-campaign creative comparison; accountId takes precedence over a lone campaignId."New value: +"Numeric LinkedIn Ad Account ID. Required for account-wide creative comparisons. When used with campaignId or campaignIds, set scope to campaign so the account is treated only as the parent account." - changed
Input schema / properties / campaignId / descriptionPrevious value: -"Optional numeric LinkedIn campaign ID to analyze. If omitted, the most recent LinkedIn campaign from session memory is used when available. When accountId is also supplied, accountId takes precedence over a lone campaignId; use campaignIds for explicit campaign scope."New value: +"Numeric LinkedIn campaign ID to analyze. Required for single-campaign scope unless campaignIds is supplied." - changed
Input schema / properties / campaignIds / descriptionPrevious value: -"Optional numeric LinkedIn campaign IDs to analyze together as one campaign set. Use this for cross-campaign creative comparison within the same account."New value: +"Optional numeric LinkedIn campaign IDs to analyze together as one campaign set. Use this for explicit cross-campaign creative comparison within the same account." - added
Input schema / properties / dateRangeAdded value: +{ + "description": "Optional date range alias. When endDate is omitted, dateRange.endDate, dateRange.end, or dateRange.to is used as the inclusive comparison end date.", + "properties": { + "end": { + "type": "string" + }, + "endDate": { + "type": "string" + }, + "to": { + "type": "string" + } + }, + "type": "object" +} - added
Input schema / properties / lookbackDaysAdded value: +{ + "description": "Performance-report style alias for a single trailing window size in days when windows is omitted. For example, lookbackDays: 30 is equivalent to windows: [30].", + "type": "number" +} - added
Input schema / properties / scopeAdded value: +{ + "description": "Explicit report scope. Use account with accountId only for account-wide creative comparisons. Use campaign with campaignId or campaignIds for one or more specific campaigns.", + "enum": [ + "account", + "campaign" + ], + "type": "string" +} - changed
Input schema / properties / windows / descriptionPrevious value: -"Trailing window sizes in days, such as [7, 30]. Defaults to [7, 30]."New value: +"Window sizes in days, such as [7] or [30]. Each window is compared with the previous same-length window. Defaults to [7, 30]." - removed
Input schema / requiredRemoved value: -[ - "endDate" -]
- Changed
linkedin_render_creative_comparison8 fields changed- added
Input schema / oneOfAdded value: +[ + { + "required": [ + "comparisonPayload" + ] + }, + { + "not": { + "anyOf": [ + { + "required": [ + "campaignId" + ] + }, + { + "required": [ + "campaignIds" + ] + } + ] + }, + "properties": { + "scope": { + "enum": [ + "account" + ], + "type": "string" + } + }, + "required": [ + "scope", + "accountId" + ] + }, + { + "anyOf": [ + { + "required": [ + "campaignId" + ] + }, + { + "required": [ + "campaignIds" + ] + } + ], + "properties": { + "scope": { + "enum": [ + "campaign" + ], + "type": "string" + } + }, + "required": [ + "scope" + ] + } +] - changed
Input schema / properties / accountId / descriptionPrevious value: -"Optional numeric LinkedIn Ad Account ID. Pass this for a bounded multi-campaign creative report; accountId takes precedence over a lone campaignId on the visual renderer."New value: +"Numeric LinkedIn Ad Account ID. Required for account-wide creative reports. When used with campaignId or campaignIds, set scope to campaign so the account is treated only as the parent account." - changed
Input schema / properties / campaignId / descriptionPrevious value: -"Optional campaign ID to compare when comparisonPayload is not supplied. For this visual renderer, accountId takes precedence over a lone campaignId so broad account-level prompts are not narrowed by stale session memory; use campaignIds for explicit campaign scope."New value: +"Campaign ID to compare when comparisonPayload is not supplied. Required for single-campaign scope unless campaignIds is supplied." - changed
Input schema / properties / campaignIds / descriptionPrevious value: -"Optional numeric LinkedIn campaign IDs to compare as one campaign set when comparisonPayload is not supplied."New value: +"Optional numeric LinkedIn campaign IDs to compare as one campaign set when comparisonPayload is not supplied. Use only for explicit campaign-set scope." - added
Input schema / properties / dateRangeAdded value: +{ + "description": "Optional date range alias. When endDate is omitted, dateRange.endDate, dateRange.end, or dateRange.to is used as the inclusive comparison end date.", + "properties": { + "end": { + "type": "string" + }, + "endDate": { + "type": "string" + }, + "to": { + "type": "string" + } + }, + "type": "object" +} - added
Input schema / properties / lookbackDaysAdded value: +{ + "description": "Performance-report style alias for a single trailing window size in days when windows is omitted. For example, lookbackDays: 30 is equivalent to windows: [30].", + "type": "number" +} - added
Input schema / properties / scopeAdded value: +{ + "description": "Explicit report scope when fetching fresh data. Use account with accountId only for account-wide creative reports. Use campaign with campaignId or campaignIds for one or more specific campaigns.", + "enum": [ + "account", + "campaign" + ], + "type": "string" +} - changed
Input schema / properties / windows / descriptionPrevious value: -"Trailing window sizes in days, such as [7, 30], when comparisonPayload is not supplied."New value: +"Window sizes in days, such as [7] or [30]. Each window is compared with the previous same-length window when comparisonPayload is not supplied."
Related MCP Connectors
MCP server for querying and analyzing data from ad platforms, analytics tools, and spreadsheets
Hosted MCP server for MuntuAI outreach campaigns, leads, senders, domains, and analytics.
Google Ads MCP server — manage campaigns, keywords, and metrics.
Hosted MCP server for AWS cloud spend: service breakdowns, anomalies, savings and forecasts.
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceA hosted MCP server that enables managing Google Ads, Microsoft Advertising, TikTok Ads, LinkedIn Ads, and other Google services from ChatGPT, Claude, or any MCP client using natural language, with no code or API keys required.MIT
- AlicenseBqualityCmaintenanceLinkedIn Ads MCP server with full read/write campaign management, Ad Library competitive search, and Cloud Run team deployment.2536 npmMIT
- -licenseNot gradedqualityNot gradedmaintenanceA private, read-only MCP server that enables retrieval and analysis of Google Ads reporting data (campaigns, ad groups, keywords, search terms, cost, conversions) from authorized accounts through a locally operated server.-
- AlicenseNot gradedqualityDmaintenanceMCP server for Google Ads campaign reporting and management via Claude, enabling GAQL queries, performance metrics, and campaign modifications.20 npmMIT
Glama MCP Gateway
Add one secure layer between your agents and this server.