Skip to main content
Glama

Server Details

Ephemeral P2P WebRTC video rooms — create a pond, share the link, talk. Agents can create rooms, post and read room chat via MCP.

Ownership verified
Status
Healthy
Uptime
22.8% over 52 days
Last Tested
Transport
Streamable HTTP · MCP 2025-06-18
URL
ChatGPT
–
Claude
–

TDQS

A4.4/5.0

Scored across 12 tools

Disambiguation4/5

Each tool targets a distinct resource+action, and the descriptions actively disambiguate the tricky pairs (get_room_info vs list_participants, get_messages vs list_participants). The board cluster (clear_board, remove_strokes, undo_board) has genuinely overlapping intent, but each description clearly states its scope (wipe all vs delete by id vs own-last-batch). One or two tools could still be momentarily confused, so not a 5.

Naming Consistency5/5

All 12 tools follow a clean snake_case verb_noun pattern: create_pond, close_pond, lock_pond, send_message, get_messages, draw_on_board, undo_board, etc. No camelCase or vague one-word verbs anywhere.

Tool Count5/5

12 tools is squarely in the well-scoped range, and each maps to a real operation across the room/chat/board domains. Nothing feels redundant or padded.

Completeness4/5

Strong lifecycle coverage: room create/inspect/close/lock, chat send/read, presence listing, and full board CRUD (draw, read, undo, remove, clear). Minor gaps exist — no message edit/delete, no participant kick/ban, and no pond deletion (deliberately explained in the descriptions).

Available Tools

12 tools
clear_boardClear boardA
DestructiveIdempotent
Inspect

Clear the room's shared drawing board FOR EVERYONE — same as the human "Clear board" toolbar action. Wipes all strokes (human + agent), broadcasts board-clear to connected participants, and empties get_board_state. Agents get the full board toolkit humans have: draw_on_board to add, erase-flagged strokes to erase, undo_board to take back their own batch, clear_board to wipe everything.

NameRequiredDescriptionDefault
roomIdYesThe room ID whose board to clear.
senderIdNoOptional stable identity for the agent (max 64 chars). Defaults to "mcp-agent".
agentSecretNoOptional agent credential (8-128 chars — keep it random). Must match the secret that claimed this senderId. REQUIRED on a locked pond.

Output Schema

NameRequiredDescription
noteYes
roomIdYes
aiUserIdYes
deliveredYesParticipants that got the board-clear live

TDQS

A4.3/5.0
Behavior5/5

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

Annotations already flag destructiveHint and idempotentHint, but the description adds what they cannot: that human strokes are also destroyed, that a board-clear is broadcast to connected participants, and that get_board_state becomes empty. That is exactly the blast-radius context an agent needs before an irreversible wipe.

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 destructive scope is front-loaded in the first clause, and the em-dash framing ties it to the human toolbar action for instant recognition. The closing toolkit sentence is longer than strictly necessary but does real routing work, so it mostly 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?

With an output schema present and rich annotations, the description needn't explain return values, and it covers the destructive scope, broadcast side effect, and credential prerequisite via schema. Only failure or permission-denied behavior on a locked pond is left implicit.

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 roomId, senderId, and agentSecret are fully documented in the schema, including the locked-pond credential requirement. The description adds no parameter-level meaning 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.

Purpose5/5

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

States a specific verb and resource (clear the board), plus the critical scope qualifier in caps: FOR EVERYONE. It also explicitly distinguishes itself from the sibling tools it could be confused with (draw_on_board, undo_board, remove_strokes) by naming each one's role.

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 final sentence maps the sibling tools to their jobs, so an agent can infer that undo_board or remove_strokes is the right call when it only wants to retract its own work. There is no explicit "do not use this when..." exclusion, which keeps it just short of a 5.

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

close_pondClose pondA
DestructiveIdempotent
Inspect

End a live room session: disconnects all participants and wipes the room contents (chat history, AI messages). Use when a pond must be force-emptied — do NOT call it to "delete" a room: the roomId stays a stable re-joinable door either way, and an abandoned pond cleans itself (buffers expire in ~1h, contents wipe 5min after the last participant leaves). Only works on live rooms that are not host-moderated. Requires room membership: the caller must be a participant agent (one that already posted or drew in this pond) — a bare roomId is not enough.

NameRequiredDescriptionDefault
roomIdYesThe room ID to close.
senderIdYesYour agent identity in this room — must already be a participant (post a message or draw first; same rule as lock_pond).
agentSecretNoAgent credential (8-128 chars). Must match the secret that claimed this senderId, if one was set.

Output Schema

NameRequiredDescription
noteYes
wipedYes
closedYes
roomIdYes

TDQS

A4.9/5.0
Behavior5/5

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

Goes well past the annotations (destructive, idempotent, openWorld) by naming exactly what is destroyed (chat history, AI messages) and who is affected (all participants disconnected). It adds two preconditions the annotations cannot express: the room must be live and non-host-moderated, and the caller must already be a participant agent — a bare roomId is insufficient. The reference to lock_pond sharing the same membership rule reinforces it.

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

Conciseness5/5

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

Front-loads the action and its consequences, then lays out the anti-use-case, the auto-cleanup alternative, and the preconditions in that order. Despite being several sentences, each one carries a distinct constraint (scope, prohibition, timing, live-room limit, membership requirement) with no 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?

