search_experiment_recipes
Find proven CAMPAIGN CONFIGURATIONS to build from — combinations of channel, ad format, audience type, bid strategy and budget band that have run together successfully across mu…
Read campaigns
Returns data. Calling it changes nothing, so it is safe in an unattended loop.
What it does
Find proven CAMPAIGN CONFIGURATIONS to build from — combinations of
channel, ad format, audience type, bid strategy and budget band that have
run together successfully across multiple advertisers.
USE THIS WHEN you are composing a campaign and need to decide HOW to
build it: which channel and format pairing, what kind of audience, which
bid strategy, roughly what daily budget. It answers "what should I
build", not "how is my account performing".
DO NOT USE IT for cohort performance questions ("what's the median CPL
for my industry", "how do we compare to similar companies") — that is
`query_metadata_analytics_benchmarks`. Do not use it for the caller's own
campaign history — that is `query_metadata_analytics_account`.
Every returned recipe is backed by at least five distinct advertisers.
Recipes below that floor are suppressed rather than returned, so an empty
result means "no configuration is proven enough to recommend here", NOT
"no data exists". Say so plainly rather than substituting a guess.Arguments
| Argument | Type | Notes | |
|---|---|---|---|
query |
string | required | Natural-language description of the campaign you are building, e.g. "lead gen campaign targeting IT decision makers", "top of funnel awareness push for a new product launch". |
channel |
any | Optional exact filter — "linkedin", "facebook", "google_ads", "instagram". Omit to search every channel. | |
ad_format |
any | Optional exact filter — "image", "video", "document", "carousel", "text". | |
audience_type |
any | Optional exact filter, e.g. "firmographic_include", "linkedin_retargeting", "native_targeting_dynamic". | |
bid_strategy |
any | Optional exact filter, e.g. "auto_bid", "manual_bid", "metadata_bid_agent". | |
num_results |
integer | How many recipes to return (default 5). |
Request
curl
curl -s -X POST https://mcp-server.metadata.io/mcp \
-H "Authorization: $METADATA_PAT" \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-H "MCP-Protocol-Version: 2025-11-25" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"search_experiment_recipes","arguments":{"query":"<query>"}}}'
Response
Recorded with these arguments. Enum values are the first the tool's own schema
declares; ids were fetched live from a list_ call immediately before.
arguments used
{
"query": "linkedin"
}
Real, from the production server, in 2861 ms. The full response was 4,535 bytes; this is the first part of it. Values that identify a customer or disclose money are replaced with typed placeholders; keys, types and nesting are exactly as returned.
recorded response
{
"status": "ok",
"tool": "search_experiment_recipes",
"row_count": 5,
"rows": [
[
"[rows redacted]",
"linkedin",
"image",
"native_targeting_dynamic",
"small",
"manual_bid",
"under_100",
"[rows redacted]",
"ent",
"[number redacted]",
"[number redacted]",
"HIGH",
5,
54
],
[
"[rows redacted]",
"linkedin",
"image",
"linkedin_retargeting",
"medium",
"manual_bid",
"under_100",
"unknown",
"mid",
"[number redacted]",
"[number redacted]",
null,
5,
26
],
[
"[rows redacted]",
"linkedin",
"image",
"linkedin_retargeting",
"small",
"manual_bid",
"under_100",
"unknown",
"mid",
"[number redacted]",
"[number redacted]",
null,
5,
"[number redacted]"
],
[
"[rows redacted]",
"linkedin",
"image",
"unknown",
"unknown",
"manual_bid",
"under_100",
"unknown",
"unknown",
"[number redacted]",
"[number redacted]",
null,
10,
"[number redacted]"
],
[
"[rows redacted]",
"linkedin",
"image",
"unknown",
"unknown",
"manual_bid",
"under_100",
"[rows redacted]",
"mid",
"[number redacted]",
"[number redacted]",
"HIGH",
5,
"[number redacted]"
]
],
"columns": [
"recipe_id",
"channel",
"ad_format",
"audience_type",
"audience_size_band",
"bid_strategy",
"budget_band",
"industry",
"employee_size_band",
"avg_cpl",
"avg_mql_rate",
"benchmark_confidence_tier",
"tenant_count",
"experiment_count"
],
"recipes": [
{
"recipe_id": "[recipe_id redacted]",
"channel": "linkedin",
"ad_format": "image",
"audience_type": "native_targeting_dynamic",
"audience_size_band": "small",
"bid_strategy": "manual_bid",
"budget_band": "under_100",
"industry": "[industry redacted]",
"employee_size_band": "ent",
"avg_cpl": "[number redacted]",
"avg_mql_rate": "[number redacted]",
"benchmark_confidence_tier": "HIGH",
"tenant_count": 5,
"experiment_count": 54,
"score": "[number redacted]"
},
{
"recipe_id": "[recipe_id redacted]",
"channel": "linkedin",
"ad_format": "image",
"audience_type": "linkedin_retargeting",
"audience_size_band": "medium",
"bid_strategy": "manual_bid",
"budget_band": "under_100",
"industry": "unknown",
"employee_size_band": "mid",
"avg_cpl": "[number redacted]",
"avg_mql_rate": "[number redacted]",
"benchmark_confidence_tier": null,
"tenant_count": 5,
"experiment_count": 26,
"score": "[number redacted]"
},
{
"recipe_id": "[recipe_id redacted]",
"channel": "linkedin",
"ad_format": "image",
"audience_type": "linkedin_retargeting",
"audience_size_band": "small",
"bid_strategy": "manual_bid",
"budget_band": "under_100",
"industry": "unknown",
"employee_size_band": "mid",
"avg_cpl": "[number redacted]",
"avg_mql_rate": "[number redacted]",
"benchmark_confidence_tier": null,
"tenant_count": 5,
"experiment_count": "[number redacted]",
"score": "[number redacted]"
},
{
"recipe_id": "[recipe_id redacted]",
"channel": "linkedin",
"ad_format": "image",
"audience_type": "unknown",
"audience_size_band": "unknown",
"bid_strategy": "manual_bid",
"budget_band": "under_100",
"industry": "unknown",
"employee_size_band": "unknown",
"avg_cpl": "[number redacted]",
"avg_mql_rate": "[number redacted]",
"benchmark_confidence_tier": null,
"tenant_count": 10,
"experiment_count": "[number redacted]",
"score": "[number redacted]"
},
{
"recipe_id": "[recipe_id redacted]",
"channel": "linkedin",
"ad_format": "image",
"audience_type": "unknown",
"audience_size_band": "unknown",
"bid_strategy": "manual_bid",
"budget_band": "under_100",
"industry": "[industry redacted]",
"employee_size_band": "mid",
"avg_cpl": "[number redacted]",
"avg_mql_rate": "[number redacted]",
"benchmark_confidence_tier": "HIGH"
… truncated
Related
Other campaigns tools: