Plaud MCP connector
OAuth 2.1/DCRTranscriptionProductivityMediaConnect to Plaud MCP. Browse your Plaud recordings, read AI-generated notes, and pull timestamped transcripts with speaker labels into your AI workflows.
Plaud MCP connector
-
Install the SDK
Section titled “Install the SDK”Terminal window npm install @scalekit-sdk/nodeTerminal window pip install scalekit -
Set your credentials
Section titled “Set 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> -
Authorize and make your first call
Section titled “Authorize and make your first call”quickstart.ts import { ScalekitClient } from '@scalekit-sdk/node'import 'dotenv/config'const scalekit = new ScalekitClient(process.env.SCALEKIT_ENV_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)process.stdout.write('Press Enter after authorizing...')await new Promise(r => process.stdin.once('data', r))// Make your first callconst result = await actions.executeTool({connector,identifier,toolName: 'plaudmcp_get_current_user',toolInput: {},})console.log(result)quickstart.py import osfrom scalekit.client import ScalekitClientfrom dotenv import load_dotenvload_dotenv()scalekit_client = ScalekitClient(env_url=os.getenv("SCALEKIT_ENV_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)
What you can do
Section titled “What you can do”Connect this agent connector to let your agent:
- 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 connected account — confirm which Plaud account the current tool calls run against
Common workflows
Section titled “Common 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)Tool list
Section titled “Tool list”Use the exact tool names from the Tool list below when you call execute_tool. If you’re not sure which name to use, list the tools available for the current user first.
plaudmcp_get_current_user#Get details of the currently authenticated Plaud account.0 params
Get details of the currently authenticated Plaud account.
plaudmcp_get_file#Get details of a specific Plaud recording by ID, including name, timestamps, duration, transcript segments, AI notes, and a temporary audio download URL.1 param
Get details of a specific Plaud recording by ID, including name, timestamps, duration, transcript segments, AI notes, and a temporary audio download URL.
file_idstringrequiredThe file ID of the recording to retrieve. Use list_files to look up IDs.plaudmcp_get_note#Fetch AI-generated notes for a Plaud recording - compact summary, action items, and key topics, returned as Markdown blocks.1 param
Fetch AI-generated notes for a Plaud recording - compact summary, action items, and key topics, returned as Markdown blocks.
file_idstringrequiredThe file ID of the recording to retrieve notes for. Use list_files to look up IDs.plaudmcp_get_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.4 params
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.
file_idstringrequiredThe file ID of the recording to retrieve the transcript for. Use list_files to look up IDs.blockstringoptionalWhich 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`.cursorstringoptionalOpaque pagination cursor from a previous call's `next_cursor`. Omit to start from the first utterance.limitintegeroptionalMaximum number of utterances to return in this page (default 50, max 500). Only applies to blocks returned as an utterance list.plaudmcp_list_files#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.5 params
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.
date_fromstringoptionalStart date, inclusive, in YYYY-MM-DD format. Interpreted in the server's timezone.date_tostringoptionalEnd date, inclusive, in YYYY-MM-DD format. Interpreted in the server's timezone.pageintegeroptionalPage number (ignored when filters are set). Defaults to 1.page_sizeintegeroptionalNumber of recordings to return per page (ignored when filters are set). Defaults to 20.querystringoptionalCase-insensitive substring match on the recording name.