Skip to main content
Glama

analyze_account

Idempotent

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).

Input Schema

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

Output Schema

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

Schema Changelog

Changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. Changed1 schema field changed
    • addedOutput schema / properties / headline_insight
      Added value: +{
      +  "description": "The largest quantified performance gap for this creator, plus its implication. Presentation-neutral data — the caller decides whether and how to surface it.",
      +  "properties": {
      +    "confidence": {
      +      "description": "Confidence in the headline insight; lower on thin (<8 videos) or stale (>30 days) samples.",
      +      "enum": [
      +        "high",
      +        "medium",
      +        "low"
      +      ],
      +      "type": "string"
      +    },
      +    "so_what": {
      +      "description": "The one concrete change the wow gap implies, stated in a single line.",
      +      "type": "string"
      +    },
      +    "wow": {
      +      "description": "The single most material finding in the account's data: the dimension (video length, hook type, format, posting cadence, or topic) with the largest quantified performance gap, stated with two real numbers from the creator's videos. Not a restated score.",
      +      "type": "string"
      +    }
      +  },
      +  "type": "object"
      +}
  2. Changed2 schema fields changed
    • changedInput schema / properties / platform / description
      Previous 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."
    • changedInput schema / properties / platform / enum
      Previous value: -[
      -  "tiktok",
      -  "youtube"
      -]New value: +[
      +  "tiktok",
      +  "youtube",
      +  "instagram"
      +]
  3. Changed1 schema field changed
    • changedInput schema / properties / platform / description
      Previous value: -"Platform to analyze. \"tiktok\" (default) returns full pipeline with transcripts. \"youtube\" analyzes the channel's recent Shorts via YouTube Data API; transcript extraction ships in v1.1 — meta-analysis still runs on titles, durations, hashtags, and engagement stats. Instagram ships in v1.2."New 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."
  4. Changed3 schema fields changed
    • addedInput schema / properties / recent_only
      Added value: +{
      +  "description": "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.",
      +  "type": "boolean"
      +}
    • addedInput schema / properties / since
      Added value: +{
      +  "description": "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.",
      +  "type": "string"
      +}
    • addedInput schema / properties / window
      Added value: +{
      +  "description": "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.",
      +  "enum": [
      +    "24h",
      +    "7d",
      +    "30d",
      +    "90d",
      +    "6m",
      +    "12m",
      +    "this-month"
      +  ],
      +  "type": "string"
      +}
  5. Changed3 schema fields changed
    • changedInput schema / properties / handle / description
      Previous value: -"TikTok handle, with or without @ prefix (e.g. \"@mrbeast\" or \"mrbeast\")"New value: +"Creator handle (with or without @ prefix) or YouTube channel ID. Examples: \"@mrbeast\", \"mrbeast\", \"UCX6OQ3DkcsbYNE6H8uQQuVA\"."
    • changedInput schema / properties / platform / description
      Previous value: -"Platform — currently only \"tiktok\" is supported"New value: +"Platform to analyze. \"tiktok\" (default) returns full pipeline with transcripts. \"youtube\" analyzes the channel's recent Shorts via YouTube Data API; transcript extraction ships in v1.1 — meta-analysis still runs on titles, durations, hashtags, and engagement stats. Instagram ships in v1.2."
    • addedInput schema / properties / platform / enum
      Added value: +[
      +  "tiktok",
      +  "youtube"
      +]
  6. Changed1 schema field changed
    • addedOutput schema / properties / recommended_chain / items / properties / action_class
      Added value: +{
      +  "description": "Authority taxonomy: research (read-only data gathering, lowest authority), synthesize (generate content in-memory, low), draft (save to workspace, medium), publish (post to external platforms, HIGH), account (modify account/billing, HIGHEST). All Hooklayer v1 tools are research or synthesize.",
      +  "enum": [
      +    "research",
      +    "synthesize",
      +    "draft",
      +    "publish",
      +    "account"
      +  ],
      +  "type": "string"
      +}
  7. Changed2 schema fields changed
    • changedOutput schema / properties / recommended_chain / description
      Previous value: -"Pre-filled next tool calls (match_voice, trend_pulse, viral_remix)"New value: +"Suggested next tool calls with pre-filled parameters — advisory only, agent decides whether to execute"
    • addedOutput schema / properties / recommended_chain / items / properties
      Added value: +{
      +  "confidence": {
      +    "description": "Signal-derived confidence that this step will produce useful results",
      +    "enum": [
      +      "high",
      +      "medium",
      +      "low"
      +    ],
      +    "type": "string"
      +  },
      +  "cost": {
      +    "description": "Credit cost for this tool call",
      +    "type": "number"
      +  },
      +  "expected_output": {
      +    "description": "One-line summary of what this tool returns",
      +    "type": "string"
      +  },
      +  "params": {
      +    "description": "Pre-filled parameters for the tool",
      +    "type": "object"
      +  },
      +  "reason": {
      +    "description": "Why this step is recommended",
      +    "type": "string"
      +  },
      +  "side_effects": {
      +    "description": "Always \"none\" — all tools are read-only",
      +    "type": "string"
      +  },
      +  "tool": {
      +    "description": "Exact tool name to call",
      +    "type": "string"
      +  }
      +}
  8. Changed1 schema field changed
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "properties": {
      +    "content_gaps": {
      +      "description": "Untapped content opportunities the creator is missing",
      +      "items": {
      +        "type": "string"
      +      },
      +      "type": "array"
      +    },
      +    "credits_remaining": {
      +      "description": "Credits remaining after this call",
      +      "type": "number"
      +    },
      +    "format_fingerprint": {
      +      "description": "Dominant content format patterns (durations, styles, edit types)",
      +      "type": "object"
      +    },
      +    "from_payg": {
      +      "description": "Whether credits came from pay-as-you-go balance",
      +      "type": "boolean"
      +    },
      +    "from_subscription": {
      +      "description": "Whether credits came from subscription",
      +      "type": "boolean"
      +    },
      +    "pattern_analysis": {
      +      "description": "Content pattern breakdown (posting cadence, topic clusters)",
      +      "type": "object"
      +    },
      +    "profile": {
      +      "description": "Creator profile (handle, bio, followers, following, total_likes, total_videos)",
      +      "type": "object"
      +    },
      +    "recent_videos": {
      +      "description": "Top recent videos with view counts, transcripts, and engagement",
      +      "items": {
      +        "type": "object"
      +      },
      +      "type": "array"
      +    },
      +    "recommended_chain": {
      +      "description": "Pre-filled next tool calls (match_voice, trend_pulse, viral_remix)",
      +      "items": {
      +        "type": "object"
      +      },
      +      "type": "array"
      +    },
      +    "steal_map": {
      +      "description": "Actionable elements to replicate from this creator",
      +      "items": {
      +        "type": "object"
      +      },
      +      "type": "array"
      +    },
      +    "viral_dna": {
      +      "description": "Five viral DNA scores (0-100 each)",
      +      "properties": {
      +        "audience_fatigue": {
      +          "type": "number"
      +        },
      +        "consistency_score": {
      +          "type": "number"
      +        },
      +        "originality_score": {
      +          "type": "number"
      +        },
      +        "replicability_score": {
      +          "type": "number"
      +        },
      +        "viral_dna_score": {
      +          "type": "number"
      +        }
      +      },
      +      "type": "object"
      +    }
      +  },
      +  "type": "object"
      +}
  9. First observed

