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.
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 endedThe 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 /agentsThe 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.