# Refs

> 4,100 launch videos measured shot by shot. Free account to search; Pro for blueprints and plans.

- name: video.refs/refs
- version: 0.17.0
- connection class: unknown (unknown)
- trust: 61/100 flags: no-repository
- quality: 82/100 (good)
- owner: not claimed
- descriptor: https://api.protogrid.dev/v1/servers/video.refs%2Frefs
- tools: https://api.protogrid.dev/v1/servers/video.refs%2Frefs/tools

**Not classified yet.** The remote endpoints have not been probed successfully, or the listing has nothing to connect to.

## Connection (mcpServers)

```json
{
  "mcpServers": {
    "refs": {
      "type": "http",
      "url": "https://refs.video/mcp",
      "headers": {
        "Authorization": "Bearer ${REFS_TOKEN}"
      }
    }
  }
}
```

Placeholders to fill: `${REFS_TOKEN}`.

## Trust

- hygiene: 80
- liveness: 29
- freshness: 100
- provenance: 55
- drivers: +dns-namespace +website -unreachable(1 failures) +updated-6d-ago -no-repository
- Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed.

## Quality 82/100 (good)

### protocol: 88 (weight 25)

- pass `protocol.modern`: supports 2026-07-28 (server/discover)
- pass `protocol.stateless`: answers without a session
- pass `protocol.transport`: streamable HTTP
- warn `protocol.list_ttl`: tools/list declares ttlMs 0, so clients re-fetch it on every use

### authorization: n/a (weight 15)

- n/a `auth.prm`, `auth.as_metadata`, `auth.cimd`: no remote uses OAuth
- n/a `auth.secret_in_url`: no templated URL

### tool hygiene: 94 (weight 30)

- pass `tools.descriptions`: every tool has a description
- warn `tools.description_length`: 2 tools have descriptions over 1,024 characters, which crowds the context
- pass `tools.schemas`: every tool has an object input schema
- pass `tools.annotations`: 14 of 14 tools declare readOnlyHint or destructiveHint
- pass `tools.directory_hints`: every tool declares readOnlyHint, destructiveHint, idempotentHint and openWorldHint
- pass `tools.token_cost`: about 7,764 tokens to load every tool
- pass `tools.api_dump`: tools are not a one-to-one API dump
- pass `tools.hidden_text`: no hidden text in tool names, descriptions, schemas or annotations

### stability: 50 (weight 15)

- warn `stability.changes`: 31 tool changes in 30 days
- fail `stability.rug_pull`: 1 tools kept their name but changed most of their description in 30 days; review before trusting them
- pass `stability.new_links`: no tool change named a new site

### dependencies: n/a (weight 15)

- n/a `deps.known_vulns`, `deps.mcp_sdk_version`, `deps.resolvable`: no npm or PyPI package

- tools: 14, about 7,764 tokens to load them all
- tool set hash: 1703b09b25c19940b22bf3b65db91448
- tools last changed: 2026-11-08T20:44:24.538Z
- badge: [![protogrid quality](https://protogrid.dev/badge/video.refs/refs.svg)](https://protogrid.dev/servers/video.refs/refs)
- Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed.

### Tool changes

- 2026-11-08 `get_ugc_scan` changed (inputSchema)
- 2026-11-08 `ugc_scan` changed (inputSchema)
- 2026-11-08 `check_render` changed (inputSchema)
- 2026-11-08 `storyboard` changed (inputSchema)
- 2026-11-08 `plan_video` changed (inputSchema)
- 2026-11-08 `get_brand` changed (inputSchema)
- 2026-11-08 `list_brands` changed (inputSchema)
- 2026-11-08 `get_collection` changed (inputSchema)
- 2026-11-08 `list_collections` changed (inputSchema)
- 2026-11-08 `get_formula` changed (inputSchema)

Full history: https://api.protogrid.dev/v1/servers/video.refs%2Frefs/changes

## Remotes

- https://refs.video/mcp (streamable-http, auth none, reachable false, uptime30d 0.97894734)

## Packages

_none_

## Tools (14)

- `check_render`: 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.
- `get_blueprint`: 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.
- `get_brand`: 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.
- `get_collection`: 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.
- `get_formula`: 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.
- `get_frames`: 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.
- `get_ugc_scan`: 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.
- `list_brands`: 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.
- `list_collections`: 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.
- `list_formulas`: 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.
- `plan_video`: 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.
- `search_videos`: Search 4,000+ dissected top-performing videos (launch films, product demos, explainers, motion design, interactive/3D, film + music, teasers, UGC ads). Needs a Refs account; a free one is enough (the app asks the user to sign in). Cards carry the REF id, title, maker, length, aspect, still, views, measured metrics (shots, cuts per minute, voice, music) and why each works; films the account's plan doesn't open come back locked. 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).
- `storyboard`: 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.
- `ugc_scan`: 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.
