Skip to main content
Glama
navidmoazzez

Facebook Ad Library MCP

by navidmoazzez

Facebook Ad Library MCP

Stars License npm Downloads CI YouTube X LinkedIn

Give any AI agent read access to every ad running on Facebook, Instagram, Messenger, Threads and Audience Network. Free, no API key, any country.

Meta's Ad Library is the largest public archive of advertising creative in the world, and it is completely open. This puts it inside your agent.

You: What is Ridge testing right now?

Claude: They have 34 ads live. The oldest has run 214 days: a single static image, "The last wallet you will buy", straight to a product page. The eleven newest are all video with a founder talking to camera, and every one of them points at a quiz funnel instead. They are moving from product-led to problem-led, and the old ad is still running because it still works.

Built by Navid Moazzez.

Contents

Section

1

What you can ask it

Real prompts, not features

2

Quick install

One command, no account

3

Setup

Optional, and why you probably do not need it

4

Connect your client

Every client, copy and paste

5

Check it worked

doctor, and what actually fails

6

Tools

All eight, and what each reaches

7

How it works

Why it returns more than a scraper

8

Limits, honestly

What no source can tell you

FAQ

Related MCP server: Meta Ads MCP Server

1. What you can ask it 💬

  • "What ads is Ridge running right now, and which has been live longest?"

  • "Show me every hook Athletic Greens is testing this month, grouped by angle."

  • "Compare two competitors: who runs more creative, and who refreshes it faster?"

  • "Find advertisers running cold plunge ads in the UK, ranked by ad count."

  • "Pull every ad from this Page and tell me which landing pages they send to."

  • "What changed for this advertiser since last week?"

  • "Which of these are video and which are static? Give me the video URLs."

  • "This ad has run 8 months. Read the copy and tell me why it works."

  • "What is this German brand spending, and who is paying for it?"

2. Quick install ⚡

Node 20 or newer. Nothing else.

npx -y @thenavidm/facebook-ad-library-mcp --version

The free backend drives a real browser, so install Chromium once:

npx playwright install chromium

That is the whole install. No account, no API key, no credential.

3. Setup 🔑

There is nothing to set up. The default backend needs no key and no account.

Everything below is optional, and only worth doing if you hit a specific limit.

Optional: a provider key, for speed and scale

The free backend runs Chromium on your machine, so a search takes 30 to 60 seconds and Meta will rate limit you if you hammer it. Two hosted providers remove both problems for money.

Backend

Roughly

Adds

scrapecreators

$1.88 per 1,000 ads

fast, serverless, transcribe_ad

apify

$3.40 to $5.80 per 1,000 ads

fast, serverless, e-commerce enrichment

Set FBADS_BACKEND and the matching key in your client config. Every tool behaves identically on all three.

Optional: EU spend and reach

Meta's official Ad Library API publishes real spend, impressions and demographics. It is free, and it covers political and issue ads worldwide plus every ad delivered in the EU.

  1. Go to developers.facebook.com and create an app.

  2. Generate an access token for it.

  3. Set it as META_ADS_ARCHIVE_TOKEN.

get_eu_transparency then returns data. Everything else works without it.

4. Connect your client 🔌

Claude Code

claude mcp add facebook-ads -- npx -y @thenavidm/facebook-ad-library-mcp@latest

--scope user makes it available in every project rather than the current one.

With a provider key:

claude mcp add facebook-ads \
  -e FBADS_BACKEND=scrapecreators \
  -e SCRAPECREATORS_API_KEY=xxx \
  -- npx -y @thenavidm/facebook-ad-library-mcp@latest

Claude Desktop

Platform

Path

macOS

~/Library/Application Support/Claude/claude_desktop_config.json

Windows

%APPDATA%\Claude\claude_desktop_config.json

{
  "mcpServers": {
    "facebook-ads": {
      "command": "npx",
      "args": ["-y", "@thenavidm/facebook-ad-library-mcp@latest"]
    }
  }
}

Tip Claude Desktop does not inherit your shell PATH. If npx is not found, use the absolute path from which npx.

