Skip to main content
Glama

Approve or hide a question

moderate_question
DestructiveIdempotent

Approve a waiting question so the room sees it, or hide it so nobody does (action=approve or hide). Hide accepts only waiting (pending) questions, so an approved question cannot be hidden here; approve accepts waiting questions and questions the AI hid. Use it in rooms with human or AI moderation, where new questions wait for review; get ids from get_room_qa. An AI-hidden question can be approved only by an id you already have, because reads never return hidden questions; a question a person hid cannot be restored. Returns the question's id and new status. Needs rooms:write.

Input Schema

NameRequiredDescriptionDefault
codeYesThe room's six-character code (letters and digits, any case), from list_rooms or create_room.
actionYesapprove: the room sees a waiting question, or one the AI hid. hide: a waiting question is hidden and nobody sees it; only waiting questions can be hidden.
question_idYesThe question's id, a UUID from the questions in get_room_qa's structured result.

Output Schema

NameRequiredDescriptionDefault
roomYes
host_urlYes
join_urlYes
questionYes
projector_urlYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed4 schema fields changed
    • addedInput schema / properties / action / description
      Added value: +"approve: the room sees a waiting question, or one the AI hid. hide: a waiting question is hidden and nobody sees it; only waiting questions can be hidden."
    • 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 / question_id / description
      Added value: +"The question's id, a UUID from the questions in get_room_qa's structured result."
    • 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"
      +    },
      +    "question": {
      +      "properties": {
      +        "id": {
      +          "type": "string"
      +        },
      +        "status": {
      +          "description": "pending: awaiting review; approved: visible; hidden: shown to nobody; answered: marked answered.",
      +          "enum": [
      +            "pending",
      +            "approved",
      +            "hidden",
      +            "answered"
      +          ],
      +          "type": "string"
      +        }
      +      },
      +      "required": [
      +        "id",
      +        "status"
      +      ],
      +      "type": "object"
      +    },
      +    "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"
      +    }
      +  },
      +  "required": [
      +    "room",
      +    "question",
      +    "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?

Annotations cover the safety profile (destructiveHint=true, idempotentHint=true), and the description adds real context beyond them: the required 'rooms:write' permission, the asymmetry that reads never return hidden questions so an AI-hidden question can only be approved via an id you already hold, and the irreversibility of a human-hidden question.

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?

Dense but front-loaded: the core action is in the first clause, then constraints, then id sourcing, then permissions and return. Every sentence carries weight, though the middle state-machine sentences are packed tightly enough to slow 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?

With an output schema present, return values need not be detailed, yet the description still notes the id and new status. For a 3-param, fully-documented mutation tool, the state constraints and permission requirement 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% and the schema already explains each action value, the room code source, and the question_id source. The description restates the approve/hide semantics rather than adding syntax or format detail, 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 pair and resource ('Approve a waiting question... or hide it') with the observable effect on the room ('so the room sees it' / 'so nobody does'). Clearly distinguishable from siblings like get_room_qa and answer_question.

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 context (rooms with human or AI moderation where questions wait for review), names the sibling that supplies ids ('get ids from get_room_qa'), and states exclusions: an approved question cannot be hidden, and a person-hidden question cannot be restored. No inference required.

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.