# Meta Ad Library Spend MCP by AdSpendSpy (remote · www.adspendspy.com)

Facebook and Meta Ad Library ads with estimated ad spend per ad, top landing pages and alerts.

- Trust score: 69/100 (medium)
- Change this week: +3
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-11-05

> **Recent critical change**: Authorization (2026-10-24). See the changelog below before you install this server.

## Components

- remote · `www.adspendspy.com`: 69/100 (this document), [markdown](https://verifymcp.io/servers/com-adspendspy-adspendspy/www.md), [page](https://verifymcp.io/servers/com-adspendspy-adspendspy/www)

## Channel facts

- Endpoint: `https://www.adspendspy.com/mcp`
- Transports: `streamable-http`
- Auth: `none`
- Version: `1.0.2`

## 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**: 57/100
  - The endpoint's TLS certificate is valid, in date, and uses a strong key.
  - Authorisation check failed: no authorisation is required to call this server, and it exposes a tool marked destructive (track_brand).
  - 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**: 77/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).
  - Context-footprint check failed: tool/resource definitions use about 2334 tokens (~137/item across 17 items; 17 tools + 0 resources), over budget; trim descriptions and params.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 40/100
  - Stability observed for 12 of 30 days with no destabilising changes; credit accrues until the full window elapses.
- **Tool Coverage**: 86/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 59% 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 17 captured tool definition(s), and no name or description among them implies an irreversible operation.
  - An AI judge read all 18 captured unit(s) of tool text and found none that tries to manipulate the model reading it.
- **Capabilities**: 100/100
  - Implements a current MCP spec version (2026-07-28).

## Install

### How do I install the Meta Ad Library Spend MCP by AdSpendSpy server?