Quit Claude Desktop completely and reopen it.

claude.ai on the web

claude.ai runs connectors from Anthropic's cloud, not from your machine, so it needs a public HTTPS URL.

npx -y @thenavidm/facebook-ad-library-mcp@latest --http --port 8000

Host that somewhere with a public HTTPS URL, then in claude.ai: Customize, Connectors, +, Add custom connector. Paste the URL and click Add.

Note the free backend needs a real browser, so whatever hosts it must be able to run Chromium. A provider backend is the easier choice for a hosted deployment.

Cursor

.cursor/mcp.json, same JSON shape as Claude Desktop, key mcpServers.

Windsurf

~/.codeium/windsurf/mcp_config.json, key mcpServers.

VS Code

.vscode/mcp.json. The key is servers, not mcpServers, and each entry takes "type": "stdio".

{
  "servers": {
    "facebook-ads": {
      "type": "stdio",
      "command": "npx",
      "args": ["-y", "@thenavidm/facebook-ad-library-mcp@latest"]
    }
  }
}

Codex CLI

~/.codex/config.toml:

[mcp_servers.facebook-ads]
command = "npx"
args = ["-y", "@thenavidm/facebook-ad-library-mcp@latest"]

Gemini CLI

~/.gemini/settings.json, key mcpServers.

Everything else

Any stdio MCP client takes the same three things: the command npx, the args, and an optional env block.

5. Check it worked 🩺

npx -y @thenavidm/facebook-ad-library-mcp@latest doctor

It launches a browser, runs a real search, and tells you whether ads came back.

Symptom

Fix

"Chromium will not launch"

npx playwright install chromium

"Meta served a captcha"

Wait a few minutes, or set a provider key

Empty results on every search

Meta is rate limiting this machine

Server missing from the client

npx not on the client's PATH, use an absolute path

6. Tools 🛠️

Every tool is read-only. This server cannot post, cannot spend, and cannot reach an ad account.

Tool

What it does

search_ads

Keyword search, or every ad from one Page. The main one.

list_advertisers

Resolve a brand name to Page IDs, ranked by ad count.

get_ad

One ad in full: every creative, every copy variant.

diff_advertiser

What an advertiser started and stopped running since last look.

get_eu_transparency

Spend, reach and demographics. EU and political ads only.

transcribe_ad

Speech to text on a video ad. Needs the scrapecreators backend.

backend_status

Which backend is active and whether it costs money.

ad_library_url

Turn filters into a URL a person can open and check.

Plus two prompts, competitor-teardown and creative-angles, and two resources so a client can read the config and the Ad Library's own concepts without spending a tool call.

diff_advertiser is the one worth knowing about. Every other tool answers "what is running". That one answers "what changed", which needs a memory of last time. The first call records a baseline.

7. How it works ⚙️

Worth knowing, because it explains what you get back.

The Ad Library is a React app. Meta hands it every ad as structured JSON. The obvious way to scrape it is to let the page render, flatten it to text, and pull the fields back out with regular expressions.

That round trip loses most of the ad. You get one creative instead of the six in the carousel, a redirect instead of the real landing page, and an empty platform list because those render as icons rather than text.

This server reads the JSON the page was already given. Same browser, same cost, no parsing step.

It reads two places, because Meta uses two: the first page of results is embedded in the document, and later pages arrive over the wire as you scroll. Reading only the second is why scrapers return nothing on the first search.

What that buys you, per ad:

Creatives

all of them, with HD and SD video URLs

Platforms

Facebook, Instagram, Messenger, Threads, Audience Network

Destination

the real URL, query string intact

Call to action

SHOP_NOW, from the payload rather than matched against a label list

Pagination

a real cursor, plus Meta's own total result count

Also

page likes, ad format, variant count, EU spend and reach

8. Limits, honestly 🧭

No performance data exists. Conversions, revenue, cost per acquisition, return on ad spend: none of it is public for another advertiser, from any source, at any price.

