Skip to main content
Glama

Server Details

Give your AI agent a video recorder. Record HTML5 ads, banners and web pages to MP4, WebM or GIF from a chat. Your assistant writes or finds the creative, records it in a real browser and hands you the video.

Ownership verified
Status
Healthy
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL

TDQS

A4.4/5.0

Scored across 5 tools

Disambiguation5/5

Each tool targets a distinct lifecycle stage: record_html creates, estimate_recording preflights without side effects, get_recording retrieves one recording, list_recordings enumerates, and delete_recording removes video files. The descriptions make the record-versus-estimate and get-versus-list boundaries explicit.

Naming Consistency4/5

All names are snake_case and verb-first, which is predictable. Minor deviations are record_html using an object/format noun rather than "recording" and list_recordings being plural while the other recording tools are singular.

Tool Count5/5

Five tools are well-scoped for a focused recording API. Each tool maps to a necessary operation, and the richer record_html description absorbs much of the workflow complexity without requiring extra tools.

Completeness4/5

The surface covers creation, preflight estimation, retrieval, listing, and deletion, which is solid lifecycle coverage for immutable recordings. A minor gap is the lack of an explicit cancel operation for queued or running recordings, but the revision/retry model covers the main workflows.

Available Tools

5 tools
delete_recordingDelete a recordingA
DestructiveIdempotent
Inspect

Delete a recording’s video files for good: the original and any crop or trim. The recording stays in the history with status deleted. This cannot be undone; deleting it again changes nothing.

NameRequiredDescriptionDefault
idYesThe recording’s id, from record_html or list_recordings.

Output Schema

NameRequiredDescription
idYes
errorYes
videoYes
reportYes
statusYes
pageUrlYes
requestYes
progressYes
rendererYes
createdAtYes
finishedAtYes

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true and idempotentHint=true, so the safety profile is covered. The description adds context beyond that: exactly what is destroyed (original plus crop/trim files), that the recording remains in history with status 'deleted', and that re-deletion is a no-op. It does not mention auth requirements or immediate vs. eventual file removal, keeping it at a 4.

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

Conciseness5/5

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

Three short sentences, each carrying distinct information: what gets deleted, what remains, and irreversibility/idempotency. Front-loaded with the destructive effect and zero filler.

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 and annotations covering safety semantics, the description supplies everything else an agent needs: the precise effect on files versus metadata, irreversibility, and idempotent behavior. Nothing essential 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?

Only one parameter with 100% schema description coverage, and the schema already explains where the id comes from (record_html or list_recordings). The description adds no parameter detail but the baseline for a single fully-documented param is high.

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 ('Delete a recording') and immediately narrows scope to the video files (original, crop, trim) while clarifying the record itself persists. This clearly separates it from siblings like get_recording, list_recordings, and record_html, which are all read-oriented.

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

Usage Guidelines3/5

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

The description makes the destructive nature and idempotency clear, which helps the agent decide whether to call it at all, but it never names an alternative (e.g., a soft-delete or restore path) or states when not to use it. Usage is implied rather than guided.

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

estimate_recordingCheck a recording requestA
Read-only
Inspect

Check a recording request without recording or using up any quota. Takes the same arguments as record_html. Returns what to fix (invalidIssues, limitIssues, capacity.reasons), the resource estimate, your limits and your usage: recordings in progress and recordings started in the last 24 hours.

NameRequiredDescriptionDefault
crfNoQuality for mp4 and webm, from 10 (best, largest) to 35 (smallest). Not together with bitrateMbps; not for gif.
fitNoHow the frame fills outputSize: fill (stretch), contain (letterbox in background) or cover (crop to fill).
fpsNoFrame rate: one of 15, 23.976, 24, 25, 29.97, 30, 59.94, 60 (default 30). For gif, a whole number from 1 to 30.
urlNoPublic http(s) URL of the page or creative to record. The recorder runs on the internet: localhost and private networks are out of reach. Pass url or html, not both.
cropNoRecord only this region of the viewport: { x, y, width, height } in pixels, even values, inside the viewport.
htmlNoA complete HTML document to record instead of a url, e.g. a banner you just wrote. One file: inline the CSS and JavaScript, and load images, fonts and libraries from public https URLs or data: URIs. It is published at an unlisted public URL and recorded from there.
loopNogif only: whether the gif loops.
syncNoHow trim markers are used: auto (default: markers when the page calls trim_start(), else the load event), load (ignore markers) or markers (fail when trim_start() is not called within markerWaitSec).
audioNoRecord the page’s audio too. Not for gif.
widthYesViewport width in CSS pixels: even, 16–7680. Use the creative’s size, e.g. 300 for a 300×250 banner or 1920 for a full HD page.
formatNomp4 (default, H.264), webm or gif.
heightYesViewport height in CSS pixels: even, 16–7680.
startAtNoWhere the video starts: "load" (default: the load event, or the first trim_start() call) or that many milliseconds after it (0–120000).
rendererNoauto (default), cpu or gpu. Leave it on auto.
backgroundNoLetterbox colour for fit: contain, as #rrggbb.
outputSizeNoScale the video to { width, height } (even values); see fit.
bitrateMbpsNoA target bitrate in Mbps (1–100) instead of crf, for platforms with a bitrate spec (e.g. DOOH). Not for gif.
bitrateModeNovbr (default) or cbr. Needs bitrateMbps.
durationSecYesLength of the video in seconds (1–300; your account limit applies). With trim_end() it is the maximum.
pixelFormatNoyuv420p (default; plays everywhere), yuv422p or yuv444p.
markerWaitSecNoHow long to wait for trim_start() after load, in seconds (0–60, default 10).
markerLatencyMsNoOverrides the measured delay between a marker call and the frame it marks (0–1000 ms). Rarely needed.

