Skip to main content
Glama
meetstream-ai

MeetStream MCP Server

Official

MeetStream MCP Server

Give Claude - or any MCP-compatible client - direct access to the MeetStream meeting-bot API. The server authenticates to MeetStream with your API key and exposes the full bot lifecycle (create, record, transcribe, summarize, interact live, manage calendar auto-join) as 19 callable tools.

Two ways to run it:

  • Local (stdio) - the default, npx @meetstream/mcp. Your MCP client launches it as a subprocess; nothing to host.

  • Remote (Streamable HTTP) - https://mcp.meetstream.ai/mcp. A hosted, multi-tenant endpoint you can add by URL, no local install. Each request authenticates with its own API key via header (see Remote server below).

Local:   Claude/MCP client ──stdio (subprocess)──► @meetstream/mcp ──HTTPS + API key──► api.meetstream.ai
Remote:  Claude/MCP client ──HTTPS + your key───► mcp.meetstream.ai ──HTTPS + your key──► api.meetstream.ai

1. Get an API key

Create one at app.meetstream.ai/api-keys. This is the credential the server uses to authenticate every request - internally it sends Authorization: Token <your-key> on every call to https://api.meetstream.ai/api/v1. There's no OAuth flow, no login step, no separate MCP account: the API key is the authentication.

Related MCP server: Works With Agents MCP Server

2. Install & configure

The server reads the key from the MEETSTREAM_API_KEY environment variable - you set it once in your MCP client's config and every tool call uses it automatically.

Claude Code (CLI)

claude mcp add meetstream --env MEETSTREAM_API_KEY=ms_XXXX -- npx -y @meetstream/mcp

Claude Desktop

Edit claude_desktop_config.json (Settings → Developer → Edit Config):

{
  "mcpServers": {
    "meetstream": {
      "command": "npx",
      "args": ["-y", "@meetstream/mcp"],
      "env": { "MEETSTREAM_API_KEY": "ms_XXXX" }
    }
  }
}

Restart Claude Desktop after saving.

Cursor

Settings → Cursor Settings → MCP → Add new global MCP server, or edit ~/.cursor/mcp.json:

{
  "mcpServers": {
    "meetstream": {
      "command": "npx",
      "args": ["-y", "@meetstream/mcp"],
      "env": { "MEETSTREAM_API_KEY": "ms_XXXX" }
    }
  }
}

Windsurf

Settings (Cmd+,) → Cascade → MCP Servers → Add Server - same command/args/env as above, written to ~/.codeium/windsurf/mcp_config.json.

Any other MCP client

Point it at the stdio command npx -y @meetstream/mcp with MEETSTREAM_API_KEY set in the process environment. That's the entire integration surface - the server needs no other config.

Verify it's connected

Ask your client something like "list my meetstream bots" - if it returns data (or a clean empty list) instead of an error, auth is working. A misconfigured key surfaces as a tool error: "MEETSTREAM_API_KEY is not set..." or a 401 from the API.


Then just ask

"Join my standup at https://meet.google.com/abc-defg-hij, record it with Deepgram transcription, and give me the transcript when it's done."

"List my bots from today and give me the AI summary of the 3pm customer call."

"Send 'we'll follow up by email' into the meeting the bot is in, then show them our logo."

"Schedule a bot for tomorrow's board meeting on my calendar."


Full capability list - 19 tools

Bot lifecycle

Tool

What it does

create_bot

Sends (or schedules, via join_at) a bot to a Zoom / Google Meet / Microsoft Teams meeting. Configurable: transcription provider + language, callback_url for webhooks, video recording, per-participant audio/video streams, MIA conversational agent, custom attributes, retention window, idempotency key (safe retries - a repeat call returns the original bot, never a duplicate). Returns bot_id and transcript_id (when a provider is set).

list_bots

Lists every bot on the account (paginated).

get_bot_status

Current lifecycle status - one of Joining, InWaitingRoom, InMeeting, Recording, Leaving, Stopped, NotAllowed, Denied, Error, Done.

get_bot_detail

Full session metadata: platform, timings, status timeline, the canonical transcript_id, caption_file (for the meeting_captions provider), and the original request payload.

get_bot_summary

MeetStream's built-in AI meeting summary - no external LLM call needed.

remove_bot

Makes the bot leave an active meeting immediately. Recorded data is kept.

delete_bot_data

Permanently deletes a bot's audio, video, and transcripts. Requires confirm: true - only call this when the user has explicitly asked to delete data. Irreversible.

Transcription

Tool

What it does

get_transcript

Fetches a transcript by bot_id. Automatically resolves the transcript_id (it is never delivered in webhooks) via /detail/transcriptions. Set wait: true to poll until it's ready; raw: true for unprocessed provider output. Segments come back as { speaker, transcript, start_time, end_time }.

list_transcriptions

Lists every transcription run for a bot - provider, status, and presigned download URLs (valid 1h).

transcribe_audio

(Re-)transcribes a bot's recorded audio with a chosen provider - useful to retry with a different provider or language after the meeting.

Media & meeting data

Tool

What it does

get_media_urls

