Skip to main content
Glama

Server Details

Viral-content intelligence for AI agents — 7 read-only MCP tools, evidence-layer scoring.

If you are the author of this connector, you can claim ownership by verifying the domain or GitHub account it belongs to. Claimed connector authors can inspect health checks, view analytics, and manage their listing.
Status
Healthy
Uptime
100.0% over 74 days
Last Tested
Transport
Streamable HTTP · MCP 2024-11-05
URL
Repository
khan-ashifur/hooklayer
GitHub Stars
0
Server Listing
hooklayer

TDQS

A4.1/5.0

Scored across 18 tools

Disambiguation4/5

Most tools target clearly distinct operations, and borderline pairs like score_hook vs predict_virality (hook vs full script), trend_pulse vs find_viral_template (rising trends vs copyable structures), and product_scout vs analyze_product (rank a field vs interrogate one) are explicitly differentiated in their descriptions. The creator lifecycle (analyze_account, watch_account, get_changes, list_watches) is related but separable. Only mild surface overlap keeps it from a 5.

Naming Consistency4/5

The dominant convention is verb_noun (analyze_account, get_saved_research, list_watches, save_research, search_videos, watch_account), and the save/get/list triad is neatly consistent. A few outliers break orientation, notably noun-first names product_scout and trend_pulse and the noun_to_noun brief_to_blueprint. Overall predictable with minor deviations.

Tool Count4/5

18 tools sit at the heavy end but the surface spans several genuine workflows (creator analysis, product/shop intelligence, content generation, saved-research management, watches), so most tools earn their place. It is slightly over what a single-purpose server would need but not bloated or redundant.

Completeness4/5

The surface covers the main lifecycle well: analysis, product scouting/validation, content creation, plus save/get/list for saved research and watch/list/change-track for creators. Minor gaps exist — there is no explicit delete or unwatch/archive operation despite list_watches and list_saved_research surfacing archived/active state — but agents can work around these.

Available Tools

18 tools
analyze_accountA
Idempotent
Inspect

Analyze a TikTok, YouTube, or Instagram creator by handle or channel ID. Returns viral DNA scores (viral_dna_score, replicability_score, originality_score, consistency_score, audience_fatigue), content patterns, format fingerprint, top recent videos with transcripts, content gaps, a headline_insight object (the single largest quantified performance gap across length, hook, format, and cadence, plus its so_what), and suggested next research steps. Use when the user asks to analyze a creator, account, channel, or competitor. Supports TikTok (full transcript extraction), YouTube (Shorts and longform analysis with captions when available), and Instagram (Reels with best-effort transcripts).

NameRequiredDescriptionDefault
sinceNoOptional ISO date (e.g. "2026-04-01"). Filter the candidate video pool to those posted on/after this date. Useful when the user asks "show me what they've done THIS month" — the route returns honest empty + warning when the filter matches 0, no credits charged. Use either `since` or `window`, not both.
handleYesCreator handle (with or without @ prefix) or YouTube channel ID. Examples: "@mrbeast", "mrbeast", "UCX6OQ3DkcsbYNE6H8uQQuVA".
windowNoRecency sugar — same effect as `since` but takes a friendlier bucket. Maps to a since-cutoff at request time. Use either `since` or `window`, not both.
platformNoPlatform to analyze. "tiktok" (default) returns full pipeline with transcripts. "youtube" analyzes recent Shorts via YouTube Data API + Innertube caption extraction — videos with captions disabled or geoblocked resolve to transcript: null. "instagram" (shipped 2026-07-06) fetches the creator's reels via ScrapeCreators Instagram API + best-effort reel transcripts on the top 5 — Instagram data lacks lifetime totalLikes so that field defaults to 0.
recent_onlyNoWhen true, hard-cap the candidate pool to videos posted in the last 90 days. Stricter than `window=90d` because it never falls through to archival data on a thin recent corpus.

Output Schema

NameRequiredDescription
profileNoCreator profile (handle, bio, followers, following, total_likes, total_videos)
from_paygNoWhether credits came from pay-as-you-go balance
steal_mapNoActionable elements to replicate from this creator
viral_dnaNoFive viral DNA scores (0-100 each)
content_gapsNoUntapped content opportunities the creator is missing
recent_videosNoTop recent videos with view counts, transcripts, and engagement
headline_insightNoThe largest quantified performance gap for this creator, plus its implication. Presentation-neutral data — the caller decides whether and how to surface it.
pattern_analysisNoContent pattern breakdown (posting cadence, topic clusters)
credits_remainingNoCredits remaining after this call
from_subscriptionNoWhether credits came from subscription
recommended_chainNoSuggested next tool calls with pre-filled parameters — advisory only, agent decides whether to execute
format_fingerprintNoDominant content format patterns (durations, styles, edit types)

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=false, openWorldHint=true, idempotentHint=true, destructiveHint=false, so the safety profile is covered. The description adds genuine behavioral detail beyond that: YouTube videos with captions disabled or geoblocked resolve to transcript: null, Instagram lacks lifetime totalLikes so it defaults to 0, and an empty filter match returns a warning with no credits charged. It does not explain the general credit cost implied by readOnlyHint=false, so it falls short of a 5.

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

Conciseness4/5

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

Dense but well front-loaded: purpose and return payload come first, then usage trigger, then platform support. Platform capabilities are stated twice (opening sentence and closing sentence), which is mild redundancy, but every sentence carries substantive information.

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

Completeness4/5

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

With an output schema present, the description needn't enumerate return values, and it covers usage, platform scope, and platform-specific limitations, so an agent has enough to call it correctly. Minor gaps remain around credit cost and when to choose this over watch_account, but nothing essential is missing.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents handle, since, window, platform, and recent_only in detail, including the since/window mutual exclusion. The description only restates that input is a handle or channel ID and describes per-platform behavior rather than adding parameter-level meaning, so the baseline 3 applies.

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

Purpose5/5

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

States a specific verb (analyze) and resource (creator account by handle or channel ID) and enumerates the concrete outputs (viral DNA scores, format fingerprint, headline_insight). It clearly separates itself from siblings like watch_account or predict_virality by scoping to one-shot account analysis across three named platforms.

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

Usage Guidelines4/5

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

Explicitly says 'Use when the user asks to analyze a creator, account, channel, or competitor,' which gives the agent a clear trigger condition. However, it never names an alternative or exclusion — for example, when to prefer watch_account for ongoing monitoring versus this one-shot analysis — so routing among siblings is left to inference.

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

analyze_productAInspect

Deeply validate ONE TikTok Shop product before committing money or content to it. Give it a product_id from product_scout (or any TikTok Shop product URL) and it reads the listing, samples reviews across the full depth rather than only the most recent page, pulls comparable competitors, and returns what buyers actually say. You get: provider-reported sold / review / rating / price evidence; buyer voice split into what buyers praise and what they complain about; unmet needs and purchase objections in buyers' own words; return and fulfilment signal; a Why Now read; competitor intelligence and where rivals are weak; risks separated into product risks, market risks and data-confidence risks; and a 'how to beat this' synthesis of concrete differentiation angles traced back to specific review evidence. Every section states whether it resolved - provider facts, HookLayer analysis and genuinely unavailable evidence are distinguishable, and thin evidence is reported as thin rather than filled in. There is no revenue or GMV output and sold counts are never multiplied by price. Use product_scout first to find candidates, then this to decide between them. Cost: 10 credits. Requires the shop_intelligence entitlement.

NameRequiredDescriptionDefault
marketNo2-letter ISO region code or 'GLOBAL'. Defaults to US. Should match the market the product was found in.
product_idNoTikTok Shop numeric product id, as returned by product_scout in opportunities[].product_id. Supply this or product_url.
product_urlNoAny TikTok Shop product URL (tiktok.com/shop/pdp/..., shop.tiktok.com/.../pdp/..., /view/product/...). Used when the user pastes a link instead of an id.
include_competitorsNoDefault true. Competitor discovery and the cross-product buyer-pain map are the differentiated part of this report; set false only when the caller explicitly wants the single-product read and fewer provider calls. The credit cost is the same either way.

Output Schema

NameRequiredDescription
regionNo
successYes
economicsNoPrice and margin context. Contains no revenue or GMV figure.
fetched_atNo
product_idNo
provenanceNoEndpoints called, provider call count, staleness, and which fields the model wrote.
buyer_voiceNoReview sample summary including rating histogram and sampled count.
competitionNoPercentile placement against the peer set, when one was resolvable.
analyst_readNoModel-written operator summary grounded in the sections above. Falls back to a deterministic version if the model call fails.
market_proofNoDemand evidence section. Carries available / headline / data / evidence / risks / unknowns / confidence.
buyer_pain_mapNoThemes shared across this product and its competitors, with differentiation candidates. Rates are per-product, so a deeply sampled product does not outweigh a shallowly sampled rival.
analyst_verdictNoDeterministic verdict and confidence.
creator_contentNo
source_coverageNoWhich sections resolved and which did not.
validation_readNoExtended validation narrative. Null when include_competitors was false.
content_patternsNo
current_evidenceNoComposite score from currently observable evidence, with what was unavailable.
evidence_classesNoExplicit map so the host never has to guess provenance: fact[] came from the provider, analysis[] was derived by HookLayer, unavailable[] had insufficient evidence.
product_identityNotitle, shopName, category, productUrl, imageUrl.
credits_remainingNo
recommended_chainNoSuggested next calls, chosen from the evidence this analysis actually found. SUGGESTIONS ONLY - present them and let the user pick. Do not call them automatically; each one costs the user credits.
competitor_landscapeNoComparable products and where they are weak. available:false when competitor discovery did not resolve.
evidence_interpretationNoWhy Now plus risks split into product / market / data_confidence, each citing the observation that triggered it. Only claims what is observable now; never asserts a trend it has no history for.
buyer_voice_intelligenceNoOpportunity-grade review read: sampleComposition, love, painPoints, unmetNeeds, purchaseObjections, returnSignal, fulfilmentComplaints (kept separate from product faults), contradictions, and howToBeatThis. Null when reviews did not resolve - null means no evidence, not 'no complaints'.

TDQS

A4.8/5.0
Behavior5/5

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

Annotations cover the safety profile (readOnlyHint=false, openWorldHint=true, idempotentHint=false, destructiveHint=false), and the description adds substantial context beyond them: 10-credit cost, entitlement requirement, no GMV/revenue output, sold counts never multiplied by price, evidence provenance being distinguishable, and thin evidence reported as thin rather than fabricated. This is unusually rich behavioral disclosure.

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

Conciseness4/5

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

Front-loaded correctly — purpose, input, and method come before the output enumeration. The 'You get:' list is long and partly duplicates the output schema, but each item is decision-relevant for a costly tool rather than filler.

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

Completeness5/5

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

