hooklayer
Server Details
Viral-content intelligence for AI agents — 7 read-only MCP tools, evidence-layer scoring.
- Status
- Healthy
- Uptime
- 100.0% over 54 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2024-11-05
- URL
- Repository
- khan-ashifur/hooklayer
- GitHub Stars
- 0
- Server Listing
- hooklayer
TDQS
Scored across 14 tools
Most tools have clearly distinct purposes, and descriptions explicitly disambiguate close pairs like product_scout vs analyze_product and analyze_account vs get_changes. Some overlap remains: predict_virality, score_hook, and match_voice all operate on drafts/hooks, and watch_account/get_changes/list_watches form a tracking cluster where boundaries require careful reading.
Predominantly snake_case with a consistent verb_noun pattern (analyze_account, find_viral_template, predict_virality, search_videos). One clear deviation: brief_to_blueprint uses a noun_to_noun construction, which is readable but breaks the verb-first convention.
14 tools is well within the sweet spot for a multi-capability creator analytics platform. Each tool earns its place: analysis, discovery, scoring, tracking, and synthesis are distinct capabilities rather than redundant wrappers.
Covers a full research-to-publish lifecycle (discover → analyze → track → score → remix → blueprint) with solid CRUD-like coverage for watches (watch/list/get_changes). Minor gaps: no explicit unwatch/delete_watch or update for tracked creators, and no tool to export/list saved blueprints or scripts.
Available Tools
18 toolsanalyze_accountAIdempotentInspect
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).
| Name | Required | Description | Default |
|---|---|---|---|
| since | No | Optional 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. | |
| handle | Yes | Creator handle (with or without @ prefix) or YouTube channel ID. Examples: "@mrbeast", "mrbeast", "UCX6OQ3DkcsbYNE6H8uQQuVA". | |
| window | No | Recency 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. | |
| platform | No | Platform 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_only | No | When 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
| Name | Required | Description |
|---|---|---|
| profile | No | Creator profile (handle, bio, followers, following, total_likes, total_videos) |
| from_payg | No | Whether credits came from pay-as-you-go balance |
| steal_map | No | Actionable elements to replicate from this creator |
| viral_dna | No | Five viral DNA scores (0-100 each) |
| content_gaps | No | Untapped content opportunities the creator is missing |
| recent_videos | No | Top recent videos with view counts, transcripts, and engagement |
| headline_insight | No | The largest quantified performance gap for this creator, plus its implication. Presentation-neutral data — the caller decides whether and how to surface it. |
| pattern_analysis | No | Content pattern breakdown (posting cadence, topic clusters) |
| credits_remaining | No | Credits remaining after this call |
| from_subscription | No | Whether credits came from subscription |
| recommended_chain | No | Suggested next tool calls with pre-filled parameters — advisory only, agent decides whether to execute |
| format_fingerprint | No | Dominant content format patterns (durations, styles, edit types) |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| market | No | 2-letter ISO region code or 'GLOBAL'. Defaults to US. Should match the market the product was found in. | |
| product_id | No | TikTok Shop numeric product id, as returned by product_scout in opportunities[].product_id. Supply this or product_url. | |
| product_url | No | Any 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_competitors | No | Default 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
| Name | Required | Description |
|---|---|---|
| region | No | |
| success | Yes | |
| economics | No | Price and margin context. Contains no revenue or GMV figure. |
| fetched_at | No | |
| product_id | No | |
| provenance | No | Endpoints called, provider call count, staleness, and which fields the model wrote. |
| buyer_voice | No | Review sample summary including rating histogram and sampled count. |
| competition | No | Percentile placement against the peer set, when one was resolvable. |
| analyst_read | No | Model-written operator summary grounded in the sections above. Falls back to a deterministic version if the model call fails. |
| market_proof | No | Demand evidence section. Carries available / headline / data / evidence / risks / unknowns / confidence. |
| buyer_pain_map | No | Themes 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_verdict | No | Deterministic verdict and confidence. |
| creator_content | No | |
| source_coverage | No | Which sections resolved and which did not. |
| validation_read | No | Extended validation narrative. Null when include_competitors was false. |
| content_patterns | No | |
| current_evidence | No | Composite score from currently observable evidence, with what was unavailable. |
| evidence_classes | No | Explicit map so the host never has to guess provenance: fact[] came from the provider, analysis[] was derived by HookLayer, unavailable[] had insufficient evidence. |
| product_identity | No | title, shopName, category, productUrl, imageUrl. |
| credits_remaining | No | |
| recommended_chain | No | Suggested 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_landscape | No | Comparable products and where they are weak. available:false when competitor discovery did not resolve. |
| evidence_interpretation | No | Why 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_intelligence | No | Opportunity-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
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| niche | Yes | 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. | |
| region | No | Optional 2-letter ISO country code (US, GB, CA, etc.). Threads to niche + trend upstreams. | |
| product | Yes | What the brand sent (name + one line, e.g. "Athletic Greens AG1 travel packs — 30-count individual sachets for travel") | |
| platform | No | Target 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_handle | No | Optional 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_hours | No | How 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_category | Yes | Umbrella category (e.g. "greens powder", "sunscreen", "protein bar") |
Output Schema
| Name | Required | Description |
|---|---|---|
| as_of | No | |
| stats | No | |
| applied | No | Echo of parameters resolved after canonicalization |
| quality | No | |
| success | No | |
| blueprint | No | |
| provenance | No | |
| credits_remaining | No |
TDQS
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.
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.
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.
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.
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.
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_productsRead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| saved_ids | Yes | saved_id values of product_analysis results |
Output Schema
| Name | Required | Description |
|---|---|---|
| notes | No | |
| missing | No | Requested ids that are not saved product analyses owned by this user |
| sections | No | |
| participants | No | |
| dashboard_url | No | |
| credits_charged | No | Always 0 |
| freshness_warning | No | null when all evidence is within two days of each other |
find_viral_templateAIdempotentInspect
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).
| Name | Required | Description | Default |
|---|---|---|---|
| niche | Yes | 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. | |
| query | No | Optional 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. | |
| region | No | Optional 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. | |
| window | No | Recency 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. | |
| platform | No | Platform 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_views | No | Optional filter — only return examples above this view count |
Output Schema
| Name | Required | Description |
|---|---|---|
| niche | No | The niche searched |
| from_payg | No | Whether credits came from pay-as-you-go balance |
| templates | No | Ranked viral templates with hook patterns and example URLs |
| credits_remaining | No | Credits remaining after this call |
| from_subscription | No | Whether credits came from subscription |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| handle | No | Creator handle (with or without @). Required if watch_id is not provided. | |
| platform | No | Platform the tracked creator publishes on. Required if watch_id is not provided. | |
| watch_id | No | Watch identifier returned by watch_account or list_watches. Preferred over (platform, handle) when you have it — the ownership check is exact. |
Output Schema
| Name | Required | Description |
|---|---|---|
| status | No | changes_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. |
| changes | No | |
| creator | No | |
| platform | No | |
| top_action | No | Single most useful next tool call given the detected changes. null when nothing meaningful shifted. |
| snapshot_count | No | Total snapshots saved for this watch after this call. |
| credits_charged | No | |
| high_importance | No | |
| medium_importance | No | |
| meaningful_changes | No | Count of high + medium importance changes. |
| current_snapshot_at | No | |
| previous_snapshot_at | No |
TDQS
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.
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.
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.
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.
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.
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_researchRead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| saved_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| kind | No | |
| title | No | |
| result | No | The stored research payload, exactly as saved (allowlisted fields only) |
| saved_at | No | |
| saved_id | No | |
| tool_name | No | |
| product_id | No | |
| source_ref | No | |
| is_archived | No | |
| product_url | No | |
| dashboard_url | No | |
| input_summary | No | |
| schema_version | No | |
| credits_charged | No | Always 0 |
| source_timestamp | No |
list_saved_researchRead-onlyIdempotentInspect
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'.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | ||
| sort | No | ||
| limit | No | ||
| query | No | Case-insensitive title search | |
| cursor | No | next_cursor from the previous page | |
| archived | No | Default active |
Output Schema
| Name | Required | Description |
|---|---|---|
| limit | No | |
| results | No | |
| next_cursor | No | null on the last page |
| dashboard_url | No | The Saved Research page in HookMafia |
| credits_charged | No | Always 0 |
list_watchesARead-onlyIdempotentInspect
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'.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| total | No | |
| watches | No |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| draft | Yes | The text to rewrite | |
| reference_samples | Yes | At least 3 reference samples — TikTok/YouTube/Instagram URLs or raw text |
Output Schema
| Name | Required | Description |
|---|---|---|
| from_payg | No | Whether credits came from pay-as-you-go balance |
| voice_profile | No | Extracted voice DNA profile |
| rewritten_draft | No | The input draft rewritten in the matched voice |
| credits_remaining | No | Credits remaining after this call |
| from_subscription | No | Whether credits came from subscription |
| prompt_instructions | No | Reusable prompt to replicate this voice |
TDQS
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.
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.
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.
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.
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.
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_viralityAIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| niche | No | Niche context | |
| script | Yes | The draft script to predict on (or a video URL — auto-extracts transcript) |
Output Schema
| Name | Required | Description |
|---|---|---|
| blueprint | No | Retention diagnosis with weak seconds identified |
| from_payg | No | Whether credits came from pay-as-you-go balance |
| viral_dna | No | Hook type, structure, emotional triggers breakdown |
| share_reason | No | Why viewers would share this content |
| target_emotion | No | Primary emotion the content targets |
| virality_score | No | Overall virality prediction (0-100) |
| credits_remaining | No | Credits remaining after this call |
| from_subscription | No | Whether credits came from subscription |
TDQS
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.
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.
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.
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.
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.
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 confidence band, evidence-cited why_now[], risks[], insufficient_signals[] and history_coverage. The ranking is deterministic and contains no model output - read 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.
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | 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. | |
| limit | No | 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. | |
| niche | No | Niche or category to search (e.g. 'Beauty & Skincare', 'Fitness & Wellness'). At least one of niche or query is required. | |
| query | No | Free-text product keywords (e.g. 'wireless earbuds'). Widens the search corpus. May be combined with niche. | |
| market | No | 2-letter ISO region code (US, GB, BR, ...) or 'GLOBAL'. Defaults to US. Only regions ScrapeCreators covers for TikTok Shop return usable data. | |
| category | No | Strict 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_sold | No | Maximum provider-reported cumulative sold count. Strict: unknown is dropped. | |
| min_sold | No | Minimum provider-reported cumulative sold count. This is a lifetime total, not a sales rate. Strict: unknown is dropped. | |
| price_max | No | Maximum price in the market currency. | |
| price_min | No | Minimum price in the market currency. | |
| max_rating | No | Maximum 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_rating | No | Minimum average rating 0-5. Strict: rows with unknown rating are dropped. | |
| max_reviews | No | Maximum 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_reviews | No | Minimum 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_discount | No | Maximum discount percentage 0-100. Strict: unknown is dropped. | |
| min_discount | No | Minimum discount percentage 0-100 off the listed original price. Strict: unknown is dropped. | |
| min_momentum | No | Minimum 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_saturation | No | Maximum 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_competition | No | Maximum competition tolerated, 0-100, expressed intuitively (lower = less competition accepted). | |
| opportunity_stage | No | Comma-separated stages to keep: emerging, promising, crowded, mature, cooling. Use 'emerging,promising' for the usual 'find breakout products' request. | |
| min_creator_adoption | No | Minimum 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
| Name | Required | Description |
|---|---|---|
| niche | No | |
| query | No | |
| region | No | |
| success | Yes | |
| executed | No | Present and false when the request needed stored history that is unavailable. Nothing was charged; drop the history-backed filter or sort and retry. |
| provenance | No | |
| generated_at | No | ISO timestamp |
| opportunities | No | |
| query_context | No | The filters actually applied, echoed back. |
| source_coverage | No | What the engine managed to read: shop search, product hydration, history depth, counts. |
| credits_remaining | No | |
| recommended_chain | No | Suggested 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_reasons | No | Why coverage was partial, when it was. Surface these rather than presenting a degraded result as complete. |
| skipped_intelligence_filters | No | Filters that could not be enforced for this request. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With annotations limited to readOnly/openWorld/idempotent/destructive hints, the description carries the real behavioral load: deterministic 9-component engine with no model output, cost of 5 credits, shop_intelligence entitlement requirement, null-means-unknown semantics for provider_reported.*, absence of any revenue/GMV field, and the instruction never to present the score alone.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose, then example questions, return semantics, sibling routing, and cost. Dense and information-rich, but several clauses (revenue/GMV caveats, provider_reported explanation) are somewhat repetitive relative to their operational value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 21-parameter open-world ranking tool with an output schema, the description supplies everything an agent needs: what it ranks, the component/status/confidence model, how to interpret why_now/risks, and how to route to analyze_product. Nothing material is missing despite the output schema already covering return shape.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all 21 parameters in detail (including strict-filter and cold-start behaviors). The description adds engine-level context but no additional parameter syntax or format meaning beyond what the schema provides, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Find and rank current TikTok Shop / social-commerce product opportunities') with a clear differentiator ('using evidence rather than opinion'). It explicitly distinguishes itself from siblings by naming analyze_product, search_videos, and analyze_account and describing what each does instead.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides concrete example questions that select this tool, gives the explicit handoff rule ('once you have a shortlist, call analyze_product'), and names when NOT to use it (generic video search, creator analysis, guaranteed-sales claims). Alternatives and conditions are fully spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
save_researchIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | Yes | creator_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) | |
| title | Yes | Short plain-text title, e.g. "@handle TikTok analysis" or the product name | |
| result | Yes | The structured result of the earlier tool call, exactly as received. Up to 64 KB after server-side allowlisting. | |
| tool_name | Yes | The HookLayer tool that produced the result, e.g. analyze_product | |
| product_id | No | Canonical product id for product_analysis / product_scout results | |
| request_id | No | Idempotency key. Reuse the same value when retrying the same save; a different result under the same key is refused. | |
| product_url | No | http(s) product page URL | |
| input_summary | No | What was asked: handle, platform, topic, product URL. Up to 4 KB. Never include credentials. | |
| source_timestamp | No | ISO 8601 time the research ran (the result's as_of / fetched_at when present) |
Output Schema
| Name | Required | Description |
|---|---|---|
| saved | No | |
| deduplicated | No | true when the same request_id and identical content had already been saved; nothing new was written |
| dashboard_url | No | |
| dropped_fields | No | Top-level result fields that are not persisted (billing, chain hints, unknown keys) |
| credits_charged | No | Always 0 |
score_hookAIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | The hook to score (3-200 chars typical) | |
| niche | No | Optional niche context (e.g. "Beauty & Skincare", "Finance & Business") | |
| platform | Yes | Target platform — affects pattern matching |
Output Schema
| Name | Required | Description |
|---|---|---|
| why | No | One-sentence verdict explaining the score |
| score | No | Hook quality score (0-100) |
| rewrites | No | Three rewritten versions at higher quality |
| breakdown | No | Sub-scores (0-100) for five quality dimensions |
| from_payg | No | Whether credits came from pay-as-you-go balance |
| strengths | No | What the hook does well |
| percentile | No | Percentile rank vs all scored hooks |
| weaknesses | No | What could be improved |
| pattern_match | No | Matched viral pattern name |
| credits_remaining | No | Credits remaining after this call |
| from_subscription | No | Whether credits came from subscription |
TDQS
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.
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.
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.
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.
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.
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_videosAIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max videos to return after filtering. Default 12, max 20. | |
| niche | No | Optional — only return videos whose description contains niche-related tokens. Loose niche strings work ("fitness", "Beauty & Skincare"). | |
| query | Yes | Free-text search term. Examples: "morning routine", "iphone case", "passive income". | |
| region | No | ISO 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. | |
| window | No | Recency filter. Maps to the closest ScrapeCreators date bucket AND applies a client-side cutoff for defense-in-depth. | |
| platform | No | Which 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_views | No | Optional view-count floor. Default 0. |
Output Schema
| Name | Required | Description |
|---|---|---|
| videos | No | |
| applied | No | Echo of the filters actually applied — useful for debugging when results look surprising |
| quality | No | |
| from_payg | No | |
| filtered_count | No | Videos returned after filtering + cap |
| upstream_count | No | Videos returned by upstream before any filtering |
| credits_remaining | No | Credits remaining after this call |
| from_subscription | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, idempotentHint=true, destructiveHint=false, so the safety profile is covered. The description adds valuable behavioral context: it mentions the 'degraded quality flag' for small regions, the client-side cutoff for window, and the platform-specific note that Instagram ignores region/date_posted params. This goes beyond annotations and helps the agent understand edge cases.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, with the core purpose front-loaded and filters summarized in one sentence. It's efficient and doesn't waste words. A slight deduction because it could be slightly more structured (e.g., bullet points for filters), but it's still well-organized and readable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (7 params, 2 enums, platform-specific behavior), the description covers the key points: what it returns, when to use it, and the main edge cases (region coverage, platform differences). The output schema exists, so return values are covered. It doesn't mention pagination or rate limits, but those are minor for a search tool. A 4 is fair.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all parameters well. The description adds value by summarizing the optional filters (niche, minimum views, recency window, region) and by noting the 'degraded quality flag' for regions, which is not in the schema. It doesn't repeat schema details but adds a layer of context, so a 4 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Search'), a resource ('short-form videos'), and the platforms ('TikTok or Instagram'). It clearly distinguishes from siblings like 'find_viral_template' or 'trend_pulse' by focusing on keyword search for videos. The scope and output are explicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says 'Use when the user asks to find videos about a topic or keyword,' which provides clear context. It doesn't explicitly name alternatives or when-not-to-use, but the sibling list and the specific phrasing make the usage context clear enough. A small deduction for not naming alternatives explicitly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
trend_pulseAIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| niche | No | 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. | |
| region | No | Optional 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_hours | No | Optional (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
| Name | Required | Description |
|---|---|---|
| niche | No | The niche these trends apply to |
| rising | No | Rising opportunities (format/hook/style) with qualitative growth labels + signal_strength numeric anchor (0-1) + suggestions |
| from_payg | No | Whether credits came from pay-as-you-go balance |
| saturated | No | Saturated patterns to avoid |
| credits_remaining | No | Credits remaining after this call |
| from_subscription | No | Whether credits came from subscription |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| niche | No | Optional niche hint | |
| my_topic | No | DEPRECATED alias for target_topic. Legacy clients only. Normalized internally. | |
| platform | No | Target platform for the remix. Adjusts pacing and CTA style if provided. | |
| source_url | No | TikTok/YouTube/Instagram URL — transcript will be auto-extracted | |
| transcript | No | Pre-extracted transcript (alternative to source_url, faster) | |
| target_topic | No | What the remix should be about. Default: same niche as original. | |
| target_product | No | 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. | |
| verified_product_facts | No | 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). |
Output Schema
| Name | Required | Description |
|---|---|---|
| overlays | No | Text overlay suggestions per scene |
| from_payg | No | Whether credits came from pay-as-you-go balance |
| verify_hook | No | 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. |
| camera_shots | No | Phone-native camera direction per scene |
| fresh_script | No | Complete scene-by-scene script mirroring the source structure |
| cta_archetype | No | Which 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_authenticity | No | Tripwire 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_remaining | No | Credits remaining after this call |
| extracted_formula | No | The viral DNA formula extracted from the source |
| from_subscription | No | Whether credits came from subscription |
| structural_skeleton | No | Which structural skeleton the generator used (confession_to_result, mistake_to_correction, etc). Surfaces rotation across the fleet. |
TDQS
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.
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.
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.
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.
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.
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_accountAIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| handle | Yes | Creator handle (with or without @ prefix). Examples: "@mrbeast", "mrbeast". | |
| platform | Yes | Platform the creator publishes on. Same platforms as analyze_account. |
Output Schema
| Name | Required | Description |
|---|---|---|
| status | No | |
| creator | No | Normalized "@handle" the watch is stored under |
| message | No | |
| platform | No | |
| watch_id | No | |
| data_age_days | No | Age in days of the newest video in the baseline |
| snapshot_count | No | Total snapshots stored for this watch so far |
| baseline_source | No | watch_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_charged | No | |
| baseline_created_at | No | ISO timestamp of the baseline snapshot |
TDQS
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.
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.
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.
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.
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.
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.
4 tool updates
- Added
compare_saved_products - Added
get_saved_research - Added
list_saved_research - Added
save_research
4 tool updates
- Changed
analyze_account1 field changed- changed
Output schema / properties / recommended_chain / items / properties / side_effects / descriptionPrevious 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)."
- Changed
brief_to_blueprint1 field changed- changed
Input schema / properties / niche / descriptionPrevious 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."
- Changed
find_viral_template1 field changed- changed
Input schema / properties / niche / descriptionPrevious 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."
- Changed
trend_pulse1 field changed- changed
Input schema / properties / niche / descriptionPrevious 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."
1 tool update
- Changed
viral_remix1 field changed- changed
Input schema / properties / verified_product_facts / descriptionPrevious 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)."
1 tool update
- Changed
product_scout1 field changed- changed
Input schema / properties / limit / descriptionPrevious 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."
2 tool updates
- Added
analyze_product - Added
product_scout
1 tool update
- Changed
viral_remix1 field changed- changed
Input schema / properties / verified_product_facts / descriptionPrevious 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)."
3 tool updates
- Added
get_changes - Added
list_watches - Added
watch_account
1 tool update
- Changed
viral_remix5 fields changed- changed
Input schema / properties / my_topic / descriptionPrevious value: -"What the remix should be about. Default: same niche as original."New value: +"DEPRECATED alias for target_topic. Legacy clients only. Normalized internally." - added
Input schema / properties / platformAdded value: +{ + "description": "Target platform for the remix. Adjusts pacing and CTA style if provided.", + "enum": [ + "tiktok", + "reels", + "shorts" + ], + "type": "string" +} - added
Input schema / properties / target_productAdded 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" +} - added
Input schema / properties / target_topicAdded value: +{ + "description": "What the remix should be about. Default: same niche as original.", + "type": "string" +} - added
Input schema / properties / verified_product_factsAdded 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" +}
2 tool updates
- Changed
analyze_account1 field changed- added
Output schema / properties / headline_insightAdded 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" +}
- Changed
viral_remix1 field changed- changed
Output schema / properties / verify_hook / descriptionPrevious 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."
5 tool updates
- Changed
analyze_account2 fields changed- changed
Input schema / properties / platform / descriptionPrevious value: -"Platform to analyze. \"tiktok\" (default) returns full pipeline with transcripts. \"youtube\" analyzes the channel's recent Shorts via YouTube Data API + Innertube caption extraction (v1.1, 2026-06-10) — videos with captions disabled or geoblocked resolve to transcript: null and the response flags how many were extracted. Instagram ships in v1.2."New value: +"Platform 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." - changed
Input schema / properties / platform / enumPrevious value: -[ - "tiktok", - "youtube" -]New value: +[ + "tiktok", + "youtube", + "instagram" +]
- Added
brief_to_blueprint - Changed
find_viral_template1 field changed- added
Input schema / properties / platformAdded value: +{ + "description": "Platform 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).", + "enum": [ + "tiktok", + "instagram" + ], + "type": "string" +}
- Changed
search_videos1 field changed- added
Input schema / properties / platformAdded value: +{ + "description": "Which 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).", + "enum": [ + "tiktok", + "instagram" + ], + "type": "string" +}
- Changed
trend_pulse1 field changed- added
Input schema / properties / deadline_hoursAdded value: +{ + "description": "Optional (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.\"", + "maximum": 168, + "minimum": 1, + "type": "integer" +}
1 tool update
- Changed
find_viral_template1 field changed- added
Input schema / properties / queryAdded value: +{ + "description": "Optional 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.", + "type": "string" +}
1 tool update
- Changed
viral_remix5 fields changed- added
Output schema / properties / cta_archetypeAdded value: +{ + "description": "Which CTA archetype the generator picked. Comment_gate is the failure-mode default for AI script generators; rotation tells you whether the prompt is working.", + "enum": [ + "result_close", + "soft_bio_pointer", + "genuine_question", + "pinned_comment", + "comment_gate" + ], + "type": "string" +} - removed
Output schema / properties / hook_scoreRemoved value: -{ - "description": "Self-rated hook quality score (0-100)", - "type": "number" -} - added
Output schema / properties / structural_skeletonAdded value: +{ + "description": "Which structural skeleton the generator used (confession_to_result, mistake_to_correction, etc). Surfaces rotation across the fleet.", + "type": "string" +} - added
Output schema / properties / ugc_authenticityAdded value: +{ + "description": "Tripwire 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.", + "properties": { + "level": { + "description": "Honest signal of whether the generator drifted ad-ward", + "enum": [ + "native", + "ad_leaning" + ], + "type": "string" + }, + "reasons": { + "description": "List of detected drift reasons (e.g. \"hook is 22 words\", \"CTA is comment-gate\")", + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" +} - added
Output schema / properties / verify_hookAdded value: +{ + "description": "Hook + instruction to chain into score_hook for a structurally-independent score (the script generator deliberately does NOT self-rate)", + "type": "object" +}
Related MCP Connectors
Agents-first viral-hook engine: generate, score, and remix short-form hooks over MCP.
MCP-native web evidence and claim verification: cited, source-grounded evidence for AI agents.
100+ MCP tools for AI agents: content metadata, trade intelligence, business-expertise analysis.
Brand-intelligence MCP: momentum scoring, signal evidence, and competitive context for agents.
Related MCP Servers
- AlicenseAqualityCmaintenanceLicensed, rights-cleared content for AI agents, 17 tools to discover, license, retrieve, and verify expert content with on-chain proof and EU AI Act Article 53 support.875 npm1MIT
- AlicenseAqualityCmaintenanceWeb 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.717 PyPI2AGPL 3.0
- AlicenseNot gradedqualityCmaintenanceA read-only MCP server that gives AI agents the web as compact, ranked, verified evidence — no API keys, no cloud retrieval, all models local.64 npm1MIT
- AlicenseNot gradedqualityFmaintenanceVisibility-aware knowledge vault for AI agents with 20 MCP tools.3Apache 2.0
Glama MCP Gateway
Add one secure layer between your agents and this server.