Output Schema

NameRequiredDescription
okYes
usageYes
limitsYes
capacityYes
estimateYes
limitIssuesYes
invalidIssuesYes

TDQS

A4.1/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and openWorldHint=false, and the description is consistent with that. It adds real value by naming the failure categories returned (invalidIssues, limitIssues, capacity.reasons) and the quota/usage reporting, so the agent knows this is a side-effect-free preview that surfaces account limits. It does not say whether any network fetch of the url/html still occurs, which would matter for a validation call.

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

Conciseness5/5

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

Three short sentences, front-loaded with the side-effect-free promise, then the argument relationship, then the return contents. Zero filler.

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?

For a 22-parameter validation tool this covers what matters: parity with record_html, the absence of quota cost, and the shape of the useful part of the response. An output schema exists, so the return-value listing is a bonus rather than a necessity.

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

Parameters3/5

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

Schema description coverage is 100% across 22 parameters, so the schema fully documents constraints and enums. The description adds only the useful fact that the argument set is identical to record_html; it gives no semantics of its own for any parameter, which is acceptable at baseline 3.

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 and resource ("Check a recording request") and immediately distinguishes it from the real thing by contrasting it with record_html, whose arguments it mirrors. An agent can tell it apart from every sibling without opening a schema.

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

Usage Guidelines4/5

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

Makes the core use case clear: validate a request without recording or consuming quota, implying it should be called before record_html. It stops short of an explicit "use this before record_html; use record_html when you want the actual file" routing statement, but the argument-parity note carries the intent.

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

get_recordingGet a recordingA
Read-only
Inspect

Get a recording's status, report and a fresh video link (signed, valid for 1 hour). With waitSec, waits up to that many seconds (at most 45) for a queued or running recording to finish. Use it to continue after record_html returned before the video was ready, or to refresh an expired link.

NameRequiredDescriptionDefault
idYesThe recording’s id, from record_html or list_recordings.
waitSecNoHow long to wait for the finished video, in seconds (0–45, default 0). The recording keeps going after the call returns.

Output Schema

NameRequiredDescription
idYes
errorYes
videoYes
reportYes
statusYes
pageUrlYes
requestYes
progressYes
rendererYes
createdAtYes
finishedAtYes

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already establish that this is a read-only, non-open-world tool. The description adds valuable behavioral detail beyond annotations: the video link is signed and valid for one hour, and waitSec waits for completion up to 45 seconds. It does not add much about auth or failure behavior, but the main traits are disclosed.

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

Conciseness5/5

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

Three compact sentences with no waste. The return contents are front-loaded, followed by the waitSec behavior and the practical use cases.

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

Completeness5/5

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

The tool has annotations, full schema coverage, and an output schema, and the description still provides enough context to call it correctly. The main behaviors an agent needs, link freshness, waiting, and continuation after record_html, are all covered.

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 coverage is 100%, so the baseline would be 3, but the description adds meaning for waitSec by explaining that it waits for a queued or running recording to finish and caps at 45 seconds. It also contextualizes the id indirectly through record_html continuation, though the schema already documents the id source.

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 and resource and enumerates what is returned: status, report, and a fresh signed video link. It also distinguishes the continuation use case from record_html, so an agent can tell why this tool exists versus its siblings.

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?

Explicitly says to use it after record_html returns before the video is ready and to refresh an expired link. It also explains when waitSec applies, namely for queued or running recordings, which gives clear invocation guidance.

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

list_recordingsList recordingsA
Read-only
Inspect

