Developers · Node.js

Get a meeting transcript in Node.js, with one fetch

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

Ran on 10 November 2026Language Node.jsJob Get the transcript

What it does

No socket needed: one POST to the MCP endpoint with the get_transcript tool returns every line so far, each with its speaker. It works during the meeting and after it.

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.

Node 22 or later. WebSocket and fetch are built into Node from version 22, so there is nothing to install.

The code

// Get the whole transcript of a Meetful meeting from Node: one HTTP request to the MCP endpoint.
// MEETFUL_KEY=tmk_… MEETING=abc-defg-hij node transcript.mjs
const base = process.env.MEETFUL_URL || 'https://meetful.com';

const res = await fetch(`${base}/mcp`, {
  method: 'POST',
  headers: { authorization: `Bearer ${process.env.MEETFUL_KEY}`, 'content-type': 'application/json' },
  body: JSON.stringify({
    jsonrpc: '2.0', id: 1, method: 'tools/call',
    params: { name: 'get_transcript', arguments: { meeting: process.env.MEETING } },
  }),
});
const { result, error } = await res.json();
if (error) throw new Error(error.message);
if (result.isError) throw new Error(result.content[0].text);

const t = JSON.parse(result.content[0].text);
console.log(`${t.lines} lines in ${t.meeting}`);
for (const line of t.transcript) {
  console.log(`${new Date(line.at).toISOString().slice(11, 19)}  ${line.speaker}: ${line.text}`);
}

Run it

MEETFUL_KEY=tmk_… MEETING=abc-defg-hij node transcript.mjs

What it printed

4 lines in iuq-qwbn-dtp
14:16:51  Dana: Can we move the launch to the third of March?
14:16:51  Sam: Yes, if the docs are ready by the twentieth.
14:16:52  Dana: Then Sam owns the docs.
14:17:00  🤖 node bot: Noted: the launch moves to the third of March, and Sam owns the docs.

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

MCP is JSON-RPC 2.0 over HTTP, so the request is an ordinary JSON body with method tools/call and the tool's name and arguments. The tool's answer is text inside result.content; for get_transcript that text is JSON, which is why the code parses twice.

The bot's own lines are in the transcript too — the last line below is what the speak guide said. Pass since (milliseconds) as an argument to get only lines after a moment.

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.

this key was replaced or switched off — sign in again, or make a new one at /agents

The MCP endpoint's answer to a key it does not know.

Next

In Node.js: join a meeting · live transcript · speak

The same in Python · Go · curl

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.