Read-only · get_transcript
Read one bounded page of a meeting transcript by meeting id (from list_meetings or search).
Inputs
| Name | Type | Required | Description |
|---|---|---|---|
id | string | Yes | Meeting UUID, exact MTLY-N reference, or legacy MTLY-platform-UUIDprefix code. |
cursor | string or number | No | Omit or pass 0 for the first page. Later pages take the previous nextCursor string unchanged, for the same meeting; character offsets, page numbers, timestamps and edited cursors are rejected. nextCursor is null on the final page. A cursor is bound to one transcript revision and one set of speaker names; if either changes, the call fails with TRANSCRIPT_REVISION_CHANGED and the meeting is read again from the first page. |
maxChars | number | No | Characters to return per page; defaults to 12,000 and is capped at 20,000. A page may hold fewer characters so its serialized response stays within the 64 KiB limit. Minimum: 1. Maximum: 20000. |
segments | boolean | No | Accepted for compatibility; ignored. Every page includes its segments with timing and canonical speaker objects, so page size is measured on the serialized response (text plus segments). |
require_speakers_complete | boolean | No | When true, the call succeeds only if every segment is self or user-named. Default false returns the transcript with partial or anonymous attribution preserved. Default: false. |
What you get
transcriptText- The text on this transcript page.
segments- Transcript passages with speaker labels and timestamps.Includes: speaker.
title- The meeting title.
id- The meeting identifier.
nextCursor- Where to continue reading; null means there are no more pages.
dateIso- The meeting date and time.
More response fields
cursor- The position of this page in the results.
totalChars- The length of the full transcript, in characters.
truncated- Whether more transcript text remains to be read.
metadata- Additional details about the meeting.
speakerResolution- Whole-meeting speaker identity, identical on every page of one revision. status: complete (every segment self or user-named), partial (some identified), unknown (none identified), processing (native speaker processing pending). Text is returned regardless of attribution status.Includes: status, speakerRevision, namesRevision, namesSource, nativeSpeakerStatus, segmentsTotal, segmentsNamed, segmentsSelf, segmentsAnonymous, segmentsUnknown, speakers.
openUrl- Optional user-facing HTTPS link for this meeting (https://www.getmeetly.ai/open/meeting/<uuid>). Opens the exact meeting where the installed Meetly app supports meeting links, otherwise a Meetly page with Open in Meetly and App Store actions. The meeting is identified by its title and meetingReference (MTLY-N).
sourceUrl- MCP evidence resource for citation provenance (https://mcp.getmeetly.ai/mcp/sources/meetings/<uuid>). Not a meeting-opening link and not a substitute for openUrl.
appDeepLink- Native link (meetly://meeting/<uuid>) for native clients that hand off to the app directly; openUrl is the cross-platform link.
Example
Replace meeting-id-from-list with a meeting ID returned by list_meetings. This is a placeholder, not a real meeting.
Call get_transcript with:
{
"id": "meeting-id-from-list",
"maxChars": 12000,
"segments": true
}Illustrative input, checked against this catalog at build time.
Full description from the catalog
Read one bounded page of a meeting transcript by meeting id (from list_meetings or search). Pages are chained with the returned nextCursor for the same meeting; a null nextCursor marks the final page. Each segment has speaker {localId, displayName, role self|participant|anonymous|unknown, attribution, nameVerified}; speakerResolution.speakers adds nameSource and confidence per localId, and speakerResolution.status is complete, partial, unknown or processing (partial resolution still returns all text). Speaker identity comes from, in order: a manual tag in Meetly, a verified self or user mapping, an anonymous cluster, then unknown; get_summary names are not used for transcript identities. Also returns openUrl, appDeepLink and sourceUrl. Error TRANSCRIPT_REVISION_CHANGED indicates the transcript changed since the cursor was issued; RATE_LIMITED includes retryAfterMs.
Input schema
{
"type": "object",
"additionalProperties": false,
"properties": {
"id": {
"type": "string",
"description": "Meeting UUID, exact MTLY-N reference, or legacy MTLY-platform-UUIDprefix code."
},
"cursor": {
"type": [
"string",
"number"
],
"description": "Omit or pass 0 for the first page. Later pages take the previous nextCursor string unchanged, for the same meeting; character offsets, page numbers, timestamps and edited cursors are rejected. nextCursor is null on the final page. A cursor is bound to one transcript revision and one set of speaker names; if either changes, the call fails with TRANSCRIPT_REVISION_CHANGED and the meeting is read again from the first page."
},
"maxChars": {
"type": "number",
"minimum": 1,
"maximum": 20000,
"description": "Characters to return per page; defaults to 12,000 and is capped at 20,000. A page may hold fewer characters so its serialized response stays within the 64 KiB limit."
},
"segments": {
"type": "boolean",
"description": "Accepted for compatibility; ignored. Every page includes its segments with timing and canonical speaker objects, so page size is measured on the serialized response (text plus segments)."
},
"require_speakers_complete": {
"type": "boolean",
"default": false,
"description": "When true, the call succeeds only if every segment is self or user-named. Default false returns the transcript with partial or anonymous attribution preserved."
}
},
"required": [
"id"
]
}Output schema
{
"type": "object",
"additionalProperties": true,
"properties": {
"id": {
"type": "string"
},
"title": {
"type": "string"
},
"dateIso": {
"type": "string",
"format": "date-time"
},
"transcriptText": {
"type": "string"
},
"cursor": {
"type": [
"string",
"number"
]
},
"nextCursor": {
"type": [
"string",
"null"
],
"description": "Opaque cursor for the next page, or null on the final page."
},
"totalChars": {
"type": "number"
},
"truncated": {
"type": "boolean"
},
"metadata": {
"type": "object",
"description": "Scalar provenance. transcriptCoverage is 'partial' while nextCursor is non-null and 'complete' on the final page of a walk that started at the beginning; revision fields identify the transcript version.",
"additionalProperties": {
"type": [
"string",
"number",
"boolean",
"null"
]
}
},
"segments": {
"type": "array",
"description": "Page segments with stable id, timing, text, characterRange, partial flag and the canonical speaker object.",
"items": {
"type": "object",
"properties": {
"speaker": {
"type": "object",
"description": "Canonical speaker. Identity precedence: manual user tag in Meetly (attribution manual_tag, nameVerified true) > self or other verified Meetly mapping (role self) > anonymous cluster (localId only) > unknown. Names generated by get_summary are secondary and are not used as transcript identities. localId is stable within one meeting. displayName is set only from identities Meetly knows; nameVerified is true only for names the user assigned or confirmed in Meetly (manual tag, chosen contact) or the owner's own profile name. role self is the account owner by voice match or user correction. nameSource and confidence for each localId are in speakerResolution.speakers.",
"additionalProperties": false,
"properties": {
"localId": {
"type": [
"string",
"null"
]
},
"displayName": {
"type": [
"string",
"null"
]
},
"role": {
"enum": [
"self",
"participant",
"anonymous",
"unknown"
]
},
"attribution": {
"enum": [
"manual_tag",
"voice_match",
"user_corrected",
"calendar_match",
"anonymous_cluster",
"unverified"
]
},
"nameVerified": {
"type": "boolean"
}
},
"required": [
"localId",
"displayName",
"role",
"attribution",
"nameVerified"
]
}
}
}
},
"speakerResolution": {
"type": "object",
"description": "Whole-meeting speaker identity, identical on every page of one revision. status: complete (every segment self or user-named), partial (some identified), unknown (none identified), processing (native speaker processing pending). Text is returned regardless of attribution status.",
"additionalProperties": true,
"properties": {
"status": {
"enum": [
"complete",
"partial",
"unknown",
"processing"
]
},
"speakerRevision": {
"type": "number"
},
"namesRevision": {
"type": [
"number",
"null"
]
},
"namesSource": {
"enum": [
"canonical",
"native_sidecar",
"none",
"withheld",
"unavailable"
]
},
"nativeSpeakerStatus": {
"type": "string"
},
"segmentsTotal": {
"type": "number"
},
"segmentsNamed": {
"type": "number"
},
"segmentsSelf": {
"type": "number"
},
"segmentsAnonymous": {
"type": "number"
},
"segmentsUnknown": {
"type": "number"
},
"speakers": {
"type": "array",
"items": {
"type": "object",
"description": "Canonical speaker. Identity precedence: manual user tag in Meetly (attribution manual_tag, nameVerified true) > self or other verified Meetly mapping (role self) > anonymous cluster (localId only) > unknown. Names generated by get_summary are secondary and are not used as transcript identities. localId is stable within one meeting. displayName is set only from identities Meetly knows; nameVerified is true only for names the user assigned or confirmed in Meetly (manual tag, chosen contact) or the owner's own profile name. role self is the account owner by voice match or user correction.",
"additionalProperties": true,
"properties": {
"localId": {
"type": [
"string",
"null"
]
},
"displayName": {
"type": [
"string",
"null"
]
},
"role": {
"enum": [
"self",
"participant",
"anonymous",
"unknown"
]
},
"attribution": {
"enum": [
"manual_tag",
"voice_match",
"user_corrected",
"calendar_match",
"anonymous_cluster",
"unverified"
]
},
"nameSource": {
"enum": [
"user_tag",
"user_contact",
"owner_profile",
"calendar_auto",
"unverified_label",
null
]
},
"nameVerified": {
"type": "boolean"
},
"confidence": {
"type": [
"number",
"null"
]
},
"segments": {
"type": "number"
}
},
"required": [
"localId",
"displayName",
"role",
"attribution",
"nameSource",
"nameVerified",
"confidence"
]
}
}
},
"required": [
"status",
"speakerRevision",
"segmentsTotal"
]
},
"openUrl": {
"type": "string",
"format": "uri",
"description": "Optional user-facing HTTPS link for this meeting (https://www.getmeetly.ai/open/meeting/<uuid>). Opens the exact meeting where the installed Meetly app supports meeting links, otherwise a Meetly page with Open in Meetly and App Store actions. The meeting is identified by its title and meetingReference (MTLY-N)."
},
"sourceUrl": {
"type": "string",
"format": "uri",
"description": "MCP evidence resource for citation provenance (https://mcp.getmeetly.ai/mcp/sources/meetings/<uuid>). Not a meeting-opening link and not a substitute for openUrl."
},
"appDeepLink": {
"type": "string",
"description": "Native link (meetly://meeting/<uuid>) for native clients that hand off to the app directly; openUrl is the cross-platform link."
}
},
"required": [
"id",
"title",
"dateIso",
"transcriptText",
"cursor",
"nextCursor",
"totalChars",
"truncated"
]
}Full tool definition and annotations
{
"name": "get_transcript",
"title": "Read a Meetly transcript page",
"description": "Read one bounded page of a meeting transcript by meeting id (from list_meetings or search). Pages are chained with the returned nextCursor for the same meeting; a null nextCursor marks the final page. Each segment has speaker {localId, displayName, role self|participant|anonymous|unknown, attribution, nameVerified}; speakerResolution.speakers adds nameSource and confidence per localId, and speakerResolution.status is complete, partial, unknown or processing (partial resolution still returns all text). Speaker identity comes from, in order: a manual tag in Meetly, a verified self or user mapping, an anonymous cluster, then unknown; get_summary names are not used for transcript identities. Also returns openUrl, appDeepLink and sourceUrl. Error TRANSCRIPT_REVISION_CHANGED indicates the transcript changed since the cursor was issued; RATE_LIMITED includes retryAfterMs.",
"annotations": {
"readOnlyHint": true,
"destructiveHint": false,
"openWorldHint": false,
"idempotentHint": true,
"title": "Read a Meetly transcript page"
},
"securitySchemes": [
{
"type": "oauth2",
"scopes": [
"meetings:read"
]
}
],
"_meta": {
"securitySchemes": [
{
"type": "oauth2",
"scopes": [
"meetings:read"
]
}
],
"openai/toolInvocation/invoking": "Reading transcript…",
"openai/toolInvocation/invoked": "Transcript page ready"
},
"inputSchema": {
"type": "object",
"additionalProperties": false,
"properties": {
"id": {
"type": "string",
"description": "Meeting UUID, exact MTLY-N reference, or legacy MTLY-platform-UUIDprefix code."
},
"cursor": {
"type": [
"string",
"number"
],
"description": "Omit or pass 0 for the first page. Later pages take the previous nextCursor string unchanged, for the same meeting; character offsets, page numbers, timestamps and edited cursors are rejected. nextCursor is null on the final page. A cursor is bound to one transcript revision and one set of speaker names; if either changes, the call fails with TRANSCRIPT_REVISION_CHANGED and the meeting is read again from the first page."
},
"maxChars": {
"type": "number",
"minimum": 1,
"maximum": 20000,
"description": "Characters to return per page; defaults to 12,000 and is capped at 20,000. A page may hold fewer characters so its serialized response stays within the 64 KiB limit."
},
"segments": {
"type": "boolean",
"description": "Accepted for compatibility; ignored. Every page includes its segments with timing and canonical speaker objects, so page size is measured on the serialized response (text plus segments)."
},
"require_speakers_complete": {
"type": "boolean",
"default": false,
"description": "When true, the call succeeds only if every segment is self or user-named. Default false returns the transcript with partial or anonymous attribution preserved."
}
},
"required": [
"id"
]
},
"outputSchema": {
"type": "object",
"additionalProperties": true,
"properties": {
"id": {
"type": "string"
},
"title": {
"type": "string"
},
"dateIso": {
"type": "string",
"format": "date-time"
},
"transcriptText": {
"type": "string"
},
"cursor": {
"type": [
"string",
"number"
]
},
"nextCursor": {
"type": [
"string",
"null"
],
"description": "Opaque cursor for the next page, or null on the final page."
},
"totalChars": {
"type": "number"
},
"truncated": {
"type": "boolean"
},
"metadata": {
"type": "object",
"description": "Scalar provenance. transcriptCoverage is 'partial' while nextCursor is non-null and 'complete' on the final page of a walk that started at the beginning; revision fields identify the transcript version.",
"additionalProperties": {
"type": [
"string",
"number",
"boolean",
"null"
]
}
},
"segments": {
"type": "array",
"description": "Page segments with stable id, timing, text, characterRange, partial flag and the canonical speaker object.",
"items": {
"type": "object",
"properties": {
"speaker": {
"type": "object",
"description": "Canonical speaker. Identity precedence: manual user tag in Meetly (attribution manual_tag, nameVerified true) > self or other verified Meetly mapping (role self) > anonymous cluster (localId only) > unknown. Names generated by get_summary are secondary and are not used as transcript identities. localId is stable within one meeting. displayName is set only from identities Meetly knows; nameVerified is true only for names the user assigned or confirmed in Meetly (manual tag, chosen contact) or the owner's own profile name. role self is the account owner by voice match or user correction. nameSource and confidence for each localId are in speakerResolution.speakers.",
"additionalProperties": false,
"properties": {
"localId": {
"type": [
"string",
"null"
]
},
"displayName": {
"type": [
"string",
"null"
]
},
"role": {
"enum": [
"self",
"participant",
"anonymous",
"unknown"
]
},
"attribution": {
"enum": [
"manual_tag",
"voice_match",
"user_corrected",
"calendar_match",
"anonymous_cluster",
"unverified"
]
},
"nameVerified": {
"type": "boolean"
}
},
"required": [
"localId",
"displayName",
"role",
"attribution",
"nameVerified"
]
}
}
}
},
"speakerResolution": {
"type": "object",
"description": "Whole-meeting speaker identity, identical on every page of one revision. status: complete (every segment self or user-named), partial (some identified), unknown (none identified), processing (native speaker processing pending). Text is returned regardless of attribution status.",
"additionalProperties": true,
"properties": {
"status": {
"enum": [
"complete",
"partial",
"unknown",
"processing"
]
},
"speakerRevision": {
"type": "number"
},
"namesRevision": {
"type": [
"number",
"null"
]
},
"namesSource": {
"enum": [
"canonical",
"native_sidecar",
"none",
"withheld",
"unavailable"
]
},
"nativeSpeakerStatus": {
"type": "string"
},
"segmentsTotal": {
"type": "number"
},
"segmentsNamed": {
"type": "number"
},
"segmentsSelf": {
"type": "number"
},
"segmentsAnonymous": {
"type": "number"
},
"segmentsUnknown": {
"type": "number"
},
"speakers": {
"type": "array",
"items": {
"type": "object",
"description": "Canonical speaker. Identity precedence: manual user tag in Meetly (attribution manual_tag, nameVerified true) > self or other verified Meetly mapping (role self) > anonymous cluster (localId only) > unknown. Names generated by get_summary are secondary and are not used as transcript identities. localId is stable within one meeting. displayName is set only from identities Meetly knows; nameVerified is true only for names the user assigned or confirmed in Meetly (manual tag, chosen contact) or the owner's own profile name. role self is the account owner by voice match or user correction.",
"additionalProperties": true,
"properties": {
"localId": {
"type": [
"string",
"null"
]
},
"displayName": {
"type": [
"string",
"null"
]
},
"role": {
"enum": [
"self",
"participant",
"anonymous",
"unknown"
]
},
"attribution": {
"enum": [
"manual_tag",
"voice_match",
"user_corrected",
"calendar_match",
"anonymous_cluster",
"unverified"
]
},
"nameSource": {
"enum": [
"user_tag",
"user_contact",
"owner_profile",
"calendar_auto",
"unverified_label",
null
]
},
"nameVerified": {
"type": "boolean"
},
"confidence": {
"type": [
"number",
"null"
]
},
"segments": {
"type": "number"
}
},
"required": [
"localId",
"displayName",
"role",
"attribution",
"nameSource",
"nameVerified",
"confidence"
]
}
}
},
"required": [
"status",
"speakerRevision",
"segmentsTotal"
]
},
"openUrl": {
"type": "string",
"format": "uri",
"description": "Optional user-facing HTTPS link for this meeting (https://www.getmeetly.ai/open/meeting/<uuid>). Opens the exact meeting where the installed Meetly app supports meeting links, otherwise a Meetly page with Open in Meetly and App Store actions. The meeting is identified by its title and meetingReference (MTLY-N)."
},
"sourceUrl": {
"type": "string",
"format": "uri",
"description": "MCP evidence resource for citation provenance (https://mcp.getmeetly.ai/mcp/sources/meetings/<uuid>). Not a meeting-opening link and not a substitute for openUrl."
},
"appDeepLink": {
"type": "string",
"description": "Native link (meetly://meeting/<uuid>) for native clients that hand off to the app directly; openUrl is the cross-platform link."
}
},
"required": [
"id",
"title",
"dateIso",
"transcriptText",
"cursor",
"nextCursor",
"totalChars",
"truncated"
]
}
}Server 0.17.0 · Source commit 6cc62bc5b29fb3bf09648dc755c8f5a26ea54d18