Docs
Get API key
MCP server

Available tools

Every connection gets the read tools below, each wrapping an endpoint of the v1 REST API and scoped to the connected workspace. List conversations or notes, then open the item you want. Notes are private to the connected user, including when that user is a workspace administrator. Connections granted write access also get the write tools.

list-conversations GET /api/v1/conversations

List conversations (transcribed meetings and notebooks), newest first. Returns metadata, a one-line digest and the source list, not the AI summary or transcript content. Use get-conversation to read content.

limit number Max items, 1–100. Defaults to 25.
cursor string Pagination cursor from a previous response.
q string Case-insensitive match on the title. For what was said, use search-conversations.
folder_id string Restrict to a single folder.
tag_id string Restrict to conversations carrying this tag.
recursive boolean Include sub-folders. Defaults to true. With folder_id omitted, false lists only top-level folders.
status enum ready, pending, error, or all. Defaults to ready.
created_after string ISO 8601 timestamp lower bound.
created_before string ISO 8601 timestamp upper bound.
updated_after string Only conversations renamed, moved or re-analysed after this ISO 8601 timestamp (tag changes do not count). Useful for sync-style polling.
created_by_me boolean Only conversations the current user created.
include_summary boolean Also return each conversation's AI summary. Caps limit at 25.
include_attendees boolean Also return the calendar attendee emails of each conversation. Caps limit at 25.
get-conversation GET /api/v1/conversations/{id}

Retrieve one conversation in full: its AI summary, structured key points per topic, linked todos, tags, related conversations (other recordings of the same recurring meeting, plus links the user accepted), and every source the user can view. Each source carries its text when it could be extracted (transcripts as speaker turns, documents as markdown) and participants when known. Also opens analysis reports found by search-conversations.

id required string Conversation id, from list-conversations.
include_content boolean false omits source text. Defaults to true.
from_seconds number Only transcript turns ending at or after this offset.
to_seconds number Only transcript turns starting at or before this offset.
get-document GET /api/v1/documents/{id}

Retrieve a document created in Klang, by a user or by the AI, as markdown. Opens document hits from search-conversations and document sources seen on a conversation.

id required string Document id, from search-conversations or a conversation source.
list-folders GET /api/v1/folders

List folders the current user can see. Folder ids can be passed as the folder_id filter on list-conversations.

limit number Max items, 1–100.
cursor string Pagination cursor from a previous response.
folder_id string Restrict to a single parent folder.
recursive boolean Include sub-folders.
get-folder GET /api/v1/folders/{id}

Retrieve one folder: name, parent, description and whether it is shared with the whole workspace. Labels a folder_id seen on a conversation without paging list-folders.

id required string Folder id.
list-tags GET /api/v1/tags

The workspace's tags with ids, colors and how many conversations each is applied to. Pass a tag id as tag_id to list-conversations.

No parameters.

list-todos GET /api/v1/todos

The current user's todos, newest first. Defaults to open todos.

limit number Max items, 1–100. Defaults to 25.
cursor string Pagination cursor from a previous response.
status enum open, done, dismissed or all. Defaults to open.
due_before string Only todos due before this ISO 8601 date.
due_after string Only todos due on or after this ISO 8601 date.
conversation_id string Only the user's todos from this conversation.
search-conversations GET /api/search/global

Full-text search across transcripts, conversation summaries, documents and files. Transcript hits carry the offset in seconds where the text was said. The query supports "exact phrases", @name (speaker), @domain.com or person@domain.com (attendee) and >2026-01-01 / <2026-02-01 date bounds. Analysis hits open with get-conversation, document hits with get-document. Returns enabled=false when content search is off for the workspace.

q required string Search text and operators, up to 1,000 characters.
types enum[] transcript, conversation, document, file. Defaults to all.
folder_id string Restrict to this folder and its sub-folders.
tag_id string Restrict to conversations carrying this tag.
created_after string Only content created on or after this date (YYYY-MM-DD).
created_before string Only content created before this date (YYYY-MM-DD).
limit number Max results, 1–100. Defaults to every verified hit.
get-recording-url POST /api/hls-token

Time-limited links (1 hour) to a conversation's recording as HLS playlists: audio, and video when there is one. They play in any HLS-capable player and can be saved with ffmpeg. Pro or Enterprise plan; at most 30 links per day per user.

conversation_id required string Conversation id.
list-calendar-events GET /api/user/calendar-sync/upcoming-meetings

The next 7 days of events from the user's connected calendar, with meeting link, attendees and will_join (whether the Klang recorder is set to join). Events that already have a recording carry its conversation id and status.

No parameters.

list-schedules GET /api/notebook-schedules

