Skip to main content
Glama

gifos-broadcast-mcp: GifOS broadcasts for Grok Bot

gifos-broadcast-mcp is an MCP server that lets Grok Bot (or any MCP client) make GifOS broadcasts (a service, a stream to friends) with everything an invite needs, run the host's booth, and follow what is said with a note-taking bot.

It runs on your own computer (self-run only; there is no hosted MCP URL). Broadcasts go out over GifOS's own peer-to-peer fan-out: every viewer's device helps carry the picture on, so no single node's bandwidth grows with the audience. No GifOS account, no API key, no model.

The shared parts (the bot, transcripts, Kokoro, links and invite details) are gifos-mcp-core, pinned to an exact commit. Its sibling for meetings is gifos-meet-mcp.

Requires GifOS 0.9.23b or newer (broadcast start time, Visit, Rebroadcast with Prerecorded, Meeting Bot contract version 2).

How it works

Grok Bot ──MCP (stdio)──▶ gifos-broadcast-mcp ─┬▶ booth: the host's seat in a headless Chromium (go live, video, end)
   (the brain)                                 └▶ Meeting Bot in its own headless Chromium: watches, writes down, speaks
  • Grok Bot is the brain, and decides what to confirm. The tools do exactly what they say, with no confirmation step of their own. go_live, play_video and end_broadcast say plainly in their descriptions that viewers will see or hear the result, so the caller can check with its user first.

  • Scheduling without joining. create_broadcast mints the watch link (the host's link too: the host goes live from it with the host password) and returns every invite detail: title, start and end with time zone, the link, the Visit link, description, how viewers get in, who does what, and ready-to-send text. Viewers who open the link early see when it starts, a countdown and Add to calendar (made on their own device); anyone who opens it after the end reads that it ended. Nothing goes live and nothing is sent.

  • The booth is the host's seat on this computer. open_booth needs the host password (to derive the host key; it is held in memory while the booth is open and never stored) and opens off air. go_live turns this computer's camera and microphone on for everyone watching. play_video plays a video file live into the broadcast; viewers see Prerecorded and cannot skip or save it (no per-viewer downloads). set_start_time and set_visit_link change what viewers see. end_broadcast ends it for everyone.

  • Notes. join_broadcast puts Meeting Bot in as a viewer; it writes down what is said on the Stage, credited by name. wait_lines returns each line the moment it lands.

  • Speech is Kokoro (kokoro-js 1.2.1) with its default voice, for say. Speech to text is GifOS Whisper in the headless browser.

Related MCP server: grokbot-telegram-bridge

Install

You need Node.js 20 or newer and Google Chrome or Microsoft Edge (see The browser below).

npx -y github:nwcnwc/gifos-broadcast-mcp

npx with a github: address downloads the package through git. Install git first.

or from a clone:

git clone https://github.com/nwcnwc/gifos-broadcast-mcp.git && cd gifos-broadcast-mcp
npm install --ignore-scripts
node bin/gifos-broadcast-mcp.js            # stdio
node bin/gifos-broadcast-mcp.js --http     # or streamable HTTP on http://127.0.0.1:19521/mcp

Install scripts are not needed and should be off. This package and gifos-mcp-core have none. Three dependencies of kokoro-js do: onnxruntime-node would download CUDA libraries from GitHub on Linux x64, sharp checks for a system libvips, protobufjs checks its version. The CPU build of ONNX Runtime and sharp's prebuilt binary ship inside the packages, so --ignore-scripts loses nothing. The plugin's .mcp.json sets npm_config_ignore_scripts=true and ONNXRUNTIME_NODE_INSTALL_CUDA=skip.

The browser. The server drives the browser already on your computer: GIFOS_CHROME if set, else Google Chrome, else Microsoft Edge, else a Chromium that npx playwright install chromium installed earlier. It never downloads or installs a browser. With none of these it stops and says what to install.

Grok Bot setup

As a plugin, this repository has .grok-plugin/plugin.json, .mcp.json and skills/gifos-broadcast/SKILL.md. By hand, add a local (stdio) MCP server:

{
  "mcpServers": {
    "gifos-broadcast": {
      "type": "stdio",
      "command": "npx",
      "args": ["-y", "git+https://github.com/nwcnwc/gifos-broadcast-mcp.git#1ec0f8396ff1f2a745764a0822ccbfc368ad3530"],
      "env": { "npm_config_ignore_scripts": "true", "ONNXRUNTIME_NODE_INSTALL_CUDA": "skip", "GIFOS_URL": "https://gifos.app" }
    }
  }
}

That pin is the same commit as .mcp.json. npx github: needs git.

It can run next to gifos-meet-mcp; give each its own GIFOS_MCP_HOME if both run at once.

Endpoints, downloads and credentials

What

Where

When

Size

GifOS site

GIFOS_URL, default https://gifos.app

every start

—

GifOS relay

GifOS's default relay, or GIFOS_RELAY

while in a broadcast (it only introduces peers)

—

Meeting Bot and Offline Captions apps

the GifOS store on GIFOS_URL (signed)

first join_broadcast

small

Whisper model

through the Offline Captions app

first transcription

about 77 MB

Kokoro weights

https://huggingface.co/onnx-community/Kokoro-82M-v1.0-ONNX at revision 1939ad2a8e416c0acfeecc08a694d14ef25f2231, or the mirror in GIFOS_KOKORO_URL

first start, kept in GIFOS_MCP_HOME/kokoro

about 92 MB; each file is checked against its pinned SHA-256

npm packages

the npm registry and GitHub (gifos-mcp-core)

install

—

Credentials. The bot's own name and password (GIFOS_MCP_HOME/bot.json, mode 0600, or GIFOS_BOT_NAME/GIFOS_BOT_PASSWORD). The host password of a broadcast is passed to create_broadcast and open_booth for that call; it is never stored, logged or returned, and the host key derived from it lives only in the booth's memory while the booth is open. The server reads no other secret, sends no telemetry, and never sends email, posts or calendar invites.

How the bot looks. The operator chooses the bot's name and picture: GIFOS_BOT_NAME and GIFOS_BOT_PICTURE in the server's env, or the set_bot_profile tool, which Grok Bot can call. The picture is read from a file on this computer and kept in GIFOS_MCP_HOME/bot-picture.json (mode 0600); it is sent to rooms like any person's picture and nowhere else.

Environment variables

Variable

Default

What it does

GIFOS_URL

https://gifos.app

The GifOS site. It must be 0.9.23b or newer.

GIFOS_RELAY

GifOS default

A custom relay (wss://…), added to meeting links.

GIFOS_BOT_NAME

generated

The name people see on the bot's tile (3 to 40 characters). Set alone, it keeps the stored password.

GIFOS_BOT_PASSWORD

generated

The bot's password (the secret half). A bot.json that cannot be read is kept as bot.json.bad-<ms> and a new pair is generated.

GIFOS_BOT_PICTURE

none

Path to the bot's picture: a GIF, PNG, JPEG or WebP file, at most 256 KB. Rooms show it on the bot's tile like anyone's picture.

GIFOS_STT_APP

offline-stt-whisper

The store app for speech to text. none turns transcription off.

GIFOS_MCP_HOME

~/.gifos-mcp

Browser profile, bot credential, meetings.json, schedule.json, transcripts, events.

GIFOS_HEADLESS

1

0 shows the browser windows.

GIFOS_CHROME

Chrome, then Edge

A Chrome or Chromium binary to use instead.

GIFOS_TIMEOUT_MS

120000

How long to wait for GifOS steps such as joining.

GIFOS_MCP_HTTP_TOKEN

none

Bearer token for --http.

GIFOS_MCP_LAZY

0

1 starts the browser on the first tool call.

GIFOS_MCP_DEBUG

0

1 logs the GifOS console to stderr and adds caption state to status.

GIFOS_MCP_SHOTS

none

A folder for screenshots of the bot's screens.

GIFOS_TRANSCRIPT_POLL_MS

300

How often captions are copied from Meet Bot into the lines.

GIFOS_TTS_ENGINE

kokoro

kokoro (in this process) or none.

GIFOS_TTS_VOICE

af_heart

Kokoro's default voice for every line.

GIFOS_TTS_APP

empty

A GifOS store speech app instead of Kokoro in this process.

GIFOS_KOKORO_URL

https://huggingface.co

A mirror with the Hugging Face layout for the Kokoro weights. The pinned revision and hashes still apply.

GIFOS_TTS_URL, GIFOS_STT_URL

empty

HTTP stand-ins for speech and captions (testing). This process calls them; the page does not.

GIFOS_MAX_MEETINGS

4

Seated meetings at once. A join over the cap is refused; a scheduled join waits.

GIFOS_WORKERS

1

Stage B. More than 1 makes this process a supervisor and runs each Meet Bot in its own child process and Chromium. Worker 0 keeps the bot name and profile-bot. Worker n is its own bot, named <name>-wn, with profile-bot-wn. Lines that bot speaks in its room are stored as the bot's spoken lines under that name, not as speech from a person. A meeting stays on the worker that joined it. If a worker stops, its meetings go back to scheduled and the clock rejoins any order still in its window. A meeting with no order (join_meeting with no password, or start_meeting) is rejoined on the next clock tick too, unless end_meeting is called on it first. A room is joined once at a time: a clock tick and a start_meeting for the same room share one join, and end_meeting during that join leaves the seat as soon as it lands; if that leave fails, the meeting is live again on that seat with transcribing: false and raises one meeting.error ("The bot could not leave the room; call end_meeting again."), so a second end_meeting reaches it. A join that lands but whose transcription will not start leaves that room again and fails (the clock tries again on its next tick), so the bot is never seated twice in one room; if that leave fails too, the meeting stays live with transcribing: false and raises one meeting.error, and unmute or end_meeting reaches that seat. A worker that stops answering a heartbeat for 30s is killed and handled the same way, and so is one that has not finished booting (for example a stalled first download of the Kokoro weights, which the restart resumes) within 5 × GIFOS_TIMEOUT_MS; the join waiting on it goes to the next worker. A worker that keeps dying waits 1s, 2s, 4s, up to a minute before each restart, and joins (and the browser warm-up) go to another worker meanwhile; status shows restart_in_ms on that worker. A worker that is running but whose browser will not start is treated the same way: the join that found it out goes to the next worker, joins skip it for 1s, 2s, 4s, up to a minute before it is tried again, and status shows start_retry_in_ms and the start error on its row. A worker process that dies during a join (its browser goes with it) does not fail that join: it goes to the next worker with a free seat, once, so a room that takes down every worker it reaches costs at most two workers a restart. The clock does not join such a room again at once: it raises one meeting.error ("The room crashed the bot; trying again in N min.", with retry_in_ms) and waits 1 minute, then 2, 4, up to 30 between tries while the order is in its window, so the meetings it knocked off get their seats back and keep them. A start_meeting or join_meeting by hand waits on the same clock: on a room in its wait it fails at once ("The room crashed the bot; it can be tried again in N min.") without walking in, and a hand join that takes down every worker it reaches starts that wait too. The wait is kept in crashes.json under GIFOS_MCP_HOME (mode 0600), so a supervisor restarted within it still waits; an unreadable crashes.json is moved aside like schedule.json. While no worker has a free seat, an order due to join waits: it goes to waiting_for_capacity and raises one schedule.waiting event with reason: "worker" ("capacity" when the cap is reached), not an error every clock tick; if no seat frees before its end it is missed for capacity. A call to a worker that is still alive fails after 60s with no answer (a browser start or a join after 5 × GIFOS_TIMEOUT_MS); a join that ran out of time keeps its seat until the worker answers it (the bot may still be walking into the room; status shows late_joins on that row), so the worker is not given more rooms than its budget; one that lands after that is left at once, so no seat is held that nobody can reach, and one that fails frees the seat. A join that still has not answered one more join window later is checked against the worker's own Meet Bot room list: a room the supervisor does not hold is left (as above), and the seat is freed, so a join that never answers does not hold a seat until the worker dies. If the leave of a join that landed late fails, the room keeps its seat and is left again every 10s until it works; status shows stray_rooms on that worker's row meanwhile. A leave_meeting or end_meeting whose leave fails or runs out of time keeps the meeting live on its worker (the bot may still be in the room), so calling it again reaches the room; a late leave that lands, or Meet Bot answering that it no longer holds the room, frees the seat. A leave that still has not answered one more call window later is checked against the worker's Meet Bot room list: if the room is gone, the seat is freed; if the bot is still listed there, the seat stays taken. After a late leave landed or that check freed the seat, the next leave_meeting or end_meeting on that meeting ends it. status asks every worker at once and waits at most 3s for each; a worker that does not answer in time shows error on its row while the rest of status comes back. If the supervisor itself dies without shutting down (SIGKILL, out of memory), each worker sees its channel close, closes its Chromium, and exits, so no bot is left in a room that nothing can reach; a worker still booting (for example fetching the Kokoro weights) exits at once too, and so does one told to close while booting, keeping its part file for the next start. Each worker runs with a TMPDIR of its own, gifos-mcp-<tag>-w<n> under the supervisor's (the tag is named by GIFOS_MCP_HOME), emptied before each start and removed when the worker exits or close ends it, so the playwright-artifacts-* folder a worker killed under its Chromium could not remove does not pile up in /tmp; a worker leaving because its supervisor died removes its own. set_voice goes to every running worker at once; a worker that refuses it, misses it, or restarts gets the same settings again before its next join, and a running worker that refused is asked again every 10s until it takes them; meanwhile status shows voice: "pending" on its row.

GIFOS_WORKER_ROOMS

cap / workers, rounded up

Rooms per worker.

GIFOS_BOOTH_CAMERA_FILE

none

A .y4m or .mjpeg file the booth uses as its camera (a computer with no camera).

GIFOS_BOOTH_AUDIO_FILE

none

A .wav file the booth uses as its microphone (testing).

GIFOS_BOOTH_FAKE_MEDIA

0

1 gives the booth Chromium's test camera and microphone (testing).

Tools

Broadcast tools (this server):

Tool

Arguments

Returns

create_broadcast

title, host_password, start?, end?, timezone?, description?, visit_url?, stream?, host_name?

{ meeting_id, watch_url, invite }. Nothing goes live, joins or is sent.

open_booth

meeting_id or link, host_password, host_name?

Opens the host's seat on this computer, off air. Refuses a host password the broadcast was not made with.

go_live

meeting_id

Starts the live broadcast: this computer's camera and microphone go out to everyone watching.

play_video

meeting_id, path

Plays a video file live into the broadcast now; viewers see Prerecorded.

stop_video

meeting_id

Stops it.

set_start_time

meeting_id, start, timezone?

What early viewers see (countdown, Add to calendar). Empty clears it.

set_visit_link

meeting_id, url

The https Visit link on the picture and the ended card. Empty clears it.

end_broadcast

meeting_id

Ends the broadcast for everyone; viewers read that it ended; the booth closes.

booth_status

meeting_id

Open, on air, camera, microphone, video, watching, start time and Visit as the host page shows them.

close_booth

meeting_id

Closes the booth without the End step.

join_broadcast

link, topic?

Meeting Bot watches the broadcast and writes down what is said.

Shared tools (from gifos-mcp-core, the same in gifos-broadcast-mcp):

Tool

Arguments

Returns

wait_lines

meeting_id?, since?, timeout_ms? (≤ 30000), kinds?

Returns as soon as there is a line after since, or after timeout_ms. Pass next back as since. Lines addressed to the bot have to_bot: true.

tail_lines, tail_transcript

meeting_id?, since?, kinds?

The lines after since without waiting. Each line is {seq, ts, speaker, text, kind}; kind is speech, chat or spoken.

get_transcript

meeting_id

Plain text, one speaker: words line per caption, live and after the meeting.

say

meeting_id, text, voice?

Meet Bot says the line out loud now (Kokoro).

set_bot_profile

name?, picture_path?, clear_picture?

Sets how the bot looks: the name on its tile and its picture (GIF, PNG, JPEG or WebP, at most 256 KB). Both are kept in GIFOS_MCP_HOME for later starts. The picture applies to rooms joined afterwards. A new name is refused while the bot is in a room (end it first). GIFOS_BOT_NAME and GIFOS_BOT_PICTURE, when set, win again at the next start.

send_chat, share_content

meeting_id, text

A chat line as the bot (up to 2000 characters).

get_meeting_state, snapshot

meeting_id

Who is here; a PNG of the bot's page.

mute, unmute

meeting_id

Stop or restart note-taking.

leave_meeting, end_meeting

meeting_id

Saves the transcript, then the bot leaves. Other people stay.

schedule_meeting

link, room_password, start, end?

Stores the join order, including the room password, in schedule.json (mode 0600, written to a temp file then renamed, so a save cut short keeps the last good file; a file that cannot be read at start is kept as schedule.json.bad-<ms> and not overwritten). The bot joins one minute before start. A join that fails (not a crash, not a full pool) is tried again on every clock tick while the window is open, and raises one meeting.error ("The room could not be entered; trying again.") and one schedule.due for that order, not one per tick; after a join works, the next failure raises one again. Those events, and schedule.waiting, are once per window: an order moved to a new start or end (an order waiting for capacity goes back to upcoming) raises them again in its new window. end defaults to start plus 8 hours. The password is not returned.

list_schedule, update_schedule, cancel_schedule, import_schedule

see the schemas

Join orders. No passwords in results.

list_meetings, meeting_status, meetings_report, status, capacity_status

—

State, people, line counts, capacity. No passwords.

tail_events

since?

Connector events, including capacity.near, capacity.reached, and capacity.cleared. They are appended to GIFOS_MCP_HOME/events.jsonl (mode 0600); a torn last line left by a process killed mid-write is skipped and ended at the next start, so later events stay readable and no seq is handed out twice.

The resource gifos://meeting/{id}/transcript is the live transcript as newline-delimited JSON; subscribe for notifications/resources/updated.

Example: a Monday broadcast

  1. The user says: "Set up our Monday all-hands at 10, with the visit link, and tell the team." Grok Bot calls create_broadcast({ title: "Monday all-hands", host_password, start: "2026-10-25T10:00", timezone: "America/Chicago", visit_url: "https://example.org/visit" }) and sends invite.text through the user's own channels after the user approves.

  2. At 9:55 Grok Bot calls open_booth and join_broadcast. When the user says go, go_live.

  3. During the broadcast Grok Bot follows wait_lines. Afterwards, end_broadcast (after checking with the user) and play_video later in the day to rebroadcast the recording live, if the user wants that.

Privacy and security

  • Everything runs locally. The browser, the bot, one shared speech-to-text engine, and the transcripts are all on your machine. Media goes peer to peer between participants. GifOS's relay only helps peers find each other.

  • Consent is visible. A GifOS meeting is always written down, and every participant's header always shows 📝 Transcribing, also when the call is calm. The bot is a tile labelled 🤖 bot for as long as it is in the meeting. mute stops the bot writing the meeting down; end_meeting takes it out.

  • The booth uses this computer's camera and microphone only after go_live. It opens off air. Meet Bot never uses them: It joins with no camera, Meeting Bot never transcribes its own machine's microphone, and its browser is fed a silent fake microphone anyway.

  • Only one secret. The bot name and password derive Meeting Bot's secret admin meeting, which can command the bot from another device (Meeting Bot's CONTROL mode). Keep GIFOS_MCP_HOME/bot.json private (it is mode 0600), or pass the pair through environment variables. Anyone with the pair can command the bot.

  • Meeting links are capabilities. Anyone with a link can join that meeting, so share links only with the people you invite.

  • Transcripts are stored in GIFOS_MCP_HOME/meetings.json (mode 0600) so they survive restarts. Delete the file to forget them. It is written to a temp file then renamed, so a save cut short keeps the last good file; a file that cannot be read at start is kept as meetings.json.bad-<ms> (mode 0600, logged) and not overwritten. Delete any *.bad-* file too (a bot.json.bad-* holds an old bot password). A join whose save fails (disk nearly full) still holds its seat and reads its captions; the failure is logged and the next save writes it. The same holds for schedule.json: a clock tick whose save fails still seats, waits and ends its orders, logs the failure once until a save works, and the next save writes their phases. An end_meeting (or a clock leave) whose saves fail still reports the leave, raises meeting.left, and keeps the meeting ended and its order left_early or ended in memory, so no tick seats the bot again. A join_meeting with a password whose schedule.json save fails still reports the join and raises meeting.joined; its order (with the room password) is kept live in memory and the next save writes it. A mute, unmute or get_transcript whose meetings.json save fails still answers with what the bot did (muted, listening, the transcript); memory keeps it and the next save writes it. A transcript line whose append to transcripts/<id>.jsonl fails keeps every caption line of that snapshot (and its line.* event), send_chat and say still report what Meet Bot sent, and the kept lines are written in order at the next append that works. A file whose last line was torn is ended before the next line.

  • No model, no key. There is no language model in this server and no model URL or API key is read. The assistant that calls the tools writes every word the bot says. MeetingBot.setVoice receives { respond_to_command: false, speak: false } on every join, so Meet Bot answers nothing on its own.

  • No outgoing messages. The server never sends email, calendar invites or anything else. Grok Bot does that through your own connectors, and you approve each send. Follow-up after the meeting is Grok Bot's job.

  • HTTP mode binds to 127.0.0.1, checks the Host header (DNS-rebinding protection), and can require a bearer token.

Troubleshooting

Symptom

Fix

The booth did not become the host of this broadcast

The host password is not this broadcast's, or the site is older than 0.9.23b.

The broadcast did not go live. This computer may have no camera

Use play_video, or set GIFOS_BOOTH_CAMERA_FILE.

This GifOS has no Rebroadcast

The site is older than 0.9.23b.

Kokoro: … does not match its pinned SHA-256

A download was cut or a mirror served other bytes. The file was removed; start again.

No Chrome or Edge on this computer

Install Google Chrome, or run npx playwright install chromium once, or set GIFOS_CHROME. The server never downloads a browser.

Anything else

GIFOS_HEADLESS=0 shows the browser windows.

The booth e2e (test/e2e/booth.js) serves a local site unless GIFOS_URL or E2E_GIFOS_URL is already set.

Testing instructions for marketplace reviewers

1. Unit tests (no network, no browser).

git clone https://github.com/nwcnwc/gifos-broadcast-mcp.git && cd gifos-broadcast-mcp
npm install --ignore-scripts
npm test

They run every tool over a real MCP client/server pair with a stand-in booth and bot: links carry only the host key's verifier, the host password is never returned or stored, a wrong host password cannot open the booth, and every booth action is one call with no confirmation argument.

2. Full end-to-end test against a local GifOS (what the maintainers run; see runs/).

git clone --branch release/0.9.23 --single-branch https://github.com/nwcnwc/gifos-app.git ../gifos-app
git clone https://github.com/nwcnwc/gifos-apps-source.git ../gifos-apps-source
GIFOS_APP_DIR=../gifos-app MEETING_BOT_SRC=../gifos-apps-source/meeting-bot \
E2E_VIDEO=/path/to/short-clip.webm npm run test:e2e

Leave E2E_RELAY unset. The test uses the GifOS site's own relay, and a client on this computer can use the live relay.

It serves the GifOS checkout on 127.0.0.1:19512 with Meeting Bot in its store, runs this server over stdio, and checks with a separate viewer browser: the early-viewer countdown, the booth opening off air, go live (the viewer sees the picture), Meeting Bot writing down the host's words through wait_lines, Prerecorded during play_video, and "has ended" after end_broadcast.

License

Copyright (c) 2026 Crowd Concepts, Inc. All rights reserved. See LICENSE. GifOS, Meeting Bot and Kokoro are separate projects with their own licenses.

Available Tools

36 tools
booth_statusWhat the booth showsB

Read-only: whether the booth is open, on air, playing a video, how many are watching, the start time and the Visit link as the host page shows them.

NameRequiredDescriptionDefault
meeting_idYesThe meeting_id of the room (from create_broadcast or join_broadcast).

TDQS

B3.2/5.0
Behavior3/5

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

With no annotations, the description carries the full burden, and it does lead with 'Read-only' plus the exact field set returned, which meaningfully discloses the safety profile and return shape. It omits behavior outside an open booth (error vs nulls), auth requirements, and whether values are live or cached snapshots.

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?

A single front-loaded sentence that starts with the safety profile and then lists the return fields in priority order. The comma-run list is dense but each clause carries information; no filler.

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?

No output schema exists, so enumerating the returned fields in the description is exactly the needed compensation, and the lone parameter is fully documented in schema. The remaining gap is relational: it does not situate itself among status, meeting_status, and capacity_status.

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?

Only one parameter and schema coverage is 100%; the schema already explains that meeting_id comes from create_broadcast or join_broadcast. The description adds no additional parameter semantics, so baseline 3 applies.

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?

Names a specific verb+resource: reading booth state, with an explicit enumeration of what is returned (open/on-air/video/watchers/start time/Visit link). It is clear what it does, but it never distinguishes itself from the many similar read tools in the sibling list (status, meeting_status, capacity_status, snapshot).

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 statement of when to use this versus the other state-reading tools; the agent must infer that 'booth' refers to a specific broadcast sub-entity. No prerequisites, no exclusions, no named alternative.

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

cancel_scheduleCancel a scheduled meetingB

Cancels one occurrence, or the series when occurrence is omitted. Leaves a live occurrence unless leave_if_live is false.

NameRequiredDescriptionDefault
occurrenceNoOne occurrence id. Omit to cancel the whole series.
schedule_idYesThe schedule_id from schedule_meeting or list_schedule.
leave_if_liveNoDefault true. Leave if that occurrence is live or in overrun.

TDQS

B3.4/5.0
Behavior3/5

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

With no annotations at all, the description carries the full behavior burden, and it does disclose the key nuance that a live or in-overrun occurrence is by default left untouched. However, for a destructive operation it never states irreversibility, whether participants are notified, whether cancelled occurrences can be restored, or what the call returns.

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?

Two short sentences, zero filler, with the series/occurrence behavior front-loaded. 'Leaves a live occurrence unless leave_if_live is false' is slightly elliptical phrasing that costs a beat of parse time but earns its place.

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 a destructive, unannotated tool with no output schema, the description covers the targeting logic adequately but omits consequence information an agent needs before calling: irreversibility, permission requirements, and side effects on attendees. It is enough to invoke correctly but not enough to invoke safely.

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 100%, so both the omission semantics for 'occurrence' and the true default for 'leave_if_live' are already documented in the schema. The description restates the same behavior compactly rather than adding formats, constraints, or edge cases the schema lacks, so baseline 3 applies.

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?

States a specific verb and resource: 'Cancels one occurrence, or the series', which an agent can distinguish from update_schedule or end_meeting. It does not explicitly name or compare against those siblings, but the scope (occurrence vs series) is a real disambiguator.

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?

It implies when to target a single occurrence versus the whole series ('when occurrence is omitted'), which is genuine usage guidance for the parameters. It gives no guidance on when to cancel at all versus reschedule via update_schedule, and no prerequisites or preconditions are mentioned.

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

capacity_statusCapacity of the meeting botA

The latest capacity picture: level ok, near, or reached, who is seated, who is waiting, and future clashes inside the horizon. Call this on connect and when the human asks.

NameRequiredDescriptionDefault

No parameters

TDQS

A3.9/5.0
Behavior3/5

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

With no annotations and no output schema, the description carries the full burden; it does usefully disclose the shape of the answer (level values, seated/waiting lists, future clashes within a horizon) which an agent could not otherwise know. It says nothing about freshness guarantees beyond 'latest', cost, or that the call is a non-mutating read, leaving gaps for a zero-annotation tool.

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 tight sentences: the first front-loads what the payload contains, the second front-loads when to call. Nothing is redundant with the name or title, and there is no filler.

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 no-parameter, no-output-schema read tool, the description gives enough — what comes back and when to reach for it — to invoke it correctly. It could go further by clarifying whether the 'horizon' is fixed or whether the snapshot is live versus cached, but nothing essential is missing.

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?

The tool takes zero parameters, so the baseline is 4. The description doesn't need to explain inputs, and the mention of a 'horizon' doesn't create a parameter the agent must supply.

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 (the latest capacity picture) and enumerates what it contains: level (ok/near/reached), who is seated, who is waiting, and future clashes within the horizon. That is far more specific than a sibling like 'status' or 'meeting_status', though it doesn't explicitly say how it differs from those.

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 gives concrete triggers — 'on connect' and 'when the human asks' — which is real when-to-use guidance rather than an implied purpose. It stops short of exclusions or naming an alternative (e.g., status vs meeting_status) for capacity questions.

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

close_boothClose the booth without endingA

Closes the host seat on this computer without the End step. If the host was live, viewers see the host leave. Use end_broadcast to end it for everyone.

NameRequiredDescriptionDefault
meeting_idYesThe meeting_id of the room (from create_broadcast or join_broadcast).

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 well: it discloses that the effect is local to this computer, that it is not the End step, and that viewers see the host leave if the host was live. It stops short of saying whether the booth can be reopened (open_booth) or what state the meeting is left in.

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 short sentences, front-loaded with the action and its scope, followed by the user-visible consequence and the sibling routing. No filler.

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, no-annotation, no-output-schema tool, the description covers scope, side effect, and the alternative. It leaves minor gaps around follow-up state (reopening, whether the meeting persists), but nothing an agent needs to call it correctly is missing.

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 single meeting_id parameter is fully described in the schema (100% coverage), including its source (create_broadcast or join_broadcast). The description adds nothing about parameters, which is acceptable at this coverage level – baseline 3.

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 and resource ('Closes the host seat') plus a precise scope qualifier ('on this computer'), which immediately separates it from end_broadcast. An agent can distinguish it from open_booth and end_broadcast without opening any schema.

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?

Explicitly routes the agent to the alternative: 'Use end_broadcast to end it for everyone.' The condition for choosing this tool is implied by 'without the End step.' It doesn't address the potentially confusable leave_meeting, but the primary alternative is named.

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

create_broadcastCreate a GifOS broadcast (link and invite details, no join)A

Mints a GifOS broadcast and returns the watch link plus everything an invite needs: title, start and end with time zone, the link, the Visit link, description, how viewers get in, and who does what, as fields and as ready-to-send text. Viewers open the same link to watch; the host goes live from it with the host password. Nothing goes live, nothing joins and nothing is sent. stream makes it a "Stream to friends" broadcast. The host password is used for this call only: it is not stored, logged or returned.

NameRequiredDescriptionDefault
endNoEnd time, same forms. Default start plus one hour.
startNoStart time: ISO with an offset, or a local time such as 2026-10-25T10:00 read in timezone. Early viewers see a countdown and Add to calendar.
titleYesThe broadcast title.
streamNoStream to friends: the same broadcast with friendlier words.
timezoneNoIANA time zone, for example America/Chicago. Default UTC.
host_nameNoWho hosts, for the invite text.
visit_urlNoAn https link painted on the picture and on the ended card (Visit).
descriptionNoWhat the broadcast is, for the invite.
host_passwordYesThe host password of this broadcast. Used to hold the host key while the call runs; never stored, logged or returned.

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 full load and does well: it discloses the side-effect profile (nothing is created live, no one joins, no messages sent) and that the host password is used only for this call and is never stored, logged, or returned. It stops short of covering re-invocation behavior (e.g., whether calling twice mints two broadcasts), which matters for a creation tool.

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?

Front-loaded with the mint action and return payload, then the non-effects, then the stream flag, then the password caveat. Dense and mostly efficient, though the host password guarantee is stated twice (body and again at the end), which is slight redundancy.

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?

No output schema exists, and the description compensates by enumerating the returned payload (title, times with time zone, link, Visit link, description, access details, roles) and its dual form as fields and ready-to-send text. Combined with the effect and credential disclosures, an agent has everything needed to call it 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 coverage is 100%, so every parameter is already documented in the input schema, making 3 the baseline. The description adds a little context on the stream flag ('Stream to friends broadcast') and reiterates the host_password handling, but largely repeats what the schema descriptions already state.

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 and resource ('Mints a GifOS broadcast') followed by exactly what it returns: watch link plus invite fields and ready-to-send text. It also distinguishes itself from siblings by asserting 'Nothing goes live, nothing joins and nothing is sent', separating it from go_live, join_broadcast, and send_chat.

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 exclusions ('nothing goes live, nothing joins, nothing is sent') effectively route the agent away from go_live/join_broadcast toward this tool when it only wants to mint an invite. However, it never names a sibling explicitly or says 'use this when you only need the link and invite', so the guidance is inferential rather than stated.

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

end_broadcastEnd the broadcastA

Ends the broadcast for everyone: the host leaves the way the End button does, viewers are told it ended, and the booth closes. The note-taking bot, if it is watching, stays until end_meeting.

NameRequiredDescriptionDefault
meeting_idYesThe meeting_id of the room (from create_broadcast or join_broadcast).

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 full burden and does well: it discloses that the effect is global ('for everyone'), that viewers are notified, that the booth closes, and the non-obvious side effect that the note-taking bot persists. It omits irreversibility, permission requirements, and recording/transcript handling, which keeps it from a 5.

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 tightly written sentences with the global scope stated first and the bot caveat last. Every clause conveys a distinct behavioral fact with no repetition of the name or 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 single-parameter destructive action with no annotations or output schema, the description covers the important side effects and the sibling boundary. What is missing is the return/confirmation behavior and whether the action can be undone, which an agent performing an irreversible termination would benefit from.

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?

There is one parameter with 100% schema description coverage, so the schema already explains meeting_id and its source. The description adds no additional semantics about the parameter, making the baseline 3 correct.

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 names a specific verb and resource ('Ends the broadcast') and then enumerates the concrete effects on host, viewers, and booth. The closing note about the note-taking bot staying until end_meeting actively distinguishes this tool from the end_meeting sibling.

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 gives clear context for when this applies (terminating a broadcast versus a meeting) and implicitly routes the agent to end_meeting when the bot should also stop. It stops short of an explicit 'use X instead of Y when...' rule, so the exclusion is inferential rather than stated.

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

end_meetingEnd the meeting for the botA

The bot leaves and the transcript is saved. Same result as leave_meeting. Other participants stay; a GifOS meeting has no owner who can close it for everyone. A scheduled order still inside its window is marked left early.

NameRequiredDescriptionDefault
meeting_idYesThe meeting_id of the room (from create_broadcast or join_broadcast).

TDQS

A4.2/5.0
Behavior4/5

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

No annotations are provided, so the description carries the full burden, and it does well: transcript persistence, that other participants remain, that no one can close the meeting for everyone, and that a scheduled order inside its window is marked left early. Missing are idempotency and error behavior, which keeps it short of a 5.

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?

Three short sentences, front-loaded with the core effect and then the differentiating constraints. No filler or restatement 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 low-complexity, one-parameter tool with no output schema, the description covers the side effects an agent needs before calling. It stops short of describing the response or failure modes, but nothing essential is absent.

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?

Single parameter with 100% schema description coverage, including its origin (create_broadcast or join_broadcast), so the schema already does the work. The description adds no meaning beyond it, which is the baseline case.

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 concrete verb and effect: the bot leaves and the transcript is saved. It explicitly names the sibling it duplicates ("Same result as leave_meeting") and clarifies scope (other participants stay, no owner can close a GifOS meeting), so an agent can distinguish it without opening the schema.

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?

Explicitly tells the agent this is functionally equivalent to leave_meeting, which resolves the main selection question between the two siblings. It doesn't state preconditions (e.g. what happens if the bot isn't in the meeting), so not a full when/when-not treatment.

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