What you can infer is longevity. An ad running six months is probably working, because advertisers turn off ads that lose money. That is a hypothesis worth acting on, and it is not a measurement. The server's own instructions tell the model not to report it as one.

Spend and reach are usually null. They exist only for ads delivered in the EU, under the Digital Services Act, and for political ads anywhere. A null on a US ecommerce ad is the correct answer, not a bug.

The free backend gets rate limited. It drives a real browser against a public site. If searches start coming back empty, wait. That is also the point where a provider key starts paying for itself.

Creative URLs expire. Meta's CDN links are short-lived. Download what you want to keep, when you find it.

FAQ ❓

An MCP server is a standard way to give an AI assistant real tools. Once this is connected, your assistant can search the Ad Library itself instead of you copying results into a chat.

You do not need one. The Ad Library is public and this reads it without signing in to anything.

It is free by default. The free backend runs on your machine. The two provider backends bill per ad and are opt-in.

The free backend launches a real browser and scrolls a page, which takes 30 to 60 seconds. A provider backend answers in about a second, for money.

Only for EU-delivered ads and political ads, through get_eu_transparency. For a US commercial advertiser that number is not published anywhere.

It does not. and nothing can. You can see which have run longest, which is a reasonable proxy and not the same thing.

It is a catalogue ad. Meta fills those tokens per product at delivery. That is the real ad text.

It does. with --http. The free backend needs Chromium available; a provider backend is easier to host.

The Ad Library is published deliberately, for transparency, and is open without login. This reads it the way a browser does. You are responsible for your own use.

All of them. Pass any two-letter country code.

Dependencies

Package

License

Why

@modelcontextprotocol/sdk

MIT

the MCP protocol implementation

zod

MIT

tool argument schemas

playwright

Apache-2.0

drives Chromium for the free backend, optional

Questions

Run into a problem or have a question? Open an issue and I will help.

About the author 👋

Navid Moazzez is a leading AI business strategist, and the host of the AI Creator Summit, watched by 100,000+ creators. He helps creators and founders master AI and build their own AI Operating System (AI OS) to automate their business and life. This MCP server is one piece of that system.

Links

If this is useful, star the repo and come say hi on X.

License

MIT. Free to use, modify, and share.

Not affiliated with, endorsed by, or connected to Meta Platforms, Inc.


© 2026 NM Media. Made with ❤️ by Navid Moazzez.

Available Tools

9 tools
ad_library_urlBuild an Ad Library URLA
Read-onlyIdempotent

Turn a set of filters into the public Ad Library URL, so a person can open the same search in a browser and check the results independently. Useful when a search comes back empty and you need to tell 'no results' apart from 'blocked'.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryNoKeyword to search for.
countryNoTwo-letter country code. Default US.
page_idNoAdvertiser Page ID, instead of a keyword.
media_typeNo
active_statusNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
urlYes

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, and non-destructive. The description adds the key behavioral nuance that this tool builds a URL for independent browser verification rather than performing the search itself or returning ad data. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, no filler: the first states the action and output, the second provides a practical trigger. The most important content is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple URL-builder with readOnly annotations, an output schema, and all parameters optional, the description fully covers what the tool does, why it exists, and when it should be used. Nothing essential is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Description only refers generically to 'a set of filters' and gives no parameter-specific semantic help. Schema descriptions cover only three of five parameters, and the description doesn't compensate for the undocumented media_type and active_status semantics beyond their enum values.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description uses a specific verb ('Turn'), a clear object ('a set of filters'), and a concrete deliverable ('public Ad Library URL'). It distinguishes itself from sibling data-returning tools by emphasising browser-verifiable output rather than ad records or search results.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly states when the tool is useful: when a search returns empty and the user needs to distinguish 'no results' from 'blocked'. It does not name alternative tools, but the use case is concrete enough for an agent to select it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

backend_statusBackend statusA
Read-onlyIdempotent

