The Plaud MCP connector routes your AI agent's tool calls to Plaud's own MCP server through Scalekit. Each user signs in to Plaud once, and Scalekit stores and refreshes their tokens, so your agent never handles credentials. It comes with 5 tools.
- Tools
- 5
- What they doRead · write · destructive
- 5 · 0 · 05 read0 write0 destructive
- Users sign in with
- OAuth
- OAuth app
- Your own Plaud MCP server app
What you can do
- List recordings: browse Plaud recordings, narrowed by a name substring and an inclusive
date_from/date_torange - Get recording details: read a recording’s name, timestamps, duration, transcript segments, AI notes, and temporary audio download URL
- Read timestamped transcripts: fetch raw or AI-cleaned transcripts with speaker attribution, one cursor-paginated page of utterances at a time
- Read AI-generated notes: retrieve the summary, action items, and key topics for a recording as Markdown blocks
- Identify the Plaud account: confirm which Plaud account the current tool calls run against
Setup
Install the SDK
Terminal window npm install @scalekit-sdk/node dotenvTerminal window pip install scalekit-sdk-python python-dotenvSet your credentials
Add your Scalekit credentials to your
.envfile. Find values in app.scalekit.com > Developers > API Credentials..env SCALEKIT_ENVIRONMENT_URL=<your-environment-url>SCALEKIT_CLIENT_ID=<your-client-id>SCALEKIT_CLIENT_SECRET=<your-client-secret>Create the Plaud MCP connection
In AgentKit > Connections, create a Plaud MCP connection and copy its redirect URI. The name you give it is the
connection_nameyour code passes. See Configure connections.Register an OAuth app
Plaud MCP server connections use your own OAuth app. Register one with Plaud MCP server and add the redirect URI you copied.
Then enter the app's Client ID and Client Secret on the Plaud MCP connection.
Authorize a user and make your first call
quickstart.mts import { ScalekitClient } from '@scalekit-sdk/node'import 'dotenv/config'import { createInterface } from 'node:readline/promises'const scalekit = new ScalekitClient(process.env.SCALEKIT_ENVIRONMENT_URL,process.env.SCALEKIT_CLIENT_ID,process.env.SCALEKIT_CLIENT_SECRET,)const actions = scalekit.actionsconst connector = 'plaudmcp'const identifier = 'user_123'// Generate an authorization link for the userconst { link } = await actions.getAuthorizationLink({ connectionName: connector, identifier })console.log('Authorize Plaud MCP:', link)const rl = createInterface({ input: process.stdin, output: process.stdout })await rl.question('Press Enter after authorizing...')rl.close()// Make your first callconst result = await actions.executeTool({connector,identifier,toolName: 'plaudmcp_get_current_user',toolInput: {},})console.log(result)Terminal window npx tsx quickstart.mtsquickstart.py import osfrom scalekit import ScalekitClientfrom dotenv import load_dotenvload_dotenv()scalekit_client = ScalekitClient(env_url=os.getenv("SCALEKIT_ENVIRONMENT_URL"),client_id=os.getenv("SCALEKIT_CLIENT_ID"),client_secret=os.getenv("SCALEKIT_CLIENT_SECRET"),)actions = scalekit_client.actionsconnection_name = "plaudmcp"identifier = "user_123"# Generate an authorization link for the userlink_response = actions.get_authorization_link(connection_name=connection_name,identifier=identifier,)print("Authorize Plaud MCP:", link_response.link)input("Press Enter after authorizing...")# Make your first callresult = actions.execute_tool(tool_input={},tool_name="plaudmcp_get_current_user",connection_name=connection_name,identifier=identifier,)print(result)Terminal window python quickstart.pyEach user signs in once. See Authorize a user for the full flow and statuses.
Tools
Pass the exact name toexecute_toolplaudmcp_get_current_userGet details of the currently authenticated Plaud account.Read-onlyGet current user
Get details of the currently authenticated Plaud account.
Inputs
This tool takes no inputs.
plaudmcp_get_fileGet details of a specific Plaud recording by ID, including name, timestamps, duration, transcript segments, AI notes, and a temporary audio download URL.Read-onlyGet recording details
Get details of a specific Plaud recording by ID, including name, timestamps, duration, transcript segments, AI notes, and a temporary audio download URL.
Inputs
file_idstringrequired- The file ID of the recording to retrieve. Use list_files to look up IDs.
plaudmcp_get_noteFetch AI-generated notes for a Plaud recording - compact summary, action items, and key topics, returned as Markdown blocks.Read-onlyGet recording notes
Fetch AI-generated notes for a Plaud recording - compact summary, action items, and key topics, returned as Markdown blocks.
Inputs
file_idstringrequired- The file ID of the recording to retrieve notes for. Use list_files to look up IDs.
plaudmcp_get_transcriptFetch the timestamped transcript with speaker attribution for a Plaud recording.Read-onlyGet recording transcript
Fetch the timestamped transcript with speaker attribution for a Plaud recording. Defaults to the `transaction` block (raw transcript with speaker names and timestamps), returned one page of utterances at a time - call again with the returned `next_cursor` to fetch the next page. Set `block` to `outline` or `transaction_polish` to fetch those blocks instead.
Inputs
file_idstringrequired- The file ID of the recording to retrieve the transcript for. Use list_files to look up IDs.
blockstring- Which source block to fetch: `transaction` (default; raw transcript with speaker and timestamps), `transaction_polish` (AI-cleaned transcript; same per-utterance shape, keeps speaker and timestamps), or `outline`.one of
transactionoutlinetransaction_polish cursorstring- Opaque pagination cursor from a previous call's `next_cursor`. Omit to start from the first utterance.
limitinteger- Maximum number of utterances to return in this page (default 50, max 500). Only applies to blocks returned as an utterance list.
plaudmcp_list_filesList Plaud recordings.Read-onlyList recordings
List Plaud recordings. Supports optional filtering: `query` (case-insensitive name substring), `date_from`/`date_to` (YYYY-MM-DD, inclusive). When any filter is set, paginates up to 5 pages x 100 recordings and returns all matches.
Inputs
date_fromstring- Start date, inclusive, in YYYY-MM-DD format. Interpreted in the server's timezone.
date_tostring- End date, inclusive, in YYYY-MM-DD format. Interpreted in the server's timezone.
pageinteger- Page number (ignored when filters are set). Defaults to 1.
page_sizeinteger- Number of recordings to return per page (ignored when filters are set). Defaults to 20.
querystring- Case-insensitive substring match on the recording name.
No tools match.
Workflows
plaudmcp_get_file, plaudmcp_get_note, and plaudmcp_get_transcript require a file ID — the identifier of a single recording. Start with plaudmcp_list_files to discover recordings, then pass a file_id to the details, notes, or transcript tools.
Find a recording, then read its notes
Filter the recording list by name substring or date range, take the file_id of a match, and fetch the AI-generated summary and action items.
// Step 1 — find the recording. `query` matches the name, case-insensitively.const listResult = await scalekit.actions.executeTool({ toolName: 'plaudmcp_list_files', identifier: 'user_123', connector: 'plaudmcp', toolInput: { query: 'weekly sync', date_from: '2026-01-01', date_to: '2026-01-31', },});
// Inspect the payload once to learn how Plaud names the recording list and// its file IDs, then read those fields directly in your own code.// Security: Log only in development; recording names may expose user data.console.log(listResult.data);
// Step 2 — read the AI notes for a recording you picked from that payload.const noteResult = await scalekit.actions.executeTool({ toolName: 'plaudmcp_get_note', identifier: 'user_123', connector: 'plaudmcp', toolInput: { file_id: '66f2b1c8e4b0a1d2c3e4f5a6' },});
// Security: AI notes summarize the recording. Log only in development, and// pass the notes to your agent rather than persisting them.console.log(noteResult.data);# Step 1 — find the recording. `query` matches the name, case-insensitively.list_response = actions.execute_tool( tool_name="plaudmcp_list_files", identifier="user_123", connection_name="plaudmcp", tool_input={ "query": "weekly sync", "date_from": "2026-01-01", "date_to": "2026-01-31", },)
# Inspect the payload once to learn how Plaud names the recording list and# its file IDs, then read those fields directly in your own code.# Security: Log only in development; recording names may expose user data.print(list_response.data)
# Step 2 — read the AI notes for a recording you picked from that payload.note_response = actions.execute_tool( tool_name="plaudmcp_get_note", identifier="user_123", connection_name="plaudmcp", tool_input={"file_id": "66f2b1c8e4b0a1d2c3e4f5a6"},)
# Security: AI notes summarize the recording. Log only in development, and# pass the notes to your agent rather than persisting them.print(note_response.data)Page through a long transcript
plaudmcp_get_transcript returns one page of utterances at a time and includes a next_cursor when more remain. Pass that cursor back on the next call, and stop when the response returns no cursor.
const pages = [];let cursor: string | undefined = undefined;
do { const result = await scalekit.actions.executeTool({ toolName: 'plaudmcp_get_transcript', identifier: 'user_123', connector: 'plaudmcp', toolInput: { file_id: '66f2b1c8e4b0a1d2c3e4f5a6', block: 'transaction', // raw transcript with speaker names and timestamps limit: 200, ...(cursor ? { cursor } : {}), }, });
pages.push(result.data); cursor = (result.data as { next_cursor?: string }).next_cursor;} while (cursor);
console.log(`Fetched ${pages.length} transcript page(s)`);pages = []cursor = None
while True: tool_input = { "file_id": "66f2b1c8e4b0a1d2c3e4f5a6", "block": "transaction", # raw transcript with speaker names and timestamps "limit": 200, } if cursor: tool_input["cursor"] = cursor
response = actions.execute_tool( tool_name="plaudmcp_get_transcript", identifier="user_123", connection_name="plaudmcp", tool_input=tool_input, )
pages.append(response.data) cursor = response.data.get("next_cursor") if not cursor: break
print(f"Fetched {len(pages)} transcript page(s)")Choose the right transcript block
plaudmcp_get_transcript reads one of three blocks. Pick the block that matches what the agent needs:
| Block | Returns | Use it when |
|---|---|---|
transaction | Raw utterances with speaker labels and timestamps. This is the default. | Exact wording matters — quoting, compliance review, or speaker attribution |
transaction_polish | The same per-utterance shape, cleaned up by AI. Keeps speaker and timestamps. | You want readable prose without filler words, but still need timestamps |
outline | A structured outline of the recording. | You need the shape of the conversation rather than its full text |
Get one recording’s metadata and audio
plaudmcp_get_file returns everything about a single recording in one call: name, timestamps, duration, transcript segments, AI notes, and a temporary audio download URL.
const result = await scalekit.actions.executeTool({ toolName: 'plaudmcp_get_file', identifier: 'user_123', connector: 'plaudmcp', toolInput: { file_id: '66f2b1c8e4b0a1d2c3e4f5a6' },});
// Security: Log only in development; recordings may contain sensitive content.console.log(result.data);response = actions.execute_tool( tool_name="plaudmcp_get_file", identifier="user_123", connection_name="plaudmcp", tool_input={"file_id": "66f2b1c8e4b0a1d2c3e4f5a6"},)
# Security: Log only in development; recordings may contain sensitive content.print(response.data)