get_meeting_stateWho is in the meetingA

Who is in the room, plus hand, microphone, and camera when Meeting Bot reports them. This is the people list. snapshot is the same list plus a PNG of the page. Contract version 1 returns the people list only.

NameRequiredDescriptionDefault
meeting_idYesThe meeting_id of the room (from create_broadcast or join_broadcast).

TDQS

A3.6/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full behavioral burden. It usefully discloses that hand, microphone, and camera states are returned only 'when Meeting Bot reports them,' and that contract version 1 returns the people list only. However, it omits other relevant behavior such as data freshness, failure modes, and whether the call is read-only or has side effects.

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 short and front-loaded with the core purpose: identifying who is in the room. Each sentence adds useful information, including the sibling distinction and version contract. It is efficient, though the contract version sentence is slightly cryptic without additional context.

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 getter with one well-documented parameter and no output schema, the description explains the returned contents, conditional fields, alternative snapshot tool, and version-specific behavior. It lacks some detail about output structure and data freshness, but overall it provides enough context for an agent 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?

The schema has 100% description coverage for its single parameter, meeting_id, including its source from create_broadcast or join_broadcast. The description adds no additional parameter semantics beyond what the schema already provides. With high coverage and one simple parameter, the baseline of 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 resource: the people list for a meeting, including hand, microphone, and camera status when available. It explicitly distinguishes itself from the snapshot sibling by noting snapshot is the same list plus a PNG. It is specific enough for an agent to identify the tool's output, though it phrases purpose as a question rather than a direct verb+resource statement.

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 names the alternative snapshot tool and explains the condition for using it: snapshot provides the same people list plus a PNG of the page. This gives clear selection guidance between the two tools. It does not provide explicit exclusions or prerequisites, but the sibling contrast is strong enough for a 4.

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

