An MCP server that enables collaborative team brainstorming sessions with approval-gate flow, real-time discussion, and coordinator-driven decision making.
Server has 7 tools with complete input schemas and descriptions. Naming follows verb_noun convention (startSession, askGroup, awaitAnswer, recordAnswer, answerClarification, streamPlanning, stopSession). Descriptions are detailed (100-300 chars) and explain WHEN to use each tool. However, parameter descriptions lack specificity on constraints (e.g., timeout_s accepts 1-55 but this is buried in description text, not in schema constraints). Output schemas are not documented in the tool definitions, LLMs cannot see what fields to expect from responses. Error handling is mentioned (redaction best-effort, clarification lookup) but recovery guidance is minimal. Tool composition is sound: each tool has one responsibility, and outputs chain naturally (ticket_id flows from askGroup → awaitAnswer → recordAnswer). Security concern: redaction is 'best-effort' and can be disabled via env var, which is appropriate but should be more prominent in descriptions.
Record the AI host's answer to a participant's clarifying question. Finds the clarification by `clarification_id` on the question identified by `ticket_id`, sets the answer text, and re-emits `clarification_added` so the browser updates in real time. Call this when a participant has asked a clarification via the "Ask the AI" input on the question card.
Post a question to the room. The question is broadcast immediately to all joined participants. Returns a ticket_id to poll for discussion via awaitAnswer. Redaction is best-effort (regex + entropy heuristics, not a security guarantee) — keep secrets out of question text. Set SHARED_BRAINSTORM_NO_REDACT=1 to disable.
Block up to timeout_s seconds for the question to be discussed, then return a snapshot of suggestions and comments accumulated so far. Empty arrays mean no input yet. The ticket stays open across polls — call again to wait for more, or call recordAnswer to commit the final pick.
Record the initiator's final pick for the current question. Resolves the ticket and writes the decision to the transcript. Call this AFTER presenting the team's discussion to the initiator and getting their choice (via AskUserQuestion in the AI CLI).
Start a new shared-brainstorm session with an approval-gate flow. Returns session_id, public_url, invite_text (a pre-formatted message ready to paste), and coordinator_url (a one-time URL for the initiator to drive the session — opened automatically in their browser, also print it as a fallback). Show the invite_text to the user so they can paste it into Slack/email/etc. Participants join as pending and must be approved by the coordinator.
Output schemas not documented. Tool descriptions explain inputs but never specify what fields responses contain (e.g., awaitAnswer returns 'suggestions and comments' but LLMs cannot see the structure). This forces LLMs to guess field names and types, increasing errors in downstream processing.
Numeric parameter constraints (timeout_s: 1-55) are embedded in description text, not in JSON Schema minValue/maxValue. LLMs cannot parse these constraints programmatically and may pass invalid values.
Error handling lacks recovery guidance. Descriptions mention 'best-effort redaction' and 'clarification lookup' but do not tell LLMs what to do if redaction fails or a clarification is not found. No actionable error messages documented.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 54 | 2026-07-28+ | v2 |
End the active session, write the transcript, and clean up resources.
Stream a short line of your planning narration to the team web view as you think. Call this periodically while planning (one concise sentence per call — what you are considering, weighing, or about to do), NOT verbose output or code. Off by default: the coordinator opts in per session and chooses the audience, so a returned `streamed:false` means it is disabled right now — stop narrating until it changes. Text is redacted best-effort before broadcast; keep secrets out. Globally disabled with SHARED_BRAINSTORM_NO_STREAM=1.
Tool composition assumes sequential workflow (startSession → askGroup → awaitAnswer → recordAnswer → stopSession) but does not document this dependency chain. LLMs may call tools out of order or miss required setup steps.
stopSession has empty input schema (no required parameters) but description does not clarify whether it closes the current session or requires a session_id. Ambiguous interface.