Which backend is serving requests, whether it costs money per call, and which optional features are available in this configuration. Call this when a tool reports something unavailable, before telling the user it cannot be done.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
noteYes
backendYes
needs_api_keyYes
tracked_advertisersYes
costs_money_per_requestYes
transcription_availableYes
eu_transparency_availableYes

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotation already marks the tool as read-only, idempotent, and non-destructive, so the description does not need to repeat those. It adds useful behavioral context by revealing that the tool can explain cost-per-call and availabe optional features, which matters for deciding whether an unavailable action is actually impossible or merely unsupported.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, no filler. The first sentence lists exactly the information returned, and the second gives the precise moment to call the tool. Everything in the description earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool takes no inputs, has an output schema, and has unambiguous read-only annotations. The description is sufficient for an agent to know when and why to call it, and because there is an output schema, the description need not enumerate return fields.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema requires no parameters, so the description has no parameter meanings to add. The tool's whole purpose is self-contained, and the description adequately conveys that calling it requires no arguments.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states what the tool reports: the active backend, per-call cost implications, and available optional features. This distinguishes it from the ad-focused sibling tools, which all operate on ads or advertisers rather than on backend configuration.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives an explicit trigger condition: call this when another tool reports something unavailable, and just before informing the user that something cannot be done. This is concrete, actionable usage guidance and there are no alternative sibling tools that compete with this purpose.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

diff_advertiserWhat changed for an advertiserA
Read-onlyIdempotent

Compare an advertiser's ads now against the last time this server looked, and report what they started and stopped running. The first call on a Page records a baseline and reports nothing changed, which is expected: call it again later to see movement. This is the only tool here that answers 'what changed' rather than 'what is running'.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoHow many ads to pull for the comparison. Keep it consistent between calls.
countryNoTwo-letter country code. Default US.
page_idYesAdvertiser Page ID to compare. Get it from list_advertisers.

Output Schema

ParametersJSON Schema
NameRequiredDescription
noteYes
page_idYes
running_nowNo
tracked_nowNo
no_longer_seenNo
started_runningNo
baseline_createdYes
previously_trackedNo

TDQS

