Skip to main content
Glama

riddle_move

Moves one or many Riddles into another project or into the personal project - and, given no destination, reports whether it could instead of moving anything. Pass UUID for one Riddle or UUIDs (max 100) for several. CHECK MODE (the move check - a mode of this tool, not a tool of its own): leave projectId out (or pass dryRun: true alongside one) and NOTHING is changed - the call runs the very same validation a real move runs and answers {canMoveAll, movable, blocked, addUUIDs, canMoveToPersonal, projects}. Do this first whenever the Riddles were not all created by you, or to explain to a user why a move is impossible. MOVE MODE: pass projectId (a project/team ID from project_list, or the string "personal") and the Riddles move, answering {bulk, operation, summary, results} with the new project per Riddle. Unlike the other bulk tools this one is atomic - it validates the whole set first and moves nothing if any Riddle is rejected - because Riddles that reference each other (a Quiz and the Leaderboard it reports to, a Form embedded in another Riddle) can only move together. So pass exactly the set you intend to move: the same Riddle can be blocked on its own and movable inside a larger call. When something is blocked, act on the top-level "addUUIDs" (or a blocked entry's "resolveByAddingUUIDs"), add those to UUIDs and check again until canMoveAll is true - connections chain, and blocking travels along them, so never read an empty "missingUUIDs" as "this one is fine" or a blocked Riddle as having a problem of its own. A move drops project-specific ad blocks tied to the old project and updates the published version along with the draft, but it does not adopt the new project's design. Every field of the check answer, why "projects" can be shorter than project_list and when a blocker cannot be resolved at all: riddle://reference/concepts/move-restrictions.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
UUIDNoThe UUID of the single Riddle you want to move or check. Pass either this or UUIDs.
UUIDsNoSeveral Riddles to move or check at once, as Riddle UUID strings, e.g. ["6FA740EW", "OllsevHa"] (max 100). Pass either this or UUID. For a move, this must be the complete set of Riddles that have to move together.
dryRunNotrue runs the movability check against the given projectId and changes nothing. Pointless without projectId, which already only checks.
projectIdNoWhere to move the Riddles: the project (team) ID to move them into, as returned by project_list, or the string "personal" for your personal project. There is no default destination - omit this and nothing is moved, the call reports the read-only movability check instead.

Schema Changelog

Changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. Changed11 schema fields changed
    • addedInput schema / oneOf
      Added value: +[
      +  {
      +    "properties": {
      +      "UUID": {
      +        "not": {
      +          "type": "null"
      +        }
      +      },
      +      "UUIDs": {
      +        "const": null
      +      }
      +    },
      +    "required": [
      +      "UUID"
      +    ]
      +  },
      +  {
      +    "properties": {
      +      "UUID": {
      +        "const": null
      +      },
      +      "UUIDs": {
      +        "not": {
      +          "type": "null"
      +        }
      +      }
      +    },
      +    "required": [
      +      "UUIDs"
      +    ]
      +  }
      +]
    • changedInput schema / properties / UUID / description
      Previous value: -"The UUID of the single Riddle you want to move. Pass either this or UUIDs."New value: +"The UUID of the single Riddle you want to move or check. Pass either this or UUIDs."
    • removedInput schema / properties / UUIDs / definition
      Removed value: -{
      -  "items": {
      -    "pattern": "^[A-Za-z0-9]{4,32}$",
      -    "type": "string"
      -  },
      -  "maxItems": 100,
      -  "minItems": 1,
      -  "type": "array",
      -  "uniqueItems": true
      -}
    • changedInput schema / properties / UUIDs / description
      Previous value: -"Several Riddles to move at once, as Riddle UUID strings, e.g. [\"6FA740EW\", \"OllsevHa\"] (max 100). Pass either this or UUID."New value: +"Several Riddles to move or check at once, as Riddle UUID strings, e.g. [\"6FA740EW\", \"OllsevHa\"] (max 100). Pass either this or UUID. For a move, this must be the complete set of Riddles that have to move together."
    • addedInput schema / properties / UUIDs / items
      Added value: +{
      +  "pattern": "^\\s*[A-Za-z0-9]{4,32}\\s*$",
      +  "type": "string"
      +}
    • addedInput schema / properties / UUIDs / maxItems
      Added value: +100
    • addedInput schema / properties / UUIDs / minItems
      Added value: +1
    • addedInput schema / properties / dryRun
      Added value: +{
      +  "default": false,
      +  "description": "true runs the movability check against the given projectId and changes nothing. Pointless without projectId, which already only checks.",
      +  "type": "boolean"
      +}
    • addedInput schema / properties / projectId / anyOf
      Added value: +[
      +  {
      +    "description": "A project (team) ID from project_list.",
      +    "minimum": 1,
      +    "type": "integer"
      +  },
      +  {
      +    "const": "personal",
      +    "description": "Move the Riddles into the personal project.",
      +    "type": "string"
      +  }
      +]
    • changedInput schema / properties / projectId / description
      Previous value: -"The project (team) ID to move the Riddles into, as returned by project_list. Omit or pass null to move them to your personal project instead."New value: +"Where to move the Riddles: the project (team) ID to move them into, as returned by project_list, or the string \"personal\" for your personal project. There is no default destination - omit this and nothing is moved, the call reports the read-only movability check instead."
    • changedInput schema / properties / projectId / type
      Previous value: -[
      -  "null",
      -  "integer"
      -]New value: +[
      +  "null",
      +  "integer",
      +  "string"
      +]
  2. First observed

TDQS

A4.9/5.0
Behavior5/5

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

Goes well beyond the sparse annotations by disclosing that check mode changes nothing, move mode drops project-specific ad blocks and updates the published version alongside the draft, and the operation is atomic. It also reveals the chained-blocking behavior and warns that an empty missingUUIDs must not be interpreted as 'this one is fine.'

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 description is long, but it is well organized into CHECK MODE and MOVE MODE sections and front-loaded with the core action. Every sentence carries distinct, practical information, though a slightly tighter structure would improve scannability.

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 dual-mode, atomic bulk tool with no output schema, the description covers the check response shape, move response shape, the addUUIDs resolution loop, unresolvable blockers, why 'projects' may be shorter than project_list, and links to deeper reference docs. Nothing critical for correct invocation is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/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 substantial meaning: omitting projectId triggers the read-only check, dryRun is pointless without projectId, UUIDs must be the complete set that has to move together, and 'personal' targets the personal project. It also explains how to use the returned addUUIDs fields for iterative resolution.

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 action—moving one or many Riddles into another project or the personal project—and immediately distinguishes its two modes: move vs. check. This clearly separates it from sibling tools like riddle_delete or riddle_get.

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 instructs when to use check mode first (when Riddles were not all created by you, or to explain why a move is impossible) and warns that the tool is atomic, so callers must pass exactly the intended set. It also explains when a move should not proceed and how to iterate using the returned addUUIDs until canMoveAll is true.

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.

TDQS

A4.4/5.0
Disambiguation5/5

Each tool is scoped to a distinct resource/action area: media, palettes, projects, question banks, Riddles, templates, tags, stats, and support. Potentially close pairs like riddle_tag/riddle_tag_delete and question_bank_delete/question_bank_manage are cleanly separated by their descriptions, so an agent can reliably select the right one.

Naming Consistency4/5

The naming is mostly consistent snake_case with strong resource prefixes like riddle_, question_bank_, and template_, followed by clear verbs. Minor deviations such as question_bank_item, riddle_tag, and stats_fetch break the strict verb-noun pattern but remain predictable once the convention is understood.

Tool Count3/5

At 38 tools this is a heavy surface, though the breadth is justified by the many subdomains the server covers: media, palettes, projects, question banks, Riddles, templates, tags, and stats. Most tools earn their place, but the count sits above the range where an agent can quickly survey all options.

Completeness4/5

The set covers the full lifecycle for Riddles, question banks, templates, and tags, including publish/unpublish, move, stats, and media upload/delete. Minor gaps like no media library listing and read-only project settings are workable because media IDs come from upload responses and project permissions are exposed.

Resources