get_transcriptGet the meeting transcriptA

Returns the transcript as plain text, one "speaker: words" line per caption. Lines the bot itself spoke (say) are kept and labelled " (bot): words". Works while the meeting is live and after end_meeting.

NameRequiredDescriptionDefault
meeting_idYesThe meeting_id of the room (from create_broadcast or join_broadcast).

TDQS

A4/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and does a good job: it discloses the return shape (one "speaker: words" line per caption), the bot-line labeling convention, and the availability lifetime spanning live and post-end_meeting. It omits any mention of size limits, truncation, or pagination for long meetings, which is the remaining behavioral 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?

Three short sentences, each carrying distinct information: return format, bot-line special case, and availability window. Nothing is padded and the most important fact (what you get back) leads.

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 single-parameter read tool with no output schema, the description adequately covers what is returned and when it can be called. The one missing piece is whether very long transcripts are truncated or paged, which matters for a whole-transcript fetch.

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?

Only one parameter exists and its schema description is fully covered at 100%, including a pointer to create_broadcast/join_broadcast for obtaining the id. The description adds no parameter-level detail beyond that, so the baseline 3 applies.

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?

States a specific verb and resource ("Returns the transcript") plus the exact serialization format, which is unusually concrete. It does not, however, distinguish itself from the sibling tail_transcript, so an agent must infer that this one returns the whole transcript rather than streaming new lines.

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?