A3.8/5.0
Behavior1/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint=true and idempotentHint=true, but the description says the first call records a baseline and later calls report movement. This is a persistent server-side side effect and repeated identical calls intentionally return different results, directly contradicting the idempotent and read-only hints. Flagged as Annotation Contradiction.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, front-loaded with the core purpose, then the key stateful caveat, then the sibling distinction. Every sentence earns its place and there is no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a low-complexity tool with a full schema and an output schema, the description provides the needed operational details: baseline behavior, expected first-use outcome, and when to call again. It is nearly complete, but the contradiction between the stateful behavior and the idempotent/read-only annotations leaves some context unresolved.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with all three parameters documented including the limit consistency note and country default. The description itself adds no extra parameter semantics, so the baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific action (compare/report changes) on a specific resource (advertiser's ads), and immediately distinguishes itself from siblings: 'the only tool here that answers what changed rather than what is running.' An agent can tell what it does without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly handles the first-call case (records a baseline, reports nothing changed) and tells the agent to call again later to see movement. It also names the conceptual alternative category, tools describing what is running, so an agent knows when not to use it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_adGet one ad in fullA
Read-onlyIdempotent

Fetch a single ad by its Ad Library ID, with every creative, all copy variants, the full destination URL and any transparency data. Use this after search_ads when one ad is worth studying properly.

ParametersJSON Schema
NameRequiredDescriptionDefault
countryNoTwo-letter country code. Default US.
library_idYesThe Ad Library ID, the long number in an ad's URL.

Output Schema

ParametersJSON Schema
NameRequiredDescription
adNo
noteNo
foundYes
library_idNo

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, openWorldHint, and destructiveHint=false. The description adds meaningful behavioral detail about the comprehensive nature of the response: 'every creative, all copy variants, the full destination URL and any transparency data'. This goes beyond what the annotations alone convey and sets expectations for output completeness.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, no filler. The first sentence states action and coverage; the second gives usage guidance. The most important information is front-loaded and every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple single-id fetch tool, the description covers what, when, and why, while the input schema covers parameters and the output schema covers return structure. Annotations cover the safety profile. Nothing essential is missing for an agent to select and invoke this tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents library_id and country. The description itself does not add parameter-level semantics beyond referring to 'Ad Library ID', which matches the schema. Baseline 3 is appropriate because the schema carries the load.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'Fetch a single ad by its Ad Library ID'. It enumerates the scope of what is returned ('every creative, all copy variants, the full destination URL and any transparency data'), which clearly separates it from bulk search tools and narrower sibling tools like view_ad_creative or get_eu_transparency.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly says 'Use this after search_ads when one ad is worth studying properly', giving clear when-to-use context and naming the relevant sibling workflow. It does not enumerate when-not-to-use cases or alternative tools for narrower lookups, but the placement and rationale are clear enough.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_eu_transparencyEU spend and reachA
Read-onlyIdempotent

Spend, impressions, reach and demographic breakdown from Meta's official Ad Library API. Covers ads delivered in the EU and political or issue ads anywhere. Returns nothing for an ordinary US commercial ad because that data is not published, which is the correct answer rather than an error. Needs META_ADS_ARCHIVE_TOKEN, which is free.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum ads to return.
queryNoBrand or advertiser name to look up.
countryNoTwo-letter EU country code, e.g. DE, FR, IE. Default DE.
page_idsNoComma-separated Page IDs, as a more precise alternative to query.

Output Schema

ParametersJSON Schema
NameRequiredDescription
adsYes
nextNo
noteNo
countYes
countryYes
fields_returnedYes

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare read-only, idempotent, and non-destructive, but the description adds meaningful extras: the META_ADS_ARCHIVE_TOKEN requirement and the critical non-error empty-result behavior for unpublished data. This goes beyond what annotations and schema provide.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences with no filler: core function first, scope second, and the important empty-result and auth notes last. Every sentence carries necessary information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Output schema exists, annotations cover safety, and the description covers purpose, scope, an important edge-case behavior, and the required token. An agent has enough to select and invoke this tool correctly without hidden surprises.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

All four parameters are already fully described in the schema with meaning for limit, query, country, and page_ids. The tool description does not add significant parameter-level semantics beyond that, so the baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies the resource (Meta's official Ad Library API) and the data returned (spend, impressions, reach, demographic breakdown). It also states the scope (EU-delivered ads and political or issue ads anywhere), which distinguishes it from general ad lookup tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It provides clear context for when to use it: EU ads and political/issue ads anywhere, and explicitly says an ordinary US commercial ad will return nothing rather than an error. It doesn't name a specific sibling alternative, but the exclusion is enough to prevent misuse.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_advertisersFind advertisersA
Read-onlyIdempotent

Resolve a brand name to the advertiser Pages actually running ads for it, ranked by how many ads each is running. Use this first when you know the brand but not its Page ID, then pass that ID to search_ads to get everything they run.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYesBrand or company name to look up.
countryNoTwo-letter country code. Default US.

Output Schema

ParametersJSON Schema
NameRequiredDescription
noteNo
countYes
advertisersYes

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and non-destructive behavior. The description adds meaningful behavioral context: it returns actual advertiser Pages and ranks them by ad count, which sets expectations beyond the annotations alone.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tightly written sentences cover purpose, ranking behavior, usage context, and the relationship to search_ads. There is no filler or redundant restating of the title or schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With a rich set of annotations, full schema coverage, and an output schema present, the description supplies the missing strategic context: when to use it and what to do with the result. Nothing critical is left unexplained for correct tool selection and invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents both 'query' and 'country'. The description reinforces that 'query' is a brand name but does not add any new parameter-level detail, so the baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb, 'Resolve', and names the resource (advertiser Pages) and the key output property (ranked by number of ads running). It clearly distinguishes this tool from siblings like search_ads and get_ad by focusing on brand-to-Page-ID resolution.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly states when to use this tool first (when you know the brand but not the Page ID) and gives the follow-up path (pass that ID to search_ads). This provides clear routing relative to sibling tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_adsSearch the Ad LibraryA
Read-onlyIdempotent

Search Meta's public Ad Library by keyword, or list every ad from one advertiser by passing page_id. Returns advertiser, copy, creative count, destination domain, call to action, platforms and how long each ad has run. Works for ordinary commercial advertisers in any country. Spend and reach are null outside the EU, which is correct rather than a failure: that data is only published for EU and political ads.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoHow many ads to return. On the browser backend a higher number costs more time.
queryNoKeyword: a brand, product or angle. Optional if page_id is given.
ad_typeNoAd category. 'all' covers ordinary commercial ads and is what you usually want.
countryNoTwo-letter country the ads were delivered in, e.g. US, GB, DE. Default US.
page_idNoAdvertiser Page ID. Returns that Page's ads instead of a keyword search. Use list_advertisers first if you only know the brand name.
media_typeNoFilter by creative type. 'meme' is Meta's name for an image with text on it.
active_statusNoOnly ads running now, only stopped ads, or both. Default active.

Output Schema

ParametersJSON Schema
NameRequiredDescription
adsYes
urlNo
noteNo
countYes
cursorNo
backendYes
has_moreYes
total_availableNoMeta's own count of matching ads.

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already signal a safe, read-only, idempotent operation, so the description adds behavioral value by disclosing that spend and reach are null outside the EU and that this is expected rather than an error. It also clarifies the return scope (advertiser, copy, creative count, etc.), which helps the agent interpret results correctly.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, each earning its place: the action, the return content, and a critical data caveat. The most important behavior is front-loaded, and the paragraph stays compact despite covering several nuances.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has 7 well-documented optional parameters, an output schema, and safe read-only annotations, the description is complete enough. It covers selection-relevant scope, the null-data gotcha, and the returned fields, leaving only details that are already in the schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and each parameter already has a rich description, including the query/page_id trade-off and defaults. The description frames keyword vs. page_id as two modes but adds little meaning beyond what the schema already states, so the baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Search') and a clear resource ('Meta's public Ad Library'), and distinguishes two invocation modes: keyword search or listing all ads for a page_id. The phrase 'list every ad from one advertiser by passing page_id' also differentiates it from sibling tools that fetch a single ad or advertiser list.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description sets useful context: it works for ordinary commercial advertisers in any country, and it preempts the EU spend/reach caveat. The schema adds explicit routing guidance ('Use list_advertisers first if you only know the brand name'), but the description itself does not spell out when to prefer siblings like get_eu_transparency or get_ad. This is clear context with room for firmer exclusion guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

transcribe_adTranscribe a video adA
Read-onlyIdempotent

Speech to text for a video ad, so its spoken script becomes readable. Only the scrapecreators backend can do this. On any other backend it explains that rather than failing silently.

ParametersJSON Schema
NameRequiredDescriptionDefault
library_idYesThe Ad Library ID of a video ad.

Output Schema

ParametersJSON Schema
NameRequiredDescription
noteNo
backendNo
availableYes
library_idNo
transcriptNo

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover read-only, idempotent, and non-destructive behavior. The description adds a valuable behavioral detail beyond those annotations: on unsupported backends it explains the limitation rather than failing silently. This is meaningful runtime behavior that an agent could not infer from the schema or annotations alone.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loaded, stating the core purpose first and then adding the important backend caveat. Every sentence earns its place with no wasted words or redundant restatement of the title.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter tool with rich annotations and an output schema, the description covers the essential context: what it does, what input it needs, and a key behavioral constraint. The only minor gap is that it does not mention any prerequisites for identifying video ads, but this is likely supplied by the library_id semantics and sibling tool context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already fully describes the single parameter, library_id, with 100% coverage, so the baseline is 3. The description adds no new meaning about the parameter beyond what the schema provides, but it also does not need to given the high schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the function: converting a video ad's spoken script into readable text. It identifies the resource (video ad) and the specific operation (speech-to-text transcription), but it does not explicitly differentiate itself from siblings like view_ad_creative or get_ad beyond the transcription action itself.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides important backend-specific context: only the scrapecreators backend can perform transcription. However, it does not explain when an agent should choose this tool over siblings or what conditions make transcription appropriate, so usage guidance is only implicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

view_ad_creativeLook at an ad's imagesA
Read-onlyIdempotent

Return the actual images from one ad so you can see them, rather than only reading its copy. Use this when the question is about what an ad looks like: the visual hook, the layout, the product shot, how the text sits on the image, or what several ads have in common visually. A carousel returns each card in order. Video ads have no still to show and report that instead. Needs no API key.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoHow many images to return, up to 6. Carousels have several.
countryNoTwo-letter country code. Default US.
library_idYesThe Ad Library ID, from search_ads.

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark it read-only, idempotent, and non-destructive, and the description adds meaningful runtime behavior: carousels return each card in order, video ads report that they have no still, and the tool needs no API key. These disclosures go well beyond the annotations and help an agent predict outcomes.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core purpose, then moves to use cases, edge behavior, and authentication. Every sentence contributes either usage guidance or behavior; there is no repetition or filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only image-retrieval tool with no output schema, the description covers what is returned, the carousel order, the video fallback, input provenance via schema, and authentication. An agent has enough to decide when to call it and what to expect.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents limit, country, and library_id clearly. The description adds carousel ordering and video behavior but no extra parameter-specific meaning beyond what the schema provides, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb and resource: 'Return the actual images from one ad so you can see them.' It also distinguishes the tool from copy-focused siblings by framing it against 'rather than only reading its copy,' and grounds it in visual questions like 'visual hook, layout, product shot.'

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly says when to use it: 'when the question is about what an ad looks like,' with concrete examples. It also states when not to expect results ('Video ads have no still to show') and that no API key is needed. However, it does not name sibling tools like get_ad or transcribe_ad as alternatives, only contrasting with 'reading its copy' indirectly.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

TDQS

A4.2/5.0
Disambiguation5/5

Each tool targets a clearly distinct task: search, single-ad fetch, advertiser resolution, visual creative inspection, video transcription, change detection, EU transparency, URL generation, and backend status. The descriptions proactively disambiguate edge cases, such as the difference between get_ad (full record) and view_ad_creative (actual images), and EU vs non-EU spend data availability.

Naming Consistency4/5

Seven of the nine tools follow a consistent verb_noun pattern (get_ad, search_ads, list_advertisers, transcribe_ad, view_ad_creative, diff_advertiser, get_eu_transparency), with a sensible singular/plural distinction. Two tools — ad_library_url and backend_status — are noun phrases rather than verb_noun, which is a minor but noticeable deviation.

Tool Count5/5

Nine tools is well within the ideal scope for a read-only ad-research API. Each tool serves a distinct step in the workflow — discover, search, inspect, transcribe, compare, verify — with no redundancy or bloat.

Completeness4/5

The core ad-research workflow is thoroughly covered: brand-to-Page resolution, keyword and advertiser search, single-ad retrieval, creative inspection, video transscription, temporal diffing, and EU transparency. Minor gaps include no political-ad-specific search and no cross-advertiser comparison, but the primary workflows can be completed without dead ends.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables AI assistants to manage Facebook and Instagram advertising data through the Meta Marketing API. It supports full campaign lifecycle management, performance analytics, audience targeting, and creative optimization.
    1,659
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables management and analysis of Meta (Facebook/Instagram) ads through natural language conversations, with 30 tools for reading and writing ad data.
    MIT
  • F
    license
    Not graded
    quality
    D
    maintenance
    Provides read-only access to Meta Ads API, enabling campaign management, creative analysis, targeting research, and performance analytics via 39 tools.
  • A
    license
    A
    quality
    B
    maintenance
    Enables AI assistants to manage Meta Ads (Facebook, Instagram) end-to-end through natural conversation, including launching campaigns, uploading creatives, updating budgets, and analyzing performance.
    42
    Business Source 1.1

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/navidmoazzez/facebook-ad-library-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server