Skip to main content
Glama

riddle_get

Read-onlyIdempotent

Gets one Riddle - or several, with UUIDs - as a compact build-configuration envelope: {uuid, type, modifiedAt, build, nextBlockId, warnings, published, context}. "build" is the same build config POST /riddle-builder accepts (see the riddle_builder_* tools) - everything the Riddle contains which cannot be expressed there is left out of "build" and reported in "warnings" instead; this never fails on content it cannot express. A property that is simply still at its block type's default is left out too, but never silently: each block carries an "omittedDefaults" map of those properties with the value each one is at - so "not in the config" does not mean "unknown". Read those values, do not resend them: many build properties enable a feature by being present at all, whatever their value. Pass omit: ["build.omittedDefaults"] to leave those maps out for a much smaller response - riddle://reference/block-defaults/ states the same defaults without a Riddle in hand. "id" and "type" are always present on every block and never omitted, and a property the block cannot accept in its current configuration is not listed either. "build" always describes the DRAFT - the version you edit; "published" describes the live version visitors see: null if never published, {"status": "identical"} if the live version is exactly what "build" shows, or {"status": "differs", "build": ..., "warnings": ...} with the live version in full when the draft has unpublished changes; unpublished changes the build config cannot express show up as {"status": "identical", "hasUnpublishedChanges": true, ...}. Every non-null "published" carries "isLive" - whether that version is online right now; it is false after riddle_unpublish, which leaves the last published version stored. Either way, call riddle_publish to make "build" live. "context" adds the extra fields an MCP client typically needs next to the build config: title, image (the Riddle's thumbnail), tags, notes, viewUrl (the public URL the Riddle is reachable under - null when it is not published or its landing page is turned off, with "viewUrlUnavailable": {reason, message} saying which of the two), features (incl. hasIntegration, consistent with riddle_list/riddle_account_list), origin (builder/aiGenerated/apiManageable - whether riddle_delete, riddle_builder_update and palette_customize will work on this Riddle, consistent with riddle_list/riddle_account_list), published/unpublished/modified state (both timestamps set = the Riddle was published and then taken offline again), duplicated (the Riddle this one was copied from, if any), project/team identity, and the preset relationship (id/parentId, whether it is merged from a parent preset and whether it has since drifted from it). Pass includeRiddleData=true to additionally receive the full stored Riddle under "riddle" - a large payload, rarely needed. Use "omit" to leave parts of all this out when you do not need them (see that parameter - it is the only way to make this call smaller), and UUIDs to read several Riddles in one call (see that parameter for its own, lower size budget).

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
UUIDNoThe UUID of the single Riddle you want to read. Pass either this or UUIDs.
omitNoLeaves parts of the response out - the one way to make this call smaller. Valid values: "build", "warnings", "nextBlockId", "published", "context" (whole envelope sections) and "build.omittedDefaults" (the per-block "omittedDefaults" maps inside every build configuration in the response, including "published.build" - not a section, but by far the largest part of one). Omit the parameter, or pass [], for everything; "uuid"/"type"/"modifiedAt" are always present and cannot be left out. Which value to reach for: "build.omittedDefaults" shrinks a read-back by ~85-90% and loses no information, since riddle://reference/block-defaults/<block type> and riddle://reference/riddle-defaults/<riddle type> state the very same defaults - the right default for any call that does not specifically need to know which properties sit at their default. Whole sections are worth naming when you truly do not need them: "published" is a second full build configuration whenever the draft has unpublished changes (about half the response), while "warnings"/"nextBlockId"/"context" together are only a few percent of it - though leaving out "published" also skips re-serializing the live version entirely, and "context" skips that section's extra lookups (features/origin, cover image, preset diff), so the saving is in work as well as bytes. Whatever you leave out is echoed back in "omittedFields", so a key missing from the response never has to be read as "this Riddle has none of that", only as "I asked for it to be left out"; a call that omitted nothing carries no such key. With UUIDs, the same omissions apply to every entry.
UUIDsNoSeveral Riddles to read at once, as Riddle UUID strings, e.g. ["6FA740EW", "OllsevHa"] (max 20 - lower than the other bulk tools, since every entry here is a full build-configuration envelope, not compact state). Pass either this or UUID; rejected together with includeRiddleData: true, which would overflow the inline response size. The response is the {bulk, operation: "read", summary, results} envelope the other bulk tools answer with, but with the full riddle_get envelope per entry. Size is therefore the thing to manage: entries are read in the order you listed them, and once the response would exceed the inline size budget, the remaining ones are reported as {uuid, success: true, truncated: true, ...compact state} instead of their full envelope - never silently dropped - with a top-level "truncated" block naming those UUIDs. Put the Riddles you most need in full first, and use "omit" to fit more of them in: an unfiltered bulk read of several non-trivial Riddles will truncate. omit: ["build.omittedDefaults"] is by far the most effective (~85-90% off every entry); leaving out whole sections saves much less, a build configuration being almost the entire envelope.
includeRiddleDataNoAdditionally returns the full stored Riddle payload (content, settings, preset merge/diff, ...) under "riddle". A large payload (tens of KB) - only for inspecting raw stored data, leave it false for normal use. Not allowed together with UUIDs.

