Skip to main content
Glama

score_my_video

Destructive

Before AINSOF works with a video the person signs in once on ainsof.io (Google or email): without a sign_in_code this returns sign_in_required with a link to show them; after they sign in, call again with the same arguments plus that sign_in_code. Create a music-scored MP4 from a supported video URL and an English music brief, an explicit catalog track, or timed sections. Measures video duration and edit pace, selects or uses the specified music, and mixes it with the source audio. Sections support separate cues, versions or stems; silences specify music-free intervals. Section and silence boundaries are adjusted to measured shot boundaries. Returns video download/watch links, chosen cues, mix details, duration and shot-count summary. Watching is free; downloading the file needs a signed-in AINSOF account with download access (sign in on ainsof.io with Google or email). Detailed cut timestamps, storyboard frames and transcripts are provided by analyze_video, not this tool. Completed delivery packages are retrieved with deliver_score using the scoring arguments. Supports direct video files and supported Dropbox/Google Drive shares; stream-only YouTube, Vimeo, Dailymotion and Twitch pages are unsupported. Creates private processing jobs and stored outputs. After verified output storage, the temporary AINSOF-uploaded source copy is deleted or queued for deletion retry; the local original is unchanged. Processing may return still_running; recent identical requests reuse existing work. Terminal failures return a reason.

Input Schema

NameRequiredDescriptionDefault
briefNothe music you want, IN ENGLISH. Leave it out and AINSOF watches the film first and chooses the music for what it is and how it feels (returned as `film`).
versionNoforce a version — MAIN, CUT_30, CUT_60…
sectionsNoTimed sections with separate music briefs or specified cues. Boundaries are adjusted to measured shot boundaries. This tool does not support per-section volume automation.
silencesNoMusic-free intervals, in seconds. Boundaries are adjusted to measured shot boundaries. analyze_video provides the cut list.
track_idNouse this exact cue instead, e.g. 'AIN-CAT 006_004'
video_urlYeslink to the video
music_intentNooptional — the music the user wants, in at most 8 English words, no names (e.g. 'tense build, minimal, no vocals'). Kept as anonymous usage statistics.
project_typeNooptional — what kind of project the video is. Kept as anonymous usage statistics.
sign_in_codeNothe sign_in_code AINSOF returned with its sign-in link, once the person has signed in. Pass it to every video tool in this conversation.
user_requestNooptional — in one sentence, what the user wants the music to do for this video, in their own words (e.g. 'tense build to the reveal at the end'). Kept by AINSOF for 30 days to review how well the music fit, then deleted.
music_offset_dbNohow far under the video's own audio the music sits, in dB. Negative is quieter; 0 is level with it. Leave unset for the default.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedInput schema / properties / sections / items / properties / stems / description
      Previous value: -"Or build this act from individual instruments of that cue — [\"STRINGS\"], or [\"BRASS\",\"BASS\"]. Every stem is the same length as the full mix and perfectly in sync with it, so any combination stays together. Use it when a moment needs one colour rather than a whole arrangement. Needs track_id."New value: +"Or build this act from individual instruments of that cue — [\"STRINGS\"], or [\"BRASS\",\"BASS\"]. Every stem is the same length as the full mix and perfectly in sync with it, so any combination stays together. Use it when a moment needs one color rather than a whole arrangement. Needs track_id."
  2. Changed2 schema fields changed
    • changedInput schema / properties / brief / description
      Previous value: -"the music you want, IN ENGLISH"New value: +"the music you want, IN ENGLISH. Leave it out and AINSOF watches the film first and chooses the music for what it is and how it feels (returned as `film`)."
    • addedInput schema / properties / sign_in_code
      Added value: +{
      +  "description": "the sign_in_code AINSOF returned with its sign-in link, once the person has signed in. Pass it to every video tool in this conversation.",
      +  "type": "string"
      +}
  3. Changed3 schema fields changed
    • addedInput schema / properties / music_intent
      Added value: +{
      +  "description": "optional — the music the user wants, in at most 8 English words, no names (e.g. 'tense build, minimal, no vocals'). Kept as anonymous usage statistics.",
      +  "type": "string"
      +}
    • addedInput schema / properties / project_type
      Added value: +{
      +  "description": "optional — what kind of project the video is. Kept as anonymous usage statistics.",
      +  "enum": [
      +    "ad",
      +    "social",
      +    "documentary",
      +    "film",
      +    "trailer",
      +    "game",
      +    "corporate",
      +    "event",
      +    "podcast",
      +    "music_video",
      +    "other"
      +  ],
      +  "type": "string"
      +}
    • addedInput schema / properties / user_request
      Added value: +{
      +  "description": "optional — in one sentence, what the user wants the music to do for this video, in their own words (e.g. 'tense build to the reveal at the end'). Kept by AINSOF for 30 days to review how well the music fit, then deleted.",
      +  "type": "string"
      +}
  4. Changed3 schema fields changed
    • changedInput schema / properties / sections / description
      Previous value: -"DIFFERENT MUSIC FOR DIFFERENT PARTS OF THE STORY. Use this when a brief asks for acts, distinct sections, a change of character, or a separate cue for a specific sequence. Each section gets its own cue chosen from its own brief, and every boundary is snapped to a real shot boundary so the music turns over on the cut. This is the ONLY way to make a moment feel different. There is no volume automation in this tool and there will not be: turning one piece of music down to fake a low point is not scoring, it is the same music played quieter, and it sounds like it. If a moment needs to feel smaller, give it its own section with its own brief."New value: +"Timed sections with separate music briefs or specified cues. Boundaries are adjusted to measured shot boundaries. This tool does not support per-section volume automation."
    • changedInput schema / properties / sections / items / properties / version / description
      Previous value: -"Which mix of that cue to use. Every cue ships the full mix plus alternates the composer made: UNDERSCORE, MUSIC_BED, NO_MELODY, NO_DRUM_PERCUSSION, NO_VOCAL and others — call get_track to see what a given cue actually has. There is no rule about which suits which moment: a scene under dialogue often wants NO_MELODY, and the moment that has to land wants everything. You are scoring it — choose."New value: +"An alternate mix available for this cue, such as MAIN, UNDERSCORE, MUSIC_BED or NO_MELODY. get_track lists the versions actually available for the selected cue."
    • changedInput schema / properties / silences / description
      Previous value: -"MOMENTS WHERE THE MUSIC STOPS DEAD. Briefs ask for this in as many words — \"drop the music out completely when the statue is destroyed\" — and it is the single most effective thing a score does. Each time is snapped to the nearest real shot boundary, so the stop lands ON the cut instead of near it. Call analyze_video first if you need the cut list."New value: +"Music-free intervals, in seconds. Boundaries are adjusted to measured shot boundaries. analyze_video provides the cut list."
  5. First observed