List your recordings, newest first: id, status, request, report and pageUrl (10 per page by default). Video links are left out; call get_recording for one. Continue with nextCursor.

NameRequiredDescriptionDefault
limitNoHow many to return (1–50, default 10).
cursorNonextCursor from the previous page.
statusNo"active" (queued, running or storing) or a comma list of queued, running, storing, ready, failed, deleted, expired. Default: everything except deleted.

Output Schema

NameRequiredDescription
itemsYes
nextCursorYes

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, and the description adds real value: default page size of 10, newest-first ordering, and that video links are omitted from results. It does not discuss the status filter's behavior beyond the schema, but the safety profile and output shape are well covered.

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

Conciseness5/5

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

Two tight sentences; scope, fields, exclusion, alternative and pagination are all front-loaded with no filler.

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?

An output schema exists, yet the description still names the returned fields and the notable exclusion, plus pagination mechanics, leaving nothing an agent needs missing.

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

Parameters3/5

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

Schema coverage is 100%, so limit, cursor and status are fully documented in the schema. The description only echoes the default page size and cursor chaining, adding little beyond structured fields, which matches the baseline 3.

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 and resource (List your recordings) plus sort order (newest first) and the fields returned, so an agent knows exactly what it gets. It explicitly distinguishes itself from get_recording for video links.

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

Usage Guidelines4/5

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

Routes the agent to get_recording when video links are needed and explains how to continue with nextCursor. It does not say when to prefer this over siblings like estimate_recording, but for a list endpoint the guidance is clear.

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

record_htmlRecord HTML to videoAInspect

Record a web page or HTML5 creative (banner, ad, animation, landing page) to a video: MP4 (default), WebM or GIF. Returns the finished recording with a video link.

Input: either url (a public http(s) page; localhost and private networks are out of reach) or html (a complete single-file HTML document you wrote, published at an unlisted public URL and recorded from there). Set width and height to the creative's size (e.g. 300×250, 728×90, 1080×1920, 1920×1080) and durationSec to how long it runs.

Waiting: the call waits up to waitSec (default 45 s) for the video. If it isn't done by then, you get the recording with status queued or running; it keeps going. Call get_recording with its id and waitSec to wait for it; don't call record_html again for it.

Retries are safe: identical calls within 10 minutes return the same recording. After changing the creative behind the same url, pass a new revision to record it again. A failed recording is never reused: call again once you've fixed the cause.

Trim markers: by default the video starts at the page's load event and lasts durationSec. To capture exactly the animation, the page can mark it. The recorder defines two global functions in every frame (iframes included):

  • trim_start(): call it once when the assets are loaded, just before the animation starts. The video starts there.

  • trim_end(): call it once from the animation's completion callback (e.g. GSAP onComplete, the last animationend). The video ends there and durationSec becomes the maximum. Guard both so the page still works in a normal browser: // assets loaded, just before the animation starts: if (typeof trim_start === 'function') trim_start(); // in the animation's completion callback: if (typeof trim_end === 'function') trim_end(); Never call the two right after each other: that marks an empty clip. With sync "markers" the recording fails instead of falling back to the load event when trim_start() isn't called within markerWaitSec (default 10 s). report.anchor says "trim_start" when the start marker was used.

Links: video.url is signed and valid for 1 hour (get_recording mints a fresh one). pageUrl is the recording's page in the web app, for a person to open later (they sign in).

Limits: the account's limits apply (length, size, fps, recordings at a time and per day); estimate_recording checks a request without recording. Errors say what to change: fix it and call again.