Presigned URLs for audio (1h), video (10min), audio_streams/video_streams (per-participant - needs separate_audio_streams/separate_video_streams at creation), or screenshots.

get_participants

Everyone detected in the meeting - display name, full name, status, stream ids.

get_chats

In-meeting chat messages captured during the call.

get_speaker_timeline

Who spoke and when, as a timeline of speaker segments.

Live meeting interaction

Tool

What it does

send_chat_message

Posts a chat message into the live meeting through the bot.

send_image

Displays an image or GIF as the bot's video frame. img_url must be publicly accessible (no base64).

Calendar

Tool

What it does

list_calendar_events

Upcoming events from a connected Google Calendar. (Connecting a calendar - POST /calendar/create_calendar with OAuth credentials - is a one-time setup usually done via the MeetStream CLI or dashboard.)

schedule_calendar_bot

Schedules (action: "schedule") or removes ("unschedule") a bot for a specific calendar event.

Reference

Tool

What it does

webhook_events_guide

Returns the live-verified webhook reference - envelope shape, the full event list, the two-layer bot.stopped/bot_status model, and streaming-provider caveats. Have your model call this before it writes any webhook handler code - the public docs page has known inaccuracies this tool corrects.


What makes this different from just reading the docs

Every tool description and the webhook_events_guide bake in live-verified ground truth, confirmed against real production bot runs, that the public API docs currently get wrong:

  • Webhook envelope key is event, not bot_event as the docs claim.

  • bot.stopped is two-layer: it fires exactly once, and bot_status (Stopped/NotAllowed/Denied/Error) tells you why - there's no separate bot.kicked/bot.denied event.

  • Streaming-only transcription providers (deepgram_streaming, assemblyai_streaming, meeting_captions) never fire transcription.processed or bot.done - their terminal event is audio.processed. A handler waiting on bot.done for a streaming bot will hang forever.

  • transcript_id is never in a webhook payload - get_transcript resolves it for you automatically instead of making the model guess.

  • Safe defaults everywhere: automatic_leave timeouts on every create_bot call, and recording_permission_denied_timeout floored at 60 (the API rejects lower values with a 400).

Configuration

Env var

Required

Purpose

MEETSTREAM_API_KEY

✅ yes (stdio mode)

Your API key - sent as Authorization: Token <key> on every request

MEETSTREAM_API_URL

optional