For a complex, credit-costing, entitlement-gated analysis tool, the description covers inputs, cost, gating, output shape, evidence-handling caveats, and sibling sequencing. Nothing needed to invoke it correctly is missing, even though the output enumeration is arguably redundant given the output schema.

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

Parameters4/5

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

Schema coverage is 100%, so parameters are already documented. The description still adds selection rationale for include_competitors ('the differentiated part of this report; set false only when... the credit cost is the same either way') and orients market/product_id to their source, going modestly beyond the schema.

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

Purpose5/5

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

States a specific verb and resource ('Deeply validate ONE TikTok Shop product') and immediately positions itself against product_scout by framing the goal as 'before committing money or content to it.' An agent can distinguish it from all siblings, especially product_scout, without opening any schema.

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

Usage Guidelines5/5

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

Explicit sequencing: 'Use product_scout first to find candidates, then this to decide between them.' It also names the precondition ('Requires the shop_intelligence entitlement') and the cost (10 credits), which are the practical gates an agent needs before calling.

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

brief_to_blueprintAInspect

Turn a brand brief that just landed into a one-page creative blueprint the manager can forward to the creator and to the brand contact — hook + template + hashtag combo + trend-velocity check + shoot instructions, in one call. Use when a brand sends a product and needs content on a tight turnaround (e.g. "product arrived, need content in 48 hours") and the manager needs a defensible direction with no research time. Chains find_viral_template + trend_pulse + score_hook + predict_virality upstream but exposes them as one MCP tool so agents don't stitch them manually. Cost 7 credits (bundle discount vs firing the chain manually). Returns a blueprint object with verdict (GO | NEEDS_MORE_DATA | NO_GO) and verdict_reason, a hook (text + trend_still_alive: up-slope | plateau | fading | unknown), script, hashtags, shoot notes, risk flags, and manager talking points, plus a quality object (level + reason) describing completeness; when quality.level is not "full", or verdict is NEEDS_MORE_DATA or NO_GO, the blueprint is a starting point rather than a shippable direction.

NameRequiredDescriptionDefault
nicheYesOne of the 18 supported niches (Beauty & Skincare, Fitness & Health, Food & Cooking, Fashion & Style, Tech & Gadgets, Finance & Business, Education & Learning, Travel & Adventure, Comedy & Entertainment, Gaming, Lifestyle & Wellness, Parenting & Family, DIY & Crafts, Music & Dance, Pets & Animals, Sports, Motivation & Self-Help, SaaS & AI Tools). Loose names like "beauty" or "fitness" are auto-mapped.
regionNoOptional 2-letter ISO country code (US, GB, CA, etc.). Threads to niche + trend upstreams.
productYesWhat the brand sent (name + one line, e.g. "Athletic Greens AG1 travel packs — 30-count individual sachets for travel")
platformNoTarget platform. Both TikTok and Instagram Reels supported (shipped 2026-07-06). When set to "instagram", the product-corpus lookup runs against Instagram Reels via ScrapeCreators, and the creator context (if creator_handle passed) fetches Instagram reels. Default: tiktok.
creator_handleNoOptional creator handle (with or without @). If provided, the blueprint hook and script match THEIR voice patterns from recent videos. Highly recommended — a blueprint without creator context is generic.
deadline_hoursNoHow many hours until the video must be posted. Default 48. Affects trend-still-alive scoring — a 24-hour deadline needs a trend on the up-slope, not one that just plateaued.
product_categoryYesUmbrella category (e.g. "greens powder", "sunscreen", "protein bar")

Output Schema

NameRequiredDescription
as_ofNo
statsNo
appliedNoEcho of parameters resolved after canonicalization
qualityNo
successNo
blueprintNo
provenanceNo
credits_remainingNo

TDQS

A4.4/5.0
Behavior4/5

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

Annotations cover the safety profile (readOnlyHint=false, openWorldHint=true, non-idempotent, non-destructive), and the description adds substantial extra context: a 7-credit cost with a stated discount rationale, the upstream chain it wraps, and importantly the non-obvious caveat that when quality.level is not "full" or verdict is NEEDS_MORE_DATA/NO_GO the output is not shippable. It stops short of describing auth/prerequisites, so it is strong but not exhaustive.

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

Conciseness4/5

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

The outcome is front-loaded in the first clause ("Turn a brand brief ... into a one-page creative blueprint") and every subsequent sentence adds distinct information (trigger, chain, cost, return shape, caveat). It is dense and the first sentence runs long, but there is little filler.

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

Completeness5/5

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

For a 7-parameter, high-complexity orchestration tool, the description covers trigger conditions, cost, upstream dependencies, the shape of the result, and the interpretation caveat for degraded verdicts. An output schema exists, yet the description still summarizes return fields in a way that helps an agent decide whether the result is usable.

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

Parameters3/5

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

Schema description coverage is 100%, including the enum mappings, region threading, platform behavior, creator_handle voice matching, and how deadline_hours affects trend scoring — so the schema carries the parameter burden. The description adds only high-level phrasing ("trend-velocity check", "creator context") that does not extend beyond the field-level docs, which is the expected baseline when coverage is complete.

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

Purpose5/5

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

States a specific transformation (brand brief → one-page creative blueprint) and enumerates exactly what the artifact contains (hook, template, hashtag combo, trend-velocity check, shoot instructions). It also distinguishes itself from siblings by naming the chain it bundles (find_viral_template + trend_pulse + score_hook + predict_virality) and explaining they are exposed as one tool.

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

Usage Guidelines5/5

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

Gives an explicit triggering scenario ("product arrived, need content in 48 hours") and the persona/condition (manager needs a defensible direction with no research time). It also implicitly routes agents away from manually stitching the four upstream sibling tools.

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

compare_saved_productsA
Read-onlyIdempotent
Inspect

Compare 2 to 4 saved analyze_product results side by side using only the stored evidence (identity, market proof, economics, competition, creator content, verdict). Read-only, 0 credits, no new analysis. Fields the source never reported are returned as not present, never estimated, and a freshness warning is included when the evidence ages differ by more than two days. Ids the user does not own come back in missing[]. Use after list_saved_research when the user asks which of their saved products to pursue.

NameRequiredDescriptionDefault
saved_idsYessaved_id values of product_analysis results

Output Schema

NameRequiredDescription
notesNo
missingNoRequested ids that are not saved product analyses owned by this user
sectionsNo
participantsNo
dashboard_urlNo
credits_chargedNoAlways 0
freshness_warningNonull when all evidence is within two days of each other

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already cover the safety profile (readOnly, idempotent, non-destructive), yet the description adds substantial behavior: unreported fields come back as 'not present' rather than estimated, a freshness warning fires when evidence ages differ by more than two days, and unowned ids surface in missing[]. These are non-obvious traits an agent could not infer from structure.

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

Conciseness4/5

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

Front-loaded with the core action and scope, then a tight sequence of constraints; essentially every sentence carries distinct information. It runs long enough that a couple of clauses (e.g., the enumerated facet list) could be trimmed, keeping it just short of a 5.

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

Completeness5/5

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

An output schema exists, so return values need no prose. Against that, the description covers input bounds, ownership failure handling, evidence-freshness caveats, and the sequencing context, leaving nothing an agent needs to call it correctly.

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

Parameters4/5

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

With 100% schema coverage the schema already documents saved_ids, its 2-4 bounds, and the id pattern, so baseline is 3. The description adds meaning beyond the schema by clarifying what happens to ids the user does not own (they land in missing[]), covering the failure case the schema cannot express.

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

Purpose5/5

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

States a specific verb (compare), resource (2-4 saved analyze_product results), and scope (side by side using only stored evidence) with the exact facets compared. An agent can distinguish it from analyze_product and list_saved_research without opening any schema.

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

Usage Guidelines4/5

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

Explicitly sequences the tool ('Use after list_saved_research') and gives the triggering user intent ('which of their saved products to pursue'). It also rules out fresh analysis, but never names the sibling an agent should reach for instead when the user wants new analysis, so it stops short of full when-not/alternative coverage.

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

find_viral_templateA
Idempotent
Inspect

Find proven viral templates in a niche with example videos. Returns templates ranked by performance, including hook patterns, format structures, average views, and example URLs. Use when the user asks what's working in a niche or wants concrete copyable structures. Supports the 18 canonical niches with optional angle narrowing via query parameter for more specific results (e.g., "postpartum strength" within Fitness).

NameRequiredDescriptionDefault
nicheYesOne of the 18 supported niches (Beauty & Skincare, Fitness & Health, Food & Cooking, Fashion & Style, Tech & Gadgets, Finance & Business, Education & Learning, Travel & Adventure, Comedy & Entertainment, Gaming, Lifestyle & Wellness, Parenting & Family, DIY & Crafts, Music & Dance, Pets & Animals, Sports, Motivation & Self-Help, SaaS & AI Tools). Loose names like "travel" or "fitness" are accepted but pass the canonical form when possible.
queryNoOptional angle narrowing within the niche. E.g. niche="Fitness & Health" + query="postpartum strength" returns only postpartum-strength templates, not generic gym. Templates are scored by query-token match against title+description+hashtags; zero-match templates are dropped. Leave empty for niche-wide top templates.
regionNoOptional 2-letter ISO country code (US, GB, BR, JP, IN, PH, etc.). Threads to YouTube Search regionCode + TikTok niche query. Reddit niche signals are global and ignore this param. Pass when the user wants templates that resonate with a specific local audience.
windowNoRecency filter. Drops example videos older than the window. Note: TikTok hashtag-corpus rows often lack timestamps and are excluded when window is set — surfaces as a quality warning so callers can decide whether to broaden.
platformNoPlatform to source templates from. "tiktok" (default) uses the full niche-aggregator (YouTube + Reddit + TikTok hashtags). "instagram" (2026-07-06) is keyword-search-only — the Instagram niche-aggregator isn't plumbed yet, so `query` becomes REQUIRED on IG. Output rubric_version signals which path ran: find_viral_template.v1 (main), .v2-keyword-fallback (TikTok fallback), .v3-instagram-keyword-only (IG-only path).
min_viewsNoOptional filter — only return examples above this view count

Output Schema

NameRequiredDescription
nicheNoThe niche searched
from_paygNoWhether credits came from pay-as-you-go balance
templatesNoRanked viral templates with hook patterns and example URLs
credits_remainingNoCredits remaining after this call
from_subscriptionNoWhether credits came from subscription

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare openWorldHint, idempotentHint, and readOnlyHint=false, so the safety profile is partly covered. The description adds that results are ranked by performance, but it does not explain why a pure 'find' operation carries readOnlyHint=false, nor does it surface the platform/fallback behavior that lives only in the schema. With annotations present, a 3 reflects modest added context.

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

Conciseness4/5

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

Three sentences, front-loaded with the core purpose before usage and parameter notes. No filler, though the final sentence's parameter detail is somewhat redundant with the schema.

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

Completeness4/5

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

With an output schema, rich annotations, and 100% schema coverage, the description need only convey purpose and routing, which it does. Nothing critical is missing for an agent to invoke it correctly.

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

