Skip to main content
Glama

Read an asset

read_asset
Read-onlyIdempotent

Read an uploaded asset's pixels, metadata and readiness: its size, length, frame rate and whether a video has a sound track (hasAudio), with the image, a timestamped contact sheet of a video, or a sound's waveform. For what a file says or where its shots and beats are, use transcribe_asset and read_transcript, detect_scenes and detect_beats; search_video_moments finds moments by what they show or say. id is an Asset ID from search_assets, or a Library id from search_library or search_video_moments: a Library file is read where it is, without adding it to a project, with or without one open. To look closely at a video file, whether or not it is on the film (preview_frame and preview_range draw only the film): startSeconds and endSeconds draw a contact sheet of only that range of the file, and times draws up to 4 frames of the file large. Use them to time an action to a tenth of a second or to check a detail. box draws only part of the frame (or of an image) from the full-resolution file: use it to read a label, a screen, small text or a face, and to check what a cover must hide. A sound draws as its waveform over its spectrum, with its loudest moment and its beats; startSeconds and endSeconds draw only that part, to find a hit or a silence to cut on. A 3D model draws from four sides, with the materials its file names. A call with a range, times or box answers with the picture and its legend, not the record.

Tool call template

Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {
      "id": "<id>",
      "startSeconds": "<startSeconds>",
      "endSeconds": "<endSeconds>",
      "times": "<times>",
      "box": "<box>",
      "space": "<space>",
      "previewId": "<previewId>",
      "clipId": "<clipId>",
      "atSpace": "<atSpace>",
      "projectId": "<projectId>"
    },
    "name": "read_asset"
  }
}

Input Schema

NameRequiredDescriptionDefault
idYes
boxYesPart of the file to draw, as [x0, y0, x1, y1] in the file's own pixels (its width and height, the pixels find_objects and track_box give boxes in): the top left and bottom right corners. Works with times, with a range, alone for the whole video, and on an image. The box is cut from the full-resolution file, not from a preview, and drawn large, so small text, labels, screens and faces read. The answer gives the scale from the picture's pixels back to the file's. With space preview and previewId, the box is pixels of that preview and is read back as the file's pixels it shows. null (or leaving it out) draws the whole frame.
spaceYesThe space of this call's coordinates. null or source: pixels of the asset file. preview: pixels of a preview image you were shown, with previewId; its time is that preview's time. film: scene pixels from the frame's centre; film_norm: 0 to 1 of the frame; clip: the clip's own picture (with clipId). The tool converts them to the asset's pixels through the film's real transforms.
timesYesSeconds of a video file to see as large frames, 1 to 4, in one picture in time order with each time on its frame. Use it to check a detail or the exact moment of an action. Not with startSeconds and endSeconds. null (or leaving it out) draws a contact sheet.
clipIdYesThe film clip that plays this asset, when space or atSpace needs one and several clips play it. null picks the clip that shows the asset at that time.
atSpaceYesWhat this call's times are. null or source: seconds into the asset file. timeline: seconds of the film, read through the clip that plays the asset then (clipId to pick one).
previewIdYesWith space preview or preview_norm: the previewId the preview_frame, preview_range or preview_timeline answer printed. Else null.
projectIdYesThe project this call runs on without changing the open project. null (or leaving it out) uses the open project. wait_for_jobs takes the projectId of the calls that started the jobs.
endSecondsYesWhere that range ends, in seconds of the file, after startSeconds. A video's sheet has up to 16 tiles with their times, so a range of 2 seconds shows a tile about every 0.13 seconds; a sound's strip spreads the range over its whole width. A range past the end of the file stops at its end.
startSecondsYesWhere a contact sheet of part of a video, or the waveform and spectrum of part of a sound, starts, in seconds of the file. Pass it with endSeconds. null (or leaving it out) draws the whole file.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed6 schema fields changed
    • addedInput schema / properties / atSpace
      Added value: +{
      +  "anyOf": [
      +    {
      +      "enum": [
      +        "source",
      +        "timeline"
      +      ],
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "description": "What this call's times are. null or source: seconds into the asset file. timeline: seconds of the film, read through the clip that plays the asset then (clipId to pick one)."
      +}
    • changedInput schema / properties / box / description
      Previous value: -"Part of the file to draw, as [x0, y0, x1, y1] in the file's own pixels (its width and height, the pixels find_objects and track_box give boxes in): the top left and bottom right corners. Works with times, with a range, alone for the whole video, and on an image. The box is cut from the full-resolution file, not from a preview, and drawn large, so small text, labels, screens and faces read. The answer gives the scale from the picture's pixels back to the file's. null (or leaving it out) draws the whole frame."New value: +"Part of the file to draw, as [x0, y0, x1, y1] in the file's own pixels (its width and height, the pixels find_objects and track_box give boxes in): the top left and bottom right corners. Works with times, with a range, alone for the whole video, and on an image. The box is cut from the full-resolution file, not from a preview, and drawn large, so small text, labels, screens and faces read. The answer gives the scale from the picture's pixels back to the file's. With space preview and previewId, the box is pixels of that preview and is read back as the file's pixels it shows. null (or leaving it out) draws the whole frame."
    • addedInput schema / properties / clipId
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "description": "The film clip that plays this asset, when space or atSpace needs one and several clips play it. null picks the clip that shows the asset at that time."
      +}
    • addedInput schema / properties / previewId
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "description": "With space preview or preview_norm: the previewId the preview_frame, preview_range or preview_timeline answer printed. Else null."
      +}
    • addedInput schema / properties / space
      Added value: +{
      +  "anyOf": [
      +    {
      +      "enum": [
      +        "source",
      +        "source_norm",
      +        "clip",
      +        "film",
      +        "film_tl",
      +        "film_norm",
      +        "preview",
      +        "preview_norm"
      +      ],
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "description": "The space of this call's coordinates. null or source: pixels of the asset file. preview: pixels of a preview image you were shown, with previewId; its time is that preview's time. film: scene pixels from the frame's centre; film_norm: 0 to 1 of the frame; clip: the clip's own picture (with clipId). The tool converts them to the asset's pixels through the film's real transforms."
      +}
    • changedInput schema / required
      Previous value: -[
      -  "id",
      -  "startSeconds",
      -  "endSeconds",
      -  "times",
      -  "box",
      -  "projectId"
      -]New value: +[
      +  "id",
      +  "startSeconds",
      +  "endSeconds",
      +  "times",
      +  "box",
      +  "space",
      +  "previewId",
      +  "clipId",
      +  "atSpace",
      +  "projectId"
      +]
  2. Changed2 schema fields changed
    • changedInput schema / properties / endSeconds / description
      Previous value: -"Where that range ends, in seconds of the file, after startSeconds. The sheet has up to 16 tiles with their times, so a range of 2 seconds shows a tile about every 0.13 seconds. A range past the end of the file stops at its end."New value: +"Where that range ends, in seconds of the file, after startSeconds. A video's sheet has up to 16 tiles with their times, so a range of 2 seconds shows a tile about every 0.13 seconds; a sound's strip spreads the range over its whole width. A range past the end of the file stops at its end."
    • changedInput schema / properties / startSeconds / description
      Previous value: -"Where a contact sheet of part of a video starts, in seconds of the file. Pass it with endSeconds. null (or leaving it out) draws the whole file."New value: +"Where a contact sheet of part of a video, or the waveform and spectrum of part of a sound, starts, in seconds of the file. Pass it with endSeconds. null (or leaving it out) draws the whole file."
  3. Changed2 schema fields changed
    • addedInput schema / properties / box
      Added value: +{
      +  "anyOf": [
      +    {
      +      "items": {
      +        "type": "number"
      +      },
      +      "maxItems": 4,
      +      "minItems": 4,
      +      "type": "array"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "description": "Part of the file to draw, as [x0, y0, x1, y1] in the file's own pixels (its width and height, the pixels find_objects and track_box give boxes in): the top left and bottom right corners. Works with times, with a range, alone for the whole video, and on an image. The box is cut from the full-resolution file, not from a preview, and drawn large, so small text, labels, screens and faces read. The answer gives the scale from the picture's pixels back to the file's. null (or leaving it out) draws the whole frame."
      +}
    • changedInput schema / required
      Previous value: -[
      -  "id",
      -  "startSeconds",
      -  "endSeconds",
      -  "times",
      -  "projectId"
      -]New value: +[
      +  "id",
      +  "startSeconds",
      +  "endSeconds",
      +  "times",
      +  "box",
      +  "projectId"
      +]
  4. First observed

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnly, idempotent, non-destructive, closed-world), so the bar is lower, and the description still adds real behavior: Library assets are read where they are without being added to a project, and 'a call with a range, times or box answers with the picture and its legend, not the record' — a genuinely non-obvious conditional return shape. It stops short of describing the metadata/readiness payload outside the picture modes.

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

Conciseness3/5

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

The purpose is front-loaded, but the body is one unbroken block of run-on clauses joined by colons and semicolons, with coverage of images, video, sound and 3D models interleaved. Almost every clause carries information, yet the density and lack of segmentation make it hard to scan for the one mode an agent actually needs.

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

Completeness4/5

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

For a 10-parameter tool with no output schema, the description is unusually complete: it covers asset-type behavior (video contact sheet, sound waveform/spectrum, 3D model from four sides), range/times/box modes, coordinate readback scale, and the project context. The main residual gap is that the metadata/readiness return (size, length, frame rate, hasAudio) is only named, not described in shape.

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 90% and every parameter already carries a long description, so much of the description's parameter talk (times = 1–4 frames, box = full-resolution crop, times not with startSeconds/endSeconds) repeats the schema. It does add practical framing beyond the schema — using box to read a label or check what a cover must hide, using a range on a sound to find a hit or a silence to cut on — which helps an agent choose values rather than just types.

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 ('read an uploaded asset's pixels, metadata and readiness') and immediately enumerates the outputs (size, length, frame rate, hasAudio, image/contact sheet/waveform). It explicitly names the siblings it is not (transcribe_asset, read_transcript, detect_scenes, detect_beats, search_video_moments) and what each covers instead, so the tool is separable 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 Guidelines5/5

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

Gives explicit routing: use transcribe_asset/read_transcript for what a file says, detect_scenes/detect_beats for shots and beats, search_video_moments for content-based search. Also clarifies a boundary an agent would otherwise get wrong — preview_frame and preview_range draw only the film, whereas this tool reads the file wherever it lives, including a Library id read in place without adding it to a project.

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.