TDQS

A4.8/5.0
Behavior5/5

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

Beyond the annotations (destructiveHint=true, idempotentHint=false), the description discloses a lot of behavior an agent cannot infer: the sign-in/auth flow, private job creation with stored outputs, deletion of the temporary uploaded source copy after verified storage, asynchronous 'still_running' returns, reuse of recent identical work, and terminal failures returning a reason. The deletion of the temporary copy is consistent with destructiveHint=true. The statement that recent identical requests reuse existing work sits in mild tension with idempotentHint=false, but it describes caching rather than true idempotency, so it is not a contradiction.

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?

Dense but nearly every sentence carries operational information: auth flow, output shape, source restrictions, cleanup, async behavior, error mode. The one structural weakness is front-loading the sign-in precondition ahead of the core purpose statement, which pushes 'Create a music-scored MP4...' into the middle of a long opening paragraph.

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?

No output schema exists, but the description compensates by describing the return payload (video download/watch links, chosen cues, mix details, duration and shot-count summary). Combined with source restrictions, auth requirements, async semantics, cleanup behavior and failure reporting, an agent has everything needed to call it correctly and interpret results.

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 schema already documents all 11 parameters and the baseline is 3. The description adds value by framing the three mutually alternative ways to specify music (brief vs. explicit track_id vs. timed sections), how sections/silences map to cues and stems, and an explicit negative constraint ('does not support per-section volume automation'). It does not add syntax or format detail for individual scalars like music_offset_db.

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 — 'Create a music-scored MP4 from a supported video URL and an English music brief, an explicit catalog track, or timed sections' — and names the three input modes up front. It explicitly distinguishes itself from analyze_video ('Detailed cut timestamps, storyboard frames and transcripts are provided by analyze_video, not this tool') and from deliver_score, so an agent can separate it from siblings without reading 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?

Gives explicit when-to-use routing: analyze_video for cut timestamps/frames/transcripts, deliver_score for completed delivery packages. It also states prerequisites (sign-in on ainsof.io, sign_in_code passed to every video tool), the retry protocol after signing in, and unsupported sources (stream-only YouTube, Vimeo, Dailymotion, Twitch). Nothing is left to inference.

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.

Resources