io.github.Synter-Media-AI/synter-ads
NPM · @SYNTERAI/MCP-SERVER · 2 COMPONENTS · SCANNED OCT 5
Reporting across 19 ad platforms, campaign creation on 14, write actions on 16, via AI.
Available components
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. How we score → Why this is hard to score →
Supply Chain Security80
- No malware found by supply-chain analysis.Pass
- CVE check failed: a known high-severity CVE affects @modelcontextprotocol/sdk 0.6.1, a direct dependency. A fixed version is available. View diagnostics → Fail
- No install/post-install scripts declared.Pass
- 7 of 14 dependencies flagged as unhealthy. View diagnostics → Partial
Provenance & Transparency45
- Source repository is publicly reachable at the declared URL. View diagnostics → Pass
- Provenance check failed: no build-provenance attestation is published. See how to fix → View diagnostics → Fail
- Clear OSI-approved license (MIT).Pass
- Actively maintained (last published 32 days ago).Pass
- Disclosure check failed: no security disclosure policy was found in the source repository. See how to fix → Fail
Schema Quality & AI Usability72
- AI-judged instruction clarity (good).Pass
- 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. See how to fix → Fail
- Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management0
- Stability not yet verified: not enough scan history yet (needs a 30-day window).Unverified
Tool Coverage100
- 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
- 100% of tool parameters carry a description.Pass
Tool Safety100
- No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
- We read all 25 captured tool definition(s), and no name or description among them implies an irreversible operation.Pass
- An AI judge read all 25 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities20
- Spec-recency check failed: implements MCP spec 2024-11-05; the latest is 2026-07-28. See how to fix → Fail
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.
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.
npm · @synterai/mcp-server
claude mcp add synter-media-ai-synter-ads -- npx -y @synterai/mcp-server
{
"mcpServers": {
"synter-media-ai-synter-ads": {
"command": "npx",
"args": [
"-y",
"@synterai/mcp-server"
]
}
}
} {
"servers": {
"synter-media-ai-synter-ads": {
"command": "npx",
"args": [
"-y",
"@synterai/mcp-server"
]
}
}
} codex mcp add synter-media-ai-synter-ads -- npx -y @synterai/mcp-server
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"synter-media-ai-synter-ads": {
"type": "local",
"command": [
"npx",
"-y",
"@synterai/mcp-server"
],
"enabled": true
}
}
} openclaw mcp add synter-media-ai-synter-ads --command npx --arg -y --arg @synterai/mcp-server
mcp_servers:
synter-media-ai-synter-ads:
command: "npx"
args: ["-y", "@synterai/mcp-server"] {
"McpServers": {
"synter-media-ai-synter-ads": {
"Transport": "stdio",
"Command": "npx",
"Arguments": [
"-y",
"@synterai/mcp-server"
]
}
}
} assistant mcp add synter-media-ai-synter-ads -t stdio -c npx -a -y @synterai/mcp-server
{
"mcpServers": {
"synter-media-ai-synter-ads": {
"command": "npx",
"args": [
"-y",
"@synterai/mcp-server"
]
}
}
} Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.
- 3 Oct 26 +15
- Malware scan: unverified → pass ▲ security
- 2 Oct 26 46
First indexed and scored.
Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.
Captured 7 Oct 2026 · Analysed npm/@synterai/mcp-server@1.2.4
Provenance No attestation
The registry publishes no build provenance for this version, so there is nothing to verify.
| Result | No attestation |
|---|---|
| Ecosystem | npm |
Background: How many MCP packages publish verified provenance →
Vulnerabilities 1 finding
| ID | CVE | Severity | Vector | Fix available |
|---|---|---|---|---|
| GHSA-w48q-cv73-mx4w | CVE-2025-66414 | high | yes |
Background: What a vulnerability scan can and cannot prove →
Dependencies 14 packages
| Packages resolved | 14 |
|---|---|
| Stale | 7 |
| Tree resolution | Complete |
Background: SBOMs and build attestations, explained →
The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →
add_keywords ~62
Add keywords to a Google Ads campaign or ad group.
| Name | Type | Req | Description |
|---|---|---|---|
| ad_group_id | string | yes | Ad group ID to add keywords to |
| keywords | array | yes | Keywords to add |
| match_type | string | – | Keyword match type (default: PHRASE) |
No output schema declared.
No examples provided.
add_negative_keywords ~56
Add negative keywords to block unwanted search terms.
| Name | Type | Req | Description |
|---|---|---|---|
| campaign_id | string | yes | Campaign ID |
| keywords | array | yes | Negative keywords to add |
| level | string | – | Level to apply negatives (default: CAMPAIGN) |
No output schema declared.
No examples provided.
create_conversion ~76
Create a conversion action in Google Ads. Returns the conversion ID and label for GTM setup.
| Name | Type | Req | Description |
|---|---|---|---|
| category | string | – | Conversion category (default: LEAD) |
| name | string | yes | Name for the conversion action (e.g., 'Signup', 'Purchase') |
| value | number | – | Default conversion value in USD (optional) |
No output schema declared.
No examples provided.
create_display_campaign ~161
Create a Google Ads Display campaign with responsive display ads. Supports image uploads from URLs.
| Name | Type | Req | Description |
|---|---|---|---|
| business_name | string | yes | Business name (max 25 chars) |
| campaign_name | string | yes | Name for the campaign |
| daily_budget | number | yes | Daily budget in USD |
| descriptions | array | yes | Descriptions (1-5, max 90 chars each) |
| final_url | string | yes | Landing page URL |
| geo_targets | array | – | Geo target codes |
| headlines | array | yes | 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 |
No output schema declared.
No examples provided.
create_linkedin_campaign ~212
Create a LinkedIn Ads campaign for B2B advertising.
| Name | Type | Req | Description |
|---|---|---|---|
| daily_budget | number | – | Daily budget in USD |
| group_id | string | yes | 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 | yes | 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'] |
No output schema declared.
No examples provided.
create_meta_campaign ~50
Create a Meta (Facebook/Instagram) advertising campaign.
| Name | Type | Req | Description |
|---|---|---|---|
| daily_budget | number | yes | Daily budget in USD |
| name | string | yes | Campaign name |
| objective | string | yes | Campaign objective |
No output schema declared.
No examples provided.
create_pmax_campaign ~238
Create a Google Ads Performance Max campaign. Requires images, headlines, descriptions, and a business name.
| Name | Type | Req | Description |
|---|---|---|---|
| business_name | string | yes | Business name (max 25 chars) |
| campaign_name | string | yes | Name for the campaign |
| daily_budget | number | yes | Daily budget in USD |
| descriptions | array | yes | Descriptions (2-5 accepted; provide 4-5; max 90 chars each) |
| final_url | string | yes | Landing page URL |
| geo_targets | array | – | Geo target codes |
| headlines | array | yes | 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 | yes | Long headline (max 90 chars) |
| square_image_url | string | – | URL to 1200x1200 square image |
| target_cpa | number | – | Target CPA in USD (optional) |
No output schema declared.
No examples provided.
create_reddit_campaign ~63
Create a Reddit Ads campaign for community-based advertising.
| Name | Type | Req | Description |
|---|---|---|---|
| account_id | string | – | Override the default Reddit ad account ID |
| name | string | yes | Campaign name |
| objective | string | yes | Campaign objective |
| status | string | – | Initial campaign status |
No output schema declared.
No examples provided.
create_search_campaign ~353
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.
| Name | Type | Req | Description |
|---|---|---|---|
| campaign_name | string | yes | Name for the campaign |
| daily_budget | number | yes | Daily budget in USD |
| descriptions | array | yes | 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 | yes | Landing page URL |
| geo_targets | array | – | Geo target codes (e.g., '2840' for US, '2826' for UK) |
| headlines | array | yes | 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 | yes | Keywords to target (phrase match). Provide at least 1. |
No output schema declared.
No examples provided.
diagnose_tracking ~44
Check if conversion tracking is properly set up on a website. Verifies gtag.js, GTM, and pixel installation.
| Name | Type | Req | Description |
|---|---|---|---|
| url | string | yes | Website URL to check |
No output schema declared.
No examples provided.
generate_image ~90
Generate an AI image for ad creatives using Imagen 4, Flux, or Stable Diffusion.
| Name | Type | Req | Description |
|---|---|---|---|
| name | string | – | Asset name for organization |
| prompt | string | yes | Image generation prompt (be specific about style, layout, colors) |
| provider | string | – | AI provider (default: imagen) |
| size | string | – | Image dimensions (default: 1200x628 for display ads) |
No output schema declared.
No examples provided.
generate_video ~121
Generate an AI video ad using Veo, Runway, or Luma. Great for YouTube and social ads.
| Name | Type | Req | Description |
|---|---|---|---|
| concept | string | – | Video concept framework (default: pas = Problem-Agitate-Solve) |
| duration | number | – | Video duration in seconds (default: 8) |
| key_benefit | string | yes | Main value proposition |
| product_name | string | yes | Product or brand name |
| provider | string | – | AI provider (default: veo) |
| target_audience | string | – | Who is this video for? |
No output schema declared.
No examples provided.
get_daily_spend ~65
Get daily spend breakdown for ONE ad platform. `platform` is required -- this tool does not aggregate across platforms.
| Name | Type | Req | Description |
|---|---|---|---|
| days | number | – | Number of days to look back (default: 7) |
| platform | string | yes | Ad platform to report on (required) |
No output schema declared.
No examples provided.
get_performance ~77
Get performance metrics (impressions, clicks, spend, conversions, ROAS) for campaigns.
| Name | Type | Req | Description |
|---|---|---|---|
| campaign_id | string | – | Filter by specific campaign ID (optional) |
| date_range | string | – | Date range for metrics (default: LAST_7_DAYS) |
| platform | string | yes | Ad platform to report on (required) |
No output schema declared.
No examples provided.
list_ad_accounts ~17
List all connected ad accounts across platforms.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
list_campaigns ~86
List campaigns for ONE ad platform. `platform` is required -- this tool does not aggregate across platforms. Returns campaign name, status, budget, and performance metrics.
| Name | Type | Req | Description |
|---|---|---|---|
| limit | number | – | Maximum number of campaigns to return (default: 50) |
| platform | string | yes | Ad platform to list campaigns for (required) |
| status | string | – | Filter by campaign status |
No output schema declared.
No examples provided.
list_conversions ~18
List all conversion actions configured in Google Ads.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
list_landing_pages ~29
List all landing pages for the authenticated workspace, including publish status, custom domain, and URLs.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
manage_audience ~314
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).
| Name | Type | Req | Description |
|---|---|---|---|
| action | string | yes | 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). |
No output schema declared.
No examples provided.
pause_campaign ~43
Pause a campaign by ID. Works across all connected platforms.
| Name | Type | Req | Description |
|---|---|---|---|
| campaign_id | string | yes | Campaign ID (platform-specific format) |
| platform | string | yes | Ad platform |
No output schema declared.
No examples provided.
run_tool ~95
Run any Synter tool by name. Use this for advanced operations not covered by other tools. See docs.syntermedia.ai for full tool list.
| Name | Type | Req | Description |
|---|---|---|---|
| args | array | – | Arguments to pass to the tool |
| platform | string | – | Platform for OAuth credentials (google, meta, linkedin, etc.) |
| script_name | string | yes | Name of the tool to run (e.g., 'google_ads_list_audiences') |
No output schema declared.
No examples provided.
stage_audience_artifact ~283
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.
| Name | Type | Req | Description |
|---|---|---|---|
| body | string | yes | 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). |
No output schema declared.
No examples provided.
sync_audience ~500
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.
| Name | Type | Req | Description |
|---|---|---|---|
| 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 | yes | Ad platform to upload to. |
No output schema declared.
No examples provided.
update_campaign_budget ~49
Update the daily budget for a campaign.
| Name | Type | Req | Description |
|---|---|---|---|
| campaign_id | string | yes | Campaign ID |
| daily_budget | number | yes | New daily budget in USD |
| platform | string | yes | Ad platform |
No output schema declared.
No examples provided.
upload_image ~58
Upload an image as an asset for use in ads.
| Name | Type | Req | Description |
|---|---|---|---|
| asset_name | string | yes | Name for the asset |
| image_url | string | yes | URL of the image to upload |
| platform | string | – | Target platform (default: google) |
No output schema declared.
No examples provided.
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.