Parameters3/5

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

Schema description coverage is 100%, so every parameter (niche, query, region, window, platform, min_views) is already documented in the schema. The description restates the query-narrowing and 18-niche concepts already covered there, adding no new semantics, so baseline 3 applies.

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

Purpose4/5

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

States a specific verb and resource ('Find proven viral templates in a niche with example videos') and describes the ranked-by-performance output with hook patterns and example URLs, which is distinct from generic search siblings like search_videos or trend_pulse. It does not explicitly name which sibling to prefer, so it stops short of a 5.

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

Usage Guidelines4/5

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

Gives clear triggering context ('Use when the user asks what's working in a niche or wants concrete copyable structures'), which tells the agent when this tool fits. It offers no explicit when-not conditions or named alternatives among siblings, so it lacks the exclusion guidance a 5 would require.

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

get_changesAInspect

Detect what changed since the last saved baseline for a tracked creator. Runs a fresh analyze_account under the hood, compares against the most recent CreatorSnapshot, persists the new snapshot, and returns ONLY the meaningful shifts (format, viral DNA, engagement, hook pattern, topic pillars, outlier videos). Use when the user asks 'what changed with @creator', 'anything new', 'check this competitor again', 'what's different since last time', 'check my tracked creator', or 'has anything changed'. Requires a previously tracked creator (call analyze_account + watch_account first if there is no baseline yet). Costs 5 credits per call because the fresh analysis is genuine (not cached). Returns a top_action pointing at the single next tool worth calling given the detected change. Returns status='no_meaningful_change' honestly when nothing shifted — no fabricated deltas.

NameRequiredDescriptionDefault
handleNoCreator handle (with or without @). Required if watch_id is not provided.
platformNoPlatform the tracked creator publishes on. Required if watch_id is not provided.
watch_idNoWatch identifier returned by watch_account or list_watches. Preferred over (platform, handle) when you have it — the ownership check is exact.

Output Schema

NameRequiredDescription
statusNochanges_found = meaningful shifts detected; no_meaningful_change = fresh analysis ran, nothing shifted enough to matter; baseline_refreshed = prior snapshot used an incompatible schema, new baseline saved; not_tracked = no active CreatorWatch for that creator; no_baseline = watch exists but has no snapshots yet.
changesNo
creatorNo
platformNo
top_actionNoSingle most useful next tool call given the detected changes. null when nothing meaningful shifted.
snapshot_countNoTotal snapshots saved for this watch after this call.
credits_chargedNo
high_importanceNo
medium_importanceNo
meaningful_changesNoCount of high + medium importance changes.
current_snapshot_atNo
previous_snapshot_atNo

TDQS

A4.8/5.0
Behavior5/5

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

The description goes far beyond the annotations: it discloses that the tool runs a fresh (non-cached) analysis costing 5 credits, persists the new snapshot (mutation), returns only meaningful shifts, honestly returns status='no_meaningful_change' when nothing shifted, and returns a top_action pointing to the next tool. This paints a complete behavioral picture and aligns with the annotations (readOnly=false, idempotent=false), adding cost and state-change context the annotations don't convey.

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

Conciseness4/5

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

The description is longer than average but every sentence earns its place: purpose, mechanism, trigger phrases, prerequisite, cost, return behavior, and honesty note. It's front-loaded with the core purpose and mechanism, and while it could be tightened slightly, the density of useful information keeps it from feeling bloated.

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

Completeness5/5

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

Given the tool's complexity (it runs an analysis, persists state, and returns a rich result including a top_action), the description covers all decision-relevant information: trigger phrases, prerequisites, cost, return semantics (meaningful shifts vs. no_meaningful_change), and the existence of a top_action. The output schema defines the exact return structure, so the description doesn't need to list fields. Nothing an agent needs to decide whether and how to call it is missing.

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

Parameters4/5

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

The schema already documents all three parameters at 100% coverage, so the description doesn't need to re-explain them. However, it adds one valuable piece of guidance: that watch_id is preferred over (platform, handle) because the ownership check is exact. This is extra semantics that helps the agent pick the right parameter, justifying a score above the baseline 3.

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

Purpose5/5

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

The description opens with a precise verb-resource pair ('Detect what changed since the last saved baseline for a tracked creator') and immediately differentiates it from siblings: it runs a fresh analyze_account under the hood, compares against a CreatorSnapshot, and returns only meaningful shifts. It even names the specific change categories (format, viral DNA, etc.), making the tool's purpose unmistakable and clearly distinct from analyze_account or watch_account.

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

Usage Guidelines5/5

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

Explicitly lists trigger phrases ('what changed with @creator', 'anything new', 'check this competitor again') and states the prerequisite (a previously tracked creator, with a callout to call analyze_account + watch_account first if no baseline exists). This tells the agent exactly when to use the tool and what precondition must be met, which is strong usage guidance.

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

get_saved_researchA
Read-onlyIdempotent
Inspect

Retrieve one saved result in full (the stored research payload, what was asked, timestamps) by its saved_id. Read-only, 0 credits. Only the authenticated user's own results resolve; any other id is not found. Use when the user wants to reuse, re-read or build on something they saved earlier instead of paying to run the tool again.

NameRequiredDescriptionDefault
saved_idYes

Output Schema

NameRequiredDescription
kindNo
titleNo
resultNoThe stored research payload, exactly as saved (allowlisted fields only)
saved_atNo
saved_idNo
tool_nameNo
product_idNo
source_refNo
is_archivedNo
product_urlNo
dashboard_urlNo
input_summaryNo
schema_versionNo
credits_chargedNoAlways 0
source_timestampNo

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and closed-world, so safety is covered; the description still adds two things the annotations cannot: zero credit cost and the ownership scoping rule ('only the authenticated user's own results resolve; any other id is not found'). The 'Read-only' clause is redundant with annotations but the cost and auth facts are substantive.

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

Conciseness5/5

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

Three sentences, front-loaded with the action and return contents, then cost/safety, then the routing condition. Every sentence carries distinct information; nothing is padding.

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

Completeness5/5

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

For a single-parameter retrieval tool with an output schema and full annotation coverage, the description supplies the remaining unknowns: what comes back, what it costs, who can read what, and when to prefer it. An agent can call it correctly and interpret the failure case.

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

Parameters4/5

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

Schema coverage is 0% – the saved_id pattern constraint is undocumented in the schema. The description compensates by explaining the id's semantics: it must be one of the caller's own saved results and foreign ids resolve as not found, which is the key behavior an agent needs to interpret a lookup failure.

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

Purpose5/5

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

Specific verb (Retrieve) plus resource (one saved result in full) with a parenthetical enumerating the payload contents. The word 'one' and the scope 'in full' cleanly separate it from list_saved_research and save_research without requiring the schema.

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

Usage Guidelines4/5

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

Explicit when-to-use trigger: 'when the user wants to reuse, re-read or build on something they saved earlier instead of paying to run the tool again.' That contrast with re-running a paid tool is a genuine alternative-routing signal, though no sibling (e.g. list_saved_research) is named for the discovery case.

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

list_saved_researchA
Read-onlyIdempotent
Inspect

List the authenticated user's saved HookLayer research (newest first by default). Read-only, 0 credits. Filter by kind, search titles, choose sort newest|oldest|title, include archived, and page with the returned cursor. Returns summaries (id, kind, title, timestamps, dashboard link), not the full result; call get_saved_research for one. Use when the user asks 'what have I saved', 'show my saved products', 'find the analysis I saved for @handle'.

NameRequiredDescriptionDefault
kindNo
sortNo
limitNo
queryNoCase-insensitive title search
cursorNonext_cursor from the previous page
archivedNoDefault active

Output Schema

NameRequiredDescription
limitNo
resultsNo
next_cursorNonull on the last page
dashboard_urlNoThe Saved Research page in HookMafia
credits_chargedNoAlways 0

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, non-destructive, closed-world, so the safety profile is covered. The description adds genuinely new behavioral context: zero credit cost, cursor-based paging, and the fact that results are summaries rather than full research payloads. It does not state a default/max page size, which is the only notable gap.

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

Conciseness4/5

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

Front-loaded with the core purpose, then filtering/paging, then return shape, then usage triggers – a logical order with no filler sentences. It is dense and slightly long, but each clause carries distinct information.

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

Completeness5/5

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

For a 6-param list tool with an output schema present, the description covers filtering, sorting, paging, return content, cost, and routing to the detail sibling. An agent has everything needed to call it correctly.

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

Parameters4/5

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

Schema coverage is only 50%, so the description does needed work: it names the kind filter, title search, the sort enum (newest|oldest|title), the archived inclusion (and that active is default), and the cursor for paging. Only 'limit' is left undocumented outside the schema.

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

Purpose5/5

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

States a specific verb+resource ('List the authenticated user's saved HookLayer research') plus the default ordering, and explicitly distinguishes itself from the sibling get_saved_research ('Returns summaries ... not the full result; call get_saved_research for one'). An agent can route between the two without opening either schema.

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

Usage Guidelines5/5

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

Explicit when-to-use block with three concrete user phrasings ('what have I saved', 'show my saved products', 'find the analysis I saved for @handle') and a named alternative (get_saved_research) for the single-item case. Nothing is left to inference.

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

list_watchesA
Read-onlyIdempotent
Inspect

List every creator the authenticated user is tracking. Read-only, 0 credits. Returns each watch's id, platform, handle, when it was created + last updated, when the last snapshot was taken, and whether it's active. Does NOT return the snapshot payload itself — call watch_account (idempotent) to refresh a baseline. Use when the user asks 'what am I tracking', 'show my watches', 'list creators'.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription
totalNo
watchesNo

TDQS

A4.9/5.0
Behavior5/5

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

Beyond annotations (readOnly, idempotent), the description reveals response fields, first-class exclusions (snapshot payload), the associated cost (0 credits), and a fallback action (watch_account). Complements annotations without contradiction.

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

Conciseness5/5

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

Every sentence adds critical information: purpose, safety/cost note, return fields, exclusions, and usage triggers. Front-loaded with the main action and scoped concisely for a list operation.

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

Completeness5/5

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

For a zero-parameter read-only tool, the description covers behavior, response contents, and exclusions comprehensively. An output schema exists to handle return structure, so nothing is left ambiguous.

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

Parameters4/5

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

Zero parameters make the schema trivially complete (100% coverage). The description adds no parameter-level details because none are needed; baseline of 4 is appropriate.

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

Purpose5/5

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

States a specific verb (list), resource (creators tracked), and scope (authenticated user's), clearly distinguishing it from siblings like watch_account. The description also notes what it does NOT do (no snapshot payload) and references the sibling, 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.

Usage Guidelines5/5

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

Explicitly provides trigger phrases and use cases ('what am I tracking', 'show my watches', 'list creators') and tells when to use the alternative tool (refresh baseline via watch_account). Covers both when and 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.

match_voiceAInspect

Extract a creator's voice DNA from reference samples and rewrite a draft in their style. Requires at least 3 reference samples (video URLs or text). Returns voice profile (energy, humor, vocabulary, signature phrases), reusable prompt instructions, and the rewritten draft. Use when the user wants to write in another creator's style or match a specific voice.

NameRequiredDescriptionDefault
draftYesThe text to rewrite
reference_samplesYesAt least 3 reference samples — TikTok/YouTube/Instagram URLs or raw text

Output Schema

NameRequiredDescription
from_paygNoWhether credits came from pay-as-you-go balance
voice_profileNoExtracted voice DNA profile
rewritten_draftNoThe input draft rewritten in the matched voice
credits_remainingNoCredits remaining after this call
from_subscriptionNoWhether credits came from subscription
prompt_instructionsNoReusable prompt to replicate this voice

TDQS

A4.1/5.0
Behavior4/5

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

Annotations are minimal (readOnlyHint=false, no value for destructive or idempotent), and the description adds key behavioral constraints: a minimum of 3 reference samples and the fact that it returns a voice profile, reusable prompts, and the rewritten draft. It doesn't explain side effects or permissions, but the operation is a text transformation, so details are sufficient.

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

Conciseness5/5

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

The description is two sentences with no wandering. It front-loads the core purpose, then quickly lists requirements and output. Every clause adds information; no redundancy or filler.

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

Completeness5/5

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

For a moderately complex tool (two inputs, output schema present), the description covers the goal, the required inputs, the output structure, and the typical use-case. With an output schema provided, the description doesn't need to explain the return values, and it still manages to state what the result includes. Nothing critical is missing.

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

Parameters3/5

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

Schema description coverage is 100%, and the description adds no extra meaning beyond what the schema provides (minItems on reference_samples, descriptions of draft and reference_samples). It touches on the requirement of 'at least 3 reference samples' but that's already encoded. Baseline 3 applies.

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

Purpose4/5

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

The description clearly states the tool's function: extract a creator's voice DNA and rewrite a draft in their style. It provides a specific verb+resource and so distinct outcome that it will be useful to an agent. While it doesn't explicitly name alternatives or siblings, its specificity (voice DNA, style matching) distinguishes it from casual rewriting tools.

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

Usage Guidelines4/5

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

Explicit 'Use when the user wants to write in another creator's style or match a specific voice' gives clear direction. However, it doesn't mention when not to use it or point to an alternative (e.g., viral_remix or analyze_account), so it offers a clear context but no exclusions.

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

predict_viralityA
Idempotent
Inspect

Score a draft script for viral potential with adversarial verification. Returns a virality score, recommendation (ship/rework/no-go), viral DNA breakdown with evidence, attack vectors analysis, and calibration metrics. Use when the user has a finished draft and wants pre-publish verification. Pass either a script string or a video URL.

NameRequiredDescriptionDefault
nicheNoNiche context
scriptYesThe draft script to predict on (or a video URL — auto-extracts transcript)

Output Schema

NameRequiredDescription
blueprintNoRetention diagnosis with weak seconds identified
from_paygNoWhether credits came from pay-as-you-go balance
viral_dnaNoHook type, structure, emotional triggers breakdown
share_reasonNoWhy viewers would share this content
target_emotionNoPrimary emotion the content targets
virality_scoreNoOverall virality prediction (0-100)
credits_remainingNoCredits remaining after this call
from_subscriptionNoWhether credits came from subscription

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already provide idempotentHint=true and destructiveHint=false, covering safety. The description adds behavioral context: 'adversarial verification' implies a rigorous analysis, and the list of outputs (attack vectors, calibration metrics) gives insight into the tool's processing. It also notes video URL auto-transcription, an external-access behavior, which is not in annotations. No contradiction with annotations.

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

Conciseness5/5

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

Two concise sentences with zero fluff. The first sentence states the action and outputs; the second gives usage condition and input options. The critical information is front-loaded, and every clause earns its place.

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

Completeness5/5

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

This is a complex tool with multiple output components, but the description enumerates all of them. It clarifies the input alternatives (script or URL) and the intended usage scenario. Given that an output schema exists, the description does not need to explain return values, and it covers the essential aspects an agent needs to invoke it correctly, distinguishing it from sibling tools.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents both parameters. The description adds that the script should be a 'finished draft' for pre-publish verification, which is useful context, but it largely repeats the schema's note about accepting a video URL. No significant new meaning beyond the schema.

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

Purpose5/5

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

The description states a specific verb ('score') and a specific resource ('a draft script'), and lists unique outputs (virality score, recommendation, viral DNA breakdown, attack vectors, calibration metrics) that distinguish it from siblings like score_hook and find_viral_template. The phrase 'adversarial verification' further differentiates its approach.

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

Usage Guidelines4/5

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

The description gives a clear usage context: 'Use when the user has a finished draft and wants pre-publish verification.' It also specifies input format ('Pass either a script string or a video URL'). However, it does not explicitly mention when not to use it or alternatives, though siblings exist.

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

product_scoutAInspect

Find and rank current TikTok Shop / social-commerce product opportunities using evidence rather than opinion. Use it to answer questions like 'what skincare products are breaking out in the US under $40', 'show me products with strong reviews but low competition', or 'what is worth testing in this niche right now'. Returns products ranked by a deterministic 9-component engine (demand, momentum, creator_adoption, competition, saturation, review_strength, price_attractiveness, creator_concentration, freshness), each carrying an opportunity status (emerging | promising | crowded | mature | cooling | insufficient_data), a qualification record (what passed, failed and is unknown), a confidence band, evidence-cited why_now[], risks[], insufficient_signals[] and history_coverage. Status comes from a qualification gate, never from the score: emerging needs measured sold-count growth across 3+ dated observations spanning 7+ days plus an independent signal (review growth or creator adoption over time); mature means established demand without verified growth; insufficient_data means trajectory cannot be verified yet, however high the score. verification_summary.outcome is NO_VERIFIED_OPPORTUNITIES whenever no returned product passed the gate - say so plainly instead of presenting the list as opportunities, and use verification_summary.by_status to explain whether the category or the filters were the limit. Amazon competition is never measured (AMAZON_COMPETITION_UNVERIFIED); never describe a product as unsaturated on Amazon. The ranking is deterministic and contains no model output - read qualification, why_now, risks and components to explain to the user WHY something ranked where it did, and never present the score on its own. Provider-reported fields live under provider_reported.* and are null when TikTok did not expose them; null means unknown, never zero, and sold counts are never multiplied by price to imply revenue. There is no revenue or GMV field. To validate a single product in depth once you have a shortlist, call analyze_product - product_scout ranks a field of candidates, analyze_product interrogates one. Not for generic video search (use search_videos), creator analysis (use analyze_account), or any guaranteed-sales claim. Cost: 5 credits. Requires the shop_intelligence entitlement.

NameRequiredDescriptionDefault
sortNoOrder the results: verified_first is the default when omitted, listing verified emerging products first and measured-growth products next, then unverified candidates and established comparisons interleaved so neither dominates, buyer-satisfaction risks last. Also: opportunity (same grouping, needs history), rating (highest rated), sold (most cumulative sold), reviews (most reviewed), discount, price_asc, price_desc, momentum, creator_adoption. An unsupported name is rejected, never replaced. History-backed sorts are refused up front when history is unavailable rather than silently falling back.
limitNoMax products to return. Default 20, hard cap 20. This is a ceiling, not a target — fewer rows means the provider had fewer matching products, never that results were withheld.
nicheNoNiche or category to search (e.g. 'Beauty & Skincare', 'Fitness & Wellness'). At least one of niche or query is required.
queryNoFree-text product keywords (e.g. 'wireless earbuds'). Widens the search corpus. May be combined with niche.
marketNo2-letter ISO region code (US, GB, BR, ...) or 'GLOBAL'. Defaults to US. Only regions ScrapeCreators covers for TikTok Shop return usable data.
categoryNoStrict category-breadcrumb filter applied to returned rows (case-insensitive substring). Rows whose category is unknown are dropped when this is set. Distinct from niche, which is a search hint rather than a gate.
max_soldNoMaximum provider-reported cumulative sold count. Strict: unknown is dropped.
min_soldNoMinimum provider-reported cumulative sold count. This is a lifetime total, not a sales rate. Strict: unknown is dropped.
price_maxNoMaximum price in the market currency.
price_minNoMinimum price in the market currency.
max_ratingNoMaximum average rating 0-5. Pair with min_rating to isolate a mid-tier band rather than only top-rated listings. Strict: unknown rating is dropped.
min_ratingNoMinimum average rating 0-5. Strict: rows with unknown rating are dropped.
max_reviewsNoMaximum provider-reported review count - the usual way to find products before they are saturated with social proof. Strict: rows whose review count could not be retrieved are dropped rather than assumed to be zero.
min_reviewsNoMinimum provider-reported review count. Review counts are fetched per candidate, so this filter reflects real provider data. Strict: rows whose review count could not be retrieved are dropped rather than assumed to be zero.
max_discountNoMaximum discount percentage 0-100. Strict: unknown is dropped.
min_discountNoMinimum discount percentage 0-100 off the listed original price. Strict: unknown is dropped.
min_momentumNoMinimum momentum component 0-100. Momentum needs stored history; when the history layer has not seen these products yet the request is refused up front with executed:false rather than charged and returned empty.
max_saturationNoMaximum saturation component 0-100. Saturation needs video-to-product linkage that the current pipeline does not extract, so this is accepted for forward compatibility and reported as unsupported rather than silently applied.
max_competitionNoMaximum competition tolerated, 0-100, expressed intuitively (lower = less competition accepted).
opportunity_stageNoComma-separated stages to keep: emerging, promising, crowded, mature, cooling, insufficient_data. Use 'emerging,promising' for the usual 'find breakout products' request. An empty result reports verification_summary.by_status so you can tell a weak category from a restrictive filter; when nothing in the scan could be classified, the empty result is not charged.
min_creator_adoptionNoMinimum creator-adoption component 0-100 (distinct creators per day with confirmed showcase links). Needs stored history; cold-start products report insufficient_data for this component.

Output Schema

NameRequiredDescription
nicheNo
queryNo
regionNo
successYes
executedNoPresent and false when the request needed stored history that is unavailable. Nothing was charged; drop the history-backed filter or sort and retry.
provenanceNo
generated_atNoISO timestamp
opportunitiesNo
query_contextNoThe filters actually applied, echoed back.
source_coverageNoWhat the engine managed to read: shop search, product hydration, history depth, counts.
credits_remainingNo
recommended_chainNoSuggested next calls, chosen from what this result actually contained. SUGGESTIONS ONLY - present them and let the user pick. Do not call them automatically; each one costs the user credits.
degradation_reasonsNoWhy coverage was partial, when it was. Surface these rather than presenting a degraded result as complete.
verification_summaryNoScan-level verdict. outcome is VERIFIED_OPPORTUNITIES or NO_VERIFIED_OPPORTUNITIES; by_status counts every classified product before stage filters and the limit; explanation says whether the category or the filters were the limit. Lead with this when outcome is NO_VERIFIED_OPPORTUNITIES.
skipped_intelligence_filtersNoFilters that could not be enforced for this request.

TDQS

A4.6/5.0
Behavior5/5

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

Far exceeds the annotations (which only say readOnly=false, openWorld=true, idempotent=false, destructive=false). It discloses that status comes from a qualification gate rather than the score, defines what each status requires, explains the NO_VERIFIED_OPPORTUNITIES outcome and how to report it, warns that Amazon competition is never measured, notes provider_reported.* nulls mean unknown not zero, and states there is no revenue/GMV field. This is unusually rich behavioral disclosure.

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

Conciseness4/5

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

Purpose and routing are front-loaded, and nearly every sentence carries a non-obvious rule (gate semantics, null-means-unknown, no-revenue caveat). It is a dense single block rather than a structured list, which hurts scannability for a 350-word description, but almost nothing is filler.

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

Completeness5/5

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

For a 21-parameter, zero-required, complex ranking tool with an output schema present, the description supplies everything an agent needs to invoke and interpret it: entry conditions, filter semantics, gate-based status rules, empty-result handling, and the no-revenue/no-Amazon caveats. Return-value explanation is appropriately delegated to the output schema.

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

Parameters3/5

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

Schema description coverage is 100% and the schema already documents every one of the 21 parameters in depth (sort modes, strict-filter drop behavior, cold-start refusal). The description adds interpretation rules about scores/statuses but little per-parameter meaning beyond what the schema provides, so the baseline 3 applies.

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

Purpose5/5

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

States a specific verb+resource+domain: 'Find and rank current TikTok Shop / social-commerce product opportunities using evidence rather than opinion,' and immediately distinguishes itself from analyze_product, search_videos, and analyze_account by name. An agent can tell what this tool does and what it is not without opening the schema.

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

Usage Guidelines5/5

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

Gives concrete triggering questions ('what skincare products are breaking out in the US under $40'), an explicit sibling hand-off rule ('product_scout ranks a field of candidates, analyze_product interrogates one'), negative guidance ('Not for generic video search... creator analysis... guaranteed-sales claims'), plus cost (5 credits) and the shop_intelligence entitlement prerequisite.

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

save_researchA
Idempotent
Inspect

Save a HookLayer result the user already received in this conversation so it appears under Saved Research in their HookMafia dashboard. 0 credits: this stores the result you already hold, it never re-runs the research tool. After a research result, offer once in one line to save it to HookMafia; call this only when the user says yes or asks to save, keep or bookmark a result. Pass the tool's structured result as result (billing and chain fields are dropped server-side), the kind that matches the tool, a short title, and a stable request_id so a retried save is deduplicated instead of duplicated. Returns the saved id and a dashboard link. Use list_saved_research / get_saved_research to read it back and compare_saved_products for 2-4 saved analyze_product results.

NameRequiredDescriptionDefault
kindYescreator_analysis (analyze_account), hook_score (score_hook), virality_prediction (predict_virality), product_scout (product_scout), product_analysis (analyze_product), script (viral_remix, match_voice), template (find_viral_template, brief_to_blueprint)
titleYesShort plain-text title, e.g. "@handle TikTok analysis" or the product name
resultYesThe structured result of the earlier tool call, exactly as received. Up to 64 KB after server-side allowlisting.
tool_nameYesThe HookLayer tool that produced the result, e.g. analyze_product
product_idNoCanonical product id for product_analysis / product_scout results
request_idNoIdempotency key. Reuse the same value when retrying the same save; a different result under the same key is refused.
product_urlNohttp(s) product page URL
input_summaryNoWhat was asked: handle, platform, topic, product URL. Up to 4 KB. Never include credentials.
source_timestampNoISO 8601 time the research ran (the result's as_of / fetched_at when present)

Output Schema

NameRequiredDescription
savedNo
deduplicatedNotrue when the same request_id and identical content had already been saved; nothing new was written
dashboard_urlNo
dropped_fieldsNoTop-level result fields that are not persisted (billing, chain hints, unknown keys)
credits_chargedNoAlways 0

TDQS

A4.7/5.0
Behavior5/5

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

Goes well beyond the annotations: states zero credit cost, that the tool never re-runs research, that billing and chain fields are dropped server-side, and that a stable request_id deduplicates retried saves. It also discloses the return shape (saved id and dashboard link). The idempotentHint annotation is reinforced with the actual mechanism rather than repeated.

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

Conciseness4/5

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

Purpose and cost model are front-loaded in the first two sentences, and the routing alternatives are appended at the end where they belong. The single dense paragraph is efficient, though it packs several distinct concerns (cost, offering behavior, params, return, read-back) without visual breaks.

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

Completeness4/5

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

With 9 params, nested objects, an output schema and a high-risk mutation profile, the description covers credits, idempotency, server-side field handling, return values and alternatives. It omits edge cases such as size limits beyond the 64 KB schema note or behavior under an exhausted credit balance, but nothing essential for correct invocation is missing.

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

Parameters4/5

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

Schema coverage is 100% so the baseline is 3, but the description adds real meaning: what to pass as result (the tool's structured output, with billing/chain fields stripped), the need for a matching kind, a short title, and a stable request_id for retry dedup. It does not restate the enum-to-tool mapping already in the schema, but the added behavioral framing of the key params justifies an above-baseline score.

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

Purpose5/5

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

States a specific verb and resource ('Save a HookLayer result ... so it appears under Saved Research') and immediately scopes it to results the user already received, distinguishing it from the research-producing siblings like analyze_product or score_hook. An agent can tell what this does and what it does not do (re-run research) without opening a schema.

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

Usage Guidelines5/5

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

Gives explicit trigger conditions ('call this only when the user says yes or asks to save, keep or bookmark a result') plus an interaction convention (offer once in one line after a result). It also routes reads to list_saved_research / get_saved_research and 2-4 comparisons to compare_saved_products, naming concrete alternatives.

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

score_hookA
Idempotent
Inspect

Score a TikTok, Reels, or Shorts hook against proven viral patterns. Returns a 0-100 score, percentile rank, matched pattern, strengths, weaknesses, and three improved hook variations. Use when the user has a draft hook to validate, wants to compare alternatives, or needs feedback before publishing.

NameRequiredDescriptionDefault
textYesThe hook to score (3-200 chars typical)
nicheNoOptional niche context (e.g. "Beauty & Skincare", "Finance & Business")
platformYesTarget platform — affects pattern matching

Output Schema

NameRequiredDescription
whyNoOne-sentence verdict explaining the score
scoreNoHook quality score (0-100)
rewritesNoThree rewritten versions at higher quality
breakdownNoSub-scores (0-100) for five quality dimensions
from_paygNoWhether credits came from pay-as-you-go balance
strengthsNoWhat the hook does well
percentileNoPercentile rank vs all scored hooks
weaknessesNoWhat could be improved
pattern_matchNoMatched viral pattern name
credits_remainingNoCredits remaining after this call
from_subscriptionNoWhether credits came from subscription

TDQS

A4.1/5.0
Behavior3/5

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

Annotations already cover idempotency and non-destructiveness, so the description's job is lighter. It adds useful context about what the tool returns and that platform affects pattern matching, but it does not clarify whether any state changes occur or how much input content is processed. This is acceptable given the annotations, but still not rich.

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

Conciseness5/5

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

The description is compact and front-loaded, with a clear first sentence of what the tool does, followed by the result components and the explicit usage cases. Every sentence earns its place without redundant filler.

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

Completeness5/5

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

Given the simple parameter count, full schema coverage, available annotations, and presence of an output schema, the description is complete enough for an agent to invoke this tool correctly. It covers the target content, the decision, and the expected output categories.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents `text`, `niche`, and `platform`. The description adds no per-parameter semantics beyond a minor mention that the platform affects pattern matching, which is already implied in the schema. Baseline 3 is appropriate.

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

Purpose5/5

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

The description uses a specific verb ('Score') and identifies the exact resource ('a TikTok, Reels, or Shorts hook') plus the method ('against proven viral patterns'). It clearly distinguishes this from sibling tools by focusing specifically on hooks and their improved variations, rather than broader virality prediction or account analysis.

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

Usage Guidelines4/5

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

The description explicitly states when to use the tool: 'Use when the user has a draft hook to validate, wants to compare alternatives, or needs feedback before publishing.' It provides clear invocation context but does not name alternative tools or include explicit when-not-to-use guidance, keeping it one step below full differentiation.

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

search_videosA
Idempotent
Inspect

Search for short-form videos by keyword across TikTok or Instagram. Returns up to 20 videos ranked by engagement, with view counts, likes, shares, comments, hashtags, author info, and URLs. Use when the user asks to find videos about a topic or keyword. Supports optional filters for niche, minimum views, recency window, and region. Pass product_id to check which videos link a specific TikTok Shop product: linkage is exact_product_link only when the video carries that product link; keyword_match videos are NOT verified for that product, and evidence_summary.product_linkage.status is VIDEO_LINKAGE_UNVERIFIED when none link it. Region counts as verified only from the provider-reported video region; otherwise it is unknown. View counts are cumulative and do not show current acceleration.

NameRequiredDescriptionDefault
limitNoMax videos to return after filtering. Default 12, max 20.
nicheNoOptional — only return videos whose description contains niche-related tokens. Loose niche strings work ("fitness", "Beauty & Skincare").
queryYesFree-text search term. Examples: "morning routine", "iphone case", "passive income".
regionNoISO country code (US, GB, BR, PH, JP, etc.). Note: corpus coverage varies by region — small regions may return zero results and a degraded quality flag.
windowNoRecency filter. Maps to the closest ScrapeCreators date bucket AND applies a client-side cutoff for defense-in-depth.
platformNoWhich platform to search. "tiktok" (default) hits ScrapeCreators TikTok keyword search. "instagram" (2026-07-06) hits Instagram Reels search — note IG upstream ignores region/date_posted params, so region enforcement is client-side only (region_verified_count in the response tells you how many results verifiably matched).
min_viewsNoOptional view-count floor. Default 0.
product_idNoOptional TikTok Shop product id. Videos that link this exact product are labelled exact_product_link and listed first; all others stay keyword_match (not verified for this product).

Output Schema

NameRequiredDescription
videosNo
appliedNoEcho of the filters actually applied — useful for debugging when results look surprising
qualityNo
from_paygNo
filtered_countNoVideos returned after filtering + cap
upstream_countNoVideos returned by upstream before any filtering
evidence_summaryNoUnique creators, creator concentration, posted-date range, duplicates removed, region evidence counts and product_linkage {status: VERIFIED | VIDEO_LINKAGE_UNVERIFIED | NOT_REQUESTED}.
credits_remainingNoCredits remaining after this call
from_subscriptionNo

TDQS

A4.4/5.0
Behavior4/5

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

Goes well beyond annotations by disclosing the 20-result cap, engagement ranking, exact_product_link vs keyword_match linkage semantics, VIDEO_LINKAGE_UNVERIFIED status, region-verification rules, and that view counts are cumulative (no acceleration). These are non-obvious behavioral traits an agent needs. Minor gap: annotations carry readOnlyHint=false, which is unusual for a search tool, and the description does not reconcile or mention any side effects.

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

Conciseness4/5

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

Front-loaded with what it does, then usage, then caveats — a sensible ordering. It is dense and long-ish, but each clause (linkage rules, region verification, cumulative views) earns its place as non-obvious caveats rather than filler.

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

Completeness5/5

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

For an 8-parameter search tool with an output schema and annotations, the description covers purpose, usage, filtering, and the tricky product-linkage and region-verification semantics. Return-value detail is delegated to the output schema, which is appropriate. Nothing critical to correct invocation is missing.

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

Parameters4/5

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

Schema coverage is 100%, so baseline is 3, but the description adds real meaning beyond the schema: product_id linkage semantics and the region-verified vs unknown distinction, which are not in the parameter descriptions. It stops short of value-format guidance (e.g., how to phrase niche or region).

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

Purpose5/5

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

States a specific verb (search) and resource (short-form videos) with scope (keyword, TikTok/Instagram) and output shape (up to 20 ranked by engagement). No sibling tool performs video keyword search, so it is cleanly differentiated from trend_pulse, find_viral_template, etc.

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

Usage Guidelines4/5

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

Explicitly says 'Use when the user asks to find videos about a topic or keyword,' which gives a clear triggering condition. It does not name alternatives or when-not-to-use, but the sibling set covers other task types rather than competing searches.

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

trend_pulseA
Idempotent
Inspect

Research what is currently gaining traction in short-form content for a specific niche. Returns rising opportunities (formats, hooks, styles, topics) with growth signals, data sources, and saturated patterns to avoid. Use when the user asks what to post about, what's trending in a niche, or needs to validate a content idea against current trends. Supports the 18 canonical niches and optional region filtering.

NameRequiredDescriptionDefault
nicheNoOne of the 18 supported niches (Beauty & Skincare, Fitness & Health, Food & Cooking, Fashion & Style, Tech & Gadgets, Finance & Business, Education & Learning, Travel & Adventure, Comedy & Entertainment, Gaming, Lifestyle & Wellness, Parenting & Family, DIY & Crafts, Music & Dance, Pets & Animals, Sports, Motivation & Self-Help, SaaS & AI Tools). Loose names like "travel" or "fitness" are accepted but pass the canonical form when possible. Omit for broadly applicable trends.
regionNoOptional 2-letter ISO country code (US, GB, BR, JP, IN, PH, etc.). Threads to Google Trends geo + YouTube regionCode. Defaults to US when omitted. Reddit signals are global and ignore this param.
deadline_hoursNoOptional (2026-07-06 magic-genie ritual): how many hours until the video posts. When set, each rising trend gets a trend_status (up-slope | plateau | fading | unknown) AND a deadline_verdict (safe | risky | no-go) so managers can answer "will this trend still be alive when the video posts?" without eyeballing the growth label. Use this on every brief-just-landed call — it turns trend_pulse from "what's trending" into "what's SAFE to bet on for MY post window."

Output Schema

NameRequiredDescription
nicheNoThe niche these trends apply to
risingNoRising opportunities (format/hook/style) with qualitative growth labels + signal_strength numeric anchor (0-1) + suggestions
from_paygNoWhether credits came from pay-as-you-go balance
saturatedNoSaturated patterns to avoid
credits_remainingNoCredits remaining after this call
from_subscriptionNoWhether credits came from subscription

TDQS

A3.6/5.0
Behavior3/5

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

Annotations supply openWorldHint=true, idempotentHint=true, and destructiveHint=false, so the behavioral bar is lowered; the description usefully adds that results include growth signals, data sources, and saturated patterns to avoid. However it does not reconcile the tension between the read-flavored 'Research/Returns' framing and readOnlyHint=false, nor mention latency or external-source behavior for an open-world research call.

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

Conciseness4/5

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

Three sentences, front-loaded with purpose and then usage, with no filler and a clean reading order. It is efficiently sized for the complexity, though the niche/region sentence is largely redundant with the schema.

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

Completeness4/5

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

An output schema exists, so return values need not be restated, and the description covers purpose, triggers, and scoping (niche, region). The one gap is that the significant deadline_hours parameter and its deadline_verdict behavior are neither referenced nor alluded to in the description.

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

Parameters3/5

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

Schema description coverage is 100%, so the enum niche list and region semantics are already fully documented in the schema; baseline 3 applies. The description only echoes '18 canonical niches' and 'optional region filtering' and never surfaces deadline_hours, but adds nothing beyond the structured fields.

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

Purpose4/5

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

The description opens with a specific verb+resource ('Research what is currently gaining traction in short-form content for a specific niche') and enumerates the returned artifacts (formats, hooks, styles, topics). It is clearly distinguishable in intent from analyze_* and score_hook, but it never names a sibling or explicit boundary to disambiguate from find_viral_template/predict_virality.

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

Usage Guidelines4/5

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

The 'Use when...' clause gives concrete trigger conditions: 'what to post about', 'what's trending in a niche', or validating a content idea against trends. That is clear when-to-use context, but there are no when-not conditions and no named alternative tool, so routing is left partly to inference.

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

viral_remixAInspect

Take a viral video and produce a fresh script that mirrors its structure and energy pattern for a new topic. Returns the extracted formula, scene-by-scene script with voiceover and visuals, camera directions, and text overlays. Use when the user finds a video they want to replicate the structure of. Pass either a video URL (TikTok, YouTube, or Instagram) or a transcript directly. When promoting a specific product, ALWAYS pass target_product + verified_product_facts so the generator does not fabricate product details.

NameRequiredDescriptionDefault
nicheNoOptional niche hint
my_topicNoDEPRECATED alias for target_topic. Legacy clients only. Normalized internally.
platformNoTarget platform for the remix. Adjusts pacing and CTA style if provided.
source_urlNoTikTok/YouTube/Instagram URL — transcript will be auto-extracted
transcriptNoPre-extracted transcript (alternative to source_url, faster)
target_topicNoWhat the remix should be about. Default: same niche as original.
target_productNoThe product the remix should promote. When provided, the generator will NOT invent product names, prices, timelines, features, or customer stories. Combined with verified_product_facts, this forces on-topic + grounded output.
verified_product_factsNoFacts the generator is allowed to cite about target_product (e.g. "runs inside ChatGPT and Claude", "14 tools for viral research"). Every specific product claim in the generated script is checked against this list — unsupported claims populate unsupported_claims[] and downgrade quality. If target_product is passed WITHOUT verified_product_facts, the response will land at degraded quality (generation cannot be grounded).

Output Schema

NameRequiredDescription
overlaysNoText overlay suggestions per scene
from_paygNoWhether credits came from pay-as-you-go balance
verify_hookNoThe hook plus a suggested follow-up: the caller may pass it to score_hook for a structurally-independent score (the script generator deliberately does NOT self-rate). Informational only, not an instruction to call anything.
camera_shotsNoPhone-native camera direction per scene
fresh_scriptNoComplete scene-by-scene script mirroring the source structure
cta_archetypeNoWhich CTA archetype the generator picked. Comment_gate is the failure-mode default for AI script generators; rotation tells you whether the prompt is working.
ugc_authenticityNoTripwire for ad-shaped drift. Detected via regex on the produced script, not the model self-grade. If level=ad_leaning, surface to the user before shipping.
credits_remainingNoCredits remaining after this call
extracted_formulaNoThe viral DNA formula extracted from the source
from_subscriptionNoWhether credits came from subscription
structural_skeletonNoWhich structural skeleton the generator used (confession_to_result, mistake_to_correction, etc). Surfaces rotation across the fleet.

TDQS

A4.4/5.0
Behavior5/5

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

Annotations only cover safety (not read-only, open-world, non-idempotent, non-destructive). The description goes well beyond that: it discloses that the generator will not invent product names, prices, timelines, features, or customer stories, and that omitting verified_product_facts causes degraded output. That is substantive behavioral disclosure an agent cannot infer from the annotation block.

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

Conciseness5/5

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

Purpose and output are front-loaded in the first two sentences, then the trigger condition, then the parameter rules. Five sentences, each carrying distinct information with no filler.

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

Completeness5/5

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

With an output schema present the description need not spell out returns, yet it still previews them briefly. Together with annotations carrying the safety profile and 100% schema coverage, an agent has everything needed to select and call this correctly.

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

Parameters4/5

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

Schema description coverage is 100%, so the baseline is 3. The description still adds value by stating the either/or input contract in prose and by elevating the target_product + verified_product_facts pairing to an ALWAYS rule, which reinforces the grounding semantics beyond the schema's per-field wording.

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

Purpose4/5

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

States a specific verb+resource ('take a viral video and produce a fresh script that mirrors its structure and energy pattern for a new topic') and enumerates the deliverables, so the agent knows exactly what comes out. It does not name or differentiate from close siblings like find_viral_template or brief_to_blueprint, which an agent might plausibly confuse this with.

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

Usage Guidelines4/5

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

Gives a clear triggering context ('when the user finds a video they want to replicate the structure of') and an explicit input-mode rule (URL or transcript). It also mandates target_product + verified_product_facts for product promotion. No when-not guidance or named alternatives, so it stops short of a 5.

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

watch_accountA
Idempotent
Inspect

Start tracking a creator so future calls can detect what changed. Creates a durable CreatorWatch + a baseline CreatorSnapshot capturing the creator's current viral DNA scores, format fingerprint, and top recent videos. Use when the user says 'track', 'watch', 'follow', 'keep an eye on' a creator/channel/handle. Idempotent — calling 'watch @same' twice with a fresh baseline in place returns the existing watch with credits_charged=0. Cost: 0 credits when a fresh existing watch snapshot or a compatible recent analyze_account cache can be reused. Otherwise a fresh baseline invokes analyze_account and costs 5 credits — this can happen even for an already-existing watch once freshness expires. Reuses the same 'analyze' permission as analyze_account — no new OAuth scope, no re-consent required.

NameRequiredDescriptionDefault
handleYesCreator handle (with or without @ prefix). Examples: "@mrbeast", "mrbeast".
platformYesPlatform the creator publishes on. Same platforms as analyze_account.

Output Schema

NameRequiredDescription
statusNo
creatorNoNormalized "@handle" the watch is stored under
messageNo
platformNo
watch_idNo
data_age_daysNoAge in days of the newest video in the baseline
snapshot_countNoTotal snapshots stored for this watch so far
baseline_sourceNowatch_snapshot = existing CreatorWatch already had a fresh snapshot (0 credits); analysis_cache = recent analyze_account response reused to build a new baseline (0 credits); fresh = analyze_account invoked, 5 credits charged.
credits_chargedNo
baseline_created_atNoISO timestamp of the baseline snapshot

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already declare idempotentHint=true and readOnlyHint=false, but the description adds substantial context beyond them: the exact cost model (0 credits on cache/watch reuse, 5 credits on a fresh baseline), the credits_charged=0 return signal, and reuse of the existing 'analyze' OAuth permission with no re-consent. This is richly disclosed behavioral detail an agent needs.

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

Conciseness4/5

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

Six sentences, all earning their place, with the core purpose front-loaded followed by usage triggers, idempotency, cost, and permissions. Slightly dense, but no wasted filler and information is ordered by importance.

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

Completeness5/5

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

For a tool with an output schema, the description need not explain return values; it covers everything else an agent needs — purpose, triggers, idempotency semantics, cost, and auth implications. Nothing material is missing.

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

Parameters3/5

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

Schema description coverage is 100% and both parameters (handle, platform) are fully documented in the schema, including format examples and enum values. The description references 'watch @same' but adds no syntax or format detail beyond what the schema already provides, so the baseline 3 applies.

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

Purpose5/5

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

States a specific verb+resource ('Start tracking a creator') and immediately names the artifacts it creates (durable CreatorWatch + baseline CreatorSnapshot). Distinguishes itself from siblings like analyze_account, list_watches, and get_changes by describing what it produces rather than merely restating its name.

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

Usage Guidelines5/5

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

Gives explicit trigger phrases ('track', 'watch', 'follow', 'keep an eye on'), states idempotency conditions, and identifies the relationship to analyze_account (which it invokes for a fresh baseline). The agent knows both when to call it and what it will cost.

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.

  1. 1 tool update
    • Changedproduct_scout3 fields changed
      • changedInput schema / properties / sort / description
        Previous value: -"Order the results: verified_first is the default when omitted, listing products that passed the qualification gate first, then unverified candidates and established comparisons interleaved so neither dominates, buyer-satisfaction risks last. Also: opportunity (same grouping, needs history), rating (highest rated), sold (most cumulative sold), reviews (most reviewed), discount, price_asc, price_desc, momentum, creator_adoption. An unsupported name is rejected, never replaced. History-backed sorts are refused up front when history is unavailable rather than silently falling back."New value: +"Order the results: verified_first is the default when omitted, listing verified emerging products first and measured-growth products next, then unverified candidates and established comparisons interleaved so neither dominates, buyer-satisfaction risks last. Also: opportunity (same grouping, needs history), rating (highest rated), sold (most cumulative sold), reviews (most reviewed), discount, price_asc, price_desc, momentum, creator_adoption. An unsupported name is rejected, never replaced. History-backed sorts are refused up front when history is unavailable rather than silently falling back."
      • changedOutput schema / properties / opportunities / items / properties / result_role / description
        Previous value: -"What the row is in this answer. Only verified_opportunity passed the qualification gate; established_comparison rows are context, unverified_candidate rows lack the dated evidence to be called opportunities."New value: +"What the row is in this answer. Only verified_emerging passed the qualification gate. measured_growth has measured sales growth but did not pass it, so never call it verified. established_comparison rows are context; unverified_candidate rows lack the dated evidence to be called opportunities."
      • changedOutput schema / properties / opportunities / items / properties / result_role / enum
        Previous value: -[
        -  "verified_opportunity",
        -  "unverified_candidate",
        -  "established_comparison",
        -  "quality_risk"
        -]New value: +[
        +  "verified_emerging",
        +  "measured_growth",
        +  "unverified_candidate",
        +  "established_comparison",
        +  "quality_risk"
        +]
  2. 1 tool update
    • Changedproduct_scout5 fields changed
      • changedInput schema / properties / sort / description
        Previous value: -"Order the results: opportunity (final score), rating (highest rated), sold (most cumulative sold), reviews (most reviewed), discount, price_asc, price_desc, momentum, creator_adoption. An unsupported name is rejected, never replaced. History-backed sorts are refused up front when history is unavailable rather than silently falling back."New value: +"Order the results: verified_first is the default when omitted, listing products that passed the qualification gate first, then unverified candidates and established comparisons interleaved so neither dominates, buyer-satisfaction risks last. Also: opportunity (same grouping, needs history), rating (highest rated), sold (most cumulative sold), reviews (most reviewed), discount, price_asc, price_desc, momentum, creator_adoption. An unsupported name is rejected, never replaced. History-backed sorts are refused up front when history is unavailable rather than silently falling back."
      • changedOutput schema / properties / opportunities / items / properties / qualification / description
        Previous value: -"The gate behind the status. qualified_emerging is true only when every emerging requirement passed. momentum.state is measured_growth | measured_flat | measured_slowdown | unknown; creator_evidence.state VIDEO_LINKAGE_UNVERIFIED and competition.state COMPETITION_UNVERIFIED mean not assessed, never \"none\". Quote failed[] and unknowns[] when explaining why a product is not an opportunity."New value: +"The gate behind the status. qualified_emerging is true only when every emerging requirement passed. momentum.state is measured_growth | measured_flat | measured_slowdown | unknown; creator_evidence.state is adoption_over_time | recent_posting_increase (measured growth among videos carrying the provider affiliate marker for this exact product) | recent_linked_videos | observed_not_over_time (activity, not growth) | VIDEO_LINKAGE_UNVERIFIED; VIDEO_LINKAGE_UNVERIFIED and competition.state COMPETITION_UNVERIFIED mean not assessed, never \"none\". evidence_ledger[] separates fact, computed, hypothesis and missing claims, each with source, observed_at and sample_size; never present a hypothesis or a missing item as a finding. Quote failed[] and unknowns[] when explaining why a product is not an opportunity."
      • addedOutput schema / properties / opportunities / items / properties / qualification / properties / evidence_ledger
        Added value: +{
        +  "items": {
        +    "properties": {
        +      "claim": {
        +        "type": "string"
        +      },
        +      "kind": {
        +        "enum": [
        +          "fact",
        +          "computed",
        +          "hypothesis",
        +          "missing"
        +        ],
        +        "type": "string"
        +      },
        +      "observed_at": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "sample_size": {
        +        "type": [
        +          "number",
        +          "null"
        +        ]
        +      },
        +      "source": {
        +        "type": "string"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / opportunities / items / properties / result_role
        Added value: +{
        +  "description": "What the row is in this answer. Only verified_opportunity passed the qualification gate; established_comparison rows are context, unverified_candidate rows lack the dated evidence to be called opportunities.",
        +  "enum": [
        +    "verified_opportunity",
        +    "unverified_candidate",
        +    "established_comparison",
        +    "quality_risk"
        +  ],
        +  "type": "string"
        +}
      • changedOutput schema / properties / opportunities / items / properties / why_shown / description
        Previous value: -"Why the row is in the list (it matched the search). Being listed is not a recommendation."New value: +"Why the row is in the list (it matched the search) and its role. Being listed is not a recommendation."
  3. 2 tool updates
    • Changedproduct_scout6 fields changed
      • changedInput schema / properties / opportunity_stage / description
        Previous value: -"Comma-separated stages to keep: emerging, promising, crowded, mature, cooling. Use 'emerging,promising' for the usual 'find breakout products' request."New value: +"Comma-separated stages to keep: emerging, promising, crowded, mature, cooling, insufficient_data. Use 'emerging,promising' for the usual 'find breakout products' request. An empty result reports verification_summary.by_status so you can tell a weak category from a restrictive filter; when nothing in the scan could be classified, the empty result is not charged."
      • changedOutput schema / properties / opportunities / items / properties / opportunity / properties / score / description
        Previous value: -"0-100 composite. Null when status is insufficient_data."New value: +"0-100 composite of present-state quality. Null when too few components resolved. Never decides the status."
      • addedOutput schema / properties / opportunities / items / properties / opportunity / properties / status / description
        Added value: +"Decided by the qualification gate. early_read is retired and no longer emitted."
      • addedOutput schema / properties / opportunities / items / properties / qualification
        Added value: +{
        +  "description": "The gate behind the status. qualified_emerging is true only when every emerging requirement passed. momentum.state is measured_growth | measured_flat | measured_slowdown | unknown; creator_evidence.state VIDEO_LINKAGE_UNVERIFIED and competition.state COMPETITION_UNVERIFIED mean not assessed, never \"none\". Quote failed[] and unknowns[] when explaining why a product is not an opportunity.",
        +  "properties": {
        +    "amazon_competition": {
        +      "type": "object"
        +    },
        +    "competition": {
        +      "type": "object"
        +    },
        +    "creator_evidence": {
        +      "type": "object"
        +    },
        +    "demand": {
        +      "type": "object"
        +    },
        +    "failed": {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "momentum": {
        +      "type": "object"
        +    },
        +    "passed": {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "qualified_emerging": {
        +      "type": "boolean"
        +    },
        +    "status": {
        +      "type": "string"
        +    },
        +    "summary": {
        +      "type": "string"
        +    },
        +    "supporting_signals": {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "unknowns": {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    }
        +  },
        +  "type": "object"
        +}
      • addedOutput schema / properties / opportunities / items / properties / why_shown
        Added value: +{
        +  "description": "Why the row is in the list (it matched the search). Being listed is not a recommendation.",
        +  "type": "string"
        +}
      • addedOutput schema / properties / verification_summary
        Added value: +{
        +  "description": "Scan-level verdict. outcome is VERIFIED_OPPORTUNITIES or NO_VERIFIED_OPPORTUNITIES; by_status counts every classified product before stage filters and the limit; explanation says whether the category or the filters were the limit. Lead with this when outcome is NO_VERIFIED_OPPORTUNITIES.",
        +  "properties": {
        +    "amazon_competition": {
        +      "type": "object"
        +    },
        +    "by_status": {
        +      "type": "object"
        +    },
        +    "candidates_classified": {
        +      "type": "integer"
        +    },
        +    "explanation": {
        +      "type": "string"
        +    },
        +    "outcome": {
        +      "enum": [
        +        "VERIFIED_OPPORTUNITIES",
        +        "NO_VERIFIED_OPPORTUNITIES"
        +      ],
        +      "type": "string"
        +    },
        +    "returned": {
        +      "type": "integer"
        +    },
        +    "returned_verified_emerging": {
        +      "type": "integer"
        +    },
        +    "thresholds": {
        +      "type": "object"
        +    },
        +    "verified_emerging": {
        +      "type": "integer"
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedsearch_videos9 fields changed
      • addedInput schema / properties / product_id
        Added value: +{
        +  "description": "Optional TikTok Shop product id. Videos that link this exact product are labelled exact_product_link and listed first; all others stay keyword_match (not verified for this product).",
        +  "pattern": "^[0-9]{10,25}$",
        +  "type": "string"
        +}
      • addedOutput schema / properties / evidence_summary
        Added value: +{
        +  "description": "Unique creators, creator concentration, posted-date range, duplicates removed, region evidence counts and product_linkage {status: VERIFIED | VIDEO_LINKAGE_UNVERIFIED | NOT_REQUESTED}.",
        +  "type": [
        +    "object",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / videos / items / properties / is_ad
        Added value: +{
        +  "type": "boolean"
        +}
      • addedOutput schema / properties / videos / items / properties / is_paid_partnership
        Added value: +{
        +  "type": "boolean"
        +}
      • addedOutput schema / properties / videos / items / properties / linkage
        Added value: +{
        +  "enum": [
        +    "exact_product_link",
        +    "product_link_other",
        +    "keyword_match"
        +  ],
        +  "type": "string"
        +}
      • addedOutput schema / properties / videos / items / properties / linked_product_id
        Added value: +{
        +  "description": "TikTok Shop product the video links, if any",
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / videos / items / properties / linked_product_url
        Added value: +{
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / videos / items / properties / provider_region
        Added value: +{
        +  "description": "Region the provider attached to the video; null = unknown",
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / videos / items / properties / region_evidence
        Added value: +{
        +  "enum": [
        +    "provider_reported_match",
        +    "text_signal",
        +    "unknown"
        +  ],
        +  "type": "string"
        +}
  4. 1 tool update
    • Changedproduct_scout1 field changed
      • changedInput schema / properties / sort / description
        Previous value: -"Order the results: momentum, creator_adoption, price_asc, price_desc, reviews, rating, sold, discount, opportunity. History-backed sorts are refused up front when history is unavailable rather than silently falling back."New value: +"Order the results: opportunity (final score), rating (highest rated), sold (most cumulative sold), reviews (most reviewed), discount, price_asc, price_desc, momentum, creator_adoption. An unsupported name is rejected, never replaced. History-backed sorts are refused up front when history is unavailable rather than silently falling back."
  5. 4 tool updates
    • Addedcompare_saved_products
    • Addedget_saved_research
    • Addedlist_saved_research
    • Addedsave_research
  6. 4 tool updates
    • Changedanalyze_account1 field changed
      • changedOutput schema / properties / recommended_chain / items / properties / side_effects / description
        Previous value: -"Always \"none\" — all tools are read-only"New value: +"Service-side effects this step would cause, stated honestly. HookLayer never modifies TikTok, Instagram, YouTube or TikTok Shop accounts or content. It DOES change internal HookLayer state: every billable tool debits the credit balance and writes a usage record, watch_account persists a creator watch, and get_changes / product_scout persist snapshots and history. Use \"none\" only for a tool that charges nothing and writes nothing (list_watches)."
    • Changedbrief_to_blueprint1 field changed
      • changedInput schema / properties / niche / description
        Previous value: -"One of the 17 supported niches. Loose names like \"beauty\" or \"fitness\" are auto-mapped."New value: +"One of the 18 supported niches (Beauty & Skincare, Fitness & Health, Food & Cooking, Fashion & Style, Tech & Gadgets, Finance & Business, Education & Learning, Travel & Adventure, Comedy & Entertainment, Gaming, Lifestyle & Wellness, Parenting & Family, DIY & Crafts, Music & Dance, Pets & Animals, Sports, Motivation & Self-Help, SaaS & AI Tools). Loose names like \"beauty\" or \"fitness\" are auto-mapped."
    • Changedfind_viral_template1 field changed
      • changedInput schema / properties / niche / description
        Previous value: -"One of the 17 supported niches. Loose names like \"travel\" or \"fitness\" are accepted but pass the canonical form when possible."New value: +"One of the 18 supported niches (Beauty & Skincare, Fitness & Health, Food & Cooking, Fashion & Style, Tech & Gadgets, Finance & Business, Education & Learning, Travel & Adventure, Comedy & Entertainment, Gaming, Lifestyle & Wellness, Parenting & Family, DIY & Crafts, Music & Dance, Pets & Animals, Sports, Motivation & Self-Help, SaaS & AI Tools). Loose names like \"travel\" or \"fitness\" are accepted but pass the canonical form when possible."
    • Changedtrend_pulse1 field changed
      • changedInput schema / properties / niche / description
        Previous value: -"One of the 17 supported niches. Loose names like \"travel\" or \"fitness\" are accepted but pass the canonical form when possible. Omit for broadly applicable trends."New value: +"One of the 18 supported niches (Beauty & Skincare, Fitness & Health, Food & Cooking, Fashion & Style, Tech & Gadgets, Finance & Business, Education & Learning, Travel & Adventure, Comedy & Entertainment, Gaming, Lifestyle & Wellness, Parenting & Family, DIY & Crafts, Music & Dance, Pets & Animals, Sports, Motivation & Self-Help, SaaS & AI Tools). Loose names like \"travel\" or \"fitness\" are accepted but pass the canonical form when possible. Omit for broadly applicable trends."
  7. 1 tool update
    • Changedviral_remix1 field changed
      • changedInput schema / properties / verified_product_facts / description
        Previous value: -"Facts the generator is allowed to cite about target_product (e.g. \"runs inside ChatGPT and Claude\", \"12 tools for viral research\"). Every specific product claim in the generated script is checked against this list — unsupported claims populate unsupported_claims[] and downgrade quality. If target_product is passed WITHOUT verified_product_facts, the response will land at degraded quality (generation cannot be grounded)."New value: +"Facts the generator is allowed to cite about target_product (e.g. \"runs inside ChatGPT and Claude\", \"14 tools for viral research\"). Every specific product claim in the generated script is checked against this list — unsupported claims populate unsupported_claims[] and downgrade quality. If target_product is passed WITHOUT verified_product_facts, the response will land at degraded quality (generation cannot be grounded)."
  8. 1 tool update
    • Changedproduct_scout1 field changed
      • changedInput schema / properties / limit / description
        Previous value: -"Max products to return. Default 10, hard cap 20."New value: +"Max products to return. Default 20, hard cap 20. This is a ceiling, not a target — fewer rows means the provider had fewer matching products, never that results were withheld."
  9. 2 tool updates
    • Addedanalyze_product
    • Addedproduct_scout
  10. 1 tool update
    • Changedviral_remix1 field changed
      • changedInput schema / properties / verified_product_facts / description
        Previous value: -"Facts the generator is allowed to cite about target_product (e.g. \"runs inside ChatGPT and Claude\", \"9 tools for viral research\"). Every specific product claim in the generated script is checked against this list — unsupported claims populate unsupported_claims[] and downgrade quality. If target_product is passed WITHOUT verified_product_facts, the response will land at degraded quality (generation cannot be grounded)."New value: +"Facts the generator is allowed to cite about target_product (e.g. \"runs inside ChatGPT and Claude\", \"12 tools for viral research\"). Every specific product claim in the generated script is checked against this list — unsupported claims populate unsupported_claims[] and downgrade quality. If target_product is passed WITHOUT verified_product_facts, the response will land at degraded quality (generation cannot be grounded)."
  11. 3 tool updates
    • Addedget_changes
    • Addedlist_watches
    • Addedwatch_account
  12. 1 tool update
    • Changedviral_remix5 fields changed
      • changedInput schema / properties / my_topic / description
        Previous value: -"What the remix should be about. Default: same niche as original."New value: +"DEPRECATED alias for target_topic. Legacy clients only. Normalized internally."
      • addedInput schema / properties / platform
        Added value: +{
        +  "description": "Target platform for the remix. Adjusts pacing and CTA style if provided.",
        +  "enum": [
        +    "tiktok",
        +    "reels",
        +    "shorts"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / target_product
        Added value: +{
        +  "description": "The product the remix should promote. When provided, the generator will NOT invent product names, prices, timelines, features, or customer stories. Combined with verified_product_facts, this forces on-topic + grounded output.",
        +  "type": "string"
        +}
      • addedInput schema / properties / target_topic
        Added value: +{
        +  "description": "What the remix should be about. Default: same niche as original.",
        +  "type": "string"
        +}
      • addedInput schema / properties / verified_product_facts
        Added value: +{
        +  "description": "Facts the generator is allowed to cite about target_product (e.g. \"runs inside ChatGPT and Claude\", \"9 tools for viral research\"). Every specific product claim in the generated script is checked against this list — unsupported claims populate unsupported_claims[] and downgrade quality. If target_product is passed WITHOUT verified_product_facts, the response will land at degraded quality (generation cannot be grounded).",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
  13. 2 tool updates
    • Changedanalyze_account1 field changed
      • addedOutput schema / properties / headline_insight
        Added value: +{
        +  "description": "The largest quantified performance gap for this creator, plus its implication. Presentation-neutral data — the caller decides whether and how to surface it.",
        +  "properties": {
        +    "confidence": {
        +      "description": "Confidence in the headline insight; lower on thin (<8 videos) or stale (>30 days) samples.",
        +      "enum": [
        +        "high",
        +        "medium",
        +        "low"
        +      ],
        +      "type": "string"
        +    },
        +    "so_what": {
        +      "description": "The one concrete change the wow gap implies, stated in a single line.",
        +      "type": "string"
        +    },
        +    "wow": {
        +      "description": "The single most material finding in the account's data: the dimension (video length, hook type, format, posting cadence, or topic) with the largest quantified performance gap, stated with two real numbers from the creator's videos. Not a restated score.",
        +      "type": "string"
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedviral_remix1 field changed
      • changedOutput schema / properties / verify_hook / description
        Previous value: -"Hook + instruction to chain into score_hook for a structurally-independent score (the script generator deliberately does NOT self-rate)"New value: +"The hook plus a suggested follow-up: the caller may pass it to score_hook for a structurally-independent score (the script generator deliberately does NOT self-rate). Informational only, not an instruction to call anything."

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    B
    maintenance
    Licensing infrastructure for premium content from specialist publishers in geopolitics, finance, AI and industry. License articles for your AI product to answer from, take a publication's full catalogue, license it for training, or show it to your clients, all under one contract, with every use tracked and the publisher paid.
    20
    1,377 npm
    1
    MIT
  • A
    license
    A
    quality
    C
    maintenance
    Web intelligence MCP server for AI agents. 7 tools for SERP analysis, competitor research, market trends, content gap analysis, keyword insights, audience discovery, and citation tracking.
    7
    2
    AGPL 3.0
  • A
    license
    C
    quality
    B
    maintenance
    Gives any MCP client 27 tools for turning scattered feeds, forums, and media into a persistent, searchable evidence corpus, so an agent can search and import evidence, verify claims with independent-source counting and citation checks, and run multi-round research that produces cited, revisable reports. It also supports adaptive retrieval widening, tiered evidence where only author-written sections count as sources, and honest degradation when no LLM key is available.
    27
    MIT
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.