# Apple Search Ads MCP by Nova (CIVAI) (remote · nova.civai.co)

Manage Apple Search Ads from chat: sign in with Apple ID, check notifications, and pull campaign pe…

- Trust score: 76/100 (medium)
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-11-05

## Components

- remote · `nova.civai.co`: 76/100 (this document), [markdown](https://verifymcp.io/servers/co-civai-nova-mcp-apple-ads/mcp-agents-mcp-apple-ads.md), [page](https://verifymcp.io/servers/co-civai-nova-mcp-apple-ads/mcp-agents-mcp-apple-ads)

## Channel facts

- Endpoint: `https://nova.civai.co/mcp/agents/mcp-apple_ads`
- Transports: `streamable-http`
- Auth: `required (not validated)`
- Version: `1.0.0`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically against the live server, 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-11-05.

- **Endpoint Security**: 83/100
  - The endpoint's TLS certificate is valid, in date, and uses a strong key.
  - Authorisation is enforced on tool calls, but the challenge carries no valid RFC 9728 metadata, so a client cannot discover where to get a token.
  - HTTPS is enforced; there's no plaintext access path.
  - HSTS check failed: the Strict-Transport-Security header is absent.
  - DNSSEC check failed: this domain isn't protected by DNSSEC.
- **Transport & Reachability**: 100/100
  - Verified streamable-http transport via a live MCP handshake.
- **Schema Quality & AI Usability**: 81/100
  - 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).
  - AI-judged instruction clarity (good).
  - Tool/resource definitions use about 2795 tokens (~99/item across 28 items; 25 tools + 3 resources), lean.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 10/100
  - Stability observed for 3 of 30 days with no destabilising changes; credit accrues until the full window elapses.
- **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**: 75/100
  - No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.
  - 0 of 2 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation; "delete_targeting_keyword" implies "delete" and declares no destructiveHint at all, which the MCP spec reads as destructive by default.
  - An AI judge read all 26 captured unit(s) of tool text and found none that tries to manipulate the model reading it.
- **Capabilities**: 100/100
  - Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.

## Install

### How do I install the Apple Search Ads MCP by Nova (CIVAI) server?

Apple Search Ads MCP by Nova (CIVAI) is a hosted endpoint at https://nova.civai.co/mcp/agents/mcp-apple_ads, so there is nothing to install locally. 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 --transport http co-civai-nova-mcp-apple-ads 'https://nova.civai.co/mcp/agents/mcp-apple_ads'
```

### Cursor

```json
{
  "mcpServers": {
    "co-civai-nova-mcp-apple-ads": {
      "url": "https://nova.civai.co/mcp/agents/mcp-apple_ads"
    }
  }
}
```

### VS Code

```json
{
  "servers": {
    "co-civai-nova-mcp-apple-ads": {
      "type": "http",
      "url": "https://nova.civai.co/mcp/agents/mcp-apple_ads"
    }
  }
}
```

### Codex

```toml
[mcp_servers.co-civai-nova-mcp-apple-ads]
url = "https://nova.civai.co/mcp/agents/mcp-apple_ads"
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "co-civai-nova-mcp-apple-ads": {
      "type": "remote",
      "url": "https://nova.civai.co/mcp/agents/mcp-apple_ads",
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add co-civai-nova-mcp-apple-ads --url 'https://nova.civai.co/mcp/agents/mcp-apple_ads' --transport streamable-http
```

### Hermes

```yaml
mcp_servers:
  co-civai-nova-mcp-apple-ads:
    url: "https://nova.civai.co/mcp/agents/mcp-apple_ads"
```

### Netclaw

```json
{
  "McpServers": {
    "co-civai-nova-mcp-apple-ads": {
      "Transport": "http",
      "Url": "https://nova.civai.co/mcp/agents/mcp-apple_ads"
    }
  }
}
```

### Vellum

```bash
assistant mcp add co-civai-nova-mcp-apple-ads -t streamable-http -u 'https://nova.civai.co/mcp/agents/mcp-apple_ads'
```

### Other

```json
{
  "mcpServers": {
    "co-civai-nova-mcp-apple-ads": {
      "type": "http",
      "url": "https://nova.civai.co/mcp/agents/mcp-apple_ads"
    }
  }
}
```

The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.

## 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-11-05 (score 76, +1)

No change was recorded against any check on this day. Stability & Change Management went from 7 to 10. That category is still filling its 30-day observation window: 2 days of observed history at the previous scan, 3 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-11-03 (score 75, +1)

- [functional improvement] Stability: unverified → 0.03

### 2026-11-02 (score 74)

First indexed and scored.

## MCP tools (25)

### `session_status` (~53 tokens)

Verify Apple Search Ads session (config + GetView).

Input parameters:

- `notification_message` (string): Short user-facing sentence for this action if the follow-up reply fails. Plain text only; do not mention template syntax or variable names.

### `list_campaign_reports` (~119 tokens)

Campaign performance report (getReportsByCampaign).

Input parameters:

- `adam_id` (string): App Store adam ID for Referer (default 9025370).
- `notification_message` (string): Short user-facing sentence for this action if the follow-up reply fails. Plain text only; do not mention template syntax or variable names.
- `report_end_time` (string): End date YYYY-MM-DD (UTC).
- `report_start_time` (string): Start date YYYY-MM-DD (UTC).
- `report_timezone` (string): Reporting time zone (default UTC).

### `get_campaign_grid_columns` (~70 tokens)

Dashboard campaign column layout.

Input parameters:

- `adam_id` (string): App Store adam ID for Referer (default 9025370).
- `notification_message` (string): Short user-facing sentence for this action if the follow-up reply fails. Plain text only; do not mention template syntax or variable names.

### `get_filter_sets` (~89 tokens)

Saved dashboard filter sets.

Input parameters:

- `adam_id` (string): App Store adam ID for Referer (default 9025370).
- `filter_set_type` (string): GraphQL filterSetType (default CAMPAIGNS).
- `notification_message` (string): Short user-facing sentence for this action if the follow-up reply fails. Plain text only; do not mention template syntax or variable names.

### `get_general_setting` (~87 tokens)

Account general setting (e.g. timezone).

Input parameters:

- `adam_id` (string): App Store adam ID for Referer (default 9025370).
- `general_setting_name` (string): Setting name (default timezone).
- `notification_message` (string): Short user-facing sentence for this action if the follow-up reply fails. Plain text only; do not mention template syntax or variable names.

### `get_campaign` (~118 tokens)

Campaign detail (name, status, budget, app metadata) via reloadCampaignFromAdGroupGQL.

Input parameters:

- `ad_group_id` (string): Ad group ID for Referer path when opened from ad group UI.
- `adam_id` (string): App Store adam ID for Referer (default 9025370).
- `campaign_id` (string, required): Apple Ads campaign ID.
- `notification_message` (string): Short user-facing sentence for this action if the follow-up reply fails. Plain text only; do not mention template syntax or variable names.

### `get_inbox` (~116 tokens)

Search Ads notification inbox (GET /cm/api/v1/ns/inbox). Returns status, data[], pagination.

Input parameters:

- `ad_group_id` (string): Ad group ID for Referer path.
- `adam_id` (string): Portal app adam ID for Referer (default 9025370).
- `campaign_id` (string): Campaign ID for Referer path.
- `notification_message` (string): Short user-facing sentence for this action if the follow-up reply fails. Plain text only; do not mention template syntax or variable names.

### `list_notifications` (~103 tokens)

Alias for get_inbox — same inbox API.

Input parameters:

- `ad_group_id` (string): Ad group ID for Referer path.
- `adam_id` (string): Portal app adam ID for Referer (default 9025370).
- `campaign_id` (string): Campaign ID for Referer path.
- `notification_message` (string): Short user-facing sentence for this action if the follow-up reply fails. Plain text only; do not mention template syntax or variable names.

### `search_apps` (~63 tokens)

Search promotable apps (CM API).

Input parameters:

- `app_search_query` (string): App name search string.
- `notification_message` (string): Short user-facing sentence for this action if the follow-up reply fails. Plain text only; do not mention template syntax or variable names.

### `list_campaigns` (~88 tokens)

List campaigns for an app (CM API find).

Input parameters:

- `app_adam_id` (string): App Store adam ID (default BrowserGPT 6746402487).
- `campaign_list_query` (string): Optional name filter.
- `notification_message` (string): Short user-facing sentence for this action if the follow-up reply fails. Plain text only; do not mention template syntax or variable names.

### `list_ad_groups` (~75 tokens)

List ad groups in a campaign.

Input parameters:

- `ad_group_list_query` (string): Optional name/id search filter.
- `campaign_id` (string, required): Campaign ID.
- `notification_message` (string): Short user-facing sentence for this action if the follow-up reply fails. Plain text only; do not mention template syntax or variable names.

### `list_ad_group_reports` (~117 tokens)

Ad group metrics for a campaign (GraphQL).

Input parameters:

- `adam_id` (string): Portal org app id for Referer (default 9025370).
- `campaign_id` (string, required): Campaign ID.
- `notification_message` (string): Short user-facing sentence for this action if the follow-up reply fails. Plain text only; do not mention template syntax or variable names.
- `report_end_time` (string): End date YYYY-MM-DD (UTC).
- `report_start_time` (string): Start date YYYY-MM-DD (UTC).

### `reload_campaign_from_campaign` (~85 tokens)

Campaign detail from campaign reporting view (GraphQL).

Input parameters:

- `adam_id` (string): Portal org app id for Referer (default 9025370).
- `campaign_id` (string, required): Campaign ID.
- `notification_message` (string): Short user-facing sentence for this action if the follow-up reply fails. Plain text only; do not mention template syntax or variable names.

### `create_campaign` (~162 tokens)

Create Search Results campaign (default PAUSED). Requires unique campaign_name.

Input parameters:

- `app_adam_id` (string): App Store adam ID for the promoted app (default BrowserGPT 6746402487).
- `campaign_create_status` (string): PAUSED or ENABLED (default PAUSED).
- `campaign_name` (string, required): Unique campaign name (required).
- `countries_or_regions` (string): Comma-separated ISO country codes (default US).
- `daily_budget_amount` (string): Daily budget amount (default 10).
- `daily_budget_currency` (string): Budget currency (default USD).
- `notification_message` (string): Short user-facing sentence for this action if the follow-up reply fails. Plain text only; do not mention template syntax or variable names.

### `create_ad_group` (~140 tokens)

Create ad group under campaign_id.

Input parameters:

- `ad_group_create_status` (string): PAUSED or ENABLED (default PAUSED).
- `ad_group_name` (string, required): Ad group name (required).
- `automated_keywords_opt_in` (string): true/false for Search Match (default false).
- `campaign_id` (string): Campaign ID (or use created_campaign_id from create_campaign).
- `default_bid_amount` (string): Default max CPT bid (default 1.00).
- `notification_message` (string): Short user-facing sentence for this action if the follow-up reply fails. Plain text only; do not mention template syntax or variable names.

### `enable_campaign` (~124 tokens)

Update campaign status and/or daily budget (PUT CM API).

Input parameters:

- `campaign_id` (string, required): Campaign ID to update.
- `campaign_update_status` (string): ENABLED or PAUSED (default ENABLED).
- `daily_budget_amount` (string): Optional new daily budget amount (USD unless daily_budget_currency set).
- `daily_budget_currency` (string): Budget currency when updating daily_budget_amount (default USD).
- `notification_message` (string): Short user-facing sentence for this action if the follow-up reply fails. Plain text only; do not mention template syntax or variable names.

### `enable_ad_group` (~94 tokens)

Set ad group status ENABLED or PAUSED.

Input parameters:

- `ad_group_id` (string, required): Ad group ID.
- `ad_group_update_status` (string): ENABLED or PAUSED (default ENABLED).
- `campaign_id` (string, required): Campaign ID.
- `notification_message` (string): Short user-facing sentence for this action if the follow-up reply fails. Plain text only; do not mention template syntax or variable names.

### `add_targeting_keywords` (~151 tokens)

Add a targeting keyword to an ad group (CM API array POST).

Input parameters:

- `ad_group_id` (string): Ad group ID.
- `campaign_id` (string): Campaign ID.
- `keyword_bid_amount` (string): Max CPT bid (defaults to default_bid_amount or 1.00).
- `keyword_match_type` (string): EXACT or BROAD (default EXACT).
- `keyword_status` (string): ACTIVE or PAUSED (default ACTIVE).
- `keyword_text` (string, required): Keyword text (required, max 80 chars).
- `notification_message` (string): Short user-facing sentence for this action if the follow-up reply fails. Plain text only; do not mention template syntax or variable names.

### `update_ad_group` (~138 tokens)

Update ad group status, name, and/or default max CPT bid.

Input parameters:

- `ad_group_id` (string, required): Ad group ID.
- `ad_group_name` (string): Optional new ad group name.
- `ad_group_update_status` (string): Optional ENABLED or PAUSED.
- `campaign_id` (string, required): Campaign ID.
- `daily_budget_currency` (string): Bid currency (default USD).
- `default_bid_amount` (string): Optional new default max CPT bid.
- `notification_message` (string): Short user-facing sentence for this action if the follow-up reply fails. Plain text only; do not mention template syntax or variable names.

### `list_targeting_keywords` (~135 tokens)

List targeting keywords for an ad group (GraphQL adgroup_targetedkeywords).

Input parameters:

- `ad_group_id` (string, required): Ad group ID.
- `adam_id` (string): Portal org app id for Referer (default 9025370).
- `campaign_id` (string, required): Campaign ID.
- `notification_message` (string): Short user-facing sentence for this action if the follow-up reply fails. Plain text only; do not mention template syntax or variable names.
- `report_end_time` (string): End date YYYY-MM-DD (UTC).
- `report_start_time` (string): Start date YYYY-MM-DD (UTC).

### `update_targeting_keyword` (~136 tokens)

Update bid, status, or text on an existing targeting keyword.

Input parameters:

- `ad_group_id` (string): Ad group ID.
- `campaign_id` (string): Campaign ID.
- `keyword_bid_amount` (string): Max CPT bid.
- `keyword_id` (string, required): Keyword ID.
- `keyword_match_type` (string): EXACT or BROAD.
- `keyword_status` (string): ACTIVE or PAUSED.
- `keyword_text` (string, required): Keyword text.
- `notification_message` (string): Short user-facing sentence for this action if the follow-up reply fails. Plain text only; do not mention template syntax or variable names.

### `delete_targeting_keyword` (~87 tokens)

Delete a targeting keyword from an ad group.

Input parameters:

- `ad_group_id` (string): Ad group ID.
- `campaign_id` (string): Campaign ID.
- `keyword_id` (string, required): Keyword ID to delete.
- `notification_message` (string): Short user-facing sentence for this action if the follow-up reply fails. Plain text only; do not mention template syntax or variable names.

### `delete_campaign` (~94 tokens)

Delete a campaign permanently (GraphQL deleteCampaignsGql). Confirm with the user first.

Input parameters:

- `adam_id` (string): Portal org app id for Referer (default 9025370).
- `campaign_id` (string, required): Campaign ID to delete.
- `notification_message` (string): Short user-facing sentence for this action if the follow-up reply fails. Plain text only; do not mention template syntax or variable names.

### `duplicate_campaign` (~173 tokens)

Duplicate an existing campaign (CM REST). adPlacements default from source supplySources.

Input parameters:

- `campaign_id` (string, required): Source campaign ID.
- `copy_adgroup_keywords` (string): true/false copy ad group keywords (default false).
- `copy_campaign_negative_keywords` (string): true/false copy negative keywords (default false).
- `countries_or_regions` (string): Optional comma-separated country codes.
- `duplicate_ad_placements` (string): Optional comma-separated placements (default from source).
- `duplicate_campaign_name` (string, required): New campaign name (required).
- `duplicate_campaign_status` (string): PAUSED or ENABLED (default PAUSED).
- `notification_message` (string): Short user-facing sentence for this action if the follow-up reply fails. Plain text only; do not mention template syntax or variable names.

### `start_browser_auth` (~116 tokens)

Open App Store Connect sign-in only when needed. If the saved session is still valid, this tool returns success immediately and does not open the viewer. Call session_status first. Use force_reconnect only when the user explicitly wants to wipe the saved cookie and sign in again (destructive).

Input parameters:

- `force_reconnect` (boolean): DESTRUCTIVE: delete the saved session cookie for this tenant, then open the viewer for a fresh sign-in. Do not set true unless the user explicitly asks to sign out / reconnect / clear session.

## Diagnostics

Captured diagnostic sections: TLS, DNSSEC, Authorisation, Transports. The full working is on the page: https://verifymcp.io/servers/co-civai-nova-mcp-apple-ads/mcp-agents-mcp-apple-ads#diagnostics

## Score history

- 2026-11-05: 76
- 2026-11-04: 75
- 2026-11-03: 75
- 2026-11-02: 74

## Common questions

### What is the Apple Search Ads MCP by Nova (CIVAI) server?

Apple Search Ads MCP by Nova (CIVAI) is listed in the public MCP registry as co.civai.nova/mcp-apple_ads. Manage Apple Search Ads from chat: sign in with Apple ID, check notifications, and pull campaign pe… This page covers its hosted endpoint (https://nova.civai.co/mcp/agents/mcp-apple_ads).

### Is the Apple Search Ads MCP by Nova (CIVAI) server safe to use?

Apple Search Ads MCP by Nova (CIVAI) scores 76 out of 100 on VerifyMCP. 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 Apple Search Ads MCP by Nova (CIVAI) server expose?

Apple Search Ads MCP by Nova (CIVAI) exposes 25 tools: session_status, list_campaign_reports, get_campaign_grid_columns, get_filter_sets, get_general_setting, and 20 more. Their descriptions and schemas cost roughly 2,733 tokens of context every time the server is loaded.

### Does the Apple Search Ads MCP by Nova (CIVAI) server require authentication?

Yes. Apple Search Ads MCP by Nova (CIVAI) asked us for credentials when we connected, so you will need to authorise it in your MCP client before it can do anything.

### Is the Apple Search Ads MCP by Nova (CIVAI) server still maintained?

Apple Search Ads MCP by Nova (CIVAI) is still listed as active in the MCP registry. We last reached this channel on 5 November 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

## Links

- Remote endpoint: https://nova.civai.co/mcp/agents/mcp-apple_ads
- Website: https://nova.civai.co/agent/mcp-apple_ads
- Changelog RSS feed: https://verifymcp.io/servers/co-civai-nova-mcp-apple-ads/mcp-agents-mcp-apple-ads.xml
- Changelog JSON feed: https://verifymcp.io/servers/co-civai-nova-mcp-apple-ads/mcp-agents-mcp-apple-ads.json
- HTML version of this page: https://verifymcp.io/servers/co-civai-nova-mcp-apple-ads/mcp-agents-mcp-apple-ads