NameRequiredDescriptionDefault
crfNoQuality for mp4 and webm, from 10 (best, largest) to 35 (smallest). Not together with bitrateMbps; not for gif.
fitNoHow the frame fills outputSize: fill (stretch), contain (letterbox in background) or cover (crop to fill).
fpsNoFrame rate: one of 15, 23.976, 24, 25, 29.97, 30, 59.94, 60 (default 30). For gif, a whole number from 1 to 30.
urlNoPublic http(s) URL of the page or creative to record. The recorder runs on the internet: localhost and private networks are out of reach. Pass url or html, not both.
cropNoRecord only this region of the viewport: { x, y, width, height } in pixels, even values, inside the viewport.
htmlNoA complete HTML document to record instead of a url, e.g. a banner you just wrote. One file: inline the CSS and JavaScript, and load images, fonts and libraries from public https URLs or data: URIs. It is published at an unlisted public URL and recorded from there.
loopNogif only: whether the gif loops.
syncNoHow trim markers are used: auto (default: markers when the page calls trim_start(), else the load event), load (ignore markers) or markers (fail when trim_start() is not called within markerWaitSec).
audioNoRecord the page’s audio too. Not for gif.
widthYesViewport width in CSS pixels: even, 16–7680. Use the creative’s size, e.g. 300 for a 300×250 banner or 1920 for a full HD page.
formatNomp4 (default, H.264), webm or gif.
heightYesViewport height in CSS pixels: even, 16–7680.
startAtNoWhere the video starts: "load" (default: the load event, or the first trim_start() call) or that many milliseconds after it (0–120000).
waitSecNoHow long to wait for the finished video, in seconds (0–45, default 45). The recording keeps going after the call returns.
rendererNoauto (default), cpu or gpu. Leave it on auto.
revisionNoAny label that changes when the creative changes. Identical calls within 10 minutes return the same recording; after you change the creative behind the same url, pass a new revision to record it again.
backgroundNoLetterbox colour for fit: contain, as #rrggbb.
outputSizeNoScale the video to { width, height } (even values); see fit.
bitrateMbpsNoA target bitrate in Mbps (1–100) instead of crf, for platforms with a bitrate spec (e.g. DOOH). Not for gif.
bitrateModeNovbr (default) or cbr. Needs bitrateMbps.
durationSecYesLength of the video in seconds (1–300; your account limit applies). With trim_end() it is the maximum.
pixelFormatNoyuv420p (default; plays everywhere), yuv422p or yuv444p.
markerWaitSecNoHow long to wait for trim_start() after load, in seconds (0–60, default 10).
markerLatencyMsNoOverrides the measured delay between a marker call and the frame it marks (0–1000 ms). Rarely needed.

Output Schema

NameRequiredDescription
idYes
errorYes
videoYes
reportYes
statusYes
pageUrlYes
requestYes
progressYes
rendererYes
createdAtYes
finishedAtYes

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already flag openWorldHint=true and non-readOnly, but the description goes well beyond them: it discloses the 10-minute idempotent-replay window, that failed recordings are never reused, that the signed video.url expires in 1 hour while pageUrl requires sign-in, that the job keeps running past waitSec, and that account-level limits (length/size/fps/concurrency/day) apply. Minor tension with idempotentHint=false, but the text clarifies the nuances rather than contradicting them.

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?

Long, but justified by 24 parameters and organized under front-loaded headers (Input, Waiting, Retries, Trim markers, Links, Limits). Some redundancy with the schema remains — waitSec's default 45 and 'recording keeps going' are stated in both places, and the trim-marker code sample is verbose.

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?

For a complex open-world operation with nested objects, enums, and a 24-parameter schema, the description covers the full call lifecycle: input selection, sizing, waiting/polling, retry semantics, marker-based trimming, link expiry, and failure handling. An output schema exists, so not explaining return shapes is appropriate.

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 coverage is 100%, so baseline is 3; the description nonetheless adds semantics the schema cannot: typical creative dimensions (300×250, 728×90, 1080×1920), what durationSec means when trim_end() fires, that revision exists specifically to re-record a changed creative behind the same url, and the sync='markers' failure mode. That is real meaning beyond the field docs.

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

Purpose5/5

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

The first sentence states a specific verb and resource ('Record a web page or HTML5 creative') plus the output formats (MP4/WebM/GIF) and the return value (a video link). It is clearly distinguishable from siblings: get_recording waits on an existing job, estimate_recording checks limits without recording, list/delete manage recordings.

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?

Explicitly routes the agent to alternatives: 'Call get_recording with its id and waitSec ... don't call record_html again for it', and 'estimate_recording checks a request without recording'. It also states when-not conditions (localhost/private networks unreachable, pass url or html but not both) and the retry/replacement rules for changed creatives.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 5 tool updates
    • First observeddelete_recording
    • First observedestimate_recording
    • First observedget_recording
    • First observedlist_recordings
    • First observedrecord_html

Publisher details

Operator
Unknown
Vendor relationship
Not applicable
Trust center
Unknown
Restrictions
Unknown

Related MCP Servers

  • A
    license
    Not graded
    quality
    B
    maintenance
    Perplexity for social: ask what competitors are running across social and get answers grounded in real ad and creative data, not guesses.
    2
    Apache 2.0
  • A
    license
    A
    quality
    C
    maintenance
    Enables brand visibility monitoring across major AI platforms like ChatGPT, Claude, Gemini, and Perplexity. It allows users to track visibility scores, analyze competitor data, and receive actionable insights to improve AI-generated brand recommendations.
    16
    4 npm
    1
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Browse IndustryLens's published competitive-intelligence reports and head-to-head competitor comparisons from any AI agent — real, source-backed data.
    MIT
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources