What a person types, what the assistant sends to the server, and what the server sends back. Every request and every answer below comes from a live run of the server on 24 October 2026. The script that made the run lives in the repository as apps/api/tools/mcp_examples_check.py; it prints the whole exchange as it goes, so any of it can be repeated.
Example 1 · transcribe_audio
“Transcribe this recording and tell me who spoke.”
The assistant calls
{"jsonrpc":"2.0","id":1,"method":"tools/call",
"params":{"name":"transcribe_audio","arguments":{
"audio_url":"https://transcrib.si/assets/demo/sample.mp3",
"filename":"sample.mp3",
"language":"en",
"diarize":true}}}
The answer is the text, split into timed segments
0.0 – 8.4
Speaker 1: Good morning. Let us go through the plan for the week.
8.4 – 16.2
Speaker 1: Maya, please finish the pricing page before Thursday.
16.2 – 24.9
Speaker 2: I will send the customer list to the sales team tomorrow.
24.9 – 33.5
Speaker 2: The main risk is the migration window, so we need a test run by Friday.
Those four segments are a real payload from the demo account — the same fields the tool returns, read back through GET /v1/transcripts/1. In the local check the call itself stopped at the provider with the message ASR отклонил ключ — проверьте POTOK_ASR_KEY: the engine key lives in the server environment and is not part of a local check. The other three answers below were produced by the local server from start to finish.
Example 2 · summarize_transcript
“Summarise my standup recording.”
The assistant calls
{"jsonrpc":"2.0","id":2,"method":"tools/call",
"params":{"name":"summarize_transcript",
"arguments":{"transcript_id":1}}}
The answer is a summary and the key points
Maya, please finish the pricing page before Thursday. I will send the customer list to the sales team tomorrow. The main risk is the migration window, so we need a test run by Friday.
- The main risk is the migration window, so we need a test run by Friday.
- Maya, please finish the pricing page before Thursday.
- I will send the customer list to the sales team tomorrow.
- Let us go through the plan for the week.
- Good morning.
The id is sent as a number, the way an assistant sends it; the server takes a number and a string equally. The same tool takes the transcript text itself when there is no id yet.
Example 3 · extract_actions
“What are the action items, who owns them and when are they due?”
The assistant sends the text it has
{"jsonrpc":"2.0","id":3,"method":"tools/call",
"params":{"name":"extract_actions","arguments":{
"text":"Standup, Monday. Maya should finish the pricing page by Thursday. The migration window is the main risk, so we need a test run by Friday. Igor needs to send the customer list to the sales team tomorrow. Please create the rollout checklist before the release."}}}
The answer is the list of tasks, with the owner and the date when they were said out loud
- Maya should finish the pricing page by Thursday. (owner: Maya) (due: by Thursday)
- Igor needs to send the customer list to the sales team tomorrow. (owner: Igor) (due: tomorrow)
- Please create the rollout checklist before the release.
The third task has no owner and no date because nobody said them out loud: the tool reports what the text contains and does not invent the rest. It works the same way on a transcript_id — the owner and the date are only there when the recording contains them.
Example 4 · list_transcripts
“What recordings do I have?”
The assistant calls
{"jsonrpc":"2.0","id":4,"method":"tools/call",
"params":{"name":"list_transcripts",
"arguments":{"limit":5}}}
The answer is the list of the account, and nothing else
- demo-interview-ru.mp3 (done, 36.7s)
- demo-standup.mp3 (done, 33.5s)
The token is bound to one account, and this is everything it can see. The same answer in structuredContent carries the id, the status and the duration of every recording.