creative-tagger-mcp
This server is an MCP interface to Creative Tagger's structured creative intelligence platform, enabling AI agents to analyze, store, and reason about ad creatives across 21 taxonomy dimensions. Key capabilities include:
Analyze Ad Creatives: Classify any ad format (video, image, carousel, landing page, email) across 21 dimensions — hook type, messaging angle, visual format, emotion, CTA, talent, audio, offer, and more.
Read Taxonomy: Access the full controlled vocabulary for all dimensions, including brand-specific extensions.
Manage Workspaces: List available brand workspaces and scope all operations to a specific brand.
Creative Library: Browse, search, filter, and retrieve saved analyses; identify cross-library patterns, concentration, and diversification gaps.
Brand Context: Set and retrieve long-term brand memory — voice, target audience, top performers, and anti-patterns — to inform strategy tools.
Brand-Custom Taxonomy: Add custom values, aliases, and entities (founders, products, offers, segments) per brand; auto-generate a full brand taxonomy from existing analyses.
Naming Templates: Define, preview, save, and apply naming convention templates using standard and brand-custom variables.
Meta Performance Integration: Sync and read Meta ad performance data (read-only); get summaries, tag-level performance, and fatigue-detected time series curves.
Demographics: Get age × gender performance with efficiency bands; export agent-ready audience context.
Strategist Tools: Ask the Creative Strategist open-ended questions grounded in your library and brand context; get gap analyses, diversification briefs, and strategy reports.
Brand Brain Learnings: Read, save, and export auto-written account learnings (conclusions, watchouts, audience signals, gaps) as agent-ready context.
Reports: Access prebuilt reports (best hooks, landing pages, messaging angles, etc.) and create, save, run, or delete custom reports mixing taxonomy dimensions and performance metrics (ROAS, CTR, CPA, spend).
Creative Strategy Matrix: Observational decision queue with states for next tests, winners, learners, fatigue, and gaps; supports creative × audience mixed reads.
Competitive Intelligence: Scan a competitor's Meta Ad Library, classify their ads, and get strategy breakdowns (top hooks, CTAs, emotions, estimated spend); retrieve saved scan history.
Observational Pre-flight: Compare a creative's attributes against historical tag-level performance to form controlled-test hypotheses — not forecasts or causal estimates.
Integrates with Meta's advertising platform to sync read-only performance memory (spend, impressions, video metrics, etc.), scan competitor ads from the Meta Ad Library, and import Meta ad performance data via MCP, enabling AI agents to analyze winners, demographic opportunities, and taxonomy gaps.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@creative-tagger-mcpanalyze the ad creative at ./new_ad.mp4 for Acme brand"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Creative Tagger MCP Server
The MCP layer for Creative Tagger — plug structured creative intelligence into any AI agent (Claude Desktop, Cursor, Windsurf, ChatGPT with MCP, etc.).
Release note (2026-08-30): this source tree and its packaged metadata are
version 0.2.5. The hosted and stdio surfaces are separate clients of the same
API and may expose different tool counts. The companion API must be deployed
and live before this stdio release is tagged and published.
Your AI of choice gets:
Taxonomy — 21 standardized dimensions for any ad creative (video, image, carousel, landing page, long video, email)
Memory — every analysis is saved to the user's library; the agent can search it, recall patterns, and pull individual results
Brand-custom taxonomy — extend the standard taxonomy with each brand's founders, products, segments, aliases, and naming variables
Meta performance memory — read-only Meta sync/status/tools so agents can reason over objective-aware results, unproven tags, observational demographic delivery, and taxonomy gaps
Brain learnings — auto-written account learnings in plain language, with agent-ready context for the next brief
Strategist — recommendation + gap-analysis tools that reason over the user's library plus saved brand context (voice, audience, anti-patterns)
Competitive intelligence — scan a competitor's Meta Ad Library through Creative Tagger's native Market access
Quick Start
For clients that support remote MCP, connect the current hosted server:
URL: https://api.creativetagger.ai/mcp/
Authorization: Bearer ct_your_keyThe repository package is the stdio path for clients that require a local command:
# Install this release after it appears on PyPI
pip install creative-tagger-mcp==0.2.5
# Run against production (default)
CREATIVE_TAGGER_API_KEY=ct_your_key creative-tagger-mcp
# Or against a local API
CREATIVE_TAGGER_URL=http://localhost:8000 \
CREATIVE_TAGGER_API_KEY=ct_your_key \
creative-tagger-mcpGet an API key at app.creativetagger.ai.
Related MCP server: muze-mcp
Release Verification
Before publishing a new MCP version, build the artifacts and smoke-test the wheel that will be uploaded to PyPI:
python -m build
python scripts/smoke_release.py
python -m twine check \
dist/creative_tagger_mcp-0.2.5-py3-none-any.whl \
dist/creative_tagger_mcp-0.2.5.tar.gzThe smoke test installs the wheel into a temporary virtualenv, verifies the
creative-tagger-mcp console entry point, checks the package version, and
confirms the V1 tool surface is present from the installed artifact.
Publishing to PyPI
The release workflow publishes from GitHub Actions after it builds the package,
runs scripts/smoke_release.py, and passes twine check.
After the 0.2.5 review and API-dependency gates pass, tag the exact current
main commit:
git tag -a v0.2.5 -m "Creative Tagger MCP v0.2.5"
git push origin refs/tags/v0.2.5The workflow supports PyPI trusted publishing with GitHub OIDC. Configure the
PyPI publisher for repository stephenlavender/creative-tagger-mcp, workflow
.github/workflows/publish.yml, environment pypi, then push the version tag.
Exact PyPI trusted publisher values:
PyPI project:
creative-tagger-mcpPublisher: GitHub
Owner:
stephenlavenderRepository:
creative-tagger-mcpWorkflow filename:
publish.ymlEnvironment name:
pypi
If the workflow fails with invalid-publisher, PyPI does not have a trusted
publisher matching those claims yet. Add the publisher above, then rerun the
failed workflow or push the version tag again.
Fallback path: add a GitHub Actions repository secret named PYPI_API_TOKEN
containing a PyPI project token. The same workflow will use that token when it
is present.
Local fallback:
python -m build
python scripts/smoke_release.py
python -m twine check \
dist/creative_tagger_mcp-0.2.5-py3-none-any.whl \
dist/creative_tagger_mcp-0.2.5.tar.gz
python -m twine upload \
dist/creative_tagger_mcp-0.2.5-py3-none-any.whl \
dist/creative_tagger_mcp-0.2.5.tar.gzAlways select the exact release artifacts for a local upload. A reused checkout
may contain older valid distributions in dist/; never publish with
twine upload dist/*.
Add to Claude Desktop
~/Library/Application Support/Claude/claude_desktop_config.json:
{
"mcpServers": {
"creative-tagger": {
"command": "creative-tagger-mcp",
"env": {
"CREATIVE_TAGGER_URL": "https://api.creativetagger.ai",
"CREATIVE_TAGGER_API_KEY": "ct_your_key_here"
}
}
}
}Restart Claude Desktop. The tools appear in the MCP picker.
Tools
analyze_creative
Analyze any ad creative and get structured classification across 21 dimensions.
{ "file_path": "./ad.mp4", "brand_name": "Brand" }
{ "url": "https://example.com/landing-page", "brand_name": "Brand" }
{ "html_content": "<html>...</html>", "brand_name": "Brand" }Results auto-save to the user's library.
get_taxonomy
Read taxonomy v2's versioned vocabulary or one dimension. The package returns
15 controlled dimensions, one derived/open aspect_ratio dimension, and two
intentionally dynamic, brand-specific dimensions. Aspect ratio includes common
canonical examples but sets allow_other_values: true: the API may derive any
reduced WxH ratio (such as 3x2 or 300x157) or preserve a W:H ratio for
long video. The package does not infer enums from OpenAPI: several valid
classification fields are strings in that schema, so schema discovery would
silently return an incomplete taxonomy.
{} # all controlled + derived/open + dynamic dimensions
{ "dimension": "hook_type" } # one dimension
{ "dimension": "aspect_ratio" } # examples; other derived values remain validTaxonomy v2 splits three dimensions the old model mixed together: media type
(the auto-detected format — static image, video, carousel; never AI-classified),
asset type (production class: UGC, Studio, High Production, …), and
visual format (execution style: Talking Head, Demo, Testimonial, …).
Static Image and Carousel are media types and are no longer valid
visual_format values. messaging_angle is the canonical angle dimension.
list_workspaces
List the authenticated user's available workspaces. Start every connected
account workflow here, select one returned brand_name, and pass that exact
value to every library, Meta status, report, and strategist call. Do not blend
observations across workspaces unless the user explicitly requests a comparison.
{}list_library
Browse saved analyses. Search by filename or hook, filter by format, messaging
angle, emotion, CTA, talent, offer, audio type, or seasonality, and sort by
joined performance. limit is clamped to 1–100 and offset to zero or higher
before the request leaves the local stdio server.
{
"brand_name": "Acme",
"limit": 50,
"search": "BFCM",
"format": "video",
"angle": "Social Proof",
"talent": "Founder",
"sort": "roas"
}get_library_patterns
Cross-library pattern insights — concentration and diversity per dimension, plus rule-based diversification flags.
Pass the exact workspace brand_name returned by list_workspaces.
get_analysis
Pull the full 21-dimension result for one library item.
{ "brand_name": "Acme", "analysis_id": 42 }recommend ⭐
Ask the Creative Strategist a question grounded in the user's library + brand context.
{ "brand_name": "Acme", "question": "What kind of UGC should I test for Q4?" }Returns concrete recommendations using taxonomy values + library observations.
analyze_gaps ⭐
Identify concentration risk in the library and propose next creatives that diversify it.
{ "brand_name": "Acme" }get_brand_context / set_brand_context
Long-term memory per brand. Voice, target audience, top performers, anti-patterns, notes.
set_brand_context is a partial update: omitted fields stay unchanged, while an
explicit empty string or list clears only that field.
set_brand_context: {
"brand_name": "Acme",
"voice": "clinical, precise, no personality",
"target_audience": "new moms 28-40, postpartum recovery",
"top_performers": ["UGC TalkHead", "BeforeAfter visuals"],
"anti_patterns": ["loud humor", "celebrity endorsement"],
"notes": "Q4 focus: gift-shoppers + retention"
}Strategist tools auto-include this context.
get_brand_taxonomy / set_brand_taxonomy_value / delete_brand_taxonomy_value / set_brand_entity / delete_brand_entity
Customize the standard taxonomy for one brand without breaking cross-brand reporting.
set_brand_taxonomy_value: {
"brand_name": "Acme",
"dimension": "talent",
"value": "Stephen Lavender / Founder",
"aliases": ["Stephen", "founder"],
"description": "Use when Stephen appears or is referenced"
}
set_brand_entity: {
"brand_name": "Acme",
"entity_type": "product",
"name": "Creative Tagger",
"aliases": ["CT", "tagger"]
}
delete_brand_taxonomy_value: {
"brand_name": "Acme",
"dimension": "talent",
"value": "Old Founder Label"
}
delete_brand_entity: {
"brand_name": "Acme",
"entity_type": "product",
"name": "Retired Product"
}get_naming_variables / list_naming_templates / save_naming_template
Manage saved naming templates from your agent. Templates support standard taxonomy
fields plus brand-custom variables like founder, product, offer, customer_segment,
icp, and campaign_label. Saved templates auto-apply to future analyze_creative
results.
save_naming_template: {
"name": "default",
"template": "{brand}_{founder}_{customer_segment}_{hook_type}_{cta}_{ratio}_{version}"
}Use preview_naming_template to test a template before saving, and
delete_naming_template to remove one.
get_meta_status / sync_meta_performance
Check or trigger read-only Meta performance memory. No campaign creation, no budget edits.
Creative Tagger must have an approved native Meta OAuth connection before
customer accounts can sync Meta performance.
Pass attribution_windows when the buyer uses a non-default Meta lookback
window and Creative Tagger should match Ads Manager exactly.
{
"brand_name": "Acme",
"date_preset": "last_30d",
"attribution_windows": ["7d_click", "1d_view"]
}get_creative_strategy_report
Pull the same strategy matrix shown in Creative Tagger Reports. Defaults to
visual formats by messaging angles, with states for next tests, live learning,
winners, losers, fatigue, and gaps. Returns the decision queue and a bounded
matrix slice for agent strategy work. Detailed responses also include an
agent_context payload that can be handed directly to an LLM.
Supports creative-diagnostics metrics such as CTR, thumbstop, hook, hold, video
milestone rates, CPA, CVR, ROAS, revenue, spend, and funnel score. For
audience-mode reads, switch the axes to demographic dimensions such as
demographic_age and demographic_gender, or use the demographic-read or
audience-signals templates. Other built-in templates include
creative-winners, fatigue-watch, coverage-gaps, hook-performance, and
persona-read. Creative axes follow taxonomy v2: visual_format (execution
style), asset_type (production class), and media_type (auto-detected
format) are three separate dimensions, with ad_type kept as a deprecated
alias for visual_format. Demographics are account-level only, with no
per-ad key: pairing a creative tag axis with a demographic axis is
structurally not_applicable and returns an explicit cross_contract
instead of a populated grid. Audience-mode matrices need BOTH axes to be
demographic instead — e.g. demographic_age by demographic_gender (the
demographic-read template), or demographic_segment by
demographic_signal (the audience-signals template). Add
fatigue_minimum_calendar_days when fatigue should only count after a long
enough live window, not just after a few close-together synced points. For
fatigue-aware reads, pass the same embedded watch controls the app/API support:
watch_group_by, watch_metric, watch_signal_focus,
watch_trajectory_focus, watch_coverage_focus, watch_minimum_points,
watch_minimum_calendar_days, watch_maximum_gap_days, and watch_limit.
The decision-queue limit is clamped to 1–25, while watch_limit is clamped
to 1–10, before the API request.
Responses default to response_format: "concise" with at most 24 matrix cells
to keep the result bounded. Set response_format: "detailed" explicitly for
the richer report fields, including agent_context. Both formats respect
max_cells; raise it (up to 200) when a larger matrix slice is needed.
{
"brand_name": "Acme",
"report_template": "next-tests",
"rows": "visual_format",
"columns": "messaging_angle",
"metrics": "spend,ctr,thumbstop_rate,hook_rate,hold_rate,cpa",
"response_format": "concise",
"max_cells": 24
}{
"brand_name": "Acme",
"report_template": "demographic-read",
"rows": "demographic_age",
"columns": "demographic_gender",
"metrics": "spend,roas,ctr,cpa,conversions,revenue",
"roas_target": 2.5,
"fatigue_minimum_calendar_days": 7,
"watch_group_by": "hook_type",
"watch_metric": "cpa",
"watch_signal_focus": "fatigued",
"watch_trajectory_focus": "worsening",
"watch_coverage_focus": "windowed_history",
"watch_minimum_points": 2,
"watch_minimum_calendar_days": 7,
"watch_maximum_gap_days": 7,
"watch_limit": 5,
"start_date": "2026-05-01",
"end_date": "2026-05-31"
}{
"brand_name": "Acme",
"report_template": "audience-signals",
"rows": "demographic_signal",
"columns": "demographic_segment",
"metrics": "spend,roas,ctr,cpa,conversions,revenue",
"date_preset": "last_30_days"
}{
"brand_name": "Acme",
"report_template": "hook-performance",
"rows": "hook",
"columns": "ad_type",
"metrics": "spend,hook_rate,hold_rate,roas,ctr,cpa",
"fatigue_minimum_calendar_days": 7,
"date_preset": "last_30_days"
}get_brain_learnings
Read the auto-written Brand Brain learnings generated from performance memory,
strategy cells, taxonomy winners/watchouts, and audience signals. Returns a
hero learning, concise stories, and an agent_context payload for the next
brief or strategist prompt. Use kinds when an agent only wants a focused slice
such as conclusion, working,audience, or watch. Add
conclusion_statuses to narrow conclusion stories to winner, fatigued, or
loser outcomes only, and conclusion_recency_days to keep only the most
recent conclusion window. Use watch_group_by, watch_metric,
watch_signal_focus, watch_trajectory_focus, watch_coverage_focus,
watch_minimum_points, watch_minimum_calendar_days, watch_sources, and
fatigue_decay_threshold when the watchouts should be written from a different
fatigue lens such as fatigued-only CPA by ad type, weak taxonomy patterns only,
CTR by hook, or stable ROAS by demographic_segment.
When kinds includes audience, audience_signal_focus accepts the canonical
values all, higher_observed_efficiency, or
lower_observed_efficiency. The same vocabulary applies to get, save, and
export operations. Across all three operations, story limit is clamped to
1–12 and audience_limit is clamped to 1–10 before the API request.
{
"brand_name": "Acme",
"date_preset": "last_30_days",
"minimum_spend": 500,
"learning_spend": 1500,
"kinds": "conclusion,watch,audience",
"audience_signal_focus": "higher_observed_efficiency",
"conclusion_statuses": "winner,fatigued",
"conclusion_recency_days": 21,
"watch_group_by": "ad_type",
"watch_metric": "cpa",
"watch_signal_focus": "fatigued",
"watch_trajectory_focus": "worsening",
"watch_coverage_focus": "windowed_history",
"watch_minimum_points": 3,
"watch_minimum_calendar_days": 7,
"watch_sources": "timeseries,patterns",
"fatigue_decay_threshold": 0.25,
"limit": 6
}save_brain_learnings
Persist the current auto-written Brand Brain learnings into saved Brain notes
for a brand, using the same filtering controls as get_brain_learnings. Use
this after reviewing a conclusion/working/watch/audience/gap slice when the
user wants the best current learnings saved back into reusable strategist context.
{
"brand_name": "Acme",
"date_preset": "last_30_days",
"minimum_spend": 500,
"learning_spend": 1500,
"kinds": "conclusion,watch,audience",
"audience_signal_focus": "lower_observed_efficiency",
"conclusion_statuses": "winner,fatigued",
"conclusion_recency_days": 21,
"watch_group_by": "ad_type",
"watch_metric": "cpa",
"watch_signal_focus": "fatigued",
"watch_trajectory_focus": "worsening",
"watch_coverage_focus": "windowed_history",
"watch_minimum_points": 3,
"watch_minimum_calendar_days": 7,
"watch_sources": "timeseries,patterns",
"include_gaps_in_notes": false,
"limit": 6
}export_brain_learnings_context
Export the bounded agent_context from get_brain_learnings, including its
filtered learning stories and follow-up Strategy/time-series queries. It uses
the same controls and canonical audience_signal_focus values as the get and
save tools.
{
"brand_name": "Acme",
"kinds": "audience",
"audience_signal_focus": "higher_observed_efficiency",
"limit": 6
}get_performance_timeseries
Read saved performance curves for fatigue checks without opening the dashboard.
Returns dated points plus a fatigue signal for each grouped series, using the
same decay threshold as Creative Tagger's strategy matrix. Group by creative,
campaign, landing page, analysis_id, or audience slices like
demographic_age, demographic_gender, demographic_segment, and
demographic_signal, and inspect metrics like ROAS, CPA, CTR, CPM, thumbstop,
completion rate, or funnel score. Use signal_focus when an agent only wants
the current fatigue watchlist or only stable controls, and trajectory_focus
when the agent wants only worsening, improving, flat, or insufficient-data
series. Use coverage_focus to isolate call-ready, gappy, short-window, or
windowed-history curves. Add minimum_calendar_days when fatigue should only
count after a trend has been live long enough, not just after a few
close-together points. Both this tool and its context export clamp limit to
1–10 grouped series locally.
{
"brand_name": "Acme",
"date_preset": "last_30d",
"group_by": "ad_name",
"metric": "roas",
"signal_focus": "fatigued",
"trajectory_focus": "worsening",
"coverage_focus": "call_ready",
"minimum_spend": 500,
"minimum_points": 3,
"minimum_calendar_days": 7,
"fatigue_decay_threshold": 0.18,
"limit": 5
}Use date_preset for a standard lookback window, or pass explicit
start_date / end_date to override it.
export_performance_timeseries_context
Return the reusable agent_context payload from performance time series. Use
this when another agent needs the fatigue decision queue, summary text, action
mix, top groups, and prompt-ready export without carrying the full chart payload.
It accepts the same inputs as get_performance_timeseries.
{
"brand_name": "Acme",
"date_preset": "last_30d",
"group_by": "ad_name",
"metric": "roas",
"signal_focus": "fatigued",
"trajectory_focus": "worsening",
"coverage_focus": "call_ready",
"minimum_spend": 500,
"minimum_points": 3,
"minimum_calendar_days": 7,
"fatigue_decay_threshold": 0.18,
"limit": 5
}Internal migration/backfill tools are hidden from the default published MCP
surface. They require CREATIVE_TAGGER_INTERNAL_BACKFILL_TOOLS=1 and should not
be used in customer flows or to avoid Meta approval.
get_meta_performance_summary
Read saved Meta performance memory without triggering a sync.
{ "brand_name": "Acme" }Returns account totals plus performance by standard taxonomy and brand-custom taxonomy.
Each aggregate can include funnel_score and a funnel explanation object for
capture -> hold -> bring-to-site -> convert diagnosis.
get_taxonomy_performance
Find historical tag associations, under-observed tags, and standard taxonomy values that have not been tested. Rows include ROAS, CTR, thumbstop, and funnel scores when performance memory exists. These are observational comparisons; validate a promising tag with a one-variable controlled test.
{ "brand_name": "Acme", "dimension": "hook_type", "spend_threshold": 500 }get_prebuilt_reports
Return ready-made Motion-style reports: best hooks, landing pages, messaging angles,
audiences, offers, CTAs, visual formats, and brand-custom values. Add
start_date / end_date when the report should only cover a specific synced
window. limit is clamped to 1–50 rows per report before the API request.
{ "brand_name": "Acme", "report_id": "best_hooks", "limit": 8 }
{ "brand_name": "Acme", "report_id": "best_angles", "start_date": "2026-05-01", "end_date": "2026-05-31", "limit": 8 }create_custom_report
Build a custom report from selected standard or brand taxonomy dimensions and
rank the actual matched dimension combinations by ROAS, funnel score, spend,
CTR, or CPA. Use this for Motion-style views like best hook x landing page x
offer, founder x hook, audience x offer, or brand segment x product. Add
start_date and end_date when the report should isolate a specific test
window instead of the full synced history. limit is clamped to 1–50 rows
before the API request.
attribution accepts blended, 7d_click, 1d_view, or incremental.
Omitting it and passing blended return the byte-identical legacy response.
The selected basis recomputes only conversion-derived metrics (conversions,
revenue, CPA, ROAS, and CVR); delivery, rate, and video metrics stay
unchanged. Incremental results are labelled modelled, and an unmeasured
conversion value is never turned into zero.
{
"brand_name": "Acme",
"dimensions": ["hook_type", "landing_page", "offer_type"],
"layer": "all",
"metric": "roas",
"attribution": "7d_click",
"start_date": "2026-05-01",
"end_date": "2026-05-31"
}Rows can include parts and values, so the agent can explain a winning
combination instead of treating each tag independently.
Saved custom reports
Save reusable report definitions, list them for a brand, rerun them by id, or
delete them when they are no longer needed. Saved reports can also persist a
custom start_date / end_date window for a specific launch or test period,
plus dashboard-style preset state such as view_type, date_range,
group_by, metrics, filters, sort, and saved_metric_preset.
Current chart view types are table, bar, line, and pie.
save_custom_report clamps limit to 1–50 rows before the API request.
The API accepts attribution on a save request but does not persist it;
run_saved_custom_report always replays blended attribution.
{
"brand_name": "Acme",
"name": "Hook + LP + Offer",
"dimensions": ["hook_type", "landing_page", "offer_type"],
"view_type": "table",
"date_range": "custom",
"group_by": "dimension",
"metrics": ["spend", "roas", "cpa", "ctr"],
"filters": [{"field": "status", "value": "winner"}],
"sort": "desc",
"saved_metric_preset": "delivery",
"start_date": "2026-05-01",
"end_date": "2026-05-31"
}
{ "brand_name": "Acme" }
{ "report_id": 7 }Tools: save_custom_report, list_custom_reports, run_saved_custom_report,
delete_custom_report.
get_creative_leaderboard
One ranked list answering "which creatives should I scale or kill." One row per creative for the
window (default last_14_days), ranked by rank_by (roas | cpa | spend | ctr |
thumbstop, default roas), each with thumbnail/media, spend, spend_share, measurement
states, days_running, and a first/second-half trend_direction. A creative below min_spend
(default 500, the shared materiality floor) is flagged below_min_spend, excluded from the
ranks, and never crowned a winner on thin spend — but still returned and counted. direction
(winners | losers | all) slices the ranked half. When the workspace's performance evidence
is not decision-safe (stale sync, no Meta connection), rankings_withheld is true and every
row drops to observation-only with no rank. launched_after / launched_before (YYYY-MM-DD)
scope the ranked population to creatives first synced in that window; limit is clamped to 1–50.
{ "brand_name": "Acme", "window": "last_14_days", "rank_by": "roas", "direction": "winners", "min_spend": 500, "limit": 20 }get_batch_readout
Grades a launch cohort against the rest of the account. Given a launch window (launched_after /
launched_before, YYYY-MM-DD — at least one required), every creative first synced in that
window gets a three-way verdict — promising, underperforming, or insufficient_evidence —
against a same-window baseline built from every other creative (the baseline excludes the
batch, so a new cohort is judged like-for-like, never against its own numbers). verdict_counts
totals the three buckets. insufficient_evidence always carries a verdict_reason: most often
below_min_spend (expected for roughly half of most batches — that honesty is the point), or
metric_not_applicable when the creative's objective/format does not track rank_by (e.g.
roas on a leads creative), in which case it is also excluded from the baseline. rank_by is
roas | cpa | ctr | thumbstop. Verdicts are withheld when evidence is not decision-safe;
limit is clamped to 1–50.
{ "brand_name": "Acme", "launched_after": "2026-06-01", "launched_before": "2026-06-14", "window": "last_30_days", "rank_by": "roas" }compare_periods
Period-over-period: "is it the ads, the auction, or the site?" Compares period_a (baseline) to
period_b (the "after" window); each period is either a preset (this_week, last_week,
last_7_days, last_14_days, last_30_days, last_90_days, this_month, last_month) or an
explicit period_X_start / period_X_end (YYYY-MM-DD) pair — never both, and the two windows
must not overlap. Returns account-level deltas (spend, revenue, ROAS, CPA, CPM, CTR, thumbstop,
click-to-purchase rate, AOV) with measurement states honored, plus a multiplicative funnel
decomposition whose dominant_factor names why a ROAS/CPA change happened — auction (CPM),
creative_engagement (CTR), landing_conversion (CVR), order_value (AOV), or mixed. When
revenue reported a measured $0 in a period, the decomposition falls back to CPA and returns a
non-null revenue_caution — trust it when present: the revenue collapse itself is the likely
explanation, not the delivery reading. Optional group_by (creative or a taxonomy dimension)
adds per-value deltas and biggest_movers; limit is clamped to 1–25.
{
"brand_name": "Acme",
"period_a_preset": "last_week",
"period_b_preset": "this_week",
"metric": "roas",
"group_by": "hook_type"
}predict_creative
Despite the legacy tool name, this is not a forecast. It compares a saved
analysis or draft attributes with the brand's historical tag-level performance
and returns an explicit observational association score and controlled-test
hypotheses—never a forecast, lift estimate, or causal recommendation. Turn a
promising association into a falsifiable, one-variable controlled test with a
predeclared primary metric, minimum data, guardrails, and ship/stop criteria.
Version 0.2.5 sends the required predict_observational.v2 request handshake
and rejects legacy or mixed response shapes instead of decorating them. A
contract mismatch returns no prediction evidence.
{
"brand_name": "Acme",
"attributes": { "hook_type": "Question", "cta": "Shop Now" },
"objective_metric": "cpa",
"goal_direction": "lower_better"
}get_demographics_performance
Read age x gender delivery with account-relative higher and lower observed-
return-per-spend bands. These bands are descriptive associations, not audience
outcome or action verdicts. Use date_preset for a standard audience window,
or start_date / end_date to isolate a specific audience window.
{
"brand_name": "Acme",
"date_preset": "last_30_days",
"start_date": "2026-05-01",
"end_date": "2026-05-31"
}export_demographics_context
Return an agent-ready audience context payload from the saved demographics read.
Use this when another agent needs higher and lower observed-efficiency bands,
raw totals, per-segment account-wide tag reads and trend views, and a
prompt-ready descriptive summary without the full wrapper. Demographics are
account-level only, with no per-ad key — every follow-up query stays a
separate demographic-only or tag-only read, never a joined tag x demographic
cross. Outcome direction stays withheld until an objective metric and
direction are predeclared. limit is clamped to 1–100 segments per
observed-efficiency band.
{
"brand_name": "Acme",
"date_preset": "last_30_days",
"limit": 3
}generate_brand_taxonomy
Generate brand-specific messaging themes and intended audiences from the analyzed creative library, then optionally save them to Brand Taxonomy Studio.
{ "brand_name": "Acme", "persist": true }scan_competitor
Classify a competitor's Meta Ad Library ads and get strategy breakdown.
limit is clamped to 1–50 ads before the API request.
{ "brand_name": "Acme", "page_name": "Hims & Hers", "limit": 25 }Internal competitor-row backfill is also hidden from the default published MCP
surface. Customer-facing competitor intelligence should use scan_competitor
after native Meta Ad Library access is approved.
get_competitor_scan_history
Read the saved Market scans/imports for a workspace without re-running Meta Ad
Library access. Useful when the agent needs the latest saved competitor hooks,
styles, or scan metadata before drafting briefs. limit is clamped to 1–50
saved scans before the API request.
{ "brand_name": "Acme", "limit": 6 }get_competitor_scan_detail
Read one saved competitor scan/import in full, including the stored ads,
per-ad analyses, original query, and aggregate strategy breakdown. Use the
scan_id returned by get_competitor_scan_history to reopen a specific past
market read for grounded follow-up briefing without re-running Meta Ad Library
access.
{ "scan_id": 42 }generate_naming
Build naming strings from already-classified attributes (rarely needed — analyze_creative already includes naming).
Prompts
Beyond the tools above, this server exposes 10 MCP prompts (prompts/list, prompts/get) —
turnkey report recipes. Each one tells the calling agent exactly which tools to call, in what
order and with what arguments, and how to write up the result: a shared measurement-states
vocabulary (measured / not_applicable / not_reported — never a guessed number), spend
floors before calling winners or losers, explicit insufficient-evidence verdicts, and a
verdict-first, receipts-after output format. Any MCP client with prompt support can run these
directly; arguments arrive as strings and are validated the same way tool arguments are —
invalid enum values, malformed dates, and reversed date ranges (start after end) all raise a
protocol-level INVALID_PARAMS error instead of rendering a broken recipe. Default date windows
are UTC-anchored (datetime.now(timezone.utc)); date_preset never accepts custom on a
prompt that has no start_date/end_date argument of its own, since an unpaired custom window
is unsafe across these tools (some silently read all-time history, others reject it outright).
weekly_creative_report
The Monday artifact: freshness-stamped totals, tag-level winners/losers, top-spender fatigue
watch, and a decision queue. brand_name (required), date_preset (last_7_days |
last_30_days, default last_7_days), target_roas, target_cpa, spend_threshold
(default 500).
fatigue_check
Ranked fatigue watchlist for the top spenders before it shows up in ROAS. brand_name
(required), top_n (1-10, default 5), metric (roas | cpa | ctr | thumbstop_rate,
default roas), date_preset (last_30d | last_90d, default last_30d).
scale_kill_hold
Morning triage: every material creative bucketed into scale/kill/hold/insufficient-evidence
against a declared target. brand_name (required), objective_metric (roas | cpa,
required), target_value (required), minimum_spend (default 500), date_preset
(all_time | last_7_days | last_30_days | last_90_days, default last_30_days).
what_to_make_next_brief
Turns performance and coverage gaps into next sprint's production brief. brand_name
(required), production_slots (default 5), formats_available (optional), date_preset
(all_time | last_7_days | last_30_days | last_90_days, default last_30_days).
hook_report
Which hooks earn the view AND the purchase, which get skipped, and which are wearing out.
brand_name (required), date_preset (all_time | last_7_days | last_30_days |
last_90_days, default last_30_days), spend_threshold (default 500).
batch_readout
Grades a creative batch against the account baseline, with an explicit too-early-to-judge
bucket. brand_name (required), batch_start_date (required, YYYY-MM-DD), batch_end_date
(default today), baseline_preset (default last_90_days).
monday_money_check
The founder's one-glance verdict: above/below breakeven, better/worse than last week (Meta-
attributed only — blended MER is reported not_applicable). brand_name (required),
breakeven_roas (required unless target_cpa is given), target_cpa (optional),
date_preset (last_7_days | last_30_days, default last_7_days).
competitive_whitespace
Diffs a competitor's live ad strategy against your own library on the same taxonomy.
brand_name (required), competitor (optional page name — omit to reuse the latest saved
scan), country (default US), run_fresh_scan (default false), date_preset (all_time |
last_7_days | last_30_days | last_90_days, default last_90_days).
audience_read
Who your spend is reaching vs. who is efficiently converting, broken by age and gender,
reported alongside (never crossed with) messaging-angle and hook performance, as observed
associations with the controlled tests that would confirm them. brand_name
(required), objective_metric (roas | cpa | ctr, required), goal_direction
(maximize | minimize, required, must agree with objective_metric), date_preset
(all_time | last_7_days | last_30_days | last_90_days, default last_30_days).
client_review_pack
The monthly business-review skeleton: totals, winner pattern, testing slide, audience read,
competitor context, and next month's test proposal. brand_name (required),
period_start/period_end (required, YYYY-MM-DD), client_cpa_target (optional),
include_competitors (default true).
Architecture
Your AI agent ←—stdio—→ creative-tagger-mcp ←—HTTPS—→ api.creativetagger.ai
│
├── Gemini 3.5 Flash (default classifier)
├── Claude Sonnet 5 (configured fallback)
├── SQLite (library + brand memory)
└── Meta Ad LibraryYou bring the agent. We provide the taxonomy, the memory, and the strategist.
License
MIT
Available Tools
43 toolsanalyze_creativeA
Analyze any ad creative (image, video, carousel, landing page, email) and return structured classification across 21 dimensions: media type, asset type, visual format, visual style, talent and talent demographics, hook type, messaging angle, audience, CTA, emotion, audio type, voiceover tone, seasonality, offer type, aspect ratio, duration, and more. Also generates standardized naming conventions. Provide one of: file_path, url, or html_content.
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | URL to analyze. Direct file URL (image/video) or landing page URL. | |
| format | No | Optional explicit format: image, video, long_video, carousel, landing_page, or email. | |
| version | No | Naming convention version number | |
| file_path | No | Local file path to analyze (image or video) | |
| brand_name | No | Brand name for naming conventions | Brand |
| file_paths | No | Multiple local image paths to analyze as a carousel. Posts them to the API's `files` field. | |
| html_content | No | Raw HTML for email creative analysis | |
| forensic_mode | No | Request first-3-second forensic frame extraction for video | |
| include_transcript | No | Include transcript for video analysis |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It describes what the tool does (returns classification) but does not disclose behavioral traits such as being read-only, idempotent, or requiring specific permissions. It assumes safe operation but lacks explicit safety guarantees.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no redundancy. The first sentence clearly conveys the tool's purpose and output scope; the second specifies input options. Information density is high, and the most critical details are front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 9 parameters, 100% schema coverage, and no output schema, the description is moderately complete. It lists many output dimensions but does not specify the structure or format of the returned classification. The 'naming conventions' aspect is mentioned but not detailed. More explicit output guidance would improve completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the description's added value over the schema is limited. The description reiterates the input options (file_path, url, html_content) already present in the schema, but does not provide additional context or constraints beyond what the schema already offers.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool analyzes ad creative and returns structured classification across 21 specific dimensions, plus generates naming conventions. It lists input options (file_path, url, html_content) and distinguishes itself from sibling tools like analyze_gaps (which likely focuses on gap analysis) and predict_creative (for prediction).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not provide explicit guidance on when to use this tool versus alternatives. It implies broad applicability ('analyze any ad creative') but offers no when-not-to-use scenarios or comparisons with siblings such as analyze_gaps, predict_creative, or get_analysis.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
analyze_gapsA
Identify gaps in the user's creative library for a given brand and propose concrete next creatives that fill them. Surfaces concentration risk (e.g., 78% UGC TalkHead) and recommends under-represented hook types, messaging angles, creative types. Returns JSON with gap analysis + ready-to-produce briefs.
| Name | Required | Description | Default |
|---|---|---|---|
| brand_name | Yes | Brand to analyze |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the full burden. It discloses what the tool surfaces (concentration risk, under-represented types) and that it returns JSON with gap analysis and briefs. However, it does not explicitly state whether the tool is read-only, if any data is modified, or what permissions are required. The behavioral traits are implied but not fully transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured: three sentences cover purpose, specifics, and output. No wasted words, and the key information is front-loaded. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (gap analysis with recommendations, multiple elements including hook types and messaging angles), the description is comprehensive. It explains the analysis scope, what it surfaces, and the output format (JSON with briefs). With only one parameter, the description fully compensates for the lack of an output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents the 'brand_name' parameter. The description adds context by explaining that the brand is used for analyzing creative library gaps, which provides meaning beyond the schema's simple description 'Brand to analyze'. This adds value for an agent selecting the tool.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Identify gaps in the user's creative library for a given brand and propose concrete next creatives that fill them.' It specifies the verb (identify, propose) and resource (creative library gaps, next creatives), effectively distinguishing it from sibling tools like 'analyze_creative' or 'predict_creative'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implicitly guides usage by indicating it is for a specific brand and provides gap analysis and recommendations. However, it does not explicitly state when to use this tool versus alternatives (e.g., when to choose 'analyze_gaps' over 'analyze_creative' or 'get_library_patterns'), nor does it mention any exclusions or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_custom_reportA
Create a custom performance report by selecting standard and/or brand taxonomy dimensions, then ranking the actual matched dimension combinations by ROAS, funnel_score, spend, CTR, or CPA. Use this when the user asks for a custom Motion-style view like hook x landing_page x offer_type, founder x hook, offer x audience, or custom segments. Optional start_date and end_date let an agent isolate a specific test window before explaining the winning combination. Rows can include parts and values so the agent can explain the winning combination.
| Name | Required | Description | Default |
|---|---|---|---|
| layer | No | standard, brand, or all | standard |
| limit | No | ||
| title | No | Custom Report | |
| metric | No | roas, funnel_score, spend, ctr, cpa | roas |
| end_date | No | Optional YYYY-MM-DD lookback end for the report window | |
| brand_name | Yes | ||
| dimensions | Yes | Dimensions such as hook_type, landing_page, audience, offer_type, founder, product, or customer_segment | |
| start_date | No | Optional YYYY-MM-DD lookback start for the report window | |
| spend_threshold | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must compensate. It discloses that the tool ranks results and that rows include parts and values, but it does not clarify whether the tool is read-only or has side effects (e.g., creates a persisted report). It also omits details about authentication, rate limits, or error conditions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is four sentences long, with the first sentence immediately stating the core purpose. Each subsequent sentence adds distinct value (usage context, behavior details). There is no redundancy or wasted text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (9 parameters, no output schema, no annotations), the description is adequate but not complete. It covers purpose and usage but does not describe the return format in detail, nor does it mention prerequisites, error handling, or post-invocation steps. The mention of 'parts and values' in rows is helpful but insufficient for full understanding.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 56%, so the schema already documents several parameters. The description adds value by explaining the purpose of start_date/end_date for isolating test windows and lists example dimension values. However, it does not enrich all parameters (e.g., brand_name, layer, spend_threshold) beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool creates a custom performance report by selecting dimensions and ranking by metrics. It gives specific examples of use cases, such as hook x landing_page x offer_type, making the purpose distinct and actionable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly tells when to use the tool: 'when the user asks for a custom Motion-style view.' It also provides context for optional date parameters to isolate test windows. However, it does not compare with sibling tools like save_custom_report or run_saved_custom_report, leaving some ambiguity about when to use this vs. alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_brand_entityB
Delete one brand entity by brand, entity_type, and canonical name. Useful when a creator, product, offer, customer segment, ICP, or campaign label should no longer be recognized for the brand.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| brand_name | Yes | ||
| entity_type | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It only says 'delete', implying destructive action, but does not disclose side effects, reversibility, permissions, or error handling. This is insufficient for a deletion tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no filler. The first sentence states the action and required parameters; the second provides use context. Efficient and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 3 required parameters, no enums, no output schema, and no annotations, the description is too brief. It lacks details on deletion behavior, confirmation, error cases, or idempotency. A more complete description would cover these aspects.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so description must compensate. It maps parameters (brand, entity_type, name) to the fields and gives examples for entity_type, but does not explain valid values, format constraints, or required semantics. Minimal additional meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'delete' and the resource 'brand entity', and specifies the three identifying fields. It also lists example entity types, distinguishing it from sibling tools like delete_brand_taxonomy_value.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides context for when it is useful ('when a creator, product... should no longer be recognized'), but does not explicitly state when not to use it or compare to alternatives like delete_brand_taxonomy_value.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_brand_taxonomy_valueA
Delete one brand-specific taxonomy value by brand, dimension, and canonical value. Use this to prune stale founders, segments, offers, or internal labels from Brand Taxonomy Studio.
| Name | Required | Description | Default |
|---|---|---|---|
| value | Yes | ||
| dimension | Yes | ||
| brand_name | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must convey behavior. It states 'Delete' which is destructive, but lacks disclosure of side effects, permissions, or reversibility. The phrase 'prune stale' adds context but not behavioral depth. Adequate for a simple delete, but could mention what happens if value doesn't exist.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences: first states action and inputs, second provides use case. No unnecessary words. Front-loaded with key information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a delete tool with no output schema or annotations, the description lacks information on return format, error conditions (e.g., missing value), and prerequisites. The use case is helpful, but overall completeness is low given the missing details for an AI agent to handle errors.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Description maps all three parameters (brand, dimension, value) by phrasing 'by brand, dimension, and canonical value,' adding the term 'canonical' to indicate standard labels. However, with 0% schema description coverage, detailed explanations of each parameter are missing. Compensates partially but not fully.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description explicitly states the action (Delete), resource (brand-specific taxonomy value), and required parameters (brand, dimension, canonical value). It distinguishes from sibling 'delete_brand_entity' by targeting taxonomy values rather than brand entities, and from 'set_brand_taxonomy_value' which creates/updates.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear use case: 'prune stale founders, segments, offers, or internal labels from Brand Taxonomy Studio.' This tells when to use it. Does not explicitly state when not to use or mention alternatives like delete_brand_entity, but the context is sufficiently clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_custom_reportC
Delete a saved custom report definition by id.
| Name | Required | Description | Default |
|---|---|---|---|
| report_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided. The description does not disclose consequences like irreversibility, permission requirements, or behavior on missing id.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence with no redundancy. Efficient but could be slightly expanded without losing conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple deletion with one parameter and no output schema, the description lacks details on idempotency, error handling, or authorization, leaving gaps for an AI agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, yet the description only repeats 'id' without adding meaning about format, range, or how to obtain the report_id. This does not compensate for the lack of schema documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description specifies the action 'Delete', the resource 'saved custom report definition', and the identifier 'id'. It clearly distinguishes from siblings like delete_brand_entity or delete_naming_template.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives such as save_custom_report or run_saved_custom_report. No exclusions or prerequisites mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_naming_templateC
Delete a saved naming template by name.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | default |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, and the description does not disclose behavioral traits such as irreversibility, required permissions, or side effects of deletion.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence with no wasted words, though it could benefit from slight expansion on usage.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple deletion tool with one optional parameter and no output schema, the description is minimal and lacks important context like destructive nature or user confirmation requirements.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has one parameter ('name') with a default, but the description adds no additional meaning beyond 'by name.' With 0% schema description coverage, the description fails to compensate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states 'Delete a saved naming template by name,' clearly identifying the verb (delete) and resource (naming template), and distinguishes it from sibling tools like delete_brand_entity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives (e.g., other delete tools) or on prerequisites or 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.
export_brain_learnings_contextC
Export a bounded, prompt-ready context from get_brain_learnings, including follow-up Strategy and time-series queries and the same canonical audience filters.
| Name | Required | Description | Default |
|---|---|---|---|
| kinds | No | ||
| limit | No | ||
| end_date | No | ||
| brand_name | No | ||
| cpa_target | No | ||
| start_date | No | ||
| date_preset | No | all_time | |
| roas_target | No | ||
| watch_metric | No | roas | |
| minimum_spend | No | ||
| watch_sources | No | ||
| audience_limit | No | ||
| learning_spend | No | ||
| watch_group_by | No | messaging_angle | |
| watch_signal_focus | No | all | |
| conclusion_statuses | No | ||
| watch_coverage_focus | No | all | |
| watch_minimum_points | No | ||
| audience_signal_focus | No | Optional audience signal filter when kinds includes audience: all, higher_observed_efficiency, or lower_observed_efficiency | all |
| watch_maximum_gap_days | No | ||
| watch_trajectory_focus | No | all | |
| conclusion_recency_days | No | ||
| fatigue_decay_threshold | No | ||
| watch_minimum_calendar_days | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must fully disclose behavior. It mentions 'export' and 'bounded' but does not clarify side effects, required permissions, or whether it creates any resources. The behavioral insight is minimal and inferred from the name.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence of 17 words, concise and front-loaded. However, it is too brief for the tool's complexity (24 parameters), sacrificing necessary detail for brevity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 24 parameters, no output schema, and no annotations, the description should provide comprehensive context. It only gives a high-level purpose, missing parameter roles, output format, prerequisites, and constraints. Incomplete for effective agent use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 4% (one enum parameter documented). The description adds no parameter-specific explanations; it only mentions 'canonical audience filters' which loosely relates to audience parameters. Given 24 parameters, much meaning is left unspecified.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states it exports a bounded, prompt-ready context from get_brain_learnings, including strategy and time-series queries. The verb 'export' and resource 'bounded context' are specific, but it does not differentiate from sibling export tools like export_demographics_context or export_performance_timeseries_context.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool versus alternatives. The description implies it is for obtaining a curated context for prompts, but lacks when-not-to-use or alternative recommendations. Sibling tools are listed but not differentiated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
export_demographics_contextA
Return an agent-ready audience context payload from saved age x gender performance memory. Use this when another agent or workflow needs the higher and lower observed-efficiency bands, account totals, summary text, a prompt-ready descriptive review queue, and date-scoped mixed creative x audience strategy queries plus time-series follow-up queries without opening the dashboard.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum segments from each observed-efficiency band to include in the exported context | |
| end_date | No | Optional YYYY-MM-DD end date | |
| brand_name | No | ||
| start_date | No | Optional YYYY-MM-DD start date | |
| date_preset | No | Optional date window preset: all_time, last_7_days, last_30_days, last_90_days, or custom | all_time |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description is the sole source of behavioral info. It describes the output components but does not disclose whether the tool is read-only, permissions required, or other behavioral traits. The description implies a read operation but could be more transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, albeit long, sentence that front-loads the core purpose. It uses some jargon but remains efficient. It could be slightly more concise, but overall it's well-structured and informative.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the lack of output schema and 5 parameters, the description partially compensates by listing output components. However, it does not explain how parameters affect the output or the exact format, leaving some gaps for a complex payload.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 80%, with brand_name lacking a description. The tool description does not add meaning to parameters beyond the schema. It describes the overall purpose but not parameter-specific details, so it meets the baseline but adds no extra value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb 'Return' and clearly identifies the resource as an 'agent-ready audience context payload from saved age x gender performance memory'. It distinguishes from sibling export tools by specifying the demographic focus.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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: when another agent needs specific performance bands, totals, summary, review queue, and strategy queries without the dashboard. It provides clear context but lacks explicit exclusions or comparisons to alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
export_performance_timeseries_contextC
Export the bounded agent_context from get_performance_timeseries with its decision queue and data-quality warnings.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| metric | No | roas | |
| end_date | No | ||
| group_by | No | ad_name | |
| brand_name | No | ||
| start_date | No | ||
| date_preset | No | last_30d | |
| signal_focus | No | all | |
| minimum_spend | No | ||
| coverage_focus | No | all | |
| minimum_points | No | ||
| maximum_gap_days | No | ||
| trajectory_focus | No | all | |
| minimum_calendar_days | No | ||
| fatigue_decay_threshold | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so the description must convey behavioral traits. It only mentions what is exported (bounded agent_context, decision queue, data-quality warnings) but does not disclose side effects, authorization needs, or whether the operation is read-only.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single-sentence description is concise and front-loaded with the core action. However, it could be slightly more precise without adding length.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 15 parameters, no output schema, and no parameter descriptions, the description is grossly incomplete. It does not help agents understand what the tool returns or how to configure the many parameters.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for 15 parameters, and the description provides no explanations for any parameter. Agents must infer meaning from names and defaults alone, which is insufficient for correct tool invocation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the verb 'Export' and the resource 'bounded agent_context from get_performance_timeseries', distinguishing it from sibling get_performance_timeseries. However, 'bounded agent_context' is somewhat vague.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool versus alternatives. It implies a dependency on get_performance_timeseries but does not clarify when agents should choose this export over other export tools like export_brain_learnings_context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_brand_taxonomyA
Auto-build a brand's ENTIRE custom taxonomy from trends in its analyzed creative library — messaging themes, intended audiences, AND entities (products, founders, creators, offers, customer segments, campaign labels). Lets a brand get the full brand-custom layer with zero manual setup. Optionally persists everything into Brand Taxonomy Studio so future analyses, predictions, and naming templates use them.
| Name | Required | Description | Default |
|---|---|---|---|
| persist | No | Save generated values to the brand taxonomy | |
| brand_name | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses the optional persistence behavior but lacks details on whether the generation is additive or replaces existing taxonomy, and does not mention required permissions or side effects. With no annotations, the description provides adequate but not comprehensive transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the core purpose. Every sentence adds value—first describes generation, second explains optional persistence. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the main function and parameters but does not specify the return value when persist is false, nor does it mention prerequisites (e.g., need for analyzed creative library). Given no output schema, some output description would improve completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 50%; only the persist parameter has a description in the schema. The description adds context by explaining that persistence is optional and that the taxonomy is built from brand creative library trends, but it does not detail the brand_name parameter beyond its role.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool auto-builds a brand's entire custom taxonomy from trends in its analyzed creative library, specifying the components (messaging themes, audiences, entities). It distinguishes from sibling tools like set_brand_taxonomy_value (manual) and get_brand_taxonomy (retrieval) by emphasizing 'zero manual setup' and automatic generation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies use when a brand wants to automatically generate a custom taxonomy without manual setup. It does not explicitly list when not to use or mention alternatives, but the context is clear enough for an agent to decide.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_namingA
Generate V1-compatible standard, full, compact, and reporting naming convention strings from creative attributes. Use when you already have classified attributes (for example from analyze_creative) and need the same naming structure the API returns.
| Name | Required | Description | Default |
|---|---|---|---|
| cta | No | ||
| talent | No | ||
| emotion | No | ||
| version | No | ||
| audience | No | ||
| cta_type | No | ||
| duration | No | ||
| hook_type | No | ||
| asset_type | No | UGC | |
| audio_type | No | ||
| brand_name | Yes | ||
| offer_type | No | ||
| seasonality | No | ||
| talent_type | No | No Talent | |
| aspect_ratio | No | 9:16 | |
| visual_style | No | Native | |
| visual_format | No | Talking Head | |
| voiceover_tone | No | ||
| messaging_angle | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fails to disclose behavioral traits such as side effects, authentication needs, or return format details. It only describes the generation action but doesn't address whether it modifies state or requires specific permissions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences long, each serving a distinct purpose: the first defines the action, the second provides usage context. No extraneous information, front-loaded with key details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 19 parameters, no output schema, and no annotations, the description is insufficient. It doesn't specify output format, required parameter dependencies, or how the 19 attributes map to return strings. The reliance on external classification is noted but not enough to make the tool fully self-contained.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description does not elaborate on individual parameters beyond mentioning 'creative attributes.' It adds no meaning to specific fields like brand_name, cta, or talent, leaving the agent to infer their semantics from names alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool generates V1-compatible naming convention strings (standard, full, compact, reporting) from creative attributes. It also distinguishes itself from siblings by referencing analyze_creative as a prerequisite, making its purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly advises using this tool after having classified attributes, citing analyze_creative as an example. While it doesn't list when not to use it or alternatives, the context provides clear guidance on the appropriate scenario.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_analysisA
Get the full analysis result for a single saved library item by ID. Use after list_library when you need the complete 21-dimension classification (list_library returns a summary; this returns the full JSON).
| Name | Required | Description | Default |
|---|---|---|---|
| brand_name | No | Exact workspace brand_name from list_workspaces | |
| analysis_id | Yes | ID of the analysis to fetch |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries the burden. It states that the tool returns 'full JSON' but does not disclose other behavioral traits such as read-only nature, required permissions, or rate limits. For a retrieval tool, the transparency is adequate but could be more comprehensive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no wasted words. The first sentence clearly states the action, and the second provides usage context. Front-loaded and efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema, so description partly compensates by mentioning 'full JSON' and '21-dimension classification'. However, it does not detail the return structure or fields. For a simple retrieval tool, it is mostly complete but could include a brief note on output structure.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, baseline 3. The description adds meaning by specifying 'by ID' and 'saved library item', clarifying the role of analysis_id. It does not explicitly describe brand_name but the tool context implies it is optional. The description adds value beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses specific verb 'Get', resource 'full analysis result for a single saved library item by ID', and distinguishes from the sibling tool list_library by noting that list_library returns a summary and this returns the full 21-dimension classification JSON.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use: 'Use after list_library when you need the complete 21-dimension classification'. This provides clear context and alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_brain_learningsA
Read one workspace's current Brand Brain observations, conclusions, watchouts, audience signals, gaps, and agent_context. Validate associations with controlled tests before changing allocation. Audience filters use higher_observed_efficiency or lower_observed_efficiency.
| Name | Required | Description | Default |
|---|---|---|---|
| kinds | No | Optional comma-separated kinds: conclusion, working, watch, audience, gap, or all | |
| limit | No | ||
| end_date | No | ||
| brand_name | No | ||
| cpa_target | No | ||
| start_date | No | ||
| date_preset | No | all_time | |
| roas_target | No | ||
| watch_metric | No | Timeseries metric used for watch/fatigue learnings: roas, cpa, ctr, cpm, cvr, thumbstop_rate, hook_rate, hold_rate, video_completion_rate, video_50_rate, video_75_rate, funnel_score, frequency, outbound_ctr, outbound_clicks, landing_page_views, adds_to_cart, atc_per_lpv, or video_3s_views | roas |
| minimum_spend | No | ||
| watch_sources | No | Optional comma-separated watch sources: timeseries, strategy, patterns, or all | |
| audience_limit | No | ||
| learning_spend | No | ||
| watch_group_by | No | Timeseries grouping for watch/fatigue learnings: ad_name, campaign_name, landing_page_domain, analysis_id, hook_type, messaging_angle, ad_type, format, visual_style, cta, emotion, demographic_age, demographic_gender, demographic_segment, or demographic_signal | messaging_angle |
| watch_signal_focus | No | Optional signal filter for watch/fatigue learnings: all, fatigued, stable, or insufficient_data | all |
| conclusion_statuses | No | Optional comma-separated conclusion statuses when kinds includes conclusion: winner, fatigued, loser, or all | |
| watch_coverage_focus | No | Optional coverage-risk filter for watch/fatigue learnings: all, call_ready, gappy, insufficient_points, short_window, or windowed_history | all |
| watch_minimum_points | No | ||
| audience_signal_focus | No | Optional audience signal filter when kinds includes audience: all, higher_observed_efficiency, or lower_observed_efficiency | all |
| watch_maximum_gap_days | No | ||
| watch_trajectory_focus | No | Optional trend filter for watch/fatigue learnings: all, worsening, improving, flat, or insufficient_data | all |
| conclusion_recency_days | No | ||
| fatigue_decay_threshold | No | ||
| watch_minimum_calendar_days | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description carries the burden of behavioral disclosure. It indicates a read operation ('Read'), which is helpful, but does not mention side effects, rate limits, or return behavior beyond listing data types.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise at two sentences, front-loading the core purpose. However, the second sentence reads as an instruction rather than a structural element, slightly muddling clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 24 parameters, no output schema, and no annotations, the description is insufficient. It does not explain the return format or how parameters like watch_sources or conclusion_statuses work, leaving significant gaps for an agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is low (38%). The description adds minimal parameter context (e.g., audience filters with higher/lower observed efficiency). Many parameters like end_date, brand_name, start_date lack explanation, and the description does not compensate for the gaps.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool reads one workspace's Brand Brain data, specifying the types of learnings included (observations, conclusions, watchouts, audience signals, gaps, agent_context). This verb+resource definition distinguishes it from similar tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a usage context: 'Validate associations with controlled tests before changing allocation.' This implies when to use the tool, but it doesn't explicitly contrast with sibling tools like get_analysis or provide exclusion criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_brand_contextA
Retrieve the saved brand context for a brand: voice, target audience, top performers, anti-patterns, and notes. Strategist tools auto-include this; this tool exposes the raw stored context.
| Name | Required | Description | Default |
|---|---|---|---|
| brand_name | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided. Description implies read-only behavior ('retrieve'), which is a key behavioral trait. However, it does not disclose any potential side effects, permissions, or performance considerations. Adequate but not comprehensive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no superfluous information. Purpose and context are front-loaded. Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given one simple parameter, no output schema, and no annotations, the description covers the essential functionality well. It states what is retrieved and provides a usage nuance (raw vs. auto-included). Could optionally mention output structure, but not necessary for this simple tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Only one parameter (brand_name) with no schema description (0% coverage). Description does not elaborate on what brand_name entails, such as expected format or case sensitivity. While the parameter is intuitive, the description adds no semantic value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clear verb (retrieve) and resource (saved brand context). Lists contents: voice, target audience, top performers, anti-patterns, notes. Differentiates from sibling set_brand_context by explicitly stating it exposes raw stored context.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
States that strategist tools auto-include context, positioning this tool as a way to access the raw stored version. While not explicitly listing alternatives or exclusions, this provides useful guidance on when to use the tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_brand_taxonomyA
Retrieve the brand-custom taxonomy for a brand: custom values, aliases, and entities such as founder, recurring creators, products, offers, customer segments, ICPs, and campaign labels. Standard taxonomy still lives in attributes; this is the brand-specific extension layer.
| Name | Required | Description | Default |
|---|---|---|---|
| brand_name | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must disclose behavioral traits. It describes the data retrieved but does not state that the tool is read-only or any side effects, permissions, or rate limits. For a retrieval tool, the read-only nature is a key behavior that is omitted.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no redundant information. The first sentence front-loads the core functionality with a list of contents; the second sentence clarifies the scope. Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (single required parameter, no output schema, no annotations), the description covers what it does and distinguishes from siblings. It could be more complete by hinting at the return format (e.g., object or list) but is sufficient for an agent to understand the tool's purpose.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% because the description does not mention the brand_name parameter explicitly. However, the phrase 'for a brand' implies the parameter's purpose. The description adds minor context but fails to fully compensate for the lack of schema documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Retrieve' and the resource 'brand-custom taxonomy', listing specific contents (custom values, aliases, entities) and distinguishing from standard taxonomy via the last sentence. This differentiates it from sibling tools like get_taxonomy.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use via the contrast with standard taxonomy ('Standard taxonomy still lives in attributes; this is the brand-specific extension layer'), but does not explicitly state when-not or name alternatives. Guidance is implied but not explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_competitor_scan_historyA
Return saved competitor Market scans/imports for the current workspace without re-running Meta Ad Library access. Useful for re-briefing past market reads, checking the latest tagged competitor patterns, or building strategy prompts from previously saved scans.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of saved scans/imports to return | |
| brand_name | No | Optional workspace brand filter. When omitted, returns the latest saved scans across brands for the current account. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It adds the key behavioral detail 'without re-running Meta Ad Library access' but omits auth, rate limits, ordering, or return format.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no waste. Main action is front-loaded, followed by use cases. Very efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema, and description does not specify the shape of returned data (e.g., fields in scan objects). For a retrieval tool, this is a notable gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers both parameters (100%). Description adds value for brand_name by explaining default behavior ('latest saved scans across brands'), beyond the schema's 'optional workspace brand filter'.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns saved competitor scans/imports for the current workspace without re-running Meta Ad Library access. It distinguishes from sibling scan_competitor by emphasizing 'saved' and 'without re-running'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description lists three use cases (re-briefing, checking patterns, building prompts), but does not explicitly state when not to use or contrast with related tools like get_analysis or list_library.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_creative_strategy_reportA
Read one workspace's observational Strategy matrix and decision queue. Defaults to a bounded concise response; use detailed only for an explicit deep dive. Treat cells as test hypotheses, not causal effects.
| Name | Required | Description | Default |
|---|---|---|---|
| rows | No | Matrix row dimension, e.g. visual_format (execution style), asset_type (production class), media_type (auto-detected format), messaging_angle, format, hook, persona, product, offer_type, demographic_age, demographic_gender, demographic_segment, or demographic_signal. Taxonomy v2 splits media type, asset type, and visual format into three separate axes; ad_type is a deprecated alias for visual_format. Combine a creative dimension here with a demographic column for mixed audience reads. | ad_type |
| limit | No | ||
| columns | No | Matrix column dimension, e.g. messaging_angle, visual_format, asset_type, media_type, format, hook, persona, product, offer_type, demographic_gender, demographic_age, demographic_segment, or demographic_signal (ad_type is a deprecated alias for visual_format). Set one axis to a creative tag and the other to a demographic axis for a mixed creative x audience matrix. | messaging_angle |
| metrics | No | Comma-separated metrics to show in each cell, e.g. spend,ctr,thumbstop_rate,hook_rate,hold_rate,cpa | spend,ctr,thumbstop_rate,hook_rate,hold_rate,cpa |
| end_date | No | ||
| max_cells | No | Maximum matrix cells returned in either response format | |
| brand_name | No | ||
| cpa_target | No | ||
| start_date | No | ||
| date_preset | No | all_time | |
| roas_target | No | ||
| watch_limit | No | ||
| status_focus | No | all, next, winner, learning, fatigued, loser, untested | all |
| watch_metric | No | Optional fatigue watch metric for the strategy report: roas, cpa, ctr, spend, hook_rate, hold_rate, thumbstop_rate, or demographic-safe metrics such as conversions and revenue | |
| metric_preset | No | Optional metric preset key: diagnostics, conversion, delivery, video, scale, or all | |
| minimum_spend | No | ||
| learning_spend | No | ||
| watch_group_by | No | Optional fatigue watch grouping for the strategy report: ad_name, campaign_name, landing_page_domain, analysis_id, hook_type, messaging_angle, ad_type, format, visual_style, cta, emotion, demographic_age, demographic_gender, demographic_segment, or demographic_signal | |
| report_template | No | Template preset: next-tests, creative-winners, fatigue-watch, coverage-gaps, hook-performance, persona-read, demographic-read, or audience-signals. You can also skip the preset and request a mixed creative x audience cut via rows/columns such as messaging_angle by demographic_segment. | next-tests |
| response_format | No | concise returns an agent-ready bounded report; detailed adds richer report fields for explicit deep dives. Both formats remain bounded by max_cells | concise |
| watch_signal_focus | No | Optional fatigue watch signal filter for the strategy report: all, fatigued, stable, or insufficient_data | all |
| watch_coverage_focus | No | Optional coverage-risk filter for the strategy report watch: all, call_ready, gappy, insufficient_points, short_window, or windowed_history | all |
| watch_minimum_points | No | ||
| watch_maximum_gap_days | No | ||
| watch_trajectory_focus | No | Optional fatigue watch trend filter for the strategy report: all, worsening, improving, flat, or insufficient_data | all |
| watch_minimum_calendar_days | No | ||
| fatigue_minimum_calendar_days | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Describes the tool as 'observational' and notes the output represents test hypotheses, not causal effects, adding behavioral context. However, with no annotations, it lacks details like authentication needs or rate limits, though it is clearly a read operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences, front-loaded with the primary purpose, and includes a practical usage hint and a caveat. No unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite 27 parameters and no output schema, the description is very brief and does not elaborate on the matrix structure, output content, or how to leverage the many parameters effectively.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 48% schema description coverage, the description should compensate but only implicitly references the 'response_format' parameter. It adds no meaning to the 27 parameters beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool reads a workspace's observational Strategy matrix and decision queue, distinguishing it from sibling tools like 'get_analysis' or 'get_brain_learnings'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides guidance on using concise vs detailed response format and warns against treating cells as causal effects, but does not explicitly contrast with alternative tools or state when not to use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_demographics_performanceA
Return saved age x gender delivery with account-relative higher and lower observed-return-per-spend bands. These are descriptive associations, not audience outcome or action verdicts. Supports report date presets like last_30_days or a custom start_date/end_date (YYYY-MM-DD) to scope the audience read to a specific performance window.
| Name | Required | Description | Default |
|---|---|---|---|
| end_date | No | Optional end date in YYYY-MM-DD format | |
| brand_name | No | ||
| start_date | No | Optional start date in YYYY-MM-DD format | |
| date_preset | No | Optional date window preset: all_time, last_7_days, last_30_days, last_90_days, or custom | all_time |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses that results are 'descriptive associations, not audience outcome or action verdicts,' which adds important behavioral context. However, it does not mention data freshness, performance impact, or whether the tool is read-only.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no wasted words: first states core purpose, second adds date usage guidance. Information is front-loaded and efficiently structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 4 parameters and no output schema, the description explains the return nature (descriptive, not outcomes) and date scoping, but omits output format details and the 'brand_name' parameter. It is moderately complete but has gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 75% (3 of 4 parameters described). The description reinforces date parameter meaning with examples ('last_30_days', 'YYYY-MM-DD'), but does not explain the 'brand_name' parameter. With high coverage, the baseline is 3, and the description adds marginal value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns 'age x gender delivery' with performance bands, specifies it is descriptive not causal, and distinguishes from siblings like get_meta_performance_summary or get_performance_timeseries by focusing on demographic breakdowns with return-per-spend bands.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
While the description provides guidance on date presets and custom dates, it does not explicitly state when to use this tool vs. alternatives (e.g., get_meta_performance_summary) or when not to use it. The context is implied but lacks explicit exclusions or sibling differentiation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_library_patternsA
Get pattern insights across the user's entire library: which hooks, angles, creative types, emotions they over- or under-index on. Returns top values per dimension with percentages plus rule-based diversification insights. Use this for portfolio analysis before recommending what to make next.
| Name | Required | Description | Default |
|---|---|---|---|
| brand_name | No | Exact workspace brand_name from list_workspaces |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It states the return structure (top values with percentages, diversification insights) but does not explicitly disclose side effects (e.g., read-only nature, permissions required, rate limits). Since it's a 'get' tool, read-only is implied but not stated, leaving some uncertainty.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loading the action and output, then providing usage guidance. Every sentence is essential and no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter tool with no output schema, the description fully explains the return format (top values per dimension with percentages, diversification insights) and the usage context. No gaps remain.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single parameter 'brand_name' is described in the schema as 'Exact workspace brand_name from list_workspaces'. The description adds the qualifier 'Exact' and references 'list_workspaces' for source, which provides context beyond the schema's basic description. Schema coverage is 100%, so the description adds value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Get pattern insights across the user's entire library' with specifics on what it analyzes (hooks, angles, creative types, emotions) and returns (top values with percentages, diversification insights). This distinguishes it from siblings like 'analyze_creative' or 'get_analysis'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit usage context: 'Use this for portfolio analysis before recommending what to make next.' This tells the agent when to apply it. However, it does not mention when not to use it or offer alternatives, which would make it a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_meta_performance_summaryA
Read the saved Meta performance memory for a brand without triggering a sync. Returns totals plus winners/losers by standard taxonomy and brand-custom taxonomy values, including explainable funnel_score signals for capture, hold, bring-to-site, and convert stages. Supports all_time, last_7_days, last_30_days, last_90_days, or custom date windows.
| Name | Required | Description | Default |
|---|---|---|---|
| end_date | No | Optional YYYY-MM-DD end date | |
| brand_name | No | ||
| start_date | No | Optional YYYY-MM-DD start date | |
| date_preset | No | Optional date window preset: all_time, last_7_days, last_30_days, last_90_days, or custom | all_time |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so description bears full burden. It clarifies read-only nature, returns totals and winners/losers, and funnel scores. Does not describe authorization or rate limits, but for a read tool, it is sufficiently transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences: first states core purpose and key differentiator, second details return content and date options. Front-loaded, no extraneous information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, description explains return structure (totals, winners/losers by taxonomy, funnel scores). Does not detail format but is complete enough for a read tool with zero required params.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 75%; brand_name lacks description. The description adds meaning by associating brand_name with 'for a brand' and enumerates date presets and custom usage. Provides context beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it reads saved Meta performance memory without triggering a sync, distinguishes from sync_meta_performance and get_performance_timeseries, and specifies return contents including totals, winners/losers by taxonomy, and funnel scores.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says 'without triggering a sync,' indicating when to use this tool over a sync tool. It lists supported date windows but does not explicitly state when not to use or compare to other reporting tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_meta_statusB
Check whether read-only Meta performance sync is connected for the authenticated user. Returns account id, scopes, read-only status, and latest sync metadata.
| Name | Required | Description | Default |
|---|---|---|---|
| brand_name | No | Exact workspace brand_name from list_workspaces |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Minimal behavioral disclosure; confirms read-only nature and lists returned fields but omits details on authentication, error conditions, or any side effects. No annotations provided to compensate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no wasted words; the main action is front-loaded, making it efficient and easy to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with one optional parameter and no output schema, the description adequately explains purpose and return fields. Minor gap: no mention of authentication requirements or prerequisites.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% with a clear parameter description ('Exact workspace brand_name from list_workspaces'). The tool description adds no additional meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Check') and clearly identifies the resource ('read-only Meta performance sync'), distinguishing it from siblings like sync_meta_performance or get_meta_performance_summary.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives, such as sync_meta_performance for initiating sync or get_meta_performance_summary for aggregated metrics.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_naming_variablesA
List every variable available in saved naming templates, including standard taxonomy fields plus brand-custom variables like founder, product, offer, customer_segment, icp, and campaign_label.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It correctly indicates a read operation, but lacks details on output format, pagination, or behavior when no templates exist.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single, clear sentence with front-loaded verb and examples. No unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter tool, the description is mostly complete. However, it does not mention the return format (e.g., list of strings) or whether the output is sorted.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters exist, and schema coverage is 100% trivially. Baseline is 4; the description adds value by listing example variables, though no parameter semantics are needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists every variable in naming templates, giving specific examples like founder, product, offer. It distinguishes from sibling tools such as list_naming_templates and get_taxonomy.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool vs alternatives. The purpose is implied, but there is no statement of prerequisites or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_performance_timeseriesB
Read one workspace's saved performance series for observational fatigue, trajectory, and data-coverage checks.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum grouped series to return | |
| metric | No | roas, cpa, ctr, cpm, cvr, thumbstop_rate, hook_rate, hold_rate, video_completion_rate, video_50_rate, video_75_rate, funnel_score, frequency, outbound_ctr, outbound_clicks, landing_page_views, adds_to_cart, atc_per_lpv, or video_3s_views | roas |
| end_date | No | Optional YYYY-MM-DD end date | |
| group_by | No | ad_name, campaign_name, landing_page_domain, analysis_id, hook_type, messaging_angle, ad_type, format, visual_style, cta, emotion, demographic_age, demographic_gender, demographic_segment, or demographic_signal | ad_name |
| brand_name | No | ||
| start_date | No | Optional YYYY-MM-DD start date | |
| date_preset | No | Optional date window preset: all_time, last_7d, last_30d, last_90d, maximum, or custom | last_30d |
| signal_focus | No | Optional fatigue filter: all, fatigued, stable, or insufficient_data | all |
| minimum_spend | No | Spend floor before fatigue is treated as meaningful | |
| coverage_focus | No | Optional sync coverage filter: all, call_ready, gappy, insufficient_points, short_window, or windowed_history | all |
| minimum_points | No | Minimum observed points required before a grouped series is returned | |
| maximum_gap_days | No | Maximum sync gap in calendar days allowed before a grouped series is returned | |
| trajectory_focus | No | Optional trend filter: all, worsening, improving, flat, or insufficient_data | all |
| minimum_calendar_days | No | Minimum elapsed calendar days required before a grouped series is returned | |
| fatigue_decay_threshold | No | Decay threshold that flips a series to fatigued |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It indicates the tool is read-only ('Read') but lacks details on rate limits, auth requirements, or other behavioral constraints; the description adds minimal behavioral context beyond the basic read intent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that is front-loaded and clear, with no wasted words. It efficiently conveys the tool's purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 15 parameters and no output schema or annotations, the description is too brief. It does not explain the return format, pagination, or how filters interact, leaving gaps for a complex tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is high (93%), so baseline is 3. The description does not add parameter-specific meaning beyond what the schema already provides; it only gives high-level context for the tool's purpose.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly specifies the verb 'Read', the resource 'one workspace's saved performance series', and the purpose 'for observational fatigue, trajectory, and data-coverage checks'. This distinguishes it from sibling tools that perform other analyses.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for fatigue, trajectory, and coverage checks but does not provide explicit when-to-use or when-not-to-use guidance, nor does it compare with alternative sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_prebuilt_reportsA
Return Motion-style prebuilt creative reports for a brand: best hooks, landing pages, messaging angles, audiences, offers, CTAs, visual formats, and brand-custom values. Rows include ROAS, spend, CTR, thumbstop, and funnel_score when performance memory exists. Optional start_date/end_date (YYYY-MM-DD) scope the report window.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Rows per report | |
| end_date | No | Optional YYYY-MM-DD end date | |
| report_id | No | Optional report filter, e.g. best_hooks, best_landing_pages, best_angles, best_audiences, best_offers | |
| brand_name | No | ||
| start_date | No | Optional YYYY-MM-DD start date | |
| spend_threshold | No | Spend floor before reporting a row-level observation |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It discloses that rows include metrics only when performance memory exists and that dates scope the report window. However, it does not mention mutability, authorization needs, or side effects, which limits transparency for a read-like tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with core functionality in first sentence, no redundancy. Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers report types, metrics, date range, and spend threshold. It does not explain output format, but no output schema exists. Minor gap: it does not clarify if brand_name is required despite not being marked required in schema. Overall adequate for a moderately complex tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 83%, so baseline is 3. The description adds context for report types and metric availability but does not significantly expand on schema descriptions for parameters like limit, brand_name, or spend_threshold. It restates date format and report_id examples already in schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('return') and resource ('prebuilt creative reports for a brand'), listing exact report types (best hooks, landing pages, etc.) and metrics (ROAS, spend, CTR). This clearly distinguishes it from sibling tools like 'get_creative_strategy_report' or 'get_taxonomy_performance'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description mentions optional parameters (date range, spend threshold) but does not explicitly state when to use this tool versus alternatives like 'get_creative_strategy_report' or 'get_taxonomy_performance'. Usage context is implied but lacks exclusion guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_taxonomyA
Get Creative Tagger taxonomy v2's 15 controlled dimensions, one derived/open aspect-ratio dimension, and two dynamic, brand-specific dimensions. The package ships a versioned vocabulary because the API schema does not expose enums for every classification field. Use this before analyze_creative when you want to know the vocabulary the system understands. Taxonomy v2: media type (the auto-detected format — static image, video, carousel), asset type (production class), and visual format (execution style) are three separate dimensions; 'Static Image' and 'Carousel' are media types, not visual_format values.
| Name | Required | Description | Default |
|---|---|---|---|
| dimension | No | Optional: fetch one dimension only (e.g. 'hook_type', 'messaging_angle'). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden. It does not explicitly state that this is a read-only operation or disclose any behavioral traits like rate limits or authorization needs. The information about versioned vocabulary is useful but not behavioral.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured, front-loading purpose and usage, then clarifying taxonomy details. It is informative without excessive length, though some redundancy exists in the taxonomy explanation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description should ideally describe the return format. While it mentions 'versioned vocabulary' and dimensions, it lacks explicit details on output structure or example, making it adequate but not complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema covers 100% of the parameter ('dimension') with an example and description. The tool description adds high-level context about dimensions but does not enhance the parameter meaning beyond what the schema already provides, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves 15 controlled dimensions, one derived/open aspect-ratio dimension, and two brand-specific dimensions, with versioned vocabulary. It distinguishes from sibling tools by explicitly recommending use before analyze_creative.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says 'Use this before analyze_creative when you want to know the vocabulary the system understands,' providing clear when-to-use guidance with a named sibling tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_taxonomy_performanceA
Return tag-level performance with significance gating and coverage gaps. Use this to find which taxonomy values are associated with stronger historical outcomes, which are under-observed, and which standard values have never been tried. Rows include ROAS, CTR, thumbstop, and funnel_score when performance memory exists. Supports the same date presets as the main performance summary.
| Name | Required | Description | Default |
|---|---|---|---|
| end_date | No | Optional YYYY-MM-DD end date | |
| dimension | No | Optional dimension filter, e.g. hook_type | |
| brand_name | No | ||
| start_date | No | Optional YYYY-MM-DD start date | |
| date_preset | No | Optional date window preset: all_time, last_7_days, last_30_days, last_90_days, or custom | all_time |
| spend_threshold | No | Spend floor before reporting a tag-level observation |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It discloses significance gating, coverage gaps, specific metrics returned (ROAS, CTR, etc.), and alignment with date presets. No contradictions but could mention authorization.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four sentences, front-loaded with purpose. Every sentence adds value: what it does, use cases, metrics returned, date preset alignment. No waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 6 parameters and no output schema, the description explains what the tool returns (metrics, coverage gaps) and links to related tools (date presets). Could mention output format but adequate for selection.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 83%, so the baseline is 3. The description adds context like significance gating and coverage gaps but does not elaborate on individual parameters beyond schema descriptions. The spend_threshold and date_preset parameters are adequately described in schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns 'tag-level performance with significance gating and coverage gaps', specifying verb and resource. It distinguishes from siblings like get_taxonomy (taxonomy structure) and get_meta_performance_summary (higher-level summary).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit use cases: 'find which taxonomy values are associated with stronger historical outcomes, which are under-observed, and which standard values have never been tried.' It also ties to date presets from the main performance summary, giving context for when to use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_custom_reportsC
List saved custom report definitions for a brand.
| Name | Required | Description | Default |
|---|---|---|---|
| brand_name | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must fully disclose behavior. It fails to mention that this is a read-only operation, whether results are paginated, or any permission requirements. The description is too sparse to guide safe invocation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Extremely concise (8 words) but at the cost of essential information. It lacks details about output, parameters, or usage context, making it under-specified rather than efficiently concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no output schema and no annotations, the description is critically incomplete. It does not describe the return value, error conditions, or any behavioral nuances needed for an agent to use it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description only vaguely implies the 'brand_name' parameter without explaining its meaning, format, or effect when omitted. It adds no value over the parameter name.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('List') and resource ('saved custom report definitions') with a specific scope ('for a brand'). This differentiates from sibling tools like create_custom_report, delete_custom_report, and run_saved_custom_report.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives like run_saved_custom_report or get_prebuilt_reports. No context about prerequisites or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_libraryA
Browse the authenticated user's saved analysis library (memory). Every analyze_creative call is automatically saved. Use this to recall what has been analyzed before — search by filename, hook, angle, emotion, CTA, talent, offer, audio, season, or format, then sort by recency or joined performance (spend, reach, frequency, ROAS, CTR, CPM, CPA).
| Name | Required | Description | Default |
|---|---|---|---|
| cta | No | Filter by CTA | |
| hook | No | Filter by hook type (UGC, Demo, TalkHead, etc.) | |
| sort | No | Sort by recent, spend, reach, roas, ctr, frequency, cpm, or cpa. Performance sorts use joined Meta performance when it exists. | recent |
| angle | No | Filter by messaging angle | |
| audio | No | Filter by audio type | |
| limit | No | ||
| offer | No | Filter by offer type | |
| format | No | Filter by format: video, image, carousel, landing_page, email, long_video | |
| offset | No | ||
| search | No | Search filename, naming, hook, or creative type | |
| season | No | Filter by seasonality | |
| talent | No | Filter by talent classification | |
| emotion | No | Filter by emotion | |
| brand_name | No | Exact workspace brand_name from list_workspaces |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses auto-saving behavior and that performance sorting uses joined Meta performance. No annotations, so description carries burden; it covers key behaviors but could add details on pagination or result limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three efficient sentences front-load purpose, every sentence adds value. No redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers core context (auto-saved library, filter/sort options). Lacks explanation of output format, but given no output schema, the description provides sufficient completeness for an agent to use the tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 86% (high), so baseline is 3. Description adds value by explaining searchable fields (filename, hook, etc.) and clarifying that performance sorts use joined Meta performance, enriching the schema definitions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states it browses the authenticated user's saved analysis library, mentions auto-saving from analyze_creative, and lists searchable and sortable fields. Distinguishes from siblings like analyze_creative and get_analysis.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says to use this to recall past analyses, implying context. Does not explicitly state when not to use or compare to alternatives, but the description makes it clear the tool is for browsing the library.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_naming_templatesA
List the authenticated user's saved naming templates. Templates are applied automatically to future analyze_creative results.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It only states a read operation (list), but does not disclose whether results are paginated, sorted, or filtered, nor any side effects or limitations. Minimal behavioral context beyond the basic action.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the primary purpose, and a secondary sentence adding context. No redundant or irrelevant information. Highly concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only tool with no parameters and no output schema, the description provides the essential purpose and a hint of usage (templates applied to analyze_creative). However, it lacks details on the output format, ordering, or any pagination, which would be helpful for an agent using the result.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has no parameters, so the description does not need to add parameter info. Baseline score of 4 is appropriate as the schema already covers everything.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists the authenticated user's naming templates, distinguishing it from siblings like save_naming_template, preview_naming_template, and delete_naming_template. The verb 'list' and resource 'saved naming templates' are specific and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage by mentioning templates are applied automatically to analyze_creative results, but it does not explicitly state when to use this tool versus alternatives or provide any exclusion criteria. No guidance on prerequisites or context is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_workspacesA
List the authenticated user's workspaces and their exact brand_name scope. Call this first, then reuse one returned brand_name on every library, status, report, and strategist request.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description implies a read-only list operation. It adds value by stating the returned scope (brand_name) and ordering instructions. Minor omission: doesn't explicitly state non-destructive nature, but overall sufficient.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no fluff. Front-loaded with action and purpose. Every word adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (no parameters, no output schema), the description fully conveys the tool's purpose, usage sequence, and output. No gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters exist; schema coverage is 100%. The description does not need to add parameter details. Baseline score of 4 for zero-parameter tools is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states the action (list), the resource (authenticated user's workspaces), and the returned data (brand_name scope). Differentiates itself as a prerequisite to be called first, distinguishing it from sibling tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly instructs to 'Call this first, then reuse one returned brand_name on every library, status, report, and strategist request.' Provides clear when-to-use and step-by-step guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
predict_creativeA
Legacy-named observational pre-flight. Compare a creative's tags with the brand's historical tag-level performance; this is not a forecast or causal estimate. Use the fit score and tag associations to form a one-variable controlled-test hypothesis with predeclared success and stop criteria. Pass an analysis_id or raw attributes.
| Name | Required | Description | Default |
|---|---|---|---|
| attributes | No | Creative attributes, alternative to analysis_id, e.g. {hook_type, visual_format, cta, emotion, offer_type} | |
| brand_name | Yes | ||
| analysis_id | No | Saved analysis id to score (from analyze_creative) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must fully disclose behavior. It clarifies the tool is observational and non-forecasting, implying read-only access. However, it does not explicitly state side effects, authentication needs, or output details beyond 'fit score and tag associations.' This is adequate but not thorough.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with three sentences, each serving a purpose: context, functionality, and usage. It is front-loaded and efficient, though could slightly expand on the missing brand_name without becoming overly long.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 3 parameters, no output schema, and no annotations, the description is moderately complete. It explains the core action and usage pattern but omits output format details and the meaning of brand_name. This leaves the agent with unanswered questions.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds minimal value over the input schema: it restates the alternative between analysis_id and attributes and gives an example for attributes. However, the required brand_name parameter is completely unmentioned, and schema coverage is only 67%. The description fails to explain brand_name, leaving a significant gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Compare a creative's tags with the brand's historical tag-level performance.' It specifies that it is not a forecast or causal estimate, distinguishing it from prediction tools. It also explicitly mentions forming a hypothesis with predeclared criteria, setting it apart from sibling tools like analyze_creative.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear usage context: it is a 'Legacy-named observational pre-flight' used to form controlled-test hypotheses. It instructs to 'Pass an analysis_id or raw attributes.' However, it does not explicitly state when not to use this tool or compare to alternatives like analyze_creative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
preview_naming_templateC
Preview a naming template with sample taxonomy values before saving it.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | default | |
| template | Yes | ||
| separator | No | _ |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of disclosing behavioral traits. The verb 'preview' suggests a read-only operation, which is non-destructive. However, it doesn't confirm idempotency, rate limits, or whether any side effects exist. The description is adequate but not thorough.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence, which is concise, but it lacks structure and depth. It frontloads the purpose but is too vague to be fully effective. Every word counts but it could be more informative without losing brevity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that there is no output schema and three parameters, the description is incomplete. It does not explain what the preview returns, how parameters affect the output, or reference sibling tools like 'save_naming_template'. The description is too brief for an agent to use the tool confidently.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, but it only mentions 'sample taxonomy values' without explaining the three parameters (name, template, separator). No parameter meanings or usage hints are provided, making the description minimally helpful for parameter understanding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Preview' and the resource 'naming template with sample taxonomy values'. It implies a trial run before saving, which distinguishes it from sibling tools like 'save_naming_template' or 'generate_naming'. However, it doesn't explicitly differentiate from siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives (e.g., when to preview vs. save). The description only states 'before saving it', but doesn't explain prerequisites or 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.
recommendA
Ask the Creative Strategist a question, grounded in the user's library + brand context. The strategist auto-loads patterns from prior analyses and any saved brand voice/audience/anti-patterns for the brand, then answers with concrete creative recommendations using taxonomy values. Use this for open-ended strategic questions ('what should I test next', 'how should I approach Q4', 'what kind of UGC would work for this audience').
| Name | Required | Description | Default |
|---|---|---|---|
| question | Yes | The strategic question | |
| brand_name | Yes | Brand to ground the recommendation in |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses that the tool auto-loads patterns from prior analyses and brand voice/audience/anti-patterns, and answers with concrete recommendations. This adds useful behavioral context beyond the input schema, though it does not mention authorization or rate limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and front-loaded, with two sentences that efficiently convey purpose, grounding, and usage examples. No extraneous information, and every part earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (AI-driven strategist), the description adequately explains what it does and what context it uses. There is no output schema, but the description mentions the nature of the answer ('concrete creative recommendations using taxonomy values'). It could benefit from mentioning return format or limitations, but it is largely complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the descriptions of 'question' and 'brand_name' are clear. The main description adds context (e.g., 'strategic question', 'ground the recommendation') but does not significantly enhance parameter semantics beyond the schema. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: to ask the Creative Strategist a question grounded in the user's library and brand context, and receive concrete creative recommendations using taxonomy values. It distinguishes from siblings like analyze_creative or predict_creative by focusing on open-ended strategic questions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit usage guidance by listing example questions and explaining the tool's grounding in brand context and prior patterns. It implicitly differentiates from data querying tools but does not explicitly state when not to use it or contrast with specific sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_saved_custom_reportC
Run a saved custom report definition by id.
| Name | Required | Description | Default |
|---|---|---|---|
| report_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Minimal behavioral disclosure. The description only says 'run', but does not specify side effects, idempotency, or what output the agent can expect (no output schema). No annotations provided to fill the gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence, which is concise, but it lacks structure and depth. It is front-loaded with the verb, but every sentence should earn its place; this one is too short to provide adequate context.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is insufficient for a tool with no output schema and no annotations. It does not explain what happens when a report is run, what data is returned, or if there are prerequisites or limitations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description should add meaning to the parameter. It mentions 'by id' but does not explain the format, source, or constraints of the report_id beyond what the schema indicates (integer type).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool runs a saved custom report by ID, using a specific verb and resource. However, it does not differentiate from sibling tools like 'get_prebuilt_reports' or 'list_custom_reports'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives, such as when to run a report versus viewing its definition or listing reports.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
save_brain_learningsB
Persist a reviewed get_brain_learnings slice as Brand Brain notes. Uses the same canonical audience filters; saving memory does not prove causality.
| Name | Required | Description | Default |
|---|---|---|---|
| kinds | No | ||
| limit | No | ||
| end_date | No | ||
| brand_name | Yes | ||
| cpa_target | No | ||
| start_date | No | ||
| date_preset | No | all_time | |
| roas_target | No | ||
| watch_metric | No | roas | |
| minimum_spend | No | ||
| watch_sources | No | ||
| audience_limit | No | ||
| learning_spend | No | ||
| watch_group_by | No | messaging_angle | |
| watch_signal_focus | No | all | |
| conclusion_statuses | No | ||
| watch_coverage_focus | No | all | |
| watch_minimum_points | No | ||
| audience_signal_focus | No | Optional audience signal filter when kinds includes audience: all, higher_observed_efficiency, or lower_observed_efficiency | all |
| include_gaps_in_notes | No | ||
| watch_maximum_gap_days | No | ||
| watch_trajectory_focus | No | all | |
| conclusion_recency_days | No | ||
| fatigue_decay_threshold | No | ||
| watch_minimum_calendar_days | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description bears full burden. It discloses persistence and reuse of audience filters, but omits side effects, overwrite behavior, error handling, or authorization requirements. Minimal behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with zero redundancy. Every word serves a purpose: verb, resource, prerequisite, and a critical caveat.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 25 parameters, no output schema, and no annotations, the description is too lean. Doesn't explain 'Brand Brain notes,' how slices are formed, response expectations, or parameter interactions.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 4% (only one param documented). Description adds no explanation of the 25 parameters beyond a vague reference to 'same canonical audience filters.' Fails to compensate for the low schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states 'persist' as verb and 'Brand Brain notes' as resource. Explicitly links to sibling tool get_brain_learnings, distinguishing save vs. read operation. The phrase 'reviewed get_brain_learnings slice' sets clear scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Implies usage after reviewing a slice from get_brain_learnings. The causality caveat warns against misinterpretation. No explicit when-not or alternatives, but the context is clear enough for an agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
save_custom_reportB
Save or update a reusable custom report definition for a brand. Use this when the user wants the same Motion-style combination view available later, such as hook_type x landing_page x offer_type, including custom report windows scoped to a specific test period or a richer dashboard preset with a saved view type, grouping, metric set, filters, sort, and metric preset.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Saved report name | |
| sort | No | Saved dashboard sort direction: asc or desc | desc |
| layer | No | standard, brand, or all | standard |
| limit | No | ||
| metric | No | roas, funnel_score, spend, ctr, cpa | roas |
| filters | No | Optional saved dashboard filters as field/value pairs | |
| metrics | No | Optional saved dashboard metric set, e.g. spend, roas, cpa, ctr | |
| end_date | No | Optional YYYY-MM-DD lookback end to persist with the saved report | |
| group_by | No | Saved dashboard grouping mode such as creative, dimension, or matrix | creative |
| view_type | No | Saved dashboard view mode: table, matrix, comparison, or cards | table |
| brand_name | Yes | ||
| date_range | No | Saved dashboard range preset: last_7_days, last_30_days, last_90_days, custom, or all_time | last_30_days |
| dimensions | Yes | Dimensions such as hook_type, landing_page, audience, offer_type, founder, product, or customer_segment | |
| start_date | No | Optional YYYY-MM-DD lookback start to persist with the saved report | |
| description | No | ||
| spend_threshold | No | ||
| saved_metric_preset | No | Optional saved dashboard metric preset key such as diagnostics, conversion, delivery, video, scale, or all |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It mentions save/update but does not disclose side effects (e.g., overwrites, destructive behavior, required permissions, or error cases). Incomplete for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is a single sentence that efficiently conveys purpose and examples. Could be slightly more structured (e.g., two sentences) but is not overly verbose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 17 parameters and no output schema, description provides a useful overview but omits return value information and clear differentiation from sibling tools like create_custom_report. Adequate but with gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is high (76%). Description adds high-level context for the parameter combination but does not add significant detail beyond schema for individual parameters. Meets baseline sufficient for coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states 'Save or update a reusable custom report definition for a brand' with specific examples of report types. However, it does not explicitly differentiate from the sibling 'create_custom_report' tool, leaving slight ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit usage context: 'Use this when the user wants the same Motion-style combination view available later.' Lacks explicit when-not-to-use or references to alternatives like create_custom_report or run_saved_custom_report.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
save_naming_templateB
Create or update a saved naming template using {variable} placeholders. Supports standard taxonomy fields and brand-custom variables.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | default | |
| template | Yes | Template such as {brand}_{founder}_{hook_type}_{cta}_{ratio}_{version} | |
| separator | No | _ |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided. Description does not disclose whether it overwrites existing templates (upsert), required permissions, or any destructive side effects. Minimal behavioral context beyond the basic action.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no redundancy, efficient communication of purpose and core feature.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Moderate complexity tool with 3 params and no output schema. Description covers main purpose and placeholder syntax but lacks behavioral details (upsert behavior, return value) and use case context. Adequate but not complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has 3 parameters; description adds context for template (placeholder syntax and supported fields) but adds nothing for name or separator. 33% schema coverage means description partly compensates but not fully.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states the verb (create/update), resource (naming template), and key features like {variable} placeholders and field support. Distinguishes from siblings such as list_naming_templates and delete_naming_template.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool vs. alternatives like list_naming_templates or generate_naming. Lacks context for deciding between create and update behavior.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
scan_competitorA
Scan a competitor's ads from the Meta Ad Library and return classified results plus an aggregate strategy breakdown (top hook types, visual styles, CTAs, emotions, estimated spend). Provide page_id, page_name, or keyword. Returns ad metadata, full Creative Tagger analysis per ad, and strategy insights.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| country | No | US | |
| keyword | No | ||
| page_id | No | ||
| page_name | No | ||
| brand_name | No | Optional workspace brand to attach the scan to for saved Market history and follow-up briefing. | |
| analyze_creatives | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It mentions returning results and strategy breakdown, including 'Creative Tagger analysis' and 'estimated spend'. It implies a read-only scan with no destructive effects. However, it does not mention rate limits, data freshness, or auth requirements. Overall, it provides good behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no fluff. The first sentence captures the core action and outputs; the second adds input guidance. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 7 parameters, no output schema, and no annotations, the description is fairly complete. It explains inputs and outputs well, including strategy breakdown. However, it could mention the structure of the return value (e.g., JSON format) given the absence of an output schema. Still, it provides sufficient context for agent invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 14% (brand_name has a description). The description compensates by clarifying that page_id, page_name, or keyword are alternative inputs. It explains brand_name attaches to saved history. However, limit, country, and analyze_creatives are not explained beyond their defaults. The description adds some value but not full coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it scans competitor ads from Meta Ad Library, returns classified results and strategy breakdown. It specifies inputs (page_id, page_name, or keyword) and outputs (ad metadata, Creative Tagger analysis, strategy insights). This distinguishes it from siblings like analyze_creative (individual analysis) or get_competitor_scan_history (history retrieval).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description says 'Provide page_id, page_name, or keyword' but does not explicitly state when to use this tool versus alternatives like analyze_creative or get_competitor_scan_history. No when-not-to-use guidelines are provided. The guidance is implied but not explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_brand_contextA
Create or update brand context for a brand. Stored per-user. This is the brand's long-term memory — voice, audience, what works, what to avoid. Future strategist and brief calls automatically include this context. Upserts on (user, brand_name).
| Name | Required | Description | Default |
|---|---|---|---|
| notes | No | Free-form additional context | |
| voice | No | Brand voice / tone (e.g., 'clinical, precise') | |
| brand_name | Yes | ||
| anti_patterns | No | Patterns/elements to avoid for this brand | |
| top_performers | No | Patterns/elements that work for this brand | |
| target_audience | No | Who the brand is for |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided. The description discloses that data is stored per-user and upserts on (user, brand_name), but does not mention side effects, permissions, or other behavioral traits beyond that.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences that efficiently convey action, storage, and purpose without unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema, but for a create/update tool that is acceptable. The description covers input parameters well and explains automatic inclusion in future calls, making it fairly complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is high (83%). The description adds meaning by mapping brand context to parameters like voice, audience, top_performers, anti_patterns, going beyond the schema's brief descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it 'create or update brand context' and likens it to 'brand's long-term memory' covering voice, audience, etc. It distinguishes from sibling tools like get_brand_context, set_brand_entity, and set_brand_taxonomy_value.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explains that future strategist and brief calls automatically include this context, indicating when to use. However, it does not explicitly state when not to use or name alternatives, though the context is clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_brand_entityB
Create or update a prompt/entity-based brand entity to recognize in creative analysis: founder, creator, customer, spokesperson, product, offer, customer_segment, icp, or campaign_label.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| aliases | No | ||
| brand_name | Yes | ||
| description | No | ||
| entity_type | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description only states 'create or update' but does not disclose whether updates override, any required permissions, side effects, or behavior when entity already exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence, front-loaded with action and resource, efficiently listing allowed entity types. No extraneous words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema, no examples, and parameters mostly undefined. Despite low complexity, description fails to provide sufficient context for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%; description only clarifies the entity_type parameter by listing valid values. Other parameters (name, aliases, brand_name, description) are unexplained, leaving significant gaps.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states the tool creates or updates a brand entity, with a specific list of entity types. Distinguishes from siblings like delete_brand_entity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Implied usage through entity type list, but no explicit guidance on when to use this tool versus alternatives (e.g., delete_brand_entity or set_brand_context). Lacks context for appropriate scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_brand_taxonomy_valueB
Create or update one brand-specific allowed value for an existing Creative Tagger dimension, with aliases. Example: dimension=talent, value='Stephen Lavender / Founder', aliases=['Stephen','founder'].
| Name | Required | Description | Default |
|---|---|---|---|
| value | Yes | ||
| aliases | No | ||
| dimension | Yes | ||
| brand_name | Yes | ||
| description | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so the description carries full burden. It mentions 'Create or update' implying mutation, but does not disclose behavior on conflicts, idempotency, required permissions, rate limits, or impact on existing data. The example adds some context but is insufficient.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One sentence plus an example is concise and front-loaded. No unnecessary words. However, the example could be better integrated, but overall efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the absence of annotations, output schema, and low parameter description coverage, the description is incomplete. It lacks information on error handling, response format, permissions, and behavioral details for a mutation tool. The example helps but does not cover all use cases.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so description must compensate. It only explains two of five parameters (value and aliases) via the example, and does not describe brand_name, dimension, or description. For 5 parameters with 3 required, this is inadequate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the tool creates or updates a brand-specific allowed value for a Creative Tagger dimension, with aliases. The verb 'Create or update' and resource 'brand-specific allowed value' are specific. The example further clarifies. Among sibling tools like set_brand_entity or generate_brand_taxonomy, this tool's purpose is distinct.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit instructions on when to use this tool versus alternatives, nor when not to use it. The description implies usage when adding or updating a value with aliases, but it lacks context about prerequisites (e.g., dimension must exist) or exclusion criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sync_meta_performanceA
Trigger a read-only Meta ads performance sync for a brand. Syncs ad performance rows and reports summaries by standard and brand-custom taxonomy values. Supports explicit attribution/lookback windows so agents can match the buyer's Ads Manager view. Does not create campaigns or edit budgets.
| Name | Required | Description | Default |
|---|---|---|---|
| account_id | No | ||
| brand_name | No | ||
| date_preset | No | last_30d | |
| attribution_windows | No | Optional Meta attribution/lookback windows such as 7d_click and 1d_view. Defaults to Meta's standard 7d_click + 1d_view reporting if omitted. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. Declares read-only nature and lists capabilities, but omits details on data overwriting, rate limits, or async behavior. Adequate for basic transparency but could be more comprehensive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three concise sentences: purpose, action details, constraints. No redundant information. Every sentence adds value, making it easy to scan.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema, so description should hint at return values (e.g., success confirmation, data location). It does not. Also unclear if sync is synchronous. For a 4-parameter mutation-like tool, this gap reduces completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is low (25%) with only attribution_windows described in schema. Description adds value by explaining attribution_windows (examples and default). However, account_id and brand_name lack description, relying on inference from tool context. Partially compensates for schema gaps.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the tool triggers a read-only Meta ads performance sync for a brand. It specifies syncing ad performance rows and report summaries by taxonomy values, distinguishing it from siblings like get_meta_performance_summary which likely just retrieves data.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit context for when to use: to match buyer's Ads Manager view via attribution windows. Also states what it does not do (create campaigns or edit budgets), helping agents avoid misuse. Lacks direct comparison to sibling tools but offers sufficient guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
43 tool updates
v0.2.2- First observed
analyze_creative - First observed
analyze_gaps - First observed
create_custom_report - First observed
delete_brand_entity - First observed
delete_brand_taxonomy_value - First observed
delete_custom_report - First observed
delete_naming_template - First observed
export_brain_learnings_context - First observed
export_demographics_context - First observed
export_performance_timeseries_context - First observed
generate_brand_taxonomy - First observed
generate_naming - First observed
get_analysis - First observed
get_brain_learnings - First observed
get_brand_context - First observed
get_brand_taxonomy - First observed
get_competitor_scan_history - First observed
get_creative_strategy_report - First observed
get_demographics_performance - First observed
get_library_patterns - First observed
get_meta_performance_summary - First observed
get_meta_status - First observed
get_naming_variables - First observed
get_performance_timeseries - First observed
get_prebuilt_reports - First observed
get_taxonomy - First observed
get_taxonomy_performance - First observed
list_custom_reports - First observed
list_library - First observed
list_naming_templates - First observed
list_workspaces - First observed
predict_creative - First observed
preview_naming_template - First observed
recommend - First observed
run_saved_custom_report - First observed
save_brain_learnings - First observed
save_custom_report - First observed
save_naming_template - First observed
scan_competitor - First observed
set_brand_context - First observed
set_brand_entity - First observed
set_brand_taxonomy_value - First observed
sync_meta_performance
TDQS
Each tool targets a distinct function: analyzing, retrieving, managing taxonomy, performance, reports, naming, strategy, etc. Descriptions clearly differentiate overlapping areas like analysis vs. prediction vs. library browsing. No ambiguity between tools.
All tools consistently use snake_case with a verb_noun pattern (e.g., analyze_creative, get_taxonomy, set_brand_context). Even longer names follow this pattern. No mixing of conventions.
43 tools is on the high side for a single server. While the domain is broad (analysis, taxonomy, performance, reports, strategy), the number could be streamlined. However, each tool serves a clear purpose, so it's not excessive.
The server covers the full lifecycle of creative analysis: uploading, classification, storage, taxonomy management, performance tracking, reporting, naming, competitor scanning, and strategic recommendations. No obvious gaps for the stated purpose.
Maintenance
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
Competitive ad intelligence for AI agents: portfolios, ad/content search, analytics, discovery.
Marketing intelligence API for AI agents. Real campaign data, not LLM guesses.
Conversational access to advertising performance data, creative analysis, and campaign insights
Conversational access to advertising performance data, creative analysis, and campaign insights
Related MCP Servers
- FlicenseAqualityNot gradedmaintenanceEnables AI-powered analysis, management, and optimization of Meta advertising campaigns across Facebook and Instagram, including performance insights, budget optimization, and creative testing.33-
- AlicenseAqualityDmaintenanceProvides Meta and Google Ads intelligence for AI assistants, enabling users to analyze performance, track competitors, and manage ad campaigns through natural language. It features 17 tools for generating creative concepts, scraping competitor ads, and performing deep account-level analysis.17MIT
- FlicenseNot gradedqualityDmaintenanceSearches and analyzes competitor ads and content across Meta, Google, Instagram, TikTok, and YouTube with AI-powered creative analysis and cross-platform brand discovery.1-
- AlicenseNot gradedqualityAmaintenanceEnables AI assistants to create, analyze, and optimize ad campaigns across Google Ads, Meta Ads, TikTok Ads, LinkedIn Ads, Amazon Ads, and ChatGPT Ads through natural language using 400+ tools.87MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/stephenlavender/creative-tagger-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server