Meta Ad Library Spend MCP by AdSpendSpy is a hosted endpoint at https://www.adspendspy.com/mcp, 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 com-adspendspy-adspendspy 'https://www.adspendspy.com/mcp'
```

### Cursor

```json
{
  "mcpServers": {
    "com-adspendspy-adspendspy": {
      "url": "https://www.adspendspy.com/mcp"
    }
  }
}
```

### VS Code

```json
{
  "servers": {
    "com-adspendspy-adspendspy": {
      "type": "http",
      "url": "https://www.adspendspy.com/mcp"
    }
  }
}
```

### Codex

```toml
[mcp_servers.com-adspendspy-adspendspy]
url = "https://www.adspendspy.com/mcp"
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "com-adspendspy-adspendspy": {
      "type": "remote",
      "url": "https://www.adspendspy.com/mcp",
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add com-adspendspy-adspendspy --url 'https://www.adspendspy.com/mcp' --transport streamable-http
```

### Hermes

```yaml
mcp_servers:
  com-adspendspy-adspendspy:
    url: "https://www.adspendspy.com/mcp"
```

### Netclaw

```json
{
  "McpServers": {
    "com-adspendspy-adspendspy": {
      "Transport": "http",
      "Url": "https://www.adspendspy.com/mcp"
    }
  }
}
```

### Vellum

```bash
assistant mcp add com-adspendspy-adspendspy -t streamable-http -u 'https://www.adspendspy.com/mcp'
```

### Other

```json
{
  "mcpServers": {
    "com-adspendspy-adspendspy": {
      "type": "http",
      "url": "https://www.adspendspy.com/mcp"
    }
  }
}
```

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-04 (score 69, +1)

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

### 2026-11-02 (score 68, +1)

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

### 2026-10-31 (score 67, +1)

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

### 2026-10-29 (score 66, +1)

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

### 2026-10-26 (score 65, +1)

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

### 2026-10-25 (score 64, 0)

- [functional improvement] Stability: unverified → 0.03

### 2026-10-24 (score 64, +27)

- [critical regression] Authorization: pass → fail
- [security improvement] Transport: unverified → pass
- [security improvement] Injection markers: unverified → pass
- [security] First check of Judged manipulation: pass
- [functional improvement] MCP protocol: unverified → pass
- [functional improvement] Schema quality: unverified → 100
- [functional improvement] Tool coverage: unverified → 100
- [functional] First check of Schema quality: fail
- [functional] First check of Destructive annotations: pass
- [functional] First check of Schema quality: fail
- [functional] First check of Tool coverage: 59
- [functional] First check of Schema quality: good

### 2026-10-23 (score 37, +14)

- [security regression] HSTS header: unverified → fail
- [security regression] Transport: fail → unverified
- [security improvement] Authorization: unverified → pass
- [security] First check of Authorization: pass

## MCP tools (17)

### `search_advertisers` (~74 tokens)

Search Meta Ad Library advertisers

Search AdSpendSpy's Meta Ad Library database for an advertiser or brand by name. Returns up to five matching brands with category, logo, number of active ads where known, and the page_id. No sign-in needed.

Input parameters:

- `query` (string, required): Brand or advertiser name, e.g. "Gymshark".

### `get_advertiser_ads` (~276 tokens)

Show an advertiser's Meta ads

Show one brand's active Meta ads (Facebook and Instagram). For brands AdSpendSpy tracks: active ad count, an estimated 30-day spend range split into EU/UK and US where available, and up to six top ads with image or video, headline, text, days running, platforms and landing domain. A brand name is matched exactly; if only similar names exist, it returns them as candidates and no ads. With live_lookup true, an untracked brand is looked up live in the Meta Ad Library (up to ten newest ads, no spend). No sign-in needed. Pass page_id when known, otherwise brand.

Input parameters:

- `brand` (string): Exact brand or advertiser name as the user wrote it, e.g. "Gymshark". Used only when no page_id is given; never matched to a differently named brand.
- `country` (string): Two-letter ISO country code such as "DE", "US" or "GB" when the user names a country; "ALL" for worldwide.
- `live_lookup` (boolean): True only after a previous call returned candidates and none is the brand the user means. Live lookups are limited per conversation and per day.
- `page_id` (string): Numeric Meta page ID of the advertiser, as returned in earlier results. Preferred when known.

### `find_similar_advertisers` (~141 tokens)

Find similar advertisers

List up to six tracked advertisers similar to a brand (same Facebook page category or niche), each with category, active ads where known, estimated 30-day spend range and one top ad. No sign-in needed. Pass page_id when known, otherwise the exact brand name.

Input parameters:

- `brand` (string): Exact brand or advertiser name as the user wrote it, e.g. "Gymshark". Used only when no page_id is given; never matched to a differently named brand.
- `limit` (integer)
- `page_id` (string): Numeric Meta page ID of the advertiser, as returned in earlier results. Preferred when known.

### `compare_advertisers` (~82 tokens)

Compare advertisers

Compare 2 to 6 tracked advertisers side by side: category, active ads where known, estimated 30-day spend range and one top ad each. A name AdSpendSpy does not track is listed as not tracked and never replaced by a similar brand. No sign-in needed.

Input parameters:

- `brands` (array)
- `page_ids` (array)

### `list_tracked_brands` (~53 tokens)

List tracked advertisers

List your actively tracked advertisers and their string page_id values.

Input parameters:

- `project` (string): all, my_brands, unassigned, or an owned project public_id. Every choice stays within your tracked brands.

### `search_tracked_brands` (~49 tokens)

Find a tracked advertiser

Search your tracked advertisers by name, Meta page ID, or stored Facebook URL. Searches existing local data only; does not resolve vanity URLs through paid providers.

Input parameters:

- `q` (string, required)

### `check_brands_tracked` (~33 tokens)

Check advertiser tracking

Check whether each string Meta page ID is actively tracked by your account.

Input parameters:

- `page_ids` (array, required)

### `track_brand` (~172 tokens)

Start tracking an advertiser

Add a known advertiser to your tracked brands before reading its ads. Changes your AdSpendSpy account: the advertiser joins your tracked brands and AdSpendSpy starts importing its ads. Requires a Meta page_id and brand_name and consumes one of your existing account tracking slots, not an extra subscription. Repeating an active tracking is idempotent, even at the limit. New imports run in the background, so ads may not be ready yet. Returns tracked_count, tracked_limit, remaining_slots and ingestion_state. There is no MCP removal tool: remove brands on the AdSpendSpy website. Does not search Meta or resolve advertiser names or URLs.

Input parameters:

- `brand_name` (string, required): Advertiser display name, not a URL or an instruction.
- `page_id` (string, required): Meta advertiser page ID, kept as a string.

### `list_brand_ads` (~153 tokens)

List advertiser ads

List creative summaries for one tracked advertiser, newest internal ID first, or with sort spend highest latest cumulative estimated spend first (use it for an advertiser's top ads). pagination.next_cursor returns the next page. Each ad carries internal_ad_id (AdSpendSpy ID) and meta_ad_id (the ad on Meta).

Input parameters:

- `active_only` (boolean)
- `cursor` (string): Opaque pagination.next_cursor returned by the previous page with the same filters.
- `limit` (integer)
- `media_type` (string)
- `page_id` (string, required): Meta advertiser page ID, kept as a string.
- `sort` (string): newest = newest internal ID first; spend = highest estimated spend first.

### `get_ad_details` (~84 tokens)

Inspect an ad creative

Retrieve one ad of an advertiser you actively track by its internal AdSpendSpy ad ID (internal_ad_id), not its Meta ad ID. Saved lists and favorites do not retain MCP ad access after you remove a tracked brand on the website.

Input parameters:

- `ad_id` (integer, required): Internal AdSpendSpy ad ID (internal_ad_id in ad listings); never a Meta ad ID.

### `get_top_ads_stats` (~169 tokens)

Analyze estimated ad spend

Analyze latest cumulative estimated spend in EUR for your tracked advertisers. page_id is an exact advertiser filter. timeframe filters when ads were last seen, NOT spend accrued during that period. Creative breakdowns sample the top 1,000 ads; response metadata states matched and sampled counts and full-match aggregate spend. Zero can mean unavailable estimates.

Input parameters:

- `active_only`
- `category` (string)
- `media_type` (string)
- `page_id` (string): Meta advertiser page ID, kept as a string.
- `project` (string): all, my_brands, unassigned, or an owned project public_id. Every choice stays within your tracked brands.
- `q` (string)
- `timeframe` (string): Last-seen window; never a period-spend calculation.

### `get_top_landingpages_stats` (~200 tokens)

Rank landing pages by estimated spend

Rank the landing pages of your tracked advertisers by latest cumulative estimated spend in EUR. Ads are grouped by landing URL with ad, advertiser and active-ad counts, the top-spending advertiser and, when one is stored, a screenshot as screenshot_url (site path) and screenshot_full_url (absolute URL). page_id is an exact advertiser filter; q matches part of the landing URL. timeframe filters when ads were last seen, NOT spend accrued during that period. Zero can mean unavailable estimates.

Input parameters:

- `active_only`
- `limit` (integer)
- `page_id` (string): Meta advertiser page ID, kept as a string.
- `project` (string): all, my_brands, unassigned, or an owned project public_id. Every choice stays within your tracked brands.
- `q` (string): Substring of the landing URL.
- `timeframe` (string): Last-seen window; never a period-spend calculation.

### `get_ad_lists` (~76 tokens)

Read saved ad lists

Read your saved lists, with ad creatives limited to advertisers you actively track. list_id selects one owned list; ad_id reports which of your lists contain that internal ad ID and takes precedence when both are supplied. Saving an ad does not bypass tracking limits.

Input parameters:

- `ad_id` (integer)
- `list_id` (integer)

### `get_projects` (~54 tokens)

Read advertiser projects

Read your projects. public_id selects one owned project; brand_id selects memberships for an actively tracked internal brand record and takes precedence when both are supplied.

Input parameters:

- `brand_id` (integer)
- `public_id` (string)

### `get_pending_alert_count` (~20 tokens)

Count pending alerts

Read the number of pending alerts for your account.

### `list_new_ads` (~198 tokens)

List new ads of tracked brands

List ads that newly appeared for advertisers you actively track, newest first (event ad.new). An ad counts as new when it started at most 7 days before it was first seen, so the back catalog of a freshly tracked advertiser is excluded. Without since_id or cursor the last 30 days are returned. since_id returns only items with a higher internal_ad_id. Spend is a latest cumulative estimate in EUR; null means unknown. Use page_id or project, not both.

Input parameters:

- `cursor` (string): Opaque pagination.next_cursor returned by the previous page with the same filters.
- `limit` (integer)
- `page_id` (string): Meta advertiser page ID, kept as a string.
- `project` (string): Public_id of one of your projects. Cannot be combined with page_id.
- `since_id` (integer): Return only items with a higher id (internal_ad_id for new ads, alert_id for alerts).

### `list_alerts` (~193 tokens)

List spend alerts

List spend alerts for ads of advertisers you actively track, newest first (event ad.spend_alert). Each item carries the alert threshold and the estimated spend when the alert was created. Without since_id or cursor the last 30 days are returned. since_id returns only items with a higher alert_id. Spend is a latest cumulative estimate in EUR; null means unknown. Reading alerts does not mark them as sent. Use page_id or project, not both.

Input parameters:

- `cursor` (string): Opaque pagination.next_cursor returned by the previous page with the same filters.
- `limit` (integer)
- `page_id` (string): Meta advertiser page ID, kept as a string.
- `project` (string): Public_id of one of your projects. Cannot be combined with page_id.
- `since_id` (integer): Return only items with a higher id (internal_ad_id for new ads, alert_id for alerts).

## Diagnostics

Captured diagnostic sections: TLS, DNSSEC, Authorisation, Transports. The full working is on the page: https://verifymcp.io/servers/com-adspendspy-adspendspy/www#diagnostics

## Score history

- 2026-11-05: 69
- 2026-11-04: 69
- 2026-11-03: 68
- 2026-11-02: 68
- 2026-11-01: 67
- 2026-10-31: 67
- 2026-10-30: 66
- 2026-10-29: 66
- 2026-10-28: 65
- 2026-10-27: 65
- 2026-10-26: 65
- 2026-10-25: 64
- 2026-10-24: 64
- 2026-10-23: 37
- 2026-10-22: 23

## Common questions

### What is the Meta Ad Library Spend MCP by AdSpendSpy server?

Meta Ad Library Spend MCP by AdSpendSpy is listed in the public MCP registry as com.adspendspy/adspendspy. Facebook and Meta Ad Library ads with estimated ad spend per ad, top landing pages and alerts. This page covers its hosted endpoint (https://www.adspendspy.com/mcp).

### Is the Meta Ad Library Spend MCP by AdSpendSpy server safe to use?

Meta Ad Library Spend MCP by AdSpendSpy scores 69 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 Meta Ad Library Spend MCP by AdSpendSpy server expose?

Meta Ad Library Spend MCP by AdSpendSpy exposes 17 tools: search_advertisers, get_advertiser_ads, find_similar_advertisers, compare_advertisers, list_tracked_brands, and 12 more. Their descriptions and schemas cost roughly 2,027 tokens of context every time the server is loaded.

### Does the Meta Ad Library Spend MCP by AdSpendSpy server require authentication?

No. We connected to Meta Ad Library Spend MCP by AdSpendSpy without credentials and it answered, so anything it exposes is reachable by anyone who knows the address.

### Is the Meta Ad Library Spend MCP by AdSpendSpy server still maintained?

Meta Ad Library Spend MCP by AdSpendSpy 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://www.adspendspy.com/mcp
- Authorisation metadata: https://www.adspendspy.com/.well-known/oauth-protected-resource/mcp
- Website: https://www.adspendspy.com/api-docs
- Changelog RSS feed: https://verifymcp.io/servers/com-adspendspy-adspendspy/www.xml
- Changelog JSON feed: https://verifymcp.io/servers/com-adspendspy-adspendspy/www.json
- HTML version of this page: https://verifymcp.io/servers/com-adspendspy-adspendspy/www