Override the base URL (default https://api.meetstream.ai/api/v1) - useful for testing against a staging environment


Remote server (Streamable HTTP)

https://mcp.meetstream.ai/mcp - a hosted, multi-tenant Streamable HTTP endpoint. No npx, no local Node, no per-machine install. Add it by URL:

{
  "mcpServers": {
    "meetstream": {
      "url": "https://mcp.meetstream.ai/mcp",
      "headers": { "Authorization": "Bearer ms_YOUR_API_KEY" }
    }
  }
}

How auth works here is different from stdio mode: this endpoint serves many different MeetStream accounts at once, so it holds no API key of its own. Every request must carry your key, either as Authorization: Bearer <key> or X-MeetStream-Api-Key: <key>. A request with no key gets a 401 with setup instructions instead of silently failing.

The server is stateless - every request is independent, there's no session to keep alive, and it scales horizontally with zero shared state between requests.

Self-hosting it yourself? The same code ships as a Docker image - see deploy/ for the full runbook (fresh isolated VM, nginx, Let's Encrypt, systemd) or just:

docker build -t meetstream-mcp .
docker run -p 8080:8080 meetstream-mcp   # POST http://localhost:8080/mcp

Troubleshooting

Symptom

Fix

Tool call returns "MEETSTREAM_API_KEY is not set"

Add MEETSTREAM_API_KEY to the env block in your MCP client config, then restart the client

Tool call returns a 401 error

Your key is invalid or revoked - generate a new one at app.meetstream.ai/api-keys

Client shows "meetstream" server failed to start

Run npx -y @meetstream/mcp directly in a terminal - errors will print to stderr

get_transcript returns ready: false

The meeting hasn't finished processing yet, or (for streaming providers) there is no post-call transcript - check get_bot_status first

Calendar tools return empty/errors

No calendar is connected yet - connect one via meetstream calendar connect in the CLI first

Remote server (mcp.meetstream.ai) returns 401

You didn't send Authorization: Bearer <key> (or X-MeetStream-Api-Key) on the request - the remote server has no key of its own

Development

npm install
npm test        # spawns the real stdio server and speaks JSON-RPC to it end-to-end

Prefer a terminal? See the MeetStream CLI. Docs: docs.meetstream.ai · API spec: openapi.json · Migrating from Recall.ai: @meetstream/migrate

MIT © MeetStream.ai

Telemetry

This server sends anonymous usage events (which tools are called, remote vs local) to help us improve MeetStream. It never sends your API key, meeting URLs, transcripts, or any content. Disable it any time:

export MEETSTREAM_TELEMETRY=0   # or the standard DO_NOT_TRACK=1

Available Tools

19 tools
create_botCreate a meeting botAInspect

Send a MeetStream bot to a Zoom / Google Meet / Microsoft Teams meeting (or schedule it with join_at). Returns bot_id and (when a transcription provider is set) transcript_id. Set callback_url to receive lifecycle webhooks.

ParametersJSON Schema
NameRequiredDescriptionDefault
join_atNoSchedule a future join, ISO 8601 e.g. 2026-07-02T15:00:00Z
bot_nameNoDisplay name in the meeting (default "MeetStream Bot")
languageNoLanguage in the provider's format (deepgram "en", assemblyai "en_us", sarvam "en-IN")
bot_messageNoChat message posted when the bot joins
callback_urlNoHTTPS webhook for lifecycle events (events arrive under the "event" key)
meeting_linkYesFull meeting URL (Zoom, Google Meet, or Teams)
record_videoNoRecord video too (default false = audio only)
bot_image_urlNoPUBLIC image URL for the bot avatar (raw base64 is rejected)
agent_config_idNoAttach a MIA conversational AI agent
idempotency_keyNoUUID for safe retries (a retry returns the original bot, HTTP 507, no double charge)
retention_hoursNoData retention window in hours (API default 24)
custom_attributesNoString key/values echoed back in every webhook
separate_audio_streamsNoCapture per-participant audio
separate_video_streamsNoCapture per-participant video
transcription_providerNoPost-call: deepgram (default choice), assemblyai, sarvam (Indic), meetstream, jigsawstack, meeting_captions (native). Real-time: deepgram_streaming, assemblyai_streaming. NOTE: streaming providers never fire transcription.processed/bot.done webhooks.
live_transcript_webhook_urlNoWebhook URL for live transcript chunks

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the burden. It discloses key behavioral aspects: the bot is sent to a meeting, returns bot_id and transcript_id (when transcription provider is set), and callback_url enables lifecycle webhooks. It doesn't mention cost implications (though idempotency_key hints at no double charge) or rate limits, but for a creation tool it provides sufficient transparency about the action and its outputs.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, front-loaded with the primary action and key return values. Every sentence carries information: the first states what the tool does and the scheduling option, the second explains return values and webhook setup. No fluff or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is complex with 16 parameters, but the schema covers all of them. The description provides the high-level purpose, return values, and webhook hint. It doesn't explain error cases or detailed post-creation behavior, but given the schema richness and the description's coverage, an agent has enough to invoke the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description text adds value beyond the schema by explaining the overall purpose and return values, but it does not elaborate on individual parameters (which are already well-documented in the schema). No extra meaning is needed beyond the schema, so a 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action: 'Send a MeetStream bot to a Zoom / Google Meet / Microsoft Teams meeting' and distinguishes it from sibling tools like get_bot_status, list_bots, and schedule_calendar_bot by focusing on creation/scheduling. It also mentions return values (bot_id, transcript_id) and callback_url usage, making the tool's purpose unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly indicates when to use this tool (to create/schedule a bot) and mentions the scheduling option via join_at. While it doesn't explicitly say 'use this instead of X', the sibling context (e.g., schedule_calendar_bot for calendar events, get_bot_status for status) implies its role. It also highlights the callback_url for lifecycle webhooks, which guides integration decisions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_bot_dataDelete bot data (permanent)A
Destructive
Inspect

PERMANENTLY delete a bot's audio, video, and transcripts. Irreversible — fires a data_deletion webhook. Only call when the user explicitly asks to delete data.

ParametersJSON Schema
NameRequiredDescriptionDefault
bot_idYes
confirmYesMust be true — confirms the user explicitly asked for permanent deletion

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the destructiveHint annotation, the description discloses that deletion is permanent and irreversible, that it fires a data_deletion webhook, and that it requires explicit user consent. This gives an agent meaningful behavioral context for a destructive operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences carry all essential information: the action, the scope, the irreversibility, the webhook side effect, and the invocation condition. There is no filler or repetition beyond the acceptable emphasis on permanence.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple destructive tool with two required parameters and no output schema, this description is complete. An agent knows what will be deleted, that it is permanent, that a webhook fires, and that explicit user consent is required, so it can decide whether and how to invoke the tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 50%; the confirm parameter is already well documented in the schema. The description reinforces the consent requirement and clarifies what data is affected, but it does not elaborate on bot_id or add parameter-level detail that meaningfully compensates for the undocumented parameter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb and resource: permanently delete a bot's audio, video, and transcripts. It is clear about scope and permanence, though it does not explicitly compare itself to the sibling remove_bot, leaving the agent to infer the difference from the data-vs-bot naming.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives a clear usage boundary: only call when the user explicitly asks to delete data. This implies when not to use it, but it does not name alternative tools like remove_bot or explain how choosing between them should be decided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_bot_detailGet bot detailA
Read-only
Inspect

Full session metadata: platform, duration, timings, status timeline, transcript_id (canonical source), caption_file (for meeting_captions provider), original request payload.

ParametersJSON Schema
NameRequiredDescriptionDefault
bot_idYes

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The readOnlyHint annotation already signals a safe read operation, and the description adds meaningful behavioral context by listing the exact metadata fields returned. It also clarifies that transcript_id is the canonical source and that caption_file is provider-specific, which helps an agent interpret the result.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single dense line with no wasted words. It front-loads the core purpose and then lists concrete return fields, with useful parenthetical clarifications for transcript_id and caption_file.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple single-parameter read-only tool, the description adequately explains what the agent will receive, including special cases like meeting_captions provider. It does not explain where bot_id comes from, but the low complexity and sibling tool context make this a minor gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, and the description does not explain bot_id, its format, or how to obtain it. The single required parameter is easy to infer from the tool name, but the description adds no semantic value beyond the bare schema definition.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb-resource pair and immediately defines what the tool returns: full session metadata with enumerated fields such as platform, duration, timings, status timeline, transcript_id, caption_file, and original request payload. This clearly differentiates it from sibling tools like get_bot_status and get_bot_summary.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'Full session metadata' implies this is the tool to use when comprehensive session details are needed, but there is no explicit contrast with get_bot_status, get_bot_summary, or get_transcript. Usage is inferable rather than directly stated, and no when-not-to-use guidance is given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_bot_statusGet bot statusB
Read-only
Inspect

Current bot status. Values: Joining, InWaitingRoom, InMeeting, Recording, Leaving, Stopped, NotAllowed, Denied, Error, Done.

ParametersJSON Schema
NameRequiredDescriptionDefault
bot_idYes

TDQS

B3.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already declare readOnlyHint=true, so the description doesn't need to repeat that. It adds value by listing the exact status values an agent can expect, including error states like 'Error' and 'Denied'. This gives useful behavioral context beyond the annotation without contradicting it.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, concise sentence that front-loads the purpose and then lists the possible values. Every word earns its place; there is no fluff or redundant phrasing. It is optimally structured for quick comprehension.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given that this is a simple read-only status tool with one parameter and no output schema, the description provides the essential context: what the tool does and what values to expect. It could mention the return format or error handling, but the status list already covers error conditions. The missing parameter explanation is a minor gap, making it nearly complete for its simplicity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The sole parameter bot_id has zero schema description (coverage 0%), and the tool description does not mention it at all. While the parameter name is self-explanatory, the description does not state that bot_id identifies the bot whose status is being retrieved. This is a gap for a single required parameter with no schema documentation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool returns the current bot status and enumerates all possible values (Joining, InWaitingRoom, etc.). This is a specific verb-resource combination (get status) and distinguishes it from get_bot_detail and get_bot_summary, though it doesn't explicitly name those alternatives. It is unambiguous and informative.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this tool versus the sibling tools like get_bot_detail or get_bot_summary. The description simply states what it does, leaving the agent to infer that status is distinct from detail or summary. No exclusions or alternative conditions are provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_bot_summaryGet AI meeting summaryB
Read-only
Inspect

MeetStream's built-in AI summary of the meeting (no external LLM needed).

ParametersJSON Schema
NameRequiredDescriptionDefault
bot_idYes

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, so the safety profile is covered. The description adds context that the summary is generated by MeetStream's built-in AI rather than an external LLM, which is useful. It does not disclose return format, latency, or whether the summary is precomputed, but no contradiction exists.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, tightly written sentence that front-loads the core purpose and adds one meaningful qualifier. Every word earns its place; there is no filler or redundant restatement of the tool name.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter read-only getter, the description names the resource and scope adequately. However, with no output schema, it does not indicate what the response contains, and it does not clarify bot_id provenance or route the agent among the summary/transcript/detail sibling tools. It is minimally viable but has clear gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% and the description never mentions bot_id. While 'bot_id' is somewhat self-explanatory, the description adds no meaning about what the ID represents, where to obtain it, or how it relates to sibling tools like create_bot. The description fails to compensate for the low schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb and resource: getting MeetStream's built-in AI meeting summary, and adds a useful differentiator with 'no external LLM needed.' It does not explicitly distinguish this from sibling tools like get_transcript or get_bot_detail, but the core purpose is clear.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'built-in AI summary' and 'no external LLM needed' implies this is the tool to use when you want MeetStream's own summary rather than raw transcript or external processing. However, it never names alternatives or states when not to use this tool, leaving usage guidance mostly implicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_chatsGet in-meeting chatC
Read-only
Inspect

Chat messages captured during the meeting.

ParametersJSON Schema
NameRequiredDescriptionDefault
bot_idYes

TDQS

C2.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The readOnlyHint annotation already signals that this is a safe read operation, and the description adds little beyond that: 'captured during the meeting' mostly restates the title. It does not disclose behavior such as ordering, pagination, message fields, whether empty results are possible, or how returned chats relate to the transcript.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is short, but the brevity is under-specification rather than economical completeness. It omits essential semantic content about the parameter and usage context, so the single sentence does not earn its place as a sufficient definition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple one-parameter tool, the description still leaves a critical gap: it never explains that bot_id identifies the meeting/bot whose chats should be returned. With no output schema and no param descriptions, this is not enough context for an agent to invoke the tool correctly with confidence.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, and the single required parameter bot_id is completely undocumented in both the schema and the description. The agent receives no explanation of what bot_id represents, how to find it, or what format it should take, so it cannot reliably populate the only required argument.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description identifies a specific resource ('chat messages') and the context ('during the meeting'), and the title clarifies the action as 'Get'. It is clear enough to be understood as a retrieval tool for in-meeting chat, though it does not explicitly differentiate itself from siblings such as get_transcript or send_chat_message.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is given on when to use this tool versus alternatives like get_transcript or send_chat_message. The phrase 'during the meeting' provides some context, but there is no scenario, exclusion, or mention of a preferred alternative.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_media_urlsGet recording URLsA
Read-only
Inspect

Presigned S3 URLs for recorded media. kind=audio (valid 1h), video (valid 10min), audio_streams / video_streams (per-participant; require separate_*_streams at creation), screenshots.

ParametersJSON Schema
NameRequiredDescriptionDefault
kindNoaudio
bot_idYes

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true; description adds behavioral context beyond that: presigned URL validity (1h/10min) and creation-time prerequisites for stream kinds. No contradiction, but doesn't mention response shape or empty-result behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, dense sentence front-loads the core purpose and packs in all essential kind distinctions without redundancy. Every clause adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers purpose, kinds, validity, and prerequisites adequately for a simple read-only tool with no output schema. Missing explicit return format, but annotations and purpose imply a simple list of URLs.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must compensate. It thoroughly explains the kind enum (validity, per-participant requirement) but leaves bot_id undocumented, relying on convention from sibling tools.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource: 'Presigned S3 URLs for recorded media.' Clearly distinguishes from siblings like get_transcript (text) and get_bot_status (status), and enumerates the media kinds returned.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Implied usage from title and purpose, but no explicit when-to-use vs alternatives. Provides kind-level prerequisites (e.g., separate_*_streams for per-participant streams), which helps choose a kind, but not tool-level selection guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_participantsGet participantsB
Read-only
Inspect

Participants detected in the meeting (displayName, fullName, status, stream ids).

ParametersJSON Schema
NameRequiredDescriptionDefault
bot_idYes

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The readOnlyHint annotation already establishes this as a non-destructive read, and the description does not contradict it. The description adds a little context by noting that participants are 'detected' and listing output fields, but it does not disclose more behavioral traits such as auth requirements, empty-result behavior, or rate limits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is one compact, front-loaded sentence with no filler or redundant explanation. It efficiently conveys the resource and expected output fields.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is simple with one parameter and no output schema, so the listed field names provide basic context. Still, the meaning of bot_id, the notion of 'detected', and the structure or statuses of the returned participants are not explained, leaving minor but real gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, and the description does not explain what bot_id represents or how it relates to the meeting participants. The sole parameter is left completely to inference from its name, so the description adds no semantic value beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: retrieving participants detected in the meeting, and enumerates the returned fields (displayName, fullName, status, stream ids). It is clearly distinct from sibling tools such as get_transcript, get_chats, or get_bot_detail, which concern different resources.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'Participants detected in the meeting' implicitly signals that this tool should be used when the caller needs the participant list for a meeting. However, it provides no explicit when-to-use vs alternatives, no prerequisites, and no exclusions or conditions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_speaker_timelineGet speaker timelineB
Read-only
Inspect

Who spoke and when (chunk timeline with speaker ids/names).

ParametersJSON Schema
NameRequiredDescriptionDefault
bot_idYes

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already mark the operation read-only, so no safety disclosure is needed. The description adds a small amount of behavioral context by indicating the output is a chunk timeline with speaker ids/names, but it does not disclose ordering, chunk boundaries, or response format.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single compact sentence conveys the core result and its format without filler. The key output information is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter read-only tool, the description is minimally sufficient, but it leaves the exact response shape and the role of bot_id implicit. More detail on the returned chunks or explicit linkage to the bot would make it complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% and the description never mentions bot_id or explains what bot the timeline belongs to. The parameter name is simple, but the description fails to compensate for the absent schema documentation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies the resource (a chunked speaker timeline) and what it contains (speaker ids/names and when they spoke), which distinguishes it from related tools like get_transcript or get_participants. It lacks an explicit verb, but the tool name supplies the action.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrasing 'Who spoke and when' implies the use case for retrieving a speaker-segmented timeline. However, it gives no explicit guidance on when to choose this tool over siblings such as get_transcript or get_participants.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_transcriptGet transcriptA
Read-only
Inspect

Fetch a bot's transcript by bot_id. Resolves transcript_id automatically (it is NOT in webhooks) via /detail → /transcriptions. Set wait=true to poll until ready (after transcription.processed fires). Segments have speaker and transcript fields.

ParametersJSON Schema
NameRequiredDescriptionDefault
rawNoReturn raw provider output instead of processed segments
waitNoPoll until the transcript is ready (up to timeout_seconds)
bot_idYes
timeout_secondsNoMax wait when wait=true (default 300)

TDQS

A4.1/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnlyHint annotation, the description discloses significant behavior: the automatic transcript_id resolution, the polling mechanism with wait, and the output fields (speaker, transcript). This adds substantial context that annotations alone do not provide, and there is no contradiction.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise and front-loaded with the core purpose. Each sentence adds value (auto-resolution, wait behavior, output fields). It is not overly verbose, though it could be slightly more structured with bullet points, so a 4 rather than 5.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only tool with no output schema, the description covers the key flow: fetching by bot_id, auto-resolution, polling, and output structure. It does not address error cases or pagination, but these are minor given the simplicity. It is reasonably complete, so a 4.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 75%, so the baseline is 3. The description adds context for the wait parameter (poll until ready after a specific event) and clarifies bot_id's role, but it does not explain raw or timeout_seconds beyond the schema. The added value is modest, so a 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Fetch' and the resource 'transcript by bot_id', with the added detail that it resolves transcript_id automatically. It distinguishes itself from a simple list operation by mentioning the auto-resolution, but it does not explicitly name a sibling alternative, so it falls short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explains the context for using wait=true (poll until ready after transcription.processed fires) and the reason the tool exists (transcript_id is not in webhooks, so it resolves it via /detail → /transcriptions). It gives clear when-to-use guidance but does not explicitly state when not to use it or name alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_botsList botsA
Read-only
Inspect

List all bots on the account (paginated: bots[], hasNextPage, nextCursor).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

readOnlyHint already covers the read-only safety profile. The description adds genuine value by disclosing pagination behavior and the exact response shape (bots[], hasNextPage, nextCursor), which is not available from the annotations or schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One compact sentence front-loads the core action ('List all bots on the account') and adds the pagination detail in parentheses without waste. Every element earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter, read-only list tool, the description is nearly complete: it covers account scope and return pagination fields. It does not describe the per-item fields inside bots[], but the low complexity and absence of an output schema make this a minor gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There are zero parameters, so the description carries no parameter burden. The empty input schema is fully covered by the description's lack of parameter discussion, matching the baseline for a parameterless tool.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('List'), resource ('all bots on the account'), and scope, clearly distinguishing it from singular bot tools like get_bot_detail or get_bot_status. The pagination note further confirms this is the aggregate listing tool.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The purpose implies when to use it—when the agent needs all bots on the account—but it never names alternatives or exclusions. An agent could still hesitate between this and get_bot_detail for individual bot lookups, so the guidance remains implicit rather than explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_calendar_eventsList calendar eventsC
Read-only
Inspect

Upcoming events from connected Google Calendars (connect via POST /calendar/create_calendar with google_client_id/secret/refresh_token — needs OAuth credentials, usually done once from the dashboard or CLI).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

C2.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint=true, so the description need not repeat that. It adds value by noting OAuth credentials are needed and that the connection is usually done once, but it doesn't disclose potential rate limits, data freshness, or what happens if no calendars are connected. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single parenthetical sentence that is concise and readable. It front-loads the core action 'Upcoming events' and then the setup detail, which is efficient. No filler words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given zero parameters, no output schema, and a readOnlyHint annotation, the description is fairly complete. It explains the source and the pre-requisite setup, which is important. However, it lacks clarity on the date range of 'upcoming' and what the returned events include, which an agent might need to decide if this is the right tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There are zero parameters, and the schema has no properties. The description clarifies the source (connected Google Calendars), which is essential context. Since there are no parameters to document, a baseline of 4 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose2/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states it lists upcoming events, but it's vague about what 'upcoming' means and doesn't distinguish it from the many sibling tools. The verb and resource are clear, but the scope is ambiguous and does not differentiate from scheduling tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It mentions a prerequisite for connecting Google Calendars, which is useful but not directly a usage guideline for when to call this tool. There is no guidance on when to use this vs. alternatives, and the connection detail is more about setup than invocation.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_transcriptionsList transcription runsA
Read-only
Inspect

All transcription runs for a bot: transcript_id, provider, status, presigned download_urls (valid 1h).

ParametersJSON Schema
NameRequiredDescriptionDefault
bot_idYes

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark the tool as read-only, and the description adds useful behavioral detail: it returns transcript_id, provider, status, and presigned download URLs valid for one hour. This goes beyond the annotation by explaining output contents and a time-based constraint, though it does not cover pagination or ordering.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is one concise sentence that front-loads the core purpose and then lists the important return fields. Every word earns its place, with no fluff or repetition of the title.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple list endpoint with one parameter and read-only annotations, the description covers the essential return values and the URL expiry caveat. It is complete enough to call correctly, though it omits potential pagination or empty-result behavior; this is a minor gap given the tool's simplicity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema provides no description for bot_id (0% coverage), but the description clarifies it refers to the bot whose transcription runs are being listed. The parameter is a single obvious identifier, so the description partially compensates for the missing schema documentation, though it does not specify the format or source of bot_id.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the resource ('transcription runs for a bot') and the scope ('All'), and lists the key fields returned. This makes it easy to distinguish from sibling tools like get_transcript, which implies a single transcript, and transcribe_audio, which creates one.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no explicit guidance on when to use this tool versus alternatives such as get_transcript or transcribe_audio. The description implies it is for listing runs, but it does not state when a user should choose this instead of a sibling.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

remove_botRemove bot from meetingAInspect

Make the bot leave an active meeting now. Recorded data is KEPT (use delete_bot_data to erase).

ParametersJSON Schema
NameRequiredDescriptionDefault
bot_idYes

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the transparency burden. It is upfront that the action is immediate and that recorded data is preserved, and it names the erase tool for the destructive counterpart. It does not cover permissions or failure behavior, but the key side effect is disclosed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with the core action first and the retention caveat second; every word contributes and there is no redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter action with no output schema, the description covers what happens, the active-meeting prerequisite, and the data-retention consequence. It omits only minor details such as error conditions or return shape.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% and bot_id has only a type/required marker, but the description's subject 'the bot' makes the parameter's role inferable. It adds no format, source, or default details, so compensation is partial.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'Make the bot leave an active meeting now.' It also differentiates itself from delete_bot_data by explicitly stating 'Recorded data is KEPT,' so an agent can separate removal from deletion.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It specifies the operating context ('an active meeting') and points to delete_bot_data as the alternative when data should be erased. It does not enumerate other siblings or edge cases, so it falls just short of exhaustive routing guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

schedule_calendar_botSchedule / unschedule a calendar botBInspect

action=schedule sends a bot to a specific calendar event; action=unschedule removes it.

ParametersJSON Schema
NameRequiredDescriptionDefault
actionNoschedule
event_idYes

TDQS

B3.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description must carry the burden of behavioral disclosure, but it only says a bot is 'sent' or 'removes it'. It does not clarify whether unschedule destroys the bot, changes the event, is idempotent, or requires prerequisites. The ambiguity between removing a calendar association and deleting a bot is a material gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single sentence that front-loads the action=schedule behavior and then the action=unschedule counterpart. Every element earns its place and there is no fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is simple (two parameters, one required) and the core call is clear, but with no output schema or annotations the description leaves missing details such as expected result, error behavior when the event or bot does not exist, and whether there is any effect on the event itself.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must add meaning; it does explain what both action enum values do. event_id is not detailed beyond 'specific calendar event', which is thinly supplemented by the parameter name and required flag rather than by the description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific resource (a bot relative to a calendar event) and concrete verbs: 'sends a bot' and 'removes it'. It is clear what the tool does and is distinguishable from get_bot_status/remove_bot by the event targeting, though 'removes it' could momentarily be read as deleting the bot resource itself.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The action-value mapping implies when to call the tool, but there is no explicit guidance about when to prefer schedule_calendar_bot over create_bot or remove_bot, and no conditions or prerequisites are stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

send_chat_messageSend chat message into the meetingAInspect

Post a chat message into the live meeting through the bot.

ParametersJSON Schema
NameRequiredDescriptionDefault
bot_idYes
messageYes

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the behavioral burden. It correctly signals that this is a write operation ('Post') and that it requires a 'live meeting' and a bot. However, it does not disclose prerequisites like whether the bot must already be in the meeting, message constraints, or failure/error behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One direct sentence with no filler: it front-loads the action, target, and mechanism. Every word contributes meaning, and nothing is redundant.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple send operation, the description covers the core action, but it omits response/return behavior, error cases, and preconditions. With no output schema and no annotations, an agent has limited information to confirm that the call succeeded or to debug failures.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Both parameters have no schema descriptions (0% coverage), and the description does not explicitly map bot_id and message. It only vaguely implies that message is the chat content and bot_id identifies the bot, without specifying types, formats, or constraints beyond what the schema already states.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb, 'Post,' and clearly identifies the resource ('a chat message'), the target ('the live meeting'), and the mechanism ('through the bot'). This distinguishes it from siblings like send_image, which sends an image rather than a chat message.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The intended use is implied: when you need to send a chat message to a live meeting via a bot. However, there is no explicit guidance on when to use this instead of alternatives, such as send_image, or any exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

send_imageShow an image in the meetingCInspect

Display an image/GIF as the bot's video frame. img_url must be PUBLIC.

ParametersJSON Schema
NameRequiredDescriptionDefault
bot_idYes
img_urlYes
display_duration_secondsNo

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description must disclose behavioral traits. It only states the action and the public URL requirement, omitting side effects (e.g., whether it replaces the existing frame, persists, or affects ongoing video), permissions, or rate limits. The display_duration_seconds parameter is not explained, leaving behavioral ambiguity.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise, two short sentences with no filler. The critical action and the public URL requirement are front-loaded. It earns a high score for efficiency, though it could be slightly more structured by separating the action from the constraint.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema, no annotations, and 0% schema coverage, the description is inadequate. It does not explain return values, error conditions, or the behavior of display_duration_seconds, leaving an agent unsure about invocation details. A mutation-like tool with multiple parameters needs far more context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must compensate. It adds meaning for img_url (must be public) but does not clarify bot_id (obvious from context) or display_duration_seconds (its purpose, optionality, or bounds). With 3 parameters and only partial coverage, the description falls short.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Display') and resource ('image/GIF as the bot's video frame'), clearly distinguishing it from sibling tools like send_chat_message. The public URL constraint adds precision without ambiguity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool versus alternatives. It does not mention scenarios, exclusions, or relationships to siblings like send_chat_message or schedule_calendar_bot. The only usage hint is the public URL requirement, which is about parameter constraints, not tool selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

transcribe_audioRun / re-run transcriptionBInspect

Start a (re-)transcription of a bot's recorded audio with a chosen post-call provider. Useful to try a different provider or language after the meeting.

ParametersJSON Schema
NameRequiredDescriptionDefault
bot_idYes
languageNo
providerNodeepgram
callback_urlNoWebhook to notify when done

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries full burden. It fails to disclose that this is likely an asynchronous operation, that re-transcription may overwrite existing transcripts, or any permission/rate-limit considerations. It only implies it runs post-call.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with zero filler. The action is front-loaded and the use case is a single clause.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with 4 parameters, no output schema, and no annotations, the description is too brief. An agent cannot know what the function returns, whether the transcription is asynchronous, or what prerequisites exist (e.g., bot must have recorded audio).

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 25% (callback_url described). The description mentions 'provider' and 'language' in prose but does not explain bot_id, language format, or behavior of callback_url. It adds some context but not enough to compensate for the sparse schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Start'), resource ('a bot's recorded audio'), and adds the re-run capability, distinguishing it from read-only transcript retrieval siblings like get_transcript. It does not explicitly name siblings, but the action is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It provides a concrete use case: 'to try a different provider or language after the meeting.' This covers when to use it, though it doesn't mention exclusions or alternative tools (e.g., get_transcript) explicitly.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

