Koskamo

AdSpendSpy MCP

An official MCP server by AdSpendSpy that provides AI agents with access to Meta Ad Library data, including estimated ad spend per ad and advertiser, landing pages, ad hooks, and creative analysis for competitor research.

Endpoint and access

No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.

AdSpendSpy MCP logo, by AdSpendSpyVendor evidenceStreamable HTTPNo sign-inEndpoint checked 2026-11-01Operated by AdSpendSpy
MCP endpoint (Streamable HTTP)
https://www.adspendspy.com/mcp-demo
Vendor documentation

What you can do with it

  • Retrieve estimated ad spend for specific advertisers
  • Identify landing pages behind Meta ads
  • Extract ad hooks and creative elements
  • Track competitor ad campaigns and running times

Source and maintenance

Vendor evidenceRegistry 1.0.1

Protocol and capabilities

Server
adspendspy-demo 1.0.0
MCP protocol
2025-11-25
Tools
7 advertised
Resources
Not advertised
Resource templates
Not advertised
Prompts
2 advertised
Server-advertised capabilities
{
  "tools": {
    "listChanged": false
  },
  "prompts": {
    "listChanged": false
  }
}

Server-provided instructions

Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.

AdSpendSpy MCP reads your own AdSpendSpy account: tracked advertisers, their ads, saved lists, projects, alerts and AdSpendSpy spend estimates (estimates by AdSpendSpy, not figures reported by Meta). Find an advertiser with list_tracked_brands or search_tracked_brands, use its string page_id with list_brand_ads, then pass internal_ad_id as get_ad_details.ad_id. Estimated spend is cumulative EUR; timeframe is only a last-seen filter. Each executed authenticated tool consumes one API request; discovery and initialization do not. Prompts rebuild_landing_page and landing_page_teardown guide landing-page research and rebuilds; prompts never consume quota. This read-only public demo is restricted to Alex Hormozi, page 116482854782233, and approved public ad creatives.

Tools

7 advertised

list_tracked_brands — List tracked advertisers
Advertised by the server during the last successful anonymous check.
Advertised read-only

Public demo: Alex Hormozi only (page_id 116482854782233). Ad listings/details expose only approved public creatives; statistics describe this advertiser only. List your actively tracked advertisers and their string page_id values.