The user's scheduled analyses with cadence, sources, destinations, last/next run and the analyses each has produced. Needs a Pro or Enterprise plan; on other plans the tool returns a plan_upgrade_required error with an upgrade link.

No parameters.

get-schedule GET /api/notebook-schedules/{id}

One scheduled analysis with its prompt, source and target folders and every produced analysis.

id required string Schedule id.
list-automations GET /api/automations

The user's automations with destination, status, conditions and latest run.

No parameters.

get-automation GET /api/automations/{id}

One automation with its full configuration and latest run.

id required string Automation id.
list-automation-runs GET /api/automations/{id}/runs

Runs of one automation, newest first, with status, conversation, delivered url (when the destination has one) and error code.

id required string Automation id.
limit number 1–100, default 10.
offset number Pagination offset.
failed_only boolean Only failed or terminated runs.
list-automation-destinations GET /api/automations/destinations

Where automations and scheduled analyses can deliver: only the listed slugs are usable in the workspace. Each entry says whether its integration is connected and gives a config_example for destination_config. Creating with an unconnected destination returns a connect_url the user can open to connect it.

No parameters.

get-me GET /api/v1/me

Return the user (id, email, name, language, workspace role) and workspace (id, name, plan) the connection is bound to. Useful for confirming the account and whether plan-gated tools apply.

No parameters.

list-members GET /api/v1/members

Active members of the workspace with id, email, name and role. Resolves a person's name to an email for attendee search or to an id for todo assignees. Pass q with part of the email (which usually contains the name) rather than paging everyone.

q string Case-insensitive match on the email address.
limit number Max items, 1–25. Defaults to 25.
cursor string Pagination cursor from a previous response.
list-notes GET /api/v1/notes

List your private dictated or typed notes, newest first, with titles and previews. The same notes are available in Klang web and desktop.

limit number Page size, 1–100. Defaults to 25.
cursor string next_cursor from a previous response.
search-notes GET /api/v1/notes/search

Search your note titles, original text and AI-transformed text. Results contain verified snippets labeled original or transformed. Search can lag recent saves and returns enabled=false when workspace content search is disabled.

q required string Search text, up to 1,000 characters. Supports quoted phrases and date filters.
get-note GET /api/v1/notes/{id}

Read a private note by stable ID. Returns the original and current AI result separately, with revision metadata and transformation_stale when the original has changed.

id required string Note UUID from list-notes or search-notes.

Write tools

Only present when the connection has write access: keep Create and edit access ticked on the OAuth consent screen, or when creating an API key (both are on by default). Existing connections stay read-only until reconnected. Every write runs under the connected user's own permissions, so a tool fails with a permission error wherever the user could not do the same thing in Klang. Tools for plan-gated features (scheduled analyses, automations, integrations) are always listed; on a plan without the feature they return a plan_upgrade_required error with an upgrade link so the assistant can explain what is possible.

update-todo

Change a todo's title, details or due date, or set its status to done, dismissed or open.

id required string Todo id from list-todos.
title string New title.
details string New details.
due_date string ISO 8601 date, or null to clear.
status enum open, done or dismissed.
assignee_id string Reassign to this member (id from list-members).
delete-todo

Permanently delete a todo.

id required string Todo id from list-todos.
create-todos

Create one or more todos (up to 50) for the connected user, optionally linked to a conversation. Entries are created independently; the response lists created todos and failed entries.

todos required object[] Entries with title, details, due_date, conversation_id and assignee_id (defaults to the connected user).
update-conversation

Rename a conversation and/or move it to another folder. Needs edit access to the conversation and both folders.

id required string Conversation id.
title string New title.
folder_id string Destination folder id from list-folders.
tag-conversation

Add and/or remove workspace tags on a conversation. Returns the tags applied afterwards.

id required string Conversation id.
add_tag_ids string[] Tag ids to apply.
remove_tag_ids string[] Tag ids to remove.
create-tag

Create a workspace tag. Workspace admins only.

name required string Tag name, unique in the workspace.
color string Hex color such as #3B82F6.
description string What the tag is for.
update-tag

Rename a tag or change its color or description. Workspace admins only.

id required string Tag id from list-tags.
name string New name.
color string Hex color.
description string New description.
create-folder

Create a folder inside an existing one, or a new top-level project folder when parent_folder_id is omitted. Top-level folders are private to the connected user unless shared is true.

name required string Folder name.
parent_folder_id string Parent folder id from list-folders.
description string Folder description.
shared boolean Top-level folders only. true lets everyone in the workspace edit it. Defaults to false.
update-folder

