Skip to main content
Glama

Extract videos

extract_videos
Read-onlyIdempotent

Use when the user wants the videos on a page: / files, og:video, YouTube/Vimeo/Wistia/Loom embeds, direct video links and the JSON-LD VideoObject a page declares (source: "structured-data", how news sites describe a JS-mounted video), each tagged by source with a poster when declared. source: "embed" is a player page, not a downloadable file; a URL that is itself a video file comes back as the single result (source file). A YouTube, Vimeo, TikTok, Dailymotion or Loom video URL is answered from the URL alone with its player embed (source: "platform", no fetch, never pass render for these) - tell the user the file itself cannot be downloaded through MiroMiro. When any other page loads a JS player and declares nothing else, the hint names the player: call again with render=true (+5 credits) then. Returns up to 40 by default; pass limit (up to 200) for more.

Input Schema

NameRequiredDescriptionDefault
urlYesThe website URL
freshNoSkip the 24-hour cache and re-extract the live page - use when the site just changed and a cached result would be stale. Charged normally; the fresh result replaces the cached copy.
limitNoMax videos to return (default 40, up to 200).
renderNoForce a real browser so the page's JavaScript runs before it is read. Slower, and adds 5 credits. Usually not needed: when the plain read comes back as a JavaScript app shell or the site refuses it (401/403/406) or timed out, the server already re-runs the page in a browser by itself at no extra cost, and usage.autoRender says so. Pass it for images, videos or Lottie that only load on scroll, with screenshot=true, or when a result is still thin after that automatic pass. If a 403 says the browser was refused too, the site cannot be extracted - do not retry. extract_code always runs in a real browser at no extra cost, so render=true is not needed there (only together with screenshot=true). On extract_design_tokens, render=true only permits the browser: the plain read still runs first, and the 5 credits are charged only if the browser was actually needed.
screenshotNoRequires render=true. Adds a screenshot field to the result: a public URL of a capture of the page (live 7 days), taken by the same browser that rendered it. Pass true for the 1440x900 viewport or 'full' for the entire page height. No extra credits beyond the render surcharge. Useful for showing the user what the extracted site looks like.
full_outputNoSkip long-string trimming. Responses still cap at ~100KB total.
response_formatNoHow much to return. 'concise' keeps lists to 10 entries and strings short - right for a summary or a chat answer. 'detailed' returns everything the tool has (same as limit=200 + full_output=true). Omit for the default, which fits a typical chat context. The generated code is never trimmed in any mode.

Output Schema

NameRequiredDescriptionDefault
urlYes
noteNoCoverage caveat: only videos declared in the initial HTML are found - use render=true for JS-mounted players
countNoTotal videos found (before any trimming)
usageNoCredit usage for the authed key (spent, remaining, monthly limit).
videosNo
truncation_noteNoPresent when the result was trimmed to fit chat context - says what was dropped and how to get more (limit / full_output arguments, or the REST API).

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observed

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already declare readOnly/idempotent/non-destructive, but the description adds behavior they cannot carry: the 24h cache, the +5 credit render surcharge, that platform URLs are answered without a fetch, that the file itself cannot be downloaded through MiroMiro, and the default 40 / max 200 return budget. This is unusually rich disclosure of cost and side-effect semantics.

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

Conciseness4/5

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

Front-loaded with the trigger and the primary source taxonomy, and nearly every sentence carries a distinct behavior (credits, caching, platform handling, pagination). It is dense with parentheticals and mid-sentence code spans, which slightly hurts scanability, but there is little genuinely dead text.

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

Completeness5/5

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

With an output schema present the description need not document return values, and annotations cover the safety profile, so the remaining burden is behavioral and cost guidance — all of which is supplied (cache, credits, automatic browser fallback, render re-call, pagination). Nothing an agent needs to call this correctly is missing.

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

Parameters4/5

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

Schema description coverage is 100%, so the baseline is 3; the description lifts above it by giving video-specific render semantics the schema only states generically ('never pass render for these' platform URLs) and restating the limit ceiling. It does not add much for url, fresh, screenshot or full_output, so it is not a 5.

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

Purpose5/5

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

States a specific verb+resource and enumerates exactly what qualifies as a video on a page: <video>/<source>, og:video, YouTube/Vimeo/Wistia/Loom embeds, direct links, and JSON-LD VideoObject. This scope detail cleanly separates it from siblings like extract_audio, extract_lottie and extract_assets without the agent needing to open any schema.

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

Usage Guidelines5/5

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

Opens with an explicit trigger ('Use when the user wants the videos on a page') and then gives hard when-not rules: never pass render for platform URLs, do not retry on a 403 that says the browser was refused, and call again with render=true only when the hint names a JS player. Alternative paths (platform-URL path vs fetch path vs structured-data path) are each tied to their condition.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.