MCP App Store
by KeenEthics

Overview

Search, read, and summarise meeting transcripts and summaries from Google Meet, Zoom, and Microsoft Teams - directly from Claude. Meetings as context: ask what was decided, who you spoke with, or what’s come up across any call. Your entire meeting history, answerable.

Tools

create_space_note

ChatGPT
Save 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

ChatGPT
Delete 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

ChatGPT
Read 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

ChatGPT
Create 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

ChatGPT
Check 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

ChatGPT
Fetch 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

ChatGPT
Fetch 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

ChatGPT
Read 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

ChatGPT
Read 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

ChatGPT
Read 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

ChatGPT
Find 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

ChatGPT
List 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

ChatGPT
List 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

ChatGPT
List 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

ChatGPT
Search 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

ChatGPT
Replace 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

Claude

get_generation_status

Claude

get_meeting

Claude

get_meeting_artifact

Claude

get_transcript

Claude

get_transcript_excerpts

Claude

list_meeting_artifacts

Claude

list_recent_meetings

Claude

search_meetings

Claude

Similar Apps