"Works while the meeting is live and after end_meeting" gives a clear validity window that tells the agent when the call will succeed, including after teardown. It stops short of naming tail_transcript as the alternative for incremental reads, so the selection versus that sibling is left implicit.

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

go_liveGo liveA

Starts the live broadcast: the booth turns the host camera and microphone on, and everyone watching sees and hears the host from this computer. Needs a camera on this computer (or GIFOS_BOOTH_CAMERA_FILE); without one, use play_video.

NameRequiredDescriptionDefault
meeting_idYesThe meeting_id of the room (from create_broadcast or join_broadcast).

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 full burden and does well: it discloses the real-world side effects (camera and mic activated, audience sees/hears the local machine) and the media-source fallback via GIFOS_BOOTH_CAMERA_FILE. It omits failure/idempotency behavior (already live, missing meeting, permission errors) and does not state whether the action is reversible except implicitly via end_broadcast.

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, both earning their place: the effect is front-loaded and the fallback condition follows immediately. No restatement of the title or filler.

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, annotation-free tool with no output schema, this covers what the action does and the key branch to a sibling. The remaining gap is state prerequisite and error behavior, which matters somewhat for a live-broadcast mutation but is minor at this size.

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?

Only one parameter, and the schema description already covers it fully (schema coverage 100%), including its origin from create_broadcast or join_broadcast. The description adds no additional semantics about meeting_id, so the baseline 3 applies.

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?

Names a specific verb and resource ('Starts the live broadcast') and immediately specifies the concrete effect: host camera and microphone on, viewers hear and see the host from this computer. That distinguishes it clearly from siblings like play_video and share_content, which do not turn on local devices.

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?

Gives an explicit precondition and an explicit alternative: it needs a camera on this computer (or GIFOS_BOOTH_CAMERA_FILE), and without one the agent should call play_video instead. It does not mention other relevant states (e.g., whether the booth must be open via open_booth first, or what happens if already live), so it stops short of full when/when-not coverage.

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

import_scheduleImport schedule ordersA

Bulk path for a calendar you have already read. Each item is a schedule_meeting body plus external_id. This process does not call a calendar. A recurrence rule it cannot expand is reported and not stored. Over capacity is stored and listed in conflicts.

NameRequiredDescriptionDefault
ordersYesUp to 500 schedule_meeting bodies.

TDQS

A3.8/5.0
Behavior4/5

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

With no annotations, the description carries the full load and does useful work: it discloses that no calendar is contacted, that unexpandable recurrence rules are reported rather than stored, and that over-capacity items are stored and surfaced in conflicts — real partial-success semantics an agent needs. Missing are atomicity/return-shape details, so it stops short of a 5.

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?

Five short sentences, roughly 50 words, with failure semantics front-loaded after the purpose line. Nothing is padded, though the opening sentence is cryptic enough to require a second reading.

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 single-parameter, no-output-schema, no-annotation tool, the description covers the essential unknown: partial-failure behavior on recurrence and capacity. It leaves the response shape of "reported" and "conflicts" implicit, which is the main residual 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?

Schema coverage is 100% for the single orders parameter, so baseline would be 3. The description adds meaning by equating each item with a "schedule_meeting body plus external_id," letting an agent reuse the sibling tool's schema knowledge rather than re-deriving it.

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 establishes a specific operation: bulk creation of schedule orders, with each item being a schedule_meeting body plus an external_id. The reference to schedule_meeting ties it to a sibling with clearer semantics, but the phrasing "Bulk path for a calendar you have already read" is elliptical and never plainly says it creates/upserts schedule entries.

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?

"Bulk path" and "a calendar you have already read" imply when to reach for this over the single-item schedule_meeting, but the alternative is never named as an alternative, and no explicit when-not condition is given. The use case is implied rather than stated.

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

join_broadcastThe note-taking bot watches a broadcastA

Meeting Bot opens a GifOS broadcast link as a viewer and writes down what is said on the Stage. It never goes on air. Use wait_lines or get_transcript to follow it.

