MCP server for managing AI speaking bots in video meetings. Allows joining/leaving meetings with speaking bots and generating persona images.
The server defines 3 tools with partial schema coverage and significant gaps in descriptions and parameter documentation. Tool names follow verb-noun conventions (joinSpeakingMeeting, leaveSpeakingMeeting, generatePersonaImage) which is positive. However, parameter descriptions are inconsistent, many required fields lack type clarity in inline documentation, and output schemas are entirely absent. The joinSpeakingMeeting tool has a complex 'personas' array parameter with a hardcoded enum list embedded in the description (violating best practice to use formal schema constraints), but this information is not machine-parseable. Error handling is minimal, no recovery guidance is provided when tools fail. The server passes API keys as optional parameters, which is a critical security issue.
Generate an image for a persona using Replicate.
Send an AI speaking bot to join a video meeting. The bot can assist in meetings with voice AI capabilities.
Remove a speaking bot from a meeting by its ID.
API keys exposed as optional tool parameters (meetingBaasApiKey in all 3 tools). Credentials must use server-side injection, not tool parameters. Agent traces log all parameters, keys in params leak into logs and prompt history.
No output schemas documented for any tool. LLMs cannot predict return value structure. Without knowing fields like 'botId', 'joinUrl', or 'imageUrl', downstream tool calls and chaining are impossible. Required: document what each tool returns (types, field names, required vs. optional).
Personas enum embedded in description text instead of JSON Schema constraint. The joinSpeakingMeeting tool lists 67 persona names in the description as plain text ('1940s_noir_detective, academic_warlord, ...'). This is not machine-parseable and wastes tokens. Move to a formal enum constraint in the schema.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | C | 63 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 47 | - | v1 |
No error recovery guidance. Tool descriptions do not explain what to do if a call fails (e.g., 'Meeting URL invalid. Use a Zoom/Teams/Google Meet link.' or 'Bot already in meeting, try leaveSpeakingMeeting first.'). LLMs receive no direction on retry logic or alternative paths.
Destructive tool (leaveSpeakingMeeting) lacks confirmation step. Removing a bot from a live meeting is irreversible. No confirmation prompt, dry-run option, or safety guardrail documented.
Parameter descriptions too brief or missing. Examples: 'extra' in joinSpeakingMeeting says 'A JSON object that allows you to add custom data' but does not explain what custom data is expected, constraints, or examples. 'characteristics' in generatePersonaImage has no guidance on valid values or count.
meetingUrl parameter in joinSpeakingMeeting lacks format constraints. Description says 'URL of the meeting to join' but does not specify whether it must be Zoom, Teams, Google Meet, or any meeting platform. Should include examples or a regex pattern.
Tool dependencies undocumented. To use generatePersonaImage output with joinSpeakingMeeting, the LLM must infer that the image URL returned should be passed to botImage. This relationship should be explicit in parameter descriptions.