TDQS

A4.5/5.0
Behavior5/5

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

Beyond the annotations (idempotent, non-destructive), the description discloses several important behavioral traits: the "honest empty + warning" behavior for zero-matching filters, "no credits charged" on that path, "transcript: null" when captions are disabled/geoblocked, and Instagram's "lifetime totalLikes defaults to 0." This level of edge-case disclosure goes well beyond what annotations provide and helps the agent set accurate user expectations.

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

Conciseness5/5

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

The description is information-dense but well organized: action first, outputs second, usage trigger third, platform-specific behavior last. Every sentence contributes unique value, including the credit-charge warning and platform caveats. Despite its length, it is front-loaded and easy to scan, and the complexity of the tool justifies the length.

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

Completeness5/5

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

The description covers the core action, all supported platforms and their transcript availability, key output fields, usage context, and important edge cases (empty results, credit charges, platform data limitations). An output schema exists, so return values don't need to be re-explained. Nothing essential for selecting or invoking this tool is missing.

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

Parameters3/5

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

Schema description coverage is 100%, with each parameter (handle, since, window, platform, recent_only) already thoroughly documented in the schema. The description adds high-level context—like platform transcript expectations and the since vs. window exclusivity—but for the most part it does not need to explain parameters because the schema already carries that burden. Baseline 3 is appropriate.

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

Purpose5/5

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

The description opens with a specific verb and resource: "Analyze a TikTok, YouTube, or Instagram creator by handle or channel ID." It then enumerates a distinctive set of outputs (viral DNA scores, content patterns, headline_insight, etc.) that clearly separates this from sibling tools like watch_account or predict_virality. An agent can confidently identify what this tool does from the first sentence alone.

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

Usage Guidelines4/5

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

The description explicitly states when to use it: "Use when the user asks to analyze a creator, account, channel, or competitor." This is clear and actionable. However, it does not mention when not to use it or point to an alternative sibling (e.g., watch_account for ongoing monitoring), so it stops short of the full when/when-not/alternatives guidance required for a 5.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

TDQS

A4.1/5.0
Disambiguation4/5

Each tool targets a distinct purpose: analysis, trend research, scoring, creation, and tracking. The lifecycle tools (analyze_account, watch_account, get_changes) are related but clearly delineated by baseline creation vs. comparison. score_hook and predict_virality could be mildly confused since both score content, though descriptions clarify hook-level vs. full-draft scope.

Naming Consistency4/5

Nine of twelve tools follow the verb_noun pattern (analyze_account, find_viral_template, get_changes, list_watches, match_voice, predict_virality, score_hook, search_videos, watch_account). Three deviate: brief_to_blueprint, trend_pulse, and viral_remix use prepositional or noun-based naming, creating minor inconsistency but not confusion.

Tool Count5/5

Twelve tools for a short-form content intelligence platform feels well-scoped. The surface covers research (4 tools), creation (3), validation (2), and tracking (3), with each tool earning its place. This sits comfortably within the ideal 3-15 range for a domain-specific server.

Completeness3/5

The research, creation, and validation workflows are well-covered, but the tracking lifecycle has a notable gap: watch_account and list_watches exist with no unwatch/remove_watch tool, and get_changes implies persistence without a way to manage it. Also missing is a single-video deep-dive tool (analyze_account only covers videos within full account analysis) and direct creator-to-creator comparison.