webhook_events_guideWebhook events guide (live-verified)A
Read-only
Inspect

Authoritative reference for MeetStream webhook events — envelope shape, full event list, two-layer bot.stopped model, streaming-provider caveats. Use this before writing any webhook handler.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The readOnlyHint annotation already establishes this is a safe, non-mutating call. The description adds that it is a reference and lists its content, but does not disclose much beyond that, such as return format or any live-verification behavior hinted at in the title.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with no wasted words. The first sentence front-loads the purpose and scope, and the second gives a direct usage directive.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a parameterless, read-only reference tool, the description is complete: it names the topic, the exact areas covered, and when to use it. No output schema exists, but a guide tool's output is adequately implied by its reference nature.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There are zero parameters and the schema coverage is trivially 100%, so there is no parameter documentation burden. The baseline of 4 applies; the description needs to explain no input semantics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb-resource pair: an authoritative reference for MeetStream webhook events. It clearly enumerates what it covers (envelope shape, full event list, bot.stopped model, provider caveats), distinguishing it from the operational sibling tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly instructs the agent to 'Use this before writing any webhook handler,' which is a clear trigger for when to consult it. No sibling tool serves as a webhook reference, so no alternative routing is needed.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 19 tool updatesv0.3.0
    • First observedcreate_bot
    • First observeddelete_bot_data
    • First observedget_bot_detail
    • First observedget_bot_status
    • First observedget_bot_summary
    • First observedget_chats
    • First observedget_media_urls
    • First observedget_participants
    • First observedget_speaker_timeline
    • First observedget_transcript
    • First observedlist_bots
    • First observedlist_calendar_events
    • First observedlist_transcriptions
    • First observedremove_bot
    • First observedschedule_calendar_bot
    • First observedsend_chat_message
    • First observedsend_image
    • First observedtranscribe_audio
    • First observedwebhook_events_guide

