# You need the two minutes where the budget came up

> Search the transcript for a term, get excerpts each with its own timestamp, then pull that stretch as turns of speech. Free, as often as you like.

Canonical HTML version: https://mcpbelt.com/problems/find-the-minute-a-topic-came-up

## The problem

The meeting was an hour. Somewhere in it the budget was discussed, a number was said out loud, and someone either agreed to it or did not. You need those two minutes. You do not need the other fifty-eight.

Listening again is not a strategy. It costs an hour to find two minutes, and it costs that hour again the next time someone asks about the timeline instead of the budget. Scrubbing the waveform is worse: you are guessing at where a topic sits from the shape of the sound.

So you transcribe it, and the problem moves rather than disappearing. Now you have forty thousand tokens of text and the same question, and the obvious move is to hand the whole transcript to the model and ask. That works once, expensively, and then the transcript is in the context for the rest of the conversation, quietly making every later answer worse.

## Why it fails locally

An audio file cannot be searched. There is no index in it, nothing that maps the word budget to a position, and no way to look inside without decoding the sound into words first. Every approach that starts with the audio has transcription as its first step, whether you planned it or not.

Once you have the text, the problem is a text problem and the audio was never the hard part. Locally that means holding the whole transcript somewhere and running your own search over it, which is easy, and then the two things that are not: mapping a character position back to a timestamp, and returning enough context around the hit to be worth reading. A one-sentence fragment that says `we can stretch to forty` tells you nothing about what was being stretched.

This is where the segment shape a raw engine returns hurts most. Its segments are roughly one sentence each, so a search lands you inside an argument with no argument around it. What you want is the surrounding turns of speech, with who was speaking and at what minute, and that is a structure you have to build before you store anything.

## The code

`find` returns excerpts with their timestamps, `time` returns that stretch as turns of speech. Both are free, however many times you call them.

```
listen(key="<key>")
  -> handle, status: running, estimated_minutes

result(handle="<handle>", find="budget")
  -> matches, each with its timestamp
  -> match_count, matches_omitted

result(handle="<handle>", time="9:30-11:00")
  -> turns, duration

result(handle="<handle>", time="1:02:00")
  -> the window around that point

result(handle="<handle>", outline=true)
  -> who spoke, and when
```

## What it costs

You pay once, when the audio is transcribed: 0.005 EUR per minute in `balanced` mode, so an hour-long meeting is about 0.30 EUR. `exact` costs 0.008 EUR per minute.

**Every later question about that recording is free.** `find`, `time`, `outline` and paging through with `offset` are not charged, now or in a week: the work was paid for when it ran, and querying it is reading, not redoing. Searching the same meeting thirty times costs the same as searching it once.

It is also cheap in the other currency. Pulling the two minutes you asked for puts a few hundred tokens in your context instead of the forty thousand the whole hour would have cost, and the difference is not just money: the tokens you do not spend are the ones not degrading every answer after this one.

## What this does not do

- `find` matches text, case-insensitive. It does not match meaning: a discussion about money that never says the word budget will not come back under that term.
- `time` works on transcripts and `pages` on documents. Asking for a time range on a document is an error, not an empty answer.
- A very common term returns the first matches and tells you how many it left out, in `matches_omitted`. Narrow the term rather than paging through all of them.
- Results do not live forever. Once a result has expired, asking again means transcribing again, and that is charged.
