A cross-platform ad management server that connects your AI assistant to Google Ads, Meta, TikTok, and LinkedIn APIs. You get 175+ tools spanning the full campaign lifecycle: keyword research with real CPC data, campaign creation across search, display, Performance Max, and social formats, performance analysis with wasted spend detection, and optimization recommendations. Useful when you're managing multi-platform campaigns and want to research keywords, launch ads, or pull analytics without switching between four different dashboards. Handles OAuth 2.1 authentication and supports structured campaign planning with persistent strategy files. Also available as REST endpoints if you need direct API access outside an MCP client.
Public tool metadata for what this MCP can expose to an agent.
paidsync_execRun TypeScript code in a sandboxed PaidSync runtime with access to every ad-platform tool via `await paidsync.call(toolName, args)`. Use this when you need to compose multiple operations: filter, batch, conditional logic, derived data. Example: `const camps = await paidsync.ca...3 paramsRun TypeScript code in a sandboxed PaidSync runtime with access to every ad-platform tool via `await paidsync.call(toolName, args)`. Use this when you need to compose multiple operations: filter, batch, conditional logic, derived data. Example: `const camps = await paidsync.ca...
codestringmodestringinteractive · scheduled · asyncdefault: interactivetimeout_msintegerpaidsync_contextReturns the current PaidSync runtime context: user, active account, connected platforms, and a compact tool catalog. Call this FIRST in any new exec session. By default returns a platform-grouped summary of available tools. Pass include_tools to drill into specific platform gr...1 paramsReturns the current PaidSync runtime context: user, active account, connected platforms, and a compact tool catalog. Call this FIRST in any new exec session. By default returns a platform-grouped summary of available tools. Pass include_tools to drill into specific platform gr...
include_toolsvaluepaidsync_tool_detailGet the full schema (name, description, input parameters) for a single PaidSync tool by name. Use this when you know which tool you need but want to confirm its exact arguments before calling it from inside paidsync_exec.1 paramsGet the full schema (name, description, input parameters) for a single PaidSync tool by name. Use this when you know which tool you need but want to confirm its exact arguments before calling it from inside paidsync_exec.
namestringpaidsync_recent_runsList the user's recent paidsync_exec runs. Each entry includes the code snippet, success status, duration, call count, trace summary, and value preview. Useful for debugging the last AI exec or replaying a workflow.1 paramsList the user's recent paidsync_exec runs. Each entry includes the code snippet, success status, duration, call count, trace summary, and value preview. Useful for debugging the last AI exec or replaying a workflow.
limitintegerpaidsync_workflows_listList workflows available to run. Returns both PaidSync official workflows AND your own saved workflows. Pass owner='me' to filter to user-owned, owner='paidsync' for official only, or omit for both. Workflows are named, parameterized TypeScript compositions that run in the pai...1 paramsList workflows available to run. Returns both PaidSync official workflows AND your own saved workflows. Pass owner='me' to filter to user-owned, owner='paidsync' for official only, or omit for both. Workflows are named, parameterized TypeScript compositions that run in the pai...
ownerstringme · paidsync · alldefault: allpaidsync_workflows_runExecute a named workflow with parameters. Returns the workflow's structured result. Workflows run with the same safety guarantees as paidsync_exec (mutation block, audit trail).3 paramsExecute a named workflow with parameters. Returns the workflow's structured result. Workflows run with the same safety guarantees as paidsync_exec (mutation block, audit trail).
modestringinteractive · scheduled · asyncdefault: interactivenamestringparamsobjectpaidsync_workflows_saveSave a user-owned workflow that can be run later via paidsync_workflows_run({ name: 'me:<name>' }). Available on Plus, Pro, and Max plans. Pass id to update an existing workflow, omit to create.5 paramsSave a user-owned workflow that can be run later via paidsync_workflows_run({ name: 'me:<name>' }). Available on Plus, Pro, and Max plans. Pass id to update an existing workflow, omit to create.
idstringcodestringmodestringinteractive · scheduled · asyncdefault: interactivenamestringdescriptionstringpaidsync_workflows_deleteDelete one of your saved workflows by id. Only the workflow owner can delete it.1 paramsDelete one of your saved workflows by id. Only the workflow owner can delete it.
idstringpaidsync_workflows_describePlain-English explainer of what a workflow does, derived by scanning its code for paidsync.call(...) invocations. Useful for the Lab UI 'What does this do?' button and for non-technical reviewers before running a workflow. Resolves either an official workflow by name, or a use...1 paramsPlain-English explainer of what a workflow does, derived by scanning its code for paidsync.call(...) invocations. Useful for the Lab UI 'What does this do?' button and for non-technical reviewers before running a workflow. Resolves either an official workflow by name, or a use...
namestringpaidsync_qa_suiteComprehensive read-only QA tester. Walks every read endpoint across all 7 PaidSync-safe platforms (Google Ads, Meta, LinkedIn, GA4, GTM, GMC, GSC), reports per-tool success/failure/duration/sample/error. Uses PaidSync-owned accounts only — NEVER touches client data, NEVER muta...2 paramsComprehensive read-only QA tester. Walks every read endpoint across all 7 PaidSync-safe platforms (Google Ads, Meta, LinkedIn, GA4, GTM, GMC, GSC), reports per-tool success/failure/duration/sample/error. Uses PaidSync-owned accounts only — NEVER touches client data, NEVER muta...
accountsobjectplatformsarrayset_active_accountSet which Google Ads account to operate on. Provide mcc_id to set a specific MCC, or omit it to keep the current MCC. To switch to direct access (no MCC), set direct_access=true.4 paramsSet which Google Ads account to operate on. Provide mcc_id to set a specific MCC, or omit it to keep the current MCC. To switch to direct access (no MCC), set direct_access=true.
mcc_idstringaccount_idstringaccount_namestringdirect_accessbooleanconnect_google_adsInitiate OAuth flow to connect your Google Ads account. Opens a browser window for authentication.Initiate OAuth flow to connect your Google Ads account. Opens a browser window for authentication.
No parameter schema in public metadata yet.
connect_facebook_adsConnect your Facebook Ads account. Returns an OAuth URL — open it in your browser to authorize access. Required before using any other Facebook tools.Connect your Facebook Ads account. Returns an OAuth URL — open it in your browser to authorize access. Required before using any other Facebook tools.
No parameter schema in public metadata yet.
connect_linkedin_adsConnect your LinkedIn Ads account. Returns an OAuth URL — open it in your browser to authorize access. Required before using any other LinkedIn tools.Connect your LinkedIn Ads account. Returns an OAuth URL — open it in your browser to authorize access. Required before using any other LinkedIn tools.
No parameter schema in public metadata yet.
connect_ga4Connect your Google Analytics 4 account. Returns an OAuth URL. This uses the same Google OAuth client but requests analytics-specific scopes.Connect your Google Analytics 4 account. Returns an OAuth URL. This uses the same Google OAuth client but requests analytics-specific scopes.
No parameter schema in public metadata yet.
connect_gtmConnect your Google Tag Manager account. Returns an OAuth URL — open it in your browser to authorize access. This uses a separate OAuth client from Google Ads, so your Ads connection is unaffected.Connect your Google Tag Manager account. Returns an OAuth URL — open it in your browser to authorize access. This uses a separate OAuth client from Google Ads, so your Ads connection is unaffected.
No parameter schema in public metadata yet.
connect_google_search_consoleConnect your Google Search Console account via OAuth. Returns a URL to open in your browser. After connecting, use list_gsc_properties to see your verified properties.Connect your Google Search Console account via OAuth. Returns a URL to open in your browser. After connecting, use list_gsc_properties to see your verified properties.
No parameter schema in public metadata yet.
connect_merchant_centerConnect your Google Merchant Center account via OAuth. Opens a URL for the user to authorize. After connecting, use list_merchant_accounts to see available merchant IDs (including MCA sub-accounts).Connect your Google Merchant Center account via OAuth. Opens a URL for the user to authorize. After connecting, use list_merchant_accounts to see available merchant IDs (including MCA sub-accounts).
No parameter schema in public metadata yet.
connect_tiktok_adsConnect your TikTok Ads account via OAuth. Opens a URL for the user to authorize. At consent the user selects which advertiser accounts PaidSync can manage. After connecting, use list_tiktok_advertisers to see the granted IDs.Connect your TikTok Ads account via OAuth. Opens a URL for the user to authorize. At consent the user selects which advertiser accounts PaidSync can manage. After connecting, use list_tiktok_advertisers to see the granted IDs.
No parameter schema in public metadata yet.
Remote Model Context Protocol (MCP) server for cross-platform ad management. Create, analyze, and optimize campaigns across Google Ads, Meta Ads, TikTok Ads, and LinkedIn Ads from any MCP-compatible AI assistant.
https://mcp.adspirer.com/mcpcom.adspirer/adsSTRATEGY.md and guide all future campaign creation, keyword research, and ad copy across sessions and subagentsraw_data=true) on all 29 performance/analytics tools — JSON-only output for your own attribution, dashboards, or token-efficient pipelines| Platform | Tools | Capabilities |
|---|---|---|
| Google Ads | 75+ | Search, Performance Max (with search themes + audience signals), Display (Standard + Smart), Demand Gen, YouTube; keyword research, performance analysis, wasted-spend, asset management, ad extensions (sitelinks / callouts / structured snippets), bidding strategy management |
| LinkedIn Ads | 45 | Sponsored content (single-image, video, carousel), lead-gen forms, campaign groups, 14 targeting facets, audience insights, creative fatigue analysis, conversion tracking, organizations |
| Meta Ads | 36 | Image / video / carousel campaigns, OUTCOME_LEADS lead-gen forms, lifetime budgets, granular placements (Feed / Stories / Reels), city-level targeting, custom audiences, custom conversions, Advantage+ controls |
| TikTok Ads | 31 | In-feed video / image / Spark Ads / Carousel / App Promotion campaigns, full lifecycle (list / get / pause / resume / update for campaigns, ad groups, ads), 8 analytics tools (performance, wasted spend, audience insights, creative fatigue, anomaly detection, geo) |
| Total | 175+ | Plus monitoring, automation (scheduled briefs / monitors / reports), and account management tools — all available over MCP and as REST endpoints at api.adspirer.ai |
See CONNECTING.md for detailed setup instructions for each platform.
https://mcp.adspirer.com/mcpInstall the full Adspirer plugin (agent + skills + commands + MCP server):
/plugin marketplace add amekala/ads-mcp/plugin install adspirer/mcp — find plugin:adspirer:adspirer and click to authenticate/adspirer:setup to pull your campaign data and create your brand workspaceThis gives you a brand-aware performance marketing agent with persistent memory, competitive research via web search, campaign creation with ad extensions, and slash commands for common workflows. Enabling subagent usage does not change this installation flow.
MCP-only (no plugin): If you just want the raw MCP tools without the agent:
claude mcp add --transport http adspirer https://mcp.adspirer.com/mcp
https://mcp.adspirer.com/mcpAdd to ~/.cursor/mcp.json:
{
"mcpServers": {
"adspirer": {
"url": "https://mcp.adspirer.com/mcp"
}
}
}
Add to ~/.codex/config.toml:
[mcp_servers.adspirer]
url = "https://mcp.adspirer.com/mcp"
Install as an extension:
gemini extensions install github.com/amekala/ads-mcp
A browser window opens for OAuth authentication on first use. Custom commands available: /adspirer:setup, /adspirer:performance-review, /adspirer:wasted-spend, /adspirer:write-ad-copy, /adspirer:refresh.
openclaw plugins install openclaw-adspirer
openclaw adspirer login
openclaw adspirer connect
Or install from ClawHub.
Adspirer is a standard MCP server — any client that supports MCP connectors with OAuth 2.1 (Perplexity, Manus AI, custom MCP clients) can connect to https://mcp.adspirer.com/mcp. Manus also accepts API keys via the Streamable HTTP transport.
The same tool surface is exposed as 178 REST endpoints at https://api.adspirer.ai/api/v1/tools/<tool_name>/execute. Authenticate with a Personal Access Token (sk_live_...) created at adspirer.ai/keys. Swagger: https://api.adspirer.ai/docs. Full reference: adspirer.com/docs/api-reference.
Keyword Research:
Research keywords for my emergency plumbing business in Chicago.
Show me high-intent keywords with real CPC data and budget recommendations.
Performance Analysis:
Show me campaign performance for the last 30 days across all platforms.
Which campaigns are converting best and what should I optimize?
Campaign Creation:
Create a Google Performance Max campaign for luxury watches targeting
New York with a $50/day budget.
Multi-Platform Strategy:
I want to advertise my handmade jewelry business across Google and LinkedIn.
Research keywords for Google Ads and create a LinkedIn sponsored content campaign
targeting small business owners.
readOnlyHint, destructiveHint)See SECURITY.md for vulnerability reporting.
This repo distributes plugins for 4 AI platforms from a single monorepo:
| Platform | Directory | Skills | Install Method |
|---|---|---|---|
| Claude Code | Repo root | 1 generated + 5 slash commands | /plugin marketplace add |
| Cursor | plugins/cursor/adspirer/ | 5 generated from templates | install.sh (one-command) |
| Codex | plugins/codex/adspirer/ | 5 generated from templates | install.sh (one-command) |
| Gemini CLI | Repo root | 1 reused + 5 custom commands | gemini extensions install |
| OpenClaw | plugins/openclaw/ | 1 standalone (self-contained) | openclaw plugins install |
Skills for Claude Code, Cursor, and Codex are authored once in shared/skills/ as templates, then compiled into IDE-specific versions by scripts/sync-skills.sh.
The performance marketing agent prompt is also authored once in shared/agents/performance-marketing-agent/PROMPT.md and compiled into Claude Code, Cursor, and Codex agent files by the same sync script.
OpenClaw uses its own standalone skill. See Architecture for the full design.
Edit once (source of truth)
├─ shared/skills/adspirer-*/SKILL.md
└─ shared/agents/performance-marketing-agent/PROMPT.md
|
v
./scripts/sync-skills.sh
|
+--> Claude Code outputs
| ├─ skills/ad-campaign-management/SKILL.md
| └─ agents/performance-marketing-agent.md
|
+--> Cursor outputs
| ├─ plugins/cursor/adspirer/.cursor/skills/adspirer-*/SKILL.md
| └─ plugins/cursor/adspirer/.cursor/agents/performance-marketing-agent.md
|
+--> Codex outputs
| ├─ plugins/codex/adspirer/skills/adspirer-*/SKILL.md
| └─ plugins/codex/adspirer/agents/performance-marketing-agent.toml
|
+--> Gemini CLI (reuses Claude Code skill)
| ├─ gemini-extension.json
| ├─ GEMINI.md
| └─ commands/adspirer/*.toml
|
└--> OpenClaw (standalone, not generated)
└─ plugins/openclaw/SKILL.md
| AI Client | Repo Source Root | Generated/Runtime Root in Repo | User Installation Path/Method |
|---|---|---|---|
| Claude Code | Repo root + shared/skills/ + shared/agents/ | skills/, agents/, commands/, .claude-plugin/ | /plugin marketplace add amekala/ads-mcp then /plugin install adspirer |
| Cursor | plugins/cursor/adspirer/ + shared sources | plugins/cursor/adspirer/.cursor/skills/, plugins/cursor/adspirer/.cursor/agents/ | bash <(curl -fsSL https://raw.githubusercontent.com/amekala/ads-mcp/main/plugins/cursor/adspirer/install.sh) |
| Codex | plugins/codex/adspirer/ + shared sources | plugins/codex/adspirer/skills/, plugins/codex/adspirer/agents/ | bash <(curl -fsSL https://raw.githubusercontent.com/amekala/ads-mcp/main/plugins/codex/adspirer/install.sh) |
| Gemini CLI | Repo root | gemini-extension.json, GEMINI.md, commands/adspirer/ | gemini extensions install github.com/amekala/ads-mcp |
| OpenClaw | plugins/openclaw/ | plugins/openclaw/ (standalone, no sync generation) | openclaw plugins install openclaw-adspirer |
If you're contributing to this repo or adding new ad platforms/IDE support:
./scripts/sync-skills.sh # Generate IDE-specific skills from templates
./scripts/sync-skills.sh --check # Verify generated files match committed (CI mode)
./scripts/validate.sh # Run all 62 offline validation checks
./scripts/validate.sh --live # Also test MCP endpoint connectivity
Never edit files in plugins/*/skills/, skills/, agents/, or plugins/*/agents/ directly — they will be overwritten by the sync script. Edit templates in shared/skills/ and shared prompts in shared/agents/ instead.
Proprietary -- See Terms of Service for usage terms.
io.github.infoinlet-marketplace/mcp-observability
betterdb-inc/monitor
com.mcparmory/datadog
thotischner/observability-mcp
io.github.tantiope/datadog-mcp
io.github.us-all/datadog