NameRequiredDescriptionDefault
linkYesThe GifOS broadcast link (…/run.html#v=…&bc=1).
topicNoA name for this broadcast in the local list.

TDQS

A4/5.0
Behavior3/5

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

With no annotations, the description does add real behavioral context: the bot is a passive viewer, never goes on air, and produces a transcript. It omits what happens on failure, whether joining twice is idempotent, permission/auth requirements, and whether the broadcast is ended or left running.

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?

Three short sentences, front-loaded with the action, followed by the key safety clarification and the recommended next step. No filler.

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 two-parameter, annotation-free tool, it covers what the bot does, what it does not do, and how to read the results, which substitutes for the missing output schema. A note on return value (e.g. a handle or id) or on re-joining would make it complete.

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 both the link format (…/run.html#v=…&bc=1) and the topic label are already documented. The description adds no further meaning about how topic is used or what happens if it is omitted.

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 and resource (Meeting Bot opens a GifOS broadcast link as a viewer) plus the resulting behavior (transcribes the Stage). The phrase 'as a viewer' and 'It never goes on air' separates it from go_live and create_broadcast among the siblings.

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?

Explicitly frames the follow-up path: 'Use wait_lines or get_transcript to follow it,' naming the alternatives for consuming the transcript. It doesn't spell out exclusions such as when to use create_broadcast or go_live instead, but the passive-viewer framing implies it.

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

leave_meetingLeave the meetingA

The bot leaves and the transcript is saved. Same result as end_meeting. Call this when someone asks the bot to leave. Other participants stay. A scheduled order still inside its window is marked left early.

NameRequiredDescriptionDefault
meeting_idYesThe meeting_id of the room (from create_broadcast or join_broadcast).

TDQS

A4/5.0
Behavior4/5

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

With no annotations, the description does real work: it discloses that the transcript is saved, that other participants remain, and that a scheduled order inside its window is marked left early. It omits idempotency, permission requirements, and behavior when the bot is not in the meeting.

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?

Four short sentences, front-loaded with the action and its effect, then the trigger, then the edge-case behavior. No filler and no 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?

Covers the outcome, the trigger, the effect on other participants, and the scheduling side effect, which is more than most single-parameter tools offer. Missing error/idempotency behavior and any mention of what is returned, though with no output schema that last gap is minor.

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?

Only one parameter and schema coverage is 100%, so the schema already documents meeting_id including its provenance (create_broadcast or join_broadcast). The description adds nothing about the parameter, which is the expected baseline when the schema is complete.

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?

States a specific verb and actor (the bot leaves) plus the key side effect (transcript saved), and distinguishes the scope from end_meeting by noting other participants stay. The line 'Same result as end_meeting' muddies the distinction slightly, since it implies the two tools are interchangeable when the trigger differs.

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?

Gives an explicit trigger condition ('Call this when someone asks the bot to leave') and references the sibling end_meeting as an equivalent-outcome alternative. It stops short of stating when to choose end_meeting over this tool, leaving that boundary to inference.

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

list_meetingsList meetingsA

Meetings this server created or joined, newest first, with their state (scheduled, live, ended).

NameRequiredDescriptionDefault

No parameters

TDQS

A3.7/5.0
Behavior3/5

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

With no annotations, the description carries the full burden. It usefully discloses ordering ('newest first') and the state vocabulary ('scheduled, live, ended'), which is genuine behavioral context about the payload. It says nothing about pagination, result limits, auth requirements, or whether the list is scoped to the caller.

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 with no filler; scope, ordering, and state are front-loaded in one pass. Every clause 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 tool with no output schema, the description covers the essentials: what is listed, in what order, and the state values returned. The main remaining gap is unbounded-result behavior (pagination or truncation), which matters for a list tool but is a single omission.

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?

The tool takes zero parameters, so there is nothing for the description to disambiguate and the baseline of 4 applies. No parameter claims are made that could mislead.

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?

Names a specific verb+resource ('Meetings') and pins down scope ('this server created or joined'), ordering ('newest first'), and the returned state field. It reads as a noun phrase rather than an action statement, and it never names a sibling, but no other tool in the set enumerates meetings, so an agent can still place it.

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?

Usage is only implied: an agent can infer this is the enumeration tool, and the scope qualifier ('this server created or joined') hints at when results apply. There is no explicit when-to-use, no exclusion, and no routing against adjacent tools such as 'status' or 'get_transcript'.

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

list_scheduleList scheduled meetingsA

Orders in the window, soonest first. Recurrence is expanded inside the window. Rows do not include the room password or the admin password. conflicts lists instants where more orders overlap than the cap.

NameRequiredDescriptionDefault
toNoISO end of the window.
fromNoISO start of the window.
phaseNoOnly rows in this phase.
timezoneNoIANA zone used to add local_start and local_end.
flag_overlapsNoWhen true, also list overlaps that are still under the cap.

TDQS

A3.5/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 and does disclose meaningful behavior: ordering, recurrence expansion within the window, omission of room/admin passwords, and the meaning of conflicts. It still omits read-only status, auth requirements, and pagination/limits, so it is not fully transparent.

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?

Four short sentences, front-loaded with the ordering rule, and each sentence adds distinct operational or output information. There is no filler.

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 no-annotation, no-output-schema tool with five parameters, the description is helpful but incomplete: it explains recurrence, password omission, and conflicts, but not the full row shape, default window behavior, pagination, or permissions.

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 schema already defines from, to, phase, timezone, and flag_overlaps. The description adds context about window recurrence and conflicts but does not add parameter-level syntax or clarify flag_overlaps beyond the 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 what is returned, in what order, and notes recurrence expansion, which makes clear this is a schedule-listing tool. It does not explicitly name or distinguish itself from sibling list_meetings, but the title and tool name resolve the resource.

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?

The description gives no explicit when-to-use or when-not-to-use guidance, and it does not mention alternatives such as list_meetings or schedule_meeting. Usage is only implied by the window-oriented return behavior.

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

meetings_reportCross-meeting linesC

Rows a summary is built from. This is not the summary. You write the prose.

NameRequiredDescriptionDefault
sinceNoReturn lines with a seq greater than this. Omit or pass 0 to read from the start.
meeting_idsNoMeetings to include. Omit for every meeting this server knows.

TDQS

C2.8/5.0
Behavior3/5

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

With no annotations, the description carries the full burden, but it does usefully disclose that the output is raw rows rather than a finished summary and that prose generation is the caller's job. It does not describe ordering, row fields, or pagination beyond the schema.

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?

Three terse fragments with zero filler, and the key point (it returns rows, not a summary) is front-loaded. It is a little cryptic, but nothing is wasted.

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?

There is no output schema, so the description should explain the shape of the returned rows, yet it leaves that entirely undefined. For a data-retrieval tool with no annotations and no output schema, the caller is left uncertain what it actually gets back.

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 both optional parameters (since, meeting_ids) are fully documented in the schema. The description adds no parameter meaning beyond that, so baseline 3 is appropriate.

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

Purpose3/5

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

The description says it returns 'rows a summary is built from' and explicitly distinguishes itself from a summary, which gives a vague sense of the resource (raw cross-meeting data). But it never states a clear verb or what a 'row' is, leaving the purpose only implied.

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 tells the agent this is not the summary and that you write the prose, which hints at usage as a data-gathering step. However, it names no alternatives among the many siblings (e.g., tail_lines, get_transcript) and gives no explicit when/when-not conditions.

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

meeting_statusStatus of one meetingB

One meeting, one object: phase, people, whether the bot is thinking, speaking, or listening, and line counts, plus instructions when the meeting has them and a warning when this network blocks the direct connections the meeting needs (then nobody else sees or hears the bot). No room password, admin password, bot password, or model key.

NameRequiredDescriptionDefault
meeting_idYesThe meeting_id of the room (from create_broadcast or join_broadcast).

TDQS

B3.2/5.0
Behavior3/5

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

With no annotations, the description does useful work by disclosing returned state categories, noting a warning when the network blocks direct connections, and clarifying that passwords and model keys are not exposed. However, it does not explicitly state read-only behavior, permission requirements, or absence of side effects, leaving meaningful behavioral gaps.

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 front-loaded with the key framing ('One meeting, one object') and packs relevant return-state details efficiently. It is slightly dense and run-on, but each clause contributes useful context rather than repeating the name or schema.

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?

With no output schema, the description appropriately fills that gap by naming the main returned fields and one important warning condition. It remains incomplete on auth/read-only behavior and sibling disambiguation, but it is sufficient for an agent to understand what the call returns.

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 100%, and the schema already explains that meeting_id identifies the room and comes from create_broadcast or join_broadcast. The description adds no additional parameter semantics beyond that, so the baseline of 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 frames the tool as returning status for one meeting ('One meeting, one object') and enumerates the returned state fields, which distinguishes it from list-oriented siblings. It does not explicitly distinguish itself from similarly named siblings such as status or get_meeting_state, so it stops 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 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 status, get_meeting_state, or list_meetings. The only contextual hint is the schema requirement that meeting_id comes from create_broadcast or join_broadcast, which is prerequisite information rather than usage guidance.

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

muteMute the bot (stop listening)B

Stops captions for this meeting. This tool only stops transcription.

NameRequiredDescriptionDefault
meeting_idYesThe meeting_id of the room (from create_broadcast or join_broadcast).

TDQS

B3.4/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. It usefully discloses the blast radius (transcription only, not the whole bot), but says nothing about reversibility (unmute exists), idempotency, required meeting state, or any permission/authorization requirements for a mutation-like operation.

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?

Two short sentences with the effect front-loaded; nothing is padded. The second sentence partially restates the first ('captions' vs 'transcription'), a minor redundancy rather than waste.

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 one-parameter tool with a fully documented schema, the description is adequate but thin: no output schema and no annotations mean the agent gets no information about what happens after the call, whether unmute restores captions, or whether the meeting must be live. Those gaps keep it at minimum-viable completeness.

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?

There is a single parameter whose schema description is fully covered (100%), including where meeting_id comes from (create_broadcast/join_broadcast). The description adds nothing beyond the schema, so the baseline 3 applies.

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 concrete effect ('Stops captions for this meeting') and scopes it ('only stops transcription'), which resolves the ambiguity of the name 'mute'. It does not name the counterpart sibling (unmute) or distinguish itself from transcript-reading tools like get_transcript/tail_transcript, so differentiation is incomplete but the 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?

Usage is only implied: an agent can infer this is the tool to stop captioning, and the 'only stops transcription' clause hints that other bot functions remain active. There is no explicit when-to-use vs unmute, no prerequisites or state requirements, and no when-not guidance.

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

open_boothOpen the host booth for a broadcastA

Opens the host's seat for this broadcast in a headless browser on this computer, off air. It holds the host key (from host_password, never stored) until close_booth or end_broadcast. While open, go_live, play_video, set_start_time, set_visit_link and end_broadcast work. Opening does not go live.

NameRequiredDescriptionDefault
linkNoA broadcast link not made here. Give meeting_id or link.
host_nameNoThe name viewers see for the host. Default Host.
meeting_idNoThe meeting_id of the room (from create_broadcast or join_broadcast).
host_passwordYesThe host password of this broadcast. Used to hold the host key while the call runs; never stored, logged or returned.

TDQS

A4.1/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and does well: it discloses that the host key is held in memory and never stored, that the session persists until close_booth or end_broadcast, and that opening does not broadcast. It does not cover what happens if a booth is already open, whether the browser session times out, or the cost of launching a headless browser.

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?

Four short sentences, front-loaded with what happens and immediately followed by the key constraint that it is off air. Dense but each sentence carries real information about lifecycle or credential handling.

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?

No output schema, so the description correctly focuses on state and lifecycle, and it covers credential handling, persistence, and downstream effects. The remaining gap is failure/edge behavior (already-open booth, invalid password) that an agent would want before invoking a stateful browser-launching 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 100%, so every parameter is already documented, including the 'never stored' note on host_password. The description reinforces the host_password lifecycle but adds nothing about link vs. meeting_id or host_name, so baseline 3 applies.

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 and resource ('Opens the host's seat for this broadcast') plus the execution environment ('headless browser on this computer') and the state ('off air'). The closing line 'Opening does not go live' explicitly separates it from the sibling tool go_live.

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?

Names the downstream tools that only function while the booth is open (go_live, play_video, set_start_time, set_visit_link, end_broadcast) and the two terminators (close_booth, end_broadcast), which tells an agent where this sits in the sequence. It stops short of an explicit 'do not call if a booth is already open — check booth_status first' condition.

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

play_videoPlay a video live into the broadcastA

Plays a video file from this computer live into the broadcast for everyone watching, now. Viewers see a Prerecorded mark and cannot skip or save it. One video at a time; stop_video stops it.

NameRequiredDescriptionDefault
pathYesPath to a video file on this computer (for example .mp4 or .webm).
meeting_idYesThe meeting_id of the room (from create_broadcast or join_broadcast).

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 and does real work: it discloses the viewer-visible 'Prerecorded' mark, that viewers cannot skip or save, the live/immediate nature, and the single-video exclusivity rule. It doesn't cover failure behavior (e.g., invalid path) or whether the call blocks until the video ends, which keeps it below a 5.

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?

Three short sentences, zero filler, with the core action front-loaded and the exclusivity/termination rule at the end. Every clause carries information an agent would otherwise have to guess.

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 two-parameter action tool with no output schema and no annotations, the description covers what it does, its visible side effects, and its stopping counterpart. The main remaining gap is the absence of any mention of what the call returns or how path errors surface, which matters when there is no output schema to fall back on.

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%, and the schema already explains both 'path' (local file, .mp4/.webm) and 'meeting_id' (from create_broadcast/join_broadcast). The description's phrase 'from this computer' reinforces the path semantics but adds no format or constraint detail beyond the schema, so baseline 3 applies.

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 and resource ('Plays a video file from this computer live into the broadcast') plus the audience scope ('for everyone watching'). It explicitly names the sibling that ends the action (stop_video), so an agent can distinguish it without opening a schema.

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?

Gives clear operational context: it happens 'now' and only 'one video at a time,' with stop_video named as the terminating counterpart. It stops short of routing against other content-sharing siblings such as share_content, so the agent must infer which tool to use for non-video content.

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

saySpeak in the roomA

Meeting Bot says this line out loud in the room now, interrupting any line it is still saying. The words are yours: Meeting Bot answers nothing on its own. The audio is made on this computer by Kokoro. share_content and send_chat are chat, not speech.

NameRequiredDescriptionDefault
textYesWhat to say, in one or two sentences.
voiceNoA Kokoro voice name for this line, for example af_heart (the default). Leave it out to keep the default voice.
meeting_idYesThe meeting_id of the room (from create_broadcast or join_broadcast).

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 and does well: it discloses interruption of current speech, that audio is synthesized locally by Kokoro, and that the bot generates no content of its own. It omits whether the call blocks until speech finishes, how concurrent calls behave, and error conditions such as an invalid voice.

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?

Roughly four short sentences, front-loaded with the action and its interruption behavior, followed by the no-auto-answer note and the sibling disambiguation. Every sentence carries distinct information with no repetition of the schema.

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 3-parameter, no-output-schema tool, the description covers purpose, timing semantics, audio provenance, and sibling routing. The remaining gap is return/latency behavior, which is minor for a speak-now action.

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 all three parameters (text, voice, meeting_id) are already documented with examples and constraints. The description adds no additional semantics about parameters, which is acceptable at this coverage level but earns no bonus.

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+mode: 'says this line out loud in the room now,' with scoping detail that it interrupts in-progress speech. It also explicitly separates itself from share_content and send_chat, so an agent can pick it without opening sibling schemas.

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?

Names the alternatives and the axis of difference: 'share_content and send_chat are chat, not speech,' which tells the agent to choose this tool for audible output. It does not spell out exclusions such as muted rooms or meeting-state prerequisites, so it falls short of a full 5.

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

schedule_meetingSchedule the bot to join a meetingA

Stores a join order for a link that already exists. room_password is the password guests were given in the invite. The bot joins one minute before start unless early_margin says otherwise. end may be omitted; the stored end is then start plus 8 hours. This call does not join yet and does not send mail. The room password is kept on the schedule and is not returned.

NameRequiredDescriptionDefault
endNoWhen overrun starts. Omit for start plus 8 hours.
linkYesThe plain GifOS link from create_broadcast.
startYesWhen the bot should be in the room, as an ISO time.
topicNoRoom name. Defaults to the name from create_broadcast.
timezoneNoIANA time zone. Default UTC.
recurrenceNoThe calendar recurrence rule, stored as sent. An RRULE this process understands is expanded. Anything else is refused.
external_idNoCaller id from a calendar import. A second write with the same id updates the order.
early_marginNoMilliseconds before start to join. Default 60000.
instructionsNoThe owner's goal and instructions for the bot in this meeting (for example the questions of a daily check-in), plain text up to 4000 characters. Stored and handed back to you in list_schedule, meeting_status and the schedule.due and meeting.joined events; this server never runs it. Omit for the default: the bot only transcribes. Do not put passwords or other secrets here.
room_passwordYesThe room password guests type. Stored for rejoin. Not returned.

TDQS

A3.8/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and does substantial work: no join occurs on this call, no mail is sent, the bot joins one minute early by default, a missing end becomes start+8h, the password is persisted but never returned, and non-understood recurrences are refused. Remaining gaps are auth requirements and failure behavior for an unknown link.

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?

Short declarative sentences, front-loaded with what the call does and immediately followed by what it does not do. Mild redundancy around room_password (mentioned at the top and again at the end), but the second mention carries distinct non-return-disclosure value.

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 10-parameter mutation tool with no annotations and no output schema, the description covers defaults, side effects, and secrecy well, but never says what the call returns — an agent has no idea whether it gets a schedule id it will need later for cancel_schedule or update_schedule. No mention of required-field failures or duplicate-link handling either.

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 100%, so the baseline is 3. The description reinforces a few semantics (room_password is the guest-facing invite password; early_margin overrides the one-minute default) but mostly restates defaults the schema already documents, and says nothing about topic, timezone, or external_id's upsert behavior beyond what the schema 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?

"Stores a join order for a link that already exists" names a specific verb and resource, and the description immediately contrasts with the join-now path ("This call does not join yet"), so an agent can separate it from join_broadcast/join_broadcast siblings without opening a schema. It also pins the scope to pre-existing links, distinguishing it from create_broadcast.

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 negative routing ("This call does not join yet and does not send mail") implies that immediate joining belongs to another tool, but the alternative is never named. Nothing distinguishes this from update_schedule or import_schedule, whose names sit right next to it in the sibling list.

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

send_chatSend a chat messageA

Posts a chat line as the bot. Same chat channel as share_content. It does not speak (say does that).

NameRequiredDescriptionDefault
textYesThe chat message, up to 2000 characters.
meeting_idYesThe meeting_id of the room (from create_broadcast or join_broadcast).

TDQS

A3.8/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. It does disclose real behavioral facts beyond the schema: the message is attributed to the bot and is not rendered as speech. It omits whether the line persists in the transcript, permission/auth requirements, and rate limits or failure behavior for a mutation.

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?

Three very short sentences, front-loaded with the action, with zero filler. The middle clause 'Same chat channel as share_content' is a fragment that reads slightly awkwardly but still earns its place as a scoping cue.

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 two-parameter write tool with no output schema and no annotations, the description covers identity, channel and non-speech behavior, which is close to adequate. It stops short of stating what a caller gets back or how failures surface, leaving the no-annotation case partly uncovered.

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% and both parameters document their own meaning and length bounds, so the baseline is 3. The description adds nothing about the 2000-character cap or how meeting_id is obtained that the schema does not already say.

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 and resource ('Posts a chat line') plus the acting identity ('as the bot'), and explicitly separates itself from two siblings: share_content (same channel, different content type) and say (speech output). An agent can pick this tool without inspecting any schema.

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 does not speak (say does that)' gives an explicit when-not and names the alternative tool. There is no guidance on when to prefer send_chat over tail_lines/get_transcript for reading chat, but the main confusion pair (text vs speech) is resolved.

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

set_bot_profileSet how the bot looks in roomsA

Sets the name everyone sees on the bot's tile, and its picture (a GIF, PNG, JPEG or WebP file on this computer, at most 256 KB). Both are kept for later starts. The picture applies to rooms the bot joins from now on. A new name restarts the bot, so it is refused while the bot is in a room: end_meeting first. GIFOS_BOT_NAME and GIFOS_BOT_PICTURE, when set, win again at the next start.

NameRequiredDescriptionDefault
nameNoThe name people see, 3 to 40 characters.
picture_pathNoPath to an image file on this computer.
clear_pictureNotrue removes the picture (people see the first letter of the name).

TDQS

A4.3/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and does so convincingly: persistence across restarts, that a name change restarts the bot, that new pictures apply only to rooms joined from now on, and that a name change is refused mid-room. Missing only what the call returns and how clear_picture interacts with picture_path.

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?

Four tight sentences, front-loaded with the core effect and then the constraints. The final environment-variable sentence is dense but genuinely load-bearing; the only minor cost is the run-on feel of the first sentence.

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 mutation tool with zero annotations and no output schema, the description covers persistence, restart side effects, the room precondition, file constraints, and restart-time overrides. Minor gaps remain around zero-argument calls and argument conflict handling.

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?

Schema coverage is 100%, so the baseline is 3, but the description adds real information beyond the schema: accepted image formats, the 256 KB limit, and the environment-variable precedence that governs these fields. clear_picture's semantics are still only conveyed by the schema, keeping it below 5.

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 names the exact verb and both resources it mutates — the bot's display name and its avatar picture — plus the accepted file formats and size ceiling. Nothing else in the sibling list touches bot appearance, so an agent can distinguish it immediately without opening the schema.

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 supplies a real precondition (the change is refused while the bot is in a room) and routes the agent to end_meeting first, and it flags that GIFOS_BOT_NAME / GIFOS_BOT_PICTURE override these values at next start. That covers when-not and precedence well, though it doesn't discuss calling it with no arguments or the relationship between picture_path and clear_picture.

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

set_start_timeSet when the broadcast startsA

Sets the start time viewers see before the broadcast: a countdown and Add to calendar. Pass an empty start to clear it. Needs the open booth.

NameRequiredDescriptionDefault
startYesISO with an offset, a local time read in timezone, or empty to clear.
timezoneNoIANA time zone, for example America/Chicago. Default UTC.
meeting_idYesThe meeting_id of the room (from create_broadcast or join_broadcast).

TDQS

A4/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and does disclose the user-facing effect (viewers see a countdown and calendar link), the clear/reset semantics, and a prerequisite state (booth must be open). It does not cover permission requirements, idempotency, or what happens if the start time is set after go_live.

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 short sentences, front-loaded with the primary effect, then the clearing behavior and precondition. No filler sentences.

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 3-parameter tool with full schema coverage and no output schema, the description supplies what structured fields cannot: viewer-visible consequences and the booth prerequisite. The only real gap is the timezone argument's interaction with the start string, which the schema largely handles.

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 schema already explains start, timezone and meeting_id in detail. The description's "empty start to clear it" merely restates the schema's "or empty to clear" and says nothing about the timezone parameter — baseline 3 applies.

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?

States a specific verb and resource (set the start time) plus the exact viewer-visible outcome: a countdown and Add to calendar entry. That scoping distinguishes it from scheduling siblings like schedule_meeting, though no sibling is named explicitly.

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?

Gives a concrete precondition ("Needs the open booth") and an explicit alternate use ("Pass an empty start to clear it"), so an agent knows the context for calling it. It stops short of naming when to prefer a different tool or what to do if the broadcast is already live.

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

share_contentShare text or a link into the meetingA

Posts text into the meeting chat as the bot. Same chat channel as send_chat. It does not speak (say does that) and it does not share a screen.

NameRequiredDescriptionDefault
textYesWhat to post into the meeting chat (up to 2000 characters).
meeting_idYesThe meeting_id of the room (from create_broadcast or join_broadcast).

TDQS

A3.5/5.0
Behavior3/5

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

With no annotations, the description carries the full burden. It discloses the important behavioral fact that the message is posted under the bot's identity and lands in the same channel as send_chat, but says nothing about delivery guarantees, permission/prerequisite requirements (bot must be in the meeting), length limits, or failure modes.

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?

Three short sentences, front-loaded with the core action, and the parenthetical exclusion is compact. Minor waste in the parenthetical phrasing ('say does that') but nothing is padded.

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 two-parameter tool with a fully documented schema and no output schema, the description covers action, identity, and channel. The remaining gap is the unresolved relationship with send_chat, which an agent would want resolved before picking between the two.

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 both parameters are already documented including the 2000-character limit and where meeting_id comes from. The description adds no syntax or format detail beyond what the schema provides, so baseline 3 applies.

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?

States a specific verb and resource: posts text into the meeting chat as the bot, and pins down the channel identity by tying it to send_chat. It does not, however, explain how it differs from send_chat despite claiming the same channel, which leaves the closest sibling ambiguous. The title also promises link sharing that the description never addresses.

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?

It gives negative routing ('does not speak — say does that', 'does not share a screen'), which is genuinely useful for excluding siblings. But it never states when to choose this over send_chat, the one tool it explicitly says shares the same channel, so the key selection decision is left to inference.

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

snapshotSnapshot of the Meeting Bot pageA

Who is in the room, and a PNG of the Meeting Bot page this server already has open, returned as image content. Read-only: it does not join another browser and it does not change the meeting. get_meeting_state is the same people list without the picture.

NameRequiredDescriptionDefault
meeting_idYesThe meeting_id of the room (from create_broadcast or join_broadcast).

TDQS

A4.3/5.0
Behavior4/5

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

No annotations are provided, so the description carries the full disclosure burden, and it does state read-only semantics: it does not join another browser and does not change the meeting. That is a real behavioral claim beyond the schema. It leaves minor gaps, such as what happens if no page is open or whether the image is a fresh capture.

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?

Three short clauses in one pass: what is returned, what it does not do, and the alternative. The payload description is front-loaded and no sentence is filler.

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 one-parameter read tool with no output schema, the description covers the return type (image content plus a people list), the side-effect profile, and the sibling alternative. An agent has everything needed to call it 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 coverage is 100% and the single meeting_id parameter is documented in the schema with its origin (create_broadcast or join_broadcast). The description adds nothing about the parameter, so the baseline 3 applies.

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 name 'snapshot' alone is ambiguous, but the description immediately specifies the payload: the participant list plus a PNG of the already-open Meeting Bot page, returned as image content. It also distinguishes itself from get_meeting_state, so an agent can choose between them without opening either schema.

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?

'get_meeting_state is the same people list without the picture' gives a clear routing rule to the sibling tool. It does not state explicit exclusions (e.g. when the picture is not wanted or when the snapshot would be stale), so it falls short of full when/when-not guidance.

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

statusConnector statusB

Is the headless GifOS browser up, which GifOS it uses, and which rooms the bot is in right now.

NameRequiredDescriptionDefault

No parameters

TDQS

B3.4/5.0
Behavior3/5

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

No annotations are supplied, so the description carries the full burden of behavioral disclosure. It does disclose useful behavior: it is a point-in-time ('right now') read that surfaces browser liveness, active GifOS instance, and room membership. It stops short of stating that it is side-effect-free, whether it is cheap to poll, or whether it can fail when the browser is down, which matters for a zero-annotation tool.

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 most important check (is the browser up) and enumerates the remaining two facts without filler. Nothing could be removed without losing information.

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?

With no output schema and no annotations, the description is the only source of truth, and it does list the three things returned. But the return shape is not structured (names of the GifOS identifier or room list are undefined), and the proximity of several other *_status tools leaves the agent unsure when this generic 'status' is the right entry point.

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?

The tool takes no parameters and the schema is an empty object, so there is nothing to disambiguate. Baseline for a zero-parameter tool applies.

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 the concrete resource it reports on: whether the headless GifOS browser is running, which GifOS instance is in use, and which rooms the bot currently occupies. That is far more specific than the bare name 'status'. It does not, however, contrast itself with the several sibling status tools (capacity_status, meeting_status, booth_status), so an agent cannot tell from this text alone which one answers its question.

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 call this versus the other status-like siblings, no mention of preconditions (for example, that it is useful when a join or broadcast appears broken), and no exclusions. The agent must infer usage entirely from the three facts the tool reports.

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

stop_videoStop the videoA

Stops the video play_video started. The broadcast stays open.

NameRequiredDescriptionDefault
meeting_idYesThe meeting_id of the room (from create_broadcast or join_broadcast).

TDQS

A3.5/5.0
Behavior3/5

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

No annotations, so the description bears the full disclosure burden. It does add real behavioral context — the broadcast is left open, so this is a scoped stop, not a teardown — but it says nothing about what happens if no video is currently playing, whether the stop is immediate for all viewers, or 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.

Conciseness4/5

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

Two short sentences, front-loaded with the action and followed by the key state consequence. No filler, though it is perhaps terse for a tool with no annotations.

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 single-parameter, no-output-schema action tool the description covers the essentials: what stops, the counterpart that started it, and the resulting broadcast state. The main gap is the no-op / error case when nothing is playing.

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 100% and the single meeting_id parameter is fully documented in the schema, including its provenance (create_broadcast or join_broadcast). The description adds no parameter detail, which is acceptable since the schema already does the work.

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?

Specific verb (stops) plus resource (the video), tied directly to the sibling play_video that started it, and the phrase 'the broadcast stays open' implicitly differentiates it from end_broadcast. An agent can identify the operation without opening the schema.

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?

Usage is implied by the reference to play_video (call it after starting a video) and by 'the broadcast stays open', which hints that end_broadcast is a separate action. Neither the when-not condition nor the end_broadcast alternative is stated explicitly.

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

tail_eventsTail connector eventsA

Ordered events for the whole connector, including capacity.near, capacity.reached, and capacity.cleared. Pass next back as since.

NameRequiredDescriptionDefault
sinceNoReturn events after this seq. Pass the previous next, or omit to read from the start.

TDQS

A3.5/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. It discloses ordering, event categories, and the cursor handoff, but says nothing about whether the call blocks/streams, how many events are returned per call, or what an empty result means — meaningful gaps for a 'tail' style tool.

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 short sentences, zero filler, with the core purpose front-loaded and the pagination instruction second. Every clause earns its place.

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?

With one optional parameter, no annotations, and no output schema, the description should clarify the return shape more than it does — it names a few event types and implies a 'next' cursor but not the batch size or whether other event types appear. Adequate but with clear gaps for a tailing 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 100% and the schema already says 'Pass the previous next, or omit to read from the start', so the description's cursor note largely repeats structured data. Baseline 3 applies; no extra semantics such as bounds or batch-size interaction are added.

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?

States a specific resource and scope: ordered events for the whole connector, and names concrete event types (capacity.near, capacity.reached, capacity.cleared). It does not explicitly distinguish itself from siblings like tail_lines or tail_transcript, though 'whole connector' implies broader scope than those.

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?

'Pass next back as since' gives concrete continuation guidance for pagination, which is useful. However, there is no statement of when to use this versus tail_lines/tail_transcript, nor any exclusion or prerequisite, so usage is only implied.

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

tail_linesTail speech, chat, and spoken linesA

Every stored line with seq greater than since: speech, chat, and spoken. Filter with kinds. Omit meeting_id to read every meeting. tail_transcript is speech and spoken for one meeting only.

NameRequiredDescriptionDefault
kindsNoWhich lines to return: speech (someone in the room), chat (a chat post), spoken (a line this bot said). Omit for all three.
sinceNoReturn lines with a seq greater than this. Omit or pass 0 to read from the start.
meeting_idNoThe meeting_id of the room (from create_broadcast or join_broadcast).

TDQS

A3.5/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. It does disclose the scope default (omitting meeting_id reads every meeting), which is useful behavioral context. But it says nothing about ordering, result caps, or whether the call blocks — critical for a tool whose name implies streaming/polling, especially with a sibling named wait_lines.

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?

Three short sentences with no filler, and the core payload is front-loaded. The clipped, almost fragmentary phrasing costs a little readability but wastes nothing.

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?

All three parameters are optional with full schema documentation and there is no output schema, so the bar is moderate. Still missing is what a returned 'line' contains, whether results are ordered by seq, and how this differs from wait_lines for an agent deciding between them.

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?

Schema coverage is 100%, so baseline is 3. The description adds meaning beyond the schema by explaining what omitting meeting_id does (reads all meetings), something the schema field text does not state. It otherwise restates the since and kinds semantics already documented.

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 concretely what is returned (stored speech, chat, and spoken lines above a given seq) and explicitly contrasts with tail_transcript. It doesn't differentiate from other tailing siblings such as tail_events or wait_lines, so it falls short of full sibling disambiguation.

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?

'Omit meeting_id to read every meeting' and 'tail_transcript is speech and spoken for one meeting only' give one real routing rule and one alternative. However, the far more consequential question for a 'tail' tool — when to poll this repeatedly versus call wait_lines — is never addressed.

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

tail_transcriptTail the live transcriptA

Speech and spoken lines for one meeting, with seq greater than since. kind is speech for someone in the room, and spoken for a line this bot said. Chat is not included: tail_lines returns chat as well, can filter by kinds, and can read every meeting at once. Works while the meeting is live and after it ends. The same speech and spoken lines are the gifos://meeting/{id}/transcript resource.

NameRequiredDescriptionDefault
sinceNoReturn lines with a seq greater than this. Omit or pass 0 to read from the start.
meeting_idYesThe meeting_id of the room (from create_broadcast or join_broadcast).

TDQS

A4.1/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 and does real work: it discloses that the call is valid during and after the meeting, that chat is excluded, and what the kind values mean. It omits ordering guarantees, page sizes, and whether it blocks versus returns what exists now — relevant since wait_lines exists as a sibling.

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?

Front-loaded with what is returned and the filter, then the exclusion and the resource equivalence. Dense but every sentence carries information; a small amount of overlap with the schema on the since semantics keeps it from a 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?

No output schema and no annotations, so the description must characterize the return value, which it does by naming the line kinds, the seq field, and excluding chat. It stops short of describing ordering or the shape of a line beyond kind, which is the main remaining gap for a tailing 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 coverage is 100% and both parameter descriptions are already documented, including the seq-greater-than semantics and the omit-or-0 default. The description restates the since behavior rather than adding new syntax or edge-case guidance, so it matches the baseline.

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 resource (speech and spoken lines for one meeting) plus a precise incremental filter (seq greater than since), and defines the two kinds. It explicitly separates itself from tail_lines by noting chat is not included, so an agent can distinguish it from siblings without opening a schema.

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?

Names tail_lines as the alternative and gives the conditions that favor it (chat included, kind filtering, all meetings at once), and clarifies it works both during and after the meeting. It does not address the closest sibling, get_transcript, so the choice between live-tailing and fetching a full transcript is left to inference.

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

unmuteUnmute the bot (listen again)B

Turns transcription back on for this meeting.

NameRequiredDescriptionDefault
meeting_idYesThe meeting_id of the room (from create_broadcast or join_broadcast).

TDQS

B3.3/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 the full behavioral burden, and one sentence is not enough: it does not say whether the call is idempotent, what happens if transcription is already enabled, whether the bot must be in the meeting first, or whether the meeting_id must be live. It discloses the state effect and nothing more.

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 front-loaded sentence with no filler; every word contributes to identifying the operation and its scope.

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?

With one fully documented parameter and no output schema, the description is minimally sufficient, but as an unannotated mutation tool it leaves open idempotency, precondition, and error behavior that an agent would want before calling.

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 100% and the schema itself explains meeting_id including its origin (create_broadcast or join_broadcast). The description adds no parameter detail beyond that, so the baseline 3 applies.

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?

States a specific verb ('turns transcription back on') and the resource scope ('for this meeting'), and the 'back on' framing implicitly distinguishes it from the sibling 'mute'. It does not explicitly name mute as its counterpart, but the purpose 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 Guidelines3/5

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

There is no explicit statement of when to call this versus alternatives or what prerequisites apply; usage is only implied by the name and the 'back on' wording, which suggests re-enabling after a mute. An agent can infer it but is not told.

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

update_scheduleUpdate a scheduled meetingB

When occurrence is omitted, the change applies to the rule and the whole future series. When occurrence is set, only that occurrence changes. A transcript that already exists is not rewritten. The admin password is not accepted.

NameRequiredDescriptionDefault
endNoNew end, as an ISO time.
startNoNew start, as an ISO time.
topicNoNew room name.
timezoneNoIANA time zone. Default UTC.
occurrenceNoOne occurrence id. Omit to change the whole future series.
recurrenceNoThe calendar recurrence rule, stored as sent. An RRULE this process understands is expanded. Anything else is refused.
schedule_idYesThe schedule_id from schedule_meeting or list_schedule.
early_marginNoMilliseconds before start to join.
instructionsNoNew goal and instructions for the bot, plain text up to 4000 characters. An empty string clears them (transcribe only). Never run by this server.
room_passwordNoReplaces the stored join password. Not returned.

TDQS

B3.3/5.0
Behavior4/5

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

With no annotations, the description usefully discloses blast radius (omitting occurrence rewrites the whole future series), that existing transcripts are not rewritten, and an auth constraint (admin password is not accepted). These are non-obvious traits beyond the schema. Gaps remain on permissions/ownership requirements and whether changes are reversible.

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?

Three tight sentences, each carrying real information with no filler. It is not front-loaded with the core purpose, which slightly weakens orientation for an agent scanning descriptions.

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 10-parameter mutation tool with no annotations and no output schema, the description covers the highest-risk behavior (series-wide edits, transcript immutability) but omits the response shape and the permission model. Adequate but with clear gaps.

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 100%, so all ten parameters are already documented, including occurrence's omit/set semantics. The description mostly restates the occurrence rule and hints at room_password behavior via the admin-password note, adding little beyond the schema. Baseline 3 is appropriate.

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

Purpose3/5

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

The description never states plainly that this tool updates an existing scheduled meeting; it opens directly with occurrence-scoping semantics. The verb+resource come only from the name and title, and no sibling (cancel_schedule, import_schedule, schedule_meeting) is named or distinguished. Purpose is inferable but not articulated in the description 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?

It gives a clear conditional rule for the occurrence parameter (omit = whole future series, set = single occurrence), which is genuine usage guidance. However, it offers nothing on when to use update_schedule versus cancel_schedule or schedule_meeting, and no prerequisites for editing an existing schedule.

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

wait_linesWait for the next lines (fast)A

Returns as soon as there is a line with seq greater than since (speech, chat, or a line the bot spoke), or after timeout_ms with none. Use it in a loop to follow a live room with the least delay: pass the returned next as since. Lines addressed to the bot (its name, "bot", or a question) carry to_bot: true.

NameRequiredDescriptionDefault
kindsNoWhich lines to return: speech (someone in the room), chat (a chat post), spoken (a line this bot said). Omit for all three.
sinceNoThe next value from the previous call, or 0.
meeting_idNoThe meeting_id of the room (from create_broadcast or join_broadcast).
timeout_msNoHow long to wait for a new line. Default 20000, at most 30000.

TDQS

A4.1/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and does well: it discloses the blocking behavior, the cursor pattern, the timeout fallback, and the to_bot flag on returned lines. It leaves out error behavior and whether the operation is strictly read-only, but the core behavioral model is clear.

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 dense sentences, front-loaded with the return condition and immediately followed by the loop/cursor guidance. No wasted wording.

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 blocking wait tool with no output schema, the description adequately explains what is returned (lines, next, to_bot) and how to continue the loop. It could be more complete about the returned line shape and ordering, but nothing critical for correct invocation is missing.

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?

Schema coverage is 100%, so the baseline is 3. The description still adds real meaning beyond the schema by explaining the cursor convention ('pass the returned next as since') and the to_bot marker in results, which the schema alone does not convey.

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 ('Returns as soon as there is a line with seq greater than since') and explains the blocking-wait semantics clearly. It does not explicitly contrast itself with the sibling tail_lines, so an agent must infer the difference from the 'use it in a loop' phrasing.

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 gives clear usage context: 'Use it in a loop to follow a live room with the least delay: pass the returned next as since.' That tells the agent when this tool is appropriate. It stops short of naming tail_lines as the non-blocking alternative or stating when not to use it.

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. 36 tool updatesv0.1.3
    • First observedbooth_status
    • First observedcancel_schedule
    • First observedcapacity_status
    • First observedclose_booth
    • First observedcreate_broadcast
    • First observedend_broadcast
    • First observedend_meeting
    • First observedget_meeting_state
    • First observedget_transcript
    • First observedgo_live
    • First observedimport_schedule
    • First observedjoin_broadcast
    • First observedleave_meeting
    • First observedlist_meetings
    • First observedlist_schedule
    • First observedmeeting_status
    • First observedmeetings_report
    • First observedmute
    • First observedopen_booth
    • First observedplay_video
    • First observedsay
    • First observedschedule_meeting
    • First observedsend_chat
    • First observedset_bot_profile
    • First observedset_start_time
    • First observedset_visit_link
    • First observedshare_content
    • First observedsnapshot
    • First observedstatus
    • First observedstop_video
    • First observedtail_events
    • First observedtail_lines
    • First observedtail_transcript
    • First observedunmute
    • First observedupdate_schedule
    • First observedwait_lines

TDQS

B3.3/5.0

Scored across 36 tools

Disambiguation2/5

Several tools have explicitly overlapping purposes or are near-duplicates: end_meeting and leave_meeting are stated to be the same result, share_content and send_chat target the same chat channel, and status/capacity_status/booth_status/meeting_status all report status-like information. Transcript reading is split across get_transcript, tail_transcript, tail_lines, and wait_lines, which can easily cause misselection despite detailed descriptions.

Naming Consistency4/5

Most names follow a snake_case verb_noun or clear noun pattern, such as list_meetings, create_broadcast, join_broadcast, end_broadcast, schedule_meeting, and update_schedule. Minor deviations like snapshot, status, mute, unmute, say, and tail_events are still readable and mostly fit the same lowercase snake_case convention.

Tool Count2/5

With 36 tools, the surface is heavy for a broadcast/meeting bot and includes many narrowly scoped operations and status/transcript variants. While the domain is broad, the count exceeds what an agent can comfortably distinguish without extra tool-selection overhead.

Completeness4/5

The tool set covers meeting lifecycle, broadcast creation and hosting, scheduling, chat, speech, transcripts, capacity, and bot status, which is a fairly complete surface for the stated domain. Some gaps remain, such as no direct screen-sharing tool despite share_content being explicitly chat-only, but most core workflows have coverage.

Maintenance

ActivityMaintained
ResponsivenessNo recent community issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    B
    quality
    C
    maintenance
    Enables Grok Bot Chiefs of Staff on separate user accounts to pair with owner approval, exchange addressed task proposals and availability windows, manage asymmetric capability grants, and revoke access through a hosted mailbox service. It runs as a standard MCP stdio client that authenticates with an owner's agent credential and supports contacts listing, message submission, cursor-based inbox polling, and idempotent retries.
    8
    Apache 2.0
  • A
    license
    Not graded
    quality
    C
    maintenance
    A stdio MCP server that lets Grok Bot receive spooled Telegram updates and respond through Telegram — listing and acknowledging pending messages, sending or editing replies, and showing editable progress drafts. It also exposes webhook helpers so the bot can manage its Telegram webhook configuration.
    MIT
  • A
    license
    A
    quality
    C
    maintenance
    Lets MCP clients such as Claude Code, Codex, Cursor, and VS Code drive the Grok Bot desktop app on macOS by listing the user's bots, reading their chats, sending them messages, and answering their multiple-choice questions locally without API keys. All actions run live in the real app via the macOS Accessibility API, with no network calls, telemetry, or dependencies.
    4
    1
    MIT
  • F
    license
    A
    quality
    B
    maintenance
    Enables MCP clients such as Grok Bot to create and join GifOS meetings, send in a visible note-taking bot that transcribes participants locally via Whisper, post chat content, and read back or save the transcript. Everything, including the browser, bot credentials, and transcripts, runs on the user's own machine with no GifOS account or API key.
    10
    -