Skip to main content
Glama

locate

Read-onlyIdempotent

Map source words, phrases, or timestamps to their positions in the edited render, listing surviving placements and flagging material cut out or beyond the recording.

Instructions

Where does a SOURCE word or SOURCE time play in the current render?

cut_by_time's read-only mirror, and the tool to reach for before quoting any timestamp to a human: word indices and transcript times address the original recording, so they are NOT render times and every accumulated cut moves them further apart.

Two clocks, and this reports the Edit's. timeline_start/ timeline_end are 0 = the Edit's own first frame, unchanged whether or not a head (a cold open) is configured. head_seconds rides along (0.0 with none) so a caller that needs the actual render time — this tool's own stated purpose — can add it: render time = Edit time + head_seconds.

Address it one way per call — first/last are inclusive word indices (last defaults to first), source_start/source_end are seconds into the recording (omit source_end to locate an instant), or phrase — a phrase naturally is a range, so it resolves straight to first/last with no edge to pick (after/occurrence disambiguate a phrase matching more than once), or event — a named instant from events.

Read present first. False means the material is not in the render, and beyond_source distinguishes "you cut it" from "the recording never went that far". A partially-cut range is normal: placements lists each surviving piece in playback order with the source coordinates saying which part of the phrase it is, covered how much survives, and contiguous whether the survivors still play back-to-back. Word mode (and phrase mode, which resolves into it) echoes the resolved words plus three either side; time mode echoes the words the interval overlaps, or its nearest neighbours if it landed in silence. Read-only: nothing is written.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
lastNoLast word index, inclusive. Defaults to `first`.
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.
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.
eventNoLocate a named instant from `events`, as `name` or `name#k` (k counts that name's events from 0). Echoed with its neighbours.
firstNoFirst word index, inclusive. Address it one way per call: `first`/`last`, `source_start`/`source_end`, or `phrase`.
phraseNoLocate by wording. A phrase is naturally a range, so it resolves straight to first and last with no edge to pick.
clip_idYesThe transcript, or the recording, the address belongs to.
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.
source_endNoEnd of the source interval, in the recording's own seconds.
source_startNoSeconds into the original recording. Omit `source_end` to locate an instant.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault

No arguments

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changedv0.36.0
    • addedInput schema / properties / event
      Added value: +{
      +  "default": null,
      +  "description": "Locate a named instant from `events`, as `name` or `name#k` (k counts that name's events from 0). Echoed with its neighbours.",
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
  2. Changed33 schema fields changedv0.25.0
    • addedInput schema / properties / after / description
      Added value: +"A forward cursor over a phrase's matches: any match at or before this word index is skipped. -1, the default, means from the start."
    • removedInput schema / properties / after / title
      Removed value: -"After"
    • addedInput schema / properties / clip_id / description
      Added value: +"The transcript, or the recording, the address belongs to."
    • removedInput schema / properties / clip_id / title
      Removed value: -"Clip Id"
    • removedInput schema / properties / first / anyOf
      Removed value: -[
      -  {
      -    "type": "integer"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedInput schema / properties / first / description
      Added value: +"First word index, inclusive. Address it one way per call: `first`/`last`, `source_start`/`source_end`, or `phrase`."
    • removedInput schema / properties / first / title
      Removed value: -"First"
    • addedInput schema / properties / first / type
      Added value: +[
      +  "integer",
      +  "null"
      +]
    • removedInput schema / properties / last / anyOf
      Removed value: -[
      -  {
      -    "type": "integer"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedInput schema / properties / last / description
      Added value: +"Last word index, inclusive. Defaults to `first`."
    • removedInput schema / properties / last / title
      Removed value: -"Last"
    • addedInput schema / properties / last / type
      Added value: +[
      +  "integer",
      +  "null"
      +]
    • removedInput schema / properties / occurrence / anyOf
      Removed value: -[
      -  {
      -    "type": "integer"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedInput schema / properties / occurrence / description
      Added value: +"Disambiguate 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."
    • removedInput schema / properties / occurrence / title
      Removed value: -"Occurrence"
    • addedInput schema / properties / occurrence / type
      Added value: +[
      +  "integer",
      +  "null"
      +]
    • removedInput schema / properties / path / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedInput schema / properties / path / description
      Added value: +"The 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."
    • removedInput schema / properties / path / title
      Removed value: -"Path"
    • addedInput schema / properties / path / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedInput schema / properties / phrase / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedInput schema / properties / phrase / description
      Added value: +"Locate by wording. A phrase is naturally a range, so it resolves straight to first and last with no edge to pick."
    • removedInput schema / properties / phrase / title
      Removed value: -"Phrase"
    • addedInput schema / properties / phrase / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedInput schema / properties / source_end / anyOf
      Removed value: -[
      -  {
      -    "type": "number"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedInput schema / properties / source_end / description
      Added value: +"End of the source interval, in the recording's own seconds."
    • removedInput schema / properties / source_end / title
      Removed value: -"Source End"
    • addedInput schema / properties / source_end / type
      Added value: +[
      +  "number",
      +  "null"
      +]
    • removedInput schema / properties / source_start / anyOf
      Removed value: -[
      -  {
      -    "type": "number"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedInput schema / properties / source_start / description
      Added value: +"Seconds into the original recording. Omit `source_end` to locate an instant."
    • removedInput schema / properties / source_start / title
      Removed value: -"Source Start"
    • addedInput schema / properties / source_start / type
      Added value: +[
      +  "number",
      +  "null"
      +]
    • removedInput schema / title
      Removed value: -"locateArguments"
  3. First observedv0.24.0

TDQS

A5/5.0
Behavior5/5

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

Annotations already state readOnlyHint=true and idempotentHint=true; the description reinforces 'Read-only: nothing is written.' Beyond that, it discloses the two-clock nuance (Edit time vs render time with head_seconds), the meaning of 'present', 'beyond_source', 'placements', 'covered', and 'contiguous', and how word/time modes echo results. This is far beyond the annotations and provides a full behavioral contract.

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?

The description is long but every sentence carries necessary information. It is structured into logical paragraphs: purpose, clock explanation, addressing modes, output guidance, and a final read-only note. It front-loads the core purpose and uses bold to emphasize key terms, making it scannable despite its length. No fluff or repetition.

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 is complex with 10 parameters and multiple addressing modes; the description covers every mode (word, time, phrase, event), explains defaults and edge cases (ambiguous phrase, silence, partial cuts), and specifies how to read the output (present, beyond_source, placements, covered, contiguous). It also mentions the output schema exists, so return values are not the description's job. It is complete for an agent to call correctly.

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

Parameters5/5

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

With 100% schema coverage, the schema already documents each parameter, but the description adds crucial semantic context: the one-way-per-call rule, how last defaults to first, how phrase resolves to first/last, how after/occurrence disambiguate, and how event is addressed. It explains the output semantics (present, placements, covered, contiguous) that tie parameters to results, which is essential for correct invocation.

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 description opens with a direct question that states exactly what the tool does: locate where SOURCE words or times play in the current render. It identifies itself as the read-only mirror of cut_by_time, which distinguishes it from that sibling and from other tools. The verb 'locate' plus the resource (source material in render) is specific and unambiguous.

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?

The description explicitly frames when to use it: 'the tool to reach for before quoting any timestamp to a human,' and explains the crucial difference between source and render times, warning that source indices are not render times. It names cut_by_time as the counterpart and implies this is the read-only variant. No exclusionary guidance is needed beyond this, as the purpose is clear.

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