Rename a folder, change its description, move it under another folder, or change whether the whole workspace can edit it (top-level folders only, needs folder admin). Only passed fields change. A folder cannot be moved to the top level; create a new top-level folder and move its conversations there instead.

id required string Folder id from list-folders.
name string New name.
description string New description.
parent_folder_id string Move under this folder.
shared boolean true lets everyone in the workspace edit it; false restricts it to members.
delete-folder

Delete a folder that contains no conversations, documents, files or subfolders. System folders and folders with content are refused.

id required string Folder id from list-folders.
upload-recording

Create a conversation from an audio/video file Klang fetches itself: a public https link (presigned S3, Dropbox or Drive direct download, cloud-recording link) or a YouTube URL. Returns the conversation id with status pending; poll get-conversation until it is ready.

url required string Direct https link to the media file, or a YouTube URL.
name string Conversation title. Required unless the url is a YouTube link.
folder_id string Destination folder. Defaults to your personal folder.
language string Spoken language as ISO 639-3 (swe, eng, …). Defaults to auto-detect.
create-upload

Prepare an upload of a local audio/video file. Returns a single-use URL, valid for 15 minutes, that accepts one multipart/form-data POST with the file in a field named file, plus a ready curl command. The POST responds with the new conversation id.

name required string Conversation title.
folder_id string Destination folder. Defaults to your personal folder.
language string Spoken language as ISO 639-3. Defaults to auto-detect.
create-meeting-bot POST /api/v1/bots

Send the Klang recorder bot to a Google Meet, Microsoft Teams or Zoom meeting and create the conversation it records into.

meeting_url required string Meeting link.
name required string Conversation title.
folder_id string Destination folder.
language string Spoken language as ISO 639-3. Defaults to auto-detect.
create-schedule POST /api/notebook-schedules

Create a scheduled analysis that runs a prompt over new conversations in the given folders and/or tags and delivers the result. Pro or Enterprise plan.

name required string Schedule name.
prompt required string What the analysis should produce.
frequency enum manual, daily, weekdays or weekly. Defaults to daily.
time string Local time HH:MM. Defaults to 09:00.
weekday number For weekly: 0 (Sunday) to 6. Defaults to 1.
timezone string IANA timezone. Defaults to Europe/Stockholm.
source_folder_ids string[] Folders to draw conversations from (recursive).
source_tag_ids string[] Tags to draw conversations from.
target_folder_id string Where produced analyses go. Defaults to the personal folder.
destinations object[] [{ slug, config }] deliveries; see list-automation-destinations.
update-schedule PUT /api/notebook-schedules/{id}

Change any field of a scheduled analysis or pause/resume it with status. Only passed fields change; takes the same fields as create-schedule.

id required string Schedule id.
status enum active or paused.
delete-schedule DELETE /api/notebook-schedules/{id}

Delete a scheduled analysis. Produced analyses are kept.

id required string Schedule id.
run-schedule POST /api/notebook-schedules/{id}/run

Start a run now, optionally over a specific period. Returns immediately; poll get-schedule.

id required string Schedule id.
start_date string ISO 8601 start of the period.
end_date string ISO 8601 end, default now.
create-automation POST /api/automations

Create an automation that delivers a report for every new conversation matching the conditions. The response includes which recent conversations the conditions match. If the destination needs an integration that is not connected, the error carries a connect_url the user can open. Pro or Enterprise plan.

destination required string Destination slug.
destination_config object Per-destination config; see list-automation-destinations.
content object parts (summary, details, todos, custom), instruction, include_transcript.
conditions object operator plus rules; no rules matches every conversation.
scope enum user (default) or workspace.
name string Defaults to the destination name.
update-automation PATCH /api/automations/{id}

Change name, destination_config, content, conditions or scope, or set status to active, paused or disabled. Same fields as create-automation; the destination cannot change. Returns the recent matches when conditions or scope change.

id required string Automation id.
status enum active, paused or disabled.
delete-automation DELETE /api/automations/{id}

Delete an automation and its run history.

id required string Automation id.
test-automation POST /api/automations/{id}/test

Run an automation once on a specific conversation, ignoring its conditions, and deliver for real. Returns the delivered report text and link. Limited to 10 per hour; test runs show in list-automation-runs but not as latest_run.

id required string Automation id.
conversation_id required string Conversation to run it on.
set-bot-attendance POST /api/user/calendar-sync/toggle-meeting

Turn the Klang recorder on or off for an upcoming calendar event from list-calendar-events. Idempotent: setting the state it already has is a no-op.

calendar_event_id required string Event id from list-calendar-events.
enabled required boolean true = the recorder will join.
whole_series boolean Apply to every occurrence of a recurring meeting. Defaults to this occurrence only.