addrbookFor publishers
← The evidence ledger

Evidence row 3735778

Observed , by probe.mcp/1.

Kind
mcp.tools
About
endpoint c59624dd-3017-4853-91d7-0e8ce5a8fbd8
Recorded
Previous row
#3382738
Body SHA-256
313296204ff2a9b0c4f9075e418c0fc451aeb4d6f860bf2b791e7d66463a708f
Leaf
0x1273b4611258c9f506e0d75d9b43429bb0a88b2972fa0d804701d6cbce029b0b

What was observed

{
  "count": 14,
  "tools": [
    {
      "description": "After rendering a video from a reference, check it against that film's measured timeline and get concrete fixes: cut timing to the frame, pace, brightness curve, motion per shot, loudness for the platform, and format. First measure your render: run `node scripts/measure.mjs <file>` from the Refs starter kit (curl -sL https://refs.video/starter.zip -o refs-starter.zip && unzip refs-starter.zip; it unpacks to refs-starter/) and pass the JSON it prints as `render`. Returns a score out of 100, a table of checks and a numbered fix list (frames at your render's frame rate), then the same as JSON. Costs 2 credits, so fix, re-measure and check again. Needs a Refs account with Pro; without one, the app asks the user to sign in. search_videos is free.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "properties": {
          "context": {
            "description": "Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\"",
            "type": "string"
          },
          "id": {
            "description": "The reference you built from: REF-0005, a refs.video/v/… link, a YouTube/X link, or an id from search_videos",
            "type": "string"
          },
          "llm_model": {
            "description": "The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Used for analytics only. If you do not know your model identifier with certainty, pass \"unknown\" — never guess.",
            "type": "string"
          },
          "render": {
            "anyOf": [
              {
                "properties": {
                  "audio": {
                    "properties": {
                      "has_audio": {
                        "type": "boolean"
                      },
                      "integrated_lufs": {
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "range_lu": {
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "true_peak_dbtp": {
                        "type": [
                          "number",
                          "null"
                        ]
                      }
                    },
                    "required": [
                      "has_audio",
                      "integrated_lufs",
                      "true_peak_dbtp",
                      "range_lu"
                    ],
                    "type": "object"
                  },
                  "cuts": {
                    "items": {
                      "properties": {
                        "frame": {
                          "maximum": 9007199254740991,
                          "minimum": 0,
                          "type": "integer"
                        },
                        "score": {
                          "type": "number"
                        },
                        "t": {
                          "minimum": 0,
                          "type": "number"
                        }
                      },
                      "required": [
                        "t",
                        "frame",
                        "score"
                      ],
                      "type": "object"
                    },
                    "type": "array"
                  },
                  "duration_s": {
                    "exclusiveMinimum": 0,
                    "type": "number"
                  },
                  "file": {
                    "type": "string"
                  },
                  "fps": {
                    "exclusiveMinimum": 0,
                    "maximum": 1000,
                    "type": "number"
                  },
                  "height": {
                    "exclusiveMinimum": 0,
                    "maximum": 9007199254740991,
                    "type": "integer"
                  },
                  "kind": {
                    "const": "refs-render-measure",
                    "type": "string"
                  },
                  "luma": {
                    "properties": {
                      "mean": {
                        "items": {
                          "type": "number"
                        },
                        "type": "array"
                      },
                      "p95": {
                        "items": {
                          "type": "number"
                        },
                        "type": "array"
                      },
                      "step_s": {
                        "exclusiveMinimum": 0,
                        "type": "number"
                      }
                    },
                    "required": [
                      "step_s",
                      "mean",
                      "p95"
                    ],
                    "type": "object"
                  },
                  "motion": {
                    "properties": {
                      "diff": {
                        "items": {
                          "type": "number"
                        },
                        "type": "array"
                      },
                      "step_s": {
                        "exclusiveMinimum": 0,
                        "type": "number"
                      }
                    },
                    "required": [
                      "step_s",
                      "diff"
                    ],
                    "type": "object"
                  },
                  "version": {
                    "type": "number"
                  },
                  "width": {
                    "exclusiveMinimum": 0,
                    "maximum": 9007199254740991,
                    "type": "integer"
                  }
                },
                "required": [
                  "kind",
                  "version",
                  "duration_s",
                  "fps",
                  "width",
                  "height",
                  "cuts",
                  "luma",
                  "motion",
                  "audio"
                ],
                "type": "object"
              },
              {
                "additionalProperties": {},
                "propertyNames": {
                  "type": "string"
                },
                "type": "object"
              },
              {
                "type": "string"
              }
            ],
            "description": "The JSON printed by `node scripts/measure.mjs <your video>`, as an object (or that JSON as text)"
          },
          "target": {
            "description": "Where it will be posted; sets the loudness target: x, youtube, instagram and meta −14 LUFS, tiktok −14 to −10, web −16, true peak ≤ −1 dBTP. Default: the reference's platform",
            "enum": [
              "x",
              "youtube",
              "tiktok",
              "instagram",
              "meta",
              "web"
            ],
            "type": "string"
          }
        },
        "required": [
          "id",
          "render",
          "context",
          "llm_model"
        ],
        "type": "object"
      },
      "name": "check_render"
    },
    {
      "description": "The full reverse-engineered blueprint of one video: hook frame by frame, beat sheet with timestamps, shot list, style guide, voice and sound, script template, production plan, edit recipe, QA checklist, plus a runnable recipe prompt. Markdown by default; format \"json\" returns the plates, toolkit, recipe and measured timeline as one object. To see the film's frames, call get_frames. Accepts a REF id (REF-0005), a refs.video link, the source YouTube/X link, or the id from search_videos. Needs a Refs account with Pro; without one, the app asks the user to sign in. search_videos is free.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "properties": {
          "context": {
            "description": "Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\"",
            "type": "string"
          },
          "format": {
            "description": "Default markdown. \"json\": plates as an array, the toolkit, the measured timeline (shots, camera, type, audio grid) and the frame sheets on hand",
            "enum": [
              "markdown",
              "json"
            ],
            "type": "string"
          },
          "id": {
            "description": "REF-0005, a refs.video/v/… link, a YouTube/X link, an id from search_videos, or one of your brand films (brand:<import>:<film>, from get_brand)",
            "type": "string"
          },
          "include_recipe": {
            "description": "Default true",
            "type": "boolean"
          },
          "llm_model": {
            "description": "The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Used for analytics only. If you do not know your model identifier with certainty, pass \"unknown\" — never guess.",
            "type": "string"
          }
        },
        "required": [
          "id",
          "context",
          "llm_model"
        ],
        "type": "object"
      },
      "name": "get_blueprint"
    },
    {
      "description": "One of your brand imports: the brand kit (the brand's house style across all its films: palette, type, logo and end card, motion and easing, pacing and cut rhythm, camera, transitions, sound and voice, recurring formats, written as rules to follow) plus each film's blueprint summary with its id (brand:<import>:<film>) for get_blueprint and get_frames. Private to you. To make a new film in this style, call plan_video(brief, brand: id). Needs a Refs account with Pro; without one, the app asks the user to sign in. search_videos is free.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "properties": {
          "context": {
            "description": "Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\"",
            "type": "string"
          },
          "id": {
            "description": "An import id from list_brands, a refs.video/b/… link, or the X handle you imported (e.g. @yourbrand)",
            "type": "string"
          },
          "limit": {
            "description": "Films to include; default 20",
            "maximum": 20,
            "minimum": 1,
            "type": "integer"
          },
          "llm_model": {
            "description": "The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Used for analytics only. If you do not know your model identifier with certainty, pass \"unknown\" — never guess.",
            "type": "string"
          }
        },
        "required": [
          "id",
          "context",
          "llm_model"
        ],
        "type": "object"
      },
      "name": "get_brand"
    },
    {
      "description": "Every film in a Refs collection as search cards (REF id, link, length, aspect, measured metrics, why it works). Takes a collection id or refs.video/c/… link: anyone's shared collection, or your own private one; \"favourites\" gives the films you hearted. Then use them as references: plan_video(brief, reference_ids) with up to 5 that fit the brief, get_blueprint for one film in full. Needs a Refs account with Pro; without one, the app asks the user to sign in. search_videos is free.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "properties": {
          "context": {
            "description": "Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\"",
            "type": "string"
          },
          "id": {
            "description": "A collection id like k3j9x2mq, a refs.video/c/… link, or \"favourites\"",
            "type": "string"
          },
          "limit": {
            "description": "Default 50",
            "maximum": 100,
            "minimum": 1,
            "type": "integer"
          },
          "llm_model": {
            "description": "The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Used for analytics only. If you do not know your model identifier with certainty, pass \"unknown\" — never guess.",
            "type": "string"
          }
        },
        "required": [
          "id",
          "context",
          "llm_model"
        ],
        "type": "object"
      },
      "name": "get_collection"
    },
    {
      "description": "The full cross-video formula for one format, as markdown: structure, timing ranges, what top performers share, mistakes to avoid, and a template prompt. Needs a Refs account with Pro; without one, the app asks the user to sign in. search_videos is free.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "properties": {
          "context": {
            "description": "Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\"",
            "type": "string"
          },
          "id": {
            "type": "string"
          },
          "llm_model": {
            "description": "The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Used for analytics only. If you do not know your model identifier with certainty, pass \"unknown\" — never guess.",
            "type": "string"
          }
        },
        "required": [
          "id",
          "context",
          "llm_model"
        ],
        "type": "object"
      },
      "name": "get_formula"
    },
    {
      "description": "One video's labelled frame sheets as images, so you can see the reference instead of guessing from text: the hook (first 3 s at 0.25 s steps), one frame per shot, and the whole film at fixed steps where measured. sheet \"transitions\" adds every frame around each cut and in-shot change, for timing transitions to the frame. Each image follows a caption saying how its labels read. Accepts the same ids as get_blueprint. Needs a Refs account with Pro; without one, the app asks the user to sign in. search_videos is free.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "properties": {
          "context": {
            "description": "Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\"",
            "type": "string"
          },
          "id": {
            "description": "REF-0005, a refs.video/v/… link, a YouTube/X link, an id from search_videos, or one of your brand films (brand:<import>:<film>)",
            "type": "string"
          },
          "llm_model": {
            "description": "The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Used for analytics only. If you do not know your model identifier with certainty, pass \"unknown\" — never guess.",
            "type": "string"
          },
          "sheet": {
            "description": "Default all (hook, shots and timeline; ask for \"transitions\" separately)",
            "enum": [
              "hook",
              "shots",
              "timeline",
              "transitions",
              "all"
            ],
            "type": "string"
          }
        },
        "required": [
          "id",
          "context",
          "llm_model"
        ],
        "type": "object"
      },
      "name": "get_frames"
    },
    {
      "description": "One of your competitor UGC scans (from ugc_scan): its status and progress while the worker runs (queued → finding competitors → fetching ads → measuring → writing → summary → done), then the board: each competitor's winning UGC ads ranked by signal (days running, variants, reach, CTR percentile, views) with the one-line reason each won, and \"what wins in your category\" (top hooks, formats, lengths and offers) as markdown and structured fields. Ads already in the Refs library carry REF ids for get_blueprint, get_frames and plan_video; the scan's own ads carry ugc:<scan>:<film> refs, and get_ugc_scan(id, film) returns one's blueprint. plan.prompt is a ready brief for planning the user's own UGC ad. Private to you; Pro, free in credits.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "properties": {
          "context": {
            "description": "Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\"",
            "type": "string"
          },
          "film": {
            "description": "A film from the board (its film id or ugc:… ref): returns its blueprint",
            "type": "string"
          },
          "id": {
            "description": "A scan id from ugc_scan, a refs.video/ugc/… link, a ugc:<scan>:<film> ref, or the product link you scanned",
            "type": "string"
          },
          "llm_model": {
            "description": "The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Used for analytics only. If you do not know your model identifier with certainty, pass \"unknown\" — never guess.",
            "type": "string"
          }
        },
        "required": [
          "id",
          "context",
          "llm_model"
        ],
        "type": "object"
      },
      "name": "get_ugc_scan"
    },
    {
      "description": "Your brand imports on refs.video (refs.video/saved → Brandprint): each X account you imported, with its progress and film count. Private to you. Pass an id or handle to get_brand for the brand kit and every film. Needs a Refs account with Pro; without one, the app asks the user to sign in. search_videos is free.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "properties": {
          "context": {
            "description": "Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\"",
            "type": "string"
          },
          "llm_model": {
            "description": "The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Used for analytics only. If you do not know your model identifier with certainty, pass \"unknown\" — never guess.",
            "type": "string"
          }
        },
        "required": [
          "context",
          "llm_model"
        ],
        "type": "object"
      },
      "name": "list_brands"
    },
    {
      "description": "Your collections on refs.video (named sets of films you saved) and your favourites, with ids and film counts. Pass an id to get_collection to read the films and use them as references. Needs a Refs account with Pro; without one, the app asks the user to sign in. search_videos is free.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "properties": {
          "context": {
            "description": "Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\"",
            "type": "string"
          },
          "llm_model": {
            "description": "The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Used for analytics only. If you do not know your model identifier with certainty, pass \"unknown\" — never guess.",
            "type": "string"
          }
        },
        "required": [
          "context",
          "llm_model"
        ],
        "type": "object"
      },
      "name": "list_collections"
    },
    {
      "description": "Formulas distilled across many videos of one format (e.g. 'the silent UI workflow', 'the delayed hardware reveal'). Returns ids, titles, summaries and their source films; fetch one with get_formula. Needs a Refs account with Pro; without one, the app asks the user to sign in. search_videos is free.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "properties": {
          "category": {
            "enum": [
              "launch",
              "demo",
              "explainers",
              "motion",
              "interactive",
              "films",
              "teaser",
              "ugc"
            ],
            "type": "string"
          },
          "context": {
            "description": "Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\"",
            "type": "string"
          },
          "llm_model": {
            "description": "The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Used for analytics only. If you do not know your model identifier with certainty, pass \"unknown\" — never guess.",
            "type": "string"
          }
        },
        "required": [
          "context",
          "llm_model"
        ],
        "type": "object"
      },
      "name": "list_formulas"
    },
    {
      "description": "Give a brief (product, audience, length, platform) and 1-5 references (REF ids, links or ids, or your brand films' brand:<import>:<film> ids), and optionally one of your imported brands (brand) to plan in its house style. Returns, per reference, the plates that carry its timing and look (format, hook, beat sheet, style, sound, edit recipe) plus its recipe prompt, and the one formula that best matches, with instructions to write a shot list and a build prompt for the user's own video. With several references it also says how to mix them: one spine for structure and timing, and one named job for each of the others. Name the spine first if you already know it. Then, like an editor, it storyboards before anything is built: you draft the storyboard (1 direction for a fixed brief, 2–4 for an open one), check it with the storyboard tool and lay it out as a Claude Design canvas, the user picks a direction, and only then do you write the build prompt. For every plate of one film, use get_blueprint. Needs a Refs account with Pro; without one, the app asks the user to sign in. search_videos is free.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "properties": {
          "brand": {
            "description": "One of your brand imports (id or @handle, from list_brands): its brand kit becomes the house-style constraint",
            "type": "string"
          },
          "brief": {
            "description": "What the user wants to make",
            "type": "string"
          },
          "context": {
            "description": "Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\"",
            "type": "string"
          },
          "llm_model": {
            "description": "The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Used for analytics only. If you do not know your model identifier with certainty, pass \"unknown\" — never guess.",
            "type": "string"
          },
          "reference_ids": {
            "description": "REF-0005, refs.video/v/… or YouTube/X links, ids (get_collection lists a collection's films), or brand:<import>:<film> ids. Optional with brand: then the brand's own top films are the references",
            "items": {
              "type": "string"
            },
            "maxItems": 5,
            "minItems": 1,
            "type": "array"
          }
        },
        "required": [
          "brief",
          "context",
          "llm_model"
        ],
        "type": "object"
      },
      "name": "plan_video"
    },
    {
      "description": "Search 4,000+ dissected top-performing videos (launch films, product demos, explainers, motion design, interactive/3D, film + music, teasers, UGC ads). Free: works with no key and no sign-in. Without an account it returns short cards (REF id, title, maker, length, aspect, still, link, one-line summary), up to 8 at a time and 30 searches an hour. Signed in to Refs, it returns full cards: also views, measured metrics (shots, cuts per minute, voice, music) and why each works. UGC ads (category ugc) are creator-style ads that won on Meta or TikTok or went viral; their metrics add the signal: source, ugc_format, industry, days_running, variants, reach, ctr_pct, budget_level, advertiser and why_it_won. Use it to find references before making a video; pass a ref to get_blueprint or plan_video (those need a Refs account with Pro; the app asks the user to sign in).",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "properties": {
          "ai_made": {
            "description": "true = made with AI/code (Claude, Remotion, three.js); false = human-made",
            "type": "boolean"
          },
          "aspect": {
            "description": "Frame shape, as cards name it: 16:9 (landscape), 9:16 (vertical/reels), 1:1 (square), 4:5 (portrait feed)",
            "enum": [
              "16:9",
              "9:16",
              "1:1",
              "4:5"
            ],
            "type": "string"
          },
          "brand": {
            "description": "A tracked brand, e.g. linear, higgsfield, runway, vercel, openai",
            "type": "string"
          },
          "category": {
            "enum": [
              "launch",
              "demo",
              "explainers",
              "motion",
              "interactive",
              "films",
              "teaser",
              "ugc"
            ],
            "type": "string"
          },
          "context": {
            "description": "Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\"",
            "type": "string"
          },
          "industry": {
            "description": "UGC ads: the advertiser's industry",
            "enum": [
              "beauty",
              "apps",
              "fintech",
              "food",
              "fitness",
              "saas",
              "edtech",
              "health",
              "fashion",
              "home",
              "pets",
              "gaming",
              "other"
            ],
            "type": "string"
          },
          "limit": {
            "description": "Default 8 (at most 8 without an account)",
            "maximum": 20,
            "minimum": 1,
            "type": "integer"
          },
          "llm_model": {
            "description": "The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Used for analytics only. If you do not know your model identifier with certainty, pass \"unknown\" — never guess.",
            "type": "string"
          },
          "made_with": {
            "description": "Tool, e.g. claude, remotion, three.js, manim, after effects",
            "type": "string"
          },
          "max_seconds": {
            "description": "e.g. 30 for short films",
            "minimum": 0,
            "type": "number"
          },
          "min_days_running": {
            "description": "UGC ads: Meta ads that ran at least this many days (30 = a winner, 60 = strong)",
            "maximum": 9007199254740991,
            "minimum": 1,
            "type": "integer"
          },
          "min_seconds": {
            "minimum": 0,
            "type": "number"
          },
          "offset": {
            "description": "At most 40 without an account",
            "maximum": 2000,
            "minimum": 0,
            "type": "integer"
          },
          "platform": {
            "description": "UGC ads: where the winning signal comes from (meta = ran on Meta, tiktok = TikTok's top ads, organic = went viral unpaid)",
            "enum": [
              "meta",
              "tiktok",
              "organic"
            ],
            "type": "string"
          },
          "query": {
            "description": "Keywords, e.g. 'developer tool launch dark UI', 'founder to camera', 'kinetic type', 'terminal UI launch'. Films matching every word come first; if none does, films matching some of the words (the result then has a note). A REF id or a YouTube, X, TikTok, Instagram Reel, Meta Ad Library or App Store link finds that film.",
            "type": "string"
          },
          "sort": {
            "description": "recommended = only the films a digital product (SaaS, app, AI or dev tool) would copy for its launch film, best first; none = every film, with those recommended ones still first; signal = UGC ads with the strongest winning signal first (days running, CTR percentile, views)",
            "enum": [
              "recommended",
              "none",
              "added",
              "views",
              "shortest",
              "longest",
              "catalogue",
              "signal"
            ],
            "type": "string"
          },
          "tag": {
            "description": "A curated collection: app-store-header: short loops apps use as the App Store product-page header video (iOS 27); saas: launch and demo films from B2B SaaS companies; developer-tools: launch films and demos from developer tools (editors, terminals, APIs); fintech: films from payments, banking and finance products; crypto: launch films from crypto and web3 products; hardware: launch films for physical hardware products; automotive: car and vehicle launch films; robotics: robot and autonomous-machine films; kinetic-type: films led by kinetic typography (moving type); ui-animation: films of animated product UI and transitions; 3d-animation: films made with 3D animation and renders; product-reveal: films built around a product reveal; logo-reveal: logo reveal pieces; data-visualization: films that animate charts, maps and data; before-after: before-and-after films (problem, then result)",
            "enum": [
              "app-store-header",
              "saas",
              "developer-tools",
              "fintech",
              "crypto",
              "hardware",
              "automotive",
              "robotics",
              "kinetic-type",
              "ui-animation",
              "3d-animation",
              "product-reveal",
              "logo-reveal",
              "data-visualization",
              "before-after"
            ],
            "type": "string"
          },
          "ugc_format": {
            "description": "UGC ads: the format",
            "enum": [
              "talking_head",
              "unboxing",
              "problem_solution",
              "testimonial",
              "pov",
              "green_screen",
              "us_vs_them",
              "street_interview",
              "before_after",
              "other"
            ],
            "type": "string"
          }
        },
        "required": [
          "context",
          "llm_model"
        ],
        "type": "object"
      },
      "name": "search_videos"
    },
    {
      "description": "Before anything is built, storyboard the film the way an editor does. Send the storyboard you drafted from plan_video: 1 direction for a fixed brief, 2–4 when it's open. Each direction: logline, references (REF id + the one job each does), palette, type, sound, 2–3 style frames at full look, and 3–30 numbered panels in order, each with in/out seconds, shot size, camera move, action, VO, on-screen text, sound, the transition into the next panel, and its frame as layers (text, REF stills or the user's own captures by https URL, and shapes; positions in % of the frame). Mark a layer real only when it's a real capture of the user's product or a real result. This checks the timing and the REF ids and returns each REF's real still. While it returns ok: false it lists what to fix (fix it and call again); with ok: true it tells you how to lay the storyboard out as a Claude Design canvas (or as a text board where you can't make one). Free with Pro. Let the user pick a direction before you write any build prompt.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "properties": {
          "aspect": {
            "enum": [
              "16:9",
              "9:16",
              "1:1",
              "4:5"
            ],
            "type": "string"
          },
          "bpm": {
            "maximum": 220,
            "minimum": 40,
            "type": "number"
          },
          "brand": {
            "description": "Brandprint import used for the look, if any",
            "maxLength": 80,
            "type": "string"
          },
          "brief": {
            "maxLength": 1200,
            "minLength": 1,
            "type": "string"
          },
          "context": {
            "description": "Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\"",
            "type": "string"
          },
          "directions": {
            "items": {
              "properties": {
                "logline": {
                  "description": "the idea in one line",
                  "maxLength": 280,
                  "minLength": 1,
                  "type": "string"
                },
                "motion": {
                  "description": "how frames hand off to each other overall",
                  "maxLength": 400,
                  "type": "string"
                },
                "name": {
                  "maxLength": 60,
                  "minLength": 1,
                  "type": "string"
                },
                "palette": {
                  "items": {
                    "pattern": "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$",
                    "type": "string"
                  },
                  "maxItems": 8,
                  "type": "array"
                },
                "panels": {
                  "items": {
                    "properties": {
                      "action": {
                        "description": "what happens and what moves, in one or two sentences",
                        "maxLength": 400,
                        "minLength": 1,
                        "type": "string"
                      },
                      "camera": {
                        "description": "the camera move, drawn as arrows on the panel",
                        "enum": [
                          "static",
                          "push in",
                          "pull out",
                          "pan left",
                          "pan right",
                          "tilt up",
                          "tilt down",
                          "truck left",
                          "truck right",
                          "orbit",
                          "zoom in",
                          "zoom out",
                          "whip",
                          "handheld"
                        ],
                        "type": "string"
                      },
                      "end": {
                        "description": "out, seconds",
                        "maximum": 900,
                        "minimum": 0,
                        "type": "number"
                      },
                      "frame": {
                        "properties": {
                          "background": {
                            "pattern": "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$",
                            "type": "string"
                          },
                          "gradient": {
                            "description": "top to bottom; replaces background",
                            "items": false,
                            "maxItems": 2,
                            "minItems": 2,
                            "prefixItems": [
                              {
                                "pattern": "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$",
                                "type": "string"
                              },
                              {
                                "pattern": "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$",
                                "type": "string"
                              }
                            ],
                            "type": "array"
                          },
                          "layers": {
                            "items": {
                              "oneOf": [
                                {
                                  "properties": {
                                    "align": {
                                      "enum": [
                                        "left",
                                        "center",
                                        "right"
                                      ],
                                      "type": "string"
                                    },
                                    "color": {
                                      "pattern": "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$",
                                      "type": "string"
                                    },
                                    "font": {
                                      "description": "display = the direction's headline face, body = UI/sans, mono = data, serif = editorial",
                                      "enum": [
                                        "display",
                                        "body",
                                        "mono",
                                        "serif"
                                      ],
                                      "type": "string"
                                    },
                                    "italic": {
                                      "type": "boolean"
                                    },
                                    "opacity": {
                                      "maximum": 1,
                                      "minimum": 0,
                                      "type": "number"
                                    },
                                    "real": {
                                      "description": "true only when this is a real capture of the user's product or a real result; anything else is illustrative and is labelled so",
                                      "type": "boolean"
                                    },
                                    "size": {
                                      "description": "font size as % of frame height",
                                      "maximum": 80,
                                      "minimum": 0.5,
                                      "type": "number"
                                    },
                                    "text": {
                                      "maxLength": 400,
                                      "minLength": 1,
                                      "type": "string"
                                    },
                                    "tracking": {
                                      "description": "letter spacing in em",
                                      "maximum": 0.6,
                                      "minimum": -0.2,
                                      "type": "number"
                                    },
                                    "type": {
                                      "const": "text",
                                      "type": "string"
                                    },
                                    "w": {
                                      "description": "box width, % of frame width (text wraps inside it)",
                                      "maximum": 150,
                                      "minimum": -50,
                                      "type": "number"
                                    },
                                    "weight": {
                                      "maximum": 900,
                                      "minimum": 100,
                                      "type": "integer"
                                    },
                                    "x": {
                                      "description": "left edge, % of frame width",
                                      "maximum": 150,
                                      "minimum": -50,
                                      "type": "number"
                                    },
                                    "y": {
                                      "description": "top edge, % of frame height",
                                      "maximum": 150,
                                      "minimum": -50,
                                      "type": "number"
                                    }
                                  },
                                  "required": [
                                    "type",
                                    "text",
                                    "x",
                                    "y",
                                    "size"
                                  ],
                                  "type": "object"
                                },
                                {
                                  "properties": {
                                    "fit": {
                                      "enum": [
                                        "cover",
                                        "contain"
                                      ],
                                      "type": "string"
                                    },
                                    "grayscale": {
                                      "type": "boolean"
                                    },
                                    "h": {
                                      "maximum": 150,
                                      "minimum": -50,
                                      "type": "number"
                                    },
                                    "opacity": {
                                      "maximum": 1,
                                      "minimum": 0,
                                      "type": "number"
                                    },
                                    "radius": {
                                      "description": "corner radius, % of frame height",
                                      "maximum": 50,
                                      "minimum": 0,
                                      "type": "number"
                                    },
                                    "real": {
                                      "description": "true only when this is a real capture of the user's product or a real result; anything else is illustrative and is labelled so",
                                      "type": "boolean"
                                    },
                                    "src": {
                                      "description": "\"REF-1234\" for that archive film's still, or an https URL of the user's own capture",
                                      "maxLength": 600,
                                      "minLength": 1,
                                      "type": "string"
                                    },
                                    "type": {
                                      "const": "image",
                                      "type": "string"
                                    },
                                    "w": {
                                      "maximum": 150,
                                      "minimum": -50,
                                      "type": "number"
                                    },
                                    "x": {
                                      "maximum": 150,
                                      "minimum": -50,
                                      "type": "number"
                                    },
                                    "y": {
                                      "maximum": 150,
                                      "minimum": -50,
                                      "type": "number"
                                    }
                                  },
                                  "required": [
                                    "type",
                                    "src",
                                    "x",
                                    "y",
                                    "w",
                                    "h"
                                  ],
                                  "type": "object"
                                },
                                {
                                  "properties": {
                                    "fill": {
                                      "pattern": "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$",
                                      "type": "string"
                                    },
                                    "h": {
                                      "maximum": 150,
                                      "minimum": -50,
                                      "type": "number"
                                    },
                                    "opacity": {
                                      "maximum": 1,
                                      "minimum": 0,
                                      "type": "number"
                                    },
                                    "radius": {
                                      "maximum": 50,
                                      "minimum": 0,
                                      "type": "number"
                                    },
                                    "shape": {
                                      "enum": [
                                        "rect",
                                        "circle",
                                        "line"
                                      ],
                                      "type": "string"
                                    },
                                    "stroke": {
                                      "pattern": "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$",
                                      "type": "string"
                                    },
                                    "stroke_width": {
                                      "description": "% of frame height",
                                      "maximum": 5,
                                      "minimum": 0,
                                      "type": "number"
                                    },
                                    "type": {
                                      "const": "shape",
                                      "type": "string"
                                    },
                                    "w": {
                                      "maximum": 150,
                                      "minimum": -50,
                                      "type": "number"
                                    },
                                    "x": {
                                      "maximum": 150,
                                      "minimum": -50,
                                      "type": "number"
                                    },
                                    "y": {
                                      "maximum": 150,
                                      "minimum": -50,
                                      "type": "number"
                                    }
                                  },
                                  "required": [
                                    "type",
                                    "shape",
                                    "x",
                                    "y",
                                    "w",
                                    "h"
                                  ],
                                  "type": "object"
                                }
                              ]
                            },
                            "maxItems": 40,
                            "type": "array"
                          }
                        },
                        "required": [
                          "layers"
                        ],
                        "type": "object"
                      },
                      "look_ref": {
                        "description": "REF id whose look this panel borrows",
                        "maxLength": 20,
                        "type": "string"
                      },
                      "on_screen": {
                        "description": "text that appears on screen",
                        "maxLength": 200,
                        "type": "string"
                      },
                      "shot": {
                        "description": "shot number; numbered 1, 2, 3… when left out",
                        "maxLength": 12,
                        "type": "string"
                      },
                      "shot_size": {
                        "enum": [
                          "extreme wide",
                          "wide",
                          "medium",
                          "close",
                          "extreme close",
                          "macro",
                          "insert",
                          "ui",
                          "full-frame type"
                        ],
                        "type": "string"
                      },
                      "sound": {
                        "description": "music cue or SFX",
                        "maxLength": 200,
                        "type": "string"
                      },
                      "start": {
                        "description": "in, seconds",
                        "maximum": 900,
                        "minimum": 0,
                        "type": "number"
                      },
                      "transition": {
                        "description": "how this panel becomes the next one",
                        "properties": {
                          "frames": {
                            "maximum": 240,
                            "minimum": 0,
                            "type": "integer"
                          },
                          "kind": {
                            "enum": [
                              "cut",
                              "match cut",
                              "dissolve",
                              "morph",
                              "wipe",
                              "push",
                              "whip",
                              "fade to black",
                              "hold"
                            ],
                            "type": "string"
                          },
                          "note": {
                            "description": "how this frame becomes the next, e.g. 'the caret stretches into the search bar'",
                            "maxLength": 200,
                            "type": "string"
                          }
                        },
                        "required": [
                          "kind"
                        ],
                        "type": "object"
                      },
                      "vo": {
                        "description": "the spoken line over this panel",
                        "maxLength": 400,
                        "type": "string"
                      }
                    },
                    "required": [
                      "start",
                      "end",
                      "action",
                      "frame"
                    ],
                    "type": "object"
                  },
                  "maxItems": 30,
                  "minItems": 3,
                  "type": "array"
                },
                "references": {
                  "items": {
                    "properties": {
                      "contributes": {
                        "description": "the one job it does, e.g. 'structure and timing', 'the hook', 'type treatment'",
                        "maxLength": 140,
                        "minLength": 1,
                        "type": "string"
                      },
                      "ref": {
                        "description": "REF id",
                        "maxLength": 40,
                        "minLength": 1,
                        "type": "string"
                      }
                    },
                    "required": [
                      "ref",
                      "contributes"
                    ],
                    "type": "object"
                  },
                  "maxItems": 6,
                  "type": "array"
                },
                "sound": {
                  "description": "music and sound design in a line or two",
                  "maxLength": 400,
                  "type": "string"
                },
                "style_frames": {
                  "description": "2–3 key frames at full look",
                  "items": {
                    "properties": {
                      "frame": {
                        "properties": {
                          "background": {
                            "pattern": "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$",
                            "type": "string"
                          },
                          "gradient": {
                            "description": "top to bottom; replaces background",
                            "items": false,
                            "maxItems": 2,
                            "minItems": 2,
                            "prefixItems": [
                              {
                                "pattern": "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$",
                                "type": "string"
                              },
                              {
                                "pattern": "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$",
                                "type": "string"
                              }
                            ],
                            "type": "array"
                          },
                          "layers": {
                            "items": {
                              "oneOf": [
                                {
                                  "properties": {
                                    "align": {
                                      "enum": [
                                        "left",
                                        "center",
                                        "right"
                                      ],
                                      "type": "string"
                                    },
                                    "color": {
                                      "pattern": "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$",
                                      "type": "string"
                                    },
                                    "font": {
                                      "description": "display = the direction's headline face, body = UI/sans, mono = data, serif = editorial",
                                      "enum": [
                                        "display",
                                        "body",
                                        "mono",
                                        "serif"
                                      ],
                                      "type": "string"
                                    },
                                    "italic": {
                                      "type": "boolean"
                                    },
                                    "opacity": {
                                      "maximum": 1,
                                      "minimum": 0,
                                      "type": "number"
                                    },
                                    "real": {
                                      "description": "true only when this is a real capture of the user's product or a real result; anything else is illustrative and is labelled so",
                                      "type": "boolean"
                                    },
                                    "size": {
                                      "description": "font size as % of frame height",
                                      "maximum": 80,
                                      "minimum": 0.5,
                                      "type": "number"
                                    },
                                    "text": {
                                      "maxLength": 400,
                                      "minLength": 1,
                                      "type": "string"
                                    },
                                    "tracking": {
                                      "description": "letter spacing in em",
                                      "maximum": 0.6,
                                      "minimum": -0.2,
                                      "type": "number"
                                    },
                                    "type": {
                                      "const": "text",
                                      "type": "string"
                                    },
                                    "w": {
                                      "description": "box width, % of frame width (text wraps inside it)",
                                      "maximum": 150,
                                      "minimum": -50,
                                      "type": "number"
                                    },
                                    "weight": {
                                      "maximum": 900,
                                      "minimum": 100,
                                      "type": "integer"
                                    },
                                    "x": {
                                      "description": "left edge, % of frame width",
                                      "maximum": 150,
                                      "minimum": -50,
                                      "type": "number"
                                    },
                                    "y": {
                                      "description": "top edge, % of frame height",
                                      "maximum": 150,
                                      "minimum": -50,
                                      "type": "number"
                                    }
                                  },
                                  "required": [
                                    "type",
                                    "text",
                                    "x",
                                    "y",
                                    "size"
                                  ],
                                  "type": "object"
                                },
                                {
                                  "properties": {
                                    "fit": {
                                      "enum": [
                                        "cover",
                                        "contain"
                                      ],
                                      "type": "string"
                                    },
                                    "grayscale": {
                                      "type": "boolean"
                                    },
                                    "h": {
                                      "maximum": 150,
                                      "minimum": -50,
                                      "type": "number"
                                    },
                                    "opacity": {
                                      "maximum": 1,
                                      "minimum": 0,
                                      "type": "number"
                                    },
                                    "radius": {
                                      "description": "corner radius, % of frame height",
                                      "maximum": 50,
                                      "minimum": 0,
                                      "type": "number"
                                    },
                                    "real": {
                                      "description": "true only when this is a real capture of the user's product or a real result; anything else is illustrative and is labelled so",
                                      "type": "boolean"
                                    },
                                    "src": {
                                      "description": "\"REF-1234\" for that archive film's still, or an https URL of the user's own capture",
                                      "maxLength": 600,
                                      "minLength": 1,
                                      "type": "string"
                                    },
                                    "type": {
                                      "const": "image",
                                      "type": "string"
                                    },
                                    "w": {
                                      "maximum": 150,
                                      "minimum": -50,
                                      "type": "number"
                                    },
                                    "x": {
                                      "maximum": 150,
                                      "minimum": -50,
                                      "type": "number"
                                    },
                                    "y": {
                                      "maximum": 150,
                                      "minimum": -50,
                                      "type": "number"
                                    }
                                  },
                                  "required": [
                                    "type",
                                    "src",
                                    "x",
                                    "y",
                                    "w",
                                    "h"
                                  ],
                                  "type": "object"
                                },
                                {
                                  "properties": {
                                    "fill": {
                                      "pattern": "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$",
                                      "type": "string"
                                    },
                                    "h": {
                                      "maximum": 150,
                                      "minimum": -50,
                                      "type": "number"
                                    },
                                    "opacity": {
                                      "maximum": 1,
                                      "minimum": 0,
                                      "type": "number"
                                    },
                                    "radius": {
                                      "maximum": 50,
                                      "minimum": 0,
                                      "type": "number"
                                    },
                                    "shape": {
                                      "enum": [
                                        "rect",
                                        "circle",
                                        "line"
                                      ],
                                      "type": "string"
                                    },
                                    "stroke": {
                                      "pattern": "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$",
                                      "type": "string"
                                    },
                                    "stroke_width": {
                                      "description": "% of frame height",
                                      "maximum": 5,
                                      "minimum": 0,
                                      "type": "number"
                                    },
                                    "type": {
                                      "const": "shape",
                                      "type": "string"
                                    },
                                    "w": {
                                      "maximum": 150,
                                      "minimum": -50,
                                      "type": "number"
                                    },
                                    "x": {
                                      "maximum": 150,
                                      "minimum": -50,
                                      "type": "number"
                                    },
                                    "y": {
                                      "maximum": 150,
                                      "minimum": -50,
                                      "type": "number"
                                    }
                                  },
                                  "required": [
                                    "type",
                                    "shape",
                                    "x",
                                    "y",
                                    "w",
                                    "h"
                                  ],
                                  "type": "object"
                                }
                              ]
                            },
                            "maxItems": 40,
                            "type": "array"
                          }
                        },
                        "required": [
                          "layers"
                        ],
                        "type": "object"
                      },
                      "note": {
                        "maxLength": 300,
                        "type": "string"
                      },
                      "title": {
                        "maxLength": 80,
                        "minLength": 1,
                        "type": "string"
                      }
                    },
                    "required": [
                      "title",
                      "frame"
                    ],
                    "type": "object"
                  },
                  "maxItems": 3,
                  "type": "array"
                },
                "type": {
                  "properties": {
                    "body": {
                      "maxLength": 60,
                      "type": "string"
                    },
                    "display": {
                      "maxLength": 60,
                      "type": "string"
                    },
                    "mono": {
                      "maxLength": 60,
                      "type": "string"
                    },
                    "note": {
                      "maxLength": 200,
                      "type": "string"
                    }
                  },
                  "required": [
                    "display",
                    "body"
                  ],
                  "type": "object"
                }
              },
              "required": [
                "name",
                "logline",
                "references",
                "palette",
                "type",
                "sound",
                "style_frames",
                "panels"
              ],
              "type": "object"
            },
            "maxItems": 4,
            "minItems": 1,
            "type": "array"
          },
          "fps": {
            "maximum": 120,
            "minimum": 12,
            "type": "integer"
          },
          "length_s": {
            "maximum": 900,
            "minimum": 3,
            "type": "number"
          },
          "llm_model": {
            "description": "The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Used for analytics only. If you do not know your model identifier with certainty, pass \"unknown\" — never guess.",
            "type": "string"
          },
          "title": {
            "maxLength": 100,
            "minLength": 1,
            "type": "string"
          }
        },
        "required": [
          "title",
          "brief",
          "aspect",
          "length_s",
          "directions",
          "context",
          "llm_model"
        ],
        "type": "object"
      },
      "name": "storyboard"
    },
    {
      "description": "Paste a product page and Refs finds the UGC ads (creator-style vertical video ads on Meta and TikTok) that are working for its competitors, then takes them apart. Two steps. (1) ugc_scan(url) reads the page and returns a draft: the product (name, category, price, audience) and 5–8 suggested competitors, each with its site, Facebook Page and TikTok handle. Nothing is queued and no scan is used yet. Show the user the list and let them add, remove or fix competitors (at most 10). (2) ugc_scan(id, competitors?, confirm: true) saves the final list and queues the scan; it uses 1 of the account's 3 scans a month, and a scan that fails gives it back. Only confirm after the user has agreed to the list. Then the Refs worker finds each competitor's ads, ranks them by how long and how hard they ran, keeps the top 25 (at most 5 per competitor), reuses the ones already in the library and measures and blueprints the rest; it usually takes under an hour. Follow it with get_ugc_scan(id). Calling ugc_scan(url) again with a link that's already a draft or being scanned returns that scan. Pro only, free in credits; private to the user.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "properties": {
          "competitors": {
            "description": "Replaces the draft's list, at most 10. Send the whole final list, including the suggestions the user kept",
            "items": {
              "properties": {
                "key": {
                  "description": "Keep the key a suggested competitor came with, so it stays marked as suggested",
                  "type": "string"
                },
                "meta_page": {
                  "description": "Its Facebook Page: a page name or facebook.com link",
                  "type": "string"
                },
                "name": {
                  "description": "The competing brand",
                  "type": "string"
                },
                "site": {
                  "description": "Its homepage, e.g. glossier.com",
                  "type": "string"
                },
                "tiktok_handle": {
                  "description": "Its TikTok username, with or without @",
                  "type": "string"
                }
              },
              "required": [
                "name"
              ],
              "type": "object"
            },
            "type": "array"
          },
          "confirm": {
            "description": "true queues the scan (uses 1 of the month's 3). Only once the user has seen and agreed to the competitors",
            "type": "boolean"
          },
          "context": {
            "description": "Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\"",
            "type": "string"
          },
          "id": {
            "description": "Step 2: the scan id from step 1 (or its refs.video/ugc/… link), to edit or confirm that draft",
            "type": "string"
          },
          "llm_model": {
            "description": "The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Used for analytics only. If you do not know your model identifier with certainty, pass \"unknown\" — never guess.",
            "type": "string"
          },
          "url": {
            "description": "Step 1: the product's page, e.g. https://www.yourbrand.com/products/serum (https; a public site)",
            "type": "string"
          }
        },
        "required": [
          "context",
          "llm_model"
        ],
        "type": "object"
      },
      "name": "ugc_scan"
    }
  ]
}

