Skip to main content
Glama

Close a poll

close_survey
DestructiveIdempotent

Close a live poll, quiz, rating or word cloud so it stops taking answers; its results stay readable. Use it once a survey has collected its answers, calling it once per survey to close several, or use close_room to end every live survey together with the room. show_results sets whether the audience may see this survey's results (false hides them, true allows them); phones and the wall show the live surveys or the most recently closed batch, so an older survey does not return to the screen. Works on an already-closed survey too, but not on a draft. Get survey_id from get_survey_results. Returns the survey, the room and its links. Needs rooms:write.

Input Schema

NameRequiredDescriptionDefault
codeYesThe room's six-character code (letters and digits, any case), from list_rooms or create_room.
survey_idYesThe survey's id, a UUID from get_survey_results.
show_resultsNoWhether the audience may see this survey's results: true allows them, false hides them. Omit to keep the current setting.

Output Schema

NameRequiredDescriptionDefault
roomYes
surveyYes
host_urlYes
join_urlYes
projector_urlYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed4 schema fields changed
    • addedInput schema / properties / code / description
      Added value: +"The room's six-character code (letters and digits, any case), from list_rooms or create_room."
    • addedInput schema / properties / show_results / description
      Added value: +"Whether the audience may see this survey's results: true allows them, false hides them. Omit to keep the current setting."
    • addedInput schema / properties / survey_id / description
      Added value: +"The survey's id, a UUID from get_survey_results."
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "$schema": "https://json-schema.org/draft/2020-12/schema",
      +  "properties": {
      +    "host_url": {
      +      "type": "string"
      +    },
      +    "join_url": {
      +      "type": "string"
      +    },
      +    "projector_url": {
      +      "type": "string"
      +    },
      +    "room": {
      +      "properties": {
      +        "closed_at": {
      +          "anyOf": [
      +            {
      +              "type": "string"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ]
      +        },
      +        "code": {
      +          "type": "string"
      +        },
      +        "counts": {
      +          "properties": {
      +            "active": {
      +              "minimum": 0,
      +              "type": "integer"
      +            },
      +            "answered": {
      +              "description": "Included in questions.",
      +              "minimum": 0,
      +              "type": "integer"
      +            },
      +            "participants": {
      +              "minimum": 0,
      +              "type": "integer"
      +            },
      +            "pending": {
      +              "minimum": 0,
      +              "type": "integer"
      +            },
      +            "questions": {
      +              "description": "Approved and answered questions.",
      +              "minimum": 0,
      +              "type": "integer"
      +            }
      +          },
      +          "required": [
      +            "questions",
      +            "pending",
      +            "answered",
      +            "participants",
      +            "active"
      +          ],
      +          "type": "object"
      +        },
      +        "created_at": {
      +          "type": "string"
      +        },
      +        "description": {
      +          "anyOf": [
      +            {
      +              "type": "string"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ]
      +        },
      +        "name": {
      +          "type": "string"
      +        },
      +        "opened_at": {
      +          "anyOf": [
      +            {
      +              "type": "string"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ]
      +        },
      +        "status": {
      +          "description": "prepared: not joinable yet; open: live; closed: not joinable, content stays readable.",
      +          "enum": [
      +            "prepared",
      +            "open",
      +            "closed"
      +          ],
      +          "type": "string"
      +        }
      +      },
      +      "required": [
      +        "code",
      +        "name",
      +        "status",
      +        "description",
      +        "created_at",
      +        "opened_at",
      +        "closed_at",
      +        "counts"
      +      ],
      +      "type": "object"
      +    },
      +    "survey": {
      +      "properties": {
      +        "average": {
      +          "anyOf": [
      +            {
      +              "type": "number"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ]
      +        },
      +        "correct_option_id": {
      +          "anyOf": [
      +            {
      +              "type": "string"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ]
      +        },
      +        "id": {
      +          "type": "string"
      +        },
      +        "kind": {
      +          "enum": [
      +            "choice",
      +            "rating",
      +            "word_cloud"
      +          ],
      +          "type": "string"
      +        },
      +        "max_label": {
      +          "anyOf": [
      +            {
      +              "type": "string"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ]
      +        },
      +        "min_label": {
      +          "anyOf": [
      +            {
      +              "type": "string"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ]
      +        },
      +        "mode": {
      +          "anyOf": [
      +            {
      +              "enum": [
      +                "single",
      +                "multiple"
      +              ],
      +              "type": "string"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ]
      +        },
      +        "options": {
      +          "items": {
      +            "properties": {
      +              "count": {
      +                "anyOf": [
      +                  {
      +                    "minimum": 0,
      +                    "type": "integer"
      +                  },
      +                  {
      +                    "type": "null"
      +                  }
      +                ]
      +              },
      +              "id": {
      +                "type": "string"
      +              },
      +              "label": {
      +                "type": "string"
      +              },
      +              "position": {
      +                "type": "integer"
      +              },
      +              "score": {
      +                "type": "integer"
      +              }
      +            },
      +            "required": [
      +              "id",
      +              "label",
      +              "position",
      +              "count"
      +            ],
      +            "type": "object"
      +          },
      +          "type": "array"
      +        },
      +        "position": {
      +          "type": "integer"
      +        },
      +        "question": {
      +          "type": "string"
      +        },
      +        "respondents": {
      +          "anyOf": [
      +            {
      +              "minimum": 0,
      +              "type": "integer"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ]
      +        },
      +        "results_public": {
      +          "type": "boolean"
      +        },
      +        "status": {
      +          "description": "draft: not launched; live: taking answers; closed: no longer taking answers.",
      +          "enum": [
      +            "draft",
      +            "live",
      +            "closed"
      +          ],
      +          "type": "string"
      +        },
      +        "words": {
      +          "items": {
      +            "properties": {
      +              "count": {
      +                "minimum": 0,
      +                "type": "integer"
      +              },
      +              "word": {
      +                "type": "string"
      +              }
      +            },
      +            "required": [
      +              "word",
      +              "count"
      +            ],
      +            "type": "object"
      +          },
      +          "type": "array"
      +        }
      +      },
      +      "required": [
      +        "id",
      +        "kind",
      +        "question",
      +        "status",
      +        "position",
      +        "mode",
      +        "results_public",
      +        "respondents",
      +        "options"
      +      ],
      +      "type": "object"
      +    }
      +  },
      +  "required": [
      +    "room",
      +    "survey",
      +    "join_url",
      +    "projector_url",
      +    "host_url"
      +  ],
      +  "type": "object"
      +}
  2. Added

TDQS

A4.6/5.0
Behavior5/5

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

Adds substantial context beyond the annotations: results remain readable (clarifying the destructiveHint scope), the already-closed/no-draft idempotency and failure limits, the audience-visibility effect of show_results, and how phones/walls re-render after a closing batch. It also discloses the required scope (rooms:write).

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 in the first clause, and every later sentence carries operational detail. It is dense (one long semicolon-chained paragraph) with mild redundancy against the show_results schema text, which keeps it from a 5.

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 everything an agent needs: authorization scope, draft/closed-state limits, cross-survey routing to close_room, screen-display consequences, and where to obtain survey_id. With an output schema present, the lack of detailed return-value explanation is not a gap.

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 description's explanation of show_results ('false hides them, true allows them') largely restates the schema text, though it does reinforce the omit-to-keep-current behavior. It adds little beyond the structured field definitions, 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 (close) on a specific resource (live poll/quiz/rating/word cloud) and describes the effect precisely: stops taking answers while results stay readable. It explicitly contrasts itself with the sibling close_room, so an agent can disambiguate 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 Guidelines5/5

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

Gives explicit when-to-use ('once a survey has collected its answers') and names the alternative with its selecting condition ('use close_room to end every live survey together with the room'). It also states edge-case eligibility: works on an already-closed survey but not on a draft.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.