Skip to main content
Glama

sound_add

Idempotent

Sync one-shot sounds to specific words, events, or repeated event names in a timeline. Handle cuts, trim sources, vary gain, and preview with plan mode before writing.

Instructions

Play a one-shot sound at a word, an event, or every event of one name.

Import the sound first (import_media), or call sound_generate for a ready UI set: eight key ticks, send, land, strike. every="key" puts a tick on each keystroke event; pass all eight keys as assets so the run does not repeat one sample, and a jitter_db of 2-3 to vary them. Hits land to the millisecond, between frames, and are resolved through the timeline on every build: a cut moves them, an every hit a cut removed is skipped, and a single hit whose word or event is cut makes export refuse until it is moved. The picks and jitter repeat on every build. src_in/src_out trim what plays. The music's duck hears a sound only with ducks. The reply counts the hits and echoes the first few; plan=true writes nothing. Export's reply lists the sounds it placed.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
pathNoThe project directory to act on. Omit it — the usual case — when this server is bound to a project (started as `proofcut -C DIR mcp`, or inside a project; `ping` says which): it then resolves to that one bound project, a relative path resolves against it, and a path outside it is refused by name. Unbound, `path` is the whole address and omitting it refuses rather than guessing.
planNoResolve the whole call and report what it would do, writing nothing. Prefer it over doing the thing and undoing it.
afterNoA forward cursor over a phrase's matches: any match at or before this word index is skipped. -1, the default, means from the start.
ducksNoThe music bed's duck hears this sound as it hears the voice: set it for a narrator take or a line of dialogue placed as a sound, never for clicks. Only matters when the bed has a duck.
eventNoPlay at this event of clip_id: `name`, or `name#k` when the name repeats.
everyNoPlay at every event of clip_id with this name (e.g. every keystroke). Events a cut removed are skipped and counted.
assetsYesThe imported clips to play, by clip_id. With several, each hit draws one, so a typed run does not repeat one sample. sound_generate registers a ready set (sfx-*).
phraseNoPlay as this phrase's FIRST word starts, resolved against clip_id's transcript.
src_inNoSeconds into each asset where the sound starts. With src_out, plays one line of a long take, and the 30 s cap is on the trimmed part.
clip_idYesThe clip whose words or events say where — the transcript the word index indexes, or the recording the events belong to.
gain_dbNoThe level in dB; 0 plays the file as it is. The generated set peaks at -3 dBFS.
min_gapNoWith every: drop a hit closer than this many seconds to the last one kept. Default 0.045.
src_outNoSeconds into each asset where the sound stops. Unset plays to the file's end.
jitter_dbNoVary each hit's level by up to this many dB either way. Default 0.
occurrenceNoDisambiguate a phrase by count when it matches more than once, **1-based** in transcript order among the matches after `after`: 1 is the first, 2 the second. Unset, an ambiguous phrase is refused — listing every candidate's range and text — rather than guessed at.
word_indexNoPlay as this word starts. One of word_index, phrase, event or every.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault

No arguments

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed3 schema fields changedv0.37.0
    • addedInput schema / properties / ducks
      Added value: +{
      +  "default": false,
      +  "description": "The music bed's duck hears this sound as it hears the voice: set it for a narrator take or a line of dialogue placed as a sound, never for clicks. Only matters when the bed has a duck.",
      +  "type": "boolean"
      +}
    • addedInput schema / properties / src_in
      Added value: +{
      +  "default": null,
      +  "description": "Seconds into each asset where the sound starts. With src_out, plays one line of a long take, and the 30 s cap is on the trimmed part.",
      +  "type": [
      +    "number",
      +    "null"
      +  ]
      +}
    • addedInput schema / properties / src_out
      Added value: +{
      +  "default": null,
      +  "description": "Seconds into each asset where the sound stops. Unset plays to the file's end.",
      +  "type": [
      +    "number",
      +    "null"
      +  ]
      +}
  2. Addedv0.36.0

TDQS

A4.6/5.0
Behavior5/5

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

Beyond the annotations, it discloses important build-time behavior: cuts move hits, `every` hits on removed cuts are skipped, a single hit on a removed word/event makes export refuse until moved, and picks/jitter repeat on every build. It also clarifies that `plan=true` writes nothing and that export's reply lists placed sounds. No contradiction with annotations.

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?

The description is dense at roughly 180 words but front-loads the core action and packs behavior caveats that matter for correct use. Every sentence carries information, though phrases like 'ready UI set' are slightly awkward and could be tightened.

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?

Given the 16-parameter complexity, rich schema, annotations, and output schema, the description covers the non-obvious behaviors an agent would otherwise miss: duck interaction, plan mode, export placement listing, and repeated-build resolution. Nothing essential appears 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 coverage is 100%, so the baseline is 3, but the description adds real usage guidance: pass all eight keys as `assets` to avoid repeated samples, use `jitter_db` of 2-3 to vary them, and `src_in`/`src_out` trim playback. It supplements rather than restates the schema.

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 names a specific verb ('Play'), a resource ('a one-shot sound'), and placement targets ('at a word, an event, or every event of one name'). This clearly differentiates it from siblings like sound_generate, which creates assets, and sound_rm, which removes them.

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?

The description gives workflow context: import media first or call sound_generate for a ready set, and it explains when `every`, `ducks`, and `plan=true` are relevant. It does not explicitly state when-not-to-use cases or compare against alternatives like overlay_add, but the context is clear enough for most routing decisions.

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

Deploy Server

Other Tools