Developers · curl

Get a meeting transcript with curl and jq

A curl program that fetches every line so far, with what it printed when it was run.

Ran on 10 November 2026Language curlJob Get the transcript

What it does

One request to the get_transcript tool, and jq turns the answer into one line per thing said: the time, who said it, and the words.

It needs a key and a meeting code in MEETFUL_KEY and MEETING. Two curl requests make both. MEETFUL_URL is optional and defaults to https://meetful.com.

curl and jq, which most machines already have.

The code

# Get the whole transcript of a Meetful meeting with curl: the get_transcript tool on the MCP endpoint.
BASE=${MEETFUL_URL:-https://meetful.com}

curl -s -X POST "$BASE/mcp" \
  -H "authorization: Bearer $MEETFUL_KEY" \
  -H 'content-type: application/json' \
  -d "{\"jsonrpc\":\"2.0\",\"id\":1,\"method\":\"tools/call\",\"params\":{\"name\":\"get_transcript\",\"arguments\":{\"meeting\":\"$MEETING\"}}}" \
  | jq -r '.result.content[0].text | fromjson | .transcript[] | "\(.at / 1000 | strftime("%H:%M:%S"))  \(.speaker): \(.text)"'

Run it

MEETFUL_KEY=tmk_… MEETING=abc-defg-hij bash transcript.sh

What it printed

14:17:25  Dana: Can we move the launch to the third of March?
14:17:26  Sam: Yes, if the docs are ready by the twentieth.
14:17:27  Dana: Then Sam owns the docs.
14:17:31  🤖 curl bot: Noted: the launch moves to the third of March.

Run on 10 November 2026 against a Meetful server built from the same code as meetful.com, with two people — Dana and Sam — in the meeting saying three lines. Nothing above was edited.

How it works

fromjson is the jq step that matters: the tool's answer is a JSON document carried inside a string, so jq reads the reply and then parses that string a second time.

strftime in jq takes seconds, which is why the time is divided by 1000. Drop the last jq step to see every field, including speakerId and lineId.

What can go wrong

That did not work: no meeting abc-defg-hij — it was never started, or it has ended

The MCP answer for a meeting that does not exist. It comes back as a result marked isError, not as an HTTP error, so check isError as well as the status.

jq: error (at <stdin>:0): null (null) only strings can be parsed

The answer was a JSON-RPC error — here, a key the server does not know — so there was no tool text to parse. Run without the jq step to read the error.

jq: error (at <stdin>:0): Invalid numeric literal at line 1, column 5 (while parsing 'That did not work: no meeting abc-defg-hij — it was never started, or it has ended')

The tool ran but said no: its text is a sentence, not JSON. Both errors are what this script printed on purpose-made mistakes.

Next

In curl: start a meeting · speak

The same in Node.js · Python · Go

The whole API · Every socket message and webhook · All guides

Try Meetful

Meetings that take their own notes

Free video meetings in the browser: every line of the transcript under the name of who said it, and the summary and action items when you hang up. Nothing to install — guests just open the link.