What the leaf hashes

{"body":"313296204ff2a9b0c4f9075e418c0fc451aeb4d6f860bf2b791e7d66463a708f","id":3735778,"kind":"mcp.tools","method":"probe.mcp/1","observed_us":1793974241207702,"prev":3382738,"subject":"c59624dd-3017-4853-91d7-0e8ce5a8fbd8","subject_kind":"endpoint"}

Proof

Fold these into the leaf in order, hashing each sorted pair with keccak256, to reach the root of (303443 rows).

  1. 0x12737dc37f087f476f586d2086d3cde7af88dc22e720ba304217efb507f432e1
  2. 0x0bd453e2940c6c74104e6c6ed9e56d15a2dd8eac98da2c3de1ba8e30ec826167
  3. 0xe9c8187a89c716669593b3e63a75f9cf024127746aaee21ac581360bbbc4eac6
  4. 0xe17f882f151f5dd33c6fb5ebf529642b1c2b40aab0c3758a72ee136c68a800cb
  5. 0xd6113c141b442ba6c8873e51507c3a1b1372105c22c96b27378b678a2b14161b
  6. 0x56b473d00e4ef5457b16c8f11133c1bec1a5ea0b98625811e3609faec688d74a
  7. 0x38a898968e036425da2c09658db0852cf21348f4e16934661c3b404005fc55b5
  8. 0x54b5985e7d80a848bad92970d68f66205221349e1ca96f9f802818e336b1ff9d
  9. 0x142ee4cb451fa9578e06fd2b58c957325650ba6552f7c9719b06d71f005ead82
  10. 0x2fe06cfb0f4b49326ad33359412d75e70777ab08633c1505301aca287f775f95
  11. 0x6d583458b3e7c03e5d3e6acc3a5c2594fc95b28596ca3ee443adc3d0c65cc26f
  12. 0x4d53e8c49fdaa108d5a6f5e120937ec2bedda8639c9d8fca129dc38c39b91f7c
  13. 0x060750db7cc7e8eebd0038605c5e0185148dee6cf54fb70a5f89b9ae84a72a3f
  14. 0x2321bc9e8e86bb45cc279df2a816cbd85c2acaa463709f7ea617c5655322d111
  15. 0x8ca52fde5899107bca7556a114ac604a06c716adcb632e4a38c7dbbd06360895
  16. 0x63d3b15302a17641ec84d6d16c07594288ca45016a6cc12a65ca679e6cd95c97
  17. 0xa448dc698494f795f2240c0e7070e8a93eb263baee21ca4185a7d03432a614d8
  18. 0x119743aadcddb571b28b442b62196d4a0afc4e1c9979c2d477d34fcc9413deaf
  19. 0xc0d08d48601d1be90bcfc025e66bcaa0030120d688dd9c919b36c2c4446f4948
Day root
0xb30ccefe7182c6f767e1fcbfb5f64ffd649da831f665f65c5ff39cd40512284f
Chained
0xc383f7ef68d2914082484765aa09e42c12c59a74a096ae64127c562618c506d3
Published
On Arc Testnet, block 71111178: 0xfba13cb7ee4ada7f2fee3702a786a2201596be2ffea37dfc281ab4c8e9942fe1

How to check it · This row as JSON