TDQS

A3.5/5.0

Scored across 19 tools

Disambiguation5/5

Each tool targets a distinct resource or action: bot lifecycle (create, status, detail, summary, remove, delete), media/transcript retrieval (transcript, transcriptions, media urls), meeting content (participants, chats, speaker timeline), and live interaction (send chat/image). There is minor overlap between get_bot_status and get_bot_detail, but the difference (current status vs full metadata) is clear.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern in snake_case: create_bot, get_bot_status, remove_bot, list_transcriptions, send_chat_message, etc. The only slight deviation is webhook_events_guide, but it's still a noun phrase and does not break the overall convention.

Tool Count4/5

19 tools is above the typical 3-15 range, but the count is justified by the breadth of features: bot lifecycle, transcripts, media, participants, chat, calendar, and webhook guidance. It feels slightly heavy but each tool covers a distinct function and none are redundant.

Completeness4/5

The core meeting bot lifecycle is well covered: create, monitor, retrieve data, leave, delete, and interact. Minor gaps exist—there is no direct tool to create/connect calendar OAuth credentials (only list and schedule against existing connections), and no update/pause/resume bot action—but these can be worked around via the dashboard/CLI or by re-creating a bot.

Maintenance

ActivityActive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    F
    maintenance
    The Google Meet MCP Server enables AI agents to create, manage, and retrieve Google Meet meetings. Built on the Model Context Protocol, it exposes tools for scheduling, updating, and deleting meetings, making it easy to integrate Google Meet functionalities
    7 npm
    2
    MIT
  • F
    license
    Not graded
    quality
    C
    maintenance
    Enables an LLM to dynamically discover and call tools across multiple MCP servers (file, GitHub, SQL, Python execution) with authentication, rate limiting, and observability, supporting parallel execution and secure deployment.
    -
  • A
    license
    Not graded
    quality
    C
    maintenance
    Provides calendar, email, meeting transcription and summarization, and weather tools via MCP, enabling users to manage schedules, handle correspondence, capture meeting insights, and check conditions through natural language.
    MIT