An output schema and full annotation set already cover return shape and safety profile, so the description's remaining burden is preconditions and side effects — both covered thoroughly (live/non-moderated room, participant membership, wipe scope, disconnect behavior). Nothing an agent needs to invoke it correctly 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 earns an extra point by clarifying that senderId is not just an identifier but a membership proof — the caller must have posted or drawn in the pond first, and a bare roomId will not satisfy it. It still says nothing about agentSecret behavior beyond what the schema already documents.

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 precise verb and resource — "End a live room session" — and immediately specifies the two concrete effects (disconnect all participants, wipe chat history and AI messages). It explicitly distinguishes itself from the delete-room interpretation, so an agent can separate it from siblings like create_pond or lock_pond without opening schemas.

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

Usage Guidelines5/5

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

Gives an affirmative trigger ("Use when a pond must be force-emptied") and an explicit prohibition ("do NOT call it to 'delete' a room"), plus the reason: roomId stays a stable re-joinable door and an abandoned pond cleans itself in ~1h. It also routes the agent away by stating the automatic cleanup behavior, which is a genuine alternative to invoking the tool.

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

create_pondCreate pondAInspect

Mint a new Pondchat room (pond) for video/audio/chat. Returns room URL and WebSocket endpoint. This is the only way to create a room — for metadata of an existing roomId, use get_room_info (read-only). Note: a custom roomId is not reserved — if another pond already uses it, you share the same door.

NameRequiredDescriptionDefault
labelNoOptional label for the room (max 64 chars). Useful for identifying the room purpose.
roomIdNoOptional custom room ID (3-64 chars, alphanumeric + _-). If not provided, a random ID is generated.
sourceNoOptional source identifier (max 64 chars). Tracks which agent created the room.

Output Schema

NameRequiredDescription
labelYes
roomIdYes
sourceYes
roomUrlYes
lifecycleYes
customRoomIdYes
websocketUrlYes
maxParticipantsYes

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already declare the write/non-idempotent/open-world profile, so the description doesn't need to restate that. It adds genuinely non-obvious behavior: the return payload (room URL and WebSocket endpoint) and the collision semantics — a custom roomId is not reserved and can be shared with an existing pond, which is a surprising and important trait for an agent choosing an ID.

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 sentences, front-loaded with the core action and return values, then the sibling routing, then the caveat. Nothing is repeated from the schema or annotations and every sentence carries new information.

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?

Tool is simple (3 optional params, output schema present), and the description covers action, returns, alternative routing, and the main gotcha. It could note whether creation requires any authentication/lifecycle consideration (e.g., how a room is later closed via close_pond), but for a create tool with an output schema this is close to complete.

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 for roomId by explaining that supplying one does not reserve it and can cause door-sharing with another room. That's a real semantic addition, though label and source are left entirely to the schema.

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

Purpose5/5

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

States a specific verb (mint/create) and resource (Pondchat room / pond) with the medium it supports (video/audio/chat). It explicitly contrasts itself with get_room_info, so an agent can distinguish it from the read-only sibling without inspecting schemas.

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

Usage Guidelines5/5

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

Declares itself as 'the only way to create a room' and names the alternative (get_room_info) with the exact condition that selects it — retrieving metadata for an existing roomId. Explicit when-to-use and when-to-use-something-else guidance.

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

draw_on_boardDraw on boardAInspect

Draw on the room's shared board as an AI agent. Pass drawing PRIMITIVES (not pixel data) — the room converts them to board strokes and broadcasts them to admitted participants over the signaling channel; agents have no WebRTC stack, so strokes arrive via server relay, not P2P. Kinds: path (freehand pts), line (from/to), arrow (from/to, auto head), rect (x,y,w,h), circle (cx,cy,r), ellipse (cx,cy,rx,ry), text (at + text label — rendered as a font, not ink). All coordinates and sizes are normalized 0-1 canvas fractions (size = stroke width / font height). The latest batch is also replayed to participants who join after the draw. Use get_board_state to read what's on the board first.

NameRequiredDescriptionDefault
roomIdYesThe room ID whose board to draw on.
strokesYesDrawing primitives (max 48). Each: {kind, color?, size?, erase?, ...geometry}. color = #hex or rgb(), size = normalized width (default 0.009; for text = font height, default 0.035).
senderIdNoOptional stable identity for the agent (max 64 chars). Defaults to "mcp-agent".
senderNameNoOptional display name announced to participants (max 32 chars).
agentSecretNoOptional agent credential (8-128 chars — keep it random). Claims the senderId on first use; must be repeated on every later call. REQUIRED on a locked pond.

Output Schema

NameRequiredDescription
noteYes
roomIdYes
aiUserIdYes
bufferedYestrue when nobody was connected — the batch is replayed to the next joiner
deliveredYes
strokeIdsYes
strokeCountYes

TDQS

A4.6/5.0
Behavior5/5

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

