# io.github.Synter-Media-AI/synter-ads (npm · @synterai/mcp-server)

Reporting across 19 ad platforms, campaign creation on 14, write actions on 16, via AI.

- Trust score: 61/100 (medium)
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-10-04

## Components

- remote · `mcp.syntermedia.ai`: 36/100, [markdown](https://verifymcp.io/servers/synter-media-ai-synter-ads/mcp-2.md), [page](https://verifymcp.io/servers/synter-media-ai-synter-ads/mcp-2)
- npm · `@synterai/mcp-server`: 61/100 (this document), [markdown](https://verifymcp.io/servers/synter-media-ai-synter-ads/synterai-mcp-server.md), [page](https://verifymcp.io/servers/synter-media-ai-synter-ads/synterai-mcp-server)

## Channel facts

- Registry: `npm`
- Package: `@synterai/mcp-server`
- Version: `1.2.4`
- Transport: `stdio`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-10-04.

- **Supply Chain Security**: 80/100
  - No malware found by supply-chain analysis.
  - CVE check failed: a known high-severity CVE affects @modelcontextprotocol/sdk 0.6.1, a direct dependency. A fixed version is available.
  - No install/post-install scripts declared.
  - 7 of 14 dependencies flagged as unhealthy.
- **Provenance & Transparency**: 45/100
  - Source repository is publicly reachable at the declared URL.
  - Provenance check failed: no build-provenance attestation is published.
  - Clear OSI-approved license (MIT).
  - Actively maintained (last published 32 days ago).
  - Disclosure check failed: no security disclosure policy was found in the source repository.
- **Schema Quality & AI Usability**: 72/100
  - AI-judged instruction clarity (good).
  - Context-footprint check failed: tool/resource definitions use about 3160 tokens (~126/item across 25 items; 25 tools + 0 resources), over budget; trim descriptions and params.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 0/100
  - Stability not yet verified: not enough scan history yet (needs a 30-day window).
- **Tool Coverage**: 100/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 100% of tool parameters carry a description.
- **Tool Safety**: 100/100
  - No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.
  - We read all 25 captured tool definition(s), and no name or description among them implies an irreversible operation.
  - An AI judge read all 25 captured unit(s) of tool text and found none that tries to manipulate the model reading it.
- **Capabilities**: 20/100
  - Spec-recency check failed: implements MCP spec 2024-11-05; the latest is 2026-07-28.

**Unverified: 1 category.** A category scored 0 because we could not verify it: a data source with nothing on this package, evidence we could not reach, or a check we could not run. We only credit what we can confirm.

## Install

### How do I install the io.github.Synter-Media-AI/synter-ads MCP server?

io.github.Synter-Media-AI/synter-ads runs locally as an npm package, launched with npx -y @synterai/mcp-server. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

### Claude

```bash
claude mcp add synter-media-ai-synter-ads -- npx -y @synterai/mcp-server
```

### Cursor

```json
{
  "mcpServers": {
    "synter-media-ai-synter-ads": {
      "command": "npx",
      "args": [
        "-y",
        "@synterai/mcp-server"
      ]
    }
  }
}
```

### VS Code

```json
{
  "servers": {
    "synter-media-ai-synter-ads": {
      "command": "npx",
      "args": [
        "-y",
        "@synterai/mcp-server"
      ]
    }
  }
}
```

### Codex

```bash
codex mcp add synter-media-ai-synter-ads -- npx -y @synterai/mcp-server
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "synter-media-ai-synter-ads": {
      "type": "local",
      "command": [
        "npx",
        "-y",
        "@synterai/mcp-server"
      ],
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add synter-media-ai-synter-ads --command npx --arg -y --arg @synterai/mcp-server
```

### Hermes

```yaml
mcp_servers:
  synter-media-ai-synter-ads:
    command: "npx"
    args: ["-y", "@synterai/mcp-server"]
```

### Netclaw

```json
{
  "McpServers": {
    "synter-media-ai-synter-ads": {
      "Transport": "stdio",
      "Command": "npx",
      "Arguments": [
        "-y",
        "@synterai/mcp-server"
      ]
    }
  }
}
```

### Vellum

```bash
assistant mcp add synter-media-ai-synter-ads -t stdio -c npx -a -y @synterai/mcp-server
```

### Other

```json
{
  "mcpServers": {
    "synter-media-ai-synter-ads": {
      "command": "npx",
      "args": [
        "-y",
        "@synterai/mcp-server"
      ]
    }
  }
}
```

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-10-03 (score 61, +15)

- [security improvement] Malware scan: unverified → pass

### 2026-10-02 (score 46)

First indexed and scored.

## MCP tools (25)

### `list_campaigns` (~86 tokens)

List campaigns for ONE ad platform. `platform` is required -- this tool does not aggregate across platforms. Returns campaign name, status, budget, and performance metrics.

Input parameters:

- `limit` (number): Maximum number of campaigns to return (default: 50)
- `platform` (string, required): Ad platform to list campaigns for (required)
- `status` (string): Filter by campaign status

### `create_search_campaign` (~353 tokens)

Create a Google Ads Search campaign with an ad group, responsive search ad, and keywords — all in one atomic request. IMPORTANT — creative floor: supply 11-15 headlines (15 recommended, max 30 chars each) and 4 descriptions (max 90 chars each), echoing your target keywords across at least 5 headlines. The API accepts as few as 3 headlines / 2 descriptions, but ads built near that minimum score 'Poor' on Google Ad Strength, get throttled in the auction, and may be rejected by the platform — treat 11 headlines / 4 descriptions as the real minimum. Fewer than 3 headlines or fewer than 2 descriptions will cause the campaign to be rejected before any API call is made.

Input parameters:

- `campaign_name` (string, required): Name for the campaign
- `daily_budget` (number, required): Daily budget in USD
- `descriptions` (array, required): Descriptions for the responsive search ad. Provide all 4. Hard minimum is 2, but fewer than 4 weakens Ad Strength. Each must be 90 characters or fewer.
- `final_url` (string, required): Landing page URL
- `geo_targets` (array): Geo target codes (e.g., '2840' for US, '2826' for UK)
- `headlines` (array, required): Headlines for the responsive search ad. Provide 11-15 (15 recommended), echoing the target keywords in at least 5. Hard minimum is 3, but fewer than 11 produces a 'Poor' Google Ad Strength rating and…
- `keywords` (array, required): Keywords to target (phrase match). Provide at least 1.

### `create_display_campaign` (~161 tokens)

Create a Google Ads Display campaign with responsive display ads. Supports image uploads from URLs.

Input parameters:

- `business_name` (string, required): Business name (max 25 chars)
- `campaign_name` (string, required): Name for the campaign
- `daily_budget` (number, required): Daily budget in USD
- `descriptions` (array, required): Descriptions (1-5, max 90 chars each)
- `final_url` (string, required): Landing page URL
- `geo_targets` (array): Geo target codes
- `headlines` (array, required): Headlines (1-5, max 30 chars each)
- `landscape_image_url` (string): URL to 1200x628 landscape image
- `square_image_url` (string): URL to 1200x1200 square image

### `create_pmax_campaign` (~238 tokens)

Create a Google Ads Performance Max campaign. Requires images, headlines, descriptions, and a business name.

Input parameters:

- `business_name` (string, required): Business name (max 25 chars)
- `campaign_name` (string, required): Name for the campaign
- `daily_budget` (number, required): Daily budget in USD
- `descriptions` (array, required): Descriptions (2-5 accepted; provide 4-5; max 90 chars each)
- `final_url` (string, required): Landing page URL
- `geo_targets` (array): Geo target codes
- `headlines` (array, required): Headlines (3-15 accepted; provide 11+, 15 recommended — fewer produces a weak Ad Strength rating; max 30 chars each)
- `landscape_image_url` (string): URL to 1200x628 landscape image
- `logo_url` (string): URL to square logo (min 128x128)
- `long_headline` (string, required): Long headline (max 90 chars)
- `square_image_url` (string): URL to 1200x1200 square image
- `target_cpa` (number): Target CPA in USD (optional)

### `pause_campaign` (~43 tokens)

Pause a campaign by ID. Works across all connected platforms.

Input parameters:

- `campaign_id` (string, required): Campaign ID (platform-specific format)
- `platform` (string, required): Ad platform

### `update_campaign_budget` (~49 tokens)

Update the daily budget for a campaign.

Input parameters:

- `campaign_id` (string, required): Campaign ID
- `daily_budget` (number, required): New daily budget in USD
- `platform` (string, required): Ad platform

### `get_performance` (~77 tokens)

Get performance metrics (impressions, clicks, spend, conversions, ROAS) for campaigns.

Input parameters:

- `campaign_id` (string): Filter by specific campaign ID (optional)
- `date_range` (string): Date range for metrics (default: LAST_7_DAYS)
- `platform` (string, required): Ad platform to report on (required)

### `get_daily_spend` (~65 tokens)

Get daily spend breakdown for ONE ad platform. `platform` is required -- this tool does not aggregate across platforms.

Input parameters:

- `days` (number): Number of days to look back (default: 7)
- `platform` (string, required): Ad platform to report on (required)

### `add_keywords` (~62 tokens)

Add keywords to a Google Ads campaign or ad group.

Input parameters:

- `ad_group_id` (string, required): Ad group ID to add keywords to
- `keywords` (array, required): Keywords to add
- `match_type` (string): Keyword match type (default: PHRASE)

### `add_negative_keywords` (~56 tokens)

Add negative keywords to block unwanted search terms.

Input parameters:

- `campaign_id` (string, required): Campaign ID
- `keywords` (array, required): Negative keywords to add
- `level` (string): Level to apply negatives (default: CAMPAIGN)

### `create_conversion` (~76 tokens)

Create a conversion action in Google Ads. Returns the conversion ID and label for GTM setup.

Input parameters:

- `category` (string): Conversion category (default: LEAD)
- `name` (string, required): Name for the conversion action (e.g., 'Signup', 'Purchase')
- `value` (number): Default conversion value in USD (optional)

### `list_conversions` (~18 tokens)

List all conversion actions configured in Google Ads.

### `diagnose_tracking` (~44 tokens)

Check if conversion tracking is properly set up on a website. Verifies gtag.js, GTM, and pixel installation.

Input parameters:

- `url` (string, required): Website URL to check

### `generate_image` (~90 tokens)

Generate an AI image for ad creatives using Imagen 4, Flux, or Stable Diffusion.

Input parameters:

- `name` (string): Asset name for organization
- `prompt` (string, required): Image generation prompt (be specific about style, layout, colors)
- `provider` (string): AI provider (default: imagen)
- `size` (string): Image dimensions (default: 1200x628 for display ads)

### `generate_video` (~121 tokens)

Generate an AI video ad using Veo, Runway, or Luma. Great for YouTube and social ads.

Input parameters:

- `concept` (string): Video concept framework (default: pas = Problem-Agitate-Solve)
- `duration` (number): Video duration in seconds (default: 8)
- `key_benefit` (string, required): Main value proposition
- `product_name` (string, required): Product or brand name
- `provider` (string): AI provider (default: veo)
- `target_audience` (string): Who is this video for?

### `create_meta_campaign` (~50 tokens)

Create a Meta (Facebook/Instagram) advertising campaign.

Input parameters:

- `daily_budget` (number, required): Daily budget in USD
- `name` (string, required): Campaign name
- `objective` (string, required): Campaign objective

### `create_linkedin_campaign` (~212 tokens)

Create a LinkedIn Ads campaign for B2B advertising.

Input parameters:

- `daily_budget` (number): Daily budget in USD
- `group_id` (string, required): Campaign group ID the campaign belongs to (REQUIRED — LinkedIn campaigns cannot exist outside a group). List existing groups with linkedin_ads_get_campaign_groups.
- `name` (string, required): Campaign name
- `objective` (string): Campaign objective
- `target_audiences` (array): Matched-audience segment IDs. Must be the adSegment id (list_audiences 'destination_segment_id'), NOT the dmpSegment id — a dmpSegment id fails with a bare HTTP 500.
- `target_functions` (array): Target job functions, e.g. ['engineering','it','operations']
- `target_locations` (array): Target locations, e.g. ['US','UK','CA']
- `target_seniorities` (array): Target seniorities, e.g. ['senior','manager','director','vp','cxo']

### `create_reddit_campaign` (~63 tokens)

Create a Reddit Ads campaign for community-based advertising.

Input parameters:

- `account_id` (string): Override the default Reddit ad account ID
- `name` (string, required): Campaign name
- `objective` (string, required): Campaign objective
- `status` (string): Initial campaign status

### `stage_audience_artifact` (~283 tokens)

Stage a hashed-PII payload (newline-delimited identifiers — SHA-256 emails, phones, or raw MAIDs) in Synter's private artifact store and return an opaque artifact_id. Pass that id to sync_audience via *_artifact_id parameters. FREE — no credits charged. Use this instead of pasting hashed identifiers inline when you have more than ~500 entries.

Input parameters:

- `body` (string, required): Newline-delimited identifiers, one per line. SHA-256 hex for emails/phones; raw uppercase UUIDs for MAIDs (IDFA/GAID).
- `i_have_consent` (boolean): Confirm the customer has lawful basis (GDPR Art. 6) and required consent under CCPA / Meta Custom Audience Terms / Google Customer Match Policy for every identifier in `body`. Soft-launch: omitting t…
- `script_name` (string): Which script will consume this artifact. Defaults to 'meta_ads_create_audience'. Use 'google_ads_create_customer_match' for Google, or other audience-sync script names.
- `ttl_seconds` (number): How long the staged payload should live in seconds. Default 3600 (1 hour).

### `sync_audience` (~500 tokens)

Upload an audience to an ad platform (Google, Meta, LinkedIn, Microsoft, Reddit, TikTok, X). Accepts inline hashed identifiers (hashed_emails, hashed_phones), raw mobile_ids (IDFA/GAID), company_domains, a public csv_url, or *_artifact_id references staged via stage_audience_artifact. Costs 10 credits on success.

Input parameters:

- `account_id` (string): Platform ad account id. Optional — defaults to the user's primary account on that platform.
- `audience_name` (string): Name for the audience as it should appear in the platform's UI.
- `company_domains` (string): Comma-separated company domains for B2B account targeting (Google + LinkedIn).
- `csv_url` (string): Public CSV URL with audience identifiers. Alternative to inline params / artifact ids.
- `customer_file_source` (string): Meta only: USER_PROVIDED_ONLY (default), PARTNER_PROVIDED_ONLY, or BOTH_USER_AND_PARTNER_PROVIDED.
- `hashed_emails` (string): Comma-separated SHA-256 hashed emails (lowercase hex). For small batches; use hashed_emails_artifact_id for >500.
- `hashed_emails_artifact_id` (string): Artifact id from stage_audience_artifact for SHA-256 hashed emails.
- `hashed_phones` (string): Comma-separated SHA-256 hashed phones (E.164 format pre-hash). For small batches.
- `hashed_phones_artifact_id` (string): Artifact id from stage_audience_artifact for SHA-256 hashed phones. Meta + most platforms; not supported by Google's customer match script today.
- `i_have_consent` (boolean): Confirm the customer has lawful basis (GDPR Art. 6) and required consent under CCPA / Meta Custom Audience Terms / Google Customer Match Policy for every identifier in this audience. Soft-launch: omi…
- `mobile_ids` (string): Comma-separated raw mobile advertising IDs (IDFA / GAID, uppercase UUID). Meta and TikTok only. NOT hashed.
- `mobile_ids_artifact_id` (string): Artifact id for raw mobile ids. Meta only.
- `platform` (string, required): Ad platform to upload to.

### `manage_audience` (~314 tokens)

Create, upload to, or list first-party audiences in Google Ads via the Data Manager API. Supports Customer Match lists from emails, phone numbers, and company domains (B2B). Use action='create' to build a new audience, 'upload' to append members to an existing one, 'list' to see all audiences, 'status' to check an upload job, or 'list-sources' to see linked data sources (GA4, Merchant Center).

Input parameters:

- `action` (string, required): create = new audience + upload members | upload = append to existing | list = show all audiences | status = check upload job | list-sources = show linked GA4/Merchant Center data sources
- `audience_id` (string): Numeric Google Ads audience ID. Alternative to name for action=upload.
- `company_domains` (string): Comma-separated company domains for B2B account targeting (e.g. acme.com,widgets.co).
- `emails` (string): Comma-separated email addresses. Hashed client-side before upload.
- `job_resource_name` (string): OfflineUserDataJob resource name. Required for action=status.
- `membership_lifespan` (number): Days to keep members in the audience. Default 540 (max 540).
- `name` (string): Audience name. Required for action=create. Required for action=upload unless audience_id is provided.
- `phones` (string): Comma-separated phone numbers in E.164 format (e.g. +15551234567).

### `list_ad_accounts` (~17 tokens)

List all connected ad accounts across platforms.

### `upload_image` (~58 tokens)

Upload an image as an asset for use in ads.

Input parameters:

- `asset_name` (string, required): Name for the asset
- `image_url` (string, required): URL of the image to upload
- `platform` (string): Target platform (default: google)

### `run_tool` (~95 tokens)

Run any Synter tool by name. Use this for advanced operations not covered by other tools. See docs.syntermedia.ai for full tool list.

Input parameters:

- `args` (array): Arguments to pass to the tool
- `platform` (string): Platform for OAuth credentials (google, meta, linkedin, etc.)
- `script_name` (string, required): Name of the tool to run (e.g., 'google_ads_list_audiences')

### `list_landing_pages` (~29 tokens)

List all landing pages for the authenticated workspace, including publish status, custom domain, and URLs.

## Diagnostics

Captured diagnostic sections: Provenance, Vulnerabilities, Dependencies. The full working is on the page: https://verifymcp.io/servers/synter-media-ai-synter-ads/synterai-mcp-server#diagnostics

## Score history

- 2026-10-04: 61
- 2026-10-03: 61
- 2026-10-02: 46

## Common questions

### What is the io.github.Synter-Media-AI/synter-ads MCP server?

io.github.Synter-Media-AI/synter-ads is an MCP server listed in the public MCP registry as io.github.Synter-Media-AI/synter-ads. Reporting across 19 ad platforms, campaign creation on 14, write actions on 16, via AI. This page covers its npm package (@synterai/mcp-server).

### Is the io.github.Synter-Media-AI/synter-ads MCP server safe to use?

io.github.Synter-Media-AI/synter-ads scores 61 out of 100 on VerifyMCP. We recorded 1 known advisory against it as of 4 October 2026. It declares no install or post-install scripts. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

### What tools does the io.github.Synter-Media-AI/synter-ads MCP server expose?

io.github.Synter-Media-AI/synter-ads exposes 25 tools: list_campaigns, create_search_campaign, create_display_campaign, create_pmax_campaign, pause_campaign, and 20 more. Their descriptions and schemas cost roughly 3,160 tokens of context every time the server is loaded.

### Is the io.github.Synter-Media-AI/synter-ads MCP server still maintained?

io.github.Synter-Media-AI/synter-ads is still listed as active in the MCP registry. We last reached this channel on 4 October 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

### What licence is the io.github.Synter-Media-AI/synter-ads MCP server under?

io.github.Synter-Media-AI/synter-ads declares the MIT licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.

## Links

- npm package: https://www.npmjs.com/package/@synterai/mcp-server
- Socket report: https://socket.dev/npm/package/@synterai/mcp-server
- Repository: https://github.com/Synter-Media-AI/mcp-server
- Changelog RSS feed: https://verifymcp.io/servers/synter-media-ai-synter-ads/synterai-mcp-server.xml
- Changelog JSON feed: https://verifymcp.io/servers/synter-media-ai-synter-ads/synterai-mcp-server.json
- HTML version of this page: https://verifymcp.io/servers/synter-media-ai-synter-ads/synterai-mcp-server