list_tracked_brands input schema
{
  "type": "object",
  "required": [],
  "properties": {
    "project": {
      "enum": [
        "all"
      ],
      "type": "string",
      "description": "Only all is available in the public demo."
    }
  },
  "additionalProperties": false
}
list_tracked_brands annotations
{
  "title": "List tracked advertisers",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
search_tracked_brands — Find a tracked advertiser
Advertised by the server during the last successful anonymous check.
Advertised read-only

Public demo: Alex Hormozi only (page_id 116482854782233). Ad listings/details expose only approved public creatives; statistics describe this advertiser only. 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.

search_tracked_brands input schema
{
  "type": "object",
  "required": [
    "q"
  ],
  "properties": {
    "q": {
      "type": "string",
      "maxLength": 500,
      "minLength": 1
    }
  },
  "additionalProperties": false
}
search_tracked_brands annotations
{
  "title": "Find a tracked advertiser",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
check_brands_tracked — Check advertiser tracking
Advertised by the server during the last successful anonymous check.
Advertised read-only

Public demo: Alex Hormozi only (page_id 116482854782233). Ad listings/details expose only approved public creatives; statistics describe this advertiser only. Check whether each string Meta page ID is actively tracked by your account.

check_brands_tracked input schema
{
  "type": "object",
  "required": [
    "page_ids"
  ],
  "properties": {
    "page_ids": {
      "type": "array",
      "items": {
        "type": "string",
        "pattern": "^[0-9]{5,25}$",
        "description": "Meta advertiser page ID, kept as a string."
      },
      "maxItems": 100,
      "minItems": 1
    }
  },
  "additionalProperties": false
}
check_brands_tracked annotations
{
  "title": "Check advertiser tracking",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
list_brand_ads — List advertiser ads
Advertised by the server during the last successful anonymous check.
Advertised read-only

Public demo: Alex Hormozi only (page_id 116482854782233). Ad listings/details expose only approved public creatives; statistics describe this advertiser only. 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).

list_brand_ads input schema
{
  "type": "object",
  "required": [
    "page_id"
  ],
  "properties": {
    "sort": {
      "enum": [
        "newest",
        "spend"
      ],
      "type": "string",
      "default": "newest",
      "description": "newest = newest internal ID first; spend = highest estimated spend first."
    },
    "limit": {
      "type": "integer",
      "default": 25,
      "maximum": 100,
      "minimum": 1
    },
    "cursor": {
      "type": "string",
      "maxLength": 512,
      "minLength": 1,
      "description": "Opaque pagination.next_cursor returned by the previous page with the same filters."
    },
    "page_id": {
      "enum": [
        "116482854782233"
      ],
      "type": "string",
      "pattern": "^[0-9]{5,25}$",
      "description": "Meta advertiser page ID, kept as a string."
    },
    "media_type": {
      "enum": [
        "all",
        "image",
        "video"
      ],
      "type": "string",
      "default": "all"
    },
    "active_only": {
      "type": "boolean",
      "default": false
    }
  },
  "additionalProperties": false
}
list_brand_ads annotations
{
  "title": "List advertiser ads",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get_ad_details — Inspect an ad creative
Advertised by the server during the last successful anonymous check.
Advertised read-only

Public demo: Alex Hormozi only (page_id 116482854782233). Ad listings/details expose only approved public creatives; statistics describe this advertiser only. 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.

get_ad_details input schema
{
  "type": "object",
  "required": [
    "ad_id"
  ],
  "properties": {
    "ad_id": {
      "type": "integer",
      "maximum": 9007199254740991,
      "minimum": 1,
      "description": "Internal AdSpendSpy ad ID (internal_ad_id in ad listings); never a Meta ad ID."
    }
  },
  "additionalProperties": false
}
get_ad_details annotations
{
  "title": "Inspect an ad creative",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get_top_ads_stats — Analyze estimated ad spend
Advertised by the server during the last successful anonymous check.
Advertised read-only

Public demo: Alex Hormozi only (page_id 116482854782233). Ad listings/details expose only approved public creatives; statistics describe this advertiser only. 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.

get_top_ads_stats input schema
{
  "type": "object",
  "required": [],
  "properties": {
    "q": {
      "type": "string",
      "maxLength": 500
    },
    "page_id": {
      "enum": [
        "116482854782233"
      ],
      "type": "string",
      "pattern": "^[0-9]{5,25}$",
      "description": "Meta advertiser page ID, kept as a string."
    },
    "project": {
      "enum": [
        "all"
      ],
      "type": "string",
      "description": "Only all is available in the public demo."
    },
    "category": {
      "type": "string",
      "maxLength": 100
    },
    "timeframe": {
      "enum": [
        "all",
        "7d",
        "30d",
        "90d"
      ],
      "type": "string",
      "default": "30d",
      "description": "Last-seen window; never a period-spend calculation."
    },
    "media_type": {
      "enum": [
        "all",
        "image",
        "video"
      ],
      "type": "string",
      "default": "all"
    },
    "active_only": {
      "anyOf": [
        {
          "type": "boolean"
        },
        {
          "enum": [
            "0",
            "1",
            "true",
            "false"
          ],
          "type": "string"
        }
      ],
      "default": false
    }
  },
  "additionalProperties": false
}
get_top_ads_stats annotations
{
  "title": "Analyze estimated ad spend",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get_top_landingpages_stats — Rank landing pages by estimated spend
Advertised by the server during the last successful anonymous check.
Advertised read-only

Public demo: Alex Hormozi only (page_id 116482854782233). Ad listings/details expose only approved public creatives; statistics describe this advertiser only. 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.

get_top_landingpages_stats input schema
{
  "type": "object",
  "required": [],
  "properties": {
    "q": {
      "type": "string",
      "maxLength": 500,
      "description": "Substring of the landing URL."
    },
    "limit": {
      "type": "integer",
      "default": 60,
      "maximum": 100,
      "minimum": 1
    },
    "page_id": {
      "enum": [
        "116482854782233"
      ],
      "type": "string",
      "pattern": "^[0-9]{5,25}$",
      "description": "Meta advertiser page ID, kept as a string."
    },
    "project": {
      "enum": [
        "all"
      ],
      "type": "string",
      "description": "Only all is available in the public demo."
    },
    "timeframe": {
      "enum": [
        "all",
        "7d",
        "30d",
        "90d"
      ],
      "type": "string",
      "default": "30d",
      "description": "Last-seen window; never a period-spend calculation."
    },
    "active_only": {
      "anyOf": [
        {
          "type": "boolean"
        },
        {
          "enum": [
            "0",
            "1",
            "true",
            "false"
          ],
          "type": "string"
        }
      ],
      "default": false
    }
  },
  "additionalProperties": false
}
get_top_landingpages_stats annotations
{
  "title": "Rank landing pages by estimated spend",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}

Prompts

2 advertised

rebuild_landing_page — Rebuild a winning landing page for your offer

Advertised by the server during the last successful anonymous check.

Public demo: Alex Hormozi only (page_id 116482854782233). Pick a landing page with real estimated Meta ad spend, explain why it converts and rebuild its structure for your own offer with original copy.

landing_url
Optional landing page URL (http or https). Without it, the highest-spend landing pages are ranked first.
page_id
Optional Meta advertiser page_id (digits only) to limit the landing page ranking to one advertiser.
my_offer
Your brand, product, audience, main promise, price/offer and the proof you own.
output_folder
Optional relative output folder for the rebuild (default landing-rebuild).
landing_page_teardown — Explain why a top-spending landing page converts

Advertised by the server during the last successful anonymous check.

Public demo: Alex Hormozi only (page_id 116482854782233). Rank landing pages by estimated spend and break one down: sections, offer, proof, calls to action and the ad hooks that send traffic to it. No build.

landing_url
Optional landing page URL (http or https). Without it, the highest-spend landing pages are ranked first.
page_id
Optional Meta advertiser page_id (digits only) to limit the landing page ranking to one advertiser.

Resources

Not advertised

No resource definitions available.

30-day availability

Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.

Successful checks
1 of 1 (100%)
Average latency
619 ms
95th percentile latency
619 ms

Maintenance history

Public check and source-refresh events. Editorial and ownership records remain private.

  • · probe · passed · 619 ms · metadata changed · 7 tool(s), 2 prompt(s)

Connect from your client

Each snippet registers the same endpoint; pick the client you use.

This server is operated by the named third party. Listing and endpoint checks are not an endorsement or a security audit. Review the operator's permissions, terms, and data handling before connecting. How listings are checked and corrected.

Claude Code

Run this once in a terminal. It registers the remote server. Use --scope project to write .mcp.json for the repo.
Claude Code configuration
claude mcp add --transport http adspendspy-mcp https://www.adspendspy.com/mcp-demo

Codex

Run this once. Codex stores MCP servers in ~/.codex/config.toml (or .codex/config.toml in a trusted project).
Codex configuration
codex mcp add adspendspy-mcp --url https://www.adspendspy.com/mcp-demo

Cursor

Merge this server into .cursor/mcp.json in your project, then enable adspendspy-mcp in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "adspendspy-mcp": {
      "url": "https://www.adspendspy.com/mcp-demo"
    }
  }
}

Cline

Merge this into cline_mcp_settings.json (Cline → MCP Servers → Configure).
Cline configuration
{
  "mcpServers": {
    "adspendspy-mcp": {
      "type": "streamableHttp",
      "url": "https://www.adspendspy.com/mcp-demo",
      "disabled": false
    }
  }
}

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start adspendspy-mcp and inspect its tools.
VS Code configuration
{
  "servers": {
    "adspendspy-mcp": {
      "type": "http",
      "url": "https://www.adspendspy.com/mcp-demo"
    }
  }
}

Gemini CLI

Run this once. It writes .gemini/settings.json in the current project; pass --scope user for ~/.gemini/settings.json.
Gemini CLI configuration
gemini mcp add --transport http adspendspy-mcp https://www.adspendspy.com/mcp-demo

Claude Desktop

Merge this into claude_desktop_config.json (macOS: ~/Library/Application Support/Claude/, Windows: %APPDATA%\Claude\), then restart Claude Desktop.
Claude Desktop configuration
{
  "mcpServers": {
    "adspendspy-mcp": {
      "url": "https://www.adspendspy.com/mcp-demo"
    }
  }
}

Windsurf

Merge this into ~/.codeium/windsurf/mcp_config.json, then refresh MCP in Cascade. Windsurf remote servers use serverUrl, not url.
Windsurf configuration
{
  "mcpServers": {
    "adspendspy-mcp": {
      "serverUrl": "https://www.adspendspy.com/mcp-demo"
    }
  }
}

Let your agent find its tools

Find servers like AdSpendSpy MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.

Do you run AdSpendSpy MCP?

Prove ownership with a DNS record, a well-known file, or your Official MCP Registry entry, and your edits publish immediately. Proofs are re-checked weekly; admins can still hide or remove a listing.

Claim this listing