TDQS

A4.6/5.0
Behavior5/5

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

The description far exceeds the readOnly/idempotent annotations: it documents the draft-versus-published contract with the exact status objects, the guarantee that it 'never fails on content it cannot express', the omittedDefaults policy where 'not in the config does not mean unknown', and bulk truncation that is 'never silently dropped.' This is precisely the behavioral depth an agent needs to interpret results safely without trial-and-error calls.

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 first sentence is a model of front-loading, and every clause earns its place — draft vs live, omittedDefaults, context, truncation, size budgets. But the whole text is one long, dense paragraph at reference-chapter density, which makes the key facts harder for an agent to scan; short paragraph or bullet grouping would have increased accessibility without adding words.

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 no output schema and no per-return documentation, the description fully subsists the return contract: it defines every envelope section, every published status value, the omit echo with 'omittedFields', and the multi-read truncation mechanics. An agent could not respond the full response behavior entirely before ever calling this tool; the result is a negligible leftover (e.g., no expansion of what 'nextBlockId' means) that does not affect correctness.

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

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already provides 100% parameter coverage with unusually rich field descriptions, so the baseline is 3 and the tool description earns an extra point by adding cross-cutting semantics not in the schema: the size-class reasoning, the 'only way to make this call smaller' framing, the default-favoring recommended omit of 'build.omittedDefaults', and the order-aware budget for UUIDs. It also delegates precise semantics to the parameters, which is clean but means part of the value comes from the schema's own detail.

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?

The description opens with a specific verb plus resource, 'Gets one Riddle - or several, with UUIDs - as a compact build-configuration envelope', and then enumerates the exact envelope fields. It immediately distinguishes this read tool from sibling writers (riddle_builder_*) and list tools (riddle_list) by stating the scoped modes and the ephemeral build-config view it returns.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

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

The description explicitly names alternatives and their triggers: 'call riddle_publish to make build live', references riddle_builder_* as the write counterpart, points to riddle://reference for default values, and states features/origin consistency with riddle_list/riddle_account_list. It never gives a direct rule such as 'use riddle_list for compact summaries' nor an explicit when-not-to-use flank for this call, so the guidance is strong but marginally less exhaustive.

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.1/5.0
Disambiguation5/5

Each tool has a clear, unique purpose. The riddle_builder_* variants are distinct by Riddle type, questionBank_* and riddleTemplate_* cover separate objects, and stats_* differ by scope. No two tools appear to perform the same function.

Naming Consistency4/5

Naming is largely consistent with domain prefixes (riddle_, questionBank_, riddleTemplate_, stats_, project_, palette_, reference_). Minor deviations like riddle_account_list vs. riddle_list and whoami (no prefix) and riddle_get_embed_code vs. riddle_qr_code slightly break the pattern, but overall it is predictable.

Tool Count2/5

With 62 tools, the server is far beyond the typical 3-15 well-scoped range. While each tool is functional and the breadth reflects the platform's complexity, the sheer number makes it heavy and increases the cognitive load for an agent, suggesting over-granularity.

Completeness5/5

The tool set covers the full lifecycle: create (builder variants), read (get/list), update (builder_update, rename), delete, publish/unpublish, tagging, templates, question banks, stats, projects, palettes, and reference documentation. No obvious domain operation is missing.

Resources