create_space_note
ChatGPTSave a new plain text note on a space, where every member of the space and their agents can read it. Only a saved space can hold notes, and only a member who can add meetings to it can write one. Read the space with get_space first: if a note on the same subject exists, change it with update_space_note rather than adding a near-duplicate. Returns: id, title, text, updatedAt (ISO 8601).
delete_space_note
ChatGPTDelete a note from a space, for every member of the space. It cannot be undone. Only a member who can add meetings to the space can delete its notes. Returns: id of the deleted note.
expand_transcript_excerpt
ChatGPTRead the conversation immediately around an excerpt returned by get_transcript_excerpts — the question it answered, the reply it drew. Use it when an excerpt reads as one side of an exchange, or when a name or number in it looks garbled and the surrounding words would settle it. IMPORTANT: Takes the excerptId of an excerpt from a recent get_transcript_excerpts call. References stop working after about an hour; when one does, search again and expand one of the fresh excerpts. IMPORTANT: Returns a short fixed window around the excerpt. Expanding the same excerpt again returns the same window, so to read further use get_transcript_excerpts with a more specific question. IMPORTANT: Rate limited: transcript excerpts can be read for at most 100 different meetings per hour per user; meetings already read in the window don't count again. IMPORTANT: Requires a Tactiq Team plan. When the user cannot read this right now — because of their plan, their connection, their AI credits, or because the meeting is only shared as a preview — this returns an error saying why; relay it to the user as written. Returns: entries[] (each: text, speaker, startSeconds, endSeconds, isExcerpt) in speaking order, and url which opens the transcript at the excerpt.
generate_meeting_summary
ChatGPTCreate a meeting's detailed AI summary when get_meeting returned detailedSummary: { status: 'not_generated' }. Generation runs in the background and uses one of the user's AI credits. If the meeting already has a summary, it is returned as is and nothing is generated. IMPORTANT: Requires a Tactiq Team plan. When the user cannot read this right now — because of their plan, their connection, their AI credits, or because the meeting is only shared as a preview — this returns an error saying why; relay it to the user as written. Workflow: 1. generate_meeting_summary({ meetingId }) → status is generating with a jobId, or ready with content. 2. While generating, poll get_generation_status({ meetingId, jobId }) until status is ready. Returns: status (ready | generating), jobId when status is generating, content when status is ready, and url. Cite url when you relay the content — it lets the user open the meeting to verify what was said.
get_generation_status
ChatGPTCheck whether a previously triggered AI generation (typically a detailed summary started by generate_meeting_summary) has finished. Pass the meetingId and the jobId returned by generate_meeting_summary. Use this when generate_meeting_summary returned { status: 'generating', jobId }. Poll periodically (a few seconds between calls is appropriate) until status is ready or failed. IMPORTANT: Requires a Tactiq Team plan. When the user cannot read this right now — because of their plan, their connection, their AI credits, or because the meeting is only shared as a preview — this returns an error saying why; relay it to the user as written. Returns: status (ready | generating | failed), url, and content when status is ready. failed is terminal — generation will not produce content; do not keep polling. Re-call generate_meeting_summary to start a fresh attempt. Cite url when you relay the content — it lets the user open the meeting to verify what was said.
get_meeting
ChatGPTFetch a meeting's detailed AI-generated summary, plus the titles and ids of all other AI artifacts on it (action items, email drafts, CSVs, slide decks, and similar). Use this as the primary way to read meeting content. The detailed summary is the richest single view of a meeting — call this before reaching for individual artifacts. IMPORTANT: Never returns the full transcript. IMPORTANT: Never creates a summary. If the summary doesn't exist yet, detailedSummary is returned as { status: 'not_generated' } — call generate_meeting_summary to create it. IMPORTANT: Requires a Tactiq Team plan. When the user cannot read this right now — because of their plan, their connection, their AI credits, or because the meeting is only shared as a preview — this returns an error saying why; relay it to the user as written. Workflow: 1. get_meeting → read detailedSummary.content when status is ready. 2. If you need a specific artifact (e.g. action items), pass an id from otherArtifacts[] to get_meeting_artifact. 3. If the summary is not generated, call generate_meeting_summary({ meetingId }), then poll get_generation_status with the jobId it returns. 4. If spaces[] is not empty, pass a space id to get_space before acting on what you read — a space carries the outside resources its work is tracked in, and anything you write should match them. Returns: id, title, createdAt (ISO 8601), durationSeconds, attendees[], url, spaces[] (each: id, name, url, and the other fields list_spaces returns), detailedSummary ({ status: 'ready', content } or { status: 'not_generated' }), otherArtifacts[] (each: id, title, optional status). Cite url when you relay this content — it lets the user open the meeting to verify what was said.
get_meeting_artifact
ChatGPTFetch the full content of a specific AI-generated artifact on a meeting (summaries, action items, email drafts, slide decks, CSVs, and similar). Use this when get_meeting or list_meeting_artifacts has returned an artifact id you want to read, or when the detailed summary from get_meeting is insufficient and you need a specific artifact type (e.g. action items only). IMPORTANT: Never returns the full transcript. IMPORTANT: artifactId must come from list_meeting_artifacts or the otherArtifacts[] array inside get_meeting — do not guess or construct ids. IMPORTANT: Requires a Tactiq Team plan. When the user cannot read this right now — because of their plan, their connection, their AI credits, or because the meeting is only shared as a preview — this returns an error saying why; relay it to the user as written. Returns: id, title, optional contentType (e.g. summary, email_draft, csv, slide_deck), content (rendered text — markdown for summaries / slide decks, RFC 4180 CSV for tabular artifacts, plain-text email body for email drafts), url. Cite url when you relay this content — it lets the user open the meeting to verify what was said.
get_space
ChatGPTRead one space: what it is, how active it is, the outside resources its members have attached to it, and the notes they keep on it. Call this before working on a meeting that belongs to a space. linkedResources names places outside Tactiq that hold the context for this space's work — a Linear project, for example. Tactiq only stores the link; read each one with your own tools for that product before you answer, and before you create anything there. For a Linear project that means reading the project and its existing issues first, so what you write matches how that project is already run. Get a space id from list_spaces, or from the spaces a meeting names. A suggested space (a recurring meeting Tactiq grouped on its own) can be read here too, but nothing can be attached to one, so its linkedResources is always empty. notes lists plain text the space's members and their agents keep there. Read one in full with get_space_note before relying on it; add, change or remove one with create_space_note / update_space_note / delete_space_note when those tools are available. To read what is actually in the space, pass its id to search_meetings or list_recent_meetings — this tool returns no meetings. Returns { space, linkedResources, notes }. space: id, name, isSuggested, optional icon, optional meetingCount, optional lastMeetingAt (ISO 8601), url — cite url when you relay anything you read from this space. linkedResources: each title, provider, url. notes: each id, title, preview, updatedAt (ISO 8601).
get_space_note
ChatGPTRead the whole of one note kept on a space. Notes are plain text the space's members and their agents keep there — context for the space's work that no single meeting holds. Find them in the notes get_space returns. Returns: id, title, text, updatedAt (ISO 8601).
get_transcript
ChatGPTRead a meeting's full transcript, one page at a time, in speaking order with speaker names and timestamps. Prefer get_transcript_excerpts when you are looking for specific moments, quotes, or topics — it is faster and more precise. Use this pager only when you genuinely need the complete text (e.g. a full translation or rewrite). IMPORTANT: The transcript is returned in fixed pages. Start at page 1; totalPages tells you how many pages exist, and the same page number always returns the same content for a given meeting. IMPORTANT: Rate limited: full transcripts can be read for at most 10 different meetings per hour per user; meetings already read in the window don't count again. IMPORTANT: Requires a Tactiq Team plan. When the user cannot read this right now — because of their plan, their connection, their AI credits, or because the meeting is only shared as a preview — this returns an error saying why; relay it to the user as written. Returns: page, totalPages, totalChars (size of the whole transcript in characters), hasMore, entries[] (each: text, speaker, startSeconds, endSeconds), url. Cite url when you relay this content — it lets the user open the meeting to verify what was said.
get_transcript_excerpts
ChatGPTFind the verbatim transcript excerpts of a meeting that are relevant to a question — what exactly was said, by whom, and when. Prefer this over get_transcript whenever you are looking for specific moments, quotes, decisions, or topics; fetch the full transcript only when you genuinely need the entire text. IMPORTANT: Returns at most 10 short excerpts per call. Each excerpt is a single moment; when one reads as half of an exchange, pass its excerptId to expand_transcript_excerpt to see what was said around it. IMPORTANT: hasMore tells you whether relevant excerpts were left out — when it is true, call again with a more specific question rather than assuming this is everything. IMPORTANT: An empty excerpts list means nothing matched the question's wording — NOT that the topic is absent from the meeting. Transcripts contain speech-recognition errors and people rarely speak in the question's exact terms, so rephrase (synonyms, related terms, a broader topic) and try again before concluding something was never discussed. IMPORTANT: Rate limited: transcript excerpts can be read for at most 100 different meetings per hour per user; meetings already read in the window don't count again. IMPORTANT: Requires a Tactiq Team plan. When the user cannot read this right now — because of their plan, their connection, their AI credits, or because the meeting is only shared as a preview — this returns an error saying why; relay it to the user as written. Returns: excerpts[] (each: text, speaker, excerptId, startSeconds, endSeconds, url), ordered most relevant first; hasMore; and searchedWholeMeeting. An empty list means nothing matched this wording — rephrase and retry before concluding the topic is absent. Each url opens the transcript at that excerpt — link to it when you quote or reference the excerpt.
list_meeting_artifacts
ChatGPTList all AI-generated artifacts on a meeting — summaries, action items, email drafts, slide decks, CSVs, and similar. Returns titles and ids only, no content. Use this when you already have a meetingId and want to discover what artifacts exist before fetching one, or when get_meeting has already been called and you want a lightweight refresh of the artifact list without re-fetching the summary. Prefer get_meeting over this tool if you haven't fetched the meeting yet — get_meeting returns both the summary content AND the artifact list in one call. Use get_meeting_artifact with the returned ids to fetch actual artifact content. IMPORTANT: Requires a Tactiq Team plan. When the user cannot read this right now — because of their plan, their connection, their AI credits, or because the meeting is only shared as a preview — this returns an error saying why; relay it to the user as written. Returns { artifacts: [...], url }. Each artifact: id, title, optional status (ready or generating — generating means content is not yet available; poll get_generation_status). url opens the meeting in Tactiq — cite it when you relay anything from this meeting.
list_recent_meetings
ChatGPTList the user's most recent accessible meetings (owned + shared + team + space), sorted newest first. Returns meeting metadata only — never transcript content. Use this when the user wants to see recent meetings without specific search criteria (e.g. "show me my latest meetings", "what did I meet about this week"). Use search_meetings instead when the user names a topic, participant, or date range. Set spaceId to browse one space instead of everything — call list_spaces for the id first. Use search_meetings with the same spaceId when the user also names a topic. Returns { results: [...] }. Each result: id, title, createdAt (ISO 8601), durationSeconds, attendees[], url. Use the id to fetch full content via get_meeting or get_meeting_artifact.
list_spaces
ChatGPTList the spaces the user can reach, most recently met in first. A space is a named group of meetings — a project, a team, or a recurring meeting the user follows. Use this first whenever the user names a space ("what's been happening in Design Review?", "summarise the last month of the leadership space"). It gives you the id to pass to search_meetings or list_recent_meetings, which is how you read what is actually in one. Two kinds come back and both read the same way. A saved space is one the user made. A suggested space (isSuggested: true) is a recurring meeting Tactiq grouped on its own — the user has not saved it yet, so it cannot be shared or added to by hand, but its meetings are readable exactly like a saved space's. Don't describe a suggested space as though the user set it up. meetingCount and lastMeetingAt tell you which spaces are worth reading: prefer an active space over one nothing has been filed into for months, and say when a space is empty rather than reporting nothing found. A meeting can sit in a saved space and still belong to a suggested one, so don't add meetingCounts together or report the same meeting twice. Returns { spaces: [...], hasMore }. Each space: id, name, isSuggested, optional icon, optional meetingCount, optional lastMeetingAt (ISO 8601), url. Cite url when you relay anything you read from a space. hasMore true means the user follows more recurring meetings than this list shows — say so rather than concluding a space doesn't exist.
search_meetings
ChatGPTSearch the user's own meetings by topic, participants, or date range. Returns meeting metadata only — never transcript content. Use this when the user references one of: - a topic or subject matter → set query (e.g. "find meetings about Netflix" → query: "Netflix") - a person who joined → set participants (e.g. "meetings with David" → participants: ["David"], query left empty) - a time window → set dateFrom / dateTo - a space → set spaceId (e.g. "what did Design Review say about pricing" → call list_spaces for the id, then spaceId + query: "pricing") These can be combined. Use list_recent_meetings instead if no search criteria are provided. IMPORTANT: Supply at least one of query / participants / dateFrom / dateTo / spaceId. IMPORTANT: Do NOT guess a spaceId — call list_spaces and use an id from it, or the search returns nothing. IMPORTANT: Do NOT put a participant's name in query just because the user mentioned them — that filters meetings by whether the literal name appears in the title/notes/AI outputs, which is almost never true and returns zero results. Use participants for people. IMPORTANT: Do NOT include the current authenticated user in participants — every result is already one of their meetings, so adding the caller will return zero results. participantsMatch modes: ANY (default) = at least one listed participant joined; ALL = every listed participant joined; NONE = none of them joined. Returns { results: [...] }. Each result: id, title, createdAt (ISO 8601), durationSeconds, attendees[], url, optional snippet (best matching highlight from the search). Use the id to fetch full content via get_meeting or get_meeting_artifact.
update_space_note
ChatGPTReplace a space note's title and text. This overwrites the whole note: read it with get_space_note first and send back everything that should stay, not just what changed. Only a member who can add meetings to the space can change its notes. Returns: id, title, text, updatedAt (ISO 8601).
expand_transcript_excerpt
Claudeget_generation_status
Claudeget_meeting
Claudeget_meeting_artifact
Claudeget_transcript
Claudeget_transcript_excerpts
Claudelist_meeting_artifacts
Claudelist_recent_meetings
Claudesearch_meetings
Claude