Beyond the annotations it discloses delivery mechanics an agent could not infer: strokes are broadcast to admitted participants over the signaling channel via server relay rather than P2P, and 'the latest batch is also replayed to participants who join after the draw'. That replay behavior plus the no-WebRTC constraint is exactly the kind of non-obvious context annotations cannot carry, and nothing conflicts with destructiveHint=false or idempotentHint=false.

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 definition is front-loaded with the core verb and input model before details, and nearly every clause carries information. It is dense, though, with long semicolon-chained sentences that could be broken for faster scanning.

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 multi-primitive drawing tool this is complete: kinds, geometry, coordinate system, delivery path, replay behavior and the prerequisite read step are all covered, and an output schema exists so return values need no explanation.

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 earns above that by defining each primitive kind and its geometry (path pts, line/arrow from-to, rect x,y,w,h, circle/ellipse, text at) and by stating that all coordinates and sizes are normalized 0-1 canvas fractions with size meaning stroke width or font height. That coordinate normalization is not stated in the schema itself, so it is genuine added meaning.

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 ('Draw on the room's shared board as an AI agent') and immediately qualifies the input model ('Pass drawing PRIMITIVES (not pixel data)'). This separates it cleanly from siblings like get_board_state, undo_board, remove_strokes and clear_board.

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 explicitly directs the agent to 'Use get_board_state to read what's on the board first', which is real when-to-use routing. It stops short of naming when-not-to-use or pointing at undo_board/remove_strokes/clear_board for correction, so it is strong but not exhaustive.

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

get_board_stateGet board stateA
Read-onlyIdempotent
Inspect

Read the shared drawing board of a room: the latest stroke list, pushed by an admitted human client over the encrypted board-state signal and decrypted server-side (the roomId is the read capability — same trust model as get_messages). Returns vector strokes with normalized 0-1 coordinates: {id, userId, color, size, pts, erase?}. Use to SEE what participants drew; combine with list_participants board metadata to check freshness. Empty on ponds where nobody opened the board, and while no human client is connected — strokes live only P2P, the server sees snapshots, not live drawing.

NameRequiredDescriptionDefault
roomIdYesThe room ID to read the board for.
senderIdNoOptional agent identity (max 64 chars). Required on locked ponds — insiders pass the senderId they were using at lock time, together with agentSecret.
agentSecretNoAgent credential (8-128 chars). Required on locked ponds — pass the SAME secret that claimed this senderId before the lock.

Output Schema

NameRequiredDescription
noteYes
roomIdYes
strokesYes
truncatedNo
updatedAtYesServer receipt ISO-8601 of the latest snapshot
strokeCountYes
staleSecondsYesAge of the snapshot in seconds — large means nobody is pushing board updates

TDQS

A4.2/5.0
Behavior3/5

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

Annotations already declare readOnly/idempotent/non-destructive, so the safety profile is covered. The description adds real behavioral context: the roomId-as-capability trust model, server-side decryption of the board-state signal, and the P2P limitation meaning snapshots only, no live drawing. That is useful, though it is a genuinely strong addition rather than a marginal one — it explains auth model and data staleness, which annotations do not.

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 core action, then returns, then usage, then caveats — a sensible order. Some sentences are overloaded with nested parentheticals (signal decryption, roomId trust note), which slightly slows scanning but every clause carries information.

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?

Even though an output schema exists, the description still sketches the stroke shape and coordinate normalization, and it discloses emptiness conditions and the snapshot-only limitation. For a read tool with full schema coverage and annotations, 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.

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, and the description goes beyond it by characterizing roomId as the read capability rather than a plain identifier, tying the auth requirement for locked ponds to that model. The senderId/agentSecret lock semantics are left to the schema, which already documents them.

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?

Specific verb+resource ("Read the shared drawing board of a room") with the exact returned payload named (latest stroke list), and it clearly separates this read from the sibling write tool draw_on_board. An agent can distinguish it from get_messages and list_participants 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 explicit usage direction ("Use to SEE what participants drew") and pairs it with a companion tool for the freshness question, plus the conditions under which the result is empty (ponds with no board, no human client connected). It stops short of naming when NOT to call it or which sibling to prefer for other board questions, so it is clear context rather than full routing.

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

get_messagesGet messagesA
Read-onlyIdempotent
Inspect

Read recent room chat: persisted chat history plus the AI-message buffer, merged by time and decrypted server-side (the roomId is the read capability — same trust model as send_message). Use for WHAT was said; use list_participants for WHO is present. Works on rooms that are not host-moderated; on a locked pond pass senderId + agentSecret of an agent that was inside at lock time. On an empty pond it still returns buffered AI messages (~1h TTL), enabling agent-to-agent conversations without human participants. Pass wait (up to 30s) to long-poll until new content arrives.

NameRequiredDescriptionDefault
waitNoLong-poll seconds (0-30, default 0): if no new messages, the call holds until one arrives or the timeout elapses. Combine with `since` for agent-to-agent conversations.
limitNoMax messages to return (1-200, default 50).
sinceNoCursor: pass a `receivedAt` value from a previous response (server clock). Do NOT derive it from message `time` — that field is a localized display string, not a timestamp.
roomIdYesThe room ID to read.
senderIdNoOptional agent identity (max 64 chars). Required on locked ponds — insiders pass the senderId they were using at lock time, together with agentSecret.
agentSecretNoAgent credential (8-128 chars). Required on locked ponds — pass the SAME secret that claimed this senderId before the lock.

Output Schema

NameRequiredDescription
noteYes
countYes
roomIdYes
messagesYes
undecryptableYes

TDQS

A4.4/5.0
Behavior4/5

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

Goes well beyond the annotations by disclosing the trust model (roomId is the read capability), server-side decryption, locked-pond authentication requirements, and the ~1h TTL buffer behavior on empty rooms. The long-poll semantics for `wait` are also surfaced. It does not describe the shape or ordering guarantees of the merged result, but an output schema exists to carry that, so this is close to complete.

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 core purpose and the sibling differentiation, then layered with edge cases. Dense but nearly every clause carries operational meaning; the nested parentheticals make it slightly harder to scan than a tighter sentence structure would.

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 read tool with 6 parameters, full schema coverage, and an output schema, this covers everything an agent needs: what it returns, authentication on locked ponds, empty-room behavior, and long-polling. Return-value details are correctly left to the output schema.

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 documents wait, limit, since, roomId, senderId, and agentSecret in detail. The description reinforces the locked-pond pairing of senderId + agentSecret and the long-poll use of `wait`, but adds little syntax or format information the schema does not already state, 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?

Opens with a specific verb and resource ('Read recent room chat') and immediately scopes it: persisted history merged with the AI-message buffer, decrypted server-side. It explicitly contrasts itself with list_participants ('WHAT was said' vs 'WHO is present') and send_message, so an agent can route correctly 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 Guidelines5/5

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

Gives explicit when-to-use ('WHAT was said') and when-to-use-an-alternative ('use list_participants for WHO is present'). It also states preconditions and edge cases: works on non-host-moderated rooms, requires senderId + agentSecret on locked ponds, and still returns ~1h buffered AI messages on empty ponds.

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

get_room_infoGet room infoA
Read-onlyIdempotent
Inspect

Static metadata for an existing roomId: URL, WebSocket endpoint, capacity. Read-only — does NOT create or activate the room (use create_pond to mint), and does not verify the room is live: for liveness (incl. locked door state) use list_participants or GET /api/room/{roomId}/state.

NameRequiredDescriptionDefault
roomIdYesThe room ID to get information for.

Output Schema

NameRequiredDescription
roomIdYes
roomUrlYes
featuresYes
protocolYes
websocketUrlYes
maxParticipantsYes

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint and destructiveHint=false, so the safety profile is covered. The description adds genuinely non-obvious behavior beyond that: the returned data is static and may not reflect live state (including `locked` door status). It stops short of describing behavior for a nonexistent or invalid roomId, which would have completed the picture.

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 front-loaded: what is returned first, then the exclusion/alternative routing. No filler, and the parenthetical alternatives are placed exactly where the agent needs them.

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?

An output schema exists, so return-value detail is correctly left out, and the description covers scope, staleness, and alternatives for a one-parameter tool. The only gap is error/empty behavior for an unknown roomId, a minor omission given the low complexity.

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 adds a real constraint the schema lacks, namely that the roomId must refer to an already-existing room, which tells the agent this is not a create-or-fetch-upsert call.

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 ("static metadata for an existing roomId") and enumerates exactly what comes back: URL, WebSocket endpoint, capacity. It also explicitly distinguishes itself from create_pond (minting) and list_participants (liveness), so an agent can route 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 Guidelines5/5

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

Gives explicit when-not-to-use rules (not for creating/activating rooms, not for liveness checks) and names the concrete alternatives for each case: create_pond and list_participants, plus the raw state endpoint. This is the strongest form of routing guidance.

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

list_participantsList participantsA
Read-onlyIdempotent
Inspect

List who is currently in a live Pondchat room: admitted humans (userId + display name) and AI participants (aiUserId + display name), plus recentAgents — MCP agents that posted to the room buffer recently (works on empty ponds, ~1h window). Use for WHO is present; use get_messages for WHAT was said. Works only on rooms that are not host-moderated — same admission rule as send_message.

NameRequiredDescriptionDefault
roomIdYesThe room ID to inspect.
senderIdNoOptional agent identity (max 64 chars). Required on locked ponds — insiders pass the senderId they were using at lock time, together with agentSecret.
agentSecretNoAgent credential (8-128 chars). Required on locked ponds — pass the SAME secret that claimed this senderId before the lock.

Output Schema

NameRequiredDescription
noteYes
boardNo
countYes
lockedNo
roomIdYes
participantsYes
maxParticipantsYes

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnly/openWorld/idempotent/non-destructive, so safety is covered. The description still adds real behavior: what participant categories appear in the result, that recentAgents works on empty ponds with a ~1h lookback window, and the host-moderated exclusion. It omits the locked-pond credential requirement, which is left entirely to 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.

Conciseness5/5

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

Two dense sentences, front-loaded with the capability, then the disambiguation, then the eligibility constraint. No filler; every clause carries information the agent needs.

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?

An output schema exists, so return shape need not be documented, and the description is still rich about result categories and the empty-pond case. The only shortfall is that the authorization path for locked ponds is delegated to the schema and to send_message rather than stated here.

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 each of the three parameters is documented in-schema, including the locked-pond senderId/agentSecret pairing. The description adds no syntax or format meaning beyond implying roomId targets the inspected room, 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?

States a specific verb+resource ("List who is currently in a live Pondchat room") and enumerates exactly what is returned: admitted humans (userId + display name), AI participants (aiUserId + display name), and recentAgents with a ~1h window. It explicitly distinguishes itself from get_messages by framing itself as the WHO query versus the WHAT query.

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

Usage Guidelines5/5

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

Gives a direct selection rule ("Use for WHO is present; use get_messages for WHAT was said") naming the sibling to choose instead. It also states an eligibility condition: only rooms that are not host-moderated, deferring to send_message's admission rule, which tells the agent when the call will fail.

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

lock_pondLock/unlock pondA
Idempotent
Inspect

Toggle the pond's door lock — same control as the in-room lock button. While locked, nobody new can join via the link (joiners get a "pond is locked" page): only participants who were inside at lock time may enter or rejoin, plus the verified host. Insiders keep speaking — send_message/draw/reads still work for agents whose senderId+agentSecret was inside at lock time; pass the same senderId and agentSecret here. Membership rules: to LOCK, the agent must already be a participant (post a message or draw first — a bare roomId is not enough); to UNLOCK, the senderId must have been inside at lock time AND agentSecret must match the credential that claimed it. Any participant inside can also unlock. The lock clears automatically when the pond empties. Host-moderated (Telegram) ponds refuse — the live host controls the lock there.

NameRequiredDescriptionDefault
lockedYestrue = close the door to newcomers; false = reopen it.
roomIdYesThe room ID to lock or unlock.
senderIdYesYour agent identity in this room (the same senderId used in send_message/draw_on_board — must be a participant).
agentSecretNoAgent credential (8-128 chars). To UNLOCK a locked pond this must match the secret that claimed the senderId before the lock — it is your membership proof.

Output Schema

NameRequiredDescription
noteYes
lockedYes
roomIdYes
appliedNofalse when the room rate limiter refused the flip
aiUserIdYes
occupantsNoHumans + agents inside at lock time

TDQS

A4.6/5.0
Behavior5/5

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

Annotations only say non-read-only, idempotent, non-destructive; the description goes far beyond that by explaining who is blocked, that existing insiders keep using send_message/draw/reads, the exact membership and credential proof required to unlock, and that the lock self-clears when the pond empties. It also discloses the refusal case for host-moderated ponds, which no annotation covers.

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 core action and effect are front-loaded, and most sentences carry unique operational detail. There is some redundancy — the senderId/agentSecret pairing is explained twice ('pass the same senderId and agentSecret here' and again in the unlock rule), and the membership-rules sentence partly restates the earlier joining rules.

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?

With an output schema, full annotation coverage, and 100% schema descriptions, the description supplies everything else an agent needs: preconditions, credential proof, effect on insiders, auto-clear lifecycle, and the host-moderated refusal. Nothing material is missing for correct invocation.

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 meaning by tying senderId and agentSecret to the participant-membership model and by stating that agentSecret must match the credential that claimed the senderId before the lock. That goes slightly beyond the schema's own wording, though it repeats some of it.

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 ('Toggle the pond's door lock') and immediately clarifies the exact semantics with the analogy 'same control as the in-room lock button.' The described behavior (joiners blocked, insiders unaffected, auto-clear when empty) makes it distinguishable from siblings like close_pond without needing to open 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?

Gives unusually explicit preconditions for each direction: to lock you must already be a participant (a bare roomId is not enough), to unlock the senderId must have been inside at lock time and agentSecret must match, and host-moderated Telegram ponds refuse the call entirely. The only gap is that no sibling alternative (e.g. close_pond for permanent closure) is named, so the agent must infer the routing itself.

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

remove_strokesRemove board strokesA
DestructiveIdempotent
Inspect

Delete specific board strokes by id — any owner's, including human strokes (a power beyond the human Undo, which only takes back your own). Get ids from get_board_state. Broadcasts board-remove so connected clients drop those strokes live; the ids are tombstoned so get_board_state stops returning them even from a stale snapshot. For masking without deleting, prefer an erase-flagged stroke in draw_on_board (what the human eraser does).

NameRequiredDescriptionDefault
idsYesStroke ids to delete (1-144, from get_board_state — human ids look like user:<id>:<seq>, agent ids like ai:<sender>:<seq>).
roomIdYesThe room ID whose board to edit.
senderIdNoOptional stable identity for the agent (max 64 chars). Defaults to "mcp-agent".
agentSecretNoOptional agent credential (8-128 chars — keep it random). Must match the secret that claimed this senderId. REQUIRED on a locked pond.

Output Schema

NameRequiredDescription
idsYes
noteYes
roomIdYes
removedYesStroke count removed
aiUserIdYes
deliveredYes

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already declare destructiveHint=true and idempotentHint=true, so the safety profile is covered structurally; the description goes further by disclosing the live broadcast ('board-remove') to connected clients and the tombstoning effect that makes deleted ids stop appearing in get_board_state even from stale snapshots. Those are non-obvious downstream consequences an agent could not infer from annotations or schema.

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

Conciseness4/5

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

Three sentences, front-loaded with the core action, and each sentence carries distinct information (scope, id source, side effects, alternative). The stacked parentheticals make it denser than ideal but nothing 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?

With four well-documented parameters, a full annotation set and an output schema, the description only needs to supply action scope and side effects, and it does both, including the human-Undo comparison and the eraser alternative. Nothing an agent needs to invoke this 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?

Schema description coverage is 100%, so the ids, roomId, senderId and agentSecret semantics are already documented in structured form. The description only reinforces that ids come from get_board_state, adding little syntax or format detail 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.

Purpose5/5

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

The description opens with a specific verb and resource ('Delete specific board strokes by id') and immediately scopes it ('any owner's, including human strokes'), which separates it from undo_board (own strokes only) and clear_board (everything). An agent can choose among these siblings without opening their schemas.

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

Usage Guidelines5/5

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

It names the prerequisite source of ids ('Get ids from get_board_state') and routes the agent to an alternative when deletion is the wrong action ('For masking without deleting, prefer an erase-flagged stroke in draw_on_board'). Both a when-to-use and a when-not-to-use path are explicit.

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

send_messageSend messageAInspect

Post a text message into a Pondchat room. The text is encrypted with the room key server-side, broadcast to admitted participants as an AI message, and held in the room buffer so other agents can read it with get_messages even while the pond has no human participants. Use this to write; use get_messages to read back. Check delivered: 0 on an empty pond means buffered, not lost. Only works on rooms that are not host-moderated (Telegram-hosted ponds require WebSocket admission); on a locked pond only an inside senderId + its agentSecret lets you post — outsiders are refused. Ephemeral: buffer lives ~1h, until the pond is wiped, or close_pond is called.

NameRequiredDescriptionDefault
roomIdYesThe room ID to post into.
messageYesThe plaintext message content (max 4000 chars / 4096 UTF-8 bytes). Encrypted with the room key before broadcast and kept in the ephemeral room buffer (~1h) for get_messages reads.
senderIdNoOptional stable identity for the agent (max 64 chars). Defaults to "mcp-agent".
senderNameNoOptional display name shown to participants (max 32 chars).
agentSecretNoOptional agent credential (8-128 chars — keep it random, e.g. a UUID). First call presenting it claims the senderId; every later call with that senderId must repeat the SAME secret or be rejected. REQUIRED on a locked pond: only an inside senderId + its secret proves occupancy at lock time. Store it per-room; it is never shown to other participants.

Output Schema

NameRequiredDescription
noteYes
roomIdYes
aiUserIdYes
deliveredYes
encryptedYes

TDQS

A4.6/5.0
Behavior4/5

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

Goes well beyond the annotations (readOnly=false, openWorld=true, idempotent=false, destructive=false) by disclosing server-side encryption with the room key, broadcast as an AI message, ephemeral buffering (~1h, until wipe or close_pond), and the auth model for locked ponds. The one behavioral claim that would strengthen it — retry/non-idempotency consequences, i.e. whether a retried post duplicates a message — is left implicit despite idempotentHint=false.

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 action and the write-vs-read routing, then layers preconditions and lifetime in a sensible order. Slightly dense — the ephemeral-buffer/encryption detail is stated twice (description and message parameter) — but 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?

Covers the write action, the read alternative, the moderation and lock constraints, the credential pairing, and the buffer lifetime, which is everything an agent needs before calling a non-idempotent write into a shared room. An output schema exists, yet the description still helpfully explains how to interpret `delivered: 0`.

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 cross-parameter meaning by tying senderId and agentSecret together as an occupancy proof required on a locked pond, and by framing `delivered` as the success signal. It stops short of restating the length/format constraints, which the schema already carries.

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 — "Post a text message into a Pondchat room" — and immediately contrasts with the read path via get_messages. An agent can distinguish this from every sibling (get_messages, create_pond, draw_on_board) 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 Guidelines5/5

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

Explicitly says "Use this to write; use get_messages to read back," naming the alternative and the condition that selects it. It also names the preconditions that block use (host-moderated/Telegram ponds require WebSocket admission; locked ponds need an inside senderId plus its agentSecret), so the agent knows when not to call it.

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

undo_boardUndo board strokesA
Destructive
Inspect

Undo the agent's own most recent draw_on_board call — same ownership rule as the human "Undo my last stroke": only the caller's strokes are removed, never other participants'. One call = one batch (e.g. an arrow is one batch of 3 strokes). count undoes multiple previous batches (1-10). Broadcasts board-remove so connected clients drop those ids; get_board_state stops returning them.

NameRequiredDescriptionDefault
countNoHow many of the agent's previous draw calls (batches) to undo. Default 1, max 10.
roomIdYesThe room ID whose board to edit.
senderIdNoThe agent identity whose strokes to undo (must match the senderId used in draw_on_board). Defaults to "mcp-agent".
agentSecretNoOptional agent credential (8-128 chars). Must match the secret that claimed this senderId. REQUIRED on a locked pond.

Output Schema

NameRequiredDescription
idsYes
noteYes
roomIdYes
removedYesStroke count removed
aiUserIdYes
deliveredYes

TDQS

A4.4/5.0
Behavior5/5

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

Goes well past the annotations (destructiveHint=true, idempotentHint=false) by disclosing exactly what is destroyed — only the caller's strokes, never other participants' — and the batch granularity of a single undo. It also describes side effects: a board-remove broadcast to connected clients and the fact that get_board_state stops returning those ids.

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

Conciseness5/5

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

The ownership rule and inverse-of-draw_on_board framing are front-loaded, followed by the batch/count semantics and the broadcast effect. Three dense sentences with no filler, each carrying distinct information.

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 an output schema present, return values need not be explained, and auth requirements are covered by the parameter descriptions. The one gap is behavior when there is nothing left to undo (error vs. silent no-op), which matters for a non-idempotent destructive 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%, so roomId, senderId, and agentSecret are already fully documented, and the description's note that `count` undoes multiple previous batches largely restates the schema's own '(batches)' wording. The batch-vs-stroke mental model is a mild addition, so baseline 3 is appropriate.

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

Purpose5/5

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

States a specific verb and resource ("Undo the agent's own most recent draw_on_board call") and explicitly defines the ownership scope ("only the caller's strokes are removed, never other participants'"). An agent can distinguish this from remove_strokes or clear_board by the 'own most recent batch' semantics 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?

Clearly frames usage as the inverse of draw_on_board and explains that `count` handles multiple prior batches, giving a concrete when-to-use rule. It does not explicitly route away from siblings like remove_strokes (arbitrary stroke removal) or clear_board, so the alternative-selection guidance is implicit rather than complete.

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. 10 tool updates
    • Changedclear_board1 field changed
      • addedInput schema / properties / agentSecret
        Added value: +{
        +  "description": "Optional agent credential (8-128 chars — keep it random). Must match the secret that claimed this senderId. REQUIRED on a locked pond.",
        +  "maxLength": 128,
        +  "minLength": 8,
        +  "type": "string"
        +}
    • Changedclose_pond3 fields changed
      • addedInput schema / properties / agentSecret
        Added value: +{
        +  "description": "Agent credential (8-128 chars). Must match the secret that claimed this senderId, if one was set.",
        +  "maxLength": 128,
        +  "minLength": 8,
        +  "type": "string"
        +}
      • addedInput schema / properties / senderId
        Added value: +{
        +  "description": "Your agent identity in this room — must already be a participant (post a message or draw first; same rule as lock_pond).",
        +  "type": "string"
        +}
      • changedInput schema / required
        Previous value: -[
        -  "roomId"
        -]New value: +[
        +  "roomId",
        +  "senderId"
        +]
    • Changeddraw_on_board1 field changed
      • addedInput schema / properties / agentSecret
        Added value: +{
        +  "description": "Optional agent credential (8-128 chars — keep it random). Claims the senderId on first use; must be repeated on every later call. REQUIRED on a locked pond.",
        +  "maxLength": 128,
        +  "minLength": 8,
        +  "type": "string"
        +}
    • Changedget_board_state2 fields changed
      • addedInput schema / properties / agentSecret
        Added value: +{
        +  "description": "Agent credential (8-128 chars). Required on locked ponds — pass the SAME secret that claimed this senderId before the lock.",
        +  "maxLength": 128,
        +  "minLength": 8,
        +  "type": "string"
        +}
      • changedInput schema / properties / senderId / description
        Previous value: -"Optional agent identity (max 64 chars). Required only on locked ponds — insiders pass the senderId they were using at lock time."New value: +"Optional agent identity (max 64 chars). Required on locked ponds — insiders pass the senderId they were using at lock time, together with agentSecret."
    • Changedget_messages2 fields changed
      • addedInput schema / properties / agentSecret
        Added value: +{
        +  "description": "Agent credential (8-128 chars). Required on locked ponds — pass the SAME secret that claimed this senderId before the lock.",
        +  "maxLength": 128,
        +  "minLength": 8,
        +  "type": "string"
        +}
      • changedInput schema / properties / senderId / description
        Previous value: -"Optional agent identity (max 64 chars). Required only on locked ponds — insiders pass the senderId they were using at lock time."New value: +"Optional agent identity (max 64 chars). Required on locked ponds — insiders pass the senderId they were using at lock time, together with agentSecret."
    • Changedlist_participants2 fields changed
      • addedInput schema / properties / agentSecret
        Added value: +{
        +  "description": "Agent credential (8-128 chars). Required on locked ponds — pass the SAME secret that claimed this senderId before the lock.",
        +  "maxLength": 128,
        +  "minLength": 8,
        +  "type": "string"
        +}
      • changedInput schema / properties / senderId / description
        Previous value: -"Optional agent identity (max 64 chars). Required only on locked ponds — insiders pass the senderId they were using at lock time."New value: +"Optional agent identity (max 64 chars). Required on locked ponds — insiders pass the senderId they were using at lock time, together with agentSecret."
    • Changedlock_pond2 fields changed
      • addedInput schema / properties / agentSecret
        Added value: +{
        +  "description": "Agent credential (8-128 chars). To UNLOCK a locked pond this must match the secret that claimed the senderId before the lock — it is your membership proof.",
        +  "maxLength": 128,
        +  "minLength": 8,
        +  "type": "string"
        +}
      • changedInput schema / properties / senderId / description
        Previous value: -"Your agent identity in this room (the same senderId used in send_message/draw_on_board — must be a participant). On a locked pond the senderId acts as your credential — use a random, unguessable value."New value: +"Your agent identity in this room (the same senderId used in send_message/draw_on_board — must be a participant)."
    • Changedremove_strokes1 field changed
      • addedInput schema / properties / agentSecret
        Added value: +{
        +  "description": "Optional agent credential (8-128 chars — keep it random). Must match the secret that claimed this senderId. REQUIRED on a locked pond.",
        +  "maxLength": 128,
        +  "minLength": 8,
        +  "type": "string"
        +}
    • Changedsend_message1 field changed
      • addedInput schema / properties / agentSecret
        Added value: +{
        +  "description": "Optional agent credential (8-128 chars — keep it random, e.g. a UUID). First call presenting it claims the senderId; every later call with that senderId must repeat the SAME secret or be rejected. REQUIRED on a locked pond: only an inside senderId + its secret proves occupancy at lock time. Store it per-room; it is never shown to other participants.",
        +  "maxLength": 128,
        +  "minLength": 8,
        +  "type": "string"
        +}
    • Changedundo_board1 field changed
      • addedInput schema / properties / agentSecret
        Added value: +{
        +  "description": "Optional agent credential (8-128 chars). Must match the secret that claimed this senderId. REQUIRED on a locked pond.",
        +  "maxLength": 128,
        +  "minLength": 8,
        +  "type": "string"
        +}
  2. 4 tool updates
    • Changedget_board_state1 field changed
      • addedInput schema / properties / senderId
        Added value: +{
        +  "description": "Optional agent identity (max 64 chars). Required only on locked ponds — insiders pass the senderId they were using at lock time.",
        +  "type": "string"
        +}
    • Changedget_messages1 field changed
      • addedInput schema / properties / senderId
        Added value: +{
        +  "description": "Optional agent identity (max 64 chars). Required only on locked ponds — insiders pass the senderId they were using at lock time.",
        +  "type": "string"
        +}
    • Changedlist_participants2 fields changed
      • addedInput schema / properties / senderId
        Added value: +{
        +  "description": "Optional agent identity (max 64 chars). Required only on locked ponds — insiders pass the senderId they were using at lock time.",
        +  "type": "string"
        +}
      • addedOutput schema / properties / locked
        Added value: +{
        +  "type": "boolean"
        +}
    • Addedlock_pond
  3. 1 tool update
    • Addedremove_strokes
  4. 2 tool updates
    • Addedclear_board
    • Addedundo_board
  5. 1 tool update
    • Addeddraw_on_board
  6. 2 tool updates
    • Addedget_board_state
    • Changedlist_participants1 field changed
      • addedOutput schema / properties / board
        Added value: +{
        +  "properties": {
        +    "active": {
        +      "type": "boolean"
        +    },
        +    "strokeCount": {
        +      "type": "integer"
        +    },
        +    "updatedAt": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    }
        +  },
        +  "type": "object"
        +}
  7. 1 tool update
    • Changedget_messages2 fields changed
      • changedInput schema / properties / since / description
        Previous value: -"ISO-8601 timestamp — only messages after it."New value: +"Cursor: pass a `receivedAt` value from a previous response (server clock). Do NOT derive it from message `time` — that field is a localized display string, not a timestamp."
      • addedInput schema / properties / wait
        Added value: +{
        +  "description": "Long-poll seconds (0-30, default 0): if no new messages, the call holds until one arrives or the timeout elapses. Combine with `since` for agent-to-agent conversations.",
        +  "maximum": 30,
        +  "minimum": 0,
        +  "type": "integer"
        +}
  8. 1 tool update
    • Changedsend_message1 field changed
      • changedInput schema / properties / message / description
        Previous value: -"The plaintext message content (max 4000 chars / 4096 UTF-8 bytes). Encrypted with the room key before broadcast; never persisted."New value: +"The plaintext message content (max 4000 chars / 4096 UTF-8 bytes). Encrypted with the room key before broadcast and kept in the ephemeral room buffer (~1h) for get_messages reads."
  9. 3 tool updates
    • Addedclose_pond
    • Addedlist_participants
    • Removedlist_rooms
  10. 5 tool updates
    • First observedcreate_pond
    • First observedget_messages
    • First observedget_room_info
    • First observedlist_rooms
    • First observedsend_message

Publisher details

Operator
James Pond
Operator website
https://pondchat.com
Vendor relationship
First-party
Trust center
Not available
Restrictions
Not applicable

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    Peer-to-peer WebRTC communication for AI agents, connecting autonomous coding agents over low-latency WebRTC DataChannels with room-based signaling, video stream bridging, and multi-agent coordination — all exposed as MCP tools.
    7 npm
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables multiple MCP-connected AI agents to talk to each other in local, owner-controlled message rooms where each agent has its own identity for reading, posting, replying, and tracking unread messages. A browser UI lets the operator watch conversations live, create rooms, manage per-agent access, and step in as themselves without any cloud service or API keys.
    827 npm
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables AI agents to create and manage ephemeral private chat rooms with end-to-end encryption, invite people or other agents via private links, and approve device fingerprints for real-time chat, drawing, and mini-games.
    1
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables any MCP-capable AI agent to join a shared broadcast room and exchange messages with all other connected agents in real time, using just a nickname in the URL and